claude-code-pilot 2.0.0 → 3.0.0

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 (455) hide show
  1. package/bin/install.js +267 -250
  2. package/manifest.json +5 -18
  3. package/package.json +5 -7
  4. package/src/agents/build-error-resolver.md +114 -0
  5. package/src/agents/ccp-advisor-researcher.md +104 -0
  6. package/src/agents/ccp-assumptions-analyzer.md +105 -0
  7. package/{gsd/agents/gsd-codebase-mapper.md → src/agents/ccp-codebase-mapper.md} +7 -7
  8. package/{gsd/agents/gsd-debugger.md → src/agents/ccp-debugger.md} +125 -8
  9. package/{gsd/agents/gsd-executor.md → src/agents/ccp-executor.md} +31 -20
  10. package/{gsd/agents/gsd-integration-checker.md → src/agents/ccp-integration-checker.md} +2 -2
  11. package/{gsd/agents/gsd-nyquist-auditor.md → src/agents/ccp-nyquist-auditor.md} +3 -3
  12. package/{gsd/agents/gsd-phase-researcher.md → src/agents/ccp-phase-researcher.md} +127 -13
  13. package/{gsd/agents/gsd-plan-checker.md → src/agents/ccp-plan-checker.md} +57 -21
  14. package/{gsd/agents/gsd-planner.md → src/agents/ccp-planner.md} +61 -23
  15. package/{gsd/agents/gsd-project-researcher.md → src/agents/ccp-project-researcher.md} +33 -6
  16. package/{gsd/agents/gsd-research-synthesizer.md → src/agents/ccp-research-synthesizer.md} +11 -11
  17. package/{gsd/agents/gsd-roadmapper.md → src/agents/ccp-roadmapper.md} +39 -10
  18. package/src/agents/ccp-ui-auditor.md +439 -0
  19. package/src/agents/ccp-ui-checker.md +300 -0
  20. package/src/agents/ccp-ui-researcher.md +357 -0
  21. package/{gsd/agents/gsd-verifier.md → src/agents/ccp-verifier.md} +81 -15
  22. package/src/agents/cpp-build-resolver.md +90 -0
  23. package/src/agents/cpp-reviewer.md +72 -0
  24. package/src/agents/database-reviewer.md +91 -0
  25. package/src/agents/docs-lookup.md +68 -0
  26. package/src/agents/flutter-reviewer.md +243 -0
  27. package/src/agents/go-build-resolver.md +94 -0
  28. package/src/agents/go-reviewer.md +76 -0
  29. package/src/agents/java-build-resolver.md +153 -0
  30. package/src/agents/java-reviewer.md +92 -0
  31. package/src/agents/kotlin-build-resolver.md +118 -0
  32. package/src/agents/kotlin-reviewer.md +159 -0
  33. package/src/agents/planner.md +212 -0
  34. package/src/agents/python-reviewer.md +98 -0
  35. package/src/agents/pytorch-build-resolver.md +120 -0
  36. package/src/agents/refactor-cleaner.md +85 -0
  37. package/src/agents/rust-build-resolver.md +148 -0
  38. package/src/agents/rust-reviewer.md +94 -0
  39. package/src/agents/typescript-reviewer.md +112 -0
  40. package/src/available-rules/README.md +80 -0
  41. package/src/available-rules/cpp/coding-style.md +44 -0
  42. package/src/available-rules/cpp/hooks.md +39 -0
  43. package/src/available-rules/cpp/patterns.md +51 -0
  44. package/src/available-rules/cpp/security.md +51 -0
  45. package/src/available-rules/cpp/testing.md +44 -0
  46. package/src/available-rules/csharp/coding-style.md +72 -0
  47. package/src/available-rules/csharp/hooks.md +25 -0
  48. package/src/available-rules/csharp/patterns.md +50 -0
  49. package/src/available-rules/csharp/security.md +58 -0
  50. package/src/available-rules/csharp/testing.md +46 -0
  51. package/src/available-rules/java/coding-style.md +114 -0
  52. package/src/available-rules/java/hooks.md +18 -0
  53. package/src/available-rules/java/patterns.md +146 -0
  54. package/src/available-rules/java/security.md +100 -0
  55. package/src/available-rules/java/testing.md +131 -0
  56. package/src/available-rules/kotlin/hooks.md +17 -0
  57. package/src/available-rules/rust/coding-style.md +151 -0
  58. package/src/available-rules/rust/hooks.md +16 -0
  59. package/src/available-rules/rust/patterns.md +168 -0
  60. package/src/available-rules/rust/security.md +141 -0
  61. package/src/available-rules/rust/testing.md +154 -0
  62. package/src/commands/aside.md +164 -0
  63. package/src/commands/build-fix.md +62 -0
  64. package/src/commands/ccp/add-backlog.md +76 -0
  65. package/{gsd/commands-gsd → src/commands/ccp}/add-phase.md +3 -3
  66. package/{gsd/commands-gsd → src/commands/ccp}/add-tests.md +5 -5
  67. package/{gsd/commands-gsd → src/commands/ccp}/add-todo.md +4 -4
  68. package/{gsd/commands-gsd → src/commands/ccp}/audit-milestone.md +3 -3
  69. package/src/commands/ccp/audit-uat.md +24 -0
  70. package/src/commands/ccp/autonomous.md +41 -0
  71. package/{gsd/commands-gsd → src/commands/ccp}/check-todos.md +3 -3
  72. package/{gsd/commands-gsd → src/commands/ccp}/cleanup.md +3 -3
  73. package/{gsd/commands-gsd → src/commands/ccp}/complete-milestone.md +9 -9
  74. package/{gsd/commands-gsd → src/commands/ccp}/debug.md +14 -9
  75. package/src/commands/ccp/discuss-phase.md +64 -0
  76. package/src/commands/ccp/do.md +30 -0
  77. package/src/commands/ccp/execute-phase.md +59 -0
  78. package/src/commands/ccp/fast.md +30 -0
  79. package/src/commands/ccp/forensics.md +56 -0
  80. package/{gsd/commands-gsd → src/commands/ccp}/health.md +3 -3
  81. package/{gsd/commands-gsd → src/commands/ccp}/help.md +5 -5
  82. package/{gsd/commands-gsd → src/commands/ccp}/insert-phase.md +3 -3
  83. package/{gsd/commands-gsd → src/commands/ccp}/list-phase-assumptions.md +2 -2
  84. package/src/commands/ccp/manager.md +39 -0
  85. package/{gsd/commands-gsd → src/commands/ccp}/map-codebase.md +7 -7
  86. package/src/commands/ccp/milestone-summary.md +51 -0
  87. package/{gsd/commands-gsd → src/commands/ccp}/new-milestone.md +8 -8
  88. package/{gsd/commands-gsd → src/commands/ccp}/new-project.md +8 -8
  89. package/src/commands/ccp/next.md +24 -0
  90. package/src/commands/ccp/note.md +34 -0
  91. package/{gsd/commands-gsd → src/commands/ccp}/pause-work.md +3 -3
  92. package/{gsd/commands-gsd → src/commands/ccp}/plan-milestone-gaps.md +5 -5
  93. package/{gsd/commands-gsd → src/commands/ccp}/plan-phase.md +9 -7
  94. package/src/commands/ccp/plant-seed.md +28 -0
  95. package/src/commands/ccp/pr-branch.md +25 -0
  96. package/{gsd/commands-gsd → src/commands/ccp}/progress.md +3 -3
  97. package/{gsd/commands-gsd → src/commands/ccp}/quick.md +10 -8
  98. package/{gsd/commands-gsd → src/commands/ccp}/remove-phase.md +3 -3
  99. package/{gsd/commands-gsd → src/commands/ccp}/research-phase.md +17 -12
  100. package/{gsd/commands-gsd → src/commands/ccp}/resume-work.md +3 -3
  101. package/src/commands/ccp/review-backlog.md +61 -0
  102. package/src/commands/ccp/session-report.md +19 -0
  103. package/src/commands/ccp/set-profile.md +12 -0
  104. package/{gsd/commands-gsd → src/commands/ccp}/settings.md +5 -5
  105. package/src/commands/ccp/ship.md +23 -0
  106. package/src/commands/ccp/stats.md +18 -0
  107. package/src/commands/ccp/thread.md +127 -0
  108. package/src/commands/ccp/ui-phase.md +34 -0
  109. package/src/commands/ccp/ui-review.md +32 -0
  110. package/{gsd/commands-gsd → src/commands/ccp}/update.md +5 -5
  111. package/{gsd/commands-gsd → src/commands/ccp}/validate-phase.md +3 -3
  112. package/{gsd/commands-gsd → src/commands/ccp}/verify-work.md +5 -5
  113. package/src/commands/code-review.md +40 -0
  114. package/src/commands/context-budget.md +29 -0
  115. package/src/commands/cpp-build.md +173 -0
  116. package/src/commands/cpp-review.md +132 -0
  117. package/src/commands/cpp-test.md +251 -0
  118. package/src/commands/docs.md +31 -0
  119. package/src/commands/e2e.md +364 -0
  120. package/src/commands/eval.md +120 -0
  121. package/{ecc → src}/commands/evolve.md +2 -2
  122. package/src/commands/go-build.md +183 -0
  123. package/src/commands/go-review.md +148 -0
  124. package/src/commands/go-test.md +268 -0
  125. package/src/commands/gradle-build.md +70 -0
  126. package/src/commands/harness-audit.md +71 -0
  127. package/src/commands/kotlin-build.md +174 -0
  128. package/src/commands/kotlin-review.md +140 -0
  129. package/src/commands/kotlin-test.md +312 -0
  130. package/src/commands/orchestrate.md +231 -0
  131. package/src/commands/plan.md +114 -0
  132. package/src/commands/prompt-optimize.md +38 -0
  133. package/src/commands/prune.md +25 -0
  134. package/src/commands/python-review.md +297 -0
  135. package/{ecc → src}/commands/quality-gate.md +1 -1
  136. package/src/commands/refactor-clean.md +80 -0
  137. package/src/commands/rules-distill.md +11 -0
  138. package/src/commands/rust-build.md +187 -0
  139. package/src/commands/rust-review.md +142 -0
  140. package/src/commands/rust-test.md +308 -0
  141. package/{ecc → src}/commands/sessions.md +10 -10
  142. package/src/commands/setup-pm.md +80 -0
  143. package/{kit → src}/commands/setup.md +45 -19
  144. package/src/commands/skill-create.md +172 -0
  145. package/src/commands/skill-health.md +51 -0
  146. package/src/commands/tdd.md +328 -0
  147. package/src/commands/test-coverage.md +69 -0
  148. package/src/commands/update-codemaps.md +72 -0
  149. package/src/commands/update-docs.md +84 -0
  150. package/{gsd/hooks/gsd-context-monitor.js → src/hooks/ccp-context-monitor.js} +3 -3
  151. package/src/hooks/ccp-prompt-guard.js +96 -0
  152. package/{gsd/hooks/gsd-statusline.js → src/hooks/ccp-statusline.js} +7 -7
  153. package/src/hooks/ccp-workflow-guard.js +94 -0
  154. package/src/hooks/config-protection.js +141 -0
  155. package/{kit → src}/hooks/kit-check-update.js +7 -4
  156. package/src/hooks/mcp-health-check.js +620 -0
  157. package/{ecc/scripts → src}/hooks/run-with-flags-shell.sh +1 -1
  158. package/{ecc/scripts → src}/hooks/run-with-flags.js +74 -13
  159. package/src/hooks/session-end-marker.js +29 -0
  160. package/{ecc/scripts → src}/hooks/session-end.js +83 -40
  161. package/{ecc/scripts → src}/hooks/session-start.js +75 -9
  162. package/{ecc/scripts → src}/lib/hook-flags.js +8 -4
  163. package/{ecc/scripts → src}/lib/project-detect.js +2 -1
  164. package/{ecc/scripts → src}/lib/session-manager.d.ts +5 -1
  165. package/{ecc/scripts → src}/lib/session-manager.js +202 -92
  166. package/{ecc/scripts → src}/lib/utils.d.ts +23 -1
  167. package/{ecc/scripts → src}/lib/utils.js +91 -3
  168. package/{gsd/get-shit-done/bin/gsd-tools.cjs → src/pilot/bin/ccp-tools.cjs} +257 -86
  169. package/{gsd/get-shit-done → src/pilot}/bin/lib/commands.cjs +1 -1
  170. package/src/pilot/bin/lib/config.cjs +444 -0
  171. package/src/pilot/bin/lib/core.cjs +1190 -0
  172. package/src/pilot/bin/lib/init.cjs +1281 -0
  173. package/src/pilot/bin/lib/model-profiles.cjs +67 -0
  174. package/{gsd/get-shit-done → src/pilot}/bin/lib/phase.cjs +2 -2
  175. package/src/pilot/bin/lib/security.cjs +382 -0
  176. package/{gsd/get-shit-done → src/pilot}/bin/lib/state.cjs +1 -1
  177. package/src/pilot/bin/lib/uat.cjs +282 -0
  178. package/{gsd/get-shit-done → src/pilot}/bin/lib/verify.cjs +10 -10
  179. package/{gsd/get-shit-done → src/pilot}/references/continuation-format.md +16 -16
  180. package/{gsd/get-shit-done → src/pilot}/references/decimal-phase-calculation.md +5 -5
  181. package/{gsd/get-shit-done → src/pilot}/references/git-integration.md +5 -5
  182. package/{gsd/get-shit-done → src/pilot}/references/git-planning-commit.md +4 -4
  183. package/src/pilot/references/mcp-servers.json +153 -0
  184. package/{gsd/get-shit-done → src/pilot}/references/model-profile-resolution.md +2 -2
  185. package/{gsd/get-shit-done → src/pilot}/references/model-profiles.md +20 -20
  186. package/{gsd/get-shit-done → src/pilot}/references/phase-argument-parsing.md +4 -4
  187. package/{gsd/get-shit-done → src/pilot}/references/planning-config.md +15 -15
  188. package/{gsd/get-shit-done → src/pilot}/references/ui-brand.md +5 -5
  189. package/{gsd/get-shit-done → src/pilot}/references/verification-patterns.md +1 -1
  190. package/{gsd/get-shit-done → src/pilot}/templates/DEBUG.md +1 -1
  191. package/{gsd/get-shit-done → src/pilot}/templates/UAT.md +3 -3
  192. package/src/pilot/templates/UI-SPEC.md +100 -0
  193. package/{gsd/get-shit-done → src/pilot}/templates/VALIDATION.md +1 -1
  194. package/src/pilot/templates/claude-md.md +122 -0
  195. package/{gsd/get-shit-done → src/pilot}/templates/codebase/architecture.md +2 -2
  196. package/{gsd/get-shit-done → src/pilot}/templates/codebase/structure.md +13 -13
  197. package/{gsd/get-shit-done → src/pilot}/templates/context.md +4 -4
  198. package/src/pilot/templates/copilot-instructions.md +7 -0
  199. package/{gsd/get-shit-done → src/pilot}/templates/debug-subagent-prompt.md +4 -4
  200. package/src/pilot/templates/dev-preferences.md +21 -0
  201. package/{gsd/get-shit-done → src/pilot}/templates/discovery.md +2 -2
  202. package/src/pilot/templates/discussion-log.md +63 -0
  203. package/{gsd/get-shit-done → src/pilot}/templates/phase-prompt.md +12 -12
  204. package/{gsd/get-shit-done → src/pilot}/templates/planner-subagent-prompt.md +7 -7
  205. package/{gsd/get-shit-done → src/pilot}/templates/project.md +1 -1
  206. package/{gsd/get-shit-done → src/pilot}/templates/research.md +2 -2
  207. package/{gsd/get-shit-done → src/pilot}/templates/state.md +2 -2
  208. package/{gsd/get-shit-done → src/pilot}/templates/summary-complex.md +1 -1
  209. package/{gsd/get-shit-done → src/pilot}/workflows/add-phase.md +11 -11
  210. package/{gsd/get-shit-done → src/pilot}/workflows/add-tests.md +15 -15
  211. package/{gsd/get-shit-done → src/pilot}/workflows/add-todo.md +7 -7
  212. package/{gsd/get-shit-done → src/pilot}/workflows/audit-milestone.md +24 -16
  213. package/src/pilot/workflows/audit-uat.md +109 -0
  214. package/src/pilot/workflows/autonomous.md +891 -0
  215. package/{gsd/get-shit-done → src/pilot}/workflows/check-todos.md +10 -10
  216. package/{gsd/get-shit-done → src/pilot}/workflows/cleanup.md +3 -3
  217. package/{gsd/get-shit-done → src/pilot}/workflows/complete-milestone.md +19 -16
  218. package/{gsd/get-shit-done → src/pilot}/workflows/diagnose-issues.md +9 -4
  219. package/{gsd/get-shit-done → src/pilot}/workflows/discovery-phase.md +8 -8
  220. package/src/pilot/workflows/discuss-phase-assumptions.md +653 -0
  221. package/{gsd/get-shit-done → src/pilot}/workflows/discuss-phase.md +407 -49
  222. package/src/pilot/workflows/do.md +104 -0
  223. package/src/pilot/workflows/execute-phase.md +821 -0
  224. package/{gsd/get-shit-done → src/pilot}/workflows/execute-plan.md +79 -28
  225. package/src/pilot/workflows/fast.md +105 -0
  226. package/src/pilot/workflows/forensics.md +265 -0
  227. package/{gsd/get-shit-done → src/pilot}/workflows/health.md +34 -11
  228. package/src/pilot/workflows/help.md +775 -0
  229. package/{gsd/get-shit-done → src/pilot}/workflows/insert-phase.md +10 -10
  230. package/{gsd/get-shit-done → src/pilot}/workflows/list-phase-assumptions.md +4 -4
  231. package/src/pilot/workflows/manager.md +362 -0
  232. package/{gsd/get-shit-done → src/pilot}/workflows/map-codebase.md +27 -17
  233. package/src/pilot/workflows/milestone-summary.md +223 -0
  234. package/{gsd/get-shit-done → src/pilot}/workflows/new-milestone.md +135 -33
  235. package/{gsd/get-shit-done → src/pilot}/workflows/new-project.md +152 -79
  236. package/src/pilot/workflows/next.md +97 -0
  237. package/src/pilot/workflows/node-repair.md +92 -0
  238. package/src/pilot/workflows/note.md +156 -0
  239. package/src/pilot/workflows/pause-work.md +177 -0
  240. package/{gsd/get-shit-done → src/pilot}/workflows/plan-milestone-gaps.md +10 -11
  241. package/src/pilot/workflows/plan-phase.md +859 -0
  242. package/src/pilot/workflows/plant-seed.md +169 -0
  243. package/src/pilot/workflows/pr-branch.md +129 -0
  244. package/{gsd/get-shit-done → src/pilot}/workflows/progress.md +95 -34
  245. package/{gsd/get-shit-done → src/pilot}/workflows/quick.md +33 -21
  246. package/{gsd/get-shit-done → src/pilot}/workflows/remove-phase.md +14 -14
  247. package/{gsd/get-shit-done → src/pilot}/workflows/research-phase.md +18 -10
  248. package/{gsd/get-shit-done → src/pilot}/workflows/resume-project.md +37 -18
  249. package/src/pilot/workflows/session-report.md +146 -0
  250. package/{gsd/get-shit-done → src/pilot}/workflows/set-profile.md +7 -7
  251. package/{gsd/get-shit-done → src/pilot}/workflows/settings.md +75 -22
  252. package/src/pilot/workflows/ship.md +228 -0
  253. package/src/pilot/workflows/stats.md +60 -0
  254. package/{gsd/get-shit-done → src/pilot}/workflows/transition.md +57 -17
  255. package/src/pilot/workflows/ui-phase.md +302 -0
  256. package/src/pilot/workflows/ui-review.md +165 -0
  257. package/{gsd/get-shit-done → src/pilot}/workflows/update.md +88 -58
  258. package/{gsd/get-shit-done → src/pilot}/workflows/validate-phase.md +24 -17
  259. package/{gsd/get-shit-done → src/pilot}/workflows/verify-phase.md +26 -15
  260. package/{gsd/get-shit-done → src/pilot}/workflows/verify-work.md +89 -37
  261. package/{ecc → src}/rules/common/agents.md +1 -0
  262. package/{ecc → src}/rules/common/coding-style.md +21 -0
  263. package/src/skills/agentic-engineering/SKILL.md +63 -0
  264. package/src/skills/ai-first-engineering/SKILL.md +51 -0
  265. package/src/skills/ai-regression-testing/SKILL.md +385 -0
  266. package/src/skills/api-design/SKILL.md +523 -0
  267. package/src/skills/architecture-decision-records/SKILL.md +179 -0
  268. package/src/skills/backend-patterns/SKILL.md +598 -0
  269. package/src/skills/benchmark/SKILL.md +87 -0
  270. package/src/skills/blueprint/SKILL.md +90 -0
  271. package/src/skills/browser-qa/SKILL.md +81 -0
  272. package/src/skills/claude-api/SKILL.md +337 -0
  273. package/src/skills/codebase-onboarding/SKILL.md +233 -0
  274. package/src/skills/coding-standards/SKILL.md +530 -0
  275. package/src/skills/context-budget/SKILL.md +135 -0
  276. package/{ecc → src}/skills/continuous-learning-v2/SKILL.md +2 -2
  277. package/{ecc → src}/skills/continuous-learning-v2/agents/observer-loop.sh +1 -1
  278. package/src/skills/cpp-coding-standards/SKILL.md +723 -0
  279. package/src/skills/cpp-testing/SKILL.md +324 -0
  280. package/src/skills/database-migrations/SKILL.md +429 -0
  281. package/src/skills/deep-research/SKILL.md +155 -0
  282. package/src/skills/deployment-patterns/SKILL.md +427 -0
  283. package/src/skills/django-patterns/SKILL.md +734 -0
  284. package/src/skills/django-security/SKILL.md +593 -0
  285. package/src/skills/django-tdd/SKILL.md +729 -0
  286. package/src/skills/django-verification/SKILL.md +469 -0
  287. package/src/skills/docker-patterns/SKILL.md +364 -0
  288. package/src/skills/documentation-lookup/SKILL.md +90 -0
  289. package/src/skills/e2e-testing/SKILL.md +326 -0
  290. package/src/skills/exa-search/SKILL.md +103 -0
  291. package/src/skills/frontend-patterns/SKILL.md +642 -0
  292. package/src/skills/golang-patterns/SKILL.md +674 -0
  293. package/src/skills/golang-testing/SKILL.md +720 -0
  294. package/src/skills/java-coding-standards/SKILL.md +147 -0
  295. package/src/skills/jpa-patterns/SKILL.md +151 -0
  296. package/src/skills/kotlin-coroutines-flows/SKILL.md +284 -0
  297. package/src/skills/kotlin-exposed-patterns/SKILL.md +719 -0
  298. package/src/skills/kotlin-ktor-patterns/SKILL.md +689 -0
  299. package/src/skills/kotlin-patterns/SKILL.md +711 -0
  300. package/src/skills/kotlin-testing/SKILL.md +824 -0
  301. package/src/skills/laravel-patterns/SKILL.md +415 -0
  302. package/src/skills/laravel-security/SKILL.md +285 -0
  303. package/src/skills/laravel-tdd/SKILL.md +283 -0
  304. package/src/skills/laravel-verification/SKILL.md +179 -0
  305. package/src/skills/mcp-server-patterns/SKILL.md +67 -0
  306. package/src/skills/perl-patterns/SKILL.md +504 -0
  307. package/src/skills/perl-testing/SKILL.md +475 -0
  308. package/src/skills/postgres-patterns/SKILL.md +147 -0
  309. package/src/skills/prompt-optimizer/SKILL.md +397 -0
  310. package/src/skills/python-patterns/SKILL.md +750 -0
  311. package/src/skills/python-testing/SKILL.md +816 -0
  312. package/src/skills/rust-patterns/SKILL.md +499 -0
  313. package/src/skills/rust-testing/SKILL.md +500 -0
  314. package/src/skills/safety-guard/SKILL.md +69 -0
  315. package/src/skills/search-first/SKILL.md +161 -0
  316. package/src/skills/security-review/SKILL.md +495 -0
  317. package/src/skills/security-review/cloud-infrastructure-security.md +361 -0
  318. package/src/skills/security-scan/SKILL.md +165 -0
  319. package/src/skills/springboot-patterns/SKILL.md +314 -0
  320. package/src/skills/springboot-security/SKILL.md +272 -0
  321. package/src/skills/springboot-tdd/SKILL.md +158 -0
  322. package/src/skills/springboot-verification/SKILL.md +231 -0
  323. package/src/skills/tdd-workflow/SKILL.md +410 -0
  324. package/ecc/scripts/hooks/session-end-marker.js +0 -15
  325. package/gsd/LICENSE +0 -21
  326. package/gsd/commands-gsd/discuss-phase.md +0 -90
  327. package/gsd/commands-gsd/execute-phase.md +0 -41
  328. package/gsd/commands-gsd/join-discord.md +0 -18
  329. package/gsd/commands-gsd/reapply-patches.md +0 -123
  330. package/gsd/commands-gsd/set-profile.md +0 -34
  331. package/gsd/get-shit-done/bin/lib/config.cjs +0 -169
  332. package/gsd/get-shit-done/bin/lib/core.cjs +0 -492
  333. package/gsd/get-shit-done/bin/lib/init.cjs +0 -710
  334. package/gsd/get-shit-done/workflows/execute-phase.md +0 -459
  335. package/gsd/get-shit-done/workflows/help.md +0 -489
  336. package/gsd/get-shit-done/workflows/pause-work.md +0 -122
  337. package/gsd/get-shit-done/workflows/plan-phase.md +0 -560
  338. package/gsd/hooks/gsd-check-update.js +0 -81
  339. package/kit/CLAUDE.md +0 -43
  340. package/kit/commands/kit/update.md +0 -46
  341. package/kit/mcp.json +0 -10
  342. package/kit/rules/code-style.md +0 -24
  343. /package/{ecc → src}/agents/architect.md +0 -0
  344. /package/{ecc → src}/agents/code-reviewer.md +0 -0
  345. /package/{ecc → src}/agents/doc-updater.md +0 -0
  346. /package/{ecc → src}/agents/e2e-runner.md +0 -0
  347. /package/{ecc → src}/agents/security-reviewer.md +0 -0
  348. /package/{ecc → src}/agents/tdd-guide.md +0 -0
  349. /package/{ecc/rules → src/available-rules}/golang/coding-style.md +0 -0
  350. /package/{ecc/rules → src/available-rules}/golang/hooks.md +0 -0
  351. /package/{ecc/rules → src/available-rules}/golang/patterns.md +0 -0
  352. /package/{ecc/rules → src/available-rules}/golang/security.md +0 -0
  353. /package/{ecc/rules → src/available-rules}/golang/testing.md +0 -0
  354. /package/{ecc/rules → src/available-rules}/kotlin/coding-style.md +0 -0
  355. /package/{ecc/rules → src/available-rules}/kotlin/patterns.md +0 -0
  356. /package/{ecc/rules → src/available-rules}/kotlin/security.md +0 -0
  357. /package/{ecc/rules → src/available-rules}/kotlin/testing.md +0 -0
  358. /package/{ecc/rules → src/available-rules}/perl/coding-style.md +0 -0
  359. /package/{ecc/rules → src/available-rules}/perl/hooks.md +0 -0
  360. /package/{ecc/rules → src/available-rules}/perl/patterns.md +0 -0
  361. /package/{ecc/rules → src/available-rules}/perl/security.md +0 -0
  362. /package/{ecc/rules → src/available-rules}/perl/testing.md +0 -0
  363. /package/{ecc/rules → src/available-rules}/php/coding-style.md +0 -0
  364. /package/{ecc/rules → src/available-rules}/php/hooks.md +0 -0
  365. /package/{ecc/rules → src/available-rules}/php/patterns.md +0 -0
  366. /package/{ecc/rules → src/available-rules}/php/security.md +0 -0
  367. /package/{ecc/rules → src/available-rules}/php/testing.md +0 -0
  368. /package/{ecc/rules → src/available-rules}/python/coding-style.md +0 -0
  369. /package/{ecc/rules → src/available-rules}/python/hooks.md +0 -0
  370. /package/{ecc/rules → src/available-rules}/python/patterns.md +0 -0
  371. /package/{ecc/rules → src/available-rules}/python/security.md +0 -0
  372. /package/{ecc/rules → src/available-rules}/python/testing.md +0 -0
  373. /package/{ecc/rules → src/available-rules}/swift/coding-style.md +0 -0
  374. /package/{ecc/rules → src/available-rules}/swift/hooks.md +0 -0
  375. /package/{ecc/rules → src/available-rules}/swift/patterns.md +0 -0
  376. /package/{ecc/rules → src/available-rules}/swift/security.md +0 -0
  377. /package/{ecc/rules → src/available-rules}/swift/testing.md +0 -0
  378. /package/{ecc/rules → src/available-rules}/typescript/coding-style.md +0 -0
  379. /package/{ecc/rules → src/available-rules}/typescript/hooks.md +0 -0
  380. /package/{ecc/rules → src/available-rules}/typescript/patterns.md +0 -0
  381. /package/{ecc/rules → src/available-rules}/typescript/security.md +0 -0
  382. /package/{ecc/rules → src/available-rules}/typescript/testing.md +0 -0
  383. /package/{ecc → src}/commands/checkpoint.md +0 -0
  384. /package/{ecc → src}/commands/learn.md +0 -0
  385. /package/{ecc → src}/commands/model-route.md +0 -0
  386. /package/{ecc → src}/commands/resume-session.md +0 -0
  387. /package/{ecc → src}/commands/save-session.md +0 -0
  388. /package/{kit → src}/commands/setup-refresh.md +0 -0
  389. /package/{kit → src}/commands/tool-guide.md +0 -0
  390. /package/{ecc → src}/commands/verify.md +0 -0
  391. /package/{ecc → src}/contexts/dev.md +0 -0
  392. /package/{ecc → src}/contexts/research.md +0 -0
  393. /package/{ecc → src}/contexts/review.md +0 -0
  394. /package/{ecc → src}/examples/CLAUDE.md +0 -0
  395. /package/{ecc → src}/examples/django-api-CLAUDE.md +0 -0
  396. /package/{ecc → src}/examples/go-microservice-CLAUDE.md +0 -0
  397. /package/{ecc → src}/examples/rust-api-CLAUDE.md +0 -0
  398. /package/{ecc → src}/examples/saas-nextjs-CLAUDE.md +0 -0
  399. /package/{ecc → src}/examples/user-CLAUDE.md +0 -0
  400. /package/{ecc/scripts → src}/hooks/check-hook-enabled.js +0 -0
  401. /package/{ecc/scripts → src}/hooks/evaluate-session.js +0 -0
  402. /package/{ecc/scripts → src}/hooks/pre-compact.js +0 -0
  403. /package/{ecc/scripts → src}/hooks/suggest-compact.js +0 -0
  404. /package/{ecc/scripts → src}/lib/package-manager.d.ts +0 -0
  405. /package/{ecc/scripts → src}/lib/package-manager.js +0 -0
  406. /package/{ecc/scripts → src}/lib/resolve-formatter.js +0 -0
  407. /package/{ecc/scripts → src}/lib/session-aliases.d.ts +0 -0
  408. /package/{ecc/scripts → src}/lib/session-aliases.js +0 -0
  409. /package/{ecc/scripts → src}/lib/shell-split.js +0 -0
  410. /package/{gsd/get-shit-done → src/pilot}/bin/lib/frontmatter.cjs +0 -0
  411. /package/{gsd/get-shit-done → src/pilot}/bin/lib/milestone.cjs +0 -0
  412. /package/{gsd/get-shit-done → src/pilot}/bin/lib/roadmap.cjs +0 -0
  413. /package/{gsd/get-shit-done → src/pilot}/bin/lib/template.cjs +0 -0
  414. /package/{gsd/get-shit-done → src/pilot}/references/checkpoints.md +0 -0
  415. /package/{gsd/get-shit-done → src/pilot}/references/questioning.md +0 -0
  416. /package/{gsd/get-shit-done → src/pilot}/references/tdd.md +0 -0
  417. /package/{gsd/get-shit-done → src/pilot}/templates/codebase/concerns.md +0 -0
  418. /package/{gsd/get-shit-done → src/pilot}/templates/codebase/conventions.md +0 -0
  419. /package/{gsd/get-shit-done → src/pilot}/templates/codebase/integrations.md +0 -0
  420. /package/{gsd/get-shit-done → src/pilot}/templates/codebase/stack.md +0 -0
  421. /package/{gsd/get-shit-done → src/pilot}/templates/codebase/testing.md +0 -0
  422. /package/{gsd/get-shit-done → src/pilot}/templates/config.json +0 -0
  423. /package/{gsd/get-shit-done → src/pilot}/templates/continue-here.md +0 -0
  424. /package/{gsd/get-shit-done → src/pilot}/templates/milestone-archive.md +0 -0
  425. /package/{gsd/get-shit-done → src/pilot}/templates/milestone.md +0 -0
  426. /package/{gsd/get-shit-done → src/pilot}/templates/requirements.md +0 -0
  427. /package/{gsd/get-shit-done → src/pilot}/templates/research-project/ARCHITECTURE.md +0 -0
  428. /package/{gsd/get-shit-done → src/pilot}/templates/research-project/FEATURES.md +0 -0
  429. /package/{gsd/get-shit-done → src/pilot}/templates/research-project/PITFALLS.md +0 -0
  430. /package/{gsd/get-shit-done → src/pilot}/templates/research-project/STACK.md +0 -0
  431. /package/{gsd/get-shit-done → src/pilot}/templates/research-project/SUMMARY.md +0 -0
  432. /package/{gsd/get-shit-done → src/pilot}/templates/retrospective.md +0 -0
  433. /package/{gsd/get-shit-done → src/pilot}/templates/roadmap.md +0 -0
  434. /package/{gsd/get-shit-done → src/pilot}/templates/summary-minimal.md +0 -0
  435. /package/{gsd/get-shit-done → src/pilot}/templates/summary-standard.md +0 -0
  436. /package/{gsd/get-shit-done → src/pilot}/templates/summary.md +0 -0
  437. /package/{gsd/get-shit-done → src/pilot}/templates/user-setup.md +0 -0
  438. /package/{gsd/get-shit-done → src/pilot}/templates/verification-report.md +0 -0
  439. /package/{ecc → src}/rules/common/development-workflow.md +0 -0
  440. /package/{ecc → src}/rules/common/git-workflow.md +0 -0
  441. /package/{ecc → src}/rules/common/hooks.md +0 -0
  442. /package/{ecc → src}/rules/common/patterns.md +0 -0
  443. /package/{ecc → src}/rules/common/performance.md +0 -0
  444. /package/{ecc → src}/rules/common/security.md +0 -0
  445. /package/{ecc → src}/rules/common/testing.md +0 -0
  446. /package/{ecc → src}/skills/continuous-learning-v2/agents/observer.md +0 -0
  447. /package/{ecc → src}/skills/continuous-learning-v2/agents/start-observer.sh +0 -0
  448. /package/{ecc → src}/skills/continuous-learning-v2/config.json +0 -0
  449. /package/{ecc → src}/skills/continuous-learning-v2/hooks/observe.sh +0 -0
  450. /package/{ecc → src}/skills/continuous-learning-v2/scripts/detect-project.sh +0 -0
  451. /package/{ecc → src}/skills/continuous-learning-v2/scripts/instinct-cli.py +0 -0
  452. /package/{ecc → src}/skills/continuous-learning-v2/scripts/test_parse_instinct.py +0 -0
  453. /package/{ecc → src}/skills/strategic-compact/SKILL.md +0 -0
  454. /package/{ecc → src}/skills/strategic-compact/suggest-compact.sh +0 -0
  455. /package/{ecc/skills/verification-loop-SKILL.md → src/skills/verification-loop/SKILL.md} +0 -0
@@ -0,0 +1,530 @@
1
+ ---
2
+ name: coding-standards
3
+ description: Universal coding standards, best practices, and patterns for TypeScript, JavaScript, React, and Node.js development.
4
+ origin: ECC
5
+ ---
6
+
7
+ # Coding Standards & Best Practices
8
+
9
+ Universal coding standards applicable across all projects.
10
+
11
+ ## When to Activate
12
+
13
+ - Starting a new project or module
14
+ - Reviewing code for quality and maintainability
15
+ - Refactoring existing code to follow conventions
16
+ - Enforcing naming, formatting, or structural consistency
17
+ - Setting up linting, formatting, or type-checking rules
18
+ - Onboarding new contributors to coding conventions
19
+
20
+ ## Code Quality Principles
21
+
22
+ ### 1. Readability First
23
+ - Code is read more than written
24
+ - Clear variable and function names
25
+ - Self-documenting code preferred over comments
26
+ - Consistent formatting
27
+
28
+ ### 2. KISS (Keep It Simple, Stupid)
29
+ - Simplest solution that works
30
+ - Avoid over-engineering
31
+ - No premature optimization
32
+ - Easy to understand > clever code
33
+
34
+ ### 3. DRY (Don't Repeat Yourself)
35
+ - Extract common logic into functions
36
+ - Create reusable components
37
+ - Share utilities across modules
38
+ - Avoid copy-paste programming
39
+
40
+ ### 4. YAGNI (You Aren't Gonna Need It)
41
+ - Don't build features before they're needed
42
+ - Avoid speculative generality
43
+ - Add complexity only when required
44
+ - Start simple, refactor when needed
45
+
46
+ ## TypeScript/JavaScript Standards
47
+
48
+ ### Variable Naming
49
+
50
+ ```typescript
51
+ // ✅ GOOD: Descriptive names
52
+ const marketSearchQuery = 'election'
53
+ const isUserAuthenticated = true
54
+ const totalRevenue = 1000
55
+
56
+ // ❌ BAD: Unclear names
57
+ const q = 'election'
58
+ const flag = true
59
+ const x = 1000
60
+ ```
61
+
62
+ ### Function Naming
63
+
64
+ ```typescript
65
+ // ✅ GOOD: Verb-noun pattern
66
+ async function fetchMarketData(marketId: string) { }
67
+ function calculateSimilarity(a: number[], b: number[]) { }
68
+ function isValidEmail(email: string): boolean { }
69
+
70
+ // ❌ BAD: Unclear or noun-only
71
+ async function market(id: string) { }
72
+ function similarity(a, b) { }
73
+ function email(e) { }
74
+ ```
75
+
76
+ ### Immutability Pattern (CRITICAL)
77
+
78
+ ```typescript
79
+ // ✅ ALWAYS use spread operator
80
+ const updatedUser = {
81
+ ...user,
82
+ name: 'New Name'
83
+ }
84
+
85
+ const updatedArray = [...items, newItem]
86
+
87
+ // ❌ NEVER mutate directly
88
+ user.name = 'New Name' // BAD
89
+ items.push(newItem) // BAD
90
+ ```
91
+
92
+ ### Error Handling
93
+
94
+ ```typescript
95
+ // ✅ GOOD: Comprehensive error handling
96
+ async function fetchData(url: string) {
97
+ try {
98
+ const response = await fetch(url)
99
+
100
+ if (!response.ok) {
101
+ throw new Error(`HTTP ${response.status}: ${response.statusText}`)
102
+ }
103
+
104
+ return await response.json()
105
+ } catch (error) {
106
+ console.error('Fetch failed:', error)
107
+ throw new Error('Failed to fetch data')
108
+ }
109
+ }
110
+
111
+ // ❌ BAD: No error handling
112
+ async function fetchData(url) {
113
+ const response = await fetch(url)
114
+ return response.json()
115
+ }
116
+ ```
117
+
118
+ ### Async/Await Best Practices
119
+
120
+ ```typescript
121
+ // ✅ GOOD: Parallel execution when possible
122
+ const [users, markets, stats] = await Promise.all([
123
+ fetchUsers(),
124
+ fetchMarkets(),
125
+ fetchStats()
126
+ ])
127
+
128
+ // ❌ BAD: Sequential when unnecessary
129
+ const users = await fetchUsers()
130
+ const markets = await fetchMarkets()
131
+ const stats = await fetchStats()
132
+ ```
133
+
134
+ ### Type Safety
135
+
136
+ ```typescript
137
+ // ✅ GOOD: Proper types
138
+ interface Market {
139
+ id: string
140
+ name: string
141
+ status: 'active' | 'resolved' | 'closed'
142
+ created_at: Date
143
+ }
144
+
145
+ function getMarket(id: string): Promise<Market> {
146
+ // Implementation
147
+ }
148
+
149
+ // ❌ BAD: Using 'any'
150
+ function getMarket(id: any): Promise<any> {
151
+ // Implementation
152
+ }
153
+ ```
154
+
155
+ ## React Best Practices
156
+
157
+ ### Component Structure
158
+
159
+ ```typescript
160
+ // ✅ GOOD: Functional component with types
161
+ interface ButtonProps {
162
+ children: React.ReactNode
163
+ onClick: () => void
164
+ disabled?: boolean
165
+ variant?: 'primary' | 'secondary'
166
+ }
167
+
168
+ export function Button({
169
+ children,
170
+ onClick,
171
+ disabled = false,
172
+ variant = 'primary'
173
+ }: ButtonProps) {
174
+ return (
175
+ <button
176
+ onClick={onClick}
177
+ disabled={disabled}
178
+ className={`btn btn-${variant}`}
179
+ >
180
+ {children}
181
+ </button>
182
+ )
183
+ }
184
+
185
+ // ❌ BAD: No types, unclear structure
186
+ export function Button(props) {
187
+ return <button onClick={props.onClick}>{props.children}</button>
188
+ }
189
+ ```
190
+
191
+ ### Custom Hooks
192
+
193
+ ```typescript
194
+ // ✅ GOOD: Reusable custom hook
195
+ export function useDebounce<T>(value: T, delay: number): T {
196
+ const [debouncedValue, setDebouncedValue] = useState<T>(value)
197
+
198
+ useEffect(() => {
199
+ const handler = setTimeout(() => {
200
+ setDebouncedValue(value)
201
+ }, delay)
202
+
203
+ return () => clearTimeout(handler)
204
+ }, [value, delay])
205
+
206
+ return debouncedValue
207
+ }
208
+
209
+ // Usage
210
+ const debouncedQuery = useDebounce(searchQuery, 500)
211
+ ```
212
+
213
+ ### State Management
214
+
215
+ ```typescript
216
+ // ✅ GOOD: Proper state updates
217
+ const [count, setCount] = useState(0)
218
+
219
+ // Functional update for state based on previous state
220
+ setCount(prev => prev + 1)
221
+
222
+ // ❌ BAD: Direct state reference
223
+ setCount(count + 1) // Can be stale in async scenarios
224
+ ```
225
+
226
+ ### Conditional Rendering
227
+
228
+ ```typescript
229
+ // ✅ GOOD: Clear conditional rendering
230
+ {isLoading && <Spinner />}
231
+ {error && <ErrorMessage error={error} />}
232
+ {data && <DataDisplay data={data} />}
233
+
234
+ // ❌ BAD: Ternary hell
235
+ {isLoading ? <Spinner /> : error ? <ErrorMessage error={error} /> : data ? <DataDisplay data={data} /> : null}
236
+ ```
237
+
238
+ ## API Design Standards
239
+
240
+ ### REST API Conventions
241
+
242
+ ```
243
+ GET /api/markets # List all markets
244
+ GET /api/markets/:id # Get specific market
245
+ POST /api/markets # Create new market
246
+ PUT /api/markets/:id # Update market (full)
247
+ PATCH /api/markets/:id # Update market (partial)
248
+ DELETE /api/markets/:id # Delete market
249
+
250
+ # Query parameters for filtering
251
+ GET /api/markets?status=active&limit=10&offset=0
252
+ ```
253
+
254
+ ### Response Format
255
+
256
+ ```typescript
257
+ // ✅ GOOD: Consistent response structure
258
+ interface ApiResponse<T> {
259
+ success: boolean
260
+ data?: T
261
+ error?: string
262
+ meta?: {
263
+ total: number
264
+ page: number
265
+ limit: number
266
+ }
267
+ }
268
+
269
+ // Success response
270
+ return NextResponse.json({
271
+ success: true,
272
+ data: markets,
273
+ meta: { total: 100, page: 1, limit: 10 }
274
+ })
275
+
276
+ // Error response
277
+ return NextResponse.json({
278
+ success: false,
279
+ error: 'Invalid request'
280
+ }, { status: 400 })
281
+ ```
282
+
283
+ ### Input Validation
284
+
285
+ ```typescript
286
+ import { z } from 'zod'
287
+
288
+ // ✅ GOOD: Schema validation
289
+ const CreateMarketSchema = z.object({
290
+ name: z.string().min(1).max(200),
291
+ description: z.string().min(1).max(2000),
292
+ endDate: z.string().datetime(),
293
+ categories: z.array(z.string()).min(1)
294
+ })
295
+
296
+ export async function POST(request: Request) {
297
+ const body = await request.json()
298
+
299
+ try {
300
+ const validated = CreateMarketSchema.parse(body)
301
+ // Proceed with validated data
302
+ } catch (error) {
303
+ if (error instanceof z.ZodError) {
304
+ return NextResponse.json({
305
+ success: false,
306
+ error: 'Validation failed',
307
+ details: error.errors
308
+ }, { status: 400 })
309
+ }
310
+ }
311
+ }
312
+ ```
313
+
314
+ ## File Organization
315
+
316
+ ### Project Structure
317
+
318
+ ```
319
+ src/
320
+ ├── app/ # Next.js App Router
321
+ │ ├── api/ # API routes
322
+ │ ├── markets/ # Market pages
323
+ │ └── (auth)/ # Auth pages (route groups)
324
+ ├── components/ # React components
325
+ │ ├── ui/ # Generic UI components
326
+ │ ├── forms/ # Form components
327
+ │ └── layouts/ # Layout components
328
+ ├── hooks/ # Custom React hooks
329
+ ├── lib/ # Utilities and configs
330
+ │ ├── api/ # API clients
331
+ │ ├── utils/ # Helper functions
332
+ │ └── constants/ # Constants
333
+ ├── types/ # TypeScript types
334
+ └── styles/ # Global styles
335
+ ```
336
+
337
+ ### File Naming
338
+
339
+ ```
340
+ components/Button.tsx # PascalCase for components
341
+ hooks/useAuth.ts # camelCase with 'use' prefix
342
+ lib/formatDate.ts # camelCase for utilities
343
+ types/market.types.ts # camelCase with .types suffix
344
+ ```
345
+
346
+ ## Comments & Documentation
347
+
348
+ ### When to Comment
349
+
350
+ ```typescript
351
+ // ✅ GOOD: Explain WHY, not WHAT
352
+ // Use exponential backoff to avoid overwhelming the API during outages
353
+ const delay = Math.min(1000 * Math.pow(2, retryCount), 30000)
354
+
355
+ // Deliberately using mutation here for performance with large arrays
356
+ items.push(newItem)
357
+
358
+ // ❌ BAD: Stating the obvious
359
+ // Increment counter by 1
360
+ count++
361
+
362
+ // Set name to user's name
363
+ name = user.name
364
+ ```
365
+
366
+ ### JSDoc for Public APIs
367
+
368
+ ```typescript
369
+ /**
370
+ * Searches markets using semantic similarity.
371
+ *
372
+ * @param query - Natural language search query
373
+ * @param limit - Maximum number of results (default: 10)
374
+ * @returns Array of markets sorted by similarity score
375
+ * @throws {Error} If OpenAI API fails or Redis unavailable
376
+ *
377
+ * @example
378
+ * ```typescript
379
+ * const results = await searchMarkets('election', 5)
380
+ * console.log(results[0].name) // "Trump vs Biden"
381
+ * ```
382
+ */
383
+ export async function searchMarkets(
384
+ query: string,
385
+ limit: number = 10
386
+ ): Promise<Market[]> {
387
+ // Implementation
388
+ }
389
+ ```
390
+
391
+ ## Performance Best Practices
392
+
393
+ ### Memoization
394
+
395
+ ```typescript
396
+ import { useMemo, useCallback } from 'react'
397
+
398
+ // ✅ GOOD: Memoize expensive computations
399
+ const sortedMarkets = useMemo(() => {
400
+ return markets.sort((a, b) => b.volume - a.volume)
401
+ }, [markets])
402
+
403
+ // ✅ GOOD: Memoize callbacks
404
+ const handleSearch = useCallback((query: string) => {
405
+ setSearchQuery(query)
406
+ }, [])
407
+ ```
408
+
409
+ ### Lazy Loading
410
+
411
+ ```typescript
412
+ import { lazy, Suspense } from 'react'
413
+
414
+ // ✅ GOOD: Lazy load heavy components
415
+ const HeavyChart = lazy(() => import('./HeavyChart'))
416
+
417
+ export function Dashboard() {
418
+ return (
419
+ <Suspense fallback={<Spinner />}>
420
+ <HeavyChart />
421
+ </Suspense>
422
+ )
423
+ }
424
+ ```
425
+
426
+ ### Database Queries
427
+
428
+ ```typescript
429
+ // ✅ GOOD: Select only needed columns
430
+ const { data } = await supabase
431
+ .from('markets')
432
+ .select('id, name, status')
433
+ .limit(10)
434
+
435
+ // ❌ BAD: Select everything
436
+ const { data } = await supabase
437
+ .from('markets')
438
+ .select('*')
439
+ ```
440
+
441
+ ## Testing Standards
442
+
443
+ ### Test Structure (AAA Pattern)
444
+
445
+ ```typescript
446
+ test('calculates similarity correctly', () => {
447
+ // Arrange
448
+ const vector1 = [1, 0, 0]
449
+ const vector2 = [0, 1, 0]
450
+
451
+ // Act
452
+ const similarity = calculateCosineSimilarity(vector1, vector2)
453
+
454
+ // Assert
455
+ expect(similarity).toBe(0)
456
+ })
457
+ ```
458
+
459
+ ### Test Naming
460
+
461
+ ```typescript
462
+ // ✅ GOOD: Descriptive test names
463
+ test('returns empty array when no markets match query', () => { })
464
+ test('throws error when OpenAI API key is missing', () => { })
465
+ test('falls back to substring search when Redis unavailable', () => { })
466
+
467
+ // ❌ BAD: Vague test names
468
+ test('works', () => { })
469
+ test('test search', () => { })
470
+ ```
471
+
472
+ ## Code Smell Detection
473
+
474
+ Watch for these anti-patterns:
475
+
476
+ ### 1. Long Functions
477
+ ```typescript
478
+ // ❌ BAD: Function > 50 lines
479
+ function processMarketData() {
480
+ // 100 lines of code
481
+ }
482
+
483
+ // ✅ GOOD: Split into smaller functions
484
+ function processMarketData() {
485
+ const validated = validateData()
486
+ const transformed = transformData(validated)
487
+ return saveData(transformed)
488
+ }
489
+ ```
490
+
491
+ ### 2. Deep Nesting
492
+ ```typescript
493
+ // ❌ BAD: 5+ levels of nesting
494
+ if (user) {
495
+ if (user.isAdmin) {
496
+ if (market) {
497
+ if (market.isActive) {
498
+ if (hasPermission) {
499
+ // Do something
500
+ }
501
+ }
502
+ }
503
+ }
504
+ }
505
+
506
+ // ✅ GOOD: Early returns
507
+ if (!user) return
508
+ if (!user.isAdmin) return
509
+ if (!market) return
510
+ if (!market.isActive) return
511
+ if (!hasPermission) return
512
+
513
+ // Do something
514
+ ```
515
+
516
+ ### 3. Magic Numbers
517
+ ```typescript
518
+ // ❌ BAD: Unexplained numbers
519
+ if (retryCount > 3) { }
520
+ setTimeout(callback, 500)
521
+
522
+ // ✅ GOOD: Named constants
523
+ const MAX_RETRIES = 3
524
+ const DEBOUNCE_DELAY_MS = 500
525
+
526
+ if (retryCount > MAX_RETRIES) { }
527
+ setTimeout(callback, DEBOUNCE_DELAY_MS)
528
+ ```
529
+
530
+ **Remember**: Code quality is not negotiable. Clear, maintainable code enables rapid development and confident refactoring.
@@ -0,0 +1,135 @@
1
+ ---
2
+ name: context-budget
3
+ description: Audits Claude Code context window consumption across agents, skills, MCP servers, and rules. Identifies bloat, redundant components, and produces prioritized token-savings recommendations.
4
+ origin: ECC
5
+ ---
6
+
7
+ # Context Budget
8
+
9
+ Analyze token overhead across every loaded component in a Claude Code session and surface actionable optimizations to reclaim context space.
10
+
11
+ ## When to Use
12
+
13
+ - Session performance feels sluggish or output quality is degrading
14
+ - You've recently added many skills, agents, or MCP servers
15
+ - You want to know how much context headroom you actually have
16
+ - Planning to add more components and need to know if there's room
17
+ - Running `/context-budget` command (this skill backs it)
18
+
19
+ ## How It Works
20
+
21
+ ### Phase 1: Inventory
22
+
23
+ Scan all component directories and estimate token consumption:
24
+
25
+ **Agents** (`agents/*.md`)
26
+ - Count lines and tokens per file (words × 1.3)
27
+ - Extract `description` frontmatter length
28
+ - Flag: files >200 lines (heavy), description >30 words (bloated frontmatter)
29
+
30
+ **Skills** (`skills/*/SKILL.md`)
31
+ - Count tokens per SKILL.md
32
+ - Flag: files >400 lines
33
+ - Check for duplicate copies in `.agents/skills/` — skip identical copies to avoid double-counting
34
+
35
+ **Rules** (`rules/**/*.md`)
36
+ - Count tokens per file
37
+ - Flag: files >100 lines
38
+ - Detect content overlap between rule files in the same language module
39
+
40
+ **MCP Servers** (`.mcp.json` or active MCP config)
41
+ - Count configured servers and total tool count
42
+ - Estimate schema overhead at ~500 tokens per tool
43
+ - Flag: servers with >20 tools, servers that wrap simple CLI commands (`gh`, `git`, `npm`, `supabase`, `vercel`)
44
+
45
+ **CLAUDE.md** (project + user-level)
46
+ - Count tokens per file in the CLAUDE.md chain
47
+ - Flag: combined total >300 lines
48
+
49
+ ### Phase 2: Classify
50
+
51
+ Sort every component into a bucket:
52
+
53
+ | Bucket | Criteria | Action |
54
+ |--------|----------|--------|
55
+ | **Always needed** | Referenced in CLAUDE.md, backs an active command, or matches current project type | Keep |
56
+ | **Sometimes needed** | Domain-specific (e.g. language patterns), not referenced in CLAUDE.md | Consider on-demand activation |
57
+ | **Rarely needed** | No command reference, overlapping content, or no obvious project match | Remove or lazy-load |
58
+
59
+ ### Phase 3: Detect Issues
60
+
61
+ Identify the following problem patterns:
62
+
63
+ - **Bloated agent descriptions** — description >30 words in frontmatter loads into every Task tool invocation
64
+ - **Heavy agents** — files >200 lines inflate Task tool context on every spawn
65
+ - **Redundant components** — skills that duplicate agent logic, rules that duplicate CLAUDE.md
66
+ - **MCP over-subscription** — >10 servers, or servers wrapping CLI tools available for free
67
+ - **CLAUDE.md bloat** — verbose explanations, outdated sections, instructions that should be rules
68
+
69
+ ### Phase 4: Report
70
+
71
+ Produce the context budget report:
72
+
73
+ ```
74
+ Context Budget Report
75
+ ═══════════════════════════════════════
76
+
77
+ Total estimated overhead: ~XX,XXX tokens
78
+ Context model: Claude Sonnet (200K window)
79
+ Effective available context: ~XXX,XXX tokens (XX%)
80
+
81
+ Component Breakdown:
82
+ ┌─────────────────┬────────┬───────────┐
83
+ │ Component │ Count │ Tokens │
84
+ ├─────────────────┼────────┼───────────┤
85
+ │ Agents │ N │ ~X,XXX │
86
+ │ Skills │ N │ ~X,XXX │
87
+ │ Rules │ N │ ~X,XXX │
88
+ │ MCP tools │ N │ ~XX,XXX │
89
+ │ CLAUDE.md │ N │ ~X,XXX │
90
+ └─────────────────┴────────┴───────────┘
91
+
92
+ ⚠ Issues Found (N):
93
+ [ranked by token savings]
94
+
95
+ Top 3 Optimizations:
96
+ 1. [action] → save ~X,XXX tokens
97
+ 2. [action] → save ~X,XXX tokens
98
+ 3. [action] → save ~X,XXX tokens
99
+
100
+ Potential savings: ~XX,XXX tokens (XX% of current overhead)
101
+ ```
102
+
103
+ In verbose mode, additionally output per-file token counts, line-by-line breakdown of the heaviest files, specific redundant lines between overlapping components, and MCP tool list with per-tool schema size estimates.
104
+
105
+ ## Examples
106
+
107
+ **Basic audit**
108
+ ```
109
+ User: /context-budget
110
+ Skill: Scans setup → 16 agents (12,400 tokens), 28 skills (6,200), 87 MCP tools (43,500), 2 CLAUDE.md (1,200)
111
+ Flags: 3 heavy agents, 14 MCP servers (3 CLI-replaceable)
112
+ Top saving: remove 3 MCP servers → -27,500 tokens (47% overhead reduction)
113
+ ```
114
+
115
+ **Verbose mode**
116
+ ```
117
+ User: /context-budget --verbose
118
+ Skill: Full report + per-file breakdown showing planner.md (213 lines, 1,840 tokens),
119
+ MCP tool list with per-tool sizes, duplicated rule lines side by side
120
+ ```
121
+
122
+ **Pre-expansion check**
123
+ ```
124
+ User: I want to add 5 more MCP servers, do I have room?
125
+ Skill: Current overhead 33% → adding 5 servers (~50 tools) would add ~25,000 tokens → pushes to 45% overhead
126
+ Recommendation: remove 2 CLI-replaceable servers first to stay under 40%
127
+ ```
128
+
129
+ ## Best Practices
130
+
131
+ - **Token estimation**: use `words × 1.3` for prose, `chars / 4` for code-heavy files
132
+ - **MCP is the biggest lever**: each tool schema costs ~500 tokens; a 30-tool server costs more than all your skills combined
133
+ - **Agent descriptions are loaded always**: even if the agent is never invoked, its description field is present in every Task tool context
134
+ - **Verbose mode for debugging**: use when you need to pinpoint the exact files driving overhead, not for regular audits
135
+ - **Audit after changes**: run after adding any agent, skill, or MCP server to catch creep early
@@ -149,14 +149,14 @@ Add to your `~/.claude/settings.json`.
149
149
  "matcher": "*",
150
150
  "hooks": [{
151
151
  "type": "command",
152
- "command": "${CLAUDE_PLUGIN_ROOT}/skills/continuous-learning-v2/hooks/observe.sh"
152
+ "command": "$(getClaudeDir)/skills/continuous-learning-v2/hooks/observe.sh"
153
153
  }]
154
154
  }],
155
155
  "PostToolUse": [{
156
156
  "matcher": "*",
157
157
  "hooks": [{
158
158
  "type": "command",
159
- "command": "${CLAUDE_PLUGIN_ROOT}/skills/continuous-learning-v2/hooks/observe.sh"
159
+ "command": "$(getClaudeDir)/skills/continuous-learning-v2/hooks/observe.sh"
160
160
  }]
161
161
  }]
162
162
  }
@@ -38,7 +38,7 @@ analyze_observations() {
38
38
  return
39
39
  fi
40
40
 
41
- prompt_file="$(mktemp "${TMPDIR:-/tmp}/ecc-observer-prompt.XXXXXX")"
41
+ prompt_file="$(mktemp "${TMPDIR:-/tmp}/ccp-observer-prompt.XXXXXX")"
42
42
  cat > "$prompt_file" <<PROMPT
43
43
  Read ${OBSERVATIONS_FILE} and identify patterns for the project ${PROJECT_NAME} (user corrections, error resolutions, repeated workflows, tool preferences).
44
44
  If you find 3+ occurrences of the same pattern, create an instinct file in ${INSTINCTS_DIR}/<id>.md.