@arthai/agents 1.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 (390) hide show
  1. package/README.md +123 -0
  2. package/VERSION +1 -0
  3. package/agents/ai-consultant.md +999 -0
  4. package/agents/architect.md +174 -0
  5. package/agents/code-reviewer.md +115 -0
  6. package/agents/competitive-analyst.md +688 -0
  7. package/agents/content-strategist.md +607 -0
  8. package/agents/design-studio-create.md +304 -0
  9. package/agents/design-studio-critique.md +258 -0
  10. package/agents/design-studio-think.md +79 -0
  11. package/agents/domain-hunter.md +519 -0
  12. package/agents/explore-light.md +52 -0
  13. package/agents/frontend.md +261 -0
  14. package/agents/gtm-expert.md +811 -0
  15. package/agents/meeting-prep.md +318 -0
  16. package/agents/ops.md +149 -0
  17. package/agents/product-manager.md +563 -0
  18. package/agents/python-backend.md +286 -0
  19. package/agents/qa-baseline-updater.md +45 -0
  20. package/agents/qa-challenger.md +97 -0
  21. package/agents/qa-domain.md +145 -0
  22. package/agents/qa-e2e.md +184 -0
  23. package/agents/qa-test-promoter.md +97 -0
  24. package/agents/qa.md +226 -0
  25. package/agents/setup.md +134 -0
  26. package/agents/sre.md +165 -0
  27. package/agents/stakeholder-reporter.md +94 -0
  28. package/agents/user-researcher.md +602 -0
  29. package/bin/cli.js +322 -0
  30. package/bundles/canvas.json +16 -0
  31. package/bundles/compass.json +16 -0
  32. package/bundles/counsel.json +31 -0
  33. package/bundles/cruise.json +11 -0
  34. package/bundles/forge.json +26 -0
  35. package/bundles/prime.json +10 -0
  36. package/bundles/prism.json +23 -0
  37. package/bundles/scalpel.json +17 -0
  38. package/bundles/sentinel.json +19 -0
  39. package/bundles/shield.json +14 -0
  40. package/bundles/spark.json +19 -0
  41. package/compiler.sh +305 -0
  42. package/dist/plugins/canvas/.claude-plugin/plugin.json +6 -0
  43. package/dist/plugins/canvas/agents/design-studio-create.md +304 -0
  44. package/dist/plugins/canvas/agents/design-studio-critique.md +258 -0
  45. package/dist/plugins/canvas/agents/design-studio-think.md +79 -0
  46. package/dist/plugins/canvas/agents/frontend.md +261 -0
  47. package/dist/plugins/canvas/skills/planning/SKILL.md +436 -0
  48. package/dist/plugins/compass/.claude-plugin/plugin.json +6 -0
  49. package/dist/plugins/compass/agents/content-strategist.md +607 -0
  50. package/dist/plugins/compass/agents/gtm-expert.md +811 -0
  51. package/dist/plugins/compass/agents/product-manager.md +563 -0
  52. package/dist/plugins/compass/agents/user-researcher.md +602 -0
  53. package/dist/plugins/compass/skills/planning/SKILL.md +436 -0
  54. package/dist/plugins/counsel/.claude-plugin/plugin.json +6 -0
  55. package/dist/plugins/counsel/agents/ai-consultant.md +999 -0
  56. package/dist/plugins/counsel/agents/competitive-analyst.md +688 -0
  57. package/dist/plugins/counsel/agents/meeting-prep.md +318 -0
  58. package/dist/plugins/counsel/agents/stakeholder-reporter.md +94 -0
  59. package/dist/plugins/counsel/hooks/check-deliverable.sh +65 -0
  60. package/dist/plugins/counsel/hooks/ensure-client-dir.sh +59 -0
  61. package/dist/plugins/counsel/hooks/hooks.json +28 -0
  62. package/dist/plugins/counsel/skills/client-discovery/SKILL.md +266 -0
  63. package/dist/plugins/counsel/skills/consulting/SKILL.md +282 -0
  64. package/dist/plugins/counsel/skills/deliverable-builder/SKILL.md +928 -0
  65. package/dist/plugins/counsel/skills/engagement-tracker/SKILL.md +380 -0
  66. package/dist/plugins/counsel/skills/market-research/SKILL.md +300 -0
  67. package/dist/plugins/counsel/skills/opportunity-map/SKILL.md +307 -0
  68. package/dist/plugins/counsel/skills/pitch-generator/SKILL.md +378 -0
  69. package/dist/plugins/counsel/skills/roi-calculator/SKILL.md +469 -0
  70. package/dist/plugins/counsel/skills/share/SKILL.md +211 -0
  71. package/dist/plugins/counsel/skills/solution-architect/SKILL.md +566 -0
  72. package/dist/plugins/counsel/skills/templates/SKILL.md +194 -0
  73. package/dist/plugins/counsel/skills/welcome/SKILL.md +136 -0
  74. package/dist/plugins/counsel/skills/wizard/SKILL.md +411 -0
  75. package/dist/plugins/cruise/.claude-plugin/plugin.json +6 -0
  76. package/dist/plugins/cruise/skills/autopilot/SKILL.md +425 -0
  77. package/dist/plugins/forge/.claude-plugin/plugin.json +6 -0
  78. package/dist/plugins/forge/agents/architect.md +174 -0
  79. package/dist/plugins/forge/agents/code-reviewer.md +115 -0
  80. package/dist/plugins/forge/agents/frontend.md +261 -0
  81. package/dist/plugins/forge/agents/product-manager.md +563 -0
  82. package/dist/plugins/forge/agents/python-backend.md +286 -0
  83. package/dist/plugins/forge/agents/qa.md +226 -0
  84. package/dist/plugins/forge/hooks/hooks.json +28 -0
  85. package/dist/plugins/forge/hooks/post-test-summary.sh +115 -0
  86. package/dist/plugins/forge/hooks/triage-router.sh +740 -0
  87. package/dist/plugins/forge/skills/implement/SKILL.md +532 -0
  88. package/dist/plugins/forge/skills/planning/SKILL.md +436 -0
  89. package/dist/plugins/forge/skills/pr/SKILL.md +275 -0
  90. package/dist/plugins/forge/skills/precheck/SKILL.md +159 -0
  91. package/dist/plugins/forge/skills/qa/SKILL.md +127 -0
  92. package/dist/plugins/forge/skills/review-pr/SKILL.md +367 -0
  93. package/dist/plugins/prime/.claude-plugin/plugin.json +6 -0
  94. package/dist/plugins/prime/agents/ai-consultant.md +999 -0
  95. package/dist/plugins/prime/agents/architect.md +174 -0
  96. package/dist/plugins/prime/agents/code-reviewer.md +115 -0
  97. package/dist/plugins/prime/agents/competitive-analyst.md +688 -0
  98. package/dist/plugins/prime/agents/content-strategist.md +607 -0
  99. package/dist/plugins/prime/agents/design-studio-create.md +304 -0
  100. package/dist/plugins/prime/agents/design-studio-critique.md +258 -0
  101. package/dist/plugins/prime/agents/design-studio-think.md +79 -0
  102. package/dist/plugins/prime/agents/explore-light.md +52 -0
  103. package/dist/plugins/prime/agents/frontend.md +261 -0
  104. package/dist/plugins/prime/agents/gtm-expert.md +811 -0
  105. package/dist/plugins/prime/agents/meeting-prep.md +318 -0
  106. package/dist/plugins/prime/agents/ops.md +149 -0
  107. package/dist/plugins/prime/agents/product-manager.md +563 -0
  108. package/dist/plugins/prime/agents/python-backend.md +286 -0
  109. package/dist/plugins/prime/agents/qa-baseline-updater.md +45 -0
  110. package/dist/plugins/prime/agents/qa-challenger.md +97 -0
  111. package/dist/plugins/prime/agents/qa-domain.md +145 -0
  112. package/dist/plugins/prime/agents/qa-e2e.md +184 -0
  113. package/dist/plugins/prime/agents/qa-test-promoter.md +97 -0
  114. package/dist/plugins/prime/agents/qa.md +226 -0
  115. package/dist/plugins/prime/agents/setup.md +134 -0
  116. package/dist/plugins/prime/agents/sre.md +165 -0
  117. package/dist/plugins/prime/agents/stakeholder-reporter.md +94 -0
  118. package/dist/plugins/prime/agents/user-researcher.md +602 -0
  119. package/dist/plugins/prime/hooks/check-deliverable.sh +65 -0
  120. package/dist/plugins/prime/hooks/ensure-client-dir.sh +59 -0
  121. package/dist/plugins/prime/hooks/hooks.json +184 -0
  122. package/dist/plugins/prime/hooks/post-deploy-health.sh +83 -0
  123. package/dist/plugins/prime/hooks/post-diff-test-compare.sh +125 -0
  124. package/dist/plugins/prime/hooks/post-edit-lint.sh +92 -0
  125. package/dist/plugins/prime/hooks/post-git-state.sh +54 -0
  126. package/dist/plugins/prime/hooks/post-merge-cleanup.sh +101 -0
  127. package/dist/plugins/prime/hooks/post-test-summary.sh +115 -0
  128. package/dist/plugins/prime/hooks/pre-bash-guard.sh +142 -0
  129. package/dist/plugins/prime/hooks/pre-edit-guard.sh +121 -0
  130. package/dist/plugins/prime/hooks/pre-task-context.sh +113 -0
  131. package/dist/plugins/prime/hooks/session-bootstrap.sh +379 -0
  132. package/dist/plugins/prime/hooks/session-end.sh +107 -0
  133. package/dist/plugins/prime/hooks/session-summary.sh +97 -0
  134. package/dist/plugins/prime/hooks/sync-agents.sh +269 -0
  135. package/dist/plugins/prime/hooks/triage-router.sh +740 -0
  136. package/dist/plugins/prime/skills/arth/SKILL.md +165 -0
  137. package/dist/plugins/prime/skills/autopilot/SKILL.md +425 -0
  138. package/dist/plugins/prime/skills/calibrate/SKILL.md +1807 -0
  139. package/dist/plugins/prime/skills/ci-fix/SKILL.md +293 -0
  140. package/dist/plugins/prime/skills/client-discovery/SKILL.md +266 -0
  141. package/dist/plugins/prime/skills/consulting/SKILL.md +282 -0
  142. package/dist/plugins/prime/skills/custom-domain/SKILL.md +261 -0
  143. package/dist/plugins/prime/skills/deliverable-builder/SKILL.md +928 -0
  144. package/dist/plugins/prime/skills/discord-ops/SKILL.md +125 -0
  145. package/dist/plugins/prime/skills/engagement-tracker/SKILL.md +380 -0
  146. package/dist/plugins/prime/skills/explore.md +43 -0
  147. package/dist/plugins/prime/skills/fix/SKILL.md +1058 -0
  148. package/dist/plugins/prime/skills/implement/SKILL.md +532 -0
  149. package/dist/plugins/prime/skills/incident/SKILL.md +910 -0
  150. package/dist/plugins/prime/skills/issue/SKILL.md +134 -0
  151. package/dist/plugins/prime/skills/market-research/SKILL.md +300 -0
  152. package/dist/plugins/prime/skills/onboard/SKILL.md +344 -0
  153. package/dist/plugins/prime/skills/opportunity-map/SKILL.md +307 -0
  154. package/dist/plugins/prime/skills/pitch-generator/SKILL.md +378 -0
  155. package/dist/plugins/prime/skills/planning/SKILL.md +436 -0
  156. package/dist/plugins/prime/skills/pr/SKILL.md +275 -0
  157. package/dist/plugins/prime/skills/precheck/SKILL.md +159 -0
  158. package/dist/plugins/prime/skills/qa/SKILL.md +127 -0
  159. package/dist/plugins/prime/skills/qa-incident/SKILL.md +54 -0
  160. package/dist/plugins/prime/skills/qa-learn/SKILL.md +47 -0
  161. package/dist/plugins/prime/skills/restart/SKILL.md +70 -0
  162. package/dist/plugins/prime/skills/review-pr/SKILL.md +367 -0
  163. package/dist/plugins/prime/skills/roi-calculator/SKILL.md +469 -0
  164. package/dist/plugins/prime/skills/scan/SKILL.md +232 -0
  165. package/dist/plugins/prime/skills/setup/SKILL.md +691 -0
  166. package/dist/plugins/prime/skills/share/SKILL.md +211 -0
  167. package/dist/plugins/prime/skills/solution-architect/SKILL.md +566 -0
  168. package/dist/plugins/prime/skills/sre/SKILL.md +362 -0
  169. package/dist/plugins/prime/skills/sync/SKILL.md +188 -0
  170. package/dist/plugins/prime/skills/templates/SKILL.md +194 -0
  171. package/dist/plugins/prime/skills/welcome/SKILL.md +136 -0
  172. package/dist/plugins/prime/skills/wizard/SKILL.md +411 -0
  173. package/dist/plugins/prism/.claude-plugin/plugin.json +6 -0
  174. package/dist/plugins/prism/agents/qa-baseline-updater.md +45 -0
  175. package/dist/plugins/prism/agents/qa-challenger.md +97 -0
  176. package/dist/plugins/prism/agents/qa-domain.md +145 -0
  177. package/dist/plugins/prism/agents/qa-e2e.md +184 -0
  178. package/dist/plugins/prism/agents/qa-test-promoter.md +97 -0
  179. package/dist/plugins/prism/agents/qa.md +226 -0
  180. package/dist/plugins/prism/hooks/hooks.json +26 -0
  181. package/dist/plugins/prism/hooks/post-diff-test-compare.sh +125 -0
  182. package/dist/plugins/prism/hooks/post-test-summary.sh +115 -0
  183. package/dist/plugins/prism/skills/qa/SKILL.md +127 -0
  184. package/dist/plugins/prism/skills/qa-incident/SKILL.md +54 -0
  185. package/dist/plugins/prism/skills/qa-learn/SKILL.md +47 -0
  186. package/dist/plugins/scalpel/.claude-plugin/plugin.json +6 -0
  187. package/dist/plugins/scalpel/agents/code-reviewer.md +115 -0
  188. package/dist/plugins/scalpel/hooks/hooks.json +26 -0
  189. package/dist/plugins/scalpel/hooks/pre-edit-guard.sh +121 -0
  190. package/dist/plugins/scalpel/skills/ci-fix/SKILL.md +293 -0
  191. package/dist/plugins/scalpel/skills/fix/SKILL.md +1058 -0
  192. package/dist/plugins/scalpel/skills/issue/SKILL.md +134 -0
  193. package/dist/plugins/sentinel/.claude-plugin/plugin.json +6 -0
  194. package/dist/plugins/sentinel/agents/ops.md +149 -0
  195. package/dist/plugins/sentinel/agents/sre.md +165 -0
  196. package/dist/plugins/sentinel/hooks/hooks.json +26 -0
  197. package/dist/plugins/sentinel/hooks/post-deploy-health.sh +83 -0
  198. package/dist/plugins/sentinel/hooks/post-git-state.sh +54 -0
  199. package/dist/plugins/sentinel/skills/incident/SKILL.md +910 -0
  200. package/dist/plugins/sentinel/skills/restart/SKILL.md +70 -0
  201. package/dist/plugins/sentinel/skills/sre/SKILL.md +362 -0
  202. package/dist/plugins/shield/.claude-plugin/plugin.json +6 -0
  203. package/dist/plugins/shield/hooks/hooks.json +60 -0
  204. package/dist/plugins/shield/hooks/pre-bash-guard.sh +142 -0
  205. package/dist/plugins/shield/hooks/pre-edit-guard.sh +121 -0
  206. package/dist/plugins/shield/hooks/session-bootstrap.sh +379 -0
  207. package/dist/plugins/shield/hooks/triage-router.sh +740 -0
  208. package/dist/plugins/spark/.claude-plugin/plugin.json +6 -0
  209. package/dist/plugins/spark/agents/explore-light.md +52 -0
  210. package/dist/plugins/spark/agents/setup.md +134 -0
  211. package/dist/plugins/spark/hooks/hooks.json +16 -0
  212. package/dist/plugins/spark/hooks/session-bootstrap.sh +379 -0
  213. package/dist/plugins/spark/skills/calibrate/SKILL.md +1807 -0
  214. package/dist/plugins/spark/skills/onboard/SKILL.md +344 -0
  215. package/dist/plugins/spark/skills/scan/SKILL.md +232 -0
  216. package/dist/plugins/spark/skills/setup/SKILL.md +691 -0
  217. package/hook-defs.json +104 -0
  218. package/hooks/check-deliverable.sh +65 -0
  219. package/hooks/ensure-client-dir.sh +59 -0
  220. package/hooks/hooks.json +16 -0
  221. package/hooks/post-deploy-health.sh +83 -0
  222. package/hooks/post-diff-test-compare.sh +125 -0
  223. package/hooks/post-edit-lint.sh +92 -0
  224. package/hooks/post-git-state.sh +54 -0
  225. package/hooks/post-merge-cleanup.sh +101 -0
  226. package/hooks/post-test-summary.sh +115 -0
  227. package/hooks/pre-bash-guard.sh +142 -0
  228. package/hooks/pre-edit-guard.sh +121 -0
  229. package/hooks/pre-task-context.sh +113 -0
  230. package/hooks/session-bootstrap.sh +379 -0
  231. package/hooks/session-end.sh +107 -0
  232. package/hooks/session-start.sh +46 -0
  233. package/hooks/session-summary.sh +97 -0
  234. package/hooks/sync-agents.sh +269 -0
  235. package/hooks/triage-router.sh +740 -0
  236. package/install.sh +3185 -0
  237. package/package.json +40 -0
  238. package/portable.manifest +112 -0
  239. package/skills/arth/SKILL.md +165 -0
  240. package/skills/autopilot/SKILL.md +425 -0
  241. package/skills/calibrate/SKILL.md +1807 -0
  242. package/skills/ci-fix/SKILL.md +293 -0
  243. package/skills/client-discovery/SKILL.md +266 -0
  244. package/skills/consulting/SKILL.md +282 -0
  245. package/skills/continue/SKILL.md +174 -0
  246. package/skills/custom-domain/SKILL.md +261 -0
  247. package/skills/deliverable-builder/SKILL.md +928 -0
  248. package/skills/discord-ops/SKILL.md +125 -0
  249. package/skills/engagement-tracker/SKILL.md +380 -0
  250. package/skills/explore.md +43 -0
  251. package/skills/fix/SKILL.md +1058 -0
  252. package/skills/implement/SKILL.md +532 -0
  253. package/skills/incident/SKILL.md +910 -0
  254. package/skills/issue/SKILL.md +134 -0
  255. package/skills/market-research/SKILL.md +300 -0
  256. package/skills/onboard/SKILL.md +344 -0
  257. package/skills/opportunity-map/SKILL.md +307 -0
  258. package/skills/pitch-generator/SKILL.md +378 -0
  259. package/skills/planning/SKILL.md +436 -0
  260. package/skills/pr/SKILL.md +275 -0
  261. package/skills/precheck/SKILL.md +159 -0
  262. package/skills/qa/SKILL.md +127 -0
  263. package/skills/qa-incident/SKILL.md +54 -0
  264. package/skills/qa-learn/SKILL.md +47 -0
  265. package/skills/railway/central-station/SKILL.md +226 -0
  266. package/skills/railway/central-station/references/environment-config.md +183 -0
  267. package/skills/railway/central-station/references/monorepo.md +216 -0
  268. package/skills/railway/central-station/references/railpack.md +257 -0
  269. package/skills/railway/central-station/references/variables.md +170 -0
  270. package/skills/railway/database/SKILL.md +284 -0
  271. package/skills/railway/database/references/environment-config.md +183 -0
  272. package/skills/railway/database/references/monorepo.md +216 -0
  273. package/skills/railway/database/references/railpack.md +257 -0
  274. package/skills/railway/database/references/variables.md +170 -0
  275. package/skills/railway/database/scripts/railway-api.sh +41 -0
  276. package/skills/railway/deploy/SKILL.md +128 -0
  277. package/skills/railway/deploy/references/environment-config.md +183 -0
  278. package/skills/railway/deploy/references/monorepo.md +216 -0
  279. package/skills/railway/deploy/references/railpack.md +257 -0
  280. package/skills/railway/deploy/references/variables.md +170 -0
  281. package/skills/railway/deployment/SKILL.md +222 -0
  282. package/skills/railway/deployment/references/environment-config.md +183 -0
  283. package/skills/railway/deployment/references/monorepo.md +216 -0
  284. package/skills/railway/deployment/references/railpack.md +257 -0
  285. package/skills/railway/deployment/references/variables.md +170 -0
  286. package/skills/railway/domain/SKILL.md +137 -0
  287. package/skills/railway/domain/references/environment-config.md +183 -0
  288. package/skills/railway/domain/references/monorepo.md +216 -0
  289. package/skills/railway/domain/references/railpack.md +257 -0
  290. package/skills/railway/domain/references/variables.md +170 -0
  291. package/skills/railway/environment/SKILL.md +266 -0
  292. package/skills/railway/environment/references/environment-config.md +183 -0
  293. package/skills/railway/environment/references/monorepo.md +216 -0
  294. package/skills/railway/environment/references/railpack.md +257 -0
  295. package/skills/railway/environment/references/variables.md +170 -0
  296. package/skills/railway/metrics/SKILL.md +211 -0
  297. package/skills/railway/metrics/references/environment-config.md +183 -0
  298. package/skills/railway/metrics/references/monorepo.md +216 -0
  299. package/skills/railway/metrics/references/railpack.md +257 -0
  300. package/skills/railway/metrics/references/variables.md +170 -0
  301. package/skills/railway/metrics/scripts/railway-api.sh +41 -0
  302. package/skills/railway/new/SKILL.md +489 -0
  303. package/skills/railway/new/references/environment-config.md +183 -0
  304. package/skills/railway/new/references/monorepo.md +216 -0
  305. package/skills/railway/new/references/railpack.md +257 -0
  306. package/skills/railway/new/references/variables.md +170 -0
  307. package/skills/railway/projects/SKILL.md +142 -0
  308. package/skills/railway/projects/references/environment-config.md +183 -0
  309. package/skills/railway/projects/references/monorepo.md +216 -0
  310. package/skills/railway/projects/references/railpack.md +257 -0
  311. package/skills/railway/projects/references/variables.md +170 -0
  312. package/skills/railway/projects/scripts/railway-api.sh +41 -0
  313. package/skills/railway/railway-docs/SKILL.md +47 -0
  314. package/skills/railway/railway-docs/references/environment-config.md +183 -0
  315. package/skills/railway/railway-docs/references/monorepo.md +216 -0
  316. package/skills/railway/railway-docs/references/railpack.md +257 -0
  317. package/skills/railway/railway-docs/references/variables.md +170 -0
  318. package/skills/railway/service/SKILL.md +249 -0
  319. package/skills/railway/service/references/environment-config.md +183 -0
  320. package/skills/railway/service/references/monorepo.md +216 -0
  321. package/skills/railway/service/references/railpack.md +257 -0
  322. package/skills/railway/service/references/variables.md +170 -0
  323. package/skills/railway/service/scripts/railway-api.sh +41 -0
  324. package/skills/railway/status/SKILL.md +91 -0
  325. package/skills/railway/status/references/environment-config.md +183 -0
  326. package/skills/railway/status/references/monorepo.md +216 -0
  327. package/skills/railway/status/references/railpack.md +257 -0
  328. package/skills/railway/status/references/variables.md +170 -0
  329. package/skills/railway/templates/SKILL.md +275 -0
  330. package/skills/railway/templates/references/environment-config.md +183 -0
  331. package/skills/railway/templates/references/monorepo.md +216 -0
  332. package/skills/railway/templates/references/railpack.md +257 -0
  333. package/skills/railway/templates/references/variables.md +170 -0
  334. package/skills/railway/templates/scripts/railway-api.sh +41 -0
  335. package/skills/restart/SKILL.md +70 -0
  336. package/skills/review-pr/SKILL.md +367 -0
  337. package/skills/roi-calculator/SKILL.md +469 -0
  338. package/skills/scan/SKILL.md +232 -0
  339. package/skills/setup/SKILL.md +691 -0
  340. package/skills/share/SKILL.md +211 -0
  341. package/skills/solution-architect/SKILL.md +566 -0
  342. package/skills/sre/SKILL.md +362 -0
  343. package/skills/superpowers/brainstorming/SKILL.md +96 -0
  344. package/skills/superpowers/dispatching-parallel-agents/SKILL.md +180 -0
  345. package/skills/superpowers/executing-plans/SKILL.md +84 -0
  346. package/skills/superpowers/finishing-a-development-branch/SKILL.md +200 -0
  347. package/skills/superpowers/receiving-code-review/SKILL.md +213 -0
  348. package/skills/superpowers/requesting-code-review/SKILL.md +105 -0
  349. package/skills/superpowers/requesting-code-review/code-reviewer.md +146 -0
  350. package/skills/superpowers/subagent-driven-development/SKILL.md +242 -0
  351. package/skills/superpowers/subagent-driven-development/code-quality-reviewer-prompt.md +20 -0
  352. package/skills/superpowers/subagent-driven-development/implementer-prompt.md +78 -0
  353. package/skills/superpowers/subagent-driven-development/spec-reviewer-prompt.md +61 -0
  354. package/skills/superpowers/systematic-debugging/CREATION-LOG.md +119 -0
  355. package/skills/superpowers/systematic-debugging/SKILL.md +296 -0
  356. package/skills/superpowers/systematic-debugging/condition-based-waiting-example.ts +158 -0
  357. package/skills/superpowers/systematic-debugging/condition-based-waiting.md +115 -0
  358. package/skills/superpowers/systematic-debugging/defense-in-depth.md +122 -0
  359. package/skills/superpowers/systematic-debugging/find-polluter.sh +63 -0
  360. package/skills/superpowers/systematic-debugging/root-cause-tracing.md +169 -0
  361. package/skills/superpowers/systematic-debugging/test-academic.md +14 -0
  362. package/skills/superpowers/systematic-debugging/test-pressure-1.md +58 -0
  363. package/skills/superpowers/systematic-debugging/test-pressure-2.md +68 -0
  364. package/skills/superpowers/systematic-debugging/test-pressure-3.md +69 -0
  365. package/skills/superpowers/test-driven-development/SKILL.md +371 -0
  366. package/skills/superpowers/test-driven-development/testing-anti-patterns.md +299 -0
  367. package/skills/superpowers/using-git-worktrees/SKILL.md +218 -0
  368. package/skills/superpowers/using-superpowers/SKILL.md +95 -0
  369. package/skills/superpowers/verification-before-completion/SKILL.md +139 -0
  370. package/skills/superpowers/writing-plans/SKILL.md +116 -0
  371. package/skills/superpowers/writing-skills/SKILL.md +655 -0
  372. package/skills/superpowers/writing-skills/anthropic-best-practices.md +1150 -0
  373. package/skills/superpowers/writing-skills/examples/CLAUDE_MD_TESTING.md +189 -0
  374. package/skills/superpowers/writing-skills/graphviz-conventions.dot +172 -0
  375. package/skills/superpowers/writing-skills/persuasion-principles.md +187 -0
  376. package/skills/superpowers/writing-skills/render-graphs.js +168 -0
  377. package/skills/superpowers/writing-skills/testing-skills-with-subagents.md +384 -0
  378. package/skills/sync/SKILL.md +188 -0
  379. package/skills/templates/SKILL.md +194 -0
  380. package/skills/welcome/SKILL.md +136 -0
  381. package/skills/wizard/SKILL.md +411 -0
  382. package/templates/CLAUDE.md.managed-block +123 -0
  383. package/templates/CLAUDE.md.template +111 -0
  384. package/templates/consulting/engagement-tracker-template.md +181 -0
  385. package/templates/consulting/executive-summary-template.md +83 -0
  386. package/templates/consulting/maturity-assessment-template.md +182 -0
  387. package/templates/consulting/proposal-template.md +209 -0
  388. package/templates/consulting/roi-model-template.md +139 -0
  389. package/templates/consulting/solution-architecture-template.md +313 -0
  390. package/templates/settings.json +130 -0
@@ -0,0 +1,121 @@
1
+ #!/bin/bash
2
+ # PreToolUse hook (Edit, Write): Warn on edits to protected files.
3
+ # Does NOT block โ€” only injects warnings so Claude thinks twice.
4
+ #
5
+ # stdout is injected as context. Exit 0 always (warnings only).
6
+
7
+ set -euo pipefail
8
+
9
+ PROJECT_DIR="${CLAUDE_PROJECT_DIR:-$(pwd)}"
10
+
11
+ # Extract file path from tool input
12
+ FILE_PATH="${CLAUDE_TOOL_INPUT_FILE_PATH:-}"
13
+ if [ -z "$FILE_PATH" ] && [ -n "${CLAUDE_TOOL_INPUT:-}" ]; then
14
+ FILE_PATH=$(echo "$CLAUDE_TOOL_INPUT" | python3 -c "import json,sys; print(json.load(sys.stdin).get('file_path',''))" 2>/dev/null) || true
15
+ fi
16
+
17
+ [ -z "$FILE_PATH" ] && exit 0
18
+
19
+ # Get just the filename and relative path
20
+ filename=$(basename "$FILE_PATH")
21
+ rel_path="${FILE_PATH#$PROJECT_DIR/}"
22
+
23
+ # ---------------------------------------------------------------------------
24
+ # Bug fix scope lock enforcement
25
+ # ---------------------------------------------------------------------------
26
+ # If /fix created a scope lock, enforce Fix Zone / Frozen Zone boundaries.
27
+ # Files in the Fix Zone are allowed. Watch Zone files get a warning.
28
+ # Frozen Zone files get a strong warning (not a hard block โ€” hook can only warn).
29
+
30
+ SCOPE_LOCK="$PROJECT_DIR/.claude/.fix-scope-lock.json"
31
+ if [ -f "$SCOPE_LOCK" ]; then
32
+ # Check if the file being edited is in the fix zone
33
+ IN_FIX_ZONE=false
34
+ IN_WATCH_ZONE=false
35
+
36
+ FIX_ZONE=$(python3 -c "import json; print('\n'.join(json.load(open('$SCOPE_LOCK')).get('fix_zone',[])))" 2>/dev/null) || true
37
+ WATCH_ZONE=$(python3 -c "import json; print('\n'.join(json.load(open('$SCOPE_LOCK')).get('watch_zone',[])))" 2>/dev/null) || true
38
+ FROZEN_PATTERNS=$(python3 -c "import json; print('\n'.join(json.load(open('$SCOPE_LOCK')).get('frozen_zone_patterns',[])))" 2>/dev/null) || true
39
+
40
+ # Check fix zone
41
+ if [ -n "$FIX_ZONE" ]; then
42
+ echo "$FIX_ZONE" | while read zone_file; do
43
+ if [ "$rel_path" = "$zone_file" ] || echo "$rel_path" | grep -q "^$zone_file"; then
44
+ IN_FIX_ZONE=true
45
+ fi
46
+ done
47
+ fi
48
+
49
+ # Check watch zone
50
+ if ! $IN_FIX_ZONE && [ -n "$WATCH_ZONE" ]; then
51
+ echo "$WATCH_ZONE" | while read zone_file; do
52
+ if [ "$rel_path" = "$zone_file" ] || echo "$rel_path" | grep -q "^$zone_file"; then
53
+ IN_WATCH_ZONE=true
54
+ fi
55
+ done
56
+ fi
57
+
58
+ if $IN_FIX_ZONE; then
59
+ : # Allowed โ€” in Fix Zone
60
+ elif $IN_WATCH_ZONE; then
61
+ echo "โš ๏ธ SCOPE WARNING: ${rel_path} is in the WATCH ZONE for the current bug fix."
62
+ echo "This file is related to the fix but was not expected to need changes."
63
+ echo "Explain WHY this file needs modification before proceeding."
64
+ elif ! $IN_FIX_ZONE && ! $IN_WATCH_ZONE; then
65
+ BUG_DESC=$(python3 -c "import json; print(json.load(open('$SCOPE_LOCK')).get('bug','unknown'))" 2>/dev/null) || true
66
+ echo "๐Ÿ›‘ SCOPE VIOLATION: ${rel_path} is in the FROZEN ZONE."
67
+ echo "Bug fix scope: ${BUG_DESC}"
68
+ echo "This file is NOT part of the fix and should NOT be modified."
69
+ echo "If you must modify it, remove .claude/.fix-scope-lock.json first and explain why the scope expanded."
70
+ echo "DO NOT edit this file unless the user explicitly approves the scope change."
71
+ fi
72
+ fi
73
+
74
+ # ---------------------------------------------------------------------------
75
+ # Protected file patterns
76
+ # ---------------------------------------------------------------------------
77
+
78
+ # Dependency lock files (modifications should be intentional)
79
+ case "$filename" in
80
+ requirements.txt)
81
+ echo "โš ๏ธ Protected file: ${rel_path}"
82
+ echo "This file defines core dependencies. Removing packages can break the project."
83
+ echo "Only modify if explicitly asked by the user."
84
+ ;;
85
+ package-lock.json|yarn.lock|pnpm-lock.yaml)
86
+ echo "โš ๏ธ Lock file: ${rel_path}"
87
+ echo "Lock files should be modified via npm/yarn/pnpm install, not directly."
88
+ ;;
89
+ Cargo.lock)
90
+ echo "โš ๏ธ Lock file: ${rel_path}"
91
+ echo "Cargo.lock should be modified via cargo commands, not directly."
92
+ ;;
93
+ esac
94
+
95
+ # Environment files (may contain secrets)
96
+ case "$filename" in
97
+ .env|.env.local|.env.production|.env.staging)
98
+ echo "โš ๏ธ Environment file: ${rel_path}"
99
+ echo "May contain secrets. Never commit to git. Verify changes are intentional."
100
+ ;;
101
+ esac
102
+
103
+ # Migration files (should not be auto-edited)
104
+ if echo "$rel_path" | grep -qE 'migrations/versions/|alembic/versions/|prisma/migrations/'; then
105
+ echo "โš ๏ธ Migration file: ${rel_path}"
106
+ echo "Existing migrations should not be modified. Create a new migration instead."
107
+ fi
108
+
109
+ # CI/CD config files โ€” match against rel_path for path-based patterns, filename for simple names
110
+ if echo "$rel_path" | grep -qE '\.github/workflows/|\.gitlab-ci\.yml|Jenkinsfile'; then
111
+ echo "โ„น๏ธ Infrastructure file: ${rel_path}"
112
+ echo "Changes may affect CI/CD pipelines or deployments."
113
+ fi
114
+ case "$filename" in
115
+ Dockerfile|docker-compose.yml|docker-compose.yaml)
116
+ echo "โ„น๏ธ Infrastructure file: ${rel_path}"
117
+ echo "Changes may affect container builds or service topology."
118
+ ;;
119
+ esac
120
+
121
+ exit 0
@@ -0,0 +1,379 @@
1
+ #!/bin/bash
2
+ # SessionStart hook: Gather project context and inject a compact briefing.
3
+ # Runs once when Claude Code opens. Outputs 2-5 lines of context.
4
+ # Non-blocking โ€” degrades gracefully if tools are missing.
5
+ #
6
+ # stdout is injected as context into the conversation.
7
+
8
+ set -euo pipefail
9
+
10
+ PROJECT_DIR="${CLAUDE_PROJECT_DIR:-$(pwd)}"
11
+
12
+ # ---------------------------------------------------------------------------
13
+ # Clear triage marker โ€” forces full routing table on first message
14
+ # ---------------------------------------------------------------------------
15
+ rm -f "$PROJECT_DIR/.claude/.triage-full-emitted" 2>/dev/null || true
16
+
17
+ # ---------------------------------------------------------------------------
18
+ # Helpers
19
+ # ---------------------------------------------------------------------------
20
+
21
+ # Check if a command exists silently
22
+ has_cmd() { command -v "$1" &>/dev/null; }
23
+
24
+ # Run a command with timeout, return empty on failure
25
+ # Uses perl fallback on macOS where GNU timeout doesn't exist
26
+ safe_run() {
27
+ local timeout_s="${1:-3}"
28
+ shift
29
+ if command -v timeout &>/dev/null; then
30
+ timeout "$timeout_s" "$@" 2>/dev/null || true
31
+ else
32
+ # macOS fallback: run directly (no timeout protection, but at least it works)
33
+ "$@" 2>/dev/null || true
34
+ fi
35
+ }
36
+
37
+ # ---------------------------------------------------------------------------
38
+ # 1. Project detection
39
+ # ---------------------------------------------------------------------------
40
+
41
+ project_name=$(basename "$PROJECT_DIR")
42
+ claude_md_exists=false
43
+ [ -f "$PROJECT_DIR/CLAUDE.md" ] && claude_md_exists=true
44
+
45
+ # Detect greenfield vs brownfield
46
+ is_greenfield=true
47
+ if $claude_md_exists; then
48
+ is_greenfield=false
49
+ elif [ -f "$PROJECT_DIR/package.json" ] || [ -f "$PROJECT_DIR/requirements.txt" ] || \
50
+ [ -f "$PROJECT_DIR/go.mod" ] || [ -f "$PROJECT_DIR/Cargo.toml" ] || \
51
+ [ -d "$PROJECT_DIR/src" ] || [ -d "$PROJECT_DIR/app" ]; then
52
+ is_greenfield=false
53
+ fi
54
+
55
+ # ---------------------------------------------------------------------------
56
+ # 2. Git context (fast โ€” local only)
57
+ # ---------------------------------------------------------------------------
58
+
59
+ branch=""
60
+ uncommitted=0
61
+ ahead_behind=""
62
+ last_commit=""
63
+ stash_count=0
64
+ has_git=false
65
+
66
+ if [ -d "$PROJECT_DIR/.git" ]; then
67
+ has_git=true
68
+ cd "$PROJECT_DIR"
69
+
70
+ branch=$(safe_run 2 git rev-parse --abbrev-ref HEAD)
71
+ uncommitted=$(safe_run 2 git status --short | wc -l | tr -d ' ')
72
+
73
+ # Ahead/behind remote
74
+ upstream=$(safe_run 2 git rev-parse --abbrev-ref '@{upstream}') || true
75
+ if [ -n "$upstream" ]; then
76
+ local_rev=$(safe_run 2 git rev-parse HEAD)
77
+ remote_rev=$(safe_run 2 git rev-parse "$upstream")
78
+ if [ "$local_rev" != "$remote_rev" ]; then
79
+ ahead=$(safe_run 2 git rev-list --count "$upstream..HEAD")
80
+ behind=$(safe_run 2 git rev-list --count "HEAD..$upstream")
81
+ parts=()
82
+ [ "${ahead:-0}" -gt 0 ] && parts+=("${ahead} ahead")
83
+ [ "${behind:-0}" -gt 0 ] && parts+=("${behind} behind")
84
+ if [ ${#parts[@]} -gt 0 ]; then
85
+ ahead_behind=$(IFS=', '; echo "${parts[*]}")
86
+ fi
87
+ fi
88
+ fi
89
+
90
+ # Last commit (short)
91
+ last_commit=$(safe_run 2 git log -1 --format='%s (%cr)' 2>/dev/null) || true
92
+
93
+ # Stash count
94
+ stash_count=$(safe_run 2 git stash list | wc -l | tr -d ' ')
95
+
96
+ cd - >/dev/null 2>&1 || true
97
+ fi
98
+
99
+ # ---------------------------------------------------------------------------
100
+ # 3. Environment health (from CLAUDE.md + docker + alembic)
101
+ # ---------------------------------------------------------------------------
102
+
103
+ docker_status=""
104
+ alembic_status=""
105
+ mcp_status=""
106
+
107
+ # Docker container health (if docker is available and CLAUDE.md mentions docker)
108
+ if has_cmd docker && docker info &>/dev/null 2>&1; then
109
+ running_containers=$(safe_run 3 docker ps --format '{{.Names}}' | tr '\n' ' ')
110
+ # Check common DB containers
111
+ for svc in postgres redis mysql mongo; do
112
+ if echo "$running_containers" | grep -qi "$svc"; then
113
+ docker_status="${docker_status}${svc} โœ“ "
114
+ else
115
+ # Only flag if the project likely uses this service
116
+ if [ -f "$PROJECT_DIR/docker-compose.yml" ] && grep -qi "$svc" "$PROJECT_DIR/docker-compose.yml" 2>/dev/null; then
117
+ docker_status="${docker_status}${svc} โœ— "
118
+ fi
119
+ fi
120
+ done
121
+ docker_status=$(echo "$docker_status" | sed 's/ $//')
122
+ fi
123
+
124
+ # Alembic migration status (if alembic dir exists)
125
+ if [ -d "$PROJECT_DIR/backend/migrations" ] || [ -d "$PROJECT_DIR/migrations" ] || [ -d "$PROJECT_DIR/alembic" ]; then
126
+ # Find the venv
127
+ venv_activate=""
128
+ for v in "$PROJECT_DIR/backend/.venv/bin/activate" "$PROJECT_DIR/.venv/bin/activate" "$PROJECT_DIR/venv/bin/activate"; do
129
+ if [ -f "$v" ]; then
130
+ venv_activate="$v"
131
+ break
132
+ fi
133
+ done
134
+
135
+ if [ -n "$venv_activate" ]; then
136
+ alembic_dir=""
137
+ for d in "$PROJECT_DIR/backend" "$PROJECT_DIR"; do
138
+ if [ -f "$d/alembic.ini" ]; then
139
+ alembic_dir="$d"
140
+ break
141
+ fi
142
+ done
143
+
144
+ if [ -n "$alembic_dir" ]; then
145
+ current=$(cd "$alembic_dir" && source "$venv_activate" && safe_run 3 alembic current 2>/dev/null | head -1 | awk '{print $1}') || true
146
+ head_rev=$(cd "$alembic_dir" && source "$venv_activate" && safe_run 3 alembic heads 2>/dev/null | head -1 | awk '{print $1}') || true
147
+ if [ -n "$current" ] && [ -n "$head_rev" ]; then
148
+ if [ "$current" = "$head_rev" ]; then
149
+ alembic_status="โœ“"
150
+ else
151
+ alembic_status="โš  pending migrations"
152
+ fi
153
+ fi
154
+ fi
155
+ fi
156
+ fi
157
+
158
+ # Railway MCP check (if configured)
159
+ if has_cmd railway; then
160
+ railway_check=$(safe_run 3 railway whoami 2>&1) || true
161
+ if echo "$railway_check" | grep -qi "error\|not logged\|unauthenticated"; then
162
+ mcp_status="Railway: expired (run railway login)"
163
+ fi
164
+ fi
165
+
166
+ # ---------------------------------------------------------------------------
167
+ # 4. GitHub context (if gh available โ€” PRs, issues)
168
+ # ---------------------------------------------------------------------------
169
+
170
+ pr_summary=""
171
+ issue_summary=""
172
+
173
+ if has_cmd gh && $has_git; then
174
+ cd "$PROJECT_DIR"
175
+
176
+ # My open PRs
177
+ my_prs=$(safe_run 5 gh pr list --author @me --json number,title,reviewDecision,comments --limit 5 2>/dev/null) || true
178
+ if [ -n "$my_prs" ] && [ "$my_prs" != "[]" ]; then
179
+ pr_count=$(echo "$my_prs" | python3 -c "import json,sys; print(len(json.load(sys.stdin)))" 2>/dev/null) || true
180
+ if [ "${pr_count:-0}" -gt 0 ]; then
181
+ pr_summary="${pr_count} open PR(s)"
182
+ # Check for unresolved review comments
183
+ needs_review=$(echo "$my_prs" | python3 -c "
184
+ import json,sys
185
+ prs=json.load(sys.stdin)
186
+ needs=sum(1 for p in prs if p.get('reviewDecision') in ('CHANGES_REQUESTED',None) and p.get('comments',0)>0)
187
+ if needs: print(f', {needs} need attention')
188
+ " 2>/dev/null) || true
189
+ pr_summary="${pr_summary}${needs_review}"
190
+ fi
191
+ fi
192
+
193
+ # My assigned issues
194
+ my_issues=$(safe_run 5 gh issue list --assignee @me --json number,title --limit 5 2>/dev/null) || true
195
+ if [ -n "$my_issues" ] && [ "$my_issues" != "[]" ]; then
196
+ issue_count=$(echo "$my_issues" | python3 -c "import json,sys; print(len(json.load(sys.stdin)))" 2>/dev/null) || true
197
+ if [ "${issue_count:-0}" -gt 0 ]; then
198
+ issue_summary="${issue_count} assigned issue(s)"
199
+ fi
200
+ fi
201
+
202
+ cd - >/dev/null 2>&1 || true
203
+ fi
204
+
205
+ # ---------------------------------------------------------------------------
206
+ # 5. Active plans
207
+ # ---------------------------------------------------------------------------
208
+
209
+ active_plan=""
210
+ if [ -d "$PROJECT_DIR/.claude/plans" ]; then
211
+ plan_files=$(find "$PROJECT_DIR/.claude/plans" -name "*.md" -newer "$PROJECT_DIR/.claude" 2>/dev/null | head -1) || true
212
+ if [ -n "$plan_files" ]; then
213
+ active_plan=$(basename "$plan_files")
214
+ fi
215
+ fi
216
+
217
+ # ---------------------------------------------------------------------------
218
+ # 6. Session continuity (previous session detection)
219
+ # ---------------------------------------------------------------------------
220
+
221
+ session_hint=""
222
+
223
+ # Check for existing session-state summary (written by /continue skill)
224
+ if [ -f "$PROJECT_DIR/.claude/session-state/latest.md" ]; then
225
+ # Check if it's less than 7 days old
226
+ if [ "$(uname)" = "Darwin" ]; then
227
+ file_age=$(( $(date +%s) - $(stat -f%m "$PROJECT_DIR/.claude/session-state/latest.md") ))
228
+ else
229
+ file_age=$(( $(date +%s) - $(stat -c%Y "$PROJECT_DIR/.claude/session-state/latest.md") ))
230
+ fi
231
+ if [ "$file_age" -lt 604800 ]; then
232
+ # Extract first "What Was Done" bullet for a preview
233
+ preview=$(grep -m1 "^- " "$PROJECT_DIR/.claude/session-state/latest.md" 2>/dev/null | head -c 80) || true
234
+ if [ -n "$preview" ]; then
235
+ session_hint="Previous session: ${preview}... โ€” /continue for details"
236
+ else
237
+ session_hint="Previous session summary available โ€” /continue for details"
238
+ fi
239
+ fi
240
+ fi
241
+
242
+ # If no session-state, check for recent transcript JSONL
243
+ if [ -z "$session_hint" ]; then
244
+ TRANSCRIPT_DIR_NAME=$(echo "$PROJECT_DIR" | sed 's|/|-|g')
245
+ TRANSCRIPT_DIR="$HOME/.claude/projects/${TRANSCRIPT_DIR_NAME}"
246
+ if [ -d "$TRANSCRIPT_DIR" ]; then
247
+ # Find the 2nd newest JSONL (newest is current session)
248
+ prev_transcript=$(ls -t "$TRANSCRIPT_DIR"/*.jsonl 2>/dev/null | sed -n '2p') || true
249
+ if [ -n "$prev_transcript" ]; then
250
+ # Check if it's less than 3 days old
251
+ if [ "$(uname)" = "Darwin" ]; then
252
+ t_age=$(( $(date +%s) - $(stat -f%m "$prev_transcript") ))
253
+ else
254
+ t_age=$(( $(date +%s) - $(stat -c%Y "$prev_transcript") ))
255
+ fi
256
+ if [ "$t_age" -lt 259200 ]; then
257
+ session_hint="Recent session detected โ€” /continue to pick up where you left off"
258
+ fi
259
+ fi
260
+ fi
261
+ fi
262
+
263
+ # ---------------------------------------------------------------------------
264
+ # 7. Output โ€” compact briefing (max 6 lines)
265
+ # ---------------------------------------------------------------------------
266
+
267
+ # Line 1: Project + branch
268
+ line1="๐Ÿ“‹ ${project_name}"
269
+ if $is_greenfield; then
270
+ line1="${line1} โ€” new project (no code detected)"
271
+ elif $has_git && [ -n "$branch" ]; then
272
+ line1="${line1} โ€” ${branch}"
273
+ [ -n "$ahead_behind" ] && line1="${line1} (${ahead_behind})"
274
+ fi
275
+ echo "$line1"
276
+
277
+ # Line 2: Red flags (only if there are problems)
278
+ flags=()
279
+ [ -n "$docker_status" ] && echo "$docker_status" | grep -q "โœ—" && flags+=("Docker: ${docker_status}")
280
+ [ "$alembic_status" = "โš  pending migrations" ] && flags+=("Alembic: ${alembic_status}")
281
+ [ -n "$mcp_status" ] && flags+=("โš  ${mcp_status}")
282
+
283
+ if [ ${#flags[@]} -gt 0 ]; then
284
+ echo " $(IFS=' ยท '; echo "${flags[*]}")"
285
+ fi
286
+
287
+ # Line 3: Context (uncommitted, plan, last commit)
288
+ context_parts=()
289
+ [ "${uncommitted:-0}" -gt 0 ] && context_parts+=("${uncommitted} uncommitted files")
290
+ [ -n "$active_plan" ] && context_parts+=("Plan: ${active_plan}")
291
+ [ "${stash_count:-0}" -gt 0 ] && context_parts+=("${stash_count} stash(es)")
292
+
293
+ if [ ${#context_parts[@]} -gt 0 ]; then
294
+ echo " $(IFS=' ยท '; echo "${context_parts[*]}")"
295
+ fi
296
+
297
+ # Line 4: GitHub context (PRs, issues)
298
+ gh_parts=()
299
+ [ -n "$pr_summary" ] && gh_parts+=("$pr_summary")
300
+ [ -n "$issue_summary" ] && gh_parts+=("$issue_summary")
301
+
302
+ if [ ${#gh_parts[@]} -gt 0 ]; then
303
+ echo " $(IFS=' ยท '; echo "${gh_parts[*]}")"
304
+ fi
305
+
306
+ # Line 5: Toolkit status (show what's active)
307
+ toolkit_parts=()
308
+ if [ -f "$PROJECT_DIR/.claude/hooks/triage-router.sh" ] || [ -L "$PROJECT_DIR/.claude/hooks/triage-router.sh" ]; then
309
+ toolkit_parts+=("Triage router: active")
310
+ fi
311
+ if [ -f "$PROJECT_DIR/.claude/hooks/pre-bash-guard.sh" ] || [ -L "$PROJECT_DIR/.claude/hooks/pre-bash-guard.sh" ]; then
312
+ toolkit_parts+=("Guard rails: on")
313
+ fi
314
+ if [ ${#toolkit_parts[@]} -gt 0 ]; then
315
+ echo " $(IFS=' ยท '; echo "${toolkit_parts[*]}")"
316
+ fi
317
+
318
+ # Session continuity hint (if not greenfield)
319
+ if ! $is_greenfield && [ -n "$session_hint" ]; then
320
+ echo " $session_hint"
321
+ fi
322
+
323
+ # Greenfield hint
324
+ if $is_greenfield; then
325
+ echo " Tip: describe what you're building, or type /onboard for guided setup"
326
+ fi
327
+
328
+ # Calibration hint โ€” show for brownfield projects that haven't been calibrated
329
+ if ! $is_greenfield; then
330
+ if [ ! -f "$PROJECT_DIR/.claude/project-profile.md" ]; then
331
+ # Only show if calibrate skill is installed
332
+ if [ -d "$PROJECT_DIR/.claude/skills/calibrate" ] || [ -L "$PROJECT_DIR/.claude/skills/calibrate" ]; then
333
+ echo " Tip: run /calibrate to deep-learn your project and configure MCP servers + agents"
334
+ fi
335
+ else
336
+ # Check knowledge base change detection for drift
337
+ CHANGE_DETECT="$PROJECT_DIR/.claude/knowledge/meta/change-detection.md"
338
+ if [ -f "$CHANGE_DETECT" ]; then
339
+ drift_found=false
340
+ for keyfile in package.json requirements.txt pyproject.toml docker-compose.yml Podfile Package.swift build.gradle pubspec.yaml; do
341
+ if [ -f "$PROJECT_DIR/$keyfile" ]; then
342
+ current_hash=$(shasum -a 256 "$PROJECT_DIR/$keyfile" 2>/dev/null | cut -c1-8)
343
+ stored_hash=$(grep "$keyfile" "$CHANGE_DETECT" 2>/dev/null | awk '{print $4}' | head -1)
344
+ if [ -n "$stored_hash" ] && [ -n "$current_hash" ] && [ "$stored_hash" != "$current_hash" ]; then
345
+ drift_found=true
346
+ break
347
+ fi
348
+ fi
349
+ done
350
+ if $drift_found; then
351
+ echo " โš  Project files changed since last calibration โ€” run /calibrate rescan"
352
+ fi
353
+ fi
354
+ fi
355
+ fi
356
+
357
+ # ---------------------------------------------------------------------------
358
+ # 8. Write project state cache (other hooks read this instead of re-computing)
359
+ # ---------------------------------------------------------------------------
360
+
361
+ CACHE_FILE="$PROJECT_DIR/.claude/.project-state-cache.json"
362
+ _cache_json=$(cat <<CACHE_EOF
363
+ {
364
+ "timestamp": $(date +%s),
365
+ "project_name": "$project_name",
366
+ "is_greenfield": $is_greenfield,
367
+ "has_git": $has_git,
368
+ "branch": "${branch:-}",
369
+ "uncommitted": ${uncommitted:-0},
370
+ "ahead_behind": "${ahead_behind:-}",
371
+ "stash_count": ${stash_count:-0},
372
+ "docker_status": "${docker_status:-}",
373
+ "alembic_status": "${alembic_status:-}",
374
+ "mcp_status": "${mcp_status:-}",
375
+ "active_plan": "${active_plan:-}"
376
+ }
377
+ CACHE_EOF
378
+ )
379
+ echo "$_cache_json" > "$CACHE_FILE" 2>/dev/null || true