@jaguilar87/gaia 5.0.0-rc1

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 (609) hide show
  1. package/.claude-plugin/marketplace.json +33 -0
  2. package/.claude-plugin/plugin.json +26 -0
  3. package/ARCHITECTURE.md +335 -0
  4. package/CHANGELOG.md +1212 -0
  5. package/CODE_OF_CONDUCT.md +11 -0
  6. package/CONTRIBUTING.md +146 -0
  7. package/INSTALL.md +436 -0
  8. package/LICENSE +21 -0
  9. package/README.md +222 -0
  10. package/SECURITY.md +47 -0
  11. package/agents/README.md +78 -0
  12. package/agents/cloud-troubleshooter.md +73 -0
  13. package/agents/developer.md +65 -0
  14. package/agents/gaia-operator.md +64 -0
  15. package/agents/gaia-orchestrator.md +237 -0
  16. package/agents/gaia-planner.md +53 -0
  17. package/agents/gaia-system.md +70 -0
  18. package/agents/gitops-operator.md +61 -0
  19. package/agents/terraform-architect.md +63 -0
  20. package/bin/README.md +106 -0
  21. package/bin/cli/__init__.py +1 -0
  22. package/bin/cli/approvals.py +740 -0
  23. package/bin/cli/cleanup.py +562 -0
  24. package/bin/cli/context.py +283 -0
  25. package/bin/cli/doctor.py +628 -0
  26. package/bin/cli/history.py +305 -0
  27. package/bin/cli/memory.py +464 -0
  28. package/bin/cli/metrics.py +1068 -0
  29. package/bin/cli/plans.py +515 -0
  30. package/bin/cli/status.py +302 -0
  31. package/bin/cli/update.py +382 -0
  32. package/bin/gaia +112 -0
  33. package/bin/gaia-cleanup.js +531 -0
  34. package/bin/gaia-doctor.js +635 -0
  35. package/bin/gaia-evidence +126 -0
  36. package/bin/gaia-history.js +251 -0
  37. package/bin/gaia-metrics.js +1278 -0
  38. package/bin/gaia-review.js +269 -0
  39. package/bin/gaia-scan +44 -0
  40. package/bin/gaia-scan.py +589 -0
  41. package/bin/gaia-skills-diagnose.js +929 -0
  42. package/bin/gaia-status.js +278 -0
  43. package/bin/gaia-uninstall.js +111 -0
  44. package/bin/gaia-update.js +816 -0
  45. package/bin/pre-publish-validate.js +610 -0
  46. package/bin/python-detect.js +60 -0
  47. package/commands/README.md +64 -0
  48. package/commands/gaia.md +37 -0
  49. package/commands/scan-project.md +67 -0
  50. package/config/README.md +71 -0
  51. package/config/cloud/aws.json +134 -0
  52. package/config/cloud/gcp.json +139 -0
  53. package/config/context-contracts.json +158 -0
  54. package/config/crons-schema.md +81 -0
  55. package/config/git_standards.json +72 -0
  56. package/config/surface-routing.json +421 -0
  57. package/config/universal-rules.json +102 -0
  58. package/dist/gaia-ops/.claude-plugin/plugin.json +24 -0
  59. package/dist/gaia-ops/README.md +80 -0
  60. package/dist/gaia-ops/agents/cloud-troubleshooter.md +73 -0
  61. package/dist/gaia-ops/agents/developer.md +65 -0
  62. package/dist/gaia-ops/agents/gaia-operator.md +64 -0
  63. package/dist/gaia-ops/agents/gaia-orchestrator.md +237 -0
  64. package/dist/gaia-ops/agents/gaia-planner.md +53 -0
  65. package/dist/gaia-ops/agents/gaia-system.md +70 -0
  66. package/dist/gaia-ops/agents/gitops-operator.md +61 -0
  67. package/dist/gaia-ops/agents/terraform-architect.md +63 -0
  68. package/dist/gaia-ops/commands/gaia.md +37 -0
  69. package/dist/gaia-ops/config/README.md +71 -0
  70. package/dist/gaia-ops/config/cloud/aws.json +134 -0
  71. package/dist/gaia-ops/config/cloud/gcp.json +139 -0
  72. package/dist/gaia-ops/config/context-contracts.json +158 -0
  73. package/dist/gaia-ops/config/crons-schema.md +81 -0
  74. package/dist/gaia-ops/config/git_standards.json +72 -0
  75. package/dist/gaia-ops/config/surface-routing.json +421 -0
  76. package/dist/gaia-ops/config/universal-rules.json +102 -0
  77. package/dist/gaia-ops/hooks/adapters/__init__.py +52 -0
  78. package/dist/gaia-ops/hooks/adapters/base.py +219 -0
  79. package/dist/gaia-ops/hooks/adapters/channel.py +17 -0
  80. package/dist/gaia-ops/hooks/adapters/claude_code.py +1890 -0
  81. package/dist/gaia-ops/hooks/adapters/types.py +194 -0
  82. package/dist/gaia-ops/hooks/adapters/utils.py +25 -0
  83. package/dist/gaia-ops/hooks/hooks.json +163 -0
  84. package/dist/gaia-ops/hooks/modules/__init__.py +15 -0
  85. package/dist/gaia-ops/hooks/modules/agents/__init__.py +29 -0
  86. package/dist/gaia-ops/hooks/modules/agents/contract_validator.py +647 -0
  87. package/dist/gaia-ops/hooks/modules/agents/response_contract.py +496 -0
  88. package/dist/gaia-ops/hooks/modules/agents/skill_injection_verifier.py +120 -0
  89. package/dist/gaia-ops/hooks/modules/agents/state_tracker.py +267 -0
  90. package/dist/gaia-ops/hooks/modules/agents/task_info_builder.py +74 -0
  91. package/dist/gaia-ops/hooks/modules/agents/transcript_analyzer.py +458 -0
  92. package/dist/gaia-ops/hooks/modules/agents/transcript_reader.py +152 -0
  93. package/dist/gaia-ops/hooks/modules/audit/__init__.py +28 -0
  94. package/dist/gaia-ops/hooks/modules/audit/event_detector.py +168 -0
  95. package/dist/gaia-ops/hooks/modules/audit/logger.py +131 -0
  96. package/dist/gaia-ops/hooks/modules/audit/metrics.py +134 -0
  97. package/dist/gaia-ops/hooks/modules/audit/workflow_auditor.py +611 -0
  98. package/dist/gaia-ops/hooks/modules/audit/workflow_recorder.py +296 -0
  99. package/dist/gaia-ops/hooks/modules/context/__init__.py +11 -0
  100. package/dist/gaia-ops/hooks/modules/context/agentic_loop_detector.py +165 -0
  101. package/dist/gaia-ops/hooks/modules/context/anchor_tracker.py +317 -0
  102. package/dist/gaia-ops/hooks/modules/context/compact_context_builder.py +218 -0
  103. package/dist/gaia-ops/hooks/modules/context/context_freshness.py +145 -0
  104. package/dist/gaia-ops/hooks/modules/context/context_injector.py +558 -0
  105. package/dist/gaia-ops/hooks/modules/context/context_writer.py +530 -0
  106. package/dist/gaia-ops/hooks/modules/context/contracts_loader.py +161 -0
  107. package/dist/gaia-ops/hooks/modules/core/__init__.py +40 -0
  108. package/dist/gaia-ops/hooks/modules/core/hook_entry.py +78 -0
  109. package/dist/gaia-ops/hooks/modules/core/paths.py +160 -0
  110. package/dist/gaia-ops/hooks/modules/core/plugin_mode.py +149 -0
  111. package/dist/gaia-ops/hooks/modules/core/plugin_setup.py +577 -0
  112. package/dist/gaia-ops/hooks/modules/core/state.py +179 -0
  113. package/dist/gaia-ops/hooks/modules/core/stdin.py +24 -0
  114. package/dist/gaia-ops/hooks/modules/events/__init__.py +1 -0
  115. package/dist/gaia-ops/hooks/modules/events/event_writer.py +210 -0
  116. package/dist/gaia-ops/hooks/modules/memory/__init__.py +8 -0
  117. package/dist/gaia-ops/hooks/modules/memory/episode_writer.py +216 -0
  118. package/dist/gaia-ops/hooks/modules/orchestrator/__init__.py +1 -0
  119. package/dist/gaia-ops/hooks/modules/orchestrator/delegate_mode.py +122 -0
  120. package/dist/gaia-ops/hooks/modules/scanning/__init__.py +8 -0
  121. package/dist/gaia-ops/hooks/modules/scanning/scan_trigger.py +84 -0
  122. package/dist/gaia-ops/hooks/modules/security/__init__.py +120 -0
  123. package/dist/gaia-ops/hooks/modules/security/approval_cleanup.py +87 -0
  124. package/dist/gaia-ops/hooks/modules/security/approval_constants.py +23 -0
  125. package/dist/gaia-ops/hooks/modules/security/approval_grants.py +1638 -0
  126. package/dist/gaia-ops/hooks/modules/security/approval_messages.py +71 -0
  127. package/dist/gaia-ops/hooks/modules/security/approval_scopes.py +222 -0
  128. package/dist/gaia-ops/hooks/modules/security/blocked_commands.py +595 -0
  129. package/dist/gaia-ops/hooks/modules/security/blocked_message_formatter.py +87 -0
  130. package/dist/gaia-ops/hooks/modules/security/command_semantics.py +181 -0
  131. package/dist/gaia-ops/hooks/modules/security/composition_rules.py +547 -0
  132. package/dist/gaia-ops/hooks/modules/security/flag_classifiers.py +873 -0
  133. package/dist/gaia-ops/hooks/modules/security/gitops_validator.py +179 -0
  134. package/dist/gaia-ops/hooks/modules/security/mutative_verbs.py +1131 -0
  135. package/dist/gaia-ops/hooks/modules/security/network_hosts.py +481 -0
  136. package/dist/gaia-ops/hooks/modules/security/prompt_validator.py +40 -0
  137. package/dist/gaia-ops/hooks/modules/security/shell_unwrapper.py +165 -0
  138. package/dist/gaia-ops/hooks/modules/security/tiers.py +196 -0
  139. package/dist/gaia-ops/hooks/modules/session/__init__.py +10 -0
  140. package/dist/gaia-ops/hooks/modules/session/pending_scanner.py +174 -0
  141. package/dist/gaia-ops/hooks/modules/session/session_context_writer.py +100 -0
  142. package/dist/gaia-ops/hooks/modules/session/session_event_injector.py +160 -0
  143. package/dist/gaia-ops/hooks/modules/session/session_manager.py +31 -0
  144. package/dist/gaia-ops/hooks/modules/session/session_registry.py +232 -0
  145. package/dist/gaia-ops/hooks/modules/tools/__init__.py +29 -0
  146. package/dist/gaia-ops/hooks/modules/tools/bash_validator.py +1008 -0
  147. package/dist/gaia-ops/hooks/modules/tools/cloud_pipe_validator.py +231 -0
  148. package/dist/gaia-ops/hooks/modules/tools/hook_response.py +55 -0
  149. package/dist/gaia-ops/hooks/modules/tools/shell_parser.py +227 -0
  150. package/dist/gaia-ops/hooks/modules/tools/stage_decomposer.py +315 -0
  151. package/dist/gaia-ops/hooks/modules/tools/task_validator.py +294 -0
  152. package/dist/gaia-ops/hooks/modules/validation/__init__.py +23 -0
  153. package/dist/gaia-ops/hooks/modules/validation/commit_validator.py +380 -0
  154. package/dist/gaia-ops/hooks/post_compact.py +43 -0
  155. package/dist/gaia-ops/hooks/post_tool_use.py +54 -0
  156. package/dist/gaia-ops/hooks/pre_compact.py +60 -0
  157. package/dist/gaia-ops/hooks/pre_tool_use.py +413 -0
  158. package/dist/gaia-ops/hooks/session_start.py +81 -0
  159. package/dist/gaia-ops/hooks/stop_hook.py +82 -0
  160. package/dist/gaia-ops/hooks/subagent_start.py +71 -0
  161. package/dist/gaia-ops/hooks/subagent_stop.py +295 -0
  162. package/dist/gaia-ops/hooks/task_completed.py +70 -0
  163. package/dist/gaia-ops/hooks/user_prompt_submit.py +246 -0
  164. package/dist/gaia-ops/settings.json +72 -0
  165. package/dist/gaia-ops/skills/README.md +154 -0
  166. package/dist/gaia-ops/skills/agent-protocol/SKILL.md +93 -0
  167. package/dist/gaia-ops/skills/agent-protocol/examples.md +223 -0
  168. package/dist/gaia-ops/skills/agent-response/SKILL.md +69 -0
  169. package/dist/gaia-ops/skills/agentic-loop/SKILL.md +80 -0
  170. package/dist/gaia-ops/skills/agentic-loop/reference.md +378 -0
  171. package/dist/gaia-ops/skills/blog-writing/SKILL.md +98 -0
  172. package/dist/gaia-ops/skills/blog-writing/reference.md +130 -0
  173. package/dist/gaia-ops/skills/brief-spec/SKILL.md +182 -0
  174. package/dist/gaia-ops/skills/command-execution/SKILL.md +64 -0
  175. package/dist/gaia-ops/skills/command-execution/reference.md +83 -0
  176. package/dist/gaia-ops/skills/context-updater/SKILL.md +87 -0
  177. package/dist/gaia-ops/skills/context-updater/examples.md +71 -0
  178. package/dist/gaia-ops/skills/developer-patterns/SKILL.md +50 -0
  179. package/dist/gaia-ops/skills/developer-patterns/reference.md +112 -0
  180. package/dist/gaia-ops/skills/execution/SKILL.md +99 -0
  181. package/dist/gaia-ops/skills/fast-queries/SKILL.md +43 -0
  182. package/dist/gaia-ops/skills/gaia-compact/SKILL.md +74 -0
  183. package/dist/gaia-ops/skills/gaia-patterns/SKILL.md +108 -0
  184. package/dist/gaia-ops/skills/gaia-patterns/reference.md +395 -0
  185. package/dist/gaia-ops/skills/gaia-planner/SKILL.md +37 -0
  186. package/dist/gaia-ops/skills/gaia-planner/reference.md +107 -0
  187. package/dist/gaia-ops/skills/gaia-release/SKILL.md +82 -0
  188. package/dist/gaia-ops/skills/gaia-release/reference.md +102 -0
  189. package/dist/gaia-ops/skills/gaia-self-check/SKILL.md +114 -0
  190. package/dist/gaia-ops/skills/gaia-self-check/reference.md +453 -0
  191. package/dist/gaia-ops/skills/gaia-verify/SKILL.md +77 -0
  192. package/dist/gaia-ops/skills/gaia-verify/reference.md +80 -0
  193. package/dist/gaia-ops/skills/git-conventions/SKILL.md +47 -0
  194. package/dist/gaia-ops/skills/gitops-patterns/SKILL.md +60 -0
  195. package/dist/gaia-ops/skills/gitops-patterns/reference.md +183 -0
  196. package/dist/gaia-ops/skills/gmail-policy/SKILL.md +200 -0
  197. package/dist/gaia-ops/skills/gmail-policy/reference.md +150 -0
  198. package/dist/gaia-ops/skills/gmail-triage/SKILL.md +100 -0
  199. package/dist/gaia-ops/skills/gws-setup/SKILL.md +99 -0
  200. package/dist/gaia-ops/skills/gws-setup/reference.md +73 -0
  201. package/dist/gaia-ops/skills/investigation/SKILL.md +100 -0
  202. package/dist/gaia-ops/skills/memory-curation/SKILL.md +83 -0
  203. package/dist/gaia-ops/skills/memory-search/SKILL.md +88 -0
  204. package/dist/gaia-ops/skills/orchestrator-approval/SKILL.md +160 -0
  205. package/dist/gaia-ops/skills/orchestrator-approval/reference.md +174 -0
  206. package/dist/gaia-ops/skills/pending-approvals/SKILL.md +72 -0
  207. package/dist/gaia-ops/skills/pending-approvals/reference.md +214 -0
  208. package/dist/gaia-ops/skills/readme-writing/SKILL.md +71 -0
  209. package/dist/gaia-ops/skills/readme-writing/reference.md +188 -0
  210. package/dist/gaia-ops/skills/reference.md +135 -0
  211. package/dist/gaia-ops/skills/request-approval/SKILL.md +140 -0
  212. package/dist/gaia-ops/skills/request-approval/examples.md +140 -0
  213. package/dist/gaia-ops/skills/request-approval/reference.md +57 -0
  214. package/dist/gaia-ops/skills/schedule-task/SKILL.md +64 -0
  215. package/dist/gaia-ops/skills/schedule-task/reference.md +233 -0
  216. package/dist/gaia-ops/skills/security-tiers/SKILL.md +141 -0
  217. package/dist/gaia-ops/skills/security-tiers/destructive-commands-reference.md +623 -0
  218. package/dist/gaia-ops/skills/security-tiers/reference.md +39 -0
  219. package/dist/gaia-ops/skills/skill-creation/SKILL.md +92 -0
  220. package/dist/gaia-ops/skills/skill-creation/reference.md +29 -0
  221. package/dist/gaia-ops/skills/terraform-patterns/SKILL.md +89 -0
  222. package/dist/gaia-ops/skills/terraform-patterns/reference.md +93 -0
  223. package/dist/gaia-ops/tools/__init__.py +9 -0
  224. package/dist/gaia-ops/tools/agentic-loop/decide-status.py +210 -0
  225. package/dist/gaia-ops/tools/agentic-loop/parse-metric.py +106 -0
  226. package/dist/gaia-ops/tools/agentic-loop/record-iteration.py +221 -0
  227. package/dist/gaia-ops/tools/context/README.md +132 -0
  228. package/dist/gaia-ops/tools/context/__init__.py +42 -0
  229. package/dist/gaia-ops/tools/context/_paths.py +20 -0
  230. package/dist/gaia-ops/tools/context/context_provider.py +721 -0
  231. package/dist/gaia-ops/tools/context/context_section_reader.py +342 -0
  232. package/dist/gaia-ops/tools/context/deep_merge.py +159 -0
  233. package/dist/gaia-ops/tools/context/pending_updates.py +760 -0
  234. package/dist/gaia-ops/tools/context/surface_router.py +278 -0
  235. package/dist/gaia-ops/tools/fast-queries/README.md +65 -0
  236. package/dist/gaia-ops/tools/fast-queries/__init__.py +30 -0
  237. package/dist/gaia-ops/tools/fast-queries/appservices/quicktriage_devops_developer.sh +75 -0
  238. package/dist/gaia-ops/tools/fast-queries/cloud/aws/quicktriage_aws_troubleshooter.sh +32 -0
  239. package/dist/gaia-ops/tools/fast-queries/cloud/gcp/quicktriage_gcp_troubleshooter.sh +88 -0
  240. package/dist/gaia-ops/tools/fast-queries/gitops/quicktriage_gitops_operator.sh +48 -0
  241. package/dist/gaia-ops/tools/fast-queries/run_triage.sh +59 -0
  242. package/dist/gaia-ops/tools/fast-queries/terraform/quicktriage_terraform_architect.sh +80 -0
  243. package/dist/gaia-ops/tools/gaia_simulator/__init__.py +33 -0
  244. package/dist/gaia-ops/tools/gaia_simulator/cli.py +354 -0
  245. package/dist/gaia-ops/tools/gaia_simulator/extractor.py +457 -0
  246. package/dist/gaia-ops/tools/gaia_simulator/reporter.py +258 -0
  247. package/dist/gaia-ops/tools/gaia_simulator/routing_simulator.py +334 -0
  248. package/dist/gaia-ops/tools/gaia_simulator/runner.py +539 -0
  249. package/dist/gaia-ops/tools/gaia_simulator/skills_mapper.py +264 -0
  250. package/dist/gaia-ops/tools/memory/README.md +0 -0
  251. package/dist/gaia-ops/tools/memory/__init__.py +20 -0
  252. package/dist/gaia-ops/tools/memory/backfill_fts5.py +107 -0
  253. package/dist/gaia-ops/tools/memory/conflict_detector.py +295 -0
  254. package/dist/gaia-ops/tools/memory/episodic.py +1210 -0
  255. package/dist/gaia-ops/tools/memory/git_invalidator.py +262 -0
  256. package/dist/gaia-ops/tools/memory/paths.py +102 -0
  257. package/dist/gaia-ops/tools/memory/scoring.py +193 -0
  258. package/dist/gaia-ops/tools/memory/search_store.py +360 -0
  259. package/dist/gaia-ops/tools/persist_transcript_analysis.py +85 -0
  260. package/dist/gaia-ops/tools/review/__init__.py +1 -0
  261. package/dist/gaia-ops/tools/review/review_engine.py +157 -0
  262. package/dist/gaia-ops/tools/scan/__init__.py +35 -0
  263. package/dist/gaia-ops/tools/scan/config.py +247 -0
  264. package/dist/gaia-ops/tools/scan/merge.py +212 -0
  265. package/dist/gaia-ops/tools/scan/orchestrator.py +549 -0
  266. package/dist/gaia-ops/tools/scan/registry.py +127 -0
  267. package/dist/gaia-ops/tools/scan/scanners/__init__.py +18 -0
  268. package/dist/gaia-ops/tools/scan/scanners/base.py +137 -0
  269. package/dist/gaia-ops/tools/scan/scanners/environment.py +349 -0
  270. package/dist/gaia-ops/tools/scan/scanners/git.py +570 -0
  271. package/dist/gaia-ops/tools/scan/scanners/infrastructure.py +875 -0
  272. package/dist/gaia-ops/tools/scan/scanners/orchestration.py +600 -0
  273. package/dist/gaia-ops/tools/scan/scanners/stack.py +1085 -0
  274. package/dist/gaia-ops/tools/scan/scanners/tools.py +260 -0
  275. package/dist/gaia-ops/tools/scan/setup.py +686 -0
  276. package/dist/gaia-ops/tools/scan/tests/__init__.py +1 -0
  277. package/dist/gaia-ops/tools/scan/tests/conftest.py +796 -0
  278. package/dist/gaia-ops/tools/scan/tests/test_environment.py +323 -0
  279. package/dist/gaia-ops/tools/scan/tests/test_git.py +419 -0
  280. package/dist/gaia-ops/tools/scan/tests/test_infrastructure.py +382 -0
  281. package/dist/gaia-ops/tools/scan/tests/test_integration.py +920 -0
  282. package/dist/gaia-ops/tools/scan/tests/test_merge.py +269 -0
  283. package/dist/gaia-ops/tools/scan/tests/test_orchestration.py +304 -0
  284. package/dist/gaia-ops/tools/scan/tests/test_stack.py +604 -0
  285. package/dist/gaia-ops/tools/scan/tests/test_tools.py +349 -0
  286. package/dist/gaia-ops/tools/scan/ui.py +624 -0
  287. package/dist/gaia-ops/tools/scan/verify.py +270 -0
  288. package/dist/gaia-ops/tools/scan/walk.py +118 -0
  289. package/dist/gaia-ops/tools/scan/workspace.py +85 -0
  290. package/dist/gaia-ops/tools/validation/README.md +244 -0
  291. package/dist/gaia-ops/tools/validation/__init__.py +17 -0
  292. package/dist/gaia-ops/tools/validation/approval_gate.py +321 -0
  293. package/dist/gaia-ops/tools/validation/validate_skills.py +189 -0
  294. package/dist/gaia-security/.claude-plugin/plugin.json +24 -0
  295. package/dist/gaia-security/README.md +90 -0
  296. package/dist/gaia-security/config/universal-rules.json +102 -0
  297. package/dist/gaia-security/hooks/adapters/__init__.py +52 -0
  298. package/dist/gaia-security/hooks/adapters/base.py +219 -0
  299. package/dist/gaia-security/hooks/adapters/channel.py +17 -0
  300. package/dist/gaia-security/hooks/adapters/claude_code.py +1890 -0
  301. package/dist/gaia-security/hooks/adapters/types.py +194 -0
  302. package/dist/gaia-security/hooks/adapters/utils.py +25 -0
  303. package/dist/gaia-security/hooks/hooks.json +84 -0
  304. package/dist/gaia-security/hooks/modules/__init__.py +15 -0
  305. package/dist/gaia-security/hooks/modules/agents/__init__.py +29 -0
  306. package/dist/gaia-security/hooks/modules/agents/contract_validator.py +647 -0
  307. package/dist/gaia-security/hooks/modules/agents/response_contract.py +496 -0
  308. package/dist/gaia-security/hooks/modules/agents/skill_injection_verifier.py +120 -0
  309. package/dist/gaia-security/hooks/modules/agents/state_tracker.py +267 -0
  310. package/dist/gaia-security/hooks/modules/agents/task_info_builder.py +74 -0
  311. package/dist/gaia-security/hooks/modules/agents/transcript_analyzer.py +458 -0
  312. package/dist/gaia-security/hooks/modules/agents/transcript_reader.py +152 -0
  313. package/dist/gaia-security/hooks/modules/audit/__init__.py +28 -0
  314. package/dist/gaia-security/hooks/modules/audit/event_detector.py +168 -0
  315. package/dist/gaia-security/hooks/modules/audit/logger.py +131 -0
  316. package/dist/gaia-security/hooks/modules/audit/metrics.py +134 -0
  317. package/dist/gaia-security/hooks/modules/audit/workflow_auditor.py +611 -0
  318. package/dist/gaia-security/hooks/modules/audit/workflow_recorder.py +296 -0
  319. package/dist/gaia-security/hooks/modules/context/__init__.py +11 -0
  320. package/dist/gaia-security/hooks/modules/context/agentic_loop_detector.py +165 -0
  321. package/dist/gaia-security/hooks/modules/context/anchor_tracker.py +317 -0
  322. package/dist/gaia-security/hooks/modules/context/compact_context_builder.py +218 -0
  323. package/dist/gaia-security/hooks/modules/context/context_freshness.py +145 -0
  324. package/dist/gaia-security/hooks/modules/context/context_injector.py +558 -0
  325. package/dist/gaia-security/hooks/modules/context/context_writer.py +530 -0
  326. package/dist/gaia-security/hooks/modules/context/contracts_loader.py +161 -0
  327. package/dist/gaia-security/hooks/modules/core/__init__.py +40 -0
  328. package/dist/gaia-security/hooks/modules/core/hook_entry.py +78 -0
  329. package/dist/gaia-security/hooks/modules/core/paths.py +160 -0
  330. package/dist/gaia-security/hooks/modules/core/plugin_mode.py +149 -0
  331. package/dist/gaia-security/hooks/modules/core/plugin_setup.py +577 -0
  332. package/dist/gaia-security/hooks/modules/core/state.py +179 -0
  333. package/dist/gaia-security/hooks/modules/core/stdin.py +24 -0
  334. package/dist/gaia-security/hooks/modules/events/__init__.py +1 -0
  335. package/dist/gaia-security/hooks/modules/events/event_writer.py +210 -0
  336. package/dist/gaia-security/hooks/modules/memory/__init__.py +8 -0
  337. package/dist/gaia-security/hooks/modules/memory/episode_writer.py +216 -0
  338. package/dist/gaia-security/hooks/modules/orchestrator/__init__.py +1 -0
  339. package/dist/gaia-security/hooks/modules/orchestrator/delegate_mode.py +122 -0
  340. package/dist/gaia-security/hooks/modules/scanning/__init__.py +8 -0
  341. package/dist/gaia-security/hooks/modules/scanning/scan_trigger.py +84 -0
  342. package/dist/gaia-security/hooks/modules/security/__init__.py +120 -0
  343. package/dist/gaia-security/hooks/modules/security/approval_cleanup.py +87 -0
  344. package/dist/gaia-security/hooks/modules/security/approval_constants.py +23 -0
  345. package/dist/gaia-security/hooks/modules/security/approval_grants.py +1638 -0
  346. package/dist/gaia-security/hooks/modules/security/approval_messages.py +71 -0
  347. package/dist/gaia-security/hooks/modules/security/approval_scopes.py +222 -0
  348. package/dist/gaia-security/hooks/modules/security/blocked_commands.py +595 -0
  349. package/dist/gaia-security/hooks/modules/security/blocked_message_formatter.py +87 -0
  350. package/dist/gaia-security/hooks/modules/security/command_semantics.py +181 -0
  351. package/dist/gaia-security/hooks/modules/security/composition_rules.py +547 -0
  352. package/dist/gaia-security/hooks/modules/security/flag_classifiers.py +873 -0
  353. package/dist/gaia-security/hooks/modules/security/gitops_validator.py +179 -0
  354. package/dist/gaia-security/hooks/modules/security/mutative_verbs.py +1131 -0
  355. package/dist/gaia-security/hooks/modules/security/network_hosts.py +481 -0
  356. package/dist/gaia-security/hooks/modules/security/prompt_validator.py +40 -0
  357. package/dist/gaia-security/hooks/modules/security/shell_unwrapper.py +165 -0
  358. package/dist/gaia-security/hooks/modules/security/tiers.py +196 -0
  359. package/dist/gaia-security/hooks/modules/session/__init__.py +10 -0
  360. package/dist/gaia-security/hooks/modules/session/pending_scanner.py +174 -0
  361. package/dist/gaia-security/hooks/modules/session/session_context_writer.py +100 -0
  362. package/dist/gaia-security/hooks/modules/session/session_event_injector.py +160 -0
  363. package/dist/gaia-security/hooks/modules/session/session_manager.py +31 -0
  364. package/dist/gaia-security/hooks/modules/session/session_registry.py +232 -0
  365. package/dist/gaia-security/hooks/modules/tools/__init__.py +29 -0
  366. package/dist/gaia-security/hooks/modules/tools/bash_validator.py +1008 -0
  367. package/dist/gaia-security/hooks/modules/tools/cloud_pipe_validator.py +231 -0
  368. package/dist/gaia-security/hooks/modules/tools/hook_response.py +55 -0
  369. package/dist/gaia-security/hooks/modules/tools/shell_parser.py +227 -0
  370. package/dist/gaia-security/hooks/modules/tools/stage_decomposer.py +315 -0
  371. package/dist/gaia-security/hooks/modules/tools/task_validator.py +294 -0
  372. package/dist/gaia-security/hooks/modules/validation/__init__.py +23 -0
  373. package/dist/gaia-security/hooks/modules/validation/commit_validator.py +380 -0
  374. package/dist/gaia-security/hooks/post_tool_use.py +54 -0
  375. package/dist/gaia-security/hooks/pre_tool_use.py +413 -0
  376. package/dist/gaia-security/hooks/session_start.py +81 -0
  377. package/dist/gaia-security/hooks/stop_hook.py +82 -0
  378. package/dist/gaia-security/hooks/user_prompt_submit.py +246 -0
  379. package/dist/gaia-security/settings.json +58 -0
  380. package/git-hooks/commit-msg +41 -0
  381. package/hooks/README.md +100 -0
  382. package/hooks/adapters/__init__.py +52 -0
  383. package/hooks/adapters/base.py +219 -0
  384. package/hooks/adapters/channel.py +17 -0
  385. package/hooks/adapters/claude_code.py +1890 -0
  386. package/hooks/adapters/types.py +194 -0
  387. package/hooks/adapters/utils.py +25 -0
  388. package/hooks/elicitation_result.py +179 -0
  389. package/hooks/hooks.json +84 -0
  390. package/hooks/modules/README.md +189 -0
  391. package/hooks/modules/__init__.py +15 -0
  392. package/hooks/modules/agents/__init__.py +29 -0
  393. package/hooks/modules/agents/contract_validator.py +647 -0
  394. package/hooks/modules/agents/response_contract.py +496 -0
  395. package/hooks/modules/agents/skill_injection_verifier.py +120 -0
  396. package/hooks/modules/agents/state_tracker.py +267 -0
  397. package/hooks/modules/agents/task_info_builder.py +74 -0
  398. package/hooks/modules/agents/transcript_analyzer.py +458 -0
  399. package/hooks/modules/agents/transcript_reader.py +152 -0
  400. package/hooks/modules/audit/__init__.py +28 -0
  401. package/hooks/modules/audit/event_detector.py +168 -0
  402. package/hooks/modules/audit/logger.py +131 -0
  403. package/hooks/modules/audit/metrics.py +134 -0
  404. package/hooks/modules/audit/workflow_auditor.py +611 -0
  405. package/hooks/modules/audit/workflow_recorder.py +296 -0
  406. package/hooks/modules/context/__init__.py +11 -0
  407. package/hooks/modules/context/agentic_loop_detector.py +165 -0
  408. package/hooks/modules/context/anchor_tracker.py +317 -0
  409. package/hooks/modules/context/compact_context_builder.py +218 -0
  410. package/hooks/modules/context/context_freshness.py +145 -0
  411. package/hooks/modules/context/context_injector.py +558 -0
  412. package/hooks/modules/context/context_writer.py +530 -0
  413. package/hooks/modules/context/contracts_loader.py +161 -0
  414. package/hooks/modules/core/__init__.py +40 -0
  415. package/hooks/modules/core/hook_entry.py +78 -0
  416. package/hooks/modules/core/paths.py +160 -0
  417. package/hooks/modules/core/plugin_mode.py +149 -0
  418. package/hooks/modules/core/plugin_setup.py +577 -0
  419. package/hooks/modules/core/state.py +179 -0
  420. package/hooks/modules/core/stdin.py +24 -0
  421. package/hooks/modules/events/__init__.py +1 -0
  422. package/hooks/modules/events/event_writer.py +210 -0
  423. package/hooks/modules/evidence/__init__.py +34 -0
  424. package/hooks/modules/evidence/assertions.py +137 -0
  425. package/hooks/modules/evidence/index_writer.py +57 -0
  426. package/hooks/modules/evidence/loader.py +126 -0
  427. package/hooks/modules/evidence/runner.py +241 -0
  428. package/hooks/modules/memory/__init__.py +8 -0
  429. package/hooks/modules/memory/episode_writer.py +216 -0
  430. package/hooks/modules/orchestrator/__init__.py +1 -0
  431. package/hooks/modules/orchestrator/delegate_mode.py +122 -0
  432. package/hooks/modules/scanning/__init__.py +8 -0
  433. package/hooks/modules/scanning/scan_trigger.py +84 -0
  434. package/hooks/modules/security/__init__.py +120 -0
  435. package/hooks/modules/security/approval_cleanup.py +87 -0
  436. package/hooks/modules/security/approval_constants.py +23 -0
  437. package/hooks/modules/security/approval_grants.py +1638 -0
  438. package/hooks/modules/security/approval_messages.py +71 -0
  439. package/hooks/modules/security/approval_scopes.py +222 -0
  440. package/hooks/modules/security/blocked_commands.py +595 -0
  441. package/hooks/modules/security/blocked_message_formatter.py +87 -0
  442. package/hooks/modules/security/command_semantics.py +181 -0
  443. package/hooks/modules/security/composition_rules.py +547 -0
  444. package/hooks/modules/security/flag_classifiers.py +873 -0
  445. package/hooks/modules/security/gitops_validator.py +179 -0
  446. package/hooks/modules/security/mutative_verbs.py +1131 -0
  447. package/hooks/modules/security/network_hosts.py +481 -0
  448. package/hooks/modules/security/prompt_validator.py +40 -0
  449. package/hooks/modules/security/shell_unwrapper.py +165 -0
  450. package/hooks/modules/security/tiers.py +196 -0
  451. package/hooks/modules/session/__init__.py +10 -0
  452. package/hooks/modules/session/pending_scanner.py +174 -0
  453. package/hooks/modules/session/session_context_writer.py +100 -0
  454. package/hooks/modules/session/session_event_injector.py +160 -0
  455. package/hooks/modules/session/session_manager.py +31 -0
  456. package/hooks/modules/session/session_registry.py +232 -0
  457. package/hooks/modules/tools/__init__.py +29 -0
  458. package/hooks/modules/tools/bash_validator.py +1008 -0
  459. package/hooks/modules/tools/cloud_pipe_validator.py +231 -0
  460. package/hooks/modules/tools/hook_response.py +55 -0
  461. package/hooks/modules/tools/shell_parser.py +227 -0
  462. package/hooks/modules/tools/stage_decomposer.py +315 -0
  463. package/hooks/modules/tools/task_validator.py +294 -0
  464. package/hooks/modules/validation/__init__.py +23 -0
  465. package/hooks/modules/validation/commit_validator.py +380 -0
  466. package/hooks/post_compact.py +43 -0
  467. package/hooks/post_tool_use.py +54 -0
  468. package/hooks/pre_compact.py +60 -0
  469. package/hooks/pre_tool_use.py +413 -0
  470. package/hooks/session_start.py +81 -0
  471. package/hooks/stop_hook.py +82 -0
  472. package/hooks/subagent_start.py +71 -0
  473. package/hooks/subagent_stop.py +295 -0
  474. package/hooks/task_completed.py +70 -0
  475. package/hooks/user_prompt_submit.py +246 -0
  476. package/index.js +83 -0
  477. package/package.json +99 -0
  478. package/pyproject.toml +32 -0
  479. package/skills/README.md +154 -0
  480. package/skills/agent-protocol/SKILL.md +93 -0
  481. package/skills/agent-protocol/examples.md +223 -0
  482. package/skills/agent-response/SKILL.md +69 -0
  483. package/skills/agentic-loop/SKILL.md +80 -0
  484. package/skills/agentic-loop/reference.md +378 -0
  485. package/skills/blog-writing/SKILL.md +98 -0
  486. package/skills/blog-writing/reference.md +130 -0
  487. package/skills/brief-spec/SKILL.md +182 -0
  488. package/skills/command-execution/SKILL.md +64 -0
  489. package/skills/command-execution/reference.md +83 -0
  490. package/skills/context-updater/SKILL.md +87 -0
  491. package/skills/context-updater/examples.md +71 -0
  492. package/skills/developer-patterns/SKILL.md +50 -0
  493. package/skills/developer-patterns/reference.md +112 -0
  494. package/skills/execution/SKILL.md +99 -0
  495. package/skills/fast-queries/SKILL.md +43 -0
  496. package/skills/gaia-compact/SKILL.md +74 -0
  497. package/skills/gaia-patterns/SKILL.md +108 -0
  498. package/skills/gaia-patterns/reference.md +395 -0
  499. package/skills/gaia-planner/SKILL.md +37 -0
  500. package/skills/gaia-planner/reference.md +107 -0
  501. package/skills/gaia-release/SKILL.md +82 -0
  502. package/skills/gaia-release/reference.md +102 -0
  503. package/skills/gaia-self-check/SKILL.md +114 -0
  504. package/skills/gaia-self-check/reference.md +453 -0
  505. package/skills/gaia-verify/SKILL.md +77 -0
  506. package/skills/gaia-verify/reference.md +80 -0
  507. package/skills/git-conventions/SKILL.md +47 -0
  508. package/skills/gitops-patterns/SKILL.md +60 -0
  509. package/skills/gitops-patterns/reference.md +183 -0
  510. package/skills/gmail-policy/SKILL.md +200 -0
  511. package/skills/gmail-policy/reference.md +150 -0
  512. package/skills/gmail-triage/SKILL.md +100 -0
  513. package/skills/gws-setup/SKILL.md +99 -0
  514. package/skills/gws-setup/reference.md +73 -0
  515. package/skills/investigation/SKILL.md +100 -0
  516. package/skills/memory-curation/SKILL.md +83 -0
  517. package/skills/memory-search/SKILL.md +88 -0
  518. package/skills/orchestrator-approval/SKILL.md +160 -0
  519. package/skills/orchestrator-approval/reference.md +174 -0
  520. package/skills/pending-approvals/SKILL.md +72 -0
  521. package/skills/pending-approvals/reference.md +214 -0
  522. package/skills/readme-writing/SKILL.md +71 -0
  523. package/skills/readme-writing/reference.md +188 -0
  524. package/skills/reference.md +135 -0
  525. package/skills/request-approval/SKILL.md +140 -0
  526. package/skills/request-approval/examples.md +140 -0
  527. package/skills/request-approval/reference.md +57 -0
  528. package/skills/schedule-task/SKILL.md +64 -0
  529. package/skills/schedule-task/reference.md +233 -0
  530. package/skills/security-tiers/SKILL.md +141 -0
  531. package/skills/security-tiers/destructive-commands-reference.md +623 -0
  532. package/skills/security-tiers/reference.md +39 -0
  533. package/skills/skill-creation/SKILL.md +92 -0
  534. package/skills/skill-creation/reference.md +29 -0
  535. package/skills/terraform-patterns/SKILL.md +89 -0
  536. package/skills/terraform-patterns/reference.md +93 -0
  537. package/templates/README.md +69 -0
  538. package/templates/managed-settings.template.json +43 -0
  539. package/tools/__init__.py +9 -0
  540. package/tools/agentic-loop/decide-status.py +210 -0
  541. package/tools/agentic-loop/parse-metric.py +106 -0
  542. package/tools/agentic-loop/record-iteration.py +221 -0
  543. package/tools/context/README.md +132 -0
  544. package/tools/context/__init__.py +42 -0
  545. package/tools/context/_paths.py +20 -0
  546. package/tools/context/context_provider.py +721 -0
  547. package/tools/context/context_section_reader.py +342 -0
  548. package/tools/context/deep_merge.py +159 -0
  549. package/tools/context/pending_updates.py +760 -0
  550. package/tools/context/surface_router.py +278 -0
  551. package/tools/fast-queries/README.md +65 -0
  552. package/tools/fast-queries/__init__.py +30 -0
  553. package/tools/fast-queries/appservices/quicktriage_devops_developer.sh +75 -0
  554. package/tools/fast-queries/cloud/aws/quicktriage_aws_troubleshooter.sh +32 -0
  555. package/tools/fast-queries/cloud/gcp/quicktriage_gcp_troubleshooter.sh +88 -0
  556. package/tools/fast-queries/gitops/quicktriage_gitops_operator.sh +48 -0
  557. package/tools/fast-queries/run_triage.sh +59 -0
  558. package/tools/fast-queries/terraform/quicktriage_terraform_architect.sh +80 -0
  559. package/tools/gaia_simulator/__init__.py +33 -0
  560. package/tools/gaia_simulator/cli.py +354 -0
  561. package/tools/gaia_simulator/extractor.py +457 -0
  562. package/tools/gaia_simulator/reporter.py +258 -0
  563. package/tools/gaia_simulator/routing_simulator.py +334 -0
  564. package/tools/gaia_simulator/runner.py +539 -0
  565. package/tools/gaia_simulator/skills_mapper.py +264 -0
  566. package/tools/memory/README.md +0 -0
  567. package/tools/memory/__init__.py +20 -0
  568. package/tools/memory/backfill_fts5.py +107 -0
  569. package/tools/memory/conflict_detector.py +295 -0
  570. package/tools/memory/episodic.py +1210 -0
  571. package/tools/memory/git_invalidator.py +262 -0
  572. package/tools/memory/paths.py +102 -0
  573. package/tools/memory/scoring.py +193 -0
  574. package/tools/memory/search_store.py +360 -0
  575. package/tools/persist_transcript_analysis.py +85 -0
  576. package/tools/review/__init__.py +1 -0
  577. package/tools/review/review_engine.py +157 -0
  578. package/tools/scan/__init__.py +35 -0
  579. package/tools/scan/config.py +247 -0
  580. package/tools/scan/merge.py +212 -0
  581. package/tools/scan/orchestrator.py +549 -0
  582. package/tools/scan/registry.py +127 -0
  583. package/tools/scan/scanners/__init__.py +18 -0
  584. package/tools/scan/scanners/base.py +137 -0
  585. package/tools/scan/scanners/environment.py +349 -0
  586. package/tools/scan/scanners/git.py +570 -0
  587. package/tools/scan/scanners/infrastructure.py +875 -0
  588. package/tools/scan/scanners/orchestration.py +600 -0
  589. package/tools/scan/scanners/stack.py +1085 -0
  590. package/tools/scan/scanners/tools.py +260 -0
  591. package/tools/scan/setup.py +686 -0
  592. package/tools/scan/tests/__init__.py +1 -0
  593. package/tools/scan/tests/conftest.py +796 -0
  594. package/tools/scan/tests/test_environment.py +323 -0
  595. package/tools/scan/tests/test_git.py +419 -0
  596. package/tools/scan/tests/test_infrastructure.py +382 -0
  597. package/tools/scan/tests/test_integration.py +920 -0
  598. package/tools/scan/tests/test_merge.py +269 -0
  599. package/tools/scan/tests/test_orchestration.py +304 -0
  600. package/tools/scan/tests/test_stack.py +604 -0
  601. package/tools/scan/tests/test_tools.py +349 -0
  602. package/tools/scan/ui.py +624 -0
  603. package/tools/scan/verify.py +270 -0
  604. package/tools/scan/walk.py +118 -0
  605. package/tools/scan/workspace.py +85 -0
  606. package/tools/validation/README.md +244 -0
  607. package/tools/validation/__init__.py +17 -0
  608. package/tools/validation/approval_gate.py +321 -0
  609. package/tools/validation/validate_skills.py +189 -0
@@ -0,0 +1,154 @@
1
+ # Skills
2
+
3
+ Skills are the procedural knowledge layer of Gaia. Where agents carry identity — their scope, their tone, their domain — skills carry process: how to classify a command, how to format a response contract, how to approach an investigation. An agent without skills knows who it is but not how to operate. Skills bridge that gap by injecting step-by-step protocols that the agent follows during its session.
4
+
5
+ Each skill lives in its own directory under `skills/<name>/` and contains at minimum a `SKILL.md` file. That file is what gets injected. Supporting material (`reference.md`, `examples.md`) lives in the same directory but is read on-demand — the agent pulls it from disk when needed rather than receiving it at startup. This keeps startup context lean while making full documentation accessible.
6
+
7
+ Skills are not shared via inheritance or imports — they are text injected verbatim into the agent's context window. The size limit for injected skills is roughly 100 lines. If a skill grows beyond that, the detailed content moves to `reference.md` and the main `SKILL.md` becomes a compact index pointing there.
8
+
9
+ The assignment matrix below shows which skills each agent receives. The first two — `agent-protocol` and `security-tiers` — appear on every agent. They are the non-negotiables: every agent must understand the response contract and the tier system.
10
+
11
+ ## Cuándo se activa
12
+
13
+ Skills reach an agent through two distinct routes, and understanding both matters when troubleshooting why a skill is or is not present in a session.
14
+
15
+ **Route 1 — Startup injection via frontmatter:**
16
+
17
+ ```
18
+ Orchestrator dispatches agent
19
+ |
20
+ pre_tool_use.py intercepts the Task/Agent tool call
21
+ |
22
+ Reads agents/<name>.md frontmatter -> skills: list
23
+ |
24
+ For each skill in the list:
25
+ reads skills/<skill>/SKILL.md from disk
26
+ appends content to agent's system context
27
+ |
28
+ Agent starts with all listed skills already in context
29
+ ```
30
+
31
+ **Route 2 — On-demand via Skill tool:**
32
+
33
+ ```
34
+ Agent is running and encounters a situation
35
+ requiring a workflow skill (e.g. approval, execution, git-conventions)
36
+ |
37
+ Agent calls Skill tool: Skill("request-approval")
38
+ |
39
+ Claude Code reads skills/request-approval/SKILL.md from disk
40
+ |
41
+ Content is injected into the agent's active context window
42
+ |
43
+ Agent follows the newly loaded protocol
44
+ ```
45
+
46
+ Orchestrator-level skills (`agent-response`, `orchestrator-approval`) are always Route 2 — they are never in a frontmatter list, only loaded when the orchestrator needs to interpret a specific situation.
47
+
48
+ ## Qué hay aquí
49
+
50
+ ```
51
+ skills/
52
+ ├── agent-protocol/ # Response contract format, state machine, error handling
53
+ ├── agent-response/ # Orchestrator: interpret agent json:contract responses
54
+ ├── agentic-loop/ # Iterative metric-driven improvement loop (on-demand injection)
55
+ ├── blog-writing/ # Blog article writing and publishing for metraton.github.io
56
+ ├── brief-spec/ # Brief and spec creation for features before planning
57
+ ├── command-execution/ # Defensive Bash execution, no-pipes discipline
58
+ │ └── reference.md
59
+ ├── context-updater/ # CONTEXT_UPDATE format and writable sections contract
60
+ │ └── examples.md
61
+ ├── developer-patterns/ # Application code patterns (Node.js, Python)
62
+ ├── execution/ # Post-approval execution discipline
63
+ ├── fast-queries/ # Quick diagnostic scripts for cloud/system state
64
+ ├── gaia-compact/ # Orchestrator: structured /compact prompt with preservation contract
65
+ ├── gaia-patterns/ # Gaia component patterns: hooks, agents, routing, CLI
66
+ │ └── reference.md
67
+ ├── gaia-planner/ # Feature planning, briefs, task decomposition
68
+ ├── gaia-release/ # Gaia release pipeline: live, dry-run, beta, stable
69
+ ├── gaia-self-check/ # Validate internal consistency of the .claude/ installation
70
+ ├── gaia-verify/ # Verify a Gaia installation across delivery surfaces
71
+ ├── git-conventions/ # Conventional Commits (on-demand workflow skill)
72
+ ├── gitops-patterns/ # GitOps/Flux/Kubernetes patterns
73
+ │ └── reference.md
74
+ ├── gmail-policy/ # Gmail domain policy (label-only, no delete)
75
+ ├── gmail-triage/ # Interactive Gmail inbox triage
76
+ ├── gws-setup/ # Google Workspace CLI (gws) installation and configuration
77
+ ├── investigation/ # Diagnosis methodology and pattern analysis
78
+ ├── memory-curation/ # Curate MEMORY.md index and topic files
79
+ ├── memory-search/ # Query episodic memory via `gaia memory` CLI
80
+ ├── orchestrator-approval/ # T3 approval presentation for orchestrator
81
+ ├── pending-approvals/ # Present and manage pending approval requests
82
+ ├── readme-writing/ # How to write READMEs for Gaia component folders
83
+ ├── request-approval/ # T3 approval-request workflow (attempt first, emit APPROVAL_REQUEST)
84
+ │ ├── reference.md
85
+ │ └── examples.md
86
+ ├── schedule-task/ # Dispatch parameter extraction and prompt templates
87
+ ├── security-tiers/ # T0-T3 classification + hook enforcement model
88
+ │ └── reference.md
89
+ ├── skill-creation/ # How to design and write new skills
90
+ ├── terraform-patterns/ # Terraform/Terragrunt patterns
91
+ │ └── reference.md
92
+ └── reference.md # Cross-skill reference index
93
+ ```
94
+
95
+ ## Convenciones
96
+
97
+ **Skill assignment matrix:**
98
+
99
+ | Agent | Core Skills | Domain Skills |
100
+ |-------|-------------|---------------|
101
+ | cloud-troubleshooter | agent-protocol, security-tiers, investigation, command-execution | context-updater, fast-queries |
102
+ | terraform-architect | agent-protocol, security-tiers, investigation, command-execution, terraform-patterns | context-updater, fast-queries |
103
+ | gitops-operator | agent-protocol, security-tiers, investigation, command-execution, gitops-patterns | context-updater, fast-queries |
104
+ | developer | agent-protocol, security-tiers, investigation, command-execution, developer-patterns | context-updater, fast-queries |
105
+ | gaia-system | agent-protocol, security-tiers, command-execution, gaia-patterns, gaia-release, skill-creation | gaia-verify |
106
+ | gaia-planner | agent-protocol, security-tiers | gaia-planner |
107
+ | gaia-operator | agent-protocol, security-tiers, command-execution, context-updater, memory-curation, memory-search, gmail-triage, gws-setup | blog-writing |
108
+
109
+ Orchestrator skills (loaded on-demand via Skill tool, not assigned in frontmatter):
110
+ - `agent-response` — contract status interpretation and presentation
111
+ - `orchestrator-approval` — T3 approval presentation and grant activation
112
+ - `gaia-compact` — structured `/compact` invocation with a six-category preservation prompt
113
+
114
+ Workflow skills (on-demand injection, not in any agent frontmatter):
115
+ - `agentic-loop` — iterative metric-driven improvement; injected by orchestrator text prompt, `user-invocable: false`
116
+ - `brief-spec` — brief and spec creation; loaded on demand by orchestrator
117
+ - `execution` — post-approval execution discipline
118
+ - `git-conventions` — Conventional Commits format
119
+ - `pending-approvals` — present and resolve pending approval requests
120
+ - `request-approval` — T3 approval-request workflow
121
+ - `schedule-task` — dispatch parameter templates
122
+
123
+ **Skill types:**
124
+
125
+ | Type | Injection | Examples |
126
+ |------|-----------|---------|
127
+ | Core | Always via `skills:` frontmatter | agent-protocol, security-tiers |
128
+ | Common | Most agents via `skills:` frontmatter | command-execution, context-updater |
129
+ | Domain | Per-agent via `skills:` frontmatter | terraform-patterns, gaia-patterns |
130
+ | Workflow | On-demand (agent reads from disk) | request-approval, execution, git-conventions |
131
+ | Orchestrator | On-demand via Skill tool | agent-response, orchestrator-approval |
132
+
133
+ **SKILL.md format:**
134
+
135
+ ```yaml
136
+ ---
137
+ name: skill-name
138
+ description: When Claude should load and follow this skill
139
+ metadata:
140
+ user-invocable: false
141
+ type: core
142
+ ---
143
+
144
+ # Skill Content
145
+ ```
146
+
147
+ **Line budget:** Keep injected `SKILL.md` under 100 lines. Move details to `reference.md` (read on-demand). Supporting examples go in `examples.md`.
148
+
149
+ ## Ver también
150
+
151
+ - [`agents/README.md`](../agents/README.md) — agent frontmatter and skills: field
152
+ - [`hooks/pre_tool_use.py`](../hooks/pre_tool_use.py) — where skill injection happens at runtime
153
+ - [`skills/skill-creation/SKILL.md`](./skill-creation/SKILL.md) — how to design a new skill
154
+ - [`skills/gaia-patterns/reference.md`](./gaia-patterns/reference.md) — full component inventory
@@ -0,0 +1,93 @@
1
+ ---
2
+ name: agent-protocol
3
+ description: Use when producing any agent response
4
+ metadata:
5
+ user-invocable: false
6
+ type: protocol
7
+ ---
8
+
9
+ # Agent Protocol
10
+
11
+ This protocol governs REPORTING FORMAT, not tool access. All agents may use their declared tools during any phase.
12
+
13
+ ## Response Contract
14
+
15
+ Every response MUST end with a single fenced `json:contract` block.
16
+
17
+ ```json:contract
18
+ {
19
+ "agent_status": {
20
+ "plan_status": "<STATUS>",
21
+ "agent_id": "<a + 5+ hex chars>",
22
+ "pending_steps": [],
23
+ "next_action": "done"
24
+ },
25
+ "evidence_report": {
26
+ "patterns_checked": [],
27
+ "files_checked": [],
28
+ "commands_run": [],
29
+ "key_outputs": [],
30
+ "verbatim_outputs": [],
31
+ "cross_layer_impacts": [],
32
+ "open_gaps": [],
33
+ "verification": null
34
+ },
35
+ "consolidation_report": null,
36
+ "approval_request": null
37
+ }
38
+ ```
39
+
40
+ **agent_status** -- `plan_status` (one of 5 states below), `agent_id` (generate once, reuse), `pending_steps` (`[]` when done), `next_action` (`"done"` or what's next).
41
+
42
+ **evidence_report** -- Use `[]` when not applicable, 1-3 items each. `key_outputs`: what changed. `verbatim_outputs`: literal output, truncate ~100 lines. `cross_layer_impacts`: adjacent surfaces. `open_gaps`: what remains unverified. `verification`: **required when COMPLETE** (see Verification Gate), `null` otherwise.
43
+
44
+ **consolidation_report** -- Required when `consolidation_required` or `multi_surface` is true. Otherwise `null`. Fields: `ownership_assessment`, `confirmed_findings`, `suspected_findings`, `conflicts`, `next_best_agent`. See `examples.md`.
45
+
46
+ **approval_request** -- Required when APPROVAL_REQUEST. Fields: `operation`, `exact_content`, `scope`, `risk_level`, `rollback`, `verification`. On `[T3_BLOCKED]` with `approval_id`: set APPROVAL_REQUEST, include `approval_id`, wait. See `examples.md`.
47
+
48
+ ## Universal Execution Loop
49
+
50
+ Each increment: **INVESTIGATE** (read, search) -> **PLAN** (propose; APPROVAL_REQUEST if T3) -> **EXECUTE** (write, run) -> **VERIFY** (confirm results) -> **COMPLETE** or loop back on failure. Decompose large tasks into 2-5 increments; each is one action paired with one verification. Every increment ends verified. Fix before moving on -- compounding failures is exponential.
51
+
52
+ ## Verification Gate
53
+
54
+ An agent cannot set `plan_status: "COMPLETE"` without a `verification` object in `evidence_report`. When verification fails, loop back to EXECUTE -- do not complete.
55
+
56
+ ```json
57
+ "verification": {
58
+ "method": "test | dry-run | metric | self-review",
59
+ "checks": ["what was checked"],
60
+ "result": "pass | fail",
61
+ "details": "concrete evidence"
62
+ }
63
+ ```
64
+
65
+ Choose the method that fits your domain. Infrastructure: `dry-run` (terraform plan). Code: `test` (pytest, lint). Gaia skills: `self-review` (line count, frontmatter). Email: `metric` (count match). Git/file ops: `test` or `self-review`. When no automated check exists, `self-review` is the minimum: state what you checked and what you observed. For full examples see `examples.md`.
66
+
67
+ ## State Machine
68
+
69
+ | Status | Meaning |
70
+ |--------|---------|
71
+ | `IN_PROGRESS` | Investigating, planning, or executing work |
72
+ | `APPROVAL_REQUEST` | Emitted when a hook blocks a specific mutative command -- agent requests user approval for the exact command via `approval_request` |
73
+ | `COMPLETE` | Verified -- `verification.result` is `"pass"` |
74
+ | `BLOCKED` | Cannot proceed -- escalated |
75
+ | `NEEDS_INPUT` | Missing information from user |
76
+
77
+ ### Transitions
78
+
79
+ ```
80
+ IN_PROGRESS -> COMPLETE (requires verification evidence)
81
+ IN_PROGRESS -> APPROVAL_REQUEST -> IN_PROGRESS -> COMPLETE
82
+ IN_PROGRESS -> BLOCKED | NEEDS_INPUT (any point)
83
+ IN_PROGRESS -> IN_PROGRESS (retry or verify-fail loop, max 2)
84
+ ```
85
+
86
+ ## Error Handling
87
+
88
+ | Type | Action | Status |
89
+ |------|--------|--------|
90
+ | Recoverable | Fix and retry (max 2) | `IN_PROGRESS` |
91
+ | Blocker | Log details, list solutions | `BLOCKED` |
92
+ | Ambiguous | List options | `NEEDS_INPUT` |
93
+ | Contract repair | Reissue `json:contract`, skip re-investigation (max 2) | `IN_PROGRESS` |
@@ -0,0 +1,223 @@
1
+ # Agent Protocol -- Status-Specific Examples
2
+
3
+ Read on-demand when constructing a `json:contract` block.
4
+ See `SKILL.md` for the schema definition and field rules.
5
+
6
+ ## COMPLETE (verified result)
7
+
8
+ ```json:contract
9
+ {
10
+ "agent_status": {
11
+ "plan_status": "COMPLETE",
12
+ "agent_id": "ab7e4d2",
13
+ "pending_steps": [],
14
+ "next_action": "done"
15
+ },
16
+ "evidence_report": {
17
+ "patterns_checked": ["existing HelmRelease naming convention in flux/apps/"],
18
+ "files_checked": ["flux/apps/qxo-api/helmrelease.yaml"],
19
+ "commands_run": ["kubectl get hr -n qxo -> all reconciled"],
20
+ "key_outputs": ["All 12 HelmReleases healthy, no drift detected"],
21
+ "verbatim_outputs": [],
22
+ "cross_layer_impacts": [],
23
+ "open_gaps": [],
24
+ "verification": {
25
+ "method": "test",
26
+ "checks": ["kubectl get hr -n qxo shows all reconciled", "no suspended or failed HelmReleases"],
27
+ "result": "pass",
28
+ "details": "12/12 HelmReleases Ready=True. Last reconciled within 5m."
29
+ }
30
+ },
31
+ "consolidation_report": null,
32
+ "approval_request": null
33
+ }
34
+ ```
35
+
36
+ ## BLOCKED (cannot proceed)
37
+
38
+ ```json:contract
39
+ {
40
+ "agent_status": {
41
+ "plan_status": "BLOCKED",
42
+ "agent_id": "ac3a1f9",
43
+ "pending_steps": ["validate IAM binding", "apply terraform change"],
44
+ "next_action": "User must grant roles/container.admin to SA"
45
+ },
46
+ "evidence_report": {
47
+ "patterns_checked": ["SA binding pattern in terraform/iam/"],
48
+ "files_checked": ["terraform/iam/main.tf", "terraform/iam/variables.tf"],
49
+ "commands_run": ["gcloud iam service-accounts get-iam-policy sa@proj.iam -> missing binding"],
50
+ "key_outputs": ["SA lacks roles/container.admin required for node pool ops"],
51
+ "verbatim_outputs": ["gcloud iam service-accounts get-iam-policy sa@proj.iam:\n```\nbindings: []\n```"],
52
+ "cross_layer_impacts": ["GKE node pool scaling depends on this SA"],
53
+ "open_gaps": ["Whether SA should get role directly or via workload identity"],
54
+ "verification": null
55
+ },
56
+ "consolidation_report": null,
57
+ "approval_request": null
58
+ }
59
+ ```
60
+
61
+ ## NEEDS_INPUT (missing information)
62
+
63
+ ```json:contract
64
+ {
65
+ "agent_status": {
66
+ "plan_status": "NEEDS_INPUT",
67
+ "agent_id": "ad9f2b1",
68
+ "pending_steps": ["create namespace manifest", "configure HelmRelease"],
69
+ "next_action": "User must choose: Option A (shared namespace) or Option B (dedicated namespace)"
70
+ },
71
+ "evidence_report": {
72
+ "patterns_checked": ["namespace conventions in flux/clusters/"],
73
+ "files_checked": ["flux/clusters/dev/namespaces/"],
74
+ "commands_run": [],
75
+ "key_outputs": ["Both patterns exist in codebase -- no single convention"],
76
+ "verbatim_outputs": [],
77
+ "cross_layer_impacts": ["Network policies differ per pattern"],
78
+ "open_gaps": ["User preference for namespace isolation"],
79
+ "verification": null
80
+ },
81
+ "consolidation_report": null,
82
+ "approval_request": null
83
+ }
84
+ ```
85
+
86
+ ## APPROVAL_REQUEST (hook blocked T3 command or plan ready for user feedback)
87
+
88
+ ```json:contract
89
+ {
90
+ "agent_status": {
91
+ "plan_status": "APPROVAL_REQUEST",
92
+ "agent_id": "ae5c8a3",
93
+ "pending_steps": ["execute terraform apply", "verify state"],
94
+ "next_action": "Awaiting user feedback on terraform apply plan"
95
+ },
96
+ "evidence_report": {
97
+ "patterns_checked": ["existing bucket naming in terraform/gcs/"],
98
+ "files_checked": ["terraform/gcs/main.tf", "terraform/gcs/variables.tf"],
99
+ "commands_run": ["terraform plan -out=tfplan -> 1 to add, 0 to change, 0 to destroy"],
100
+ "key_outputs": ["Plan adds 1 GCS bucket with standard config"],
101
+ "verbatim_outputs": ["terraform plan:\n```\n+ google_storage_bucket.events\n name: qxo-events-dev\n location: us-east4\n```"],
102
+ "cross_layer_impacts": ["Flux ExternalSecret must reference new bucket"],
103
+ "open_gaps": [],
104
+ "verification": null
105
+ },
106
+ "consolidation_report": null,
107
+ "approval_request": {
108
+ "operation": "Create GCS bucket qxo-events-dev",
109
+ "exact_content": "terraform apply -auto-approve",
110
+ "scope": "terraform/gcs/main.tf, GCS bucket in us-east4",
111
+ "risk_level": "MEDIUM",
112
+ "rollback": "terraform destroy -target=google_storage_bucket.events",
113
+ "verification": "gcloud storage buckets describe gs://qxo-events-dev"
114
+ }
115
+ }
116
+ ```
117
+
118
+ ## APPROVAL_REQUEST with approval_id (hook blocked T3 command)
119
+
120
+ ```json:contract
121
+ {
122
+ "agent_status": {
123
+ "plan_status": "APPROVAL_REQUEST",
124
+ "agent_id": "af1d9b7",
125
+ "pending_steps": ["execute git push", "verify Flux reconciliation"],
126
+ "next_action": "Hook blocked git push -- awaiting user approval"
127
+ },
128
+ "evidence_report": {
129
+ "patterns_checked": ["git branch naming in flux/clusters/"],
130
+ "files_checked": ["flux/apps/qxo-api/helmrelease.yaml"],
131
+ "commands_run": ["git diff HEAD -> 1 file changed", "git push origin main -> BLOCKED by hook"],
132
+ "key_outputs": ["Push blocked by security hook, approval_id issued"],
133
+ "verbatim_outputs": ["[T3_BLOCKED] MUTATIVE operation requires user approval. approval_id: a1b2c3..."],
134
+ "cross_layer_impacts": ["Flux will reconcile HelmRelease on push"],
135
+ "open_gaps": [],
136
+ "verification": null
137
+ },
138
+ "consolidation_report": null,
139
+ "approval_request": {
140
+ "operation": "Push HelmRelease changes to main",
141
+ "exact_content": "git push origin main",
142
+ "scope": "flux/apps/qxo-api/helmrelease.yaml",
143
+ "risk_level": "MEDIUM",
144
+ "rollback": "git revert HEAD && git push",
145
+ "verification": "flux get hr -n qxo -> reconciled",
146
+ "approval_id": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6"
147
+ }
148
+ }
149
+ ```
150
+
151
+ ## With Consolidation (multi-surface task)
152
+
153
+ ```json:contract
154
+ {
155
+ "agent_status": {
156
+ "plan_status": "COMPLETE",
157
+ "agent_id": "af4b2e8",
158
+ "pending_steps": [],
159
+ "next_action": "done"
160
+ },
161
+ "evidence_report": {
162
+ "patterns_checked": ["terraform module structure in terraform/modules/"],
163
+ "files_checked": ["terraform/modules/gke/main.tf", "flux/clusters/dev/kustomization.yaml"],
164
+ "commands_run": ["terragrunt plan -chdir=/abs/path -> no changes"],
165
+ "key_outputs": ["Terraform state matches code; Flux kustomization references correct cluster"],
166
+ "verbatim_outputs": [],
167
+ "cross_layer_impacts": ["Flux depends on GKE node pool count from terraform output"],
168
+ "open_gaps": ["HPA config in flux not verified"],
169
+ "verification": {
170
+ "method": "dry-run",
171
+ "checks": ["terragrunt plan shows no changes", "kustomization references match cluster name"],
172
+ "result": "pass",
173
+ "details": "Plan: 0 to add, 0 to change, 0 to destroy. Kustomization sourceRef matches cluster af4b2e8."
174
+ }
175
+ },
176
+ "consolidation_report": {
177
+ "ownership_assessment": "cross_surface_dependency",
178
+ "confirmed_findings": ["GKE cluster config matches terraform code", "Node pool count is 3 in both plan and live"],
179
+ "suspected_findings": ["HPA max replicas may exceed node capacity"],
180
+ "conflicts": [],
181
+ "open_gaps": ["HPA config in flux not verified -- gitops-operator should check"],
182
+ "next_best_agent": "gitops-operator"
183
+ },
184
+ "approval_request": null
185
+ }
186
+ ```
187
+
188
+ ## COMPLETE with task decomposition (multi-increment)
189
+
190
+ Shows a skill-creation task where each subtask was verified individually.
191
+
192
+ ```json:contract
193
+ {
194
+ "agent_status": {
195
+ "plan_status": "COMPLETE",
196
+ "agent_id": "a9c4f71",
197
+ "pending_steps": [],
198
+ "next_action": "done"
199
+ },
200
+ "evidence_report": {
201
+ "patterns_checked": ["existing skill structure in skills/", "skill-creation standards"],
202
+ "files_checked": ["skills/new-skill/SKILL.md", "skills/new-skill/reference.md"],
203
+ "commands_run": [],
204
+ "key_outputs": ["Created new-skill with SKILL.md (87 lines) and reference.md"],
205
+ "verbatim_outputs": [],
206
+ "cross_layer_impacts": ["Agents using this skill need frontmatter update"],
207
+ "open_gaps": [],
208
+ "verification": {
209
+ "method": "self-review",
210
+ "checks": [
211
+ "SKILL.md line count: 87 (under 100 budget)",
212
+ "Frontmatter has name, description, metadata fields",
213
+ "Description contains triggering conditions only",
214
+ "Type-appropriate structure (domain: conventions, examples, key rules)"
215
+ ],
216
+ "result": "pass",
217
+ "details": "87 lines. Frontmatter valid. Description triggers on domain conditions. Structure matches domain type from skill-creation standards."
218
+ }
219
+ },
220
+ "consolidation_report": null,
221
+ "approval_request": null
222
+ }
223
+ ```
@@ -0,0 +1,69 @@
1
+ ---
2
+ name: agent-response
3
+ description: Use when an agent returns a json:contract response that needs to be interpreted and presented to the user
4
+ metadata:
5
+ user-invocable: false
6
+ type: protocol
7
+ ---
8
+
9
+ # Agent Response Protocol
10
+
11
+ The orchestrator's job is translation -- turning structured agent output into
12
+ clear user communication. Every status requires a different response because
13
+ each represents a different kind of decision point for the user.
14
+
15
+ ## State Machine
16
+
17
+ ```
18
+ Agent returns json:contract
19
+ |- COMPLETE -> Summarize key_outputs (3-5 bullets)
20
+ |- NEEDS_INPUT -> AskUserQuestion, then SendMessage answer back
21
+ |- REVIEW -> Load Skill("orchestrator-approval") if approval_id present,
22
+ | otherwise AskUserQuestion (execute/modify/cancel),
23
+ | then SendMessage to resume the same agent
24
+ |- BLOCKED -> Present open_gaps via AskUserQuestion
25
+ | If user provides direction: dispatch new agent addressing the blocker.
26
+ | If user accepts the limitation: close the task as incomplete and move on.
27
+ +- IN_PROGRESS -> SendMessage to resume agent
28
+ ```
29
+
30
+ ## Mandatory Actions per Status
31
+
32
+ | Status | Action | Tool |
33
+ |---|---|---|
34
+ | `COMPLETE` | Summarize `key_outputs` in 3-5 bullets. Mention `cross_layer_impacts` and `open_gaps` if non-empty. Say "ask for details" if `verbatim_outputs` exists. | Direct response |
35
+ | `NEEDS_INPUT` | Present the agent's question with options | `AskUserQuestion` -> `SendMessage` |
36
+ | `REVIEW` | If `approval_request.approval_id` is present: load `Skill("orchestrator-approval")`. Otherwise: present plan with options execute / modify / cancel. On execute or modify: resume the SAME agent via SendMessage -- it already holds full context from its investigation. | `AskUserQuestion` -> `SendMessage` |
37
+ | `BLOCKED` | Present alternatives from `open_gaps`. If user provides direction, dispatch a new agent addressing the blocker. If user accepts the limitation, close as incomplete and move on. | `AskUserQuestion` |
38
+ | `IN_PROGRESS` | Agent was interrupted, let it continue | `SendMessage` |
39
+
40
+ **Why REVIEW splits on approval_id:** Hook-blocked T3 operations carry a pending
41
+ grant that requires the structured approval flow (exact content, rollback, risk).
42
+ Plan-first REVIEW has no pending grant -- the user just needs to confirm direction.
43
+ Treating both the same either over-formalizes simple plans or under-secures T3 ops.
44
+
45
+ ## Output Fields
46
+
47
+ | Field | When to surface |
48
+ |---|---|
49
+ | `key_outputs` | Always -- base your summary on these |
50
+ | `verbatim_outputs` | Only when user asks for details -- relay in code blocks |
51
+ | `cross_layer_impacts` | Always mention if non-empty -- these are side effects the user may not anticipate |
52
+ | `open_gaps` | Always mention -- never imply certainty the agent does not have |
53
+ | `consolidation_report` | Check for `conflicts` and `next_best_agent` |
54
+ | `next_best_agent` | Ask user if they want to dispatch |
55
+
56
+ ## Multiple Agents
57
+
58
+ Wait for ALL dispatched agents before responding. Partial results
59
+ mislead -- the user acts on incomplete information, then the second
60
+ agent contradicts the first.
61
+
62
+ Consolidate findings. If agents conflict, present both sides and
63
+ ask the user to decide.
64
+
65
+ ## Error Handling
66
+
67
+ | Situation | Action |
68
+ |---|---|
69
+ | Malformed contract | Resume agent with repair instructions (max 2 retries). |
@@ -0,0 +1,80 @@
1
+ ---
2
+ name: agentic-loop
3
+ description: Use when the orchestrator injects "Carga la skill agentic-loop" with a goal, eval_command, metric, and threshold
4
+ metadata:
5
+ user-invocable: false
6
+ type: technique
7
+ ---
8
+
9
+ # Agentic Loop
10
+
11
+ Iterative improvement through small, reversible changes evaluated against a single metric. Each iteration is one hypothesis, one edit, one eval, one decision. The metric decides -- not you.
12
+
13
+ ## Parameters (from orchestrator prompt)
14
+
15
+ `goal`, `eval_command`, `metric`, `direction` (higher/lower), `threshold`, `max_iterations`, `files_in_scope`, `branch`
16
+
17
+ ## Setup
18
+
19
+ 1. Read every file in `files_in_scope` deeply -- understand before changing
20
+ 2. `git checkout -b {branch}`
21
+ 3. Run `eval_command` -- parse `METRIC {name}={number}` from stdout -- this is your baseline
22
+ 4. Write `state.json` and `worklog.md` (schemas in `reference.md`)
23
+ 5. `git commit -m "baseline: {metric} {value}"`
24
+
25
+ ## Loop (repeat until threshold, max_iterations, or stop)
26
+
27
+ 1. **HYPOTHESIZE** -- based on worklog insights and last failure. When stuck, re-read source files; thinking longer beats trying faster
28
+ 2. **EDIT** -- one focused change. Smaller diffs are easier to evaluate and reverse
29
+ 3. **EVALUATE** -- run `eval_command`, parse `METRIC {name}={number}`
30
+ 4. **DECIDE** (mechanically, not judgment):
31
+ - Improved (or equal with less code) -- KEEP -- `git add -A` then `git commit -m "improve: {metric} {old}->{new}"`
32
+ - Same or worse -- DISCARD -- `git checkout -- .` then `git clean -fd`
33
+ 5. **LOG** -- append to `worklog.md`: run number, what changed, result, insight, next idea
34
+ 6. **UPDATE** -- write `state.json` with current values
35
+ 7. **ESCALATE** if needed:
36
+ - 3 consecutive discards -- REFINE (adjust within current strategy)
37
+ - 5 consecutive discards -- PIVOT (structurally different approach)
38
+ - 3 pivots without a keep -- STOP and report blockers
39
+ 8. Every 10 iterations: re-read `files_in_scope`, review worklog "What's Been Tried", recalibrate
40
+
41
+ ## Termination
42
+
43
+ - **Threshold reached** -- `git commit -m "final: {metric} {baseline}->{final} in N iterations"`, write summary
44
+ - **Max iterations** -- report best achieved vs threshold
45
+ - **Stop from escalation** -- report what was tried and what blocked progress
46
+ - All paths: finalize `state.json` (status: complete/stopped), write summary in `worklog.md`
47
+
48
+ ## Contract Integration
49
+
50
+ Include `loop_status` in your `json:contract` agent_status on every response:
51
+
52
+ ```json
53
+ "loop_status": {
54
+ "iteration": 5,
55
+ "metric": 94.5,
56
+ "best": 94.5,
57
+ "baseline": 89.0,
58
+ "threshold": 98,
59
+ "status": "iterating"
60
+ }
61
+ ```
62
+
63
+ Do NOT return `plan_status: "COMPLETE"` until the loop finishes. The user may be away for hours.
64
+
65
+ ## Rules
66
+
67
+ - **Loop forever.** Never ask "should I continue?" The metric and thresholds decide when to stop. The user may be away for hours.
68
+ - **One change per iteration.** Multiple changes make it impossible to isolate what helped.
69
+ - **Metric is king.** Personal judgment about code quality does not override the number.
70
+ - **Simpler wins ties.** Removing code for equal performance is a keep.
71
+ - **Think longer when stuck.** Re-read source files before trying faster. Fresh context beats more iterations.
72
+ - **Retreat, don't thrash.** Same idea reverting repeatedly means the approach is wrong -- pivot.
73
+
74
+ ## Anti-Patterns
75
+
76
+ - Making multiple changes per iteration -- cannot isolate what helped or hurt
77
+ - Skipping eval after a change -- invisible regressions compound
78
+ - Continuing after 3 pivots without improvement -- diminishing returns; stop and report
79
+ - Using `git clean -fdx` instead of `-fd` -- destroys untracked config files needed by eval
80
+ - Editing state.json by hand instead of writing it atomically after each phase