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,48 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Skill Indexer - Hook de SessionStart v2.0
4
+
5
+ Indexa todas as skills E sub-agents no início de cada sessão.
6
+ Executado automaticamente via settings.local.json SessionStart hook.
7
+
8
+ REGRA #27: Skills e Sub-Agents são indexados automaticamente no início de cada sessão.
9
+
10
+ v2.0: Suporta tanto skills quanto sub-agents JARVIS
11
+ """
12
+
13
+ import json
14
+ import os
15
+ import sys
16
+ from pathlib import Path
17
+
18
+ PROJECT_ROOT = Path(os.environ.get('CLAUDE_PROJECT_DIR', '.'))
19
+ sys.path.insert(0, str(PROJECT_ROOT / ".claude" / "hooks"))
20
+
21
+ try:
22
+ from skill_router import build_index
23
+ except ImportError:
24
+ # Fallback se import falhar
25
+ def build_index():
26
+ return {"skills_count": 0, "subagents_count": 0, "error": "skill_router not found"}
27
+
28
+
29
+ def main():
30
+ """Função principal - executa indexação."""
31
+ try:
32
+ index = build_index()
33
+ skills_count = index.get('skills_count', 0)
34
+ subagents_count = index.get('subagents_count', 0)
35
+ keywords_count = len(index.get('keyword_map', {}))
36
+
37
+ # Output compacto para não poluir o chat
38
+ # Formato compatível com outros hooks SessionStart
39
+ print(f"Skills: {skills_count} | Sub-Agents: {subagents_count} | Keywords: {keywords_count}")
40
+
41
+ except Exception as e:
42
+ # Falha silenciosa para não bloquear sessão
43
+ # Erro é logado mas não impede uso do sistema
44
+ print(f"Skill indexer: {str(e)[:50]}")
45
+
46
+
47
+ if __name__ == "__main__":
48
+ main()
@@ -0,0 +1,358 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Skill Router - Sistema de Roteamento Semântico v2.0
4
+
5
+ Escaneia SKILLS e SUB-AGENTS, extrai metadados e faz matching com prompts.
6
+
7
+ REGRA #27: Skills são auto-ativadas quando keywords matcham no prompt do usuário.
8
+
9
+ v2.0 CHANGES:
10
+ - Adicionado suporte a SUB-AGENTS (/.claude/jarvis/sub-agents/)
11
+ - Campo "type": "skill" | "sub-agent" no índice
12
+ - Sub-agents têm AGENT.md + opcional SOUL.md
13
+ - Separação clara: sub-agents são súbditos do JARVIS, não do Council
14
+
15
+ ARQUITETURA:
16
+ ┌─────────────────────────────────────────────────────────────────────────────┐
17
+ │ /.claude/skills/ → SKILLS (auto-routing) │
18
+ │ /.claude/jarvis/sub-agents/ → SUB-AGENTS (auto-routing) │
19
+ │ /agents/ → CONCLAVE ONLY (via /conclave) │
20
+ └─────────────────────────────────────────────────────────────────────────────┘
21
+ """
22
+
23
+ import os
24
+ import re
25
+ import json
26
+ from pathlib import Path
27
+ from typing import Dict, List, Optional, Tuple
28
+
29
+ PROJECT_ROOT = Path(os.environ.get('CLAUDE_PROJECT_DIR', '.'))
30
+ SKILLS_PATH = PROJECT_ROOT / ".claude" / "skills"
31
+ SUBAGENTS_PATH = PROJECT_ROOT / ".claude" / "jarvis" / "sub-agents"
32
+ INDEX_PATH = PROJECT_ROOT / ".claude" / "mission-control" / "SKILL-INDEX.json"
33
+
34
+
35
+ def scan_skills() -> List[Tuple[Path, str]]:
36
+ """Lista todas as pastas de skills válidas com tipo."""
37
+ items = []
38
+
39
+ # Scan skills
40
+ if SKILLS_PATH.exists():
41
+ for item in SKILLS_PATH.iterdir():
42
+ if item.is_dir() and not item.name.startswith('_'):
43
+ skill_md = item / "SKILL.md"
44
+ if skill_md.exists():
45
+ items.append((item, "skill"))
46
+
47
+ # Scan sub-agents
48
+ if SUBAGENTS_PATH.exists():
49
+ for item in SUBAGENTS_PATH.iterdir():
50
+ if item.is_dir() and not item.name.startswith('_'):
51
+ agent_md = item / "AGENT.md"
52
+ if agent_md.exists():
53
+ items.append((item, "sub-agent"))
54
+
55
+ return items
56
+
57
+
58
+ def extract_metadata(item_path: Path, item_type: str) -> Dict:
59
+ """Extrai metadados de SKILL.md ou AGENT.md."""
60
+
61
+ if item_type == "skill":
62
+ md_file = item_path / "SKILL.md"
63
+ else:
64
+ md_file = item_path / "AGENT.md"
65
+
66
+ if not md_file.exists():
67
+ return {}
68
+
69
+ try:
70
+ content = md_file.read_text(encoding='utf-8')
71
+ except Exception:
72
+ return {}
73
+
74
+ # Extrai header (primeiras 40 linhas para garantir captura)
75
+ lines = content.split('\n')[:40]
76
+ header = '\n'.join(lines)
77
+
78
+ metadata = {
79
+ "path": str(item_path.relative_to(PROJECT_ROOT)),
80
+ "name": item_path.name,
81
+ "type": item_type,
82
+ "auto_trigger": "",
83
+ "keywords": [],
84
+ "priority": "MÉDIA",
85
+ "description": ""
86
+ }
87
+
88
+ # Auto-Trigger (múltiplos formatos)
89
+ for pattern in [r'\*\*Auto-Trigger:\*\*\s*(.+)', r'> \*\*Auto-Trigger:\*\*\s*(.+)']:
90
+ match = re.search(pattern, header)
91
+ if match:
92
+ metadata["auto_trigger"] = match.group(1).strip()
93
+ break
94
+
95
+ # Keywords - múltiplos formatos suportados
96
+ for pattern in [r'\*\*Keywords:\*\*\s*(.+)', r'> \*\*Keywords:\*\*\s*(.+)']:
97
+ match = re.search(pattern, header)
98
+ if match:
99
+ raw = match.group(1).strip()
100
+ # Parse keywords (pode ser "a", "b", "c" ou a, b, c ou [a, b, c])
101
+ keywords = re.findall(r'["\']?([^",\'\[\]]+)["\']?', raw)
102
+ metadata["keywords"] = [k.strip().lower() for k in keywords if k.strip() and len(k.strip()) > 1]
103
+ break
104
+
105
+ # Prioridade
106
+ for pattern in [r'\*\*Prioridade:\*\*\s*(ALTA|MÉDIA|BAIXA)', r'> \*\*Prioridade:\*\*\s*(ALTA|MÉDIA|BAIXA)']:
107
+ match = re.search(pattern, header, re.I)
108
+ if match:
109
+ metadata["priority"] = match.group(1).upper()
110
+ break
111
+
112
+ # Description (primeira linha após # Header)
113
+ match = re.search(r'^#\s+[^\n]+\n+##?\s*([^\n]+)', content)
114
+ if match:
115
+ metadata["description"] = match.group(1).strip()
116
+
117
+ # Para sub-agents, verificar se tem SOUL.md
118
+ if item_type == "sub-agent":
119
+ soul_path = item_path / "SOUL.md"
120
+ metadata["has_soul"] = soul_path.exists()
121
+
122
+ return metadata
123
+
124
+
125
+ def build_index() -> Dict:
126
+ """Constrói índice completo de skills e sub-agents."""
127
+ items = scan_skills()
128
+
129
+ index = {
130
+ "version": "2.0.0",
131
+ "skills_count": 0,
132
+ "subagents_count": 0,
133
+ "total_count": len(items),
134
+ "skills": {},
135
+ "subagents": {},
136
+ "keyword_map": {}
137
+ }
138
+
139
+ for item_path, item_type in items:
140
+ metadata = extract_metadata(item_path, item_type)
141
+ if metadata and metadata.get("keywords"):
142
+ item_name = metadata["name"]
143
+
144
+ if item_type == "skill":
145
+ index["skills"][item_name] = metadata
146
+ index["skills_count"] += 1
147
+ else:
148
+ index["subagents"][item_name] = metadata
149
+ index["subagents_count"] += 1
150
+
151
+ # Popula keyword_map (unificado)
152
+ for keyword in metadata.get("keywords", []):
153
+ if keyword not in index["keyword_map"]:
154
+ index["keyword_map"][keyword] = []
155
+ index["keyword_map"][keyword].append({
156
+ "name": item_name,
157
+ "type": item_type,
158
+ "path": metadata["path"],
159
+ "priority": metadata["priority"]
160
+ })
161
+
162
+ # Salva índice
163
+ INDEX_PATH.parent.mkdir(parents=True, exist_ok=True)
164
+ with open(INDEX_PATH, 'w', encoding='utf-8') as f:
165
+ json.dump(index, f, indent=2, ensure_ascii=False)
166
+
167
+ return index
168
+
169
+
170
+ def match_prompt(prompt: str, index: Dict = None) -> List[Dict]:
171
+ """Retorna skills e sub-agents que matcham com o prompt."""
172
+ if index is None:
173
+ if INDEX_PATH.exists():
174
+ try:
175
+ with open(INDEX_PATH, 'r', encoding='utf-8') as f:
176
+ index = json.load(f)
177
+ except Exception:
178
+ index = build_index()
179
+ else:
180
+ index = build_index()
181
+
182
+ prompt_lower = prompt.lower()
183
+ matches = []
184
+ seen_items = set()
185
+
186
+ # Ordem de prioridade
187
+ priority_order = {"ALTA": 0, "MÉDIA": 1, "BAIXA": 2}
188
+
189
+ for keyword, item_list in index.get("keyword_map", {}).items():
190
+ # Match por palavra inteira ou substring significativa
191
+ if keyword in prompt_lower:
192
+ for item_info in item_list:
193
+ item_name = item_info["name"]
194
+ if item_name not in seen_items:
195
+ seen_items.add(item_name)
196
+ matches.append({
197
+ "name": item_name,
198
+ "type": item_info["type"],
199
+ "path": item_info["path"],
200
+ "priority": item_info["priority"],
201
+ "matched_keyword": keyword
202
+ })
203
+
204
+ # Ordena por prioridade
205
+ matches.sort(key=lambda x: priority_order.get(x["priority"], 1))
206
+
207
+ return matches
208
+
209
+
210
+ def get_skill_instructions(skill_path: str) -> str:
211
+ """Retorna instruções principais da skill para injeção."""
212
+ full_path = PROJECT_ROOT / skill_path / "SKILL.md"
213
+ if not full_path.exists():
214
+ return ""
215
+
216
+ try:
217
+ content = full_path.read_text(encoding='utf-8')
218
+ except Exception:
219
+ return ""
220
+
221
+ # Retorna primeiras 100 linhas (instruções principais)
222
+ lines = content.split('\n')[:100]
223
+ return '\n'.join(lines)
224
+
225
+
226
+ def get_skill_summary(skill_path: str) -> str:
227
+ """Retorna resumo curto da skill (primeiras 20 linhas)."""
228
+ full_path = PROJECT_ROOT / skill_path / "SKILL.md"
229
+ if not full_path.exists():
230
+ return ""
231
+
232
+ try:
233
+ content = full_path.read_text(encoding='utf-8')
234
+ except Exception:
235
+ return ""
236
+
237
+ lines = content.split('\n')[:20]
238
+ return '\n'.join(lines)
239
+
240
+
241
+ def get_subagent_context(subagent_path: str) -> str:
242
+ """Retorna contexto completo do sub-agent (AGENT.md + SOUL.md se existir)."""
243
+ base_path = PROJECT_ROOT / subagent_path
244
+
245
+ context_parts = []
246
+
247
+ # AGENT.md (obrigatório)
248
+ agent_md = base_path / "AGENT.md"
249
+ if agent_md.exists():
250
+ try:
251
+ content = agent_md.read_text(encoding='utf-8')
252
+ # Primeiras 150 linhas do AGENT.md
253
+ lines = content.split('\n')[:150]
254
+ context_parts.append("=== AGENT INSTRUCTIONS ===\n" + '\n'.join(lines))
255
+ except Exception:
256
+ pass
257
+
258
+ # SOUL.md (opcional - personalidade)
259
+ soul_md = base_path / "SOUL.md"
260
+ if soul_md.exists():
261
+ try:
262
+ content = soul_md.read_text(encoding='utf-8')
263
+ # Primeiras 50 linhas do SOUL.md (personalidade é mais compacta)
264
+ lines = content.split('\n')[:50]
265
+ context_parts.append("\n=== AGENT PERSONALITY ===\n" + '\n'.join(lines))
266
+ except Exception:
267
+ pass
268
+
269
+ return '\n'.join(context_parts)
270
+
271
+
272
+ def get_item_context(item_path: str, item_type: str) -> str:
273
+ """Retorna contexto apropriado baseado no tipo."""
274
+ if item_type == "skill":
275
+ return get_skill_summary(item_path)
276
+ else:
277
+ return get_subagent_context(item_path)
278
+
279
+
280
+ def main():
281
+ """
282
+ Hook entry point for Claude Code UserPromptSubmit event.
283
+ Reads JSON from stdin, outputs JSON to stdout.
284
+ """
285
+ import sys
286
+
287
+ try:
288
+ input_data = sys.stdin.read()
289
+ hook_input = json.loads(input_data) if input_data else {}
290
+
291
+ prompt = hook_input.get('prompt', '')
292
+ if not prompt:
293
+ print(json.dumps({'continue': True}))
294
+ return
295
+
296
+ matches = match_prompt(prompt)
297
+
298
+ if not matches:
299
+ print(json.dumps({'continue': True}))
300
+ return
301
+
302
+ top = matches[0]
303
+ item_type = top.get('type', 'skill')
304
+ item_name = top.get('name', 'unknown')
305
+
306
+ context = get_item_context(top['path'], item_type)
307
+
308
+ if context:
309
+ type_label = "SKILL" if item_type == "skill" else "SUB-AGENT"
310
+ feedback = f"[{type_label} AUTO-ACTIVATED: {item_name}]\n"
311
+ feedback += f"Keyword: \"{top['matched_keyword']}\"\n"
312
+ feedback += f"Priority: {top['priority']}\n\n"
313
+ feedback += context
314
+
315
+ print(json.dumps({'continue': True, 'feedback': feedback}))
316
+ else:
317
+ print(json.dumps({'continue': True}))
318
+
319
+ except Exception:
320
+ print(json.dumps({'continue': True}))
321
+
322
+
323
+ def cli_test():
324
+ """CLI test mode - run directly for debugging."""
325
+ index = build_index()
326
+ print(f"Skills indexadas: {index['skills_count']}")
327
+ print(f"Sub-agents indexados: {index['subagents_count']}")
328
+ print(f"Total: {index['total_count']}")
329
+ print(f"Keywords mapeadas: {len(index['keyword_map'])}")
330
+
331
+ print("\nKeywords disponíveis:")
332
+ for kw in sorted(index['keyword_map'].keys()):
333
+ items = [f"{s['name']} ({s['type']})" for s in index['keyword_map'][kw]]
334
+ print(f" '{kw}' → {items}")
335
+
336
+ test_prompts = [
337
+ "preciso analisar este PDF",
338
+ "criar uma planilha excel",
339
+ "jarvis, status do sistema",
340
+ "processar vídeo do youtube"
341
+ ]
342
+
343
+ for test_prompt in test_prompts:
344
+ matches = match_prompt(test_prompt, index)
345
+ print(f"\nMatches para '{test_prompt}':")
346
+ if matches:
347
+ for m in matches:
348
+ print(f" - {m['name']} ({m['type']}, keyword: {m['matched_keyword']}, priority: {m['priority']})")
349
+ else:
350
+ print(" (nenhum match)")
351
+
352
+
353
+ if __name__ == "__main__":
354
+ import sys
355
+ if len(sys.argv) > 1 and sys.argv[1] == '--test':
356
+ cli_test()
357
+ else:
358
+ main()
@@ -0,0 +1,187 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ STOP HOOK - TASK COMPLETENESS CHECKER
4
+ =====================================
5
+ Intercepta quando Claude quer parar e verifica se a tarefa realmente completou.
6
+
7
+ Baseado no workflow Boris Cherny: Stop hooks para tarefas longas
8
+
9
+ Verifica:
10
+ 1. Se havia uma tarefa em andamento (LEDGER.md)
11
+ 2. Se a tarefa foi completada
12
+ 3. Se há arquivos pendentes no INBOX
13
+ 4. Se há batches incompletos
14
+
15
+ Output:
16
+ - Se completo: exit 0 (permite parar)
17
+ - Se incompleto: print mensagem sugerindo continuar
18
+ """
19
+
20
+ import sys
21
+ import os
22
+ import json
23
+ from pathlib import Path
24
+ from datetime import datetime
25
+
26
+ # Fix Windows cp1252 encoding
27
+ if sys.platform == 'win32':
28
+ sys.stdout.reconfigure(encoding='utf-8', errors='replace')
29
+ sys.stderr.reconfigure(encoding='utf-8', errors='replace')
30
+
31
+ PROJECT_ROOT = Path(os.environ.get('CLAUDE_PROJECT_DIR', '.'))
32
+ MISSION_CONTROL = PROJECT_ROOT / '.claude' / 'mission-control'
33
+ LEDGER_PATH = PROJECT_ROOT / '.claude' / 'LEDGER.md'
34
+ INBOX_PATH = PROJECT_ROOT / 'inbox'
35
+ LOGS_PATH = PROJECT_ROOT / 'logs' / 'stop_hooks'
36
+ LOGS_PATH.mkdir(parents=True, exist_ok=True)
37
+
38
+ def count_inbox_files() -> int:
39
+ """Count processable files in INBOX"""
40
+ if not INBOX_PATH.exists():
41
+ return 0
42
+
43
+ count = 0
44
+ exclude_patterns = ['_DUPLICATAS', '_BACKUP', '.DS_Store', '_INDEX']
45
+
46
+ for item in INBOX_PATH.rglob('*'):
47
+ if item.is_file():
48
+ # Skip excluded patterns
49
+ if any(excl in str(item) for excl in exclude_patterns):
50
+ continue
51
+ # Count txt, md, docx files
52
+ if item.suffix.lower() in ['.txt', '.md', '.docx', '.pdf']:
53
+ count += 1
54
+
55
+ return count
56
+
57
+ def check_pending_batches() -> tuple[int, int]:
58
+ """Check if there are pending batches based on MISSION-STATE"""
59
+ state_file = MISSION_CONTROL / 'MISSION-STATE.json'
60
+
61
+ if not state_file.exists():
62
+ return 0, 0
63
+
64
+ try:
65
+ with open(state_file, 'r') as f:
66
+ state = json.load(f)
67
+
68
+ current = state.get('current_state', {})
69
+ batch_current = current.get('batch_current', 0)
70
+ batch_total = current.get('batch_total', 0)
71
+
72
+ return batch_current, batch_total
73
+ except Exception:
74
+ return 0, 0
75
+
76
+ def read_ledger() -> dict:
77
+ """Read current ledger state"""
78
+ if not LEDGER_PATH.exists():
79
+ return {}
80
+
81
+ try:
82
+ content = LEDGER_PATH.read_text()
83
+
84
+ # Parse simple ledger format
85
+ ledger = {
86
+ 'has_pending_task': '⏳' in content or 'PENDING' in content.upper(),
87
+ 'last_task': '',
88
+ 'next_action': ''
89
+ }
90
+
91
+ # Extract next action
92
+ if 'Próxima Ação:' in content or 'Next Action:' in content:
93
+ lines = content.split('\n')
94
+ for i, line in enumerate(lines):
95
+ if 'Próxima Ação' in line or 'Next Action' in line:
96
+ if i + 1 < len(lines):
97
+ ledger['next_action'] = lines[i + 1].strip('- ')
98
+
99
+ return ledger
100
+ except Exception:
101
+ return {}
102
+
103
+ def log_stop_check(reason: str, should_continue: bool, details: dict):
104
+ """Log stop check"""
105
+ log_file = LOGS_PATH / 'stop_checks.jsonl'
106
+ entry = {
107
+ 'timestamp': datetime.now().isoformat(),
108
+ 'reason': reason,
109
+ 'should_continue': should_continue,
110
+ 'details': details
111
+ }
112
+ with open(log_file, 'a') as f:
113
+ f.write(json.dumps(entry) + '\n')
114
+
115
+ def check_completeness():
116
+ """Core completeness check logic. Returns list of issues."""
117
+ issues = []
118
+ details = {}
119
+
120
+ # Check 1: INBOX files
121
+ inbox_count = count_inbox_files()
122
+ details['inbox_files'] = inbox_count
123
+ if inbox_count > 10:
124
+ issues.append(f"INBOX has {inbox_count} files waiting to be processed")
125
+
126
+ # Check 2: Pending batches
127
+ batch_current, batch_total = check_pending_batches()
128
+ details['batch_current'] = batch_current
129
+ details['batch_total'] = batch_total
130
+ if batch_total > 0 and batch_current < batch_total:
131
+ remaining = batch_total - batch_current
132
+ issues.append(f"Batch processing incomplete: {batch_current}/{batch_total} ({remaining} remaining)")
133
+
134
+ # Check 3: Ledger pending tasks
135
+ ledger = read_ledger()
136
+ details['ledger'] = ledger
137
+ if ledger.get('has_pending_task'):
138
+ next_action = ledger.get('next_action', 'Unknown')
139
+ issues.append(f"Ledger shows pending task: {next_action}")
140
+
141
+ # Log the check
142
+ log_stop_check('stop_hook_check', len(issues) > 0, details)
143
+
144
+ return issues
145
+
146
+
147
+ def main():
148
+ """
149
+ Hook entry point for Claude Code Stop event.
150
+ Reads JSON from stdin, outputs JSON to stdout.
151
+ Must output valid JSON per Anthropic hook standards.
152
+ """
153
+ try:
154
+ issues = check_completeness()
155
+
156
+ if issues:
157
+ feedback = "Tasks may be incomplete: " + "; ".join(issues)
158
+ result = {"continue": True, "feedback": feedback}
159
+ else:
160
+ result = {"continue": True, "feedback": "All clear, no pending tasks detected."}
161
+
162
+ print(json.dumps(result))
163
+ sys.exit(0)
164
+
165
+ except Exception as e:
166
+ # Even on error, output valid JSON
167
+ result = {"continue": True, "feedback": f"Stop hook check error: {e}"}
168
+ print(json.dumps(result))
169
+ sys.exit(0)
170
+
171
+
172
+ def cli_test():
173
+ """CLI test mode - run directly for debugging."""
174
+ issues = check_completeness()
175
+ if issues:
176
+ print("STOP HOOK: Tasks may be incomplete")
177
+ for issue in issues:
178
+ print(f" - {issue}")
179
+ else:
180
+ print("STOP HOOK: All clear, no pending tasks detected.")
181
+
182
+
183
+ if __name__ == '__main__':
184
+ if len(sys.argv) > 1 and sys.argv[1] == '--test':
185
+ cli_test()
186
+ else:
187
+ main()