compound-engineering-pi 0.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (332) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +124 -0
  3. package/bin/compound-engineering-pi +12 -0
  4. package/bin/compound-plugin +12 -0
  5. package/compound-engineering-pi +12 -0
  6. package/compound-plugin +5 -0
  7. package/docs/pi.md +152 -0
  8. package/extensions/compound-engineering-compat.ts +452 -0
  9. package/package.json +84 -0
  10. package/pi-resources/compound-engineering/mcporter.json +7 -0
  11. package/plugins/coding-tutor/.claude-plugin/plugin.json +9 -0
  12. package/plugins/coding-tutor/README.md +37 -0
  13. package/plugins/coding-tutor/commands/quiz-me.md +1 -0
  14. package/plugins/coding-tutor/commands/sync-tutorials.md +25 -0
  15. package/plugins/coding-tutor/commands/teach-me.md +1 -0
  16. package/plugins/coding-tutor/skills/coding-tutor/SKILL.md +214 -0
  17. package/plugins/coding-tutor/skills/coding-tutor/scripts/create_tutorial.py +207 -0
  18. package/plugins/coding-tutor/skills/coding-tutor/scripts/index_tutorials.py +193 -0
  19. package/plugins/coding-tutor/skills/coding-tutor/scripts/quiz_priority.py +190 -0
  20. package/plugins/coding-tutor/skills/coding-tutor/scripts/setup_tutorials.py +118 -0
  21. package/plugins/compound-engineering/.claude-plugin/plugin.json +33 -0
  22. package/plugins/compound-engineering/CHANGELOG.md +457 -0
  23. package/plugins/compound-engineering/CLAUDE.md +89 -0
  24. package/plugins/compound-engineering/LICENSE +21 -0
  25. package/plugins/compound-engineering/README.md +232 -0
  26. package/plugins/compound-engineering/agents/design/design-implementation-reviewer.md +109 -0
  27. package/plugins/compound-engineering/agents/design/design-iterator.md +224 -0
  28. package/plugins/compound-engineering/agents/design/figma-design-sync.md +190 -0
  29. package/plugins/compound-engineering/agents/docs/ankane-readme-writer.md +65 -0
  30. package/plugins/compound-engineering/agents/research/best-practices-researcher.md +126 -0
  31. package/plugins/compound-engineering/agents/research/framework-docs-researcher.md +106 -0
  32. package/plugins/compound-engineering/agents/research/git-history-analyzer.md +59 -0
  33. package/plugins/compound-engineering/agents/research/learnings-researcher.md +264 -0
  34. package/plugins/compound-engineering/agents/research/repo-research-analyst.md +135 -0
  35. package/plugins/compound-engineering/agents/review/agent-native-reviewer.md +261 -0
  36. package/plugins/compound-engineering/agents/review/architecture-strategist.md +67 -0
  37. package/plugins/compound-engineering/agents/review/code-simplicity-reviewer.md +101 -0
  38. package/plugins/compound-engineering/agents/review/data-integrity-guardian.md +85 -0
  39. package/plugins/compound-engineering/agents/review/data-migration-expert.md +112 -0
  40. package/plugins/compound-engineering/agents/review/deployment-verification-agent.md +174 -0
  41. package/plugins/compound-engineering/agents/review/dhh-rails-reviewer.md +66 -0
  42. package/plugins/compound-engineering/agents/review/julik-frontend-races-reviewer.md +221 -0
  43. package/plugins/compound-engineering/agents/review/kieran-python-reviewer.md +133 -0
  44. package/plugins/compound-engineering/agents/review/kieran-rails-reviewer.md +115 -0
  45. package/plugins/compound-engineering/agents/review/kieran-typescript-reviewer.md +124 -0
  46. package/plugins/compound-engineering/agents/review/pattern-recognition-specialist.md +72 -0
  47. package/plugins/compound-engineering/agents/review/performance-oracle.md +137 -0
  48. package/plugins/compound-engineering/agents/review/schema-drift-detector.md +154 -0
  49. package/plugins/compound-engineering/agents/review/security-sentinel.md +114 -0
  50. package/plugins/compound-engineering/agents/workflow/bug-reproduction-validator.md +82 -0
  51. package/plugins/compound-engineering/agents/workflow/every-style-editor.md +64 -0
  52. package/plugins/compound-engineering/agents/workflow/lint.md +16 -0
  53. package/plugins/compound-engineering/agents/workflow/pr-comment-resolver.md +84 -0
  54. package/plugins/compound-engineering/agents/workflow/spec-flow-analyzer.md +134 -0
  55. package/plugins/compound-engineering/commands/agent-native-audit.md +278 -0
  56. package/plugins/compound-engineering/commands/changelog.md +138 -0
  57. package/plugins/compound-engineering/commands/create-agent-skill.md +9 -0
  58. package/plugins/compound-engineering/commands/deepen-plan.md +546 -0
  59. package/plugins/compound-engineering/commands/deploy-docs.md +113 -0
  60. package/plugins/compound-engineering/commands/feature-video.md +342 -0
  61. package/plugins/compound-engineering/commands/generate_command.md +163 -0
  62. package/plugins/compound-engineering/commands/heal-skill.md +143 -0
  63. package/plugins/compound-engineering/commands/lfg.md +20 -0
  64. package/plugins/compound-engineering/commands/release-docs.md +212 -0
  65. package/plugins/compound-engineering/commands/report-bug.md +151 -0
  66. package/plugins/compound-engineering/commands/reproduce-bug.md +100 -0
  67. package/plugins/compound-engineering/commands/resolve_parallel.md +35 -0
  68. package/plugins/compound-engineering/commands/resolve_todo_parallel.md +37 -0
  69. package/plugins/compound-engineering/commands/slfg.md +32 -0
  70. package/plugins/compound-engineering/commands/technical_review.md +8 -0
  71. package/plugins/compound-engineering/commands/test-browser.md +339 -0
  72. package/plugins/compound-engineering/commands/test-xcode.md +332 -0
  73. package/plugins/compound-engineering/commands/triage.md +311 -0
  74. package/plugins/compound-engineering/commands/workflows/brainstorm.md +124 -0
  75. package/plugins/compound-engineering/commands/workflows/compound.md +239 -0
  76. package/plugins/compound-engineering/commands/workflows/plan.md +551 -0
  77. package/plugins/compound-engineering/commands/workflows/review.md +526 -0
  78. package/plugins/compound-engineering/commands/workflows/work.md +433 -0
  79. package/plugins/compound-engineering/skills/agent-browser/SKILL.md +223 -0
  80. package/plugins/compound-engineering/skills/agent-native-architecture/SKILL.md +435 -0
  81. package/plugins/compound-engineering/skills/agent-native-architecture/references/action-parity-discipline.md +409 -0
  82. package/plugins/compound-engineering/skills/agent-native-architecture/references/agent-execution-patterns.md +467 -0
  83. package/plugins/compound-engineering/skills/agent-native-architecture/references/agent-native-testing.md +582 -0
  84. package/plugins/compound-engineering/skills/agent-native-architecture/references/architecture-patterns.md +478 -0
  85. package/plugins/compound-engineering/skills/agent-native-architecture/references/dynamic-context-injection.md +338 -0
  86. package/plugins/compound-engineering/skills/agent-native-architecture/references/files-universal-interface.md +301 -0
  87. package/plugins/compound-engineering/skills/agent-native-architecture/references/from-primitives-to-domain-tools.md +359 -0
  88. package/plugins/compound-engineering/skills/agent-native-architecture/references/mcp-tool-design.md +506 -0
  89. package/plugins/compound-engineering/skills/agent-native-architecture/references/mobile-patterns.md +871 -0
  90. package/plugins/compound-engineering/skills/agent-native-architecture/references/product-implications.md +443 -0
  91. package/plugins/compound-engineering/skills/agent-native-architecture/references/refactoring-to-prompt-native.md +317 -0
  92. package/plugins/compound-engineering/skills/agent-native-architecture/references/self-modification.md +269 -0
  93. package/plugins/compound-engineering/skills/agent-native-architecture/references/shared-workspace-architecture.md +680 -0
  94. package/plugins/compound-engineering/skills/agent-native-architecture/references/system-prompt-design.md +250 -0
  95. package/plugins/compound-engineering/skills/andrew-kane-gem-writer/SKILL.md +184 -0
  96. package/plugins/compound-engineering/skills/andrew-kane-gem-writer/references/database-adapters.md +231 -0
  97. package/plugins/compound-engineering/skills/andrew-kane-gem-writer/references/module-organization.md +121 -0
  98. package/plugins/compound-engineering/skills/andrew-kane-gem-writer/references/rails-integration.md +183 -0
  99. package/plugins/compound-engineering/skills/andrew-kane-gem-writer/references/resources.md +119 -0
  100. package/plugins/compound-engineering/skills/andrew-kane-gem-writer/references/testing-patterns.md +261 -0
  101. package/plugins/compound-engineering/skills/brainstorming/SKILL.md +190 -0
  102. package/plugins/compound-engineering/skills/compound-docs/SKILL.md +511 -0
  103. package/plugins/compound-engineering/skills/compound-docs/assets/critical-pattern-template.md +34 -0
  104. package/plugins/compound-engineering/skills/compound-docs/assets/resolution-template.md +93 -0
  105. package/plugins/compound-engineering/skills/compound-docs/references/yaml-schema.md +65 -0
  106. package/plugins/compound-engineering/skills/compound-docs/schema.yaml +176 -0
  107. package/plugins/compound-engineering/skills/create-agent-skills/SKILL.md +275 -0
  108. package/plugins/compound-engineering/skills/create-agent-skills/references/api-security.md +226 -0
  109. package/plugins/compound-engineering/skills/create-agent-skills/references/be-clear-and-direct.md +531 -0
  110. package/plugins/compound-engineering/skills/create-agent-skills/references/best-practices.md +404 -0
  111. package/plugins/compound-engineering/skills/create-agent-skills/references/common-patterns.md +595 -0
  112. package/plugins/compound-engineering/skills/create-agent-skills/references/core-principles.md +437 -0
  113. package/plugins/compound-engineering/skills/create-agent-skills/references/executable-code.md +175 -0
  114. package/plugins/compound-engineering/skills/create-agent-skills/references/iteration-and-testing.md +474 -0
  115. package/plugins/compound-engineering/skills/create-agent-skills/references/official-spec.md +134 -0
  116. package/plugins/compound-engineering/skills/create-agent-skills/references/recommended-structure.md +168 -0
  117. package/plugins/compound-engineering/skills/create-agent-skills/references/skill-structure.md +152 -0
  118. package/plugins/compound-engineering/skills/create-agent-skills/references/using-scripts.md +113 -0
  119. package/plugins/compound-engineering/skills/create-agent-skills/references/using-templates.md +112 -0
  120. package/plugins/compound-engineering/skills/create-agent-skills/references/workflows-and-validation.md +510 -0
  121. package/plugins/compound-engineering/skills/create-agent-skills/templates/router-skill.md +73 -0
  122. package/plugins/compound-engineering/skills/create-agent-skills/templates/simple-skill.md +33 -0
  123. package/plugins/compound-engineering/skills/create-agent-skills/workflows/add-reference.md +96 -0
  124. package/plugins/compound-engineering/skills/create-agent-skills/workflows/add-script.md +93 -0
  125. package/plugins/compound-engineering/skills/create-agent-skills/workflows/add-template.md +74 -0
  126. package/plugins/compound-engineering/skills/create-agent-skills/workflows/add-workflow.md +120 -0
  127. package/plugins/compound-engineering/skills/create-agent-skills/workflows/audit-skill.md +138 -0
  128. package/plugins/compound-engineering/skills/create-agent-skills/workflows/create-domain-expertise-skill.md +605 -0
  129. package/plugins/compound-engineering/skills/create-agent-skills/workflows/create-new-skill.md +191 -0
  130. package/plugins/compound-engineering/skills/create-agent-skills/workflows/get-guidance.md +121 -0
  131. package/plugins/compound-engineering/skills/create-agent-skills/workflows/upgrade-to-router.md +161 -0
  132. package/plugins/compound-engineering/skills/create-agent-skills/workflows/verify-skill.md +204 -0
  133. package/plugins/compound-engineering/skills/dhh-rails-style/SKILL.md +185 -0
  134. package/plugins/compound-engineering/skills/dhh-rails-style/references/architecture.md +653 -0
  135. package/plugins/compound-engineering/skills/dhh-rails-style/references/controllers.md +303 -0
  136. package/plugins/compound-engineering/skills/dhh-rails-style/references/frontend.md +510 -0
  137. package/plugins/compound-engineering/skills/dhh-rails-style/references/gems.md +266 -0
  138. package/plugins/compound-engineering/skills/dhh-rails-style/references/models.md +359 -0
  139. package/plugins/compound-engineering/skills/dhh-rails-style/references/testing.md +338 -0
  140. package/plugins/compound-engineering/skills/document-review/SKILL.md +87 -0
  141. package/plugins/compound-engineering/skills/dspy-ruby/SKILL.md +737 -0
  142. package/plugins/compound-engineering/skills/dspy-ruby/assets/config-template.rb +187 -0
  143. package/plugins/compound-engineering/skills/dspy-ruby/assets/module-template.rb +300 -0
  144. package/plugins/compound-engineering/skills/dspy-ruby/assets/signature-template.rb +221 -0
  145. package/plugins/compound-engineering/skills/dspy-ruby/references/core-concepts.md +674 -0
  146. package/plugins/compound-engineering/skills/dspy-ruby/references/observability.md +366 -0
  147. package/plugins/compound-engineering/skills/dspy-ruby/references/optimization.md +603 -0
  148. package/plugins/compound-engineering/skills/dspy-ruby/references/providers.md +418 -0
  149. package/plugins/compound-engineering/skills/dspy-ruby/references/toolsets.md +502 -0
  150. package/plugins/compound-engineering/skills/every-style-editor/SKILL.md +134 -0
  151. package/plugins/compound-engineering/skills/every-style-editor/references/EVERY_WRITE_STYLE.md +529 -0
  152. package/plugins/compound-engineering/skills/file-todos/SKILL.md +252 -0
  153. package/plugins/compound-engineering/skills/file-todos/assets/todo-template.md +155 -0
  154. package/plugins/compound-engineering/skills/frontend-design/SKILL.md +42 -0
  155. package/plugins/compound-engineering/skills/gemini-imagegen/SKILL.md +237 -0
  156. package/plugins/compound-engineering/skills/gemini-imagegen/requirements.txt +2 -0
  157. package/plugins/compound-engineering/skills/gemini-imagegen/scripts/compose_images.py +157 -0
  158. package/plugins/compound-engineering/skills/gemini-imagegen/scripts/edit_image.py +144 -0
  159. package/plugins/compound-engineering/skills/gemini-imagegen/scripts/gemini_images.py +263 -0
  160. package/plugins/compound-engineering/skills/gemini-imagegen/scripts/generate_image.py +133 -0
  161. package/plugins/compound-engineering/skills/gemini-imagegen/scripts/multi_turn_chat.py +216 -0
  162. package/plugins/compound-engineering/skills/git-worktree/SKILL.md +302 -0
  163. package/plugins/compound-engineering/skills/git-worktree/scripts/worktree-manager.sh +337 -0
  164. package/plugins/compound-engineering/skills/orchestrating-swarms/SKILL.md +1718 -0
  165. package/plugins/compound-engineering/skills/rclone/SKILL.md +150 -0
  166. package/plugins/compound-engineering/skills/rclone/scripts/check_setup.sh +60 -0
  167. package/plugins/compound-engineering/skills/resolve-pr-parallel/SKILL.md +89 -0
  168. package/plugins/compound-engineering/skills/resolve-pr-parallel/scripts/get-pr-comments +68 -0
  169. package/plugins/compound-engineering/skills/resolve-pr-parallel/scripts/resolve-pr-thread +23 -0
  170. package/plugins/compound-engineering/skills/skill-creator/SKILL.md +210 -0
  171. package/plugins/compound-engineering/skills/skill-creator/scripts/init_skill.py +303 -0
  172. package/plugins/compound-engineering/skills/skill-creator/scripts/package_skill.py +110 -0
  173. package/plugins/compound-engineering/skills/skill-creator/scripts/quick_validate.py +65 -0
  174. package/prompts/deepen-plan.md +549 -0
  175. package/prompts/feature-video.md +341 -0
  176. package/prompts/resolve_todo_parallel.md +36 -0
  177. package/prompts/test-browser.md +342 -0
  178. package/prompts/workflows-brainstorm.md +123 -0
  179. package/prompts/workflows-compound.md +238 -0
  180. package/prompts/workflows-plan.md +550 -0
  181. package/prompts/workflows-review.md +529 -0
  182. package/prompts/workflows-work.md +432 -0
  183. package/skills/agent-browser/SKILL.md +223 -0
  184. package/skills/agent-native-architecture/SKILL.md +435 -0
  185. package/skills/agent-native-architecture/references/action-parity-discipline.md +409 -0
  186. package/skills/agent-native-architecture/references/agent-execution-patterns.md +467 -0
  187. package/skills/agent-native-architecture/references/agent-native-testing.md +582 -0
  188. package/skills/agent-native-architecture/references/architecture-patterns.md +478 -0
  189. package/skills/agent-native-architecture/references/dynamic-context-injection.md +338 -0
  190. package/skills/agent-native-architecture/references/files-universal-interface.md +301 -0
  191. package/skills/agent-native-architecture/references/from-primitives-to-domain-tools.md +359 -0
  192. package/skills/agent-native-architecture/references/mcp-tool-design.md +506 -0
  193. package/skills/agent-native-architecture/references/mobile-patterns.md +871 -0
  194. package/skills/agent-native-architecture/references/product-implications.md +443 -0
  195. package/skills/agent-native-architecture/references/refactoring-to-prompt-native.md +317 -0
  196. package/skills/agent-native-architecture/references/self-modification.md +269 -0
  197. package/skills/agent-native-architecture/references/shared-workspace-architecture.md +680 -0
  198. package/skills/agent-native-architecture/references/system-prompt-design.md +250 -0
  199. package/skills/agent-native-reviewer/SKILL.md +260 -0
  200. package/skills/andrew-kane-gem-writer/SKILL.md +184 -0
  201. package/skills/andrew-kane-gem-writer/references/database-adapters.md +231 -0
  202. package/skills/andrew-kane-gem-writer/references/module-organization.md +121 -0
  203. package/skills/andrew-kane-gem-writer/references/rails-integration.md +183 -0
  204. package/skills/andrew-kane-gem-writer/references/resources.md +119 -0
  205. package/skills/andrew-kane-gem-writer/references/testing-patterns.md +261 -0
  206. package/skills/ankane-readme-writer/SKILL.md +63 -0
  207. package/skills/architecture-strategist/SKILL.md +66 -0
  208. package/skills/best-practices-researcher/SKILL.md +125 -0
  209. package/skills/brainstorming/SKILL.md +190 -0
  210. package/skills/bug-reproduction-validator/SKILL.md +81 -0
  211. package/skills/code-simplicity-reviewer/SKILL.md +100 -0
  212. package/skills/compound-docs/SKILL.md +511 -0
  213. package/skills/compound-docs/assets/critical-pattern-template.md +34 -0
  214. package/skills/compound-docs/assets/resolution-template.md +93 -0
  215. package/skills/compound-docs/references/yaml-schema.md +65 -0
  216. package/skills/compound-docs/schema.yaml +176 -0
  217. package/skills/create-agent-skills/SKILL.md +275 -0
  218. package/skills/create-agent-skills/references/api-security.md +226 -0
  219. package/skills/create-agent-skills/references/be-clear-and-direct.md +531 -0
  220. package/skills/create-agent-skills/references/best-practices.md +404 -0
  221. package/skills/create-agent-skills/references/common-patterns.md +595 -0
  222. package/skills/create-agent-skills/references/core-principles.md +437 -0
  223. package/skills/create-agent-skills/references/executable-code.md +175 -0
  224. package/skills/create-agent-skills/references/iteration-and-testing.md +474 -0
  225. package/skills/create-agent-skills/references/official-spec.md +134 -0
  226. package/skills/create-agent-skills/references/recommended-structure.md +168 -0
  227. package/skills/create-agent-skills/references/skill-structure.md +152 -0
  228. package/skills/create-agent-skills/references/using-scripts.md +113 -0
  229. package/skills/create-agent-skills/references/using-templates.md +112 -0
  230. package/skills/create-agent-skills/references/workflows-and-validation.md +510 -0
  231. package/skills/create-agent-skills/templates/router-skill.md +73 -0
  232. package/skills/create-agent-skills/templates/simple-skill.md +33 -0
  233. package/skills/create-agent-skills/workflows/add-reference.md +96 -0
  234. package/skills/create-agent-skills/workflows/add-script.md +93 -0
  235. package/skills/create-agent-skills/workflows/add-template.md +74 -0
  236. package/skills/create-agent-skills/workflows/add-workflow.md +120 -0
  237. package/skills/create-agent-skills/workflows/audit-skill.md +138 -0
  238. package/skills/create-agent-skills/workflows/create-domain-expertise-skill.md +605 -0
  239. package/skills/create-agent-skills/workflows/create-new-skill.md +191 -0
  240. package/skills/create-agent-skills/workflows/get-guidance.md +121 -0
  241. package/skills/create-agent-skills/workflows/upgrade-to-router.md +161 -0
  242. package/skills/create-agent-skills/workflows/verify-skill.md +204 -0
  243. package/skills/data-integrity-guardian/SKILL.md +84 -0
  244. package/skills/data-migration-expert/SKILL.md +111 -0
  245. package/skills/deployment-verification-agent/SKILL.md +173 -0
  246. package/skills/design-implementation-reviewer/SKILL.md +107 -0
  247. package/skills/design-iterator/SKILL.md +222 -0
  248. package/skills/dhh-rails-reviewer/SKILL.md +65 -0
  249. package/skills/dhh-rails-style/SKILL.md +185 -0
  250. package/skills/dhh-rails-style/references/architecture.md +653 -0
  251. package/skills/dhh-rails-style/references/controllers.md +303 -0
  252. package/skills/dhh-rails-style/references/frontend.md +510 -0
  253. package/skills/dhh-rails-style/references/gems.md +266 -0
  254. package/skills/dhh-rails-style/references/models.md +359 -0
  255. package/skills/dhh-rails-style/references/testing.md +338 -0
  256. package/skills/document-review/SKILL.md +87 -0
  257. package/skills/dspy-ruby/SKILL.md +737 -0
  258. package/skills/dspy-ruby/assets/config-template.rb +187 -0
  259. package/skills/dspy-ruby/assets/module-template.rb +300 -0
  260. package/skills/dspy-ruby/assets/signature-template.rb +221 -0
  261. package/skills/dspy-ruby/references/core-concepts.md +674 -0
  262. package/skills/dspy-ruby/references/observability.md +366 -0
  263. package/skills/dspy-ruby/references/optimization.md +603 -0
  264. package/skills/dspy-ruby/references/providers.md +418 -0
  265. package/skills/dspy-ruby/references/toolsets.md +502 -0
  266. package/skills/every-style-editor/SKILL.md +134 -0
  267. package/skills/every-style-editor/references/EVERY_WRITE_STYLE.md +529 -0
  268. package/skills/every-style-editor-2/SKILL.md +62 -0
  269. package/skills/figma-design-sync/SKILL.md +188 -0
  270. package/skills/file-todos/SKILL.md +252 -0
  271. package/skills/file-todos/assets/todo-template.md +155 -0
  272. package/skills/framework-docs-researcher/SKILL.md +105 -0
  273. package/skills/frontend-design/SKILL.md +42 -0
  274. package/skills/gemini-imagegen/SKILL.md +237 -0
  275. package/skills/gemini-imagegen/requirements.txt +2 -0
  276. package/skills/gemini-imagegen/scripts/compose_images.py +157 -0
  277. package/skills/gemini-imagegen/scripts/edit_image.py +144 -0
  278. package/skills/gemini-imagegen/scripts/gemini_images.py +263 -0
  279. package/skills/gemini-imagegen/scripts/generate_image.py +133 -0
  280. package/skills/gemini-imagegen/scripts/multi_turn_chat.py +216 -0
  281. package/skills/git-history-analyzer/SKILL.md +58 -0
  282. package/skills/git-worktree/SKILL.md +302 -0
  283. package/skills/git-worktree/scripts/worktree-manager.sh +337 -0
  284. package/skills/julik-frontend-races-reviewer/SKILL.md +220 -0
  285. package/skills/kieran-python-reviewer/SKILL.md +132 -0
  286. package/skills/kieran-rails-reviewer/SKILL.md +114 -0
  287. package/skills/kieran-typescript-reviewer/SKILL.md +123 -0
  288. package/skills/learnings-researcher/SKILL.md +263 -0
  289. package/skills/lint/SKILL.md +14 -0
  290. package/skills/orchestrating-swarms/SKILL.md +1718 -0
  291. package/skills/pattern-recognition-specialist/SKILL.md +71 -0
  292. package/skills/performance-oracle/SKILL.md +136 -0
  293. package/skills/pr-comment-resolver/SKILL.md +82 -0
  294. package/skills/rclone/SKILL.md +150 -0
  295. package/skills/rclone/scripts/check_setup.sh +60 -0
  296. package/skills/repo-research-analyst/SKILL.md +134 -0
  297. package/skills/resolve_pr_parallel/SKILL.md +89 -0
  298. package/skills/resolve_pr_parallel/scripts/get-pr-comments +68 -0
  299. package/skills/resolve_pr_parallel/scripts/resolve-pr-thread +23 -0
  300. package/skills/schema-drift-detector/SKILL.md +153 -0
  301. package/skills/security-sentinel/SKILL.md +113 -0
  302. package/skills/skill-creator/SKILL.md +210 -0
  303. package/skills/skill-creator/scripts/init_skill.py +303 -0
  304. package/skills/skill-creator/scripts/package_skill.py +110 -0
  305. package/skills/skill-creator/scripts/quick_validate.py +65 -0
  306. package/skills/spec-flow-analyzer/SKILL.md +133 -0
  307. package/src/commands/convert.ts +183 -0
  308. package/src/commands/install.ts +273 -0
  309. package/src/commands/list.ts +37 -0
  310. package/src/commands/sync.ts +89 -0
  311. package/src/converters/claude-to-codex.ts +182 -0
  312. package/src/converters/claude-to-opencode.ts +395 -0
  313. package/src/converters/claude-to-pi.ts +205 -0
  314. package/src/index.ts +22 -0
  315. package/src/parsers/claude-home.ts +65 -0
  316. package/src/parsers/claude.ts +252 -0
  317. package/src/sync/codex.ts +92 -0
  318. package/src/sync/opencode.ts +75 -0
  319. package/src/sync/pi.ts +88 -0
  320. package/src/targets/codex.ts +96 -0
  321. package/src/targets/index.ts +38 -0
  322. package/src/targets/opencode.ts +57 -0
  323. package/src/targets/pi.ts +131 -0
  324. package/src/templates/pi/compat-extension.ts +452 -0
  325. package/src/types/claude.ts +90 -0
  326. package/src/types/codex.ts +23 -0
  327. package/src/types/opencode.ts +54 -0
  328. package/src/types/pi.ts +40 -0
  329. package/src/utils/codex-agents.ts +64 -0
  330. package/src/utils/files.ts +77 -0
  331. package/src/utils/frontmatter.ts +65 -0
  332. package/src/utils/symlink.ts +43 -0
@@ -0,0 +1,452 @@
1
+ import fs from "node:fs"
2
+ import os from "node:os"
3
+ import path from "node:path"
4
+ import { fileURLToPath } from "node:url"
5
+ import type { ExtensionAPI } from "@mariozechner/pi-coding-agent"
6
+ import { Type } from "@sinclair/typebox"
7
+
8
+ const MAX_BYTES = 50 * 1024
9
+ const DEFAULT_SUBAGENT_TIMEOUT_MS = 10 * 60 * 1000
10
+ const MAX_PARALLEL_SUBAGENTS = 8
11
+
12
+ type SubagentTask = {
13
+ agent: string
14
+ task: string
15
+ cwd?: string
16
+ }
17
+
18
+ type SubagentResult = {
19
+ agent: string
20
+ task: string
21
+ cwd: string
22
+ exitCode: number
23
+ output: string
24
+ stderr: string
25
+ }
26
+
27
+ function truncate(value: string): string {
28
+ const input = value ?? ""
29
+ if (Buffer.byteLength(input, "utf8") <= MAX_BYTES) return input
30
+ const head = input.slice(0, MAX_BYTES)
31
+ return head + "\n\n[Output truncated to 50KB]"
32
+ }
33
+
34
+ function shellEscape(value: string): string {
35
+ return "'" + value.replace(/'/g, "'\"'\"'") + "'"
36
+ }
37
+
38
+ function normalizeName(value: string): string {
39
+ return String(value || "")
40
+ .trim()
41
+ .toLowerCase()
42
+ .replace(/[^a-z0-9_-]+/g, "-")
43
+ .replace(/-+/g, "-")
44
+ .replace(/^-+|-+$/g, "")
45
+ }
46
+
47
+ function resolveBundledMcporterConfigPath(): string | undefined {
48
+ try {
49
+ const extensionDir = path.dirname(fileURLToPath(import.meta.url))
50
+ const candidates = [
51
+ path.join(extensionDir, "..", "pi-resources", "compound-engineering", "mcporter.json"),
52
+ path.join(extensionDir, "..", "compound-engineering", "mcporter.json"),
53
+ ]
54
+
55
+ for (const candidate of candidates) {
56
+ if (fs.existsSync(candidate)) return candidate
57
+ }
58
+ } catch {
59
+ // noop: bundled path is best-effort fallback
60
+ }
61
+
62
+ return undefined
63
+ }
64
+
65
+ function resolveMcporterConfigPath(cwd: string, explicit?: string): string | undefined {
66
+ if (explicit && explicit.trim()) {
67
+ return path.resolve(explicit)
68
+ }
69
+
70
+ const projectPath = path.join(cwd, ".pi", "compound-engineering", "mcporter.json")
71
+ if (fs.existsSync(projectPath)) return projectPath
72
+
73
+ const globalPath = path.join(os.homedir(), ".pi", "agent", "compound-engineering", "mcporter.json")
74
+ if (fs.existsSync(globalPath)) return globalPath
75
+
76
+ return resolveBundledMcporterConfigPath()
77
+ }
78
+
79
+ function resolveTaskCwd(baseCwd: string, taskCwd?: string): string {
80
+ if (!taskCwd || !taskCwd.trim()) return baseCwd
81
+ const expanded = taskCwd === "~"
82
+ ? os.homedir()
83
+ : taskCwd.startsWith("~" + path.sep)
84
+ ? path.join(os.homedir(), taskCwd.slice(2))
85
+ : taskCwd
86
+ return path.resolve(baseCwd, expanded)
87
+ }
88
+
89
+ async function runSingleSubagent(
90
+ pi: ExtensionAPI,
91
+ baseCwd: string,
92
+ task: SubagentTask,
93
+ signal?: AbortSignal,
94
+ timeoutMs = DEFAULT_SUBAGENT_TIMEOUT_MS,
95
+ ): Promise<SubagentResult> {
96
+ const agent = normalizeName(task.agent)
97
+ if (!agent) {
98
+ throw new Error("Subagent task is missing a valid agent name")
99
+ }
100
+
101
+ const taskText = String(task.task ?? "").trim()
102
+ if (!taskText) {
103
+ throw new Error("Subagent task for " + agent + " is empty")
104
+ }
105
+
106
+ const cwd = resolveTaskCwd(baseCwd, task.cwd)
107
+ const prompt = "/skill:" + agent + " " + taskText
108
+ const script = "cd " + shellEscape(cwd) + " && pi --no-session -p " + shellEscape(prompt)
109
+ const result = await pi.exec("bash", ["-lc", script], { signal, timeout: timeoutMs })
110
+
111
+ return {
112
+ agent,
113
+ task: taskText,
114
+ cwd,
115
+ exitCode: result.code,
116
+ output: truncate(result.stdout || ""),
117
+ stderr: truncate(result.stderr || ""),
118
+ }
119
+ }
120
+
121
+ async function runParallelSubagents(
122
+ pi: ExtensionAPI,
123
+ baseCwd: string,
124
+ tasks: SubagentTask[],
125
+ signal?: AbortSignal,
126
+ timeoutMs = DEFAULT_SUBAGENT_TIMEOUT_MS,
127
+ maxConcurrency = 4,
128
+ onProgress?: (completed: number, total: number) => void,
129
+ ): Promise<SubagentResult[]> {
130
+ const safeConcurrency = Math.max(1, Math.min(maxConcurrency, MAX_PARALLEL_SUBAGENTS, tasks.length))
131
+ const results: SubagentResult[] = new Array(tasks.length)
132
+
133
+ let nextIndex = 0
134
+ let completed = 0
135
+
136
+ const workers = Array.from({ length: safeConcurrency }, async () => {
137
+ while (true) {
138
+ const current = nextIndex
139
+ nextIndex += 1
140
+ if (current >= tasks.length) return
141
+
142
+ results[current] = await runSingleSubagent(pi, baseCwd, tasks[current], signal, timeoutMs)
143
+ completed += 1
144
+ onProgress?.(completed, tasks.length)
145
+ }
146
+ })
147
+
148
+ await Promise.all(workers)
149
+ return results
150
+ }
151
+
152
+ function formatSubagentSummary(results: SubagentResult[]): string {
153
+ if (results.length === 0) return "No subagent work was executed."
154
+
155
+ const success = results.filter((result) => result.exitCode === 0).length
156
+ const failed = results.length - success
157
+ const header = failed === 0
158
+ ? "Subagent run completed: " + success + "/" + results.length + " succeeded."
159
+ : "Subagent run completed: " + success + "/" + results.length + " succeeded, " + failed + " failed."
160
+
161
+ const lines = results.map((result) => {
162
+ const status = result.exitCode === 0 ? "ok" : "error"
163
+ const body = result.output || result.stderr || "(no output)"
164
+ const preview = body.split("\n").slice(0, 6).join("\n")
165
+ return "\n[" + status + "] " + result.agent + "\n" + preview
166
+ })
167
+
168
+ return header + lines.join("\n")
169
+ }
170
+
171
+ export default function (pi: ExtensionAPI) {
172
+ pi.registerTool({
173
+ name: "ask_user_question",
174
+ label: "Ask User Question",
175
+ description: "Ask the user a question with optional choices.",
176
+ parameters: Type.Object({
177
+ question: Type.String({ description: "Question shown to the user" }),
178
+ options: Type.Optional(Type.Array(Type.String(), { description: "Selectable options" })),
179
+ allowCustom: Type.Optional(Type.Boolean({ default: true })),
180
+ }),
181
+ async execute(_toolCallId, params, _signal, _onUpdate, ctx) {
182
+ if (!ctx.hasUI) {
183
+ return {
184
+ isError: true,
185
+ content: [{ type: "text", text: "UI is unavailable in this mode." }],
186
+ details: {},
187
+ }
188
+ }
189
+
190
+ const options = params.options ?? []
191
+ const allowCustom = params.allowCustom ?? true
192
+
193
+ if (options.length === 0) {
194
+ const answer = await ctx.ui.input(params.question)
195
+ if (!answer) {
196
+ return {
197
+ content: [{ type: "text", text: "User cancelled." }],
198
+ details: { answer: null },
199
+ }
200
+ }
201
+
202
+ return {
203
+ content: [{ type: "text", text: "User answered: " + answer }],
204
+ details: { answer, mode: "input" },
205
+ }
206
+ }
207
+
208
+ const customLabel = "Other (type custom answer)"
209
+ const selectable = allowCustom ? [...options, customLabel] : options
210
+ const selected = await ctx.ui.select(params.question, selectable)
211
+
212
+ if (!selected) {
213
+ return {
214
+ content: [{ type: "text", text: "User cancelled." }],
215
+ details: { answer: null },
216
+ }
217
+ }
218
+
219
+ if (selected === customLabel) {
220
+ const custom = await ctx.ui.input("Your answer")
221
+ if (!custom) {
222
+ return {
223
+ content: [{ type: "text", text: "User cancelled." }],
224
+ details: { answer: null },
225
+ }
226
+ }
227
+
228
+ return {
229
+ content: [{ type: "text", text: "User answered: " + custom }],
230
+ details: { answer: custom, mode: "custom" },
231
+ }
232
+ }
233
+
234
+ return {
235
+ content: [{ type: "text", text: "User selected: " + selected }],
236
+ details: { answer: selected, mode: "select" },
237
+ }
238
+ },
239
+ })
240
+
241
+ const subagentTaskSchema = Type.Object({
242
+ agent: Type.String({ description: "Skill/agent name to invoke" }),
243
+ task: Type.String({ description: "Task instructions for that skill" }),
244
+ cwd: Type.Optional(Type.String({ description: "Optional working directory for this task" })),
245
+ })
246
+
247
+ pi.registerTool({
248
+ name: "subagent",
249
+ label: "Subagent",
250
+ description: "Run one or more skill-based subagent tasks. Supports single, parallel, and chained execution.",
251
+ parameters: Type.Object({
252
+ agent: Type.Optional(Type.String({ description: "Single subagent name" })),
253
+ task: Type.Optional(Type.String({ description: "Single subagent task" })),
254
+ cwd: Type.Optional(Type.String({ description: "Working directory for single mode" })),
255
+ tasks: Type.Optional(Type.Array(subagentTaskSchema, { description: "Parallel subagent tasks" })),
256
+ chain: Type.Optional(Type.Array(subagentTaskSchema, { description: "Sequential tasks; supports {previous} placeholder" })),
257
+ maxConcurrency: Type.Optional(Type.Number({ default: 4 })),
258
+ timeoutMs: Type.Optional(Type.Number({ default: DEFAULT_SUBAGENT_TIMEOUT_MS })),
259
+ }),
260
+ async execute(_toolCallId, params, signal, onUpdate, ctx) {
261
+ const hasSingle = Boolean(params.agent && params.task)
262
+ const hasTasks = Boolean(params.tasks && params.tasks.length > 0)
263
+ const hasChain = Boolean(params.chain && params.chain.length > 0)
264
+ const modeCount = Number(hasSingle) + Number(hasTasks) + Number(hasChain)
265
+
266
+ if (modeCount !== 1) {
267
+ return {
268
+ isError: true,
269
+ content: [{ type: "text", text: "Provide exactly one mode: single (agent+task), tasks, or chain." }],
270
+ details: {},
271
+ }
272
+ }
273
+
274
+ const timeoutMs = Number(params.timeoutMs || DEFAULT_SUBAGENT_TIMEOUT_MS)
275
+
276
+ try {
277
+ if (hasSingle) {
278
+ const result = await runSingleSubagent(
279
+ pi,
280
+ ctx.cwd,
281
+ { agent: params.agent!, task: params.task!, cwd: params.cwd },
282
+ signal,
283
+ timeoutMs,
284
+ )
285
+
286
+ const body = formatSubagentSummary([result])
287
+ return {
288
+ isError: result.exitCode !== 0,
289
+ content: [{ type: "text", text: body }],
290
+ details: { mode: "single", results: [result] },
291
+ }
292
+ }
293
+
294
+ if (hasTasks) {
295
+ const tasks = params.tasks as SubagentTask[]
296
+ const maxConcurrency = Number(params.maxConcurrency || 4)
297
+
298
+ const results = await runParallelSubagents(
299
+ pi,
300
+ ctx.cwd,
301
+ tasks,
302
+ signal,
303
+ timeoutMs,
304
+ maxConcurrency,
305
+ (completed, total) => {
306
+ onUpdate?.({
307
+ content: [{ type: "text", text: "Subagent progress: " + completed + "/" + total }],
308
+ details: { mode: "parallel", completed, total },
309
+ })
310
+ },
311
+ )
312
+
313
+ const body = formatSubagentSummary(results)
314
+ const hasFailure = results.some((result) => result.exitCode !== 0)
315
+
316
+ return {
317
+ isError: hasFailure,
318
+ content: [{ type: "text", text: body }],
319
+ details: { mode: "parallel", results },
320
+ }
321
+ }
322
+
323
+ const chain = params.chain as SubagentTask[]
324
+ const results: SubagentResult[] = []
325
+ let previous = ""
326
+
327
+ for (const step of chain) {
328
+ const resolvedTask = step.task.replace(/\{previous\}/g, previous)
329
+ const result = await runSingleSubagent(
330
+ pi,
331
+ ctx.cwd,
332
+ { agent: step.agent, task: resolvedTask, cwd: step.cwd },
333
+ signal,
334
+ timeoutMs,
335
+ )
336
+ results.push(result)
337
+ previous = result.output || result.stderr
338
+
339
+ onUpdate?.({
340
+ content: [{ type: "text", text: "Subagent chain progress: " + results.length + "/" + chain.length }],
341
+ details: { mode: "chain", completed: results.length, total: chain.length },
342
+ })
343
+
344
+ if (result.exitCode !== 0) break
345
+ }
346
+
347
+ const body = formatSubagentSummary(results)
348
+ const hasFailure = results.some((result) => result.exitCode !== 0)
349
+
350
+ return {
351
+ isError: hasFailure,
352
+ content: [{ type: "text", text: body }],
353
+ details: { mode: "chain", results },
354
+ }
355
+ } catch (error) {
356
+ return {
357
+ isError: true,
358
+ content: [{ type: "text", text: error instanceof Error ? error.message : String(error) }],
359
+ details: {},
360
+ }
361
+ }
362
+ },
363
+ })
364
+
365
+ pi.registerTool({
366
+ name: "mcporter_list",
367
+ label: "MCPorter List",
368
+ description: "List tools on an MCP server through MCPorter.",
369
+ parameters: Type.Object({
370
+ server: Type.String({ description: "Configured MCP server name" }),
371
+ allParameters: Type.Optional(Type.Boolean({ default: false })),
372
+ json: Type.Optional(Type.Boolean({ default: true })),
373
+ configPath: Type.Optional(Type.String({ description: "Optional mcporter config path" })),
374
+ }),
375
+ async execute(_toolCallId, params, signal, _onUpdate, ctx) {
376
+ const args = ["list", params.server]
377
+ if (params.allParameters) args.push("--all-parameters")
378
+ if (params.json ?? true) args.push("--json")
379
+
380
+ const configPath = resolveMcporterConfigPath(ctx.cwd, params.configPath)
381
+ if (configPath) {
382
+ args.push("--config", configPath)
383
+ }
384
+
385
+ const result = await pi.exec("mcporter", args, { signal })
386
+ const output = truncate(result.stdout || result.stderr || "")
387
+
388
+ return {
389
+ isError: result.code !== 0,
390
+ content: [{ type: "text", text: output || "(no output)" }],
391
+ details: {
392
+ exitCode: result.code,
393
+ command: "mcporter " + args.join(" "),
394
+ configPath,
395
+ },
396
+ }
397
+ },
398
+ })
399
+
400
+ pi.registerTool({
401
+ name: "mcporter_call",
402
+ label: "MCPorter Call",
403
+ description: "Call a specific MCP tool through MCPorter.",
404
+ parameters: Type.Object({
405
+ call: Type.Optional(Type.String({ description: "Function-style call, e.g. linear.list_issues(limit: 5)" })),
406
+ server: Type.Optional(Type.String({ description: "Server name (if call is omitted)" })),
407
+ tool: Type.Optional(Type.String({ description: "Tool name (if call is omitted)" })),
408
+ args: Type.Optional(Type.Record(Type.String(), Type.Any(), { description: "JSON arguments object" })),
409
+ configPath: Type.Optional(Type.String({ description: "Optional mcporter config path" })),
410
+ }),
411
+ async execute(_toolCallId, params, signal, _onUpdate, ctx) {
412
+ const args = ["call"]
413
+
414
+ if (params.call && params.call.trim()) {
415
+ args.push(params.call.trim())
416
+ } else {
417
+ if (!params.server || !params.tool) {
418
+ return {
419
+ isError: true,
420
+ content: [{ type: "text", text: "Provide either call, or server + tool." }],
421
+ details: {},
422
+ }
423
+ }
424
+ args.push(params.server + "." + params.tool)
425
+ if (params.args) {
426
+ args.push("--args", JSON.stringify(params.args))
427
+ }
428
+ }
429
+
430
+ args.push("--output", "json")
431
+
432
+ const configPath = resolveMcporterConfigPath(ctx.cwd, params.configPath)
433
+ if (configPath) {
434
+ args.push("--config", configPath)
435
+ }
436
+
437
+ const result = await pi.exec("mcporter", args, { signal })
438
+ const output = truncate(result.stdout || result.stderr || "")
439
+
440
+ return {
441
+ isError: result.code !== 0,
442
+ content: [{ type: "text", text: output || "(no output)" }],
443
+ details: {
444
+ exitCode: result.code,
445
+ command: "mcporter " + args.join(" "),
446
+ configPath,
447
+ },
448
+ }
449
+ },
450
+ })
451
+ }
452
+
package/package.json ADDED
@@ -0,0 +1,84 @@
1
+ {
2
+ "name": "compound-engineering-pi",
3
+ "version": "0.2.3",
4
+ "type": "module",
5
+ "private": false,
6
+ "description": "Pi-first Compound Engineering extension with subagents and MCPorter compatibility.",
7
+ "keywords": [
8
+ "pi-package",
9
+ "pi",
10
+ "compound-engineering",
11
+ "mcporter",
12
+ "subagent",
13
+ "workflow",
14
+ "agent"
15
+ ],
16
+ "bin": {
17
+ "compound-engineering-pi": "compound-engineering-pi",
18
+ "compound-plugin": "compound-plugin"
19
+ },
20
+ "license": "MIT",
21
+ "author": "Geet Khosla",
22
+ "homepage": "https://github.com/gvkhosla/compound-engineering-pi",
23
+ "repository": {
24
+ "type": "git",
25
+ "url": "git+https://github.com/gvkhosla/compound-engineering-pi.git"
26
+ },
27
+ "bugs": {
28
+ "url": "https://github.com/gvkhosla/compound-engineering-pi/issues"
29
+ },
30
+ "publishConfig": {
31
+ "access": "public"
32
+ },
33
+ "engines": {
34
+ "bun": ">=1.3.0"
35
+ },
36
+ "files": [
37
+ "bin",
38
+ "src",
39
+ "plugins",
40
+ "extensions",
41
+ "skills",
42
+ "prompts",
43
+ "pi-resources",
44
+ "compound-engineering-pi",
45
+ "compound-plugin",
46
+ "README.md",
47
+ "LICENSE",
48
+ "docs/pi.md"
49
+ ],
50
+ "scripts": {
51
+ "dev": "bun run src/index.ts",
52
+ "convert": "bun run src/index.ts convert",
53
+ "list": "bun run src/index.ts list",
54
+ "cli:install": "bun run src/index.ts install",
55
+ "test": "bun test",
56
+ "release:check": "bun test && npm pack --dry-run",
57
+ "release:publish": "npm publish --access public",
58
+ "release:ship": "npm run release:check && npm run release:publish",
59
+ "prepublishOnly": "bun test"
60
+ },
61
+ "peerDependencies": {
62
+ "@mariozechner/pi-coding-agent": "*",
63
+ "@sinclair/typebox": "*"
64
+ },
65
+ "pi": {
66
+ "extensions": [
67
+ "./extensions"
68
+ ],
69
+ "skills": [
70
+ "./skills"
71
+ ],
72
+ "prompts": [
73
+ "./prompts"
74
+ ],
75
+ "image": "https://opengraph.githubassets.com/1/gvkhosla/compound-engineering-pi"
76
+ },
77
+ "dependencies": {
78
+ "citty": "^0.1.6",
79
+ "js-yaml": "^4.1.0"
80
+ },
81
+ "devDependencies": {
82
+ "bun-types": "^1.0.0"
83
+ }
84
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "mcpServers": {
3
+ "context7": {
4
+ "baseUrl": "https://mcp.context7.com/mcp"
5
+ }
6
+ }
7
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "name": "coding-tutor",
3
+ "version": "1.2.1",
4
+ "description": "Personalized coding tutorials that use your actual codebase for examples with spaced repetition quizzes",
5
+ "author": {
6
+ "name": "Nityesh Agarwal"
7
+ },
8
+ "keywords": ["coding", "programming", "tutorial", "learning", "spaced-repetition"]
9
+ }
@@ -0,0 +1,37 @@
1
+ # Coding Tutor
2
+
3
+ Your personal AI tutor that creates tutorials tailored to you - using real code from your projects, building on what you already know, and tracking your progress over time.
4
+
5
+ ## Why
6
+
7
+ AI is already smarter than any single human being across the breadth of tasks it can perform. It beats PhDs, aces entrance exams in every field, and this gap will only widen.
8
+
9
+ In this world, humans have two paths: let their cognitive capabilities decline, or rise to match AI. The long-term future of humanity depends heavily on which path we take.
10
+
11
+ My belief is simple: today's AI is smarter than any private tutor anyone on the planet can hire. So why not use it to give every human access to the best personal tutor imaginable? One that knows your background, adapts to your pace, uses your actual work as teaching material, and helps you retain what you learn.
12
+
13
+ This project starts with programming - the domain where AI has the most immediate economic impact. Use it to learn about the programs you're vibe coding and level up your skills. Don't just vibe code, vibe learn.
14
+
15
+ ## Install
16
+
17
+ ```
18
+ /plugin install coding-tutor@claude-code-essentials
19
+ ```
20
+
21
+ ## Features
22
+
23
+ - Personalized onboarding to understand your learning goals
24
+ - Tutorials that use YOUR code as examples
25
+ - Spaced repetition quiz system to reinforce learning
26
+ - Tracks your progress across tutorials
27
+ - Curriculum planning based on your current knowledge
28
+
29
+ ## Commands
30
+
31
+ - `/teach-me` - Learn something new
32
+ - `/quiz-me` - Test your retention with spaced repetition
33
+ - `/sync-tutorials` - Sync your tutorials to GitHub for backup
34
+
35
+ ## Storage
36
+
37
+ Tutorials are stored at `~/coding-tutor-tutorials/`. This is auto-created on first use and shared across all your projects. The `source_repo` field in each tutorial tracks which codebase the examples came from.
@@ -0,0 +1 @@
1
+ Quiz me using the coding-tutor skill
@@ -0,0 +1,25 @@
1
+ # Sync Coding Tutor Tutorials
2
+
3
+ Commit and push your tutorials to the GitHub repository for backup and mobile reading.
4
+
5
+ ## Instructions
6
+
7
+ 1. **Go to the tutorials repo**: `cd ~/coding-tutor-tutorials`
8
+
9
+ 2. **Check for changes**: Run `git status` to see what's new or modified
10
+
11
+ 3. **If there are changes**:
12
+ - Stage all changes: `git add -A`
13
+ - Create a commit with a message summarizing what was added/updated (e.g., "Add tutorial on React hooks" or "Update quiz scores")
14
+ - Push to origin: `git push`
15
+
16
+ 4. **If no GitHub remote exists**:
17
+ - Create the repo: `gh repo create coding-tutor-tutorials --private --source=. --push`
18
+
19
+ 5. **Report results**: Tell the user what was synced or that everything is already up to date
20
+
21
+ ## Notes
22
+
23
+ - The tutorials repo is at: `~/coding-tutor-tutorials/`
24
+ - Always use `--private` when creating the GitHub repo
25
+ - This is your personal learning journey - keep it backed up!
@@ -0,0 +1 @@
1
+ Teach me something using the coding-tutor skill