@macpaw/cctk 1.0.0-beta.1

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 (415) hide show
  1. package/License +21 -0
  2. package/README.md +142 -0
  3. package/bin/index.js +5 -0
  4. package/dist/index.js +1 -0
  5. package/package.json +65 -0
  6. package/templates/claude/agents/brainstormer.md +113 -0
  7. package/templates/claude/agents/code-reviewer.md +157 -0
  8. package/templates/claude/agents/copywriter.md +110 -0
  9. package/templates/claude/agents/database-admin.md +92 -0
  10. package/templates/claude/agents/debugger.md +137 -0
  11. package/templates/claude/agents/docs-manager.md +208 -0
  12. package/templates/claude/agents/fullstack-developer.md +95 -0
  13. package/templates/claude/agents/git-manager.md +394 -0
  14. package/templates/claude/agents/journal-writer.md +113 -0
  15. package/templates/claude/agents/mcp-manager.md +89 -0
  16. package/templates/claude/agents/planner.md +108 -0
  17. package/templates/claude/agents/project-manager.md +125 -0
  18. package/templates/claude/agents/registry.json +304 -0
  19. package/templates/claude/agents/researcher.md +37 -0
  20. package/templates/claude/agents/scout-external.md +140 -0
  21. package/templates/claude/agents/scout.md +106 -0
  22. package/templates/claude/agents/tester.md +105 -0
  23. package/templates/claude/agents/ui-ux-designer.md +208 -0
  24. package/templates/claude/commands/ask.md +56 -0
  25. package/templates/claude/commands/bootstrap/auto/fast.md +106 -0
  26. package/templates/claude/commands/bootstrap/auto/parallel.md +64 -0
  27. package/templates/claude/commands/bootstrap/auto.md +110 -0
  28. package/templates/claude/commands/bootstrap.md +130 -0
  29. package/templates/claude/commands/brainstorm.md +75 -0
  30. package/templates/claude/commands/code/auto.md +198 -0
  31. package/templates/claude/commands/code/no-test.md +172 -0
  32. package/templates/claude/commands/code/parallel.md +100 -0
  33. package/templates/claude/commands/code.md +197 -0
  34. package/templates/claude/commands/coding-level.md +37 -0
  35. package/templates/claude/commands/content/cro.md +41 -0
  36. package/templates/claude/commands/content/enhance.md +12 -0
  37. package/templates/claude/commands/content/fast.md +11 -0
  38. package/templates/claude/commands/content/good.md +14 -0
  39. package/templates/claude/commands/cook/auto/fast.md +26 -0
  40. package/templates/claude/commands/cook/auto/parallel.md +49 -0
  41. package/templates/claude/commands/cook/auto.md +15 -0
  42. package/templates/claude/commands/cook.md +101 -0
  43. package/templates/claude/commands/debug.md +13 -0
  44. package/templates/claude/commands/docs/init.md +37 -0
  45. package/templates/claude/commands/docs/summarize.md +22 -0
  46. package/templates/claude/commands/docs/update.md +78 -0
  47. package/templates/claude/commands/fix/ci.md +17 -0
  48. package/templates/claude/commands/fix/fast.md +18 -0
  49. package/templates/claude/commands/fix/hard.md +35 -0
  50. package/templates/claude/commands/fix/logs.md +26 -0
  51. package/templates/claude/commands/fix/parallel.md +54 -0
  52. package/templates/claude/commands/fix/test.md +20 -0
  53. package/templates/claude/commands/fix/types.md +9 -0
  54. package/templates/claude/commands/fix/ui.md +33 -0
  55. package/templates/claude/commands/fix.md +43 -0
  56. package/templates/claude/commands/git/cm.md +5 -0
  57. package/templates/claude/commands/git/cp.md +4 -0
  58. package/templates/claude/commands/git/merge.md +40 -0
  59. package/templates/claude/commands/git/pr.md +50 -0
  60. package/templates/claude/commands/journal.md +7 -0
  61. package/templates/claude/commands/kanban.md +99 -0
  62. package/templates/claude/commands/plan/archive.md +57 -0
  63. package/templates/claude/commands/plan/ci.md +33 -0
  64. package/templates/claude/commands/plan/cro.md +67 -0
  65. package/templates/claude/commands/plan/fast.md +66 -0
  66. package/templates/claude/commands/plan/hard.md +92 -0
  67. package/templates/claude/commands/plan/parallel.md +129 -0
  68. package/templates/claude/commands/plan/two.md +45 -0
  69. package/templates/claude/commands/plan/validate.md +117 -0
  70. package/templates/claude/commands/plan.md +30 -0
  71. package/templates/claude/commands/preview.md +87 -0
  72. package/templates/claude/commands/registry.json +313 -0
  73. package/templates/claude/commands/review/codebase/parallel.md +122 -0
  74. package/templates/claude/commands/review/codebase.md +47 -0
  75. package/templates/claude/commands/scout/ext.md +35 -0
  76. package/templates/claude/commands/scout.md +28 -0
  77. package/templates/claude/commands/skill/add.md +36 -0
  78. package/templates/claude/commands/skill/create.md +29 -0
  79. package/templates/claude/commands/skill/fix-logs.md +22 -0
  80. package/templates/claude/commands/skill/optimize/auto.md +25 -0
  81. package/templates/claude/commands/skill/optimize.md +34 -0
  82. package/templates/claude/commands/skill/plan.md +45 -0
  83. package/templates/claude/commands/test/ui.md +91 -0
  84. package/templates/claude/commands/test.md +8 -0
  85. package/templates/claude/commands/use-mcp.md +34 -0
  86. package/templates/claude/commands/watzup.md +8 -0
  87. package/templates/claude/commands/worktree.md +126 -0
  88. package/templates/claude/hooks/dev-rules-reminder.cjs +258 -0
  89. package/templates/claude/hooks/docs/README.md +42 -0
  90. package/templates/claude/hooks/lib/cctk-config-utils.cjs +751 -0
  91. package/templates/claude/hooks/lib/cctk-paths.cjs +106 -0
  92. package/templates/claude/hooks/lib/context-tracker.cjs +346 -0
  93. package/templates/claude/hooks/privacy-block.cjs +289 -0
  94. package/templates/claude/hooks/registry.json +77 -0
  95. package/templates/claude/hooks/scout-block/broad-pattern-detector.cjs +293 -0
  96. package/templates/claude/hooks/scout-block/error-formatter.cjs +156 -0
  97. package/templates/claude/hooks/scout-block/path-extractor.cjs +359 -0
  98. package/templates/claude/hooks/scout-block/pattern-matcher.cjs +184 -0
  99. package/templates/claude/hooks/scout-block/vendor/ignore.js +626 -0
  100. package/templates/claude/hooks/scout-block.cjs +167 -0
  101. package/templates/claude/hooks/session-end.cjs +35 -0
  102. package/templates/claude/hooks/session-init.cjs +214 -0
  103. package/templates/claude/hooks/subagent-init.cjs +161 -0
  104. package/templates/claude/hooks/write-compact-marker.cjs +153 -0
  105. package/templates/claude/output-styles/coding-level-1.md +148 -0
  106. package/templates/claude/output-styles/coding-level-2.md +159 -0
  107. package/templates/claude/output-styles/coding-level-3.md +91 -0
  108. package/templates/claude/scripts/README.md +33 -0
  109. package/templates/claude/scripts/generate-catalogs.cjs +318 -0
  110. package/templates/claude/scripts/registry.json +48 -0
  111. package/templates/claude/scripts/set-active-plan.cjs +45 -0
  112. package/templates/claude/scripts/validate-docs.cjs +447 -0
  113. package/templates/claude/scripts/worktree.cjs +658 -0
  114. package/templates/claude/skills/README.md +112 -0
  115. package/templates/claude/skills/ai-artist/SKILL.md +75 -0
  116. package/templates/claude/skills/ai-artist/references/advanced-techniques.md +184 -0
  117. package/templates/claude/skills/ai-artist/references/domain-code.md +66 -0
  118. package/templates/claude/skills/ai-artist/references/domain-data.md +72 -0
  119. package/templates/claude/skills/ai-artist/references/domain-marketing.md +66 -0
  120. package/templates/claude/skills/ai-artist/references/domain-patterns.md +33 -0
  121. package/templates/claude/skills/ai-artist/references/domain-writing.md +68 -0
  122. package/templates/claude/skills/ai-artist/references/image-prompting.md +141 -0
  123. package/templates/claude/skills/ai-artist/references/llm-prompting.md +165 -0
  124. package/templates/claude/skills/ai-artist/references/nano-banana.md +59 -0
  125. package/templates/claude/skills/ai-artist/references/reasoning-techniques.md +201 -0
  126. package/templates/claude/skills/backend-development/SKILL.md +95 -0
  127. package/templates/claude/skills/backend-development/references/backend-api-design.md +495 -0
  128. package/templates/claude/skills/backend-development/references/backend-architecture.md +454 -0
  129. package/templates/claude/skills/backend-development/references/backend-authentication.md +338 -0
  130. package/templates/claude/skills/backend-development/references/backend-code-quality.md +659 -0
  131. package/templates/claude/skills/backend-development/references/backend-debugging.md +904 -0
  132. package/templates/claude/skills/backend-development/references/backend-devops.md +494 -0
  133. package/templates/claude/skills/backend-development/references/backend-mindset.md +387 -0
  134. package/templates/claude/skills/backend-development/references/backend-performance.md +397 -0
  135. package/templates/claude/skills/backend-development/references/backend-security.md +290 -0
  136. package/templates/claude/skills/backend-development/references/backend-technologies.md +256 -0
  137. package/templates/claude/skills/backend-development/references/backend-testing.md +429 -0
  138. package/templates/claude/skills/better-auth/SKILL.md +204 -0
  139. package/templates/claude/skills/better-auth/references/advanced-features.md +553 -0
  140. package/templates/claude/skills/better-auth/references/database-integration.md +577 -0
  141. package/templates/claude/skills/better-auth/references/email-password-auth.md +416 -0
  142. package/templates/claude/skills/better-auth/references/oauth-providers.md +430 -0
  143. package/templates/claude/skills/better-auth/scripts/better_auth_init.py +521 -0
  144. package/templates/claude/skills/chrome-devtools/SKILL.md +473 -0
  145. package/templates/claude/skills/chrome-devtools/references/cdp-domains.md +694 -0
  146. package/templates/claude/skills/chrome-devtools/references/performance-guide.md +940 -0
  147. package/templates/claude/skills/chrome-devtools/references/puppeteer-reference.md +953 -0
  148. package/templates/claude/skills/chrome-devtools/scripts/README.md +288 -0
  149. package/templates/claude/skills/chrome-devtools/scripts/aria-snapshot.js +368 -0
  150. package/templates/claude/skills/chrome-devtools/scripts/click.js +92 -0
  151. package/templates/claude/skills/chrome-devtools/scripts/console.js +85 -0
  152. package/templates/claude/skills/chrome-devtools/scripts/evaluate.js +59 -0
  153. package/templates/claude/skills/chrome-devtools/scripts/fill.js +84 -0
  154. package/templates/claude/skills/chrome-devtools/scripts/inject-auth.js +247 -0
  155. package/templates/claude/skills/chrome-devtools/scripts/install-deps.sh +11 -0
  156. package/templates/claude/skills/chrome-devtools/scripts/install.sh +36 -0
  157. package/templates/claude/skills/chrome-devtools/scripts/lib/browser.js +335 -0
  158. package/templates/claude/skills/chrome-devtools/scripts/lib/selector.js +183 -0
  159. package/templates/claude/skills/chrome-devtools/scripts/navigate.js +60 -0
  160. package/templates/claude/skills/chrome-devtools/scripts/network.js +113 -0
  161. package/templates/claude/skills/chrome-devtools/scripts/package.json +16 -0
  162. package/templates/claude/skills/chrome-devtools/scripts/performance.js +159 -0
  163. package/templates/claude/skills/chrome-devtools/scripts/screenshot.js +212 -0
  164. package/templates/claude/skills/chrome-devtools/scripts/select-ref.js +151 -0
  165. package/templates/claude/skills/chrome-devtools/scripts/snapshot.js +143 -0
  166. package/templates/claude/skills/chrome-devtools/scripts/ws-debug.js +47 -0
  167. package/templates/claude/skills/chrome-devtools/scripts/ws-full-debug.js +115 -0
  168. package/templates/claude/skills/claude-code/references/advanced-features.md +399 -0
  169. package/templates/claude/skills/claude-code/references/agent-skills.md +399 -0
  170. package/templates/claude/skills/claude-code/references/api-reference.md +498 -0
  171. package/templates/claude/skills/claude-code/references/best-practices.md +447 -0
  172. package/templates/claude/skills/claude-code/references/cicd-integration.md +428 -0
  173. package/templates/claude/skills/claude-code/references/common-workflows.md +107 -0
  174. package/templates/claude/skills/claude-code/references/configuration.md +480 -0
  175. package/templates/claude/skills/claude-code/references/enterprise-features.md +472 -0
  176. package/templates/claude/skills/claude-code/references/getting-started.md +244 -0
  177. package/templates/claude/skills/claude-code/references/hooks-and-plugins.md +444 -0
  178. package/templates/claude/skills/claude-code/references/hooks-comprehensive.md +622 -0
  179. package/templates/claude/skills/claude-code/references/ide-integration.md +316 -0
  180. package/templates/claude/skills/claude-code/references/mcp-integration.md +386 -0
  181. package/templates/claude/skills/claude-code/references/slash-commands.md +460 -0
  182. package/templates/claude/skills/claude-code/references/troubleshooting.md +455 -0
  183. package/templates/claude/skills/claude-code/skill.md +60 -0
  184. package/templates/claude/skills/code-review/SKILL.md +143 -0
  185. package/templates/claude/skills/code-review/references/code-review-reception.md +209 -0
  186. package/templates/claude/skills/code-review/references/requesting-code-review.md +105 -0
  187. package/templates/claude/skills/code-review/references/verification-before-completion.md +139 -0
  188. package/templates/claude/skills/context-engineering/SKILL.md +86 -0
  189. package/templates/claude/skills/context-engineering/references/context-compression.md +84 -0
  190. package/templates/claude/skills/context-engineering/references/context-degradation.md +93 -0
  191. package/templates/claude/skills/context-engineering/references/context-fundamentals.md +75 -0
  192. package/templates/claude/skills/context-engineering/references/context-optimization.md +82 -0
  193. package/templates/claude/skills/context-engineering/references/evaluation.md +89 -0
  194. package/templates/claude/skills/context-engineering/references/memory-systems.md +88 -0
  195. package/templates/claude/skills/context-engineering/references/multi-agent-patterns.md +90 -0
  196. package/templates/claude/skills/context-engineering/references/project-development.md +97 -0
  197. package/templates/claude/skills/context-engineering/references/tool-design.md +86 -0
  198. package/templates/claude/skills/context-engineering/scripts/compression_evaluator.py +329 -0
  199. package/templates/claude/skills/context-engineering/scripts/context_analyzer.py +294 -0
  200. package/templates/claude/skills/databases/SKILL.md +232 -0
  201. package/templates/claude/skills/databases/references/mongodb-aggregation.md +447 -0
  202. package/templates/claude/skills/databases/references/mongodb-atlas.md +465 -0
  203. package/templates/claude/skills/databases/references/mongodb-crud.md +408 -0
  204. package/templates/claude/skills/databases/references/mongodb-indexing.md +442 -0
  205. package/templates/claude/skills/databases/references/postgresql-administration.md +594 -0
  206. package/templates/claude/skills/databases/references/postgresql-performance.md +527 -0
  207. package/templates/claude/skills/databases/references/postgresql-psql-cli.md +467 -0
  208. package/templates/claude/skills/databases/references/postgresql-queries.md +475 -0
  209. package/templates/claude/skills/databases/scripts/db_backup.py +502 -0
  210. package/templates/claude/skills/databases/scripts/db_migrate.py +414 -0
  211. package/templates/claude/skills/databases/scripts/db_performance_check.py +445 -0
  212. package/templates/claude/skills/debugging/SKILL.md +84 -0
  213. package/templates/claude/skills/debugging/references/defense-in-depth.md +124 -0
  214. package/templates/claude/skills/debugging/references/root-cause-tracing.md +122 -0
  215. package/templates/claude/skills/debugging/references/systematic-debugging.md +102 -0
  216. package/templates/claude/skills/debugging/references/verification.md +123 -0
  217. package/templates/claude/skills/debugging/scripts/find-polluter.sh +63 -0
  218. package/templates/claude/skills/debugging/scripts/find-polluter.test.md +102 -0
  219. package/templates/claude/skills/devops/SKILL.md +293 -0
  220. package/templates/claude/skills/devops/references/browser-rendering.md +305 -0
  221. package/templates/claude/skills/devops/references/cloudflare-d1-kv.md +123 -0
  222. package/templates/claude/skills/devops/references/cloudflare-platform.md +271 -0
  223. package/templates/claude/skills/devops/references/cloudflare-r2-storage.md +280 -0
  224. package/templates/claude/skills/devops/references/cloudflare-workers-advanced.md +312 -0
  225. package/templates/claude/skills/devops/references/cloudflare-workers-apis.md +309 -0
  226. package/templates/claude/skills/devops/references/cloudflare-workers-basics.md +418 -0
  227. package/templates/claude/skills/devops/references/docker-basics.md +297 -0
  228. package/templates/claude/skills/devops/references/docker-compose.md +292 -0
  229. package/templates/claude/skills/devops/references/gcloud-platform.md +307 -0
  230. package/templates/claude/skills/devops/references/gcloud-services.md +304 -0
  231. package/templates/claude/skills/devops/scripts/cloudflare_deploy.py +269 -0
  232. package/templates/claude/skills/devops/scripts/docker_optimize.py +320 -0
  233. package/templates/claude/skills/docs-seeker/SKILL.md +95 -0
  234. package/templates/claude/skills/docs-seeker/package.json +24 -0
  235. package/templates/claude/skills/docs-seeker/references/advanced.md +78 -0
  236. package/templates/claude/skills/docs-seeker/references/context7-patterns.md +68 -0
  237. package/templates/claude/skills/docs-seeker/references/errors.md +68 -0
  238. package/templates/claude/skills/docs-seeker/scripts/analyze-llms-txt.js +245 -0
  239. package/templates/claude/skills/docs-seeker/scripts/detect-topic.js +172 -0
  240. package/templates/claude/skills/docs-seeker/scripts/fetch-docs.js +212 -0
  241. package/templates/claude/skills/docs-seeker/workflows/library-search.md +87 -0
  242. package/templates/claude/skills/docs-seeker/workflows/repo-analysis.md +91 -0
  243. package/templates/claude/skills/docs-seeker/workflows/topic-search.md +77 -0
  244. package/templates/claude/skills/frontend-design/SKILL.md +85 -0
  245. package/templates/claude/skills/frontend-design/references/analysis-best-practices.md +80 -0
  246. package/templates/claude/skills/frontend-design/references/analysis-prompts.md +141 -0
  247. package/templates/claude/skills/frontend-design/references/analysis-techniques.md +118 -0
  248. package/templates/claude/skills/frontend-design/references/animejs.md +396 -0
  249. package/templates/claude/skills/frontend-design/references/design-extraction-overview.md +71 -0
  250. package/templates/claude/skills/frontend-design/references/extraction-best-practices.md +141 -0
  251. package/templates/claude/skills/frontend-design/references/extraction-output-templates.md +162 -0
  252. package/templates/claude/skills/frontend-design/references/extraction-prompts.md +127 -0
  253. package/templates/claude/skills/frontend-design/references/technical-accessibility.md +119 -0
  254. package/templates/claude/skills/frontend-design/references/technical-best-practices.md +97 -0
  255. package/templates/claude/skills/frontend-design/references/technical-optimization.md +44 -0
  256. package/templates/claude/skills/frontend-design/references/technical-overview.md +90 -0
  257. package/templates/claude/skills/frontend-design/references/technical-workflows.md +150 -0
  258. package/templates/claude/skills/frontend-design/references/visual-analysis-overview.md +95 -0
  259. package/templates/claude/skills/frontend-development/SKILL.md +399 -0
  260. package/templates/claude/skills/frontend-development/resources/common-patterns.md +331 -0
  261. package/templates/claude/skills/frontend-development/resources/complete-examples.md +872 -0
  262. package/templates/claude/skills/frontend-development/resources/component-patterns.md +502 -0
  263. package/templates/claude/skills/frontend-development/resources/data-fetching.md +767 -0
  264. package/templates/claude/skills/frontend-development/resources/file-organization.md +502 -0
  265. package/templates/claude/skills/frontend-development/resources/loading-and-error-states.md +501 -0
  266. package/templates/claude/skills/frontend-development/resources/performance.md +406 -0
  267. package/templates/claude/skills/frontend-development/resources/routing-guide.md +364 -0
  268. package/templates/claude/skills/frontend-development/resources/styling-guide.md +428 -0
  269. package/templates/claude/skills/frontend-development/resources/typescript-standards.md +418 -0
  270. package/templates/claude/skills/markdown-novel-viewer/SKILL.md +272 -0
  271. package/templates/claude/skills/markdown-novel-viewer/assets/directory-browser.css +215 -0
  272. package/templates/claude/skills/markdown-novel-viewer/assets/favicon.png +0 -0
  273. package/templates/claude/skills/markdown-novel-viewer/assets/novel-theme.css +872 -0
  274. package/templates/claude/skills/markdown-novel-viewer/assets/reader.js +378 -0
  275. package/templates/claude/skills/markdown-novel-viewer/assets/template.html +85 -0
  276. package/templates/claude/skills/markdown-novel-viewer/package.json +15 -0
  277. package/templates/claude/skills/markdown-novel-viewer/scripts/lib/http-server.cjs +434 -0
  278. package/templates/claude/skills/markdown-novel-viewer/scripts/lib/markdown-renderer.cjs +335 -0
  279. package/templates/claude/skills/markdown-novel-viewer/scripts/lib/plan-navigator.cjs +509 -0
  280. package/templates/claude/skills/markdown-novel-viewer/scripts/lib/port-finder.cjs +49 -0
  281. package/templates/claude/skills/markdown-novel-viewer/scripts/lib/process-mgr.cjs +150 -0
  282. package/templates/claude/skills/markdown-novel-viewer/scripts/server.cjs +398 -0
  283. package/templates/claude/skills/mcp-builder/SKILL.md +328 -0
  284. package/templates/claude/skills/mcp-builder/reference/evaluation.md +602 -0
  285. package/templates/claude/skills/mcp-builder/reference/mcp_best_practices.md +915 -0
  286. package/templates/claude/skills/mcp-builder/reference/node_mcp_server.md +916 -0
  287. package/templates/claude/skills/mcp-builder/reference/python_mcp_server.md +752 -0
  288. package/templates/claude/skills/mcp-builder/scripts/connections.py +151 -0
  289. package/templates/claude/skills/mcp-builder/scripts/evaluation.py +381 -0
  290. package/templates/claude/skills/mcp-builder/scripts/example_evaluation.xml +22 -0
  291. package/templates/claude/skills/mcp-builder/scripts/requirements.txt +2 -0
  292. package/templates/claude/skills/mcp-management/README.md +219 -0
  293. package/templates/claude/skills/mcp-management/SKILL.md +209 -0
  294. package/templates/claude/skills/mcp-management/assets/tools.json +3146 -0
  295. package/templates/claude/skills/mcp-management/references/configuration.md +114 -0
  296. package/templates/claude/skills/mcp-management/references/gemini-cli-integration.md +209 -0
  297. package/templates/claude/skills/mcp-management/references/mcp-protocol.md +116 -0
  298. package/templates/claude/skills/mcp-management/scripts/.env.example +10 -0
  299. package/templates/claude/skills/mcp-management/scripts/cli.ts +202 -0
  300. package/templates/claude/skills/mcp-management/scripts/mcp-client.ts +247 -0
  301. package/templates/claude/skills/mcp-management/scripts/package.json +20 -0
  302. package/templates/claude/skills/mcp-management/scripts/tsconfig.json +15 -0
  303. package/templates/claude/skills/media-processing/SKILL.md +91 -0
  304. package/templates/claude/skills/media-processing/references/common-workflows.md +132 -0
  305. package/templates/claude/skills/media-processing/references/ffmpeg-encoding.md +358 -0
  306. package/templates/claude/skills/media-processing/references/ffmpeg-filters.md +503 -0
  307. package/templates/claude/skills/media-processing/references/ffmpeg-streaming.md +395 -0
  308. package/templates/claude/skills/media-processing/references/format-compatibility.md +375 -0
  309. package/templates/claude/skills/media-processing/references/imagemagick-batch.md +612 -0
  310. package/templates/claude/skills/media-processing/references/imagemagick-editing.md +623 -0
  311. package/templates/claude/skills/media-processing/references/rmbg-background-removal.md +66 -0
  312. package/templates/claude/skills/media-processing/references/troubleshooting.md +109 -0
  313. package/templates/claude/skills/media-processing/scripts/README.md +102 -0
  314. package/templates/claude/skills/media-processing/scripts/batch-remove-background.sh +124 -0
  315. package/templates/claude/skills/media-processing/scripts/batch_resize.py +342 -0
  316. package/templates/claude/skills/media-processing/scripts/media_convert.py +311 -0
  317. package/templates/claude/skills/media-processing/scripts/remove-background.sh +96 -0
  318. package/templates/claude/skills/media-processing/scripts/remove-bg-node.js +181 -0
  319. package/templates/claude/skills/mermaidjs-v11/SKILL.md +115 -0
  320. package/templates/claude/skills/mermaidjs-v11/references/cli-usage.md +228 -0
  321. package/templates/claude/skills/mermaidjs-v11/references/configuration.md +232 -0
  322. package/templates/claude/skills/mermaidjs-v11/references/diagram-types.md +315 -0
  323. package/templates/claude/skills/mermaidjs-v11/references/examples.md +344 -0
  324. package/templates/claude/skills/mermaidjs-v11/references/integration.md +310 -0
  325. package/templates/claude/skills/planning/SKILL.md +115 -0
  326. package/templates/claude/skills/planning/references/codebase-understanding.md +62 -0
  327. package/templates/claude/skills/planning/references/output-standards.md +127 -0
  328. package/templates/claude/skills/planning/references/plan-organization.md +150 -0
  329. package/templates/claude/skills/planning/references/research-phase.md +49 -0
  330. package/templates/claude/skills/planning/references/solution-design.md +63 -0
  331. package/templates/claude/skills/plans-kanban/SKILL.md +157 -0
  332. package/templates/claude/skills/plans-kanban/assets/dashboard-template.html +119 -0
  333. package/templates/claude/skills/plans-kanban/assets/dashboard.css +1594 -0
  334. package/templates/claude/skills/plans-kanban/assets/dashboard.js +659 -0
  335. package/templates/claude/skills/plans-kanban/assets/favicon.png +0 -0
  336. package/templates/claude/skills/plans-kanban/package.json +13 -0
  337. package/templates/claude/skills/plans-kanban/scripts/lib/dashboard-renderer.cjs +941 -0
  338. package/templates/claude/skills/plans-kanban/scripts/lib/http-server.cjs +310 -0
  339. package/templates/claude/skills/plans-kanban/scripts/lib/plan-metadata-extractor.cjs +489 -0
  340. package/templates/claude/skills/plans-kanban/scripts/lib/plan-parser.cjs +194 -0
  341. package/templates/claude/skills/plans-kanban/scripts/lib/plan-scanner.cjs +277 -0
  342. package/templates/claude/skills/plans-kanban/scripts/lib/port-finder.cjs +49 -0
  343. package/templates/claude/skills/plans-kanban/scripts/lib/process-mgr.cjs +128 -0
  344. package/templates/claude/skills/plans-kanban/scripts/server.cjs +249 -0
  345. package/templates/claude/skills/problem-solving/SKILL.md +96 -0
  346. package/templates/claude/skills/problem-solving/references/attribution.md +69 -0
  347. package/templates/claude/skills/problem-solving/references/collision-zone-thinking.md +79 -0
  348. package/templates/claude/skills/problem-solving/references/inversion-exercise.md +91 -0
  349. package/templates/claude/skills/problem-solving/references/meta-pattern-recognition.md +87 -0
  350. package/templates/claude/skills/problem-solving/references/scale-game.md +95 -0
  351. package/templates/claude/skills/problem-solving/references/simplification-cascades.md +80 -0
  352. package/templates/claude/skills/problem-solving/references/when-stuck.md +72 -0
  353. package/templates/claude/skills/registry.json +258 -0
  354. package/templates/claude/skills/repomix/SKILL.md +247 -0
  355. package/templates/claude/skills/repomix/references/configuration.md +211 -0
  356. package/templates/claude/skills/repomix/references/usage-patterns.md +232 -0
  357. package/templates/claude/skills/repomix/scripts/README.md +179 -0
  358. package/templates/claude/skills/repomix/scripts/repomix_batch.py +455 -0
  359. package/templates/claude/skills/repomix/scripts/repos.example.json +15 -0
  360. package/templates/claude/skills/research/SKILL.md +168 -0
  361. package/templates/claude/skills/sequential-thinking/.env.example +8 -0
  362. package/templates/claude/skills/sequential-thinking/README.md +183 -0
  363. package/templates/claude/skills/sequential-thinking/SKILL.md +94 -0
  364. package/templates/claude/skills/sequential-thinking/package.json +31 -0
  365. package/templates/claude/skills/sequential-thinking/references/advanced-strategies.md +79 -0
  366. package/templates/claude/skills/sequential-thinking/references/advanced-techniques.md +76 -0
  367. package/templates/claude/skills/sequential-thinking/references/core-patterns.md +95 -0
  368. package/templates/claude/skills/sequential-thinking/references/examples-api.md +88 -0
  369. package/templates/claude/skills/sequential-thinking/references/examples-architecture.md +94 -0
  370. package/templates/claude/skills/sequential-thinking/references/examples-debug.md +90 -0
  371. package/templates/claude/skills/sequential-thinking/scripts/format-thought.js +182 -0
  372. package/templates/claude/skills/sequential-thinking/scripts/process-thought.js +252 -0
  373. package/templates/claude/skills/skill-creator/LICENSE.txt +202 -0
  374. package/templates/claude/skills/skill-creator/SKILL.md +266 -0
  375. package/templates/claude/skills/skill-creator/references/agent-skills-spec.md +51 -0
  376. package/templates/claude/skills/skill-creator/scripts/encoding_utils.py +21 -0
  377. package/templates/claude/skills/skill-creator/scripts/init_skill.py +304 -0
  378. package/templates/claude/skills/skill-creator/scripts/package_skill.py +110 -0
  379. package/templates/claude/skills/skill-creator/scripts/quick_validate.py +66 -0
  380. package/templates/claude/skills/template-skill/SKILL.md +6 -0
  381. package/templates/claude/skills/vitest/SKILL.md +595 -0
  382. package/templates/claude/skills/vitest/references/async-patterns.md +82 -0
  383. package/templates/claude/skills/vitest/references/mock-patterns.md +78 -0
  384. package/templates/claude/skills/vitest/references/monorepo-setup.md +185 -0
  385. package/templates/claude/skills/vitest/references/turborepo-setup.md +332 -0
  386. package/templates/claude/skills/web-frameworks/SKILL.md +324 -0
  387. package/templates/claude/skills/web-frameworks/references/nextjs-app-router.md +465 -0
  388. package/templates/claude/skills/web-frameworks/references/nextjs-data-fetching.md +459 -0
  389. package/templates/claude/skills/web-frameworks/references/nextjs-optimization.md +511 -0
  390. package/templates/claude/skills/web-frameworks/references/nextjs-server-components.md +495 -0
  391. package/templates/claude/skills/web-frameworks/references/remix-icon-integration.md +603 -0
  392. package/templates/claude/skills/web-frameworks/references/turborepo-caching.md +551 -0
  393. package/templates/claude/skills/web-frameworks/references/turborepo-pipelines.md +517 -0
  394. package/templates/claude/skills/web-frameworks/references/turborepo-setup.md +542 -0
  395. package/templates/claude/skills/web-frameworks/scripts/nextjs_init.py +547 -0
  396. package/templates/claude/skills/web-frameworks/scripts/turborepo_migrate.py +394 -0
  397. package/templates/claude/workflows/development-rules.md +40 -0
  398. package/templates/claude/workflows/documentation-management.md +121 -0
  399. package/templates/claude/workflows/orchestration-protocol.md +16 -0
  400. package/templates/claude/workflows/primary-workflow.md +45 -0
  401. package/templates/claude/workflows/registry.json +37 -0
  402. package/templates/common/.cct.json +41 -0
  403. package/templates/common/.cctkignore +22 -0
  404. package/templates/common/.env.example +39 -0
  405. package/templates/common/.mcp.json.example +16 -0
  406. package/templates/common/metadata.json +15 -0
  407. package/templates/common/settings.json +79 -0
  408. package/templates/common/statusline.cjs +271 -0
  409. package/templates/config/.repomixignore +22 -0
  410. package/templates/config/AGENTS.md +55 -0
  411. package/templates/config/CLAUDE.md +87 -0
  412. package/templates/plans/bug-fix-template.md +69 -0
  413. package/templates/plans/feature-implementation-template.md +84 -0
  414. package/templates/plans/refactor-template.md +82 -0
  415. package/templates/plans/template-usage-guide.md +58 -0
@@ -0,0 +1,167 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * scout-block.cjs - Hook for blocking directory access
4
+ *
5
+ * Blocks access to directories listed in .claude/.cctkignore
6
+ * Uses gitignore-spec compliant pattern matching via 'ignore' package
7
+ *
8
+ * Blocking Rules:
9
+ * - File paths: Blocks any file_path/path/pattern containing blocked directories
10
+ * - Bash commands: Blocks directory access (cd, ls, cat, etc.) but ALLOWS build commands
11
+ * - Blocked: cd node_modules, ls packages/web/node_modules, cat dist/file.js
12
+ * - Allowed: npm build, go build, cargo build, make, mvn, gradle, docker build, kubectl, terraform
13
+ *
14
+ * Configuration:
15
+ * - Edit .claude/.cctkignore to customize blocked patterns (one per line, # for comments)
16
+ * - Supports negation patterns (!) to allow specific paths
17
+ *
18
+ * Exit Codes:
19
+ * - 0: Command allowed
20
+ * - 2: Command blocked
21
+ */
22
+
23
+ const fs = require('node:fs');
24
+ const path = require('node:path');
25
+
26
+ // Import modules
27
+ const { loadPatterns, createMatcher, matchPath } = require('./scout-block/pattern-matcher.cjs');
28
+ const { extractFromToolInput } = require('./scout-block/path-extractor.cjs');
29
+ const { formatBlockedError } = require('./scout-block/error-formatter.cjs');
30
+ const { detectBroadPatternIssue, formatBroadPatternError } = require('./scout-block/broad-pattern-detector.cjs');
31
+
32
+ // Build command allowlist - these are allowed even if they contain blocked paths
33
+ // Handles flags and filters: npm build, pnpm --filter web run build, yarn workspace app build
34
+ // Also allows: go, cargo, make, mvn/mvnw, gradle/gradlew, dotnet, docker, bazel, cmake, sbt, flutter, swift, ant, ninja, meson
35
+ const BUILD_COMMAND_PATTERN =
36
+ /^(npm|pnpm|yarn|bun)\s+([^\s]+\s+)*(run\s+)?(build|test|lint|dev|start|install|ci|add|remove|update|publish|pack|init|create|exec)/;
37
+ const TOOL_COMMAND_PATTERN =
38
+ /^(\.\/)?(npx|pnpx|bunx|tsc|esbuild|vite|webpack|rollup|turbo|nx|jest|vitest|mocha|eslint|prettier|go|cargo|make|mvn|mvnw|gradle|gradlew|dotnet|docker|podman|kubectl|helm|terraform|ansible|bazel|cmake|sbt|flutter|swift|ant|ninja|meson)/;
39
+
40
+ // Allow execution from .venv/bin/ or venv/bin/ (Unix)
41
+ // Blocks exploration (cat, ls, grep) but allows running venv executables
42
+ const VENV_EXECUTABLE_PATTERN = /(^|[\/\\])\.?venv[\/\\](bin)[\/\\]/;
43
+
44
+ /**
45
+ * Check if a command is a build/tooling command (should be allowed)
46
+ *
47
+ * @param {string} command - The command to check
48
+ * @returns {boolean}
49
+ */
50
+ function isBuildCommand(command) {
51
+ if (!command || typeof command !== 'string') return false;
52
+ const trimmed = command.trim();
53
+
54
+
55
+
56
+ return BUILD_COMMAND_PATTERN.test(trimmed) || TOOL_COMMAND_PATTERN.test(trimmed);
57
+ }
58
+
59
+ /**
60
+ * Check if command executes from a .venv bin directory
61
+ * Allows: ~/.claude/skills/.venv/bin/python3 script.py
62
+ * Allows: .venv/Scripts/python.exe script.py
63
+ *
64
+ * @param {string} command - The command to check
65
+ * @returns {boolean}
66
+ */
67
+ function isVenvExecutable(command) {
68
+ if (!command || typeof command !== 'string') return false;
69
+
70
+
71
+ return VENV_EXECUTABLE_PATTERN.test(command);
72
+ }
73
+
74
+ try {
75
+ // Read stdin synchronously
76
+ const hookInput = fs.readFileSync(0, 'utf8');
77
+
78
+ // Validate input not empty
79
+ if (!hookInput || hookInput.trim().length === 0) {
80
+ console.error('ERROR: Empty input');
81
+ process.exit(2);
82
+ }
83
+
84
+ // Parse JSON
85
+ let data;
86
+
87
+
88
+ try {
89
+ data = JSON.parse(hookInput);
90
+ } catch {
91
+ // Fail-open for unparseable input
92
+ console.error('WARN: JSON parse failed, allowing operation');
93
+ process.exit(0);
94
+ }
95
+
96
+ // Validate structure
97
+ if (!data.tool_input || typeof data.tool_input !== 'object') {
98
+ // Fail-open for invalid structure
99
+ console.error('WARN: Invalid JSON structure, allowing operation');
100
+ process.exit(0);
101
+ }
102
+
103
+ const toolInput = data.tool_input;
104
+ const toolName = data.tool_name || 'unknown';
105
+
106
+ // Check if it's a build command or venv executable (allowed regardless of paths)
107
+ if (toolInput.command && (isBuildCommand(toolInput.command) || isVenvExecutable(toolInput.command))) {
108
+ process.exit(0);
109
+ }
110
+
111
+ // Check for overly broad glob patterns (Glob tool)
112
+ // This prevents LLMs from filling context with **/*.ts at project root
113
+ if (toolName === 'Glob' || toolInput.pattern) {
114
+ const broadResult = detectBroadPatternIssue(toolInput);
115
+
116
+
117
+ if (broadResult.blocked) {
118
+ const errorMsg = formatBroadPatternError(broadResult, path.dirname(__dirname));
119
+
120
+
121
+ console.error(errorMsg);
122
+ process.exit(2);
123
+ }
124
+ }
125
+
126
+ // Load patterns from .cctkignore
127
+ const scriptDir = __dirname;
128
+ const claudeDir = path.dirname(scriptDir); // Go up from hooks/ to .claude/
129
+ const ckignorePath = path.join(claudeDir, '.cctkignore');
130
+ const patterns = loadPatterns(ckignorePath);
131
+ const matcher = createMatcher(patterns);
132
+
133
+ // Extract paths from tool input
134
+ const extractedPaths = extractFromToolInput(toolInput);
135
+
136
+ // If no paths extracted, allow operation
137
+ if (extractedPaths.length === 0) {
138
+ process.exit(0);
139
+ }
140
+
141
+ // Check each path against patterns
142
+ for (const extractedPath of extractedPaths) {
143
+ const result = matchPath(matcher, extractedPath);
144
+
145
+
146
+ if (result.blocked) {
147
+ // Output rich error message
148
+ const errorMsg = formatBlockedError({
149
+ path: extractedPath,
150
+ pattern: result.pattern,
151
+ tool: toolName,
152
+ claudeDir
153
+ });
154
+
155
+
156
+ console.error(errorMsg);
157
+ process.exit(2);
158
+ }
159
+ }
160
+
161
+ // All paths allowed
162
+ process.exit(0);
163
+ } catch (error) {
164
+ // Fail-open for unexpected errors
165
+ console.error('WARN: Hook error, allowing operation -', error.message);
166
+ process.exit(0);
167
+ }
@@ -0,0 +1,35 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * SessionEnd Hook - Cleanup on session end
4
+ *
5
+ * Fires: When session ends (clear, compact, user exit)
6
+ * Purpose: Delete compact marker files to reset context baseline on /clear
7
+ *
8
+ * Exit Codes:
9
+ * 0 - Success (non-blocking)
10
+ */
11
+
12
+ const fs = require('node:fs');
13
+ const { deleteMarker } = require('./lib/context-tracker.cjs');
14
+
15
+ async function main() {
16
+ try {
17
+ const stdin = fs.readFileSync(0, 'utf8').trim();
18
+ const data = stdin ? JSON.parse(stdin) : {};
19
+ const reason = data.reason || 'unknown';
20
+ const sessionId = data.session_id || null;
21
+
22
+ // Delete marker on /clear to reset context baseline
23
+ // SessionEnd fires with OLD session_id before new session starts
24
+ // This ensures clean slate for the next session
25
+ if (reason === 'clear' && sessionId) {
26
+ deleteMarker(sessionId);
27
+ }
28
+
29
+ process.exit(0);
30
+ } catch {
31
+ process.exit(0);
32
+ }
33
+ }
34
+
35
+ main();
@@ -0,0 +1,214 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * SessionStart Hook - Initializes session environment with project detection
4
+ *
5
+ * Fires: Once per session (startup, resume, clear, compact)
6
+ * Purpose: Load config, detect project info, persist to env vars, output context
7
+ *
8
+ * Exit Codes:
9
+ * 0 - Success (non-blocking, allows continuation)
10
+ */
11
+
12
+ const fs = require('fs');
13
+ const path = require('path');
14
+ const { execSync } = require('child_process');
15
+ const {
16
+ loadConfig,
17
+ writeEnv,
18
+ writeSessionState,
19
+ resolvePlanPath,
20
+ } = require('./lib/cctk-config-utils.cjs');
21
+ const { writeResetMarker } = require('./lib/context-tracker.cjs');
22
+
23
+ /**
24
+ * Safely execute shell command with optional timeout
25
+ * @param {string} cmd - Command to execute
26
+ * @param {number} timeoutMs - Timeout in milliseconds (default: 5000)
27
+ */
28
+ function execSafe(cmd, timeoutMs = 5000) {
29
+ try {
30
+ return execSync(cmd, {
31
+ encoding: 'utf8',
32
+ timeout: timeoutMs,
33
+ stdio: ['pipe', 'pipe', 'pipe']
34
+ }).trim();
35
+ } catch (e) {
36
+ return null;
37
+ }
38
+ }
39
+
40
+ /**
41
+ * Detect project type based on workspace indicators
42
+ */
43
+ function detectProjectType(configOverride) {
44
+ if (configOverride && configOverride !== 'auto') return configOverride;
45
+
46
+ if (fs.existsSync('pnpm-workspace.yaml')) return 'monorepo';
47
+ if (fs.existsSync('lerna.json')) return 'monorepo';
48
+
49
+ if (fs.existsSync('package.json')) {
50
+ try {
51
+ const pkg = JSON.parse(fs.readFileSync('package.json', 'utf8'));
52
+ if (pkg.workspaces) return 'monorepo';
53
+ if (pkg.main || pkg.exports) return 'library';
54
+ } catch (e) { /* ignore */ }
55
+ }
56
+
57
+ return 'single-repo';
58
+ }
59
+
60
+ /**
61
+ * Detect package manager from lock files
62
+ */
63
+ function detectPackageManager(configOverride) {
64
+ if (configOverride && configOverride !== 'auto') return configOverride;
65
+
66
+ if (fs.existsSync('bun.lockb')) return 'bun';
67
+ if (fs.existsSync('pnpm-lock.yaml')) return 'pnpm';
68
+ if (fs.existsSync('yarn.lock')) return 'yarn';
69
+ if (fs.existsSync('package-lock.json')) return 'npm';
70
+
71
+ return null;
72
+ }
73
+
74
+ /**
75
+ * Get coding level guidelines by reading from output-styles/coding-level.md
76
+ * Single file approach - users can customize the .md file directly
77
+ * @param {number} level - Whether coding level guidelines are enabled
78
+ * @returns {string|null} Guidelines text (frontmatter stripped) or null if disabled
79
+ */
80
+ function getCodingLevelGuidelines(level) {
81
+ if (typeof level !== 'number' || level <=0 || level > 3) return null;
82
+
83
+ const stylePath = path.join(__dirname, '..', 'output-styles', `coding-level-${level}.md`);
84
+
85
+ try {
86
+ if (!fs.existsSync(stylePath)) return null;
87
+
88
+ const content = fs.readFileSync(stylePath, 'utf8');
89
+ // Strip YAML frontmatter (between --- markers at start of file)
90
+ const withoutFrontmatter = content.replace(/^---[\s\S]*?---\n*/, '').trim();
91
+ return withoutFrontmatter;
92
+ } catch {
93
+ return null;
94
+ }
95
+ }
96
+
97
+ /**
98
+ * Build context summary for output (compact, single line)
99
+ * @param {Object} config - Loaded config
100
+ * @param {Object} detections - Project detections
101
+ * @param {{ path: string|null, resolvedBy: string|null }} resolved - Plan resolution result
102
+ * @param {string|null} gitRoot - Git repository root path
103
+ */
104
+ function buildContextOutput(config, detections, resolved, gitRoot) {
105
+ const lines = [`Project: ${detections.type || 'unknown'}`];
106
+ if (detections.pm) lines.push(`PM: ${detections.pm}`);
107
+ lines.push(`Plan naming: ${config.plan.namingFormat}`);
108
+
109
+ // Show git root when different from CWD (subdirectory scenario)
110
+ if (gitRoot && gitRoot !== process.cwd()) {
111
+ lines.push(`Root: ${gitRoot}`);
112
+ }
113
+
114
+ // Show plan status with resolution context
115
+ if (resolved.path) {
116
+ if (resolved.resolvedBy === 'session') {
117
+ lines.push(`Plan: ${resolved.path}`);
118
+ } else {
119
+ lines.push(`Suggested: ${resolved.path}`);
120
+ }
121
+ }
122
+
123
+ return lines.join(' | ');
124
+ }
125
+
126
+ /**
127
+ * Main hook execution
128
+ */
129
+ async function main() {
130
+ try {
131
+ const stdin = fs.readFileSync(0, 'utf-8').trim();
132
+ const data = stdin ? JSON.parse(stdin) : {};
133
+ const envFile = process.env.CLAUDE_ENV_FILE;
134
+ const source = data.source || 'unknown';
135
+ const sessionId = data.session_id || null;
136
+
137
+ const config = loadConfig();
138
+
139
+ // Layer 3: Write reset marker on /clear to signal statusline to reset baseline
140
+ // This ensures context window percentage resets to 0% on fresh sessions
141
+ if (source === 'clear' && sessionId) {
142
+ writeResetMarker(sessionId, 'clear');
143
+ }
144
+
145
+ const detections = {
146
+ type: detectProjectType(config.project?.type),
147
+ pm: detectPackageManager(config.project?.packageManager),
148
+ };
149
+
150
+ // Resolve plan - now returns { path, resolvedBy }
151
+ const resolved = resolvePlanPath(null, config);
152
+
153
+ // CRITICAL FIX: Only persist explicitly-set plans to session state
154
+ // Branch-matched plans are "suggested" - stored separately, not as activePlan
155
+ // This prevents stale plan pollution on fresh sessions
156
+ if (sessionId) {
157
+ writeSessionState(sessionId, {
158
+ sessionOrigin: process.cwd(),
159
+ // Only session-resolved plans are truly "active"
160
+ activePlan: resolved.resolvedBy === 'session' ? resolved.path : null,
161
+ // Track suggested plan separately (for UI hints, not for report paths)
162
+ suggestedPlan: resolved.resolvedBy === 'branch' ? resolved.path : null,
163
+ timestamp: Date.now(),
164
+ source
165
+ });
166
+ }
167
+
168
+ // Git context needed for output and subdirectory detection
169
+ const gitRoot = execSafe('git rev-parse --show-toplevel');
170
+
171
+ if (envFile) {
172
+ writeEnv(envFile, 'CCTK_SESSION_ID', sessionId || '');
173
+ }
174
+
175
+ console.log(`Session ${source}. ${buildContextOutput(config, detections, resolved, gitRoot)}`);
176
+
177
+ // Warn user if running from subdirectory (CWD != git root)
178
+ if (gitRoot && gitRoot !== process.cwd()) {
179
+ console.log(`⚠️ Running from subdirectory. Plans/docs created at git root: ${gitRoot}`);
180
+ console.log(` To avoid this, run Claude from: cd ${gitRoot}`);
181
+ }
182
+
183
+ // Auto-compact can bypass AskUserQuestion approval gates
184
+ // When context is compacted mid-workflow, the summarization may lose "pending approval" state.
185
+ // This warning reminds Claude to verify if user approval was pending before proceeding.
186
+ if (source === 'compact') {
187
+ console.log(`\n⚠️ CONTEXT COMPACTED - APPROVAL STATE CHECK:`);
188
+ console.log(`If you were waiting for user approval via AskUserQuestion (e.g., Step 4 review gate),`);
189
+ console.log(`you MUST re-confirm with the user before proceeding. Do NOT assume approval was given.`);
190
+ console.log(`Use AskUserQuestion to verify: "Context was compacted. Please confirm approval to continue."`);
191
+ }
192
+
193
+ // Auto-inject coding level guidelines (if enabled)
194
+ const guidelines = getCodingLevelGuidelines(config.codingLevel)
195
+
196
+ if (guidelines) {
197
+ console.log(`\n${guidelines}`);
198
+ }
199
+
200
+ if (config.assertions?.length > 0) {
201
+ console.log(`\nUser Assertions:`);
202
+ config.assertions.forEach((assertion, i) => {
203
+ console.log(` ${i + 1}. ${assertion}`);
204
+ });
205
+ }
206
+
207
+ process.exit(0);
208
+ } catch (error) {
209
+ console.error(`SessionStart hook error: ${error.message}`);
210
+ process.exit(0);
211
+ }
212
+ }
213
+
214
+ main();
@@ -0,0 +1,161 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * SubagentStart Hook - Injects context to subagents (Optimized)
4
+ *
5
+ * Fires: When a subagent (Task tool call) is started
6
+ * Purpose: Inject minimal context using env vars from SessionStart
7
+ * Target: ~200 tokens (down from ~350)
8
+ *
9
+ * Exit Codes:
10
+ * 0 - Success (non-blocking, allows continuation)
11
+ */
12
+
13
+ const fs = require('fs');
14
+ const path = require('path');
15
+ const {
16
+ loadConfig,
17
+ resolveNamingPattern,
18
+ getGitBranch,
19
+ getGitRoot,
20
+ resolvePlanPath,
21
+ getReportsPath,
22
+ normalizePath
23
+ } = require('./lib/cctk-config-utils.cjs');
24
+
25
+ /**
26
+ * Get agent-specific context from config
27
+ */
28
+ function getAgentContext(agentType, config) {
29
+ const agentConfig = config.subagent?.agents?.[agentType];
30
+ if (!agentConfig?.contextPrefix) return null;
31
+ return agentConfig.contextPrefix;
32
+ }
33
+
34
+ /**
35
+ * Build trust verification section if enabled
36
+ */
37
+ function buildTrustVerification(config) {
38
+ if (!config.trust?.enabled || !config.trust?.passphrase) return [];
39
+ return [
40
+ ``,
41
+ `## Trust Verification`,
42
+ `Passphrase: "${config.trust.passphrase}"`
43
+ ];
44
+ }
45
+
46
+ /**
47
+ * Main hook execution
48
+ */
49
+ async function main() {
50
+ try {
51
+ const stdin = fs.readFileSync(0, 'utf-8').trim();
52
+ if (!stdin) process.exit(0);
53
+
54
+ const payload = JSON.parse(stdin);
55
+ const agentType = payload.agent_type || 'unknown';
56
+ const agentId = payload.agent_id || 'unknown';
57
+
58
+ // Load config for trust verification, naming, and agent-specific context
59
+ const config = loadConfig({ includeProject: false, includeAssertions: false });
60
+
61
+ // Use payload.cwd if provided for git operations (monorepo support)
62
+ // This ensures subagent resolves paths relative to its own CWD, not process.cwd()
63
+ const effectiveCwd = payload.cwd || process.cwd();
64
+
65
+ // Compute naming pattern directly (don't rely on env vars which may not propagate)
66
+ // Pass effectiveCwd to git commands to support monorepo/submodule scenarios
67
+ const gitBranch = getGitBranch(effectiveCwd);
68
+ const gitRoot = getGitRoot(effectiveCwd);
69
+ const baseDir = gitRoot || effectiveCwd;
70
+
71
+ // Debug logging for path resolution troubleshooting
72
+ if (process.env.CCTK_DEBUG) {
73
+ console.error(`[subagent-init] effectiveCwd=${effectiveCwd}, gitRoot=${gitRoot}, baseDir=${baseDir}`);
74
+ }
75
+ const namePattern = resolveNamingPattern(config.plan, gitBranch);
76
+
77
+ const resolved = resolvePlanPath(null, config);
78
+ const reportsPath = getReportsPath(resolved.path, resolved.resolvedBy, config.plan, config.paths, baseDir);
79
+ const activePlan = resolved.resolvedBy === 'session' ? resolved.path : '';
80
+ const suggestedPlan = resolved.resolvedBy === 'branch' ? resolved.path : '';
81
+ const plansPath = path.join(baseDir, normalizePath(config.paths?.plans) || 'plans');
82
+ const docsPath = path.join(baseDir, normalizePath(config.paths?.docs) || 'docs');
83
+ const thinkingLanguage = config.locale?.thinkingLanguage || '';
84
+ const responseLanguage = config.locale?.responseLanguage || '';
85
+ // Auto-default thinkingLanguage to 'en' when only responseLanguage is set
86
+ const effectiveThinking = thinkingLanguage || (responseLanguage ? 'en' : '');
87
+
88
+ // Build compact context (~200 tokens)
89
+ const lines = [];
90
+
91
+ // Subagent identification
92
+ lines.push(`## Subagent: ${agentType}`);
93
+ lines.push(`ID: ${agentId} | CWD: ${effectiveCwd}`);
94
+ lines.push(``);
95
+
96
+ // Plan context (from env vars)
97
+ lines.push(`## Context`);
98
+ if (activePlan) {
99
+ lines.push(`- Plan: ${activePlan}`);
100
+ } else if (suggestedPlan) {
101
+ lines.push(`- Plan: none | Suggested: ${suggestedPlan}`);
102
+ } else {
103
+ lines.push(`- Plan: none`);
104
+ }
105
+ lines.push(`- Reports: ${reportsPath}`);
106
+ lines.push(`- Paths: ${plansPath}/ | ${docsPath}/`);
107
+ lines.push(``);
108
+
109
+ // Language (thinking + response, if configured)
110
+ const hasThinking = effectiveThinking && effectiveThinking !== responseLanguage;
111
+ if (hasThinking || responseLanguage) {
112
+ lines.push(`## Language`);
113
+ if (hasThinking) {
114
+ lines.push(`- Thinking: Use ${effectiveThinking} for reasoning (logic, precision).`);
115
+ }
116
+ if (responseLanguage) {
117
+ lines.push(`- Response: Respond in ${responseLanguage} (natural, fluent).`);
118
+ }
119
+ lines.push(``);
120
+ }
121
+
122
+ // Core rules (minimal)
123
+ lines.push(`## Rules`);
124
+ lines.push(`- Reports → ${reportsPath}`);
125
+ lines.push(`- YAGNI / KISS / DRY`);
126
+ lines.push(`- Concise, list unresolved Qs at end`);
127
+
128
+ // Naming templates (computed directly for reliable injection)
129
+ lines.push(``);
130
+ lines.push(`## Naming`);
131
+ lines.push(`- Report: ${path.join(reportsPath, `${agentType}-${namePattern}.md`)}`);
132
+ lines.push(`- Plan dir: ${path.join(plansPath, namePattern)}/`);
133
+
134
+ // Trust verification (if enabled)
135
+ lines.push(...buildTrustVerification(config));
136
+
137
+ // Agent-specific context (if configured)
138
+ const agentContext = getAgentContext(agentType, config);
139
+ if (agentContext) {
140
+ lines.push(``);
141
+ lines.push(`## Agent Instructions`);
142
+ lines.push(agentContext);
143
+ }
144
+
145
+ // CRITICAL: SubagentStart requires hookSpecificOutput.additionalContext format
146
+ const output = {
147
+ hookSpecificOutput: {
148
+ hookEventName: "SubagentStart",
149
+ additionalContext: lines.join('\n')
150
+ }
151
+ };
152
+
153
+ console.log(JSON.stringify(output));
154
+ process.exit(0);
155
+ } catch (error) {
156
+ console.error(`SubagentStart hook error: ${error.message}`);
157
+ process.exit(0); // Fail-open
158
+ }
159
+ }
160
+
161
+ main();