aw-ecc 1.4.21

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 (764) hide show
  1. package/.agents/skills/api-design/SKILL.md +523 -0
  2. package/.agents/skills/api-design/agents/openai.yaml +7 -0
  3. package/.agents/skills/article-writing/SKILL.md +85 -0
  4. package/.agents/skills/article-writing/agents/openai.yaml +7 -0
  5. package/.agents/skills/backend-patterns/SKILL.md +598 -0
  6. package/.agents/skills/backend-patterns/agents/openai.yaml +7 -0
  7. package/.agents/skills/bun-runtime/SKILL.md +84 -0
  8. package/.agents/skills/bun-runtime/agents/openai.yaml +7 -0
  9. package/.agents/skills/claude-api/SKILL.md +337 -0
  10. package/.agents/skills/claude-api/agents/openai.yaml +7 -0
  11. package/.agents/skills/coding-standards/SKILL.md +530 -0
  12. package/.agents/skills/coding-standards/agents/openai.yaml +7 -0
  13. package/.agents/skills/content-engine/SKILL.md +88 -0
  14. package/.agents/skills/content-engine/agents/openai.yaml +7 -0
  15. package/.agents/skills/crosspost/SKILL.md +188 -0
  16. package/.agents/skills/crosspost/agents/openai.yaml +7 -0
  17. package/.agents/skills/deep-research/SKILL.md +155 -0
  18. package/.agents/skills/deep-research/agents/openai.yaml +7 -0
  19. package/.agents/skills/dmux-workflows/SKILL.md +144 -0
  20. package/.agents/skills/dmux-workflows/agents/openai.yaml +7 -0
  21. package/.agents/skills/documentation-lookup/SKILL.md +90 -0
  22. package/.agents/skills/documentation-lookup/agents/openai.yaml +7 -0
  23. package/.agents/skills/e2e-testing/SKILL.md +326 -0
  24. package/.agents/skills/e2e-testing/agents/openai.yaml +7 -0
  25. package/.agents/skills/eval-harness/SKILL.md +236 -0
  26. package/.agents/skills/eval-harness/agents/openai.yaml +7 -0
  27. package/.agents/skills/everything-claude-code/SKILL.md +442 -0
  28. package/.agents/skills/everything-claude-code/agents/openai.yaml +6 -0
  29. package/.agents/skills/exa-search/SKILL.md +170 -0
  30. package/.agents/skills/exa-search/agents/openai.yaml +7 -0
  31. package/.agents/skills/fal-ai-media/SKILL.md +277 -0
  32. package/.agents/skills/fal-ai-media/agents/openai.yaml +7 -0
  33. package/.agents/skills/frontend-patterns/SKILL.md +642 -0
  34. package/.agents/skills/frontend-patterns/agents/openai.yaml +7 -0
  35. package/.agents/skills/frontend-slides/SKILL.md +184 -0
  36. package/.agents/skills/frontend-slides/STYLE_PRESETS.md +330 -0
  37. package/.agents/skills/frontend-slides/agents/openai.yaml +7 -0
  38. package/.agents/skills/investor-materials/SKILL.md +96 -0
  39. package/.agents/skills/investor-materials/agents/openai.yaml +7 -0
  40. package/.agents/skills/investor-outreach/SKILL.md +76 -0
  41. package/.agents/skills/investor-outreach/agents/openai.yaml +7 -0
  42. package/.agents/skills/market-research/SKILL.md +75 -0
  43. package/.agents/skills/market-research/agents/openai.yaml +7 -0
  44. package/.agents/skills/mcp-server-patterns/SKILL.md +67 -0
  45. package/.agents/skills/nextjs-turbopack/SKILL.md +44 -0
  46. package/.agents/skills/nextjs-turbopack/agents/openai.yaml +7 -0
  47. package/.agents/skills/security-review/SKILL.md +495 -0
  48. package/.agents/skills/security-review/agents/openai.yaml +7 -0
  49. package/.agents/skills/strategic-compact/SKILL.md +103 -0
  50. package/.agents/skills/strategic-compact/agents/openai.yaml +7 -0
  51. package/.agents/skills/tdd-workflow/SKILL.md +410 -0
  52. package/.agents/skills/tdd-workflow/agents/openai.yaml +7 -0
  53. package/.agents/skills/verification-loop/SKILL.md +126 -0
  54. package/.agents/skills/verification-loop/agents/openai.yaml +7 -0
  55. package/.agents/skills/video-editing/SKILL.md +308 -0
  56. package/.agents/skills/video-editing/agents/openai.yaml +7 -0
  57. package/.agents/skills/x-api/SKILL.md +214 -0
  58. package/.agents/skills/x-api/agents/openai.yaml +7 -0
  59. package/.claude-plugin/README.md +17 -0
  60. package/.claude-plugin/plugin.json +24 -0
  61. package/.codex/AGENTS.md +93 -0
  62. package/.codex/INSTALL.md +64 -0
  63. package/.codex/agents/docs-researcher.toml +9 -0
  64. package/.codex/agents/explorer.toml +9 -0
  65. package/.codex/agents/reviewer.toml +9 -0
  66. package/.codex/config.toml +108 -0
  67. package/.codex/hooks/aw-post-tool-use.sh +5 -0
  68. package/.codex/hooks/aw-pre-tool-use.sh +5 -0
  69. package/.codex/hooks/aw-session-start.sh +21 -0
  70. package/.codex/hooks/aw-stop.sh +5 -0
  71. package/.codex/hooks/aw-user-prompt-submit.sh +9 -0
  72. package/.codex/hooks.json +62 -0
  73. package/.cursor/INSTALL.md +40 -0
  74. package/.cursor/hooks/adapter.js +120 -0
  75. package/.cursor/hooks/after-file-edit.js +11 -0
  76. package/.cursor/hooks/after-mcp-execution.js +11 -0
  77. package/.cursor/hooks/after-shell-execution.js +11 -0
  78. package/.cursor/hooks/after-tab-file-edit.js +12 -0
  79. package/.cursor/hooks/aw-phase-adapter.js +43 -0
  80. package/.cursor/hooks/before-mcp-execution.js +11 -0
  81. package/.cursor/hooks/before-read-file.js +13 -0
  82. package/.cursor/hooks/before-shell-execution.js +11 -0
  83. package/.cursor/hooks/before-submit-prompt.js +41 -0
  84. package/.cursor/hooks/before-tab-file-read.js +13 -0
  85. package/.cursor/hooks/pre-compact.js +11 -0
  86. package/.cursor/hooks/session-end.js +11 -0
  87. package/.cursor/hooks/session-start.js +11 -0
  88. package/.cursor/hooks/shared/aw-phase-definitions.js +190 -0
  89. package/.cursor/hooks/shared/aw-phase-runner.js +61 -0
  90. package/.cursor/hooks/shared/session-start.sh +20 -0
  91. package/.cursor/hooks/shared/user-prompt-submit.sh +155 -0
  92. package/.cursor/hooks/stop.js +11 -0
  93. package/.cursor/hooks/subagent-start.js +10 -0
  94. package/.cursor/hooks/subagent-stop.js +10 -0
  95. package/.cursor/hooks.json +115 -0
  96. package/.cursor/rules/common-agents.md +53 -0
  97. package/.cursor/rules/common-coding-style.md +52 -0
  98. package/.cursor/rules/common-development-workflow.md +33 -0
  99. package/.cursor/rules/common-git-workflow.md +28 -0
  100. package/.cursor/rules/common-hooks.md +34 -0
  101. package/.cursor/rules/common-patterns.md +35 -0
  102. package/.cursor/rules/common-performance.md +59 -0
  103. package/.cursor/rules/common-security.md +33 -0
  104. package/.cursor/rules/common-testing.md +33 -0
  105. package/.cursor/rules/golang-coding-style.md +31 -0
  106. package/.cursor/rules/golang-hooks.md +16 -0
  107. package/.cursor/rules/golang-patterns.md +44 -0
  108. package/.cursor/rules/golang-security.md +33 -0
  109. package/.cursor/rules/golang-testing.md +30 -0
  110. package/.cursor/rules/kotlin-coding-style.md +39 -0
  111. package/.cursor/rules/kotlin-hooks.md +16 -0
  112. package/.cursor/rules/kotlin-patterns.md +50 -0
  113. package/.cursor/rules/kotlin-security.md +58 -0
  114. package/.cursor/rules/kotlin-testing.md +38 -0
  115. package/.cursor/rules/php-coding-style.md +25 -0
  116. package/.cursor/rules/php-hooks.md +21 -0
  117. package/.cursor/rules/php-patterns.md +23 -0
  118. package/.cursor/rules/php-security.md +24 -0
  119. package/.cursor/rules/php-testing.md +26 -0
  120. package/.cursor/rules/python-coding-style.md +42 -0
  121. package/.cursor/rules/python-hooks.md +19 -0
  122. package/.cursor/rules/python-patterns.md +39 -0
  123. package/.cursor/rules/python-security.md +30 -0
  124. package/.cursor/rules/python-testing.md +38 -0
  125. package/.cursor/rules/swift-coding-style.md +47 -0
  126. package/.cursor/rules/swift-hooks.md +20 -0
  127. package/.cursor/rules/swift-patterns.md +66 -0
  128. package/.cursor/rules/swift-security.md +33 -0
  129. package/.cursor/rules/swift-testing.md +45 -0
  130. package/.cursor/rules/typescript-coding-style.md +63 -0
  131. package/.cursor/rules/typescript-hooks.md +20 -0
  132. package/.cursor/rules/typescript-patterns.md +50 -0
  133. package/.cursor/rules/typescript-security.md +26 -0
  134. package/.cursor/rules/typescript-testing.md +16 -0
  135. package/.cursor/skills/article-writing/SKILL.md +85 -0
  136. package/.cursor/skills/bun-runtime/SKILL.md +84 -0
  137. package/.cursor/skills/content-engine/SKILL.md +88 -0
  138. package/.cursor/skills/documentation-lookup/SKILL.md +90 -0
  139. package/.cursor/skills/frontend-slides/SKILL.md +184 -0
  140. package/.cursor/skills/frontend-slides/STYLE_PRESETS.md +330 -0
  141. package/.cursor/skills/investor-materials/SKILL.md +96 -0
  142. package/.cursor/skills/investor-outreach/SKILL.md +76 -0
  143. package/.cursor/skills/market-research/SKILL.md +75 -0
  144. package/.cursor/skills/mcp-server-patterns/SKILL.md +67 -0
  145. package/.cursor/skills/nextjs-turbopack/SKILL.md +44 -0
  146. package/.opencode/MIGRATION.md +368 -0
  147. package/.opencode/README.md +204 -0
  148. package/.opencode/commands/build-fix.md +56 -0
  149. package/.opencode/commands/checkpoint.md +67 -0
  150. package/.opencode/commands/code-review.md +68 -0
  151. package/.opencode/commands/e2e.md +105 -0
  152. package/.opencode/commands/eval.md +88 -0
  153. package/.opencode/commands/evolve.md +36 -0
  154. package/.opencode/commands/go-build.md +87 -0
  155. package/.opencode/commands/go-review.md +71 -0
  156. package/.opencode/commands/go-test.md +131 -0
  157. package/.opencode/commands/harness-audit.md +71 -0
  158. package/.opencode/commands/instinct-export.md +93 -0
  159. package/.opencode/commands/instinct-import.md +88 -0
  160. package/.opencode/commands/instinct-status.md +29 -0
  161. package/.opencode/commands/learn.md +61 -0
  162. package/.opencode/commands/loop-start.md +32 -0
  163. package/.opencode/commands/loop-status.md +24 -0
  164. package/.opencode/commands/model-route.md +26 -0
  165. package/.opencode/commands/orchestrate.md +88 -0
  166. package/.opencode/commands/plan.md +49 -0
  167. package/.opencode/commands/projects.md +23 -0
  168. package/.opencode/commands/promote.md +23 -0
  169. package/.opencode/commands/quality-gate.md +29 -0
  170. package/.opencode/commands/refactor-clean.md +102 -0
  171. package/.opencode/commands/rust-build.md +78 -0
  172. package/.opencode/commands/rust-review.md +65 -0
  173. package/.opencode/commands/rust-test.md +104 -0
  174. package/.opencode/commands/security.md +89 -0
  175. package/.opencode/commands/setup-pm.md +67 -0
  176. package/.opencode/commands/skill-create.md +117 -0
  177. package/.opencode/commands/tdd.md +66 -0
  178. package/.opencode/commands/test-coverage.md +80 -0
  179. package/.opencode/commands/update-codemaps.md +81 -0
  180. package/.opencode/commands/update-docs.md +67 -0
  181. package/.opencode/commands/verify.md +67 -0
  182. package/.opencode/index.ts +79 -0
  183. package/.opencode/instructions/INSTRUCTIONS.md +337 -0
  184. package/.opencode/opencode.json +319 -0
  185. package/.opencode/package.json +70 -0
  186. package/.opencode/plugins/ecc-hooks.ts +455 -0
  187. package/.opencode/plugins/index.ts +12 -0
  188. package/.opencode/prompts/agents/architect.txt +175 -0
  189. package/.opencode/prompts/agents/build-error-resolver.txt +233 -0
  190. package/.opencode/prompts/agents/code-reviewer.txt +103 -0
  191. package/.opencode/prompts/agents/database-reviewer.txt +247 -0
  192. package/.opencode/prompts/agents/doc-updater.txt +192 -0
  193. package/.opencode/prompts/agents/e2e-runner.txt +305 -0
  194. package/.opencode/prompts/agents/go-build-resolver.txt +325 -0
  195. package/.opencode/prompts/agents/go-reviewer.txt +241 -0
  196. package/.opencode/prompts/agents/planner.txt +112 -0
  197. package/.opencode/prompts/agents/refactor-cleaner.txt +241 -0
  198. package/.opencode/prompts/agents/rust-build-resolver.txt +93 -0
  199. package/.opencode/prompts/agents/rust-reviewer.txt +61 -0
  200. package/.opencode/prompts/agents/security-reviewer.txt +207 -0
  201. package/.opencode/prompts/agents/tdd-guide.txt +211 -0
  202. package/.opencode/tools/check-coverage.ts +170 -0
  203. package/.opencode/tools/format-code.ts +68 -0
  204. package/.opencode/tools/git-summary.ts +54 -0
  205. package/.opencode/tools/index.ts +13 -0
  206. package/.opencode/tools/lint-check.ts +85 -0
  207. package/.opencode/tools/run-tests.ts +139 -0
  208. package/.opencode/tools/security-audit.ts +277 -0
  209. package/.opencode/tsconfig.json +29 -0
  210. package/AGENTS.md +124 -0
  211. package/LICENSE +21 -0
  212. package/README.md +146 -0
  213. package/README.zh-CN.md +552 -0
  214. package/agents/architect.md +211 -0
  215. package/agents/build-error-resolver.md +114 -0
  216. package/agents/chief-of-staff.md +151 -0
  217. package/agents/code-reviewer.md +237 -0
  218. package/agents/cpp-build-resolver.md +90 -0
  219. package/agents/cpp-reviewer.md +72 -0
  220. package/agents/database-reviewer.md +91 -0
  221. package/agents/doc-updater.md +107 -0
  222. package/agents/docs-lookup.md +68 -0
  223. package/agents/e2e-runner.md +107 -0
  224. package/agents/evals/code-reviewer-scenarios.json +23 -0
  225. package/agents/flutter-reviewer.md +243 -0
  226. package/agents/go-build-resolver.md +94 -0
  227. package/agents/go-reviewer.md +76 -0
  228. package/agents/harness-optimizer.md +35 -0
  229. package/agents/java-build-resolver.md +153 -0
  230. package/agents/java-reviewer.md +92 -0
  231. package/agents/kotlin-build-resolver.md +118 -0
  232. package/agents/kotlin-reviewer.md +159 -0
  233. package/agents/loop-operator.md +36 -0
  234. package/agents/planner.md +212 -0
  235. package/agents/python-reviewer.md +98 -0
  236. package/agents/pytorch-build-resolver.md +120 -0
  237. package/agents/refactor-cleaner.md +85 -0
  238. package/agents/rust-build-resolver.md +148 -0
  239. package/agents/rust-reviewer.md +94 -0
  240. package/agents/security-reviewer.md +108 -0
  241. package/agents/tdd-guide.md +91 -0
  242. package/agents/typescript-reviewer.md +112 -0
  243. package/commands/aside.md +164 -0
  244. package/commands/brainstorm.md +16 -0
  245. package/commands/build-fix.md +70 -0
  246. package/commands/build.md +91 -0
  247. package/commands/checkpoint.md +74 -0
  248. package/commands/claw.md +51 -0
  249. package/commands/code-review.md +24 -0
  250. package/commands/context-budget.md +29 -0
  251. package/commands/cpp-build.md +174 -0
  252. package/commands/cpp-review.md +132 -0
  253. package/commands/cpp-test.md +252 -0
  254. package/commands/deploy.md +75 -0
  255. package/commands/devfleet.md +92 -0
  256. package/commands/docs.md +31 -0
  257. package/commands/e2e.md +373 -0
  258. package/commands/eval.md +120 -0
  259. package/commands/evolve.md +178 -0
  260. package/commands/execute.md +51 -0
  261. package/commands/finish.md +22 -0
  262. package/commands/go-build.md +184 -0
  263. package/commands/go-review.md +148 -0
  264. package/commands/go-test.md +269 -0
  265. package/commands/gradle-build.md +70 -0
  266. package/commands/harness-audit.md +71 -0
  267. package/commands/instinct-export.md +66 -0
  268. package/commands/instinct-import.md +114 -0
  269. package/commands/instinct-status.md +59 -0
  270. package/commands/investigate.md +63 -0
  271. package/commands/kotlin-build.md +175 -0
  272. package/commands/kotlin-review.md +140 -0
  273. package/commands/kotlin-test.md +313 -0
  274. package/commands/learn-eval.md +116 -0
  275. package/commands/learn.md +70 -0
  276. package/commands/loop-start.md +32 -0
  277. package/commands/loop-status.md +24 -0
  278. package/commands/model-route.md +26 -0
  279. package/commands/multi-backend.md +166 -0
  280. package/commands/multi-execute.md +324 -0
  281. package/commands/multi-frontend.md +165 -0
  282. package/commands/multi-plan.md +277 -0
  283. package/commands/multi-workflow.md +200 -0
  284. package/commands/orchestrate.md +240 -0
  285. package/commands/plan.md +130 -0
  286. package/commands/pm2.md +272 -0
  287. package/commands/projects.md +39 -0
  288. package/commands/promote.md +41 -0
  289. package/commands/prompt-optimize.md +38 -0
  290. package/commands/prune.md +31 -0
  291. package/commands/python-review.md +297 -0
  292. package/commands/quality-gate.md +29 -0
  293. package/commands/refactor-clean.md +89 -0
  294. package/commands/resume-session.md +155 -0
  295. package/commands/review.md +64 -0
  296. package/commands/rules-distill.md +11 -0
  297. package/commands/rust-build.md +188 -0
  298. package/commands/rust-review.md +142 -0
  299. package/commands/rust-test.md +309 -0
  300. package/commands/save-session.md +275 -0
  301. package/commands/sessions.md +333 -0
  302. package/commands/setup-pm.md +80 -0
  303. package/commands/ship.md +77 -0
  304. package/commands/skill-create.md +174 -0
  305. package/commands/skill-health.md +54 -0
  306. package/commands/tdd.md +20 -0
  307. package/commands/test-coverage.md +77 -0
  308. package/commands/test.md +64 -0
  309. package/commands/update-codemaps.md +72 -0
  310. package/commands/update-docs.md +84 -0
  311. package/commands/verify.md +55 -0
  312. package/contexts/dev.md +20 -0
  313. package/contexts/research.md +26 -0
  314. package/contexts/review.md +22 -0
  315. package/examples/CLAUDE.md +100 -0
  316. package/examples/statusline.json +19 -0
  317. package/examples/user-CLAUDE.md +109 -0
  318. package/hooks/README.md +219 -0
  319. package/hooks/hooks.json +320 -0
  320. package/hooks/run-hook.cmd +31 -0
  321. package/hooks/session-start +6 -0
  322. package/install.ps1 +38 -0
  323. package/install.sh +17 -0
  324. package/manifests/install-components.json +415 -0
  325. package/manifests/install-modules.json +500 -0
  326. package/manifests/install-profiles.json +80 -0
  327. package/mcp-configs/mcp-servers.json +153 -0
  328. package/package.json +131 -0
  329. package/plugins/README.md +85 -0
  330. package/rules/README.md +106 -0
  331. package/rules/common/agents.md +50 -0
  332. package/rules/common/coding-style.md +48 -0
  333. package/rules/common/development-workflow.md +38 -0
  334. package/rules/common/git-workflow.md +24 -0
  335. package/rules/common/hooks.md +30 -0
  336. package/rules/common/patterns.md +31 -0
  337. package/rules/common/performance.md +55 -0
  338. package/rules/common/security.md +29 -0
  339. package/rules/common/testing.md +29 -0
  340. package/rules/cpp/coding-style.md +44 -0
  341. package/rules/cpp/hooks.md +39 -0
  342. package/rules/cpp/patterns.md +51 -0
  343. package/rules/cpp/security.md +51 -0
  344. package/rules/cpp/testing.md +44 -0
  345. package/rules/csharp/coding-style.md +72 -0
  346. package/rules/csharp/hooks.md +25 -0
  347. package/rules/csharp/patterns.md +50 -0
  348. package/rules/csharp/security.md +58 -0
  349. package/rules/csharp/testing.md +46 -0
  350. package/rules/golang/coding-style.md +32 -0
  351. package/rules/golang/hooks.md +17 -0
  352. package/rules/golang/patterns.md +45 -0
  353. package/rules/golang/security.md +34 -0
  354. package/rules/golang/testing.md +31 -0
  355. package/rules/java/coding-style.md +114 -0
  356. package/rules/java/hooks.md +18 -0
  357. package/rules/java/patterns.md +146 -0
  358. package/rules/java/security.md +100 -0
  359. package/rules/java/testing.md +131 -0
  360. package/rules/kotlin/coding-style.md +86 -0
  361. package/rules/kotlin/hooks.md +17 -0
  362. package/rules/kotlin/patterns.md +146 -0
  363. package/rules/kotlin/security.md +82 -0
  364. package/rules/kotlin/testing.md +128 -0
  365. package/rules/perl/coding-style.md +46 -0
  366. package/rules/perl/hooks.md +22 -0
  367. package/rules/perl/patterns.md +76 -0
  368. package/rules/perl/security.md +69 -0
  369. package/rules/perl/testing.md +54 -0
  370. package/rules/php/coding-style.md +40 -0
  371. package/rules/php/hooks.md +24 -0
  372. package/rules/php/patterns.md +33 -0
  373. package/rules/php/security.md +37 -0
  374. package/rules/php/testing.md +39 -0
  375. package/rules/python/coding-style.md +42 -0
  376. package/rules/python/hooks.md +19 -0
  377. package/rules/python/patterns.md +39 -0
  378. package/rules/python/security.md +30 -0
  379. package/rules/python/testing.md +38 -0
  380. package/rules/rust/coding-style.md +151 -0
  381. package/rules/rust/hooks.md +16 -0
  382. package/rules/rust/patterns.md +168 -0
  383. package/rules/rust/security.md +141 -0
  384. package/rules/rust/testing.md +154 -0
  385. package/rules/swift/coding-style.md +47 -0
  386. package/rules/swift/hooks.md +20 -0
  387. package/rules/swift/patterns.md +66 -0
  388. package/rules/swift/security.md +33 -0
  389. package/rules/swift/testing.md +45 -0
  390. package/rules/typescript/coding-style.md +199 -0
  391. package/rules/typescript/hooks.md +22 -0
  392. package/rules/typescript/patterns.md +52 -0
  393. package/rules/typescript/security.md +28 -0
  394. package/rules/typescript/testing.md +18 -0
  395. package/schemas/ecc-install-config.schema.json +58 -0
  396. package/schemas/hooks.schema.json +197 -0
  397. package/schemas/install-components.schema.json +58 -0
  398. package/schemas/install-modules.schema.json +105 -0
  399. package/schemas/install-profiles.schema.json +45 -0
  400. package/schemas/install-state.schema.json +210 -0
  401. package/schemas/package-manager.schema.json +23 -0
  402. package/schemas/plugin.schema.json +58 -0
  403. package/schemas/provenance.schema.json +31 -0
  404. package/schemas/state-store.schema.json +316 -0
  405. package/scripts/ci/catalog.js +245 -0
  406. package/scripts/ci/validate-agents.js +81 -0
  407. package/scripts/ci/validate-commands.js +136 -0
  408. package/scripts/ci/validate-hooks.js +239 -0
  409. package/scripts/ci/validate-install-manifests.js +214 -0
  410. package/scripts/ci/validate-no-personal-paths.js +63 -0
  411. package/scripts/ci/validate-rules.js +81 -0
  412. package/scripts/ci/validate-skills.js +56 -0
  413. package/scripts/claw.js +473 -0
  414. package/scripts/codex/merge-mcp-config.js +304 -0
  415. package/scripts/cursor-aw-home/hooks.json +115 -0
  416. package/scripts/cursor-aw-hooks/adapter.js +120 -0
  417. package/scripts/cursor-aw-hooks/after-file-edit.js +11 -0
  418. package/scripts/cursor-aw-hooks/after-mcp-execution.js +11 -0
  419. package/scripts/cursor-aw-hooks/after-shell-execution.js +11 -0
  420. package/scripts/cursor-aw-hooks/aw-phase-adapter.js +43 -0
  421. package/scripts/cursor-aw-hooks/before-mcp-execution.js +11 -0
  422. package/scripts/cursor-aw-hooks/before-shell-execution.js +11 -0
  423. package/scripts/cursor-aw-hooks/before-submit-prompt.js +41 -0
  424. package/scripts/cursor-aw-hooks/pre-compact.js +11 -0
  425. package/scripts/cursor-aw-hooks/session-end.js +11 -0
  426. package/scripts/cursor-aw-hooks/session-start.js +11 -0
  427. package/scripts/cursor-aw-hooks/stop.js +11 -0
  428. package/scripts/doctor.js +110 -0
  429. package/scripts/ecc.js +208 -0
  430. package/scripts/generate-aw-hooks.js +110 -0
  431. package/scripts/harness-audit.js +512 -0
  432. package/scripts/hooks/auto-tmux-dev.js +88 -0
  433. package/scripts/hooks/check-console-log.js +71 -0
  434. package/scripts/hooks/check-hook-enabled.js +12 -0
  435. package/scripts/hooks/config-protection.js +125 -0
  436. package/scripts/hooks/cost-tracker.js +78 -0
  437. package/scripts/hooks/doc-file-warning.js +63 -0
  438. package/scripts/hooks/evaluate-session.js +100 -0
  439. package/scripts/hooks/governance-capture.js +280 -0
  440. package/scripts/hooks/insaits-security-monitor.py +269 -0
  441. package/scripts/hooks/insaits-security-wrapper.js +88 -0
  442. package/scripts/hooks/mcp-health-check.js +588 -0
  443. package/scripts/hooks/post-bash-build-complete.js +27 -0
  444. package/scripts/hooks/post-bash-pr-created.js +37 -0
  445. package/scripts/hooks/post-edit-console-warn.js +54 -0
  446. package/scripts/hooks/post-edit-format.js +109 -0
  447. package/scripts/hooks/post-edit-typecheck.js +96 -0
  448. package/scripts/hooks/post-mcp-log.js +27 -0
  449. package/scripts/hooks/pre-bash-dev-server-block.js +187 -0
  450. package/scripts/hooks/pre-bash-git-push-reminder.js +28 -0
  451. package/scripts/hooks/pre-bash-tmux-reminder.js +33 -0
  452. package/scripts/hooks/pre-compact.js +48 -0
  453. package/scripts/hooks/pre-mcp-log.js +26 -0
  454. package/scripts/hooks/pre-write-doc-warn.js +9 -0
  455. package/scripts/hooks/quality-gate.js +168 -0
  456. package/scripts/hooks/run-with-flags-shell.sh +32 -0
  457. package/scripts/hooks/run-with-flags.js +120 -0
  458. package/scripts/hooks/session-end-marker.js +29 -0
  459. package/scripts/hooks/session-end.js +301 -0
  460. package/scripts/hooks/session-start-rules-context.sh +5 -0
  461. package/scripts/hooks/session-start.js +98 -0
  462. package/scripts/hooks/shared/aw-phase-definitions.js +190 -0
  463. package/scripts/hooks/shared/aw-phase-runner.js +61 -0
  464. package/scripts/hooks/shared/session-start.sh +20 -0
  465. package/scripts/hooks/shared/user-prompt-submit.sh +155 -0
  466. package/scripts/hooks/suggest-compact.js +80 -0
  467. package/scripts/install-apply.js +140 -0
  468. package/scripts/install-plan.js +254 -0
  469. package/scripts/lib/agent-compress.js +244 -0
  470. package/scripts/lib/aw-harness-registry.js +122 -0
  471. package/scripts/lib/aw-hook-contract.js +86 -0
  472. package/scripts/lib/claude-aw-hook-files.js +28 -0
  473. package/scripts/lib/claude-hook-config.js +76 -0
  474. package/scripts/lib/codex-aw-hook-files.js +38 -0
  475. package/scripts/lib/codex-hook-config.js +88 -0
  476. package/scripts/lib/cursor-aw-hook-files.js +62 -0
  477. package/scripts/lib/cursor-hook-config.js +148 -0
  478. package/scripts/lib/hook-flags.js +74 -0
  479. package/scripts/lib/inspection.js +212 -0
  480. package/scripts/lib/install/apply.js +23 -0
  481. package/scripts/lib/install/config.js +82 -0
  482. package/scripts/lib/install/request.js +120 -0
  483. package/scripts/lib/install/runtime.js +54 -0
  484. package/scripts/lib/install-executor.js +778 -0
  485. package/scripts/lib/install-lifecycle.js +1311 -0
  486. package/scripts/lib/install-manifests.js +448 -0
  487. package/scripts/lib/install-state.js +313 -0
  488. package/scripts/lib/install-targets/antigravity-project.js +69 -0
  489. package/scripts/lib/install-targets/claude-home.js +54 -0
  490. package/scripts/lib/install-targets/codex-home.js +62 -0
  491. package/scripts/lib/install-targets/cursor-project.js +80 -0
  492. package/scripts/lib/install-targets/helpers.js +307 -0
  493. package/scripts/lib/install-targets/opencode-home.js +10 -0
  494. package/scripts/lib/install-targets/registry.js +66 -0
  495. package/scripts/lib/orchestration-session.js +299 -0
  496. package/scripts/lib/package-manager.d.ts +119 -0
  497. package/scripts/lib/package-manager.js +431 -0
  498. package/scripts/lib/project-detect.js +428 -0
  499. package/scripts/lib/resolve-ecc-root.js +89 -0
  500. package/scripts/lib/resolve-formatter.js +185 -0
  501. package/scripts/lib/session-adapters/canonical-session.js +531 -0
  502. package/scripts/lib/session-adapters/claude-history.js +160 -0
  503. package/scripts/lib/session-adapters/dmux-tmux.js +90 -0
  504. package/scripts/lib/session-adapters/registry.js +127 -0
  505. package/scripts/lib/session-aliases.d.ts +136 -0
  506. package/scripts/lib/session-aliases.js +481 -0
  507. package/scripts/lib/session-manager.d.ts +131 -0
  508. package/scripts/lib/session-manager.js +464 -0
  509. package/scripts/lib/shell-split.js +86 -0
  510. package/scripts/lib/skill-evolution/dashboard.js +401 -0
  511. package/scripts/lib/skill-evolution/health.js +263 -0
  512. package/scripts/lib/skill-evolution/index.js +20 -0
  513. package/scripts/lib/skill-evolution/provenance.js +187 -0
  514. package/scripts/lib/skill-evolution/tracker.js +146 -0
  515. package/scripts/lib/skill-evolution/versioning.js +237 -0
  516. package/scripts/lib/skill-improvement/amendify.js +89 -0
  517. package/scripts/lib/skill-improvement/evaluate.js +59 -0
  518. package/scripts/lib/skill-improvement/health.js +118 -0
  519. package/scripts/lib/skill-improvement/observations.js +108 -0
  520. package/scripts/lib/state-store/index.js +191 -0
  521. package/scripts/lib/state-store/migrations.js +178 -0
  522. package/scripts/lib/state-store/queries.js +697 -0
  523. package/scripts/lib/state-store/schema.js +92 -0
  524. package/scripts/lib/tmux-worktree-orchestrator.js +475 -0
  525. package/scripts/lib/utils.d.ts +183 -0
  526. package/scripts/lib/utils.js +564 -0
  527. package/scripts/list-installed.js +90 -0
  528. package/scripts/orchestrate-codex-worker.sh +107 -0
  529. package/scripts/orchestrate-worktrees.js +40 -0
  530. package/scripts/orchestration-status.js +82 -0
  531. package/scripts/repair.js +97 -0
  532. package/scripts/session-inspect.js +150 -0
  533. package/scripts/sessions-cli.js +177 -0
  534. package/scripts/setup-package-manager.js +204 -0
  535. package/scripts/skill-create-output.js +244 -0
  536. package/scripts/status.js +176 -0
  537. package/scripts/uninstall.js +96 -0
  538. package/skills/agent-eval/SKILL.md +145 -0
  539. package/skills/agent-harness-construction/SKILL.md +73 -0
  540. package/skills/agentic-engineering/SKILL.md +63 -0
  541. package/skills/ai-first-engineering/SKILL.md +51 -0
  542. package/skills/ai-regression-testing/SKILL.md +385 -0
  543. package/skills/android-clean-architecture/SKILL.md +339 -0
  544. package/skills/api-and-interface-design/SKILL.md +75 -0
  545. package/skills/api-design/SKILL.md +523 -0
  546. package/skills/architecture-decision-records/SKILL.md +179 -0
  547. package/skills/article-writing/SKILL.md +85 -0
  548. package/skills/autonomous-loops/SKILL.md +610 -0
  549. package/skills/aw-brainstorm/SKILL.md +115 -0
  550. package/skills/aw-build/SKILL.md +189 -0
  551. package/skills/aw-build/evals/build-stage-cases.json +28 -0
  552. package/skills/aw-debug/SKILL.md +49 -0
  553. package/skills/aw-deploy/SKILL.md +101 -0
  554. package/skills/aw-deploy/evals/deploy-stage-cases.json +32 -0
  555. package/skills/aw-execute/SKILL.md +47 -0
  556. package/skills/aw-execute/references/mode-code.md +47 -0
  557. package/skills/aw-execute/references/mode-docs.md +28 -0
  558. package/skills/aw-execute/references/mode-infra.md +44 -0
  559. package/skills/aw-execute/references/mode-migration.md +58 -0
  560. package/skills/aw-execute/references/worker-implementer.md +26 -0
  561. package/skills/aw-execute/references/worker-parallel-worker.md +23 -0
  562. package/skills/aw-execute/references/worker-quality-reviewer.md +23 -0
  563. package/skills/aw-execute/references/worker-spec-reviewer.md +23 -0
  564. package/skills/aw-execute/scripts/build-worker-bundle.js +229 -0
  565. package/skills/aw-finish/SKILL.md +111 -0
  566. package/skills/aw-investigate/SKILL.md +109 -0
  567. package/skills/aw-plan/SKILL.md +399 -0
  568. package/skills/aw-prepare/SKILL.md +118 -0
  569. package/skills/aw-review/SKILL.md +123 -0
  570. package/skills/aw-rules/SKILL.md +129 -0
  571. package/skills/aw-rules/references/known-hallucinations.md +43 -0
  572. package/skills/aw-rules/references/verification-sources.md +50 -0
  573. package/skills/aw-ship/SKILL.md +115 -0
  574. package/skills/aw-spec/SKILL.md +128 -0
  575. package/skills/aw-tasks/SKILL.md +155 -0
  576. package/skills/aw-test/SKILL.md +118 -0
  577. package/skills/aw-verify/SKILL.md +51 -0
  578. package/skills/aw-yolo/SKILL.md +111 -0
  579. package/skills/backend-patterns/SKILL.md +598 -0
  580. package/skills/benchmark/SKILL.md +87 -0
  581. package/skills/blueprint/SKILL.md +105 -0
  582. package/skills/browser-qa/SKILL.md +81 -0
  583. package/skills/browser-testing-with-devtools/SKILL.md +81 -0
  584. package/skills/bun-runtime/SKILL.md +84 -0
  585. package/skills/canary-watch/SKILL.md +93 -0
  586. package/skills/carrier-relationship-management/SKILL.md +212 -0
  587. package/skills/ci-cd-and-automation/SKILL.md +71 -0
  588. package/skills/claude-api/SKILL.md +337 -0
  589. package/skills/claude-devfleet/SKILL.md +103 -0
  590. package/skills/click-path-audit/SKILL.md +244 -0
  591. package/skills/clickhouse-io/SKILL.md +439 -0
  592. package/skills/code-simplification/SKILL.md +74 -0
  593. package/skills/codebase-onboarding/SKILL.md +233 -0
  594. package/skills/coding-standards/SKILL.md +530 -0
  595. package/skills/compose-multiplatform-patterns/SKILL.md +299 -0
  596. package/skills/configure-ecc/SKILL.md +367 -0
  597. package/skills/content-engine/SKILL.md +88 -0
  598. package/skills/content-hash-cache-pattern/SKILL.md +161 -0
  599. package/skills/context-budget/SKILL.md +135 -0
  600. package/skills/context-engineering/SKILL.md +74 -0
  601. package/skills/continuous-agent-loop/SKILL.md +45 -0
  602. package/skills/continuous-learning/SKILL.md +119 -0
  603. package/skills/continuous-learning/config.json +18 -0
  604. package/skills/continuous-learning/evaluate-session.sh +69 -0
  605. package/skills/continuous-learning-v2/SKILL.md +365 -0
  606. package/skills/continuous-learning-v2/agents/observer-loop.sh +191 -0
  607. package/skills/continuous-learning-v2/agents/observer.md +198 -0
  608. package/skills/continuous-learning-v2/agents/session-guardian.sh +150 -0
  609. package/skills/continuous-learning-v2/agents/start-observer.sh +240 -0
  610. package/skills/continuous-learning-v2/config.json +8 -0
  611. package/skills/continuous-learning-v2/hooks/observe.sh +412 -0
  612. package/skills/continuous-learning-v2/scripts/detect-project.sh +228 -0
  613. package/skills/continuous-learning-v2/scripts/instinct-cli.py +1426 -0
  614. package/skills/continuous-learning-v2/scripts/test_parse_instinct.py +984 -0
  615. package/skills/cost-aware-llm-pipeline/SKILL.md +183 -0
  616. package/skills/cpp-coding-standards/SKILL.md +723 -0
  617. package/skills/cpp-testing/SKILL.md +324 -0
  618. package/skills/crosspost/SKILL.md +190 -0
  619. package/skills/customs-trade-compliance/SKILL.md +263 -0
  620. package/skills/data-scraper-agent/SKILL.md +764 -0
  621. package/skills/database-migrations/SKILL.md +429 -0
  622. package/skills/deep-research/SKILL.md +155 -0
  623. package/skills/deployment-patterns/SKILL.md +427 -0
  624. package/skills/deprecation-and-migration/SKILL.md +75 -0
  625. package/skills/design-system/SKILL.md +76 -0
  626. package/skills/django-patterns/SKILL.md +734 -0
  627. package/skills/django-security/SKILL.md +593 -0
  628. package/skills/django-tdd/SKILL.md +729 -0
  629. package/skills/django-verification/SKILL.md +469 -0
  630. package/skills/dmux-workflows/SKILL.md +191 -0
  631. package/skills/docker-patterns/SKILL.md +364 -0
  632. package/skills/documentation-and-adrs/SKILL.md +75 -0
  633. package/skills/documentation-lookup/SKILL.md +90 -0
  634. package/skills/e2e-testing/SKILL.md +326 -0
  635. package/skills/energy-procurement/SKILL.md +228 -0
  636. package/skills/enterprise-agent-ops/SKILL.md +50 -0
  637. package/skills/eval-harness/SKILL.md +270 -0
  638. package/skills/exa-search/SKILL.md +103 -0
  639. package/skills/fal-ai-media/SKILL.md +284 -0
  640. package/skills/flutter-dart-code-review/SKILL.md +435 -0
  641. package/skills/foundation-models-on-device/SKILL.md +243 -0
  642. package/skills/frontend-patterns/SKILL.md +642 -0
  643. package/skills/frontend-slides/SKILL.md +184 -0
  644. package/skills/frontend-slides/STYLE_PRESETS.md +330 -0
  645. package/skills/frontend-ui-engineering/SKILL.md +68 -0
  646. package/skills/git-workflow-and-versioning/SKILL.md +75 -0
  647. package/skills/golang-patterns/SKILL.md +674 -0
  648. package/skills/golang-testing/SKILL.md +720 -0
  649. package/skills/idea-refine/SKILL.md +84 -0
  650. package/skills/incremental-implementation/SKILL.md +86 -0
  651. package/skills/inventory-demand-planning/SKILL.md +247 -0
  652. package/skills/investor-materials/SKILL.md +96 -0
  653. package/skills/investor-outreach/SKILL.md +76 -0
  654. package/skills/iterative-retrieval/SKILL.md +211 -0
  655. package/skills/java-coding-standards/SKILL.md +147 -0
  656. package/skills/jpa-patterns/SKILL.md +151 -0
  657. package/skills/kotlin-coroutines-flows/SKILL.md +284 -0
  658. package/skills/kotlin-exposed-patterns/SKILL.md +719 -0
  659. package/skills/kotlin-ktor-patterns/SKILL.md +689 -0
  660. package/skills/kotlin-patterns/SKILL.md +711 -0
  661. package/skills/kotlin-testing/SKILL.md +824 -0
  662. package/skills/laravel-patterns/SKILL.md +415 -0
  663. package/skills/laravel-security/SKILL.md +285 -0
  664. package/skills/laravel-tdd/SKILL.md +283 -0
  665. package/skills/laravel-verification/SKILL.md +179 -0
  666. package/skills/liquid-glass-design/SKILL.md +279 -0
  667. package/skills/logistics-exception-management/SKILL.md +222 -0
  668. package/skills/market-research/SKILL.md +75 -0
  669. package/skills/mcp-server-patterns/SKILL.md +67 -0
  670. package/skills/nanoclaw-repl/SKILL.md +33 -0
  671. package/skills/nextjs-turbopack/SKILL.md +44 -0
  672. package/skills/nutrient-document-processing/SKILL.md +167 -0
  673. package/skills/nuxt4-patterns/SKILL.md +100 -0
  674. package/skills/performance-optimization/SKILL.md +77 -0
  675. package/skills/perl-patterns/SKILL.md +504 -0
  676. package/skills/perl-security/SKILL.md +503 -0
  677. package/skills/perl-testing/SKILL.md +475 -0
  678. package/skills/plankton-code-quality/SKILL.md +236 -0
  679. package/skills/postgres-patterns/SKILL.md +147 -0
  680. package/skills/product-lens/SKILL.md +79 -0
  681. package/skills/production-scheduling/SKILL.md +238 -0
  682. package/skills/project-guidelines-example/SKILL.md +349 -0
  683. package/skills/prompt-optimizer/SKILL.md +397 -0
  684. package/skills/python-patterns/SKILL.md +750 -0
  685. package/skills/python-testing/SKILL.md +816 -0
  686. package/skills/pytorch-patterns/SKILL.md +396 -0
  687. package/skills/quality-nonconformance/SKILL.md +260 -0
  688. package/skills/ralphinho-rfc-pipeline/SKILL.md +67 -0
  689. package/skills/regex-vs-llm-structured-text/SKILL.md +220 -0
  690. package/skills/returns-reverse-logistics/SKILL.md +240 -0
  691. package/skills/rules-distill/SKILL.md +264 -0
  692. package/skills/rules-distill/scripts/scan-rules.sh +58 -0
  693. package/skills/rules-distill/scripts/scan-skills.sh +129 -0
  694. package/skills/rust-patterns/SKILL.md +499 -0
  695. package/skills/rust-testing/SKILL.md +500 -0
  696. package/skills/safety-guard/SKILL.md +69 -0
  697. package/skills/santa-method/SKILL.md +306 -0
  698. package/skills/search-first/SKILL.md +161 -0
  699. package/skills/security-and-hardening/SKILL.md +70 -0
  700. package/skills/security-review/SKILL.md +495 -0
  701. package/skills/security-review/cloud-infrastructure-security.md +361 -0
  702. package/skills/security-scan/SKILL.md +165 -0
  703. package/skills/skill-comply/SKILL.md +58 -0
  704. package/skills/skill-comply/fixtures/compliant_trace.jsonl +5 -0
  705. package/skills/skill-comply/fixtures/noncompliant_trace.jsonl +3 -0
  706. package/skills/skill-comply/fixtures/tdd_spec.yaml +44 -0
  707. package/skills/skill-comply/prompts/classifier.md +24 -0
  708. package/skills/skill-comply/prompts/scenario_generator.md +62 -0
  709. package/skills/skill-comply/prompts/spec_generator.md +42 -0
  710. package/skills/skill-comply/pyproject.toml +15 -0
  711. package/skills/skill-comply/scripts/__init__.py +0 -0
  712. package/skills/skill-comply/scripts/classifier.py +85 -0
  713. package/skills/skill-comply/scripts/grader.py +122 -0
  714. package/skills/skill-comply/scripts/parser.py +107 -0
  715. package/skills/skill-comply/scripts/report.py +170 -0
  716. package/skills/skill-comply/scripts/run.py +127 -0
  717. package/skills/skill-comply/scripts/runner.py +161 -0
  718. package/skills/skill-comply/scripts/scenario_generator.py +70 -0
  719. package/skills/skill-comply/scripts/spec_generator.py +72 -0
  720. package/skills/skill-comply/scripts/utils.py +13 -0
  721. package/skills/skill-comply/tests/test_grader.py +137 -0
  722. package/skills/skill-comply/tests/test_parser.py +90 -0
  723. package/skills/skill-quality-review/SKILL.md +102 -0
  724. package/skills/skill-quality-review/references/review-rubric.md +112 -0
  725. package/skills/skill-stocktake/SKILL.md +197 -0
  726. package/skills/skill-stocktake/scripts/quick-diff.sh +87 -0
  727. package/skills/skill-stocktake/scripts/save-results.sh +56 -0
  728. package/skills/skill-stocktake/scripts/scan.sh +170 -0
  729. package/skills/springboot-patterns/SKILL.md +314 -0
  730. package/skills/springboot-security/SKILL.md +272 -0
  731. package/skills/springboot-tdd/SKILL.md +158 -0
  732. package/skills/springboot-verification/SKILL.md +231 -0
  733. package/skills/strategic-compact/SKILL.md +131 -0
  734. package/skills/strategic-compact/suggest-compact.sh +54 -0
  735. package/skills/swift-actor-persistence/SKILL.md +143 -0
  736. package/skills/swift-concurrency-6-2/SKILL.md +216 -0
  737. package/skills/swift-protocol-di-testing/SKILL.md +190 -0
  738. package/skills/swiftui-patterns/SKILL.md +259 -0
  739. package/skills/tdd-workflow/SKILL.md +145 -0
  740. package/skills/team-builder/SKILL.md +161 -0
  741. package/skills/using-aw-skills/SKILL.md +290 -0
  742. package/skills/using-aw-skills/evals/skill-trigger-cases.tsv +25 -0
  743. package/skills/using-aw-skills/evals/test-skill-triggers.sh +171 -0
  744. package/skills/using-aw-skills/hooks/hooks.json +9 -0
  745. package/skills/using-aw-skills/hooks/session-start.sh +188 -0
  746. package/skills/using-platform-skills/SKILL.md +163 -0
  747. package/skills/using-platform-skills/evals/platform-selection-cases.json +52 -0
  748. package/skills/verification-loop/SKILL.md +126 -0
  749. package/skills/video-editing/SKILL.md +310 -0
  750. package/skills/videodb/SKILL.md +374 -0
  751. package/skills/videodb/reference/api-reference.md +550 -0
  752. package/skills/videodb/reference/capture-reference.md +407 -0
  753. package/skills/videodb/reference/capture.md +101 -0
  754. package/skills/videodb/reference/editor.md +443 -0
  755. package/skills/videodb/reference/generative.md +331 -0
  756. package/skills/videodb/reference/rtstream-reference.md +564 -0
  757. package/skills/videodb/reference/rtstream.md +65 -0
  758. package/skills/videodb/reference/search.md +230 -0
  759. package/skills/videodb/reference/streaming.md +406 -0
  760. package/skills/videodb/reference/use-cases.md +118 -0
  761. package/skills/videodb/scripts/ws_listener.py +282 -0
  762. package/skills/visa-doc-translate/README.md +86 -0
  763. package/skills/visa-doc-translate/SKILL.md +117 -0
  764. package/skills/x-api/SKILL.md +208 -0
@@ -0,0 +1,69 @@
1
+ #!/bin/bash
2
+ # Continuous Learning - Session Evaluator
3
+ # Runs on Stop hook to extract reusable patterns from Claude Code sessions
4
+ #
5
+ # Why Stop hook instead of UserPromptSubmit:
6
+ # - Stop runs once at session end (lightweight)
7
+ # - UserPromptSubmit runs every message (heavy, adds latency)
8
+ #
9
+ # Hook config (in ~/.claude/settings.json):
10
+ # {
11
+ # "hooks": {
12
+ # "Stop": [{
13
+ # "matcher": "*",
14
+ # "hooks": [{
15
+ # "type": "command",
16
+ # "command": "~/.claude/skills/continuous-learning/evaluate-session.sh"
17
+ # }]
18
+ # }]
19
+ # }
20
+ # }
21
+ #
22
+ # Patterns to detect: error_resolution, debugging_techniques, workarounds, project_specific
23
+ # Patterns to ignore: simple_typos, one_time_fixes, external_api_issues
24
+ # Extracted skills saved to: ~/.claude/skills/learned/
25
+
26
+ set -e
27
+
28
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
29
+ CONFIG_FILE="$SCRIPT_DIR/config.json"
30
+ LEARNED_SKILLS_PATH="${HOME}/.claude/skills/learned"
31
+ MIN_SESSION_LENGTH=10
32
+
33
+ # Load config if exists
34
+ if [ -f "$CONFIG_FILE" ]; then
35
+ if ! command -v jq &>/dev/null; then
36
+ echo "[ContinuousLearning] jq is required to parse config.json but not installed, using defaults" >&2
37
+ else
38
+ MIN_SESSION_LENGTH=$(jq -r '.min_session_length // 10' "$CONFIG_FILE")
39
+ LEARNED_SKILLS_PATH=$(jq -r '.learned_skills_path // "~/.claude/skills/learned/"' "$CONFIG_FILE" | sed "s|~|$HOME|")
40
+ fi
41
+ fi
42
+
43
+ # Ensure learned skills directory exists
44
+ mkdir -p "$LEARNED_SKILLS_PATH"
45
+
46
+ # Get transcript path from stdin JSON (Claude Code hook input)
47
+ # Falls back to env var for backwards compatibility
48
+ stdin_data=$(cat)
49
+ transcript_path=$(echo "$stdin_data" | grep -o '"transcript_path":"[^"]*"' | head -1 | cut -d'"' -f4)
50
+ if [ -z "$transcript_path" ]; then
51
+ transcript_path="${CLAUDE_TRANSCRIPT_PATH:-}"
52
+ fi
53
+
54
+ if [ -z "$transcript_path" ] || [ ! -f "$transcript_path" ]; then
55
+ exit 0
56
+ fi
57
+
58
+ # Count messages in session
59
+ message_count=$(grep -c '"type":"user"' "$transcript_path" 2>/dev/null || echo "0")
60
+
61
+ # Skip short sessions
62
+ if [ "$message_count" -lt "$MIN_SESSION_LENGTH" ]; then
63
+ echo "[ContinuousLearning] Session too short ($message_count messages), skipping" >&2
64
+ exit 0
65
+ fi
66
+
67
+ # Signal to Claude that session should be evaluated for extractable patterns
68
+ echo "[ContinuousLearning] Session has $message_count messages - evaluate for extractable patterns" >&2
69
+ echo "[ContinuousLearning] Save learned skills to: $LEARNED_SKILLS_PATH" >&2
@@ -0,0 +1,365 @@
1
+ ---
2
+ name: continuous-learning-v2
3
+ description: Instinct-based learning system that observes sessions via hooks, creates atomic instincts with confidence scoring, and evolves them into skills/commands/agents. v2.1 adds project-scoped instincts to prevent cross-project contamination.
4
+ origin: ECC
5
+ version: 2.1.0
6
+ ---
7
+
8
+ # Continuous Learning v2.1 - Instinct
9
+ -Based Architecture
10
+
11
+ An advanced learning system that turns your Claude Code sessions into reusable knowledge through atomic "instincts" - small learned behaviors with confidence scoring.
12
+
13
+ **v2.1** adds **project-scoped instincts** — React patterns stay in your React project, Python conventions stay in your Python project, and universal patterns (like "always validate input") are shared globally.
14
+
15
+ ## When to Activate
16
+
17
+ - Setting up automatic learning from Claude Code sessions
18
+ - Configuring instinct-based behavior extraction via hooks
19
+ - Tuning confidence thresholds for learned behaviors
20
+ - Reviewing, exporting, or importing instinct libraries
21
+ - Evolving instincts into full skills, commands, or agents
22
+ - Managing project-scoped vs global instincts
23
+ - Promoting instincts from project to global scope
24
+
25
+ ## What's New in v2.1
26
+
27
+ | Feature | v2.0 | v2.1 |
28
+ |---------|------|------|
29
+ | Storage | Global (~/.claude/homunculus/) | Project-scoped (projects/<hash>/) |
30
+ | Scope | All instincts apply everywhere | Project-scoped + global |
31
+ | Detection | None | git remote URL / repo path |
32
+ | Promotion | N/A | Project → global when seen in 2+ projects |
33
+ | Commands | 4 (status/evolve/export/import) | 6 (+promote/projects) |
34
+ | Cross-project | Contamination risk | Isolated by default |
35
+
36
+ ## What's New in v2 (vs v1)
37
+
38
+ | Feature | v1 | v2 |
39
+ |---------|----|----|
40
+ | Observation | Stop hook (session end) | PreToolUse/PostToolUse (100% reliable) |
41
+ | Analysis | Main context | Background agent (Haiku) |
42
+ | Granularity | Full skills | Atomic "instincts" |
43
+ | Confidence | None | 0.3-0.9 weighted |
44
+ | Evolution | Direct to skill | Instincts -> cluster -> skill/command/agent |
45
+ | Sharing | None | Export/import instincts |
46
+
47
+ ## The Instinct Model
48
+
49
+ An instinct is a small learned behavior:
50
+
51
+ ```yaml
52
+ ---
53
+ id: prefer-functional-style
54
+ trigger: "when writing new functions"
55
+ confidence: 0.7
56
+ domain: "code-style"
57
+ source: "session-observation"
58
+ scope: project
59
+ project_id: "a1b2c3d4e5f6"
60
+ project_name: "my-react-app"
61
+ ---
62
+
63
+ # Prefer Functional Style
64
+
65
+ ## Action
66
+ Use functional patterns over classes when appropriate.
67
+
68
+ ## Evidence
69
+ - Observed 5 instances of functional pattern preference
70
+ - User corrected class-based approach to functional on 2025-01-15
71
+ ```
72
+
73
+ **Properties:**
74
+ - **Atomic** -- one trigger, one action
75
+ - **Confidence-weighted** -- 0.3 = tentative, 0.9 = near certain
76
+ - **Domain-tagged** -- code-style, testing, git, debugging, workflow, etc.
77
+ - **Evidence-backed** -- tracks what observations created it
78
+ - **Scope-aware** -- `project` (default) or `global`
79
+
80
+ ## How It Works
81
+
82
+ ```
83
+ Session Activity (in a git repo)
84
+ |
85
+ | Hooks capture prompts + tool use (100% reliable)
86
+ | + detect project context (git remote / repo path)
87
+ v
88
+ +---------------------------------------------+
89
+ | projects/<project-hash>/observations.jsonl |
90
+ | (prompts, tool calls, outcomes, project) |
91
+ +---------------------------------------------+
92
+ |
93
+ | Observer agent reads (background, Haiku)
94
+ v
95
+ +---------------------------------------------+
96
+ | PATTERN DETECTION |
97
+ | * User corrections -> instinct |
98
+ | * Error resolutions -> instinct |
99
+ | * Repeated workflows -> instinct |
100
+ | * Scope decision: project or global? |
101
+ +---------------------------------------------+
102
+ |
103
+ | Creates/updates
104
+ v
105
+ +---------------------------------------------+
106
+ | projects/<project-hash>/instincts/personal/ |
107
+ | * prefer-functional.yaml (0.7) [project] |
108
+ | * use-react-hooks.yaml (0.9) [project] |
109
+ +---------------------------------------------+
110
+ | instincts/personal/ (GLOBAL) |
111
+ | * always-validate-input.yaml (0.85) [global]|
112
+ | * grep-before-edit.yaml (0.6) [global] |
113
+ +---------------------------------------------+
114
+ |
115
+ | /evolve clusters + /promote
116
+ v
117
+ +---------------------------------------------+
118
+ | projects/<hash>/evolved/ (project-scoped) |
119
+ | evolved/ (global) |
120
+ | * commands/new-feature.md |
121
+ | * skills/testing-workflow.md |
122
+ | * agents/refactor-specialist.md |
123
+ +---------------------------------------------+
124
+ ```
125
+
126
+ ## Project Detection
127
+
128
+ The system automatically detects your current project:
129
+
130
+ 1. **`CLAUDE_PROJECT_DIR` env var** (highest priority)
131
+ 2. **`git remote get-url origin`** -- hashed to create a portable project ID (same repo on different machines gets the same ID)
132
+ 3. **`git rev-parse --show-toplevel`** -- fallback using repo path (machine-specific)
133
+ 4. **Global fallback** -- if no project is detected, instincts go to global scope
134
+
135
+ Each project gets a 12-character hash ID (e.g., `a1b2c3d4e5f6`). A registry file at `~/.claude/homunculus/projects.json` maps IDs to human-readable names.
136
+
137
+ ## Quick Start
138
+
139
+ ### 1. Enable Observation Hooks
140
+
141
+ Add to your `~/.claude/settings.json`.
142
+
143
+ **If installed as a plugin** (recommended):
144
+
145
+ ```json
146
+ {
147
+ "hooks": {
148
+ "PreToolUse": [{
149
+ "matcher": "*",
150
+ "hooks": [{
151
+ "type": "command",
152
+ "command": "${CLAUDE_PLUGIN_ROOT}/skills/continuous-learning-v2/hooks/observe.sh"
153
+ }]
154
+ }],
155
+ "PostToolUse": [{
156
+ "matcher": "*",
157
+ "hooks": [{
158
+ "type": "command",
159
+ "command": "${CLAUDE_PLUGIN_ROOT}/skills/continuous-learning-v2/hooks/observe.sh"
160
+ }]
161
+ }]
162
+ }
163
+ }
164
+ ```
165
+
166
+ **If installed manually** to `~/.claude/skills`:
167
+
168
+ ```json
169
+ {
170
+ "hooks": {
171
+ "PreToolUse": [{
172
+ "matcher": "*",
173
+ "hooks": [{
174
+ "type": "command",
175
+ "command": "~/.claude/skills/continuous-learning-v2/hooks/observe.sh"
176
+ }]
177
+ }],
178
+ "PostToolUse": [{
179
+ "matcher": "*",
180
+ "hooks": [{
181
+ "type": "command",
182
+ "command": "~/.claude/skills/continuous-learning-v2/hooks/observe.sh"
183
+ }]
184
+ }]
185
+ }
186
+ }
187
+ ```
188
+
189
+ ### 2. Initialize Directory Structure
190
+
191
+ The system creates directories automatically on first use, but you can also create them manually:
192
+
193
+ ```bash
194
+ # Global directories
195
+ mkdir -p ~/.claude/homunculus/{instincts/{personal,inherited},evolved/{agents,skills,commands},projects}
196
+
197
+ # Project directories are auto-created when the hook first runs in a git repo
198
+ ```
199
+
200
+ ### 3. Use the Instinct Commands
201
+
202
+ ```bash
203
+ /instinct-status # Show learned instincts (project + global)
204
+ /evolve # Cluster related instincts into skills/commands
205
+ /instinct-export # Export instincts to file
206
+ /instinct-import # Import instincts from others
207
+ /promote # Promote project instincts to global scope
208
+ /projects # List all known projects and their instinct counts
209
+ ```
210
+
211
+ ## Commands
212
+
213
+ | Command | Description |
214
+ |---------|-------------|
215
+ | `/instinct-status` | Show all instincts (project-scoped + global) with confidence |
216
+ | `/evolve` | Cluster related instincts into skills/commands, suggest promotions |
217
+ | `/instinct-export` | Export instincts (filterable by scope/domain) |
218
+ | `/instinct-import <file>` | Import instincts with scope control |
219
+ | `/promote [id]` | Promote project instincts to global scope |
220
+ | `/projects` | List all known projects and their instinct counts |
221
+
222
+ ## Configuration
223
+
224
+ Edit `config.json` to control the background observer:
225
+
226
+ ```json
227
+ {
228
+ "version": "2.1",
229
+ "observer": {
230
+ "enabled": false,
231
+ "run_interval_minutes": 5,
232
+ "min_observations_to_analyze": 20
233
+ }
234
+ }
235
+ ```
236
+
237
+ | Key | Default | Description |
238
+ |-----|---------|-------------|
239
+ | `observer.enabled` | `false` | Enable the background observer agent |
240
+ | `observer.run_interval_minutes` | `5` | How often the observer analyzes observations |
241
+ | `observer.min_observations_to_analyze` | `20` | Minimum observations before analysis runs |
242
+
243
+ Other behavior (observation capture, instinct thresholds, project scoping, promotion criteria) is configured via code defaults in `instinct-cli.py` and `observe.sh`.
244
+
245
+ ## File Structure
246
+
247
+ ```
248
+ ~/.claude/homunculus/
249
+ +-- identity.json # Your profile, technical level
250
+ +-- projects.json # Registry: project hash -> name/path/remote
251
+ +-- observations.jsonl # Global observations (fallback)
252
+ +-- instincts/
253
+ | +-- personal/ # Global auto-learned instincts
254
+ | +-- inherited/ # Global imported instincts
255
+ +-- evolved/
256
+ | +-- agents/ # Global generated agents
257
+ | +-- skills/ # Global generated skills
258
+ | +-- commands/ # Global generated commands
259
+ +-- projects/
260
+ +-- a1b2c3d4e5f6/ # Project hash (from git remote URL)
261
+ | +-- project.json # Per-project metadata mirror (id/name/root/remote)
262
+ | +-- observations.jsonl
263
+ | +-- observations.archive/
264
+ | +-- instincts/
265
+ | | +-- personal/ # Project-specific auto-learned
266
+ | | +-- inherited/ # Project-specific imported
267
+ | +-- evolved/
268
+ | +-- skills/
269
+ | +-- commands/
270
+ | +-- agents/
271
+ +-- f6e5d4c3b2a1/ # Another project
272
+ +-- ...
273
+ ```
274
+
275
+ ## Scope Decision Guide
276
+
277
+ | Pattern Type | Scope | Examples |
278
+ |-------------|-------|---------|
279
+ | Language/framework conventions | **project** | "Use React hooks", "Follow Django REST patterns" |
280
+ | File structure preferences | **project** | "Tests in `__tests__`/", "Components in src/components/" |
281
+ | Code style | **project** | "Use functional style", "Prefer dataclasses" |
282
+ | Error handling strategies | **project** | "Use Result type for errors" |
283
+ | Security practices | **global** | "Validate user input", "Sanitize SQL" |
284
+ | General best practices | **global** | "Write tests first", "Always handle errors" |
285
+ | Tool workflow preferences | **global** | "Grep before Edit", "Read before Write" |
286
+ | Git practices | **global** | "Conventional commits", "Small focused commits" |
287
+
288
+ ## Instinct Promotion (Project -> Global)
289
+
290
+ When the same instinct appears in multiple projects with high confidence, it's a candidate for promotion to global scope.
291
+
292
+ **Auto-promotion criteria:**
293
+ - Same instinct ID in 2+ projects
294
+ - Average confidence >= 0.8
295
+
296
+ **How to promote:**
297
+
298
+ ```bash
299
+ # Promote a specific instinct
300
+ python3 instinct-cli.py promote prefer-explicit-errors
301
+
302
+ # Auto-promote all qualifying instincts
303
+ python3 instinct-cli.py promote
304
+
305
+ # Preview without changes
306
+ python3 instinct-cli.py promote --dry-run
307
+ ```
308
+
309
+ The `/evolve` command also suggests promotion candidates.
310
+
311
+ ## Confidence Scoring
312
+
313
+ Confidence evolves over time:
314
+
315
+ | Score | Meaning | Behavior |
316
+ |-------|---------|----------|
317
+ | 0.3 | Tentative | Suggested but not enforced |
318
+ | 0.5 | Moderate | Applied when relevant |
319
+ | 0.7 | Strong | Auto-approved for application |
320
+ | 0.9 | Near-certain | Core behavior |
321
+
322
+ **Confidence increases** when:
323
+ - Pattern is repeatedly observed
324
+ - User doesn't correct the suggested behavior
325
+ - Similar instincts from other sources agree
326
+
327
+ **Confidence decreases** when:
328
+ - User explicitly corrects the behavior
329
+ - Pattern isn't observed for extended periods
330
+ - Contradicting evidence appears
331
+
332
+ ## Why Hooks vs Skills for Observation?
333
+
334
+ > "v1 relied on skills to observe. Skills are probabilistic -- they fire ~50-80% of the time based on Claude's judgment."
335
+
336
+ Hooks fire **100% of the time**, deterministically. This means:
337
+ - Every tool call is observed
338
+ - No patterns are missed
339
+ - Learning is comprehensive
340
+
341
+ ## Backward Compatibility
342
+
343
+ v2.1 is fully compatible with v2.0 and v1:
344
+ - Existing global instincts in `~/.claude/homunculus/instincts/` still work as global instincts
345
+ - Existing `~/.claude/skills/learned/` skills from v1 still work
346
+ - Stop hook still runs (but now also feeds into v2)
347
+ - Gradual migration: run both in parallel
348
+
349
+ ## Privacy
350
+
351
+ - Observations stay **local** on your machine
352
+ - Project-scoped instincts are isolated per project
353
+ - Only **instincts** (patterns) can be exported — not raw observations
354
+ - No actual code or conversation content is shared
355
+ - You control what gets exported and promoted
356
+
357
+ ## Related
358
+
359
+ - [ECC-Tools GitHub App](https://github.com/apps/ecc-tools) - Generate instincts from repo history
360
+ - Homunculus - Community project that inspired the v2 instinct-based architecture (atomic observations, confidence scoring, instinct evolution pipeline)
361
+ - [The Longform Guide](https://x.com/affaanmustafa/status/2014040193557471352) - Continuous learning section
362
+
363
+ ---
364
+
365
+ *Instinct-based learning: teaching Claude your patterns, one project at a time.*
@@ -0,0 +1,191 @@
1
+ #!/usr/bin/env bash
2
+ # Continuous Learning v2 - Observer background loop
3
+ #
4
+ # Fix for #521: Added re-entrancy guard, cooldown throttle, and
5
+ # tail-based sampling to prevent memory explosion from runaway
6
+ # parallel Claude analysis processes.
7
+
8
+ set +e
9
+ unset CLAUDECODE
10
+
11
+ SLEEP_PID=""
12
+ USR1_FIRED=0
13
+ ANALYZING=0
14
+ LAST_ANALYSIS_EPOCH=0
15
+ # Minimum seconds between analyses (prevents rapid re-triggering)
16
+ ANALYSIS_COOLDOWN="${ECC_OBSERVER_ANALYSIS_COOLDOWN:-60}"
17
+
18
+ cleanup() {
19
+ [ -n "$SLEEP_PID" ] && kill "$SLEEP_PID" 2>/dev/null
20
+ if [ -f "$PID_FILE" ] && [ "$(cat "$PID_FILE" 2>/dev/null)" = "$$" ]; then
21
+ rm -f "$PID_FILE"
22
+ fi
23
+ exit 0
24
+ }
25
+ trap cleanup TERM INT
26
+
27
+ analyze_observations() {
28
+ if [ ! -f "$OBSERVATIONS_FILE" ]; then
29
+ return
30
+ fi
31
+
32
+ obs_count=$(wc -l < "$OBSERVATIONS_FILE" 2>/dev/null || echo 0)
33
+ if [ "$obs_count" -lt "$MIN_OBSERVATIONS" ]; then
34
+ return
35
+ fi
36
+
37
+ echo "[$(date)] Analyzing $obs_count observations for project ${PROJECT_NAME}..." >> "$LOG_FILE"
38
+
39
+ if [ "${CLV2_IS_WINDOWS:-false}" = "true" ] && [ "${ECC_OBSERVER_ALLOW_WINDOWS:-false}" != "true" ]; then
40
+ echo "[$(date)] Skipping claude analysis on Windows due to known non-interactive hang issue (#295). Set ECC_OBSERVER_ALLOW_WINDOWS=true to override." >> "$LOG_FILE"
41
+ return
42
+ fi
43
+
44
+ if ! command -v claude >/dev/null 2>&1; then
45
+ echo "[$(date)] claude CLI not found, skipping analysis" >> "$LOG_FILE"
46
+ return
47
+ fi
48
+
49
+ # session-guardian: gate observer cycle (active hours, cooldown, idle detection)
50
+ if ! bash "$(dirname "$0")/session-guardian.sh"; then
51
+ echo "[$(date)] Observer cycle skipped by session-guardian" >> "$LOG_FILE"
52
+ return
53
+ fi
54
+
55
+ # Sample recent observations instead of loading the entire file (#521).
56
+ # This prevents multi-MB payloads from being passed to the LLM.
57
+ MAX_ANALYSIS_LINES="${ECC_OBSERVER_MAX_ANALYSIS_LINES:-500}"
58
+ analysis_file="$(mktemp "${TMPDIR:-/tmp}/ecc-observer-analysis.XXXXXX.jsonl")"
59
+ tail -n "$MAX_ANALYSIS_LINES" "$OBSERVATIONS_FILE" > "$analysis_file"
60
+ analysis_count=$(wc -l < "$analysis_file" 2>/dev/null || echo 0)
61
+ echo "[$(date)] Using last $analysis_count of $obs_count observations for analysis" >> "$LOG_FILE"
62
+
63
+ prompt_file="$(mktemp "${TMPDIR:-/tmp}/ecc-observer-prompt.XXXXXX")"
64
+ cat > "$prompt_file" <<PROMPT
65
+ Read ${analysis_file} and identify patterns for the project ${PROJECT_NAME} (user corrections, error resolutions, repeated workflows, tool preferences).
66
+ If you find 3+ occurrences of the same pattern, create an instinct file in ${INSTINCTS_DIR}/<id>.md.
67
+
68
+ CRITICAL: Every instinct file MUST use this exact format:
69
+
70
+ ---
71
+ id: kebab-case-name
72
+ trigger: when <specific condition>
73
+ confidence: <0.3-0.85 based on frequency: 3-5 times=0.5, 6-10=0.7, 11+=0.85>
74
+ domain: <one of: code-style, testing, git, debugging, workflow, file-patterns>
75
+ source: session-observation
76
+ scope: project
77
+ project_id: ${PROJECT_ID}
78
+ project_name: ${PROJECT_NAME}
79
+ ---
80
+
81
+ # Title
82
+
83
+ ## Action
84
+ <what to do, one clear sentence>
85
+
86
+ ## Evidence
87
+ - Observed N times in session <id>
88
+ - Pattern: <description>
89
+ - Last observed: <date>
90
+
91
+ Rules:
92
+ - Be conservative, only clear patterns with 3+ observations
93
+ - Use narrow, specific triggers
94
+ - Never include actual code snippets, only describe patterns
95
+ - If a similar instinct already exists in ${INSTINCTS_DIR}/, update it instead of creating a duplicate
96
+ - The YAML frontmatter (between --- markers) with id field is MANDATORY
97
+ - If a pattern seems universal (not project-specific), set scope to global instead of project
98
+ - Examples of global patterns: always validate user input, prefer explicit error handling
99
+ - Examples of project patterns: use React functional components, follow Django REST framework conventions
100
+ PROMPT
101
+
102
+ timeout_seconds="${ECC_OBSERVER_TIMEOUT_SECONDS:-120}"
103
+ max_turns="${ECC_OBSERVER_MAX_TURNS:-10}"
104
+ exit_code=0
105
+
106
+ case "$max_turns" in
107
+ ''|*[!0-9]*)
108
+ max_turns=10
109
+ ;;
110
+ esac
111
+
112
+ if [ "$max_turns" -lt 4 ]; then
113
+ max_turns=10
114
+ fi
115
+
116
+ # Prevent observe.sh from recording this automated Haiku session as observations
117
+ ECC_SKIP_OBSERVE=1 ECC_HOOK_PROFILE=minimal claude --model haiku --max-turns "$max_turns" --print \
118
+ --allowedTools "Read,Write" \
119
+ < "$prompt_file" >> "$LOG_FILE" 2>&1 &
120
+ claude_pid=$!
121
+
122
+ (
123
+ sleep "$timeout_seconds"
124
+ if kill -0 "$claude_pid" 2>/dev/null; then
125
+ echo "[$(date)] Claude analysis timed out after ${timeout_seconds}s; terminating process" >> "$LOG_FILE"
126
+ kill "$claude_pid" 2>/dev/null || true
127
+ fi
128
+ ) &
129
+ watchdog_pid=$!
130
+
131
+ wait "$claude_pid"
132
+ exit_code=$?
133
+ kill "$watchdog_pid" 2>/dev/null || true
134
+ rm -f "$prompt_file" "$analysis_file"
135
+
136
+ if [ "$exit_code" -ne 0 ]; then
137
+ echo "[$(date)] Claude analysis failed (exit $exit_code)" >> "$LOG_FILE"
138
+ fi
139
+
140
+ if [ -f "$OBSERVATIONS_FILE" ]; then
141
+ archive_dir="${PROJECT_DIR}/observations.archive"
142
+ mkdir -p "$archive_dir"
143
+ mv "$OBSERVATIONS_FILE" "$archive_dir/processed-$(date +%Y%m%d-%H%M%S)-$$.jsonl" 2>/dev/null || true
144
+ fi
145
+ }
146
+
147
+ on_usr1() {
148
+ [ -n "$SLEEP_PID" ] && kill "$SLEEP_PID" 2>/dev/null
149
+ SLEEP_PID=""
150
+ USR1_FIRED=1
151
+
152
+ # Re-entrancy guard: skip if analysis is already running (#521)
153
+ if [ "$ANALYZING" -eq 1 ]; then
154
+ echo "[$(date)] Analysis already in progress, skipping signal" >> "$LOG_FILE"
155
+ return
156
+ fi
157
+
158
+ # Cooldown: skip if last analysis was too recent (#521)
159
+ now_epoch=$(date +%s)
160
+ elapsed=$(( now_epoch - LAST_ANALYSIS_EPOCH ))
161
+ if [ "$elapsed" -lt "$ANALYSIS_COOLDOWN" ]; then
162
+ echo "[$(date)] Analysis cooldown active (${elapsed}s < ${ANALYSIS_COOLDOWN}s), skipping" >> "$LOG_FILE"
163
+ return
164
+ fi
165
+
166
+ ANALYZING=1
167
+ analyze_observations
168
+ LAST_ANALYSIS_EPOCH=$(date +%s)
169
+ ANALYZING=0
170
+ }
171
+ trap on_usr1 USR1
172
+
173
+ echo "$$" > "$PID_FILE"
174
+ echo "[$(date)] Observer started for ${PROJECT_NAME} (PID: $$)" >> "$LOG_FILE"
175
+
176
+ # Prune expired pending instincts before analysis
177
+ SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
178
+ "${CLV2_PYTHON_CMD:-python3}" "${SCRIPT_DIR}/../scripts/instinct-cli.py" prune --quiet >> "$LOG_FILE" 2>&1 || echo "[$(date)] Warning: instinct prune failed (non-fatal)" >> "$LOG_FILE"
179
+
180
+ while true; do
181
+ sleep "$OBSERVER_INTERVAL_SECONDS" &
182
+ SLEEP_PID=$!
183
+ wait "$SLEEP_PID" 2>/dev/null
184
+ SLEEP_PID=""
185
+
186
+ if [ "$USR1_FIRED" -eq 1 ]; then
187
+ USR1_FIRED=0
188
+ else
189
+ analyze_observations
190
+ fi
191
+ done