mega-brain-ai 1.3.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 (510) hide show
  1. package/.antigravity/README.md +46 -0
  2. package/.antigravity/rules/.gitkeep +0 -0
  3. package/.antigravity/rules/mega-brain.md +39 -0
  4. package/.claude/CLAUDE.md +172 -0
  5. package/.claude/agents.yaml +44 -0
  6. package/.claude/commands/agents.md +161 -0
  7. package/.claude/commands/ask.md +117 -0
  8. package/.claude/commands/benchmark.md +224 -0
  9. package/.claude/commands/chat.md +343 -0
  10. package/.claude/commands/compare.md +116 -0
  11. package/.claude/commands/conclave.md +196 -0
  12. package/.claude/commands/config.md +133 -0
  13. package/.claude/commands/create-agent.md +467 -0
  14. package/.claude/commands/debate.md +159 -0
  15. package/.claude/commands/documentation/create-architecture-documentation.md +175 -0
  16. package/.claude/commands/dossiers.md +180 -0
  17. package/.claude/commands/evolve.md +223 -0
  18. package/.claude/commands/extract-dna.md +172 -0
  19. package/.claude/commands/extract-knowledge.md +507 -0
  20. package/.claude/commands/gsd/add-phase.md +43 -0
  21. package/.claude/commands/gsd/add-tests.md +41 -0
  22. package/.claude/commands/gsd/add-todo.md +47 -0
  23. package/.claude/commands/gsd/audit-milestone.md +36 -0
  24. package/.claude/commands/gsd/check-todos.md +45 -0
  25. package/.claude/commands/gsd/cleanup.md +18 -0
  26. package/.claude/commands/gsd/complete-milestone.md +136 -0
  27. package/.claude/commands/gsd/debug.md +167 -0
  28. package/.claude/commands/gsd/discuss-phase.md +83 -0
  29. package/.claude/commands/gsd/execute-phase.md +41 -0
  30. package/.claude/commands/gsd/health.md +22 -0
  31. package/.claude/commands/gsd/help.md +22 -0
  32. package/.claude/commands/gsd/insert-phase.md +32 -0
  33. package/.claude/commands/gsd/join-discord.md +18 -0
  34. package/.claude/commands/gsd/list-phase-assumptions.md +46 -0
  35. package/.claude/commands/gsd/map-codebase.md +71 -0
  36. package/.claude/commands/gsd/new-milestone.md +44 -0
  37. package/.claude/commands/gsd/new-project.md +42 -0
  38. package/.claude/commands/gsd/pause-work.md +38 -0
  39. package/.claude/commands/gsd/plan-milestone-gaps.md +34 -0
  40. package/.claude/commands/gsd/plan-phase.md +45 -0
  41. package/.claude/commands/gsd/progress.md +24 -0
  42. package/.claude/commands/gsd/quick.md +41 -0
  43. package/.claude/commands/gsd/reapply-patches.md +110 -0
  44. package/.claude/commands/gsd/remove-phase.md +31 -0
  45. package/.claude/commands/gsd/research-phase.md +189 -0
  46. package/.claude/commands/gsd/resume-work.md +40 -0
  47. package/.claude/commands/gsd/set-profile.md +34 -0
  48. package/.claude/commands/gsd/settings.md +36 -0
  49. package/.claude/commands/gsd/update.md +37 -0
  50. package/.claude/commands/gsd/verify-work.md +38 -0
  51. package/.claude/commands/inbox.md +296 -0
  52. package/.claude/commands/ingest-empresa.md +191 -0
  53. package/.claude/commands/ingest.md +183 -0
  54. package/.claude/commands/jarvis-briefing.md +67 -0
  55. package/.claude/commands/jarvis-control.md +169 -0
  56. package/.claude/commands/jarvis-full.md +182 -0
  57. package/.claude/commands/jarvis.md +212 -0
  58. package/.claude/commands/ler-drive.md +212 -0
  59. package/.claude/commands/log.md +158 -0
  60. package/.claude/commands/loop.md +133 -0
  61. package/.claude/commands/loops.md +73 -0
  62. package/.claude/commands/mission-autopilot.md +538 -0
  63. package/.claude/commands/mission.md +353 -0
  64. package/.claude/commands/process-inbox.md +148 -0
  65. package/.claude/commands/process-jarvis.md +3036 -0
  66. package/.claude/commands/process-video.md +131 -0
  67. package/.claude/commands/rag-search.md +78 -0
  68. package/.claude/commands/resume.md +33 -0
  69. package/.claude/commands/save.md +38 -0
  70. package/.claude/commands/scan-inbox.md +125 -0
  71. package/.claude/commands/setup.md +99 -0
  72. package/.claude/commands/system-digest.md +243 -0
  73. package/.claude/commands/verify.md +182 -0
  74. package/.claude/commands/view-dna.md +169 -0
  75. package/.claude/get-shit-done/VERSION +1 -0
  76. package/.claude/get-shit-done/bin/gsd-tools.cjs +588 -0
  77. package/.claude/get-shit-done/bin/lib/commands.cjs +553 -0
  78. package/.claude/get-shit-done/bin/lib/config.cjs +162 -0
  79. package/.claude/get-shit-done/bin/lib/core.cjs +411 -0
  80. package/.claude/get-shit-done/bin/lib/frontmatter.cjs +299 -0
  81. package/.claude/get-shit-done/bin/lib/init.cjs +710 -0
  82. package/.claude/get-shit-done/bin/lib/milestone.cjs +216 -0
  83. package/.claude/get-shit-done/bin/lib/phase.cjs +871 -0
  84. package/.claude/get-shit-done/bin/lib/roadmap.cjs +298 -0
  85. package/.claude/get-shit-done/bin/lib/state.cjs +679 -0
  86. package/.claude/get-shit-done/bin/lib/template.cjs +222 -0
  87. package/.claude/get-shit-done/bin/lib/verify.cjs +773 -0
  88. package/.claude/get-shit-done/references/checkpoints.md +776 -0
  89. package/.claude/get-shit-done/references/continuation-format.md +249 -0
  90. package/.claude/get-shit-done/references/decimal-phase-calculation.md +65 -0
  91. package/.claude/get-shit-done/references/git-integration.md +248 -0
  92. package/.claude/get-shit-done/references/git-planning-commit.md +38 -0
  93. package/.claude/get-shit-done/references/model-profile-resolution.md +34 -0
  94. package/.claude/get-shit-done/references/model-profiles.md +92 -0
  95. package/.claude/get-shit-done/references/phase-argument-parsing.md +61 -0
  96. package/.claude/get-shit-done/references/planning-config.md +196 -0
  97. package/.claude/get-shit-done/references/questioning.md +145 -0
  98. package/.claude/get-shit-done/references/tdd.md +263 -0
  99. package/.claude/get-shit-done/references/ui-brand.md +160 -0
  100. package/.claude/get-shit-done/references/verification-patterns.md +612 -0
  101. package/.claude/get-shit-done/templates/DEBUG.md +164 -0
  102. package/.claude/get-shit-done/templates/UAT.md +247 -0
  103. package/.claude/get-shit-done/templates/VALIDATION.md +76 -0
  104. package/.claude/get-shit-done/templates/codebase/architecture.md +255 -0
  105. package/.claude/get-shit-done/templates/codebase/concerns.md +310 -0
  106. package/.claude/get-shit-done/templates/codebase/conventions.md +307 -0
  107. package/.claude/get-shit-done/templates/codebase/integrations.md +280 -0
  108. package/.claude/get-shit-done/templates/codebase/stack.md +186 -0
  109. package/.claude/get-shit-done/templates/codebase/structure.md +285 -0
  110. package/.claude/get-shit-done/templates/codebase/testing.md +480 -0
  111. package/.claude/get-shit-done/templates/config.json +37 -0
  112. package/.claude/get-shit-done/templates/context.md +283 -0
  113. package/.claude/get-shit-done/templates/continue-here.md +78 -0
  114. package/.claude/get-shit-done/templates/debug-subagent-prompt.md +91 -0
  115. package/.claude/get-shit-done/templates/discovery.md +146 -0
  116. package/.claude/get-shit-done/templates/milestone-archive.md +123 -0
  117. package/.claude/get-shit-done/templates/milestone.md +115 -0
  118. package/.claude/get-shit-done/templates/phase-prompt.md +569 -0
  119. package/.claude/get-shit-done/templates/planner-subagent-prompt.md +117 -0
  120. package/.claude/get-shit-done/templates/project.md +184 -0
  121. package/.claude/get-shit-done/templates/requirements.md +231 -0
  122. package/.claude/get-shit-done/templates/research-project/ARCHITECTURE.md +204 -0
  123. package/.claude/get-shit-done/templates/research-project/FEATURES.md +147 -0
  124. package/.claude/get-shit-done/templates/research-project/PITFALLS.md +200 -0
  125. package/.claude/get-shit-done/templates/research-project/STACK.md +120 -0
  126. package/.claude/get-shit-done/templates/research-project/SUMMARY.md +170 -0
  127. package/.claude/get-shit-done/templates/research.md +552 -0
  128. package/.claude/get-shit-done/templates/retrospective.md +54 -0
  129. package/.claude/get-shit-done/templates/roadmap.md +202 -0
  130. package/.claude/get-shit-done/templates/state.md +176 -0
  131. package/.claude/get-shit-done/templates/summary-complex.md +59 -0
  132. package/.claude/get-shit-done/templates/summary-minimal.md +41 -0
  133. package/.claude/get-shit-done/templates/summary-standard.md +48 -0
  134. package/.claude/get-shit-done/templates/summary.md +248 -0
  135. package/.claude/get-shit-done/templates/user-setup.md +311 -0
  136. package/.claude/get-shit-done/templates/verification-report.md +322 -0
  137. package/.claude/get-shit-done/workflows/add-phase.md +111 -0
  138. package/.claude/get-shit-done/workflows/add-tests.md +350 -0
  139. package/.claude/get-shit-done/workflows/add-todo.md +157 -0
  140. package/.claude/get-shit-done/workflows/audit-milestone.md +297 -0
  141. package/.claude/get-shit-done/workflows/check-todos.md +176 -0
  142. package/.claude/get-shit-done/workflows/cleanup.md +152 -0
  143. package/.claude/get-shit-done/workflows/complete-milestone.md +763 -0
  144. package/.claude/get-shit-done/workflows/diagnose-issues.md +219 -0
  145. package/.claude/get-shit-done/workflows/discovery-phase.md +289 -0
  146. package/.claude/get-shit-done/workflows/discuss-phase.md +542 -0
  147. package/.claude/get-shit-done/workflows/execute-phase.md +449 -0
  148. package/.claude/get-shit-done/workflows/execute-plan.md +448 -0
  149. package/.claude/get-shit-done/workflows/health.md +156 -0
  150. package/.claude/get-shit-done/workflows/help.md +489 -0
  151. package/.claude/get-shit-done/workflows/insert-phase.md +129 -0
  152. package/.claude/get-shit-done/workflows/list-phase-assumptions.md +178 -0
  153. package/.claude/get-shit-done/workflows/map-codebase.md +315 -0
  154. package/.claude/get-shit-done/workflows/new-milestone.md +382 -0
  155. package/.claude/get-shit-done/workflows/new-project.md +1116 -0
  156. package/.claude/get-shit-done/workflows/pause-work.md +122 -0
  157. package/.claude/get-shit-done/workflows/plan-milestone-gaps.md +274 -0
  158. package/.claude/get-shit-done/workflows/plan-phase.md +569 -0
  159. package/.claude/get-shit-done/workflows/progress.md +381 -0
  160. package/.claude/get-shit-done/workflows/quick.md +453 -0
  161. package/.claude/get-shit-done/workflows/remove-phase.md +154 -0
  162. package/.claude/get-shit-done/workflows/research-phase.md +73 -0
  163. package/.claude/get-shit-done/workflows/resume-project.md +306 -0
  164. package/.claude/get-shit-done/workflows/set-profile.md +80 -0
  165. package/.claude/get-shit-done/workflows/settings.md +213 -0
  166. package/.claude/get-shit-done/workflows/transition.md +544 -0
  167. package/.claude/get-shit-done/workflows/update.md +219 -0
  168. package/.claude/get-shit-done/workflows/verify-phase.md +242 -0
  169. package/.claude/get-shit-done/workflows/verify-work.md +569 -0
  170. package/.claude/gsd-file-manifest.json +144 -0
  171. package/.claude/hooks/agent_creation_trigger.py +168 -0
  172. package/.claude/hooks/agent_index_updater.py +255 -0
  173. package/.claude/hooks/agent_memory_persister.py +203 -0
  174. package/.claude/hooks/claude_md_agent_sync.py +162 -0
  175. package/.claude/hooks/claude_md_guard.py +154 -0
  176. package/.claude/hooks/continuous_save.py +414 -0
  177. package/.claude/hooks/creation_validator.py +360 -0
  178. package/.claude/hooks/enforce_dual_location.py +501 -0
  179. package/.claude/hooks/enforce_plan_mode.py +220 -0
  180. package/.claude/hooks/gsd-check-update.js +62 -0
  181. package/.claude/hooks/gsd-context-monitor.js +122 -0
  182. package/.claude/hooks/gsd-statusline.js +108 -0
  183. package/.claude/hooks/inbox_age_alert.py +367 -0
  184. package/.claude/hooks/ledger_updater.py +303 -0
  185. package/.claude/hooks/memory_hints_injector.py +251 -0
  186. package/.claude/hooks/memory_updater.py +202 -0
  187. package/.claude/hooks/notification_system.py +115 -0
  188. package/.claude/hooks/pending_tracker.py +188 -0
  189. package/.claude/hooks/pipeline_checkpoint.py +583 -0
  190. package/.claude/hooks/post_batch_cascading.py +1740 -0
  191. package/.claude/hooks/post_tool_use.py +120 -0
  192. package/.claude/hooks/quality_watchdog.py +394 -0
  193. package/.claude/hooks/ralph_wiggum.py +286 -0
  194. package/.claude/hooks/session-source-sync.py +223 -0
  195. package/.claude/hooks/session_autosave_v2.py +1135 -0
  196. package/.claude/hooks/session_end.py +203 -0
  197. package/.claude/hooks/session_start.py +939 -0
  198. package/.claude/hooks/skill_indexer.py +48 -0
  199. package/.claude/hooks/skill_router.py +358 -0
  200. package/.claude/hooks/stop_hook_completeness.py +187 -0
  201. package/.claude/hooks/user_prompt_submit.py +125 -0
  202. package/.claude/package.json +1 -0
  203. package/.claude/rules/ANTHROPIC-STANDARDS.md +384 -0
  204. package/.claude/rules/CLAUDE-LITE.md +201 -0
  205. package/.claude/rules/RULE-GROUP-1.md +320 -0
  206. package/.claude/rules/RULE-GROUP-2.md +307 -0
  207. package/.claude/rules/RULE-GROUP-3.md +248 -0
  208. package/.claude/rules/RULE-GROUP-4.md +427 -0
  209. package/.claude/rules/RULE-GROUP-5.md +388 -0
  210. package/.claude/rules/RULE-GROUP-6.md +387 -0
  211. package/.claude/rules/RULE-GSD-MANDATORY.md +106 -0
  212. package/.claude/rules/agent-cognition.md +779 -0
  213. package/.claude/rules/agent-integrity.md +692 -0
  214. package/.claude/rules/epistemic-standards.md +333 -0
  215. package/.claude/rules/logging.md +53 -0
  216. package/.claude/rules/mcp-governance.md +128 -0
  217. package/.claude/rules/pipeline.md +60 -0
  218. package/.claude/rules/state-management.md +93 -0
  219. package/.claude/scripts/apply-tags.py +77 -0
  220. package/.claude/scripts/batch-extract-transcriptions.py +132 -0
  221. package/.claude/scripts/build-complete-index.py +250 -0
  222. package/.claude/scripts/build-planilha-index.py +170 -0
  223. package/.claude/scripts/complete-tag-matching.py +250 -0
  224. package/.claude/scripts/deduplicate-inbox.py +139 -0
  225. package/.claude/scripts/docx-xml-extractor.py +141 -0
  226. package/.claude/scripts/extract-docx-text.py +58 -0
  227. package/.claude/scripts/extract-single-transcription.py +74 -0
  228. package/.claude/scripts/extract_docx_from_gdrive.py +77 -0
  229. package/.claude/scripts/jarvis_orchestrator.py +5 -0
  230. package/.claude/scripts/organized-downloader.py +246 -0
  231. package/.claude/scripts/planilha-tagger.py +187 -0
  232. package/.claude/scripts/revert-tags.py +70 -0
  233. package/.claude/scripts/source-sync.py +265 -0
  234. package/.claude/scripts/tag-inbox-files.py +276 -0
  235. package/.claude/scripts/tag-inbox-v2.py +253 -0
  236. package/.claude/scripts/test-extraction.py +35 -0
  237. package/.claude/scripts/test-full-extraction.py +74 -0
  238. package/.claude/scripts/validate_cascading_integrity.py +409 -0
  239. package/.claude/settings.json +215 -0
  240. package/.claude/skills/DETECTION-PROTOCOL.md +217 -0
  241. package/.claude/skills/README.md +240 -0
  242. package/.claude/skills/SKILL-REGISTRY.md +283 -0
  243. package/.claude/skills/SKILL-SUGGESTIONS.md +114 -0
  244. package/.claude/skills/_TEMPLATES/SKILL-WRITER-GUIDE.md +385 -0
  245. package/.claude/skills/agent-creation/SKILL.md +374 -0
  246. package/.claude/skills/ask-company/SKILL.md +198 -0
  247. package/.claude/skills/brainstorming/SKILL.md +72 -0
  248. package/.claude/skills/chronicler/SKILL.md +146 -0
  249. package/.claude/skills/chronicler/chronicler_core.py +468 -0
  250. package/.claude/skills/code-review/SKILL.md +160 -0
  251. package/.claude/skills/convert-to-company-docs/SKILL.md +68 -0
  252. package/.claude/skills/convert-to-company-docs/convert.py +532 -0
  253. package/.claude/skills/dispatching-parallel-agents/SKILL.md +193 -0
  254. package/.claude/skills/docs-megabrain/SKILL.md +251 -0
  255. package/.claude/skills/executing-plans/SKILL.md +114 -0
  256. package/.claude/skills/executor/SKILL.md +161 -0
  257. package/.claude/skills/fase-2-5-tagging/SKILL.md +182 -0
  258. package/.claude/skills/feature-dev/SKILL.md +154 -0
  259. package/.claude/skills/frontend-design/SKILL.md +165 -0
  260. package/.claude/skills/gdrive-transcription-downloader/SKILL.md +249 -0
  261. package/.claude/skills/gemini-fallback/SKILL.md +67 -0
  262. package/.claude/skills/gemini-fallback/gemini_fetch.py +0 -0
  263. package/.claude/skills/gha/SKILL.md +96 -0
  264. package/.claude/skills/gha/gha_diagnostic.py +227 -0
  265. package/.claude/skills/github-workflow/SKILL.md +190 -0
  266. package/.claude/skills/hookify/SKILL.md +134 -0
  267. package/.claude/skills/hybrid-source-reading/SKILL.md +265 -0
  268. package/.claude/skills/jarvis/SKILL.md +546 -0
  269. package/.claude/skills/jarvis-briefing/SKILL.md +340 -0
  270. package/.claude/skills/knowledge-extraction/SKILL.md +318 -0
  271. package/.claude/skills/ler-planilha/SKILL.md +281 -0
  272. package/.claude/skills/pipeline-jarvis/SKILL.md +430 -0
  273. package/.claude/skills/plugin-dev/SKILL.md +176 -0
  274. package/.claude/skills/pr-review-toolkit/SKILL.md +178 -0
  275. package/.claude/skills/process-company-inbox/SKILL.md +183 -0
  276. package/.claude/skills/python-megabrain/SKILL.md +323 -0
  277. package/.claude/skills/resume/SKILL.md +61 -0
  278. package/.claude/skills/save/SKILL.md +87 -0
  279. package/.claude/skills/skill-creator-internal/SKILL.md +186 -0
  280. package/.claude/skills/skill-writer/SKILL.md +153 -0
  281. package/.claude/skills/skill-writer/examples.md +191 -0
  282. package/.claude/skills/skill-writer/troubleshooting.md +205 -0
  283. package/.claude/skills/smart-download-tagger/SKILL.md +148 -0
  284. package/.claude/skills/source-sync/SKILL.md +240 -0
  285. package/.claude/skills/sync-docs/SKILL.md +193 -0
  286. package/.claude/skills/sync-docs/config.json +37 -0
  287. package/.claude/skills/sync-docs/gdrive_sync.py +358 -0
  288. package/.claude/skills/sync-docs/reauth.py +71 -0
  289. package/.claude/skills/using-superpowers/SKILL.md +105 -0
  290. package/.claude/skills/verification-before-completion/SKILL.md +130 -0
  291. package/.claude/skills/verify/SKILL.md +154 -0
  292. package/.claude/skills/verify/verify_runner.py +0 -0
  293. package/.claude/skills/verify-6-levels/SKILL.md +234 -0
  294. package/.claude/skills/writing-plans/SKILL.md +184 -0
  295. package/.claude/templates/BATCH-LOG-TEMPLATE.md +221 -0
  296. package/.claudeignore +9 -0
  297. package/.cursor/agents.yaml +44 -0
  298. package/.cursor/rules/mega-brain.md +39 -0
  299. package/.gitattributes +19 -0
  300. package/.github/CODEOWNERS +8 -0
  301. package/.github/ISSUE_TEMPLATE/agent.md +96 -0
  302. package/.github/ISSUE_TEMPLATE/bug.md +67 -0
  303. package/.github/ISSUE_TEMPLATE/feature.md +56 -0
  304. package/.github/ISSUE_TEMPLATE/pipeline.md +70 -0
  305. package/.github/PULL_REQUEST_TEMPLATE.md +30 -0
  306. package/.github/assets/banner.svg +152 -0
  307. package/.github/assets/logo-dark.svg +79 -0
  308. package/.github/assets/social-preview.png +0 -0
  309. package/.github/layer1-allowlist.txt +196 -0
  310. package/.github/layer2-manifest.txt +42 -0
  311. package/.github/layer3-manifest.txt +94 -0
  312. package/.github/workflows/claude-code-pr.yml +198 -0
  313. package/.github/workflows/claude-code-review.yml +57 -0
  314. package/.github/workflows/claude.yml +76 -0
  315. package/.github/workflows/publish-pro.yml +72 -0
  316. package/.github/workflows/publish.yml +86 -0
  317. package/.github/workflows/verification.yml +251 -0
  318. package/.gitignore +244 -0
  319. package/.gitleaks.toml +118 -0
  320. package/.windsurf/agents.yaml +44 -0
  321. package/.windsurf/rules/mega-brain.md +39 -0
  322. package/CONTRIBUTING.md +62 -0
  323. package/QUICK-START.md +231 -0
  324. package/README.md +168 -0
  325. package/agents/AGENT-INDEX.yaml +107 -0
  326. package/agents/MASTER-AGENT.md +612 -0
  327. package/agents/README.md +48 -0
  328. package/agents/_templates/INDEX.md +741 -0
  329. package/agents/_templates/TEMPLATE-AGENT-MD-ULTRA-ROBUSTO-V3.md +2399 -0
  330. package/agents/boardroom/CHECKLIST-MASTER.md +281 -0
  331. package/agents/boardroom/INTEGRATION-GUIDE.md +406 -0
  332. package/agents/boardroom/README.md +238 -0
  333. package/agents/boardroom/config/BOARDROOM-CONFIG.md +186 -0
  334. package/agents/boardroom/config/TTS-INTEGRATION.md +258 -0
  335. package/agents/boardroom/config/VOICE-PROFILES.md +624 -0
  336. package/agents/boardroom/scripts/audio_generator.py +375 -0
  337. package/agents/boardroom/scripts/audio_generator_edge.py +353 -0
  338. package/agents/boardroom/scripts/jarvis_boardroom_hook.py +415 -0
  339. package/agents/boardroom/scripts/notebooklm_generator.py +578 -0
  340. package/agents/boardroom/templates/EPISODE-TEMPLATE.md +367 -0
  341. package/agents/boardroom/templates/scene-templates/SCENE-AGENT-DEBATE.md +252 -0
  342. package/agents/boardroom/templates/scene-templates/SCENE-COUNCIL.md +270 -0
  343. package/agents/boardroom/templates/scene-templates/SCENE-DNA-CONSULTATION.md +126 -0
  344. package/agents/boardroom/templates/scene-templates/SCENE-QUESTION.md +174 -0
  345. package/agents/boardroom/workflows/WORKFLOW-AUDIO-GENERATION.md +421 -0
  346. package/agents/conclave/CRITIC.md +197 -0
  347. package/agents/conclave/DEVILS-ADVOCATE.md +274 -0
  348. package/agents/conclave/README.md +35 -0
  349. package/agents/conclave/SYNTHESIZER.md +293 -0
  350. package/agents/conclave/advogado-do-diabo/AGENT.md +502 -0
  351. package/agents/conclave/advogado-do-diabo/SOUL.md +100 -0
  352. package/agents/conclave/critico-metodologico/AGENT.md +683 -0
  353. package/agents/conclave/critico-metodologico/SOUL.md +107 -0
  354. package/agents/conclave/sintetizador/AGENT.md +571 -0
  355. package/agents/conclave/sintetizador/SOUL.md +94 -0
  356. package/agents/constitution/BASE-CONSTITUTION.md +254 -0
  357. package/agents/persona-registry.yaml +300 -0
  358. package/agents/sua-empresa/.gitkeep +0 -0
  359. package/agents/sua-empresa/README.md +44 -0
  360. package/agents/sua-empresa/_example/jds/EXAMPLE-JD.md +42 -0
  361. package/agents/sua-empresa/_example/org/EXAMPLE-ORG.md +32 -0
  362. package/agents/sua-empresa/_example/roles/EXAMPLE-ROLE.md +38 -0
  363. package/artifacts/README.md +11 -0
  364. package/artifacts/canonical/.gitkeep +0 -0
  365. package/artifacts/chunks/.gitkeep +0 -0
  366. package/artifacts/insights/.gitkeep +0 -0
  367. package/artifacts/narratives/.gitkeep +0 -0
  368. package/bin/cli.js +2 -0
  369. package/bin/lib/ascii-art.js +202 -0
  370. package/bin/lib/feature-gate.js +46 -0
  371. package/bin/lib/installer.js +593 -0
  372. package/bin/lib/license.js +59 -0
  373. package/bin/lib/pro-commands.js +75 -0
  374. package/bin/lib/setup-wizard.js +547 -0
  375. package/bin/lib/validate-email.js +113 -0
  376. package/bin/mega-brain.js +136 -0
  377. package/bin/pre-publish-gate.js +229 -0
  378. package/bin/push.js +1056 -0
  379. package/bin/templates/env.example +27 -0
  380. package/bin/utils/pro-detector.js +50 -0
  381. package/bin/validate-package.js +190 -0
  382. package/core/__init__.py +2 -0
  383. package/core/glossary/INDEX.md +63 -0
  384. package/core/glossary/digital.md +243 -0
  385. package/core/glossary/finance.md +49 -0
  386. package/core/glossary/marketing.md +69 -0
  387. package/core/glossary/operations.md +50 -0
  388. package/core/glossary/sales.md +690 -0
  389. package/core/intelligence/__init__.py +41 -0
  390. package/core/intelligence/agent_trigger.py +468 -0
  391. package/core/intelligence/audit_layers.py +491 -0
  392. package/core/intelligence/autonomous_processor.py +796 -0
  393. package/core/intelligence/bootstrap_registry.py +550 -0
  394. package/core/intelligence/business_model_detector.py +476 -0
  395. package/core/intelligence/dossier_trigger.py +336 -0
  396. package/core/intelligence/entity_normalizer.py +565 -0
  397. package/core/intelligence/org_chain_detector.py +411 -0
  398. package/core/intelligence/review_dashboard.py +338 -0
  399. package/core/intelligence/role_detector.py +855 -0
  400. package/core/intelligence/session_autosave.py +46 -0
  401. package/core/intelligence/skill_generator.py +601 -0
  402. package/core/intelligence/sow_generator.py +711 -0
  403. package/core/intelligence/sync_package_files.py +504 -0
  404. package/core/intelligence/task_orchestrator.py +780 -0
  405. package/core/intelligence/theme_analyzer.py +562 -0
  406. package/core/intelligence/tool_discovery.py +432 -0
  407. package/core/intelligence/validate_json_integrity.py +106 -0
  408. package/core/intelligence/validate_layers.py +310 -0
  409. package/core/intelligence/verify_classifications.py +94 -0
  410. package/core/intelligence/viability_scorer.py +592 -0
  411. package/core/jarvis/02-JARVIS-SOUL.md +390 -0
  412. package/core/jarvis/03-JARVIS-DNA.yaml +312 -0
  413. package/core/jarvis/AGENT.md +191 -0
  414. package/core/jarvis/agent-creator/AGENT.md +199 -0
  415. package/core/jarvis/agent-creator/SOUL.md +82 -0
  416. package/core/jarvis/agent-creator/tasks/create-agent.md +133 -0
  417. package/core/jarvis/agent-creator/tasks/sync-agents.md +100 -0
  418. package/core/jarvis/agent-creator/workflows/wf-create-agent.yaml +110 -0
  419. package/core/jarvis/agent-creator/workflows/wf-pipeline-trigger.yaml +111 -0
  420. package/core/jarvis/autonomous/benchmark/AGENT.md +347 -0
  421. package/core/jarvis/autonomous/benchmark/SOUL.md +78 -0
  422. package/core/jarvis/autonomous/critic/AGENT.md +324 -0
  423. package/core/jarvis/autonomous/critic/SOUL.md +78 -0
  424. package/core/jarvis/autonomous/evolver/AGENT.md +294 -0
  425. package/core/jarvis/autonomous/evolver/SOUL.md +85 -0
  426. package/core/jarvis/autonomous/playbook-generator/AGENT.md +399 -0
  427. package/core/jarvis/autonomous/playbook-generator/SOUL.md +80 -0
  428. package/core/patterns/_ROLE_PATTERNS.yaml +547 -0
  429. package/core/patterns/quality_gates.yaml +259 -0
  430. package/core/patterns/trigger_config.yaml +193 -0
  431. package/core/schemas/SCHEMA-INDEX.md +94 -0
  432. package/core/schemas/canonical-map.schema.json +98 -0
  433. package/core/schemas/chunks-state.schema.json +131 -0
  434. package/core/schemas/decisions-registry.schema.json +120 -0
  435. package/core/schemas/file-registry.schema.json +69 -0
  436. package/core/schemas/insights-state.schema.json +111 -0
  437. package/core/schemas/narratives-state.schema.json +150 -0
  438. package/core/tasks/CHANGELOG.md +55 -0
  439. package/core/tasks/TASK-REGISTRY.md +113 -0
  440. package/core/tasks/_templates/task-tmpl.md +105 -0
  441. package/core/tasks/analyze-themes.md +84 -0
  442. package/core/tasks/detect-role.md +82 -0
  443. package/core/tasks/extract-dna.md +114 -0
  444. package/core/tasks/normalize-entities.md +82 -0
  445. package/core/tasks/process-batch.md +111 -0
  446. package/core/tasks/validate-cascade.md +105 -0
  447. package/core/templates/README.md +27 -0
  448. package/core/templates/agents/dna-config-template.yaml +181 -0
  449. package/core/templates/agents/enrichment-protocol.md +408 -0
  450. package/core/templates/agents/memory-template.md +567 -0
  451. package/core/templates/agents/reasoning-model.md +331 -0
  452. package/core/templates/agents/soul-template.md +416 -0
  453. package/core/templates/agents/template-evolution.md +544 -0
  454. package/core/templates/debates/CONCLAVE-LOG-TEMPLATE-v2.md +309 -0
  455. package/core/templates/debates/conclave-log-template.md +309 -0
  456. package/core/templates/debates/conclave-protocol.md +518 -0
  457. package/core/templates/debates/debate-dynamics-config.yaml +322 -0
  458. package/core/templates/debates/debate-dynamics.md +613 -0
  459. package/core/templates/debates/debate-protocol.md +323 -0
  460. package/core/templates/logs/LOG-TEMPLATES.md +1068 -0
  461. package/core/templates/logs/batch-visual-template.md +841 -0
  462. package/core/templates/logs/log-structure.md +65 -0
  463. package/core/templates/logs/visual-diff.md +159 -0
  464. package/core/templates/phases/dossier-compilation.md +790 -0
  465. package/core/templates/phases/narrative-metabolism.md +292 -0
  466. package/core/templates/phases/narrative-synthesis.md +278 -0
  467. package/core/templates/phases/phase4-checkpoint.md +146 -0
  468. package/core/templates/phases/prompt-1.1-chunking.md +154 -0
  469. package/core/templates/phases/prompt-1.2-entity-resolution.md +186 -0
  470. package/core/templates/phases/prompt-2.1-dna-tags.md +208 -0
  471. package/core/templates/phases/prompt-2.1-insight-extraction.md +191 -0
  472. package/core/templates/phases/prompt-3.1-narrative.md +331 -0
  473. package/core/templates/phases/sources-compilation.md +340 -0
  474. package/core/workflows/PIPELINE-JARVIS-DOCS.md +606 -0
  475. package/core/workflows/wf-conclave.yaml +139 -0
  476. package/core/workflows/wf-extract-dna.yaml +158 -0
  477. package/core/workflows/wf-ingest.yaml +88 -0
  478. package/core/workflows/wf-pipeline-full.yaml +138 -0
  479. package/docs/API-KEYS-GUIDE.md +372 -0
  480. package/docs/INTEGRATION-POINTS.md +501 -0
  481. package/docs/LAYERS.md +403 -0
  482. package/docs/PLAN-MODE-PROTOCOL.md +388 -0
  483. package/docs/RESTORE-AND-INDEX.md +203 -0
  484. package/docs/TAG-RESOLVER-IMPLEMENTATION.md +597 -0
  485. package/docs/conselho.md +337 -0
  486. package/docs/context7-readme.md +28 -0
  487. package/docs/jarvis-logging-protocol.md +380 -0
  488. package/docs/pipeline-completa-v4.md +1315 -0
  489. package/docs/prompts/meta_agente_mapeamento_processos.md +297 -0
  490. package/docs/quick-start.md +197 -0
  491. package/docs/readme-ralph-cascateamento.md +207 -0
  492. package/docs/template-master.md +727 -0
  493. package/docs/templates/phase5/IMPLEMENTATION-GUIDE.md +355 -0
  494. package/docs/templates/phase5/MOGA-BRAIN-PHASE5-TEMPLATES.md +1284 -0
  495. package/docs/templates/phase5/README.md +165 -0
  496. package/docs/workflow-continuous-claude.md +2232 -0
  497. package/inbox/.gitkeep +0 -0
  498. package/inbox/README.md +15 -0
  499. package/knowledge/NAVIGATION-MAP.json +292 -0
  500. package/knowledge/README.md +11 -0
  501. package/knowledge/dna/.gitkeep +0 -0
  502. package/knowledge/dossiers/persons/.gitkeep +0 -0
  503. package/knowledge/dossiers/system/.gitkeep +0 -0
  504. package/knowledge/dossiers/themes/.gitkeep +0 -0
  505. package/knowledge/playbooks/.gitkeep +0 -0
  506. package/knowledge/sources/.gitkeep +0 -0
  507. package/logs/.gitkeep +0 -0
  508. package/logs/README.md +11 -0
  509. package/package.json +180 -0
  510. package/requirements.txt +4 -0
@@ -0,0 +1,203 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Agent Memory Persister Hook v1.0 (Mega Brain)
4
+
5
+ Persists session learnings to the active agent's memory file at session end.
6
+ Adapted from: aios-core/.claude/hooks/agent_memory_persister.py
7
+
8
+ LIFECYCLE:
9
+ READ: skill_router.py (UserPromptSubmit) -> loads .claude/agent-memory/{slug}/MEMORY.md
10
+ WRITE: post_batch_cascading.py (PostToolUse) -> writes batch learnings
11
+ WRITE: THIS HOOK (SessionEnd) -> writes session summary
12
+
13
+ BEHAVIOR:
14
+ - Reads active agent from STATE.json (session.agent_active)
15
+ - Appends a session entry to .claude/agent-memory/{slug}/MEMORY.md
16
+ - Creates the memory file if it doesn't exist
17
+ - Fail-open: NEVER blocks session end
18
+
19
+ EXIT CODES:
20
+ - 0: Always (advisory only, never blocks)
21
+
22
+ Hook Type: SessionEnd
23
+ """
24
+
25
+ import json
26
+ import sys
27
+ import os
28
+ import time
29
+ from datetime import datetime
30
+ from pathlib import Path
31
+
32
+ PROJECT_ROOT = Path(os.environ.get('CLAUDE_PROJECT_DIR', '.'))
33
+ STATE_DIR = PROJECT_ROOT / ".claude" / "jarvis"
34
+ STATE_FILE = STATE_DIR / "STATE.json"
35
+ AGENT_MEMORY_DIR = PROJECT_ROOT / ".claude" / "agent-memory"
36
+
37
+ # Internal time budget (ms)
38
+ INTERNAL_TIMEOUT_MS = 3000
39
+
40
+
41
+ def load_state() -> dict:
42
+ """Load current state."""
43
+ if not STATE_FILE.exists():
44
+ return {}
45
+ try:
46
+ with open(STATE_FILE, 'r', encoding='utf-8') as f:
47
+ return json.load(f)
48
+ except (json.JSONDecodeError, IOError):
49
+ return {}
50
+
51
+
52
+ def get_active_agent(state: dict) -> str | None:
53
+ """Extract active agent slug from STATE.json."""
54
+ # Check session.agent_active (set by skill_router/post_tool_use)
55
+ session = state.get("session", {})
56
+ agent = session.get("agent_active")
57
+ if agent and isinstance(agent, str) and agent.strip():
58
+ return agent.strip()
59
+ return None
60
+
61
+
62
+ def get_session_metadata(state: dict) -> dict:
63
+ """Extract useful session metadata for the memory entry."""
64
+ accumulated = state.get("accumulated", {})
65
+ pipeline = state.get("pipeline", {})
66
+
67
+ return {
68
+ "session_id": state.get("session_id", "unknown"),
69
+ "ended_at": datetime.now().isoformat(),
70
+ "files_processed": pipeline.get("files_processed", 0),
71
+ "progress_percent": accumulated.get("progress_percent", 0),
72
+ "current_step": pipeline.get("current_step", "unknown"),
73
+ }
74
+
75
+
76
+ def get_memory_path(agent_slug: str) -> Path:
77
+ """Resolve agent memory path."""
78
+ return AGENT_MEMORY_DIR / agent_slug / "MEMORY.md"
79
+
80
+
81
+ def create_memory_file(memory_path: Path, agent_slug: str) -> None:
82
+ """Create a new MEMORY.md with header."""
83
+ memory_path.parent.mkdir(parents=True, exist_ok=True)
84
+ header = f"""# {agent_slug} - Agent Memory
85
+
86
+ > Auto-managed by hooks. Do not edit manually.
87
+ > READ: skill_router.py (on activation)
88
+ > WRITE: agent_memory_persister.py (on session end)
89
+
90
+ ---
91
+
92
+ """
93
+ memory_path.write_text(header, encoding='utf-8')
94
+
95
+
96
+ def build_session_entry(agent_slug: str, metadata: dict) -> str:
97
+ """Build a markdown session entry to append to MEMORY.md."""
98
+ now = datetime.now()
99
+ date_str = now.strftime("%Y-%m-%d %H:%M")
100
+ session_id_short = metadata.get("session_id", "unknown")[:8]
101
+
102
+ lines = [
103
+ f"## Session {date_str} [{session_id_short}]",
104
+ "",
105
+ f"- **Step:** {metadata.get('current_step', 'unknown')}",
106
+ f"- **Progress:** {metadata.get('progress_percent', 0)}%",
107
+ f"- **Files processed:** {metadata.get('files_processed', 0)}",
108
+ "",
109
+ "---",
110
+ "",
111
+ ]
112
+
113
+ return "\n".join(lines)
114
+
115
+
116
+ def append_to_memory(memory_path: Path, entry: str) -> bool:
117
+ """Append session entry to MEMORY.md, trimming if over 200 lines."""
118
+ try:
119
+ if not memory_path.exists():
120
+ return False
121
+
122
+ content = memory_path.read_text(encoding='utf-8')
123
+ new_content = content.rstrip('\n') + '\n\n' + entry
124
+
125
+ final_lines = new_content.split('\n')
126
+ if len(final_lines) > 200:
127
+ header = final_lines[:20]
128
+ recent = final_lines[-175:]
129
+ final_lines = header + ["", "<!-- Older entries trimmed by agent_memory_persister.py -->", ""] + recent
130
+
131
+ memory_path.write_text('\n'.join(final_lines), encoding='utf-8')
132
+ return True
133
+ except Exception:
134
+ return False
135
+
136
+
137
+ def check_timeout(start_time):
138
+ """Check if we've exceeded internal time budget."""
139
+ elapsed_ms = (time.time() - start_time) * 1000
140
+ return elapsed_ms > INTERNAL_TIMEOUT_MS
141
+
142
+
143
+ def main():
144
+ """Main hook execution with timeout protection."""
145
+ start_time = time.time()
146
+
147
+ try:
148
+ input_data = sys.stdin.read()
149
+ hook_input = json.loads(input_data) if input_data.strip() else {}
150
+
151
+ state = load_state()
152
+ if not state:
153
+ print(json.dumps({"continue": True}))
154
+ return
155
+
156
+ raw_slug = get_active_agent(state)
157
+ if not raw_slug:
158
+ print(json.dumps({"continue": True}))
159
+ return
160
+
161
+ if check_timeout(start_time):
162
+ print(json.dumps({
163
+ "continue": True,
164
+ "feedback": "[MB] Memory persister skipped (timeout after state load)"
165
+ }))
166
+ return
167
+
168
+ agent_slug = raw_slug
169
+ memory_path = get_memory_path(agent_slug)
170
+
171
+ if not memory_path.exists():
172
+ create_memory_file(memory_path, agent_slug)
173
+
174
+ if check_timeout(start_time):
175
+ print(json.dumps({
176
+ "continue": True,
177
+ "feedback": "[MB] Memory persister skipped (timeout before entry build)"
178
+ }))
179
+ return
180
+
181
+ metadata = get_session_metadata(state)
182
+ entry = build_session_entry(agent_slug, metadata)
183
+ success = append_to_memory(memory_path, entry)
184
+
185
+ output = {"continue": True}
186
+
187
+ if success:
188
+ elapsed_ms = round((time.time() - start_time) * 1000)
189
+ output["feedback"] = f"[MB] Session memory persisted for @{agent_slug} ({elapsed_ms}ms)"
190
+ else:
191
+ output["feedback"] = f"[MB] Could not persist memory for @{agent_slug}"
192
+
193
+ print(json.dumps(output))
194
+
195
+ except Exception as e:
196
+ print(json.dumps({
197
+ "continue": True,
198
+ "feedback": f"[MB] Memory persister error (fail-open): {str(e)}"
199
+ }))
200
+
201
+
202
+ if __name__ == "__main__":
203
+ main()
@@ -0,0 +1,162 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ CLAUDE.md Agent Sync Hook
4
+ Updates the Agents section in CLAUDE.md when agent structure changes.
5
+
6
+ Hook Events: PostToolUse (Write/Edit to agents/ or persona-registry.yaml)
7
+ Version: 1.0.0
8
+ """
9
+
10
+ import sys
11
+ import json
12
+ import re
13
+ from pathlib import Path
14
+ from datetime import datetime
15
+
16
+ BASE_DIR = Path(__file__).parent.parent.parent
17
+ CLAUDE_MD = BASE_DIR / ".claude" / "CLAUDE.md"
18
+ PERSONA_REGISTRY = BASE_DIR / "agents" / "persona-registry.yaml"
19
+ AGENTS_DIR = BASE_DIR / "agents"
20
+ SYNC_LOG = BASE_DIR / "logs" / "claude-md-sync.jsonl"
21
+
22
+
23
+ def parse_stdin():
24
+ """Parse JSON from stdin."""
25
+ try:
26
+ return json.load(sys.stdin)
27
+ except Exception:
28
+ return {}
29
+
30
+
31
+ def should_trigger(file_path: str) -> bool:
32
+ """Check if this file change should trigger sync."""
33
+ triggers = [
34
+ 'persona-registry.yaml',
35
+ 'AGENT-INDEX.yaml',
36
+ 'agents.yaml'
37
+ ]
38
+ return any(t in file_path for t in triggers)
39
+
40
+
41
+ def count_agents() -> dict:
42
+ """Count agents by type."""
43
+ counts = {
44
+ 'minds': 0,
45
+ 'cargo': 0,
46
+ 'conclave': 0,
47
+ 'total': 0
48
+ }
49
+
50
+ # Count minds
51
+ minds_dir = AGENTS_DIR / "minds"
52
+ if minds_dir.exists():
53
+ counts['minds'] = len([d for d in minds_dir.iterdir()
54
+ if d.is_dir() and not d.name.startswith('_')])
55
+
56
+ # Count conclave
57
+ conclave_dir = AGENTS_DIR / "conclave"
58
+ if conclave_dir.exists():
59
+ counts['conclave'] = len([d for d in conclave_dir.iterdir() if d.is_dir()])
60
+
61
+ # Count cargo (recursive)
62
+ cargo_dir = AGENTS_DIR / "cargo"
63
+ if cargo_dir.exists():
64
+ for group in cargo_dir.iterdir():
65
+ if group.is_dir():
66
+ counts['cargo'] += len([d for d in group.iterdir() if d.is_dir()])
67
+
68
+ counts['total'] = counts['minds'] + counts['cargo'] + counts['conclave']
69
+ return counts
70
+
71
+
72
+ def update_claude_md():
73
+ """Update the Agents section in CLAUDE.md."""
74
+ if not CLAUDE_MD.exists():
75
+ return False
76
+
77
+ content = CLAUDE_MD.read_text()
78
+ counts = count_agents()
79
+
80
+ # Build new agents section
81
+ new_section = f"""## Agents
82
+
83
+ Defined in `AGENT-INDEX.yaml`, activated via slash commands.
84
+
85
+ | Type | Count | Purpose |
86
+ |------|-------|---------|
87
+ | CARGO | {counts['cargo']} | Functional roles (Sales, Marketing, Ops) |
88
+ | MINDS | {counts['minds']} | Expert mind clones |
89
+ | CONCLAVE | {counts['conclave']} | Multi-perspective deliberation |
90
+ | SYSTEM | 2 | JARVIS, Agent-Creator |
91
+
92
+ **Total Active Agents:** {counts['total']}"""
93
+
94
+ # Find and replace the Agents section
95
+ # Pattern matches from "## Agents" to the next "##" or end
96
+ pattern = r'## Agents\n.*?(?=\n## |\Z)'
97
+
98
+ if re.search(pattern, content, re.DOTALL):
99
+ new_content = re.sub(pattern, new_section, content, flags=re.DOTALL)
100
+ CLAUDE_MD.write_text(new_content)
101
+ return True
102
+
103
+ return False
104
+
105
+
106
+ def log_sync(file_path: str, success: bool):
107
+ """Log sync operation."""
108
+ SYNC_LOG.parent.mkdir(parents=True, exist_ok=True)
109
+
110
+ entry = {
111
+ "timestamp": datetime.now().isoformat(),
112
+ "trigger_file": file_path,
113
+ "success": success,
114
+ "counts": count_agents()
115
+ }
116
+
117
+ with open(SYNC_LOG, 'a') as f:
118
+ f.write(json.dumps(entry) + '\n')
119
+
120
+
121
+ def main():
122
+ """Main hook execution."""
123
+ try:
124
+ data = parse_stdin()
125
+
126
+ tool_name = data.get('tool_name', '')
127
+ tool_input = data.get('tool_input', {})
128
+
129
+ if tool_name not in ['Write', 'Edit']:
130
+ print(json.dumps({"continue": True}))
131
+ return
132
+
133
+ file_path = tool_input.get('file_path', '')
134
+
135
+ # Check if this should trigger sync
136
+ if not should_trigger(file_path):
137
+ print(json.dumps({"continue": True}))
138
+ return
139
+
140
+ # Update CLAUDE.md
141
+ success = update_claude_md()
142
+ log_sync(file_path, success)
143
+
144
+ if success:
145
+ counts = count_agents()
146
+ print(json.dumps({
147
+ "continue": True,
148
+ "message": f"📝 CLAUDE.md agents section synced ({counts['total']} agents)"
149
+ }))
150
+ else:
151
+ print(json.dumps({"continue": True}))
152
+
153
+ except Exception as e:
154
+ print(json.dumps({
155
+ "continue": True,
156
+ "warning": f"CLAUDE.md sync error: {str(e)}"
157
+ }))
158
+ sys.exit(0)
159
+
160
+
161
+ if __name__ == "__main__":
162
+ main()
@@ -0,0 +1,154 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ CLAUDE.md Guard Hook - VETO: Blocks CLAUDE.md creation outside sanctioned locations.
4
+
5
+ Hook Type: PreToolUse (Write|Edit)
6
+ Adapted from: aios-core/.claude/hooks/claude_md_guard.py
7
+ Date: 2026-02-18
8
+
9
+ Architecture Rule Enforced:
10
+ CLAUDE.md files are ONLY allowed in these locations:
11
+ - .claude/CLAUDE.md (project instructions)
12
+ - CLAUDE.md (repo root)
13
+
14
+ Agent memory MUST use .claude/agent-memory/{slug}/MEMORY.md
15
+ NEVER create CLAUDE.md in code directories, data dirs, or subfolders.
16
+
17
+ VETO CONDITIONS:
18
+ - Any Write/Edit targeting a CLAUDE.md outside sanctioned paths -> BLOCK
19
+ - Any content containing <claude-mem-context> outside .claude/ -> BLOCK
20
+
21
+ ERROR HANDLING: fail-CLOSED (2026-02-22 hardening)
22
+ - JSONDecodeError -> BLOCK (can't parse = can't validate)
23
+ - Any Exception -> BLOCK (unknown error = can't validate)
24
+ """
25
+
26
+ import json
27
+ import sys
28
+ import os
29
+ from pathlib import Path
30
+
31
+ # Sanctioned CLAUDE.md locations (relative to project root)
32
+ SANCTIONED_CLAUDE_MD = {
33
+ "CLAUDE.md", # Repo root
34
+ ".claude/CLAUDE.md", # Project instructions
35
+ }
36
+
37
+ # Patterns that indicate auto-generated memory spam
38
+ SPAM_INDICATORS = [
39
+ "<claude-mem-context>",
40
+ "<!-- This section is auto-generated by claude-mem",
41
+ "# Recent Activity",
42
+ ]
43
+
44
+
45
+ def normalize_path(file_path: str) -> str:
46
+ """Normalize path to relative, forward-slash format."""
47
+ project_dir = os.environ.get('CLAUDE_PROJECT_DIR', '.')
48
+
49
+ fp = Path(file_path).resolve()
50
+ pd = Path(project_dir).resolve()
51
+
52
+ try:
53
+ rel = fp.relative_to(pd)
54
+ return str(rel).replace("\\", "/")
55
+ except ValueError:
56
+ return file_path.replace("\\", "/")
57
+
58
+
59
+ def is_claude_md(file_path: str) -> bool:
60
+ """Check if the file is a CLAUDE.md file."""
61
+ normalized = file_path.replace("\\", "/")
62
+ return normalized.endswith("/CLAUDE.md") or normalized == "CLAUDE.md"
63
+
64
+
65
+ def is_sanctioned(relative_path: str) -> bool:
66
+ """Check if the CLAUDE.md path is in a sanctioned location."""
67
+ return relative_path in SANCTIONED_CLAUDE_MD
68
+
69
+
70
+ def content_is_spam(content: str) -> bool:
71
+ """Check if content contains auto-generated memory spam markers."""
72
+ if not content:
73
+ return False
74
+ for indicator in SPAM_INDICATORS:
75
+ if indicator in content:
76
+ return True
77
+ return False
78
+
79
+
80
+ def main():
81
+ try:
82
+ input_data = sys.stdin.read()
83
+ if not input_data:
84
+ print(json.dumps({"decision": "allow"}))
85
+ return
86
+
87
+ hook_input = json.loads(input_data)
88
+ tool_name = hook_input.get("tool_name", "")
89
+ tool_input = hook_input.get("tool_input", {})
90
+
91
+ # Only check Write and Edit tools
92
+ if tool_name not in ("Write", "Edit", "write", "edit"):
93
+ print(json.dumps({"decision": "allow"}))
94
+ return
95
+
96
+ file_path = tool_input.get("file_path", "")
97
+ if not file_path:
98
+ print(json.dumps({"decision": "allow"}))
99
+ return
100
+
101
+ relative_path = normalize_path(file_path)
102
+
103
+ # Check if targeting a CLAUDE.md file
104
+ if not is_claude_md(relative_path):
105
+ print(json.dumps({"decision": "allow"}))
106
+ return
107
+
108
+ # Check if it's a sanctioned location
109
+ if is_sanctioned(relative_path):
110
+ content = tool_input.get("content", "")
111
+ if not content:
112
+ content = tool_input.get("new_string", "")
113
+
114
+ if content_is_spam(content):
115
+ print(json.dumps({
116
+ "decision": "allow",
117
+ "message": (
118
+ "Warning: CLAUDE.md Guard: Detected claude-mem-context in sanctioned file. "
119
+ "Agent memory should use .claude/agent-memory/{slug}/MEMORY.md instead."
120
+ )
121
+ }))
122
+ return
123
+
124
+ print(json.dumps({"decision": "allow"}))
125
+ return
126
+
127
+ # UNSANCTIONED CLAUDE.md -> BLOCK
128
+ print(json.dumps({
129
+ "decision": "block",
130
+ "reason": (
131
+ f"VETO: CLAUDE.md Guard\n"
132
+ f" Path: {relative_path}\n"
133
+ f" Rule: CLAUDE.md files are NOT allowed outside sanctioned locations.\n"
134
+ f" Sanctioned: {', '.join(sorted(SANCTIONED_CLAUDE_MD))}\n"
135
+ f" Agent memory -> .claude/agent-memory/{{slug}}/MEMORY.md"
136
+ )
137
+ }))
138
+
139
+ except json.JSONDecodeError:
140
+ # Fail-CLOSED: can't parse input = can't validate = BLOCK
141
+ print(json.dumps({
142
+ "decision": "block",
143
+ "reason": "CLAUDE.md Guard: Cannot parse hook input (malformed JSON). Blocking by default."
144
+ }))
145
+ except Exception as e:
146
+ # Fail-CLOSED: unknown error = can't validate = BLOCK
147
+ print(json.dumps({
148
+ "decision": "block",
149
+ "reason": f"CLAUDE.md Guard error (fail-closed): {str(e)}. Blocking by default."
150
+ }))
151
+
152
+
153
+ if __name__ == "__main__":
154
+ main()