@jaguilar87/gaia 5.0.0-rc.2

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 (621) 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 +1298 -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 +111 -0
  16. package/agents/gaia-planner.md +53 -0
  17. package/agents/gaia-system.md +71 -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 +651 -0
  26. package/bin/cli/history.py +305 -0
  27. package/bin/cli/memory.py +483 -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 +919 -0
  45. package/bin/pre-publish-validate.js +610 -0
  46. package/bin/python-detect.js +60 -0
  47. package/bin/validate-sandbox.sh +601 -0
  48. package/commands/README.md +64 -0
  49. package/commands/gaia.md +37 -0
  50. package/commands/scan-project.md +67 -0
  51. package/config/README.md +71 -0
  52. package/config/cloud/aws.json +134 -0
  53. package/config/cloud/gcp.json +139 -0
  54. package/config/context-contracts.json +158 -0
  55. package/config/crons-schema.md +81 -0
  56. package/config/git_standards.json +72 -0
  57. package/config/surface-routing.json +417 -0
  58. package/config/universal-rules.json +102 -0
  59. package/dist/gaia-ops/.claude-plugin/plugin.json +24 -0
  60. package/dist/gaia-ops/README.md +80 -0
  61. package/dist/gaia-ops/agents/cloud-troubleshooter.md +73 -0
  62. package/dist/gaia-ops/agents/developer.md +65 -0
  63. package/dist/gaia-ops/agents/gaia-operator.md +64 -0
  64. package/dist/gaia-ops/agents/gaia-orchestrator.md +111 -0
  65. package/dist/gaia-ops/agents/gaia-planner.md +53 -0
  66. package/dist/gaia-ops/agents/gaia-system.md +71 -0
  67. package/dist/gaia-ops/agents/gitops-operator.md +61 -0
  68. package/dist/gaia-ops/agents/terraform-architect.md +63 -0
  69. package/dist/gaia-ops/commands/gaia.md +37 -0
  70. package/dist/gaia-ops/config/README.md +71 -0
  71. package/dist/gaia-ops/config/cloud/aws.json +134 -0
  72. package/dist/gaia-ops/config/cloud/gcp.json +139 -0
  73. package/dist/gaia-ops/config/context-contracts.json +158 -0
  74. package/dist/gaia-ops/config/crons-schema.md +81 -0
  75. package/dist/gaia-ops/config/git_standards.json +72 -0
  76. package/dist/gaia-ops/config/surface-routing.json +417 -0
  77. package/dist/gaia-ops/config/universal-rules.json +102 -0
  78. package/dist/gaia-ops/hooks/adapters/__init__.py +52 -0
  79. package/dist/gaia-ops/hooks/adapters/base.py +219 -0
  80. package/dist/gaia-ops/hooks/adapters/channel.py +17 -0
  81. package/dist/gaia-ops/hooks/adapters/claude_code.py +1890 -0
  82. package/dist/gaia-ops/hooks/adapters/types.py +194 -0
  83. package/dist/gaia-ops/hooks/adapters/utils.py +25 -0
  84. package/dist/gaia-ops/hooks/hooks.json +192 -0
  85. package/dist/gaia-ops/hooks/modules/__init__.py +15 -0
  86. package/dist/gaia-ops/hooks/modules/agents/__init__.py +29 -0
  87. package/dist/gaia-ops/hooks/modules/agents/contract_validator.py +647 -0
  88. package/dist/gaia-ops/hooks/modules/agents/response_contract.py +496 -0
  89. package/dist/gaia-ops/hooks/modules/agents/skill_injection_verifier.py +120 -0
  90. package/dist/gaia-ops/hooks/modules/agents/state_tracker.py +267 -0
  91. package/dist/gaia-ops/hooks/modules/agents/task_info_builder.py +74 -0
  92. package/dist/gaia-ops/hooks/modules/agents/transcript_analyzer.py +458 -0
  93. package/dist/gaia-ops/hooks/modules/agents/transcript_reader.py +152 -0
  94. package/dist/gaia-ops/hooks/modules/audit/__init__.py +28 -0
  95. package/dist/gaia-ops/hooks/modules/audit/event_detector.py +168 -0
  96. package/dist/gaia-ops/hooks/modules/audit/logger.py +131 -0
  97. package/dist/gaia-ops/hooks/modules/audit/metrics.py +134 -0
  98. package/dist/gaia-ops/hooks/modules/audit/workflow_auditor.py +611 -0
  99. package/dist/gaia-ops/hooks/modules/audit/workflow_recorder.py +296 -0
  100. package/dist/gaia-ops/hooks/modules/context/__init__.py +11 -0
  101. package/dist/gaia-ops/hooks/modules/context/agentic_loop_detector.py +165 -0
  102. package/dist/gaia-ops/hooks/modules/context/anchor_tracker.py +317 -0
  103. package/dist/gaia-ops/hooks/modules/context/compact_context_builder.py +218 -0
  104. package/dist/gaia-ops/hooks/modules/context/context_freshness.py +145 -0
  105. package/dist/gaia-ops/hooks/modules/context/context_injector.py +558 -0
  106. package/dist/gaia-ops/hooks/modules/context/context_writer.py +530 -0
  107. package/dist/gaia-ops/hooks/modules/context/contracts_loader.py +161 -0
  108. package/dist/gaia-ops/hooks/modules/core/__init__.py +40 -0
  109. package/dist/gaia-ops/hooks/modules/core/hook_entry.py +78 -0
  110. package/dist/gaia-ops/hooks/modules/core/paths.py +160 -0
  111. package/dist/gaia-ops/hooks/modules/core/plugin_mode.py +149 -0
  112. package/dist/gaia-ops/hooks/modules/core/plugin_setup.py +577 -0
  113. package/dist/gaia-ops/hooks/modules/core/state.py +179 -0
  114. package/dist/gaia-ops/hooks/modules/core/stdin.py +24 -0
  115. package/dist/gaia-ops/hooks/modules/events/__init__.py +1 -0
  116. package/dist/gaia-ops/hooks/modules/events/event_writer.py +210 -0
  117. package/dist/gaia-ops/hooks/modules/memory/__init__.py +8 -0
  118. package/dist/gaia-ops/hooks/modules/memory/episode_writer.py +216 -0
  119. package/dist/gaia-ops/hooks/modules/orchestrator/__init__.py +1 -0
  120. package/dist/gaia-ops/hooks/modules/orchestrator/delegate_mode.py +122 -0
  121. package/dist/gaia-ops/hooks/modules/scanning/__init__.py +8 -0
  122. package/dist/gaia-ops/hooks/modules/scanning/scan_trigger.py +84 -0
  123. package/dist/gaia-ops/hooks/modules/security/__init__.py +120 -0
  124. package/dist/gaia-ops/hooks/modules/security/approval_cleanup.py +87 -0
  125. package/dist/gaia-ops/hooks/modules/security/approval_constants.py +23 -0
  126. package/dist/gaia-ops/hooks/modules/security/approval_grants.py +1638 -0
  127. package/dist/gaia-ops/hooks/modules/security/approval_messages.py +71 -0
  128. package/dist/gaia-ops/hooks/modules/security/approval_scopes.py +222 -0
  129. package/dist/gaia-ops/hooks/modules/security/blocked_commands.py +595 -0
  130. package/dist/gaia-ops/hooks/modules/security/blocked_message_formatter.py +87 -0
  131. package/dist/gaia-ops/hooks/modules/security/command_semantics.py +181 -0
  132. package/dist/gaia-ops/hooks/modules/security/composition_rules.py +547 -0
  133. package/dist/gaia-ops/hooks/modules/security/flag_classifiers.py +873 -0
  134. package/dist/gaia-ops/hooks/modules/security/gitops_validator.py +179 -0
  135. package/dist/gaia-ops/hooks/modules/security/mutative_verbs.py +1131 -0
  136. package/dist/gaia-ops/hooks/modules/security/network_hosts.py +481 -0
  137. package/dist/gaia-ops/hooks/modules/security/prompt_validator.py +40 -0
  138. package/dist/gaia-ops/hooks/modules/security/shell_unwrapper.py +165 -0
  139. package/dist/gaia-ops/hooks/modules/security/tiers.py +196 -0
  140. package/dist/gaia-ops/hooks/modules/session/__init__.py +10 -0
  141. package/dist/gaia-ops/hooks/modules/session/pending_scanner.py +174 -0
  142. package/dist/gaia-ops/hooks/modules/session/session_context_writer.py +100 -0
  143. package/dist/gaia-ops/hooks/modules/session/session_event_injector.py +160 -0
  144. package/dist/gaia-ops/hooks/modules/session/session_manager.py +31 -0
  145. package/dist/gaia-ops/hooks/modules/session/session_registry.py +333 -0
  146. package/dist/gaia-ops/hooks/modules/tools/__init__.py +29 -0
  147. package/dist/gaia-ops/hooks/modules/tools/bash_validator.py +1008 -0
  148. package/dist/gaia-ops/hooks/modules/tools/cloud_pipe_validator.py +231 -0
  149. package/dist/gaia-ops/hooks/modules/tools/hook_response.py +55 -0
  150. package/dist/gaia-ops/hooks/modules/tools/shell_parser.py +227 -0
  151. package/dist/gaia-ops/hooks/modules/tools/stage_decomposer.py +315 -0
  152. package/dist/gaia-ops/hooks/modules/tools/task_validator.py +294 -0
  153. package/dist/gaia-ops/hooks/modules/validation/__init__.py +23 -0
  154. package/dist/gaia-ops/hooks/modules/validation/commit_validator.py +380 -0
  155. package/dist/gaia-ops/hooks/post_compact.py +43 -0
  156. package/dist/gaia-ops/hooks/post_tool_use.py +54 -0
  157. package/dist/gaia-ops/hooks/pre_compact.py +60 -0
  158. package/dist/gaia-ops/hooks/pre_tool_use.py +413 -0
  159. package/dist/gaia-ops/hooks/session_end_hook.py +77 -0
  160. package/dist/gaia-ops/hooks/session_start.py +81 -0
  161. package/dist/gaia-ops/hooks/stop_hook.py +70 -0
  162. package/dist/gaia-ops/hooks/subagent_start.py +71 -0
  163. package/dist/gaia-ops/hooks/subagent_stop.py +295 -0
  164. package/dist/gaia-ops/hooks/task_completed.py +70 -0
  165. package/dist/gaia-ops/hooks/user_prompt_submit.py +246 -0
  166. package/dist/gaia-ops/settings.json +72 -0
  167. package/dist/gaia-ops/skills/README.md +158 -0
  168. package/dist/gaia-ops/skills/agent-creation/SKILL.md +87 -0
  169. package/dist/gaia-ops/skills/agent-creation/examples.md +170 -0
  170. package/dist/gaia-ops/skills/agent-creation/reference.md +191 -0
  171. package/dist/gaia-ops/skills/agent-protocol/SKILL.md +93 -0
  172. package/dist/gaia-ops/skills/agent-protocol/examples.md +223 -0
  173. package/dist/gaia-ops/skills/agent-response/SKILL.md +69 -0
  174. package/dist/gaia-ops/skills/agentic-loop/SKILL.md +80 -0
  175. package/dist/gaia-ops/skills/agentic-loop/reference.md +378 -0
  176. package/dist/gaia-ops/skills/blog-writing/SKILL.md +98 -0
  177. package/dist/gaia-ops/skills/blog-writing/reference.md +130 -0
  178. package/dist/gaia-ops/skills/brief-spec/SKILL.md +185 -0
  179. package/dist/gaia-ops/skills/command-execution/SKILL.md +64 -0
  180. package/dist/gaia-ops/skills/command-execution/reference.md +83 -0
  181. package/dist/gaia-ops/skills/context-updater/SKILL.md +87 -0
  182. package/dist/gaia-ops/skills/context-updater/examples.md +71 -0
  183. package/dist/gaia-ops/skills/developer-patterns/SKILL.md +50 -0
  184. package/dist/gaia-ops/skills/developer-patterns/reference.md +112 -0
  185. package/dist/gaia-ops/skills/execution/SKILL.md +99 -0
  186. package/dist/gaia-ops/skills/fast-queries/SKILL.md +43 -0
  187. package/dist/gaia-ops/skills/gaia-compact/SKILL.md +74 -0
  188. package/dist/gaia-ops/skills/gaia-patterns/SKILL.md +108 -0
  189. package/dist/gaia-ops/skills/gaia-patterns/reference.md +395 -0
  190. package/dist/gaia-ops/skills/gaia-planner/SKILL.md +37 -0
  191. package/dist/gaia-ops/skills/gaia-planner/reference.md +107 -0
  192. package/dist/gaia-ops/skills/gaia-release/SKILL.md +85 -0
  193. package/dist/gaia-ops/skills/gaia-release/reference.md +92 -0
  194. package/dist/gaia-ops/skills/gaia-self-check/SKILL.md +114 -0
  195. package/dist/gaia-ops/skills/gaia-self-check/reference.md +453 -0
  196. package/dist/gaia-ops/skills/gaia-verify/SKILL.md +77 -0
  197. package/dist/gaia-ops/skills/gaia-verify/reference.md +80 -0
  198. package/dist/gaia-ops/skills/git-conventions/SKILL.md +47 -0
  199. package/dist/gaia-ops/skills/gitops-patterns/SKILL.md +60 -0
  200. package/dist/gaia-ops/skills/gitops-patterns/reference.md +183 -0
  201. package/dist/gaia-ops/skills/gmail-policy/SKILL.md +200 -0
  202. package/dist/gaia-ops/skills/gmail-policy/reference.md +150 -0
  203. package/dist/gaia-ops/skills/gmail-triage/SKILL.md +100 -0
  204. package/dist/gaia-ops/skills/gws-setup/SKILL.md +99 -0
  205. package/dist/gaia-ops/skills/gws-setup/reference.md +73 -0
  206. package/dist/gaia-ops/skills/investigation/SKILL.md +100 -0
  207. package/dist/gaia-ops/skills/memory-curation/SKILL.md +83 -0
  208. package/dist/gaia-ops/skills/memory-search/SKILL.md +88 -0
  209. package/dist/gaia-ops/skills/orchestrator-approval/SKILL.md +160 -0
  210. package/dist/gaia-ops/skills/orchestrator-approval/reference.md +174 -0
  211. package/dist/gaia-ops/skills/pending-approvals/SKILL.md +72 -0
  212. package/dist/gaia-ops/skills/pending-approvals/reference.md +214 -0
  213. package/dist/gaia-ops/skills/readme-writing/SKILL.md +71 -0
  214. package/dist/gaia-ops/skills/readme-writing/reference.md +188 -0
  215. package/dist/gaia-ops/skills/reference.md +135 -0
  216. package/dist/gaia-ops/skills/request-approval/SKILL.md +140 -0
  217. package/dist/gaia-ops/skills/request-approval/examples.md +140 -0
  218. package/dist/gaia-ops/skills/request-approval/reference.md +57 -0
  219. package/dist/gaia-ops/skills/schedule-task/SKILL.md +64 -0
  220. package/dist/gaia-ops/skills/schedule-task/reference.md +233 -0
  221. package/dist/gaia-ops/skills/security-tiers/SKILL.md +141 -0
  222. package/dist/gaia-ops/skills/security-tiers/destructive-commands-reference.md +623 -0
  223. package/dist/gaia-ops/skills/security-tiers/reference.md +39 -0
  224. package/dist/gaia-ops/skills/session-reflection/SKILL.md +69 -0
  225. package/dist/gaia-ops/skills/skill-creation/SKILL.md +92 -0
  226. package/dist/gaia-ops/skills/skill-creation/reference.md +29 -0
  227. package/dist/gaia-ops/skills/terraform-patterns/SKILL.md +89 -0
  228. package/dist/gaia-ops/skills/terraform-patterns/reference.md +93 -0
  229. package/dist/gaia-ops/tools/__init__.py +9 -0
  230. package/dist/gaia-ops/tools/agentic-loop/decide-status.py +210 -0
  231. package/dist/gaia-ops/tools/agentic-loop/parse-metric.py +106 -0
  232. package/dist/gaia-ops/tools/agentic-loop/record-iteration.py +221 -0
  233. package/dist/gaia-ops/tools/context/README.md +132 -0
  234. package/dist/gaia-ops/tools/context/__init__.py +42 -0
  235. package/dist/gaia-ops/tools/context/_paths.py +20 -0
  236. package/dist/gaia-ops/tools/context/context_provider.py +721 -0
  237. package/dist/gaia-ops/tools/context/context_section_reader.py +342 -0
  238. package/dist/gaia-ops/tools/context/deep_merge.py +159 -0
  239. package/dist/gaia-ops/tools/context/pending_updates.py +760 -0
  240. package/dist/gaia-ops/tools/context/surface_router.py +278 -0
  241. package/dist/gaia-ops/tools/fast-queries/README.md +65 -0
  242. package/dist/gaia-ops/tools/fast-queries/__init__.py +30 -0
  243. package/dist/gaia-ops/tools/fast-queries/appservices/quicktriage_devops_developer.sh +75 -0
  244. package/dist/gaia-ops/tools/fast-queries/cloud/aws/quicktriage_aws_troubleshooter.sh +32 -0
  245. package/dist/gaia-ops/tools/fast-queries/cloud/gcp/quicktriage_gcp_troubleshooter.sh +88 -0
  246. package/dist/gaia-ops/tools/fast-queries/gitops/quicktriage_gitops_operator.sh +48 -0
  247. package/dist/gaia-ops/tools/fast-queries/run_triage.sh +59 -0
  248. package/dist/gaia-ops/tools/fast-queries/terraform/quicktriage_terraform_architect.sh +80 -0
  249. package/dist/gaia-ops/tools/gaia_simulator/__init__.py +33 -0
  250. package/dist/gaia-ops/tools/gaia_simulator/cli.py +354 -0
  251. package/dist/gaia-ops/tools/gaia_simulator/extractor.py +457 -0
  252. package/dist/gaia-ops/tools/gaia_simulator/reporter.py +258 -0
  253. package/dist/gaia-ops/tools/gaia_simulator/routing_simulator.py +334 -0
  254. package/dist/gaia-ops/tools/gaia_simulator/runner.py +539 -0
  255. package/dist/gaia-ops/tools/gaia_simulator/skills_mapper.py +264 -0
  256. package/dist/gaia-ops/tools/memory/README.md +0 -0
  257. package/dist/gaia-ops/tools/memory/__init__.py +20 -0
  258. package/dist/gaia-ops/tools/memory/backfill_fts5.py +107 -0
  259. package/dist/gaia-ops/tools/memory/conflict_detector.py +295 -0
  260. package/dist/gaia-ops/tools/memory/episodic.py +1210 -0
  261. package/dist/gaia-ops/tools/memory/git_invalidator.py +262 -0
  262. package/dist/gaia-ops/tools/memory/paths.py +102 -0
  263. package/dist/gaia-ops/tools/memory/scoring.py +193 -0
  264. package/dist/gaia-ops/tools/memory/search_store.py +375 -0
  265. package/dist/gaia-ops/tools/persist_transcript_analysis.py +85 -0
  266. package/dist/gaia-ops/tools/review/__init__.py +1 -0
  267. package/dist/gaia-ops/tools/review/review_engine.py +157 -0
  268. package/dist/gaia-ops/tools/scan/__init__.py +35 -0
  269. package/dist/gaia-ops/tools/scan/config.py +247 -0
  270. package/dist/gaia-ops/tools/scan/merge.py +212 -0
  271. package/dist/gaia-ops/tools/scan/orchestrator.py +549 -0
  272. package/dist/gaia-ops/tools/scan/registry.py +127 -0
  273. package/dist/gaia-ops/tools/scan/scanners/__init__.py +18 -0
  274. package/dist/gaia-ops/tools/scan/scanners/base.py +137 -0
  275. package/dist/gaia-ops/tools/scan/scanners/environment.py +349 -0
  276. package/dist/gaia-ops/tools/scan/scanners/git.py +570 -0
  277. package/dist/gaia-ops/tools/scan/scanners/infrastructure.py +875 -0
  278. package/dist/gaia-ops/tools/scan/scanners/orchestration.py +600 -0
  279. package/dist/gaia-ops/tools/scan/scanners/stack.py +1085 -0
  280. package/dist/gaia-ops/tools/scan/scanners/tools.py +260 -0
  281. package/dist/gaia-ops/tools/scan/setup.py +686 -0
  282. package/dist/gaia-ops/tools/scan/tests/__init__.py +1 -0
  283. package/dist/gaia-ops/tools/scan/tests/conftest.py +796 -0
  284. package/dist/gaia-ops/tools/scan/tests/test_environment.py +323 -0
  285. package/dist/gaia-ops/tools/scan/tests/test_git.py +419 -0
  286. package/dist/gaia-ops/tools/scan/tests/test_infrastructure.py +382 -0
  287. package/dist/gaia-ops/tools/scan/tests/test_integration.py +920 -0
  288. package/dist/gaia-ops/tools/scan/tests/test_merge.py +269 -0
  289. package/dist/gaia-ops/tools/scan/tests/test_orchestration.py +304 -0
  290. package/dist/gaia-ops/tools/scan/tests/test_stack.py +604 -0
  291. package/dist/gaia-ops/tools/scan/tests/test_tools.py +349 -0
  292. package/dist/gaia-ops/tools/scan/ui.py +624 -0
  293. package/dist/gaia-ops/tools/scan/verify.py +270 -0
  294. package/dist/gaia-ops/tools/scan/walk.py +118 -0
  295. package/dist/gaia-ops/tools/scan/workspace.py +85 -0
  296. package/dist/gaia-ops/tools/validation/README.md +244 -0
  297. package/dist/gaia-ops/tools/validation/__init__.py +17 -0
  298. package/dist/gaia-ops/tools/validation/approval_gate.py +321 -0
  299. package/dist/gaia-ops/tools/validation/validate_skills.py +189 -0
  300. package/dist/gaia-security/.claude-plugin/plugin.json +24 -0
  301. package/dist/gaia-security/README.md +90 -0
  302. package/dist/gaia-security/config/universal-rules.json +102 -0
  303. package/dist/gaia-security/hooks/adapters/__init__.py +52 -0
  304. package/dist/gaia-security/hooks/adapters/base.py +219 -0
  305. package/dist/gaia-security/hooks/adapters/channel.py +17 -0
  306. package/dist/gaia-security/hooks/adapters/claude_code.py +1890 -0
  307. package/dist/gaia-security/hooks/adapters/types.py +194 -0
  308. package/dist/gaia-security/hooks/adapters/utils.py +25 -0
  309. package/dist/gaia-security/hooks/hooks.json +113 -0
  310. package/dist/gaia-security/hooks/modules/__init__.py +15 -0
  311. package/dist/gaia-security/hooks/modules/agents/__init__.py +29 -0
  312. package/dist/gaia-security/hooks/modules/agents/contract_validator.py +647 -0
  313. package/dist/gaia-security/hooks/modules/agents/response_contract.py +496 -0
  314. package/dist/gaia-security/hooks/modules/agents/skill_injection_verifier.py +120 -0
  315. package/dist/gaia-security/hooks/modules/agents/state_tracker.py +267 -0
  316. package/dist/gaia-security/hooks/modules/agents/task_info_builder.py +74 -0
  317. package/dist/gaia-security/hooks/modules/agents/transcript_analyzer.py +458 -0
  318. package/dist/gaia-security/hooks/modules/agents/transcript_reader.py +152 -0
  319. package/dist/gaia-security/hooks/modules/audit/__init__.py +28 -0
  320. package/dist/gaia-security/hooks/modules/audit/event_detector.py +168 -0
  321. package/dist/gaia-security/hooks/modules/audit/logger.py +131 -0
  322. package/dist/gaia-security/hooks/modules/audit/metrics.py +134 -0
  323. package/dist/gaia-security/hooks/modules/audit/workflow_auditor.py +611 -0
  324. package/dist/gaia-security/hooks/modules/audit/workflow_recorder.py +296 -0
  325. package/dist/gaia-security/hooks/modules/context/__init__.py +11 -0
  326. package/dist/gaia-security/hooks/modules/context/agentic_loop_detector.py +165 -0
  327. package/dist/gaia-security/hooks/modules/context/anchor_tracker.py +317 -0
  328. package/dist/gaia-security/hooks/modules/context/compact_context_builder.py +218 -0
  329. package/dist/gaia-security/hooks/modules/context/context_freshness.py +145 -0
  330. package/dist/gaia-security/hooks/modules/context/context_injector.py +558 -0
  331. package/dist/gaia-security/hooks/modules/context/context_writer.py +530 -0
  332. package/dist/gaia-security/hooks/modules/context/contracts_loader.py +161 -0
  333. package/dist/gaia-security/hooks/modules/core/__init__.py +40 -0
  334. package/dist/gaia-security/hooks/modules/core/hook_entry.py +78 -0
  335. package/dist/gaia-security/hooks/modules/core/paths.py +160 -0
  336. package/dist/gaia-security/hooks/modules/core/plugin_mode.py +149 -0
  337. package/dist/gaia-security/hooks/modules/core/plugin_setup.py +577 -0
  338. package/dist/gaia-security/hooks/modules/core/state.py +179 -0
  339. package/dist/gaia-security/hooks/modules/core/stdin.py +24 -0
  340. package/dist/gaia-security/hooks/modules/events/__init__.py +1 -0
  341. package/dist/gaia-security/hooks/modules/events/event_writer.py +210 -0
  342. package/dist/gaia-security/hooks/modules/memory/__init__.py +8 -0
  343. package/dist/gaia-security/hooks/modules/memory/episode_writer.py +216 -0
  344. package/dist/gaia-security/hooks/modules/orchestrator/__init__.py +1 -0
  345. package/dist/gaia-security/hooks/modules/orchestrator/delegate_mode.py +122 -0
  346. package/dist/gaia-security/hooks/modules/scanning/__init__.py +8 -0
  347. package/dist/gaia-security/hooks/modules/scanning/scan_trigger.py +84 -0
  348. package/dist/gaia-security/hooks/modules/security/__init__.py +120 -0
  349. package/dist/gaia-security/hooks/modules/security/approval_cleanup.py +87 -0
  350. package/dist/gaia-security/hooks/modules/security/approval_constants.py +23 -0
  351. package/dist/gaia-security/hooks/modules/security/approval_grants.py +1638 -0
  352. package/dist/gaia-security/hooks/modules/security/approval_messages.py +71 -0
  353. package/dist/gaia-security/hooks/modules/security/approval_scopes.py +222 -0
  354. package/dist/gaia-security/hooks/modules/security/blocked_commands.py +595 -0
  355. package/dist/gaia-security/hooks/modules/security/blocked_message_formatter.py +87 -0
  356. package/dist/gaia-security/hooks/modules/security/command_semantics.py +181 -0
  357. package/dist/gaia-security/hooks/modules/security/composition_rules.py +547 -0
  358. package/dist/gaia-security/hooks/modules/security/flag_classifiers.py +873 -0
  359. package/dist/gaia-security/hooks/modules/security/gitops_validator.py +179 -0
  360. package/dist/gaia-security/hooks/modules/security/mutative_verbs.py +1131 -0
  361. package/dist/gaia-security/hooks/modules/security/network_hosts.py +481 -0
  362. package/dist/gaia-security/hooks/modules/security/prompt_validator.py +40 -0
  363. package/dist/gaia-security/hooks/modules/security/shell_unwrapper.py +165 -0
  364. package/dist/gaia-security/hooks/modules/security/tiers.py +196 -0
  365. package/dist/gaia-security/hooks/modules/session/__init__.py +10 -0
  366. package/dist/gaia-security/hooks/modules/session/pending_scanner.py +174 -0
  367. package/dist/gaia-security/hooks/modules/session/session_context_writer.py +100 -0
  368. package/dist/gaia-security/hooks/modules/session/session_event_injector.py +160 -0
  369. package/dist/gaia-security/hooks/modules/session/session_manager.py +31 -0
  370. package/dist/gaia-security/hooks/modules/session/session_registry.py +333 -0
  371. package/dist/gaia-security/hooks/modules/tools/__init__.py +29 -0
  372. package/dist/gaia-security/hooks/modules/tools/bash_validator.py +1008 -0
  373. package/dist/gaia-security/hooks/modules/tools/cloud_pipe_validator.py +231 -0
  374. package/dist/gaia-security/hooks/modules/tools/hook_response.py +55 -0
  375. package/dist/gaia-security/hooks/modules/tools/shell_parser.py +227 -0
  376. package/dist/gaia-security/hooks/modules/tools/stage_decomposer.py +315 -0
  377. package/dist/gaia-security/hooks/modules/tools/task_validator.py +294 -0
  378. package/dist/gaia-security/hooks/modules/validation/__init__.py +23 -0
  379. package/dist/gaia-security/hooks/modules/validation/commit_validator.py +380 -0
  380. package/dist/gaia-security/hooks/post_tool_use.py +54 -0
  381. package/dist/gaia-security/hooks/pre_tool_use.py +413 -0
  382. package/dist/gaia-security/hooks/session_end_hook.py +77 -0
  383. package/dist/gaia-security/hooks/session_start.py +81 -0
  384. package/dist/gaia-security/hooks/stop_hook.py +70 -0
  385. package/dist/gaia-security/hooks/user_prompt_submit.py +246 -0
  386. package/dist/gaia-security/settings.json +58 -0
  387. package/git-hooks/commit-msg +41 -0
  388. package/hooks/README.md +100 -0
  389. package/hooks/adapters/__init__.py +52 -0
  390. package/hooks/adapters/base.py +219 -0
  391. package/hooks/adapters/channel.py +17 -0
  392. package/hooks/adapters/claude_code.py +1890 -0
  393. package/hooks/adapters/types.py +194 -0
  394. package/hooks/adapters/utils.py +25 -0
  395. package/hooks/elicitation_result.py +179 -0
  396. package/hooks/hooks.json +84 -0
  397. package/hooks/modules/README.md +189 -0
  398. package/hooks/modules/__init__.py +15 -0
  399. package/hooks/modules/agents/__init__.py +29 -0
  400. package/hooks/modules/agents/contract_validator.py +647 -0
  401. package/hooks/modules/agents/response_contract.py +496 -0
  402. package/hooks/modules/agents/skill_injection_verifier.py +120 -0
  403. package/hooks/modules/agents/state_tracker.py +267 -0
  404. package/hooks/modules/agents/task_info_builder.py +74 -0
  405. package/hooks/modules/agents/transcript_analyzer.py +458 -0
  406. package/hooks/modules/agents/transcript_reader.py +152 -0
  407. package/hooks/modules/audit/__init__.py +28 -0
  408. package/hooks/modules/audit/event_detector.py +168 -0
  409. package/hooks/modules/audit/logger.py +131 -0
  410. package/hooks/modules/audit/metrics.py +134 -0
  411. package/hooks/modules/audit/workflow_auditor.py +611 -0
  412. package/hooks/modules/audit/workflow_recorder.py +296 -0
  413. package/hooks/modules/context/__init__.py +11 -0
  414. package/hooks/modules/context/agentic_loop_detector.py +165 -0
  415. package/hooks/modules/context/anchor_tracker.py +317 -0
  416. package/hooks/modules/context/compact_context_builder.py +218 -0
  417. package/hooks/modules/context/context_freshness.py +145 -0
  418. package/hooks/modules/context/context_injector.py +558 -0
  419. package/hooks/modules/context/context_writer.py +530 -0
  420. package/hooks/modules/context/contracts_loader.py +161 -0
  421. package/hooks/modules/core/__init__.py +40 -0
  422. package/hooks/modules/core/hook_entry.py +78 -0
  423. package/hooks/modules/core/paths.py +160 -0
  424. package/hooks/modules/core/plugin_mode.py +149 -0
  425. package/hooks/modules/core/plugin_setup.py +577 -0
  426. package/hooks/modules/core/state.py +179 -0
  427. package/hooks/modules/core/stdin.py +24 -0
  428. package/hooks/modules/events/__init__.py +1 -0
  429. package/hooks/modules/events/event_writer.py +210 -0
  430. package/hooks/modules/evidence/__init__.py +34 -0
  431. package/hooks/modules/evidence/assertions.py +137 -0
  432. package/hooks/modules/evidence/index_writer.py +57 -0
  433. package/hooks/modules/evidence/loader.py +126 -0
  434. package/hooks/modules/evidence/runner.py +241 -0
  435. package/hooks/modules/memory/__init__.py +8 -0
  436. package/hooks/modules/memory/episode_writer.py +216 -0
  437. package/hooks/modules/orchestrator/__init__.py +1 -0
  438. package/hooks/modules/orchestrator/delegate_mode.py +122 -0
  439. package/hooks/modules/scanning/__init__.py +8 -0
  440. package/hooks/modules/scanning/scan_trigger.py +84 -0
  441. package/hooks/modules/security/__init__.py +120 -0
  442. package/hooks/modules/security/approval_cleanup.py +87 -0
  443. package/hooks/modules/security/approval_constants.py +23 -0
  444. package/hooks/modules/security/approval_grants.py +1638 -0
  445. package/hooks/modules/security/approval_messages.py +71 -0
  446. package/hooks/modules/security/approval_scopes.py +222 -0
  447. package/hooks/modules/security/blocked_commands.py +595 -0
  448. package/hooks/modules/security/blocked_message_formatter.py +87 -0
  449. package/hooks/modules/security/command_semantics.py +181 -0
  450. package/hooks/modules/security/composition_rules.py +547 -0
  451. package/hooks/modules/security/flag_classifiers.py +873 -0
  452. package/hooks/modules/security/gitops_validator.py +179 -0
  453. package/hooks/modules/security/mutative_verbs.py +1131 -0
  454. package/hooks/modules/security/network_hosts.py +481 -0
  455. package/hooks/modules/security/prompt_validator.py +40 -0
  456. package/hooks/modules/security/shell_unwrapper.py +165 -0
  457. package/hooks/modules/security/tiers.py +196 -0
  458. package/hooks/modules/session/__init__.py +10 -0
  459. package/hooks/modules/session/pending_scanner.py +174 -0
  460. package/hooks/modules/session/session_context_writer.py +100 -0
  461. package/hooks/modules/session/session_event_injector.py +160 -0
  462. package/hooks/modules/session/session_manager.py +31 -0
  463. package/hooks/modules/session/session_registry.py +333 -0
  464. package/hooks/modules/tools/__init__.py +29 -0
  465. package/hooks/modules/tools/bash_validator.py +1008 -0
  466. package/hooks/modules/tools/cloud_pipe_validator.py +231 -0
  467. package/hooks/modules/tools/hook_response.py +55 -0
  468. package/hooks/modules/tools/shell_parser.py +227 -0
  469. package/hooks/modules/tools/stage_decomposer.py +315 -0
  470. package/hooks/modules/tools/task_validator.py +294 -0
  471. package/hooks/modules/validation/__init__.py +23 -0
  472. package/hooks/modules/validation/commit_validator.py +380 -0
  473. package/hooks/post_compact.py +43 -0
  474. package/hooks/post_tool_use.py +54 -0
  475. package/hooks/pre_compact.py +60 -0
  476. package/hooks/pre_tool_use.py +413 -0
  477. package/hooks/session_end_hook.py +77 -0
  478. package/hooks/session_start.py +81 -0
  479. package/hooks/stop_hook.py +70 -0
  480. package/hooks/subagent_start.py +71 -0
  481. package/hooks/subagent_stop.py +295 -0
  482. package/hooks/task_completed.py +70 -0
  483. package/hooks/user_prompt_submit.py +246 -0
  484. package/index.js +83 -0
  485. package/package.json +103 -0
  486. package/pyproject.toml +32 -0
  487. package/skills/README.md +158 -0
  488. package/skills/agent-creation/SKILL.md +87 -0
  489. package/skills/agent-creation/examples.md +170 -0
  490. package/skills/agent-creation/reference.md +191 -0
  491. package/skills/agent-protocol/SKILL.md +93 -0
  492. package/skills/agent-protocol/examples.md +223 -0
  493. package/skills/agent-response/SKILL.md +69 -0
  494. package/skills/agentic-loop/SKILL.md +80 -0
  495. package/skills/agentic-loop/reference.md +378 -0
  496. package/skills/blog-writing/SKILL.md +98 -0
  497. package/skills/blog-writing/reference.md +130 -0
  498. package/skills/brief-spec/SKILL.md +185 -0
  499. package/skills/command-execution/SKILL.md +64 -0
  500. package/skills/command-execution/reference.md +83 -0
  501. package/skills/context-updater/SKILL.md +87 -0
  502. package/skills/context-updater/examples.md +71 -0
  503. package/skills/developer-patterns/SKILL.md +50 -0
  504. package/skills/developer-patterns/reference.md +112 -0
  505. package/skills/execution/SKILL.md +99 -0
  506. package/skills/fast-queries/SKILL.md +43 -0
  507. package/skills/gaia-compact/SKILL.md +74 -0
  508. package/skills/gaia-patterns/SKILL.md +108 -0
  509. package/skills/gaia-patterns/reference.md +395 -0
  510. package/skills/gaia-planner/SKILL.md +37 -0
  511. package/skills/gaia-planner/reference.md +107 -0
  512. package/skills/gaia-release/SKILL.md +85 -0
  513. package/skills/gaia-release/reference.md +92 -0
  514. package/skills/gaia-self-check/SKILL.md +114 -0
  515. package/skills/gaia-self-check/reference.md +453 -0
  516. package/skills/gaia-verify/SKILL.md +77 -0
  517. package/skills/gaia-verify/reference.md +80 -0
  518. package/skills/git-conventions/SKILL.md +47 -0
  519. package/skills/gitops-patterns/SKILL.md +60 -0
  520. package/skills/gitops-patterns/reference.md +183 -0
  521. package/skills/gmail-policy/SKILL.md +200 -0
  522. package/skills/gmail-policy/reference.md +150 -0
  523. package/skills/gmail-triage/SKILL.md +100 -0
  524. package/skills/gws-setup/SKILL.md +99 -0
  525. package/skills/gws-setup/reference.md +73 -0
  526. package/skills/investigation/SKILL.md +100 -0
  527. package/skills/memory-curation/SKILL.md +83 -0
  528. package/skills/memory-search/SKILL.md +88 -0
  529. package/skills/orchestrator-approval/SKILL.md +160 -0
  530. package/skills/orchestrator-approval/reference.md +174 -0
  531. package/skills/pending-approvals/SKILL.md +72 -0
  532. package/skills/pending-approvals/reference.md +214 -0
  533. package/skills/readme-writing/SKILL.md +71 -0
  534. package/skills/readme-writing/reference.md +188 -0
  535. package/skills/reference.md +135 -0
  536. package/skills/request-approval/SKILL.md +140 -0
  537. package/skills/request-approval/examples.md +140 -0
  538. package/skills/request-approval/reference.md +57 -0
  539. package/skills/schedule-task/SKILL.md +64 -0
  540. package/skills/schedule-task/reference.md +233 -0
  541. package/skills/security-tiers/SKILL.md +141 -0
  542. package/skills/security-tiers/destructive-commands-reference.md +623 -0
  543. package/skills/security-tiers/reference.md +39 -0
  544. package/skills/session-reflection/SKILL.md +69 -0
  545. package/skills/skill-creation/SKILL.md +92 -0
  546. package/skills/skill-creation/reference.md +29 -0
  547. package/skills/terraform-patterns/SKILL.md +89 -0
  548. package/skills/terraform-patterns/reference.md +93 -0
  549. package/templates/README.md +69 -0
  550. package/templates/managed-settings.template.json +43 -0
  551. package/tools/__init__.py +9 -0
  552. package/tools/agentic-loop/decide-status.py +210 -0
  553. package/tools/agentic-loop/parse-metric.py +106 -0
  554. package/tools/agentic-loop/record-iteration.py +221 -0
  555. package/tools/context/README.md +132 -0
  556. package/tools/context/__init__.py +42 -0
  557. package/tools/context/_paths.py +20 -0
  558. package/tools/context/context_provider.py +721 -0
  559. package/tools/context/context_section_reader.py +342 -0
  560. package/tools/context/deep_merge.py +159 -0
  561. package/tools/context/pending_updates.py +760 -0
  562. package/tools/context/surface_router.py +278 -0
  563. package/tools/fast-queries/README.md +65 -0
  564. package/tools/fast-queries/__init__.py +30 -0
  565. package/tools/fast-queries/appservices/quicktriage_devops_developer.sh +75 -0
  566. package/tools/fast-queries/cloud/aws/quicktriage_aws_troubleshooter.sh +32 -0
  567. package/tools/fast-queries/cloud/gcp/quicktriage_gcp_troubleshooter.sh +88 -0
  568. package/tools/fast-queries/gitops/quicktriage_gitops_operator.sh +48 -0
  569. package/tools/fast-queries/run_triage.sh +59 -0
  570. package/tools/fast-queries/terraform/quicktriage_terraform_architect.sh +80 -0
  571. package/tools/gaia_simulator/__init__.py +33 -0
  572. package/tools/gaia_simulator/cli.py +354 -0
  573. package/tools/gaia_simulator/extractor.py +457 -0
  574. package/tools/gaia_simulator/reporter.py +258 -0
  575. package/tools/gaia_simulator/routing_simulator.py +334 -0
  576. package/tools/gaia_simulator/runner.py +539 -0
  577. package/tools/gaia_simulator/skills_mapper.py +264 -0
  578. package/tools/memory/README.md +0 -0
  579. package/tools/memory/__init__.py +20 -0
  580. package/tools/memory/backfill_fts5.py +107 -0
  581. package/tools/memory/conflict_detector.py +295 -0
  582. package/tools/memory/episodic.py +1210 -0
  583. package/tools/memory/git_invalidator.py +262 -0
  584. package/tools/memory/paths.py +102 -0
  585. package/tools/memory/scoring.py +193 -0
  586. package/tools/memory/search_store.py +375 -0
  587. package/tools/persist_transcript_analysis.py +85 -0
  588. package/tools/review/__init__.py +1 -0
  589. package/tools/review/review_engine.py +157 -0
  590. package/tools/scan/__init__.py +35 -0
  591. package/tools/scan/config.py +247 -0
  592. package/tools/scan/merge.py +212 -0
  593. package/tools/scan/orchestrator.py +549 -0
  594. package/tools/scan/registry.py +127 -0
  595. package/tools/scan/scanners/__init__.py +18 -0
  596. package/tools/scan/scanners/base.py +137 -0
  597. package/tools/scan/scanners/environment.py +349 -0
  598. package/tools/scan/scanners/git.py +570 -0
  599. package/tools/scan/scanners/infrastructure.py +875 -0
  600. package/tools/scan/scanners/orchestration.py +600 -0
  601. package/tools/scan/scanners/stack.py +1085 -0
  602. package/tools/scan/scanners/tools.py +260 -0
  603. package/tools/scan/setup.py +686 -0
  604. package/tools/scan/tests/__init__.py +1 -0
  605. package/tools/scan/tests/conftest.py +796 -0
  606. package/tools/scan/tests/test_environment.py +323 -0
  607. package/tools/scan/tests/test_git.py +419 -0
  608. package/tools/scan/tests/test_infrastructure.py +382 -0
  609. package/tools/scan/tests/test_integration.py +920 -0
  610. package/tools/scan/tests/test_merge.py +269 -0
  611. package/tools/scan/tests/test_orchestration.py +304 -0
  612. package/tools/scan/tests/test_stack.py +604 -0
  613. package/tools/scan/tests/test_tools.py +349 -0
  614. package/tools/scan/ui.py +624 -0
  615. package/tools/scan/verify.py +270 -0
  616. package/tools/scan/walk.py +118 -0
  617. package/tools/scan/workspace.py +85 -0
  618. package/tools/validation/README.md +244 -0
  619. package/tools/validation/__init__.py +17 -0
  620. package/tools/validation/approval_gate.py +321 -0
  621. package/tools/validation/validate_skills.py +189 -0
package/index.js ADDED
@@ -0,0 +1,83 @@
1
+ /**
2
+ * @jaguilar87/gaia
3
+ *
4
+ * Multi-agent orchestration system for Claude Code - DevOps automation toolkit
5
+ *
6
+ * Usage:
7
+ * import { getAgentPath, getToolPath, getConfigPath } from '@jaguilar87/gaia';
8
+ * const agentPath = getAgentPath('gitops-operator');
9
+ * const toolPath = getToolPath('context_provider.py');
10
+ * const configPath = getConfigPath('git_standards.json');
11
+ */
12
+
13
+ import { fileURLToPath } from 'url';
14
+ import { dirname, join } from 'path';
15
+
16
+ const __filename = fileURLToPath(import.meta.url);
17
+ const __dirname = dirname(__filename);
18
+
19
+ export const PACKAGE_ROOT = __dirname;
20
+
21
+ /**
22
+ * Get absolute path to an agent definition
23
+ * @param {string} agentName - Name of the agent (e.g., 'gitops-operator')
24
+ * @returns {string} Absolute path to agent file
25
+ */
26
+ export function getAgentPath(agentName) {
27
+ return join(PACKAGE_ROOT, 'agents', `${agentName}.md`);
28
+ }
29
+
30
+ /**
31
+ * Get absolute path to a tool
32
+ * @param {string} toolName - Name of the tool (e.g., 'context_provider.py')
33
+ * @returns {string} Absolute path to tool file
34
+ */
35
+ export function getToolPath(toolName) {
36
+ return join(PACKAGE_ROOT, 'tools', toolName);
37
+ }
38
+
39
+ /**
40
+ * Get absolute path to a hook
41
+ * @param {string} hookName - Name of the hook (e.g., 'pre-commit')
42
+ * @returns {string} Absolute path to hook file
43
+ */
44
+ export function getHookPath(hookName) {
45
+ return join(PACKAGE_ROOT, 'hooks', hookName);
46
+ }
47
+
48
+ /**
49
+ * Get absolute path to a command
50
+ * @param {string} commandName - Name of the command (e.g., 'architect.md')
51
+ * @returns {string} Absolute path to command file
52
+ */
53
+ export function getCommandPath(commandName) {
54
+ return join(PACKAGE_ROOT, 'commands', commandName);
55
+ }
56
+
57
+ /**
58
+ * Get absolute path to a template
59
+ * @param {string} templateName - Name of the template (e.g., 'governance.template.md')
60
+ * @returns {string} Absolute path to template file
61
+ */
62
+ export function getTemplatePath(templateName) {
63
+ return join(PACKAGE_ROOT, 'templates', templateName);
64
+ }
65
+
66
+ /**
67
+ * Get absolute path to config file
68
+ * @param {string} configName - Name of the config (e.g., 'git_standards.json')
69
+ * @returns {string} Absolute path to config file
70
+ */
71
+ export function getConfigPath(configName) {
72
+ return join(PACKAGE_ROOT, 'config', configName);
73
+ }
74
+
75
+ export default {
76
+ PACKAGE_ROOT,
77
+ getAgentPath,
78
+ getToolPath,
79
+ getHookPath,
80
+ getCommandPath,
81
+ getTemplatePath,
82
+ getConfigPath
83
+ };
package/package.json ADDED
@@ -0,0 +1,103 @@
1
+ {
2
+ "name": "@jaguilar87/gaia",
3
+ "version": "5.0.0-rc.2",
4
+ "description": "Multi-agent orchestration system for Claude Code - DevOps automation toolkit",
5
+ "main": "index.js",
6
+ "type": "module",
7
+ "bin": {
8
+ "gaia": "bin/gaia",
9
+ "gaia-doctor": "bin/gaia-doctor.js",
10
+ "gaia-skills-diagnose": "bin/gaia-skills-diagnose.js",
11
+ "gaia-cleanup": "bin/gaia-cleanup.js",
12
+ "gaia-uninstall": "bin/gaia-uninstall.js",
13
+ "gaia-metrics": "bin/gaia-metrics.js",
14
+ "gaia-review": "bin/gaia-review.js",
15
+ "gaia-status": "bin/gaia-status.js",
16
+ "gaia-history": "bin/gaia-history.js",
17
+ "gaia-update": "bin/gaia-update.js",
18
+ "gaia-scan": "bin/gaia-scan",
19
+ "gaia-evidence": "bin/gaia-evidence"
20
+ },
21
+ "keywords": [
22
+ "claude-code",
23
+ "devops",
24
+ "gitops",
25
+ "terraform",
26
+ "kubernetes",
27
+ "ai-agents",
28
+ "gaia",
29
+ "orchestration",
30
+ "automation"
31
+ ],
32
+ "author": "Jorge Aguilar <jorge.aguilar87@gmail.com>",
33
+ "license": "MIT",
34
+ "private": false,
35
+ "repository": {
36
+ "type": "git",
37
+ "url": "git+https://github.com/metraton/gaia.git"
38
+ },
39
+ "homepage": "https://github.com/metraton/gaia#readme",
40
+ "bugs": {
41
+ "url": "https://github.com/metraton/gaia/issues",
42
+ "email": "jorge.aguilar87@gmail.com"
43
+ },
44
+ "files": [
45
+ ".claude-plugin/",
46
+ "bin/",
47
+ "agents/",
48
+ "tools/",
49
+ "hooks/",
50
+ "commands/",
51
+ "templates/",
52
+ "config/",
53
+ "skills/",
54
+ "dist/",
55
+ "git-hooks/",
56
+ "README.md",
57
+ "INSTALL.md",
58
+ "CHANGELOG.md",
59
+ "ARCHITECTURE.md",
60
+ "CONTRIBUTING.md",
61
+ "SECURITY.md",
62
+ "CODE_OF_CONDUCT.md",
63
+ "pyproject.toml",
64
+ "index.js"
65
+ ],
66
+ "scripts": {
67
+ "test": "python3 -m pytest tests/ -v --ignore=tests/layer2_llm_evaluation --ignore=tests/layer3_e2e",
68
+ "test:layer1": "python3 -m pytest tests/ -v --ignore=tests/layer2_llm_evaluation --ignore=tests/layer3_e2e",
69
+ "test:layer2": "python3 -m pytest tests/layer2_llm_evaluation/ -v -m llm",
70
+ "test:layer3": "python3 -m pytest tests/layer3_e2e/ -v -m e2e",
71
+ "test:all": "python3 -m pytest tests/ -v -m ''",
72
+ "test:promptfoo": "npx promptfoo eval --config tests/promptfoo.yaml",
73
+ "lint": "eslint .",
74
+ "clean:dist": "rm -rf dist/",
75
+ "build:plugins": "npm run clean:dist && python3 scripts/build-plugin.py gaia-security && python3 scripts/build-plugin.py gaia-ops",
76
+ "clean": "find . -type d -name '__pycache__' -exec rm -rf {} + 2>/dev/null || true",
77
+ "pre-publish": "node bin/pre-publish-validate.js",
78
+ "pre-publish:dry": "node bin/pre-publish-validate.js --dry-run",
79
+ "pre-publish:validate": "node bin/pre-publish-validate.js --validate-only",
80
+ "gaia:verify-install:local": "npm pack && bash bin/validate-sandbox.sh --tarball ./jaguilar87-gaia-*.tgz --target sandbox",
81
+ "gaia:verify-install:rc": "bash bin/validate-sandbox.sh --version @rc --target sandbox",
82
+ "gaia:verify-install:latest": "bash bin/validate-sandbox.sh --version @latest --target sandbox",
83
+ "gaia:install-local": "npm pack && bash bin/validate-sandbox.sh --tarball ./jaguilar87-gaia-*.tgz --target local",
84
+ "prepack": "npm run clean",
85
+ "prepublishOnly": "npm run build:plugins && node bin/pre-publish-validate.js",
86
+ "postinstall": "node bin/gaia-update.js",
87
+ "preuninstall": "node bin/gaia-cleanup.js"
88
+ },
89
+ "_postinstall_note": "postinstall: settings.json replaced (hooks only), permissions merged into settings.local.json (union, user config preserved)",
90
+ "dependencies": {
91
+ "chalk": "^5.3.0",
92
+ "ora": "^7.0.1",
93
+ "prompts": "^2.4.2",
94
+ "yargs": "^17.7.2"
95
+ },
96
+ "devDependencies": {
97
+ "eslint": "^8.50.0"
98
+ },
99
+ "engines": {
100
+ "node": ">=18.0.0",
101
+ "python": ">=3.9"
102
+ }
103
+ }
package/pyproject.toml ADDED
@@ -0,0 +1,32 @@
1
+ [project]
2
+ name = "gaia"
3
+ version = "5.0.0-rc.2"
4
+ description = "Multi-agent orchestration system for Claude Code - DevOps automation toolkit"
5
+ requires-python = ">=3.9"
6
+ license = {text = "MIT"}
7
+ authors = [
8
+ {name = "Jorge Aguilar", email = "jorge.aguilar87@gmail.com"},
9
+ ]
10
+ readme = "README.md"
11
+
12
+ [project.optional-dependencies]
13
+ dev = [
14
+ "pytest>=7.0",
15
+ "ruff>=0.4.0",
16
+ ]
17
+
18
+ [tool.ruff]
19
+ target-version = "py39"
20
+ line-length = 120
21
+
22
+ [tool.ruff.lint]
23
+ select = ["E", "F", "W", "I"]
24
+
25
+ [tool.ruff.format]
26
+ quote-style = "double"
27
+
28
+ [tool.pytest.ini_options]
29
+ testpaths = ["tests", "tools/scan/tests"]
30
+ markers = [
31
+ "parity: JS-Python CLI parity comparison tests",
32
+ ]
@@ -0,0 +1,158 @@
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-creation/ # Coach skill: structure, tone, and component inventory for new specialist agents
53
+ ├── agent-protocol/ # Response contract format, state machine, error handling
54
+ ├── agent-response/ # Orchestrator: interpret agent json:contract responses
55
+ ├── agentic-loop/ # Iterative metric-driven improvement loop (on-demand injection)
56
+ ├── blog-writing/ # Blog article writing and publishing for metraton.github.io
57
+ ├── brief-spec/ # Brief and spec creation for features before planning
58
+ ├── command-execution/ # Defensive Bash execution, no-pipes discipline
59
+ │ └── reference.md
60
+ ├── context-updater/ # CONTEXT_UPDATE format and writable sections contract
61
+ │ └── examples.md
62
+ ├── developer-patterns/ # Application code patterns (Node.js, Python)
63
+ ├── execution/ # Post-approval execution discipline
64
+ ├── fast-queries/ # Quick diagnostic scripts for cloud/system state
65
+ ├── gaia-compact/ # Orchestrator: structured /compact prompt with preservation contract
66
+ ├── gaia-patterns/ # Gaia component patterns: hooks, agents, routing, CLI
67
+ │ └── reference.md
68
+ ├── gaia-planner/ # Feature planning, briefs, task decomposition
69
+ ├── gaia-release/ # Gaia release pipeline: live, dry-run, beta, stable
70
+ ├── gaia-self-check/ # Validate internal consistency of the .claude/ installation
71
+ ├── gaia-verify/ # Verify a Gaia installation across delivery surfaces
72
+ ├── git-conventions/ # Conventional Commits (on-demand workflow skill)
73
+ ├── gitops-patterns/ # GitOps/Flux/Kubernetes patterns
74
+ │ └── reference.md
75
+ ├── gmail-policy/ # Gmail domain policy (label-only, no delete)
76
+ ├── gmail-triage/ # Interactive Gmail inbox triage
77
+ ├── gws-setup/ # Google Workspace CLI (gws) installation and configuration
78
+ ├── investigation/ # Diagnosis methodology and pattern analysis
79
+ ├── memory-curation/ # Curate MEMORY.md index and topic files
80
+ ├── memory-search/ # Query episodic memory via `gaia memory` CLI
81
+ ├── orchestrator-approval/ # T3 approval presentation for orchestrator
82
+ ├── pending-approvals/ # Present and manage pending approval requests
83
+ ├── readme-writing/ # How to write READMEs for Gaia component folders
84
+ ├── request-approval/ # T3 approval-request workflow (attempt first, emit APPROVAL_REQUEST)
85
+ │ ├── reference.md
86
+ │ └── examples.md
87
+ ├── schedule-task/ # Dispatch parameter extraction and prompt templates
88
+ ├── security-tiers/ # T0-T3 classification + hook enforcement model
89
+ │ └── reference.md
90
+ ├── session-reflection/ # End-of-session reflection on conversational arc
91
+ ├── skill-creation/ # How to design and write new skills
92
+ ├── terraform-patterns/ # Terraform/Terragrunt patterns
93
+ │ └── reference.md
94
+ └── reference.md # Cross-skill reference index
95
+ ```
96
+
97
+ ## Convenciones
98
+
99
+ **Skill assignment matrix:**
100
+
101
+ | Agent | Core Skills | Domain Skills |
102
+ |-------|-------------|---------------|
103
+ | cloud-troubleshooter | agent-protocol, security-tiers, investigation, command-execution | context-updater, fast-queries |
104
+ | terraform-architect | agent-protocol, security-tiers, investigation, command-execution, terraform-patterns | context-updater, fast-queries |
105
+ | gitops-operator | agent-protocol, security-tiers, investigation, command-execution, gitops-patterns | context-updater, fast-queries |
106
+ | developer | agent-protocol, security-tiers, investigation, command-execution, developer-patterns | context-updater, fast-queries |
107
+ | gaia-system | agent-protocol, security-tiers, command-execution, gaia-patterns, gaia-release, skill-creation | gaia-verify |
108
+ | gaia-planner | agent-protocol, security-tiers | gaia-planner |
109
+ | gaia-operator | agent-protocol, security-tiers, command-execution, context-updater, memory-curation, memory-search, gmail-triage, gws-setup | blog-writing |
110
+
111
+ Orchestrator skills (loaded on-demand via Skill tool, not assigned in frontmatter):
112
+ - `agent-response` — contract status interpretation and presentation
113
+ - `orchestrator-approval` — T3 approval presentation and grant activation
114
+ - `gaia-compact` — structured `/compact` invocation with a six-category preservation prompt
115
+
116
+ Workflow skills (on-demand injection, not in any agent frontmatter):
117
+ - `agent-creation` — coach skill for creating specialist agents; loaded on demand by gaia-system, `user-invocable: false`
118
+ - `agentic-loop` — iterative metric-driven improvement; injected by orchestrator text prompt, `user-invocable: false`
119
+ - `brief-spec` — brief and spec creation; loaded on demand by orchestrator
120
+ - `execution` — post-approval execution discipline
121
+ - `git-conventions` — Conventional Commits format
122
+ - `pending-approvals` — present and resolve pending approval requests
123
+ - `request-approval` — T3 approval-request workflow
124
+ - `schedule-task` — dispatch parameter templates
125
+ - `session-reflection` — end-of-session reflection; loaded on demand by orchestrator at Cerrar la sesión
126
+
127
+ **Skill types:**
128
+
129
+ | Type | Injection | Examples |
130
+ |------|-----------|---------|
131
+ | Core | Always via `skills:` frontmatter | agent-protocol, security-tiers |
132
+ | Common | Most agents via `skills:` frontmatter | command-execution, context-updater |
133
+ | Domain | Per-agent via `skills:` frontmatter | terraform-patterns, gaia-patterns |
134
+ | Workflow | On-demand (agent reads from disk) | request-approval, execution, git-conventions |
135
+ | Orchestrator | On-demand via Skill tool | agent-response, orchestrator-approval |
136
+
137
+ **SKILL.md format:**
138
+
139
+ ```yaml
140
+ ---
141
+ name: skill-name
142
+ description: When Claude should load and follow this skill
143
+ metadata:
144
+ user-invocable: false
145
+ type: core
146
+ ---
147
+
148
+ # Skill Content
149
+ ```
150
+
151
+ **Line budget:** Keep injected `SKILL.md` under 100 lines. Move details to `reference.md` (read on-demand). Supporting examples go in `examples.md`.
152
+
153
+ ## Ver también
154
+
155
+ - [`agents/README.md`](../agents/README.md) — agent frontmatter and skills: field
156
+ - [`hooks/pre_tool_use.py`](../hooks/pre_tool_use.py) — where skill injection happens at runtime
157
+ - [`skills/skill-creation/SKILL.md`](./skill-creation/SKILL.md) — how to design a new skill
158
+ - [`skills/gaia-patterns/reference.md`](./gaia-patterns/reference.md) — full component inventory
@@ -0,0 +1,87 @@
1
+ ---
2
+ name: agent-creation
3
+ description: Use when creating a new specialist agent for Gaia, or reviewing whether an existing agent follows the correct structure, tone, and component inventory
4
+ metadata:
5
+ user-invocable: false
6
+ type: technique
7
+ ---
8
+
9
+ # Agent Creation
10
+
11
+ ## What is an agent?
12
+
13
+ A specialist agent is a persistent identity with its own tool set, scope, and output contract. The identity is what separates it from a skill or inline behavior: an agent acts from a role, not just follows a process. If the component you are building has no distinct output type, no delegation surface, and could work as injected text, it is a skill, not an agent. That decision belongs upstream -- this skill assumes it has already been made.
14
+
15
+ ## Step 1: Answer the 3 bifurcating dimensions
16
+
17
+ Answer these before writing a single line. They determine which components are required, what the tool set looks like, and what the failure model must handle.
18
+
19
+ **D1: Does the agent mutate system state?**
20
+ A "yes" means: Write/Edit in tools, `permissionMode: acceptEdits` in frontmatter, T3 approval flow in failure handling, and an output type that says "Realization Package" rather than "Diagnostic Report."
21
+ A "no" means: `disallowedTools` should explicitly exclude Write/Edit/NotebookEdit, no T3 surface in failure handling, and output is always read-only.
22
+
23
+ **D2: Does the agent delegate to other agents?**
24
+ Almost always "no" for specialists -- they are terminal nodes. A "yes" adds a delegation table to the body. A "no" still needs a CANNOT DO -> DELEGATE table for the orchestrator's benefit, but the agent itself never dispatches.
25
+
26
+ **D3: Does the agent enter the orchestrator's automatic routing?**
27
+ Almost always "yes." A "yes" means the description field must be written as triggering conditions (not a role summary), and surface signals should be proposed for `surface-routing.json`. Those signals are proposals -- gaia-system applies them; this skill only guides what to propose.
28
+
29
+ ## Step 2: Apply the component inventory
30
+
31
+ **Obligatory in every specialist:**
32
+
33
+ 1. **Frontmatter**: `name`, `description` (triggering conditions only), `model`, `tools`, `color`. Add `permissionMode: acceptEdits` if D1=yes. Add `disallowedTools` if D1=no and enforcement matters. Add `maxTurns` for long-running agents.
34
+ 2. **Identity** (1-2 paragraphs): what this agent *is*, not what it does. Carries enough weight that removing it would change behavior -- see Step 4.
35
+ 3. **Workflow** (numbered steps): the operational sequence for this agent's domain. Put this before Identity when the workflow is complex enough to be the agent's primary reference.
36
+ 4. **Scope -- CAN DO / CANNOT DO -> DELEGATE**: boundaries with reasons. Every entry in CANNOT DO must name a concrete delegate agent.
37
+ 5. **Failure handling / Domain Errors**: a table of concrete errors with concrete actions. "Report the error" is not an action.
38
+ 6. **Response protocol**: the agent must load `agent-protocol`. Reference it in the skills list; do not replicate its content.
39
+
40
+ **Optional by dimension:**
41
+ - **Delegation table** (D2=yes): which agents this specialist can dispatch, under what conditions.
42
+ - **Surface signals** (D3=yes): proposed keyword patterns for the orchestrator's `surface-routing.json`. Write them as a proposal block -- gaia-system applies them.
43
+ - **Domain reference inline**: domain-specific lookup tables or decision logic that applies only to this agent and does not warrant a skill.
44
+
45
+ ## Step 3: Write for judgment, not compliance
46
+
47
+ Each obligatory component must carry enough weight to actually change behavior. The test: if the section were removed, would the agent behave differently? If not, the section is decorative.
48
+
49
+ **Identity:** "You are a specialist in X" is baseline -- the LLM already knows what X specialists do. The identity must justify *why this agent exists as a distinct entity* -- what it sees that a generic assistant would miss, what constraint it operates under that shapes every decision. If the identity section were removed and the agent still behaved identically, it needs more weight.
50
+
51
+ **Scope boundaries:** Each CANNOT DO entry needs enough specificity that the agent declines at the right moment, not one step too late. A boundary described only as a category ("cloud infrastructure") is weaker than one that names the decision point ("if the resource type is managed by IaC, creating it belongs to terraform-architect even if you need it as a prerequisite").
52
+
53
+ **Failure handling:** A Domain Errors table that says "check logs" or "report the error" does nothing the agent would not do by default. Each row should describe what a naive agent would do wrong, and redirect to the correct action.
54
+
55
+ **Output type declaration:** Specialists declare their output type explicitly ("Your output is always a Realization Package" / "Your output is always a Diagnostic Report"). This is not cosmetic -- it prevents the agent from producing hybrid outputs that neither commit nor diagnose.
56
+
57
+ ## Step 4: Write the description field as triggering conditions
58
+
59
+ The description is what the orchestrator reads to decide when to dispatch. It must describe *when to use this agent*, not *what this agent is*. Summarizing the role in the description causes the orchestrator to satisfy itself with the summary and never dispatch.
60
+
61
+ ```yaml
62
+ # Wrong -- describes the role
63
+ description: Senior Terraform architect that manages cloud infrastructure lifecycle
64
+
65
+ # Right -- triggering conditions
66
+ description: Use when creating, modifying, or validating Terraform/Terragrunt configurations, or managing the infrastructure lifecycle via IaC
67
+ ```
68
+
69
+ ## Step 5: Evaluate the skills catalog and propose applicable skills
70
+
71
+ Do not hardcode a mapping of tool to skill. Instead, evaluate the current catalog at `.claude/skills/` and propose which skills apply to this agent's tool set and domain. The catalog changes; a hardcoded mapping goes stale silently.
72
+
73
+ The evaluation should ask: which skills address a recurring risk or discipline gap for this agent's tool set? `agent-protocol` and `security-tiers` are non-negotiable for every agent. Beyond those, let the tool set and domain guide the selection.
74
+
75
+ ## Step 6: Propose surface signals (if D3=yes)
76
+
77
+ For agents entering automatic routing, propose signal patterns for `surface-routing.json` -- high-confidence and medium-confidence keyword clusters that would reliably indicate this agent should handle the request. These are proposals: write them as a block the invoking agent (gaia-system) can apply directly. Do not apply them yourself.
78
+
79
+ ## Anti-patterns
80
+
81
+ - **Treating this as a form**: filling in sections without testing whether each one carries enough weight to change behavior produces a well-structured agent that the LLM ignores and acts from baseline.
82
+ - **Skipping the weight test**: an identity section that says "You are a specialist in X" is decorative. Test every section: if it were removed, would behavior change?
83
+ - **Creating a new archetype**: the 3 bifurcating dimensions cover the full specialist space. Adding a new archetype ("Readonly Specialist", "Executor") when the dimensions already capture the distinction adds taxonomy without adding precision.
84
+ - **Hardcoding the tool-to-skill mapping**: the skills catalog changes; a fixed mapping produces agents that reference non-existent skills or miss new ones that would help.
85
+ - **Writing the description as a role summary**: the orchestrator reads the description to decide when to dispatch. A role summary satisfies the read without triggering the dispatch.
86
+ - **Skipping disallowedTools for read-only agents**: not listing Write/Edit in `tools` is weaker than explicitly disallowing them. A future edit that adds a tool could silently give a read-only agent write access.
87
+ - **Domain Errors that only say "report"**: every error row should redirect to a concrete action that a naive agent would not take by default.
@@ -0,0 +1,170 @@
1
+ # Agent Creation -- Examples
2
+
3
+ Two real Gaia agents analyzed by component. The goal is not to show "correct" vs "incorrect" -- both agents work well -- but to explain *why* each section was written the way it was, so you can apply the same reasoning to a new agent.
4
+
5
+ ---
6
+
7
+ ## Example 1: `developer` (D1=yes, D2=no, D3=yes)
8
+
9
+ **Dimensions:**
10
+ - D1=yes: writes files, runs tests, commits to VCS
11
+ - D2=no: terminal node; CANNOT DO table is for orchestrator routing, not for the agent to dispatch
12
+ - D3=yes: enters automatic routing for application code requests
13
+
14
+ ### Frontmatter
15
+
16
+ ```yaml
17
+ ---
18
+ name: developer
19
+ description: Full-stack software engineer for application code, CI/CD, and developer tooling across Node.js/TypeScript and Python stacks.
20
+ tools: Read, Edit, Write, Agent, Glob, Grep, Bash, Task, Skill, WebSearch, WebFetch
21
+ model: inherit
22
+ maxTurns: 50
23
+ permissionMode: acceptEdits
24
+ skills:
25
+ - agent-protocol
26
+ - security-tiers
27
+ - investigation
28
+ - command-execution
29
+ - developer-patterns
30
+ - context-updater
31
+ - fast-queries
32
+ ---
33
+ ```
34
+
35
+ **Why `permissionMode: acceptEdits`:** D1=yes. Without this, every Edit/Write call inside `.claude/` would trigger a CC native permission prompt -- disruptive in headless sessions.
36
+
37
+ **Why `maxTurns: 50` (not 40):** Investigation + code change + test run + potential fix loop can easily consume 40 turns. 50 gives the agent room to complete a debugging cycle without getting cut off mid-execution.
38
+
39
+ **Why `Agent` in tools:** `developer` can spawn sub-investigations when the codebase is large enough to warrant parallel reads. Most specialists do not have this -- it adds surface area.
40
+
41
+ **Why `investigation` and `fast-queries`:** Application bugs often require root cause analysis before a fix is possible. `investigation` provides the methodology; `fast-queries` provides the triage scripts. A specialist that writes code without these would often produce code that fixes the symptom rather than the cause.
42
+
43
+ ### Workflow
44
+
45
+ ```markdown
46
+ ## Workflow
47
+
48
+ 1. **Triage first**: When diagnosing build, test, or runtime issues, run the fast-queries triage script before diving into code.
49
+ 2. **Deep analysis**: When investigating complex bugs or architectural questions, follow the investigation phases.
50
+ 3. **Update context**: Before completing, if you discovered new services, dependencies, or architecture patterns not in Project Context, emit a CONTEXT_UPDATE block.
51
+ ```
52
+
53
+ **Why workflow appears before identity:** The developer's primary risk is diving into code without understanding the problem first. Workflow at the top of the body is the first thing the agent reads -- it front-loads the "investigate before fixing" discipline where it needs to be, before the agent's momentum carries it toward implementation.
54
+
55
+ ### Identity
56
+
57
+ ```markdown
58
+ ## Identity
59
+
60
+ You are a full-stack software engineer. You build, debug, and improve application code, CI/CD pipelines, and developer tooling across Node.js/TypeScript and Python stacks.
61
+
62
+ **Your output is code or a report -- never both:**
63
+ - **Realization Package:** new or modified code files, validated (lint + tests + build)
64
+ - **Findings Report:** analysis and recommendations to stdout only -- never
65
+ create standalone report files (.md, .txt, .json)
66
+ ```
67
+
68
+ **Why the output type declaration matters:** Without it, the agent commonly produces a hybrid: modifies files *and* writes a summary report. That ambiguity makes it unclear to the orchestrator whether the task is complete or still in analysis. The "never both" rule forces a clean state at completion. The "never create standalone report files" clause is specific enough to prevent the most common manifestation of hybrid output.
69
+
70
+ **Weight test:** Remove the output type declaration. Does behavior change? Yes -- the agent would write summary files and return code changes in the same turn. The declaration passes the weight test.
71
+
72
+ ### Scope boundaries
73
+
74
+ ```markdown
75
+ During investigation, if you discover that a resource type is managed by Terraform,
76
+ Terragrunt, Helm, Flux, or any other IaC/GitOps tool, creating new instances of
77
+ that resource belongs to the agent that owns that tool -- even if you need the
78
+ resource as a prerequisite for your task.
79
+ ```
80
+
81
+ **Why this paragraph exists:** The boundary "CANNOT DO: Terraform / cloud infrastructure → terraform-architect" is correct but weak. An agent working on a Node.js service that needs a database will rationalize "I just need one RDS instance, it's a prerequisite, I'll handle it." The paragraph names that exact decision point and explicitly forbids it. Without the paragraph, the boundary would be crossed at least some of the time.
82
+
83
+ ---
84
+
85
+ ## Example 2: `cloud-troubleshooter` (D1=no, D2=no, D3=yes)
86
+
87
+ **Dimensions:**
88
+ - D1=no: read-only enforced at frontmatter level via `disallowedTools`
89
+ - D2=no: never dispatches other agents; surfaces recommendations back to orchestrator
90
+ - D3=yes: enters automatic routing for cloud diagnostic requests
91
+
92
+ ### Frontmatter
93
+
94
+ ```yaml
95
+ ---
96
+ name: cloud-troubleshooter
97
+ description: Diagnostic agent for cloud infrastructure (GCP and AWS). Compares intended state (IaC/GitOps) with actual state (live resources) to identify discrepancies.
98
+ tools: Read, Glob, Grep, Bash, Task, Skill
99
+ model: inherit
100
+ maxTurns: 40
101
+ disallowedTools: [Write, Edit, NotebookEdit]
102
+ skills:
103
+ - agent-protocol
104
+ - security-tiers
105
+ - investigation
106
+ - command-execution
107
+ - context-updater
108
+ - fast-queries
109
+ ---
110
+ ```
111
+
112
+ **Why `disallowedTools` instead of just not listing Write/Edit:** Two layers of enforcement. Not listing Write/Edit in `tools` is the first layer -- the agent nominally does not have those tools. But `disallowedTools` adds a second layer: even if a future edit accidentally re-adds Write to the tools list, the disallow overrides it. For a read-only diagnostic agent operating on live cloud state, this matters. An accidental write to a live cloud resource is a non-trivial incident.
113
+
114
+ **Why no `permissionMode`:** D1=no. `permissionMode: acceptEdits` would be misleading for an agent that must never write files.
115
+
116
+ **Why no `investigation` skill... wait, it does have it:** Read-only diagnostic agents need investigation methodology even without mutation capabilities. The `investigation` skill teaches how to diagnose -- tool-independent.
117
+
118
+ ### Identity
119
+
120
+ ```markdown
121
+ ## Identity
122
+
123
+ You are a **discrepancy detector**. You find differences between what the code says
124
+ and what exists in the cloud. You operate in **strict read-only mode** -- T3 forbidden.
125
+
126
+ **Your output is always a Diagnostic Report:**
127
+ - Intended vs actual state, categorized by severity
128
+ - Root cause candidates
129
+ - Recommendations (you suggest, you never act):
130
+ - **Option A:** Sync code to live → invoke `terraform-architect` or `gitops-operator`
131
+ - **Option B:** Sync live to code → invoke `terraform-architect` or `gitops-operator`
132
+ - **Option C:** Further investigation needed
133
+ ```
134
+
135
+ **Why "discrepancy detector" and not "cloud infrastructure specialist":** The more generic framing lets the agent drift toward fixing things. "Discrepancy detector" constrains the action space: the agent finds differences, it does not resolve them. The constraint is load-bearing -- remove it and the agent would occasionally attempt fixes when it detects an obvious misconfiguration.
136
+
137
+ **Why the output options are named A/B/C:** The orchestrator reads this output and decides what to dispatch next. Consistent option labels (A/B/C) give the orchestrator a deterministic signal to act on. Without them, the recommendations would be prose that the orchestrator has to interpret differently each time.
138
+
139
+ **Weight test:** Remove the "you never act" constraint from the output section. Would behavior change? Yes -- the agent would attempt to apply fixes directly (invoking `terraform-architect` from within itself, or in extreme cases, running mutative commands). The constraint passes.
140
+
141
+ ### Domain-specific section
142
+
143
+ ```markdown
144
+ ## Cloud Provider Detection
145
+
146
+ Detect which CLI to use from project-context:
147
+
148
+ | Indicator | Provider | CLI |
149
+ |-----------|----------|-----|
150
+ | `gcloud`, `gsutil`, `GKE`, `Cloud SQL` | GCP | `gcloud` |
151
+ | `aws`, `eksctl`, `EKS`, `RDS`, `EC2` | AWS | `aws` |
152
+
153
+ If unclear, ask before proceeding.
154
+ ```
155
+
156
+ **Why this is inline rather than in a skill:** This logic only applies to `cloud-troubleshooter`. A terraform-architect does not need CLI detection -- it works from HCL files and always uses terragrunt. If the same detection logic applied to two or more agents, it would warrant a skill. Single-agent-only logic stays inline.
157
+
158
+ ---
159
+
160
+ ## Pattern Summary
161
+
162
+ | Decision | `developer` | `cloud-troubleshooter` | Rule |
163
+ |---|---|---|---|
164
+ | D1 | yes | no | Determines permissionMode and disallowedTools |
165
+ | D2 | no | no | Both are terminal nodes |
166
+ | D3 | yes | yes | Both need description as triggering conditions |
167
+ | Output type | Realization Package or Findings Report | Diagnostic Report | Named explicitly in identity |
168
+ | Workflow position | Before identity | Before identity | Both have complex sequences -- workflow first |
169
+ | Boundary precision | Named decision point ("even if you need it as prerequisite") | Named action prohibition ("you never act") | Generic categories are weaker than named moments |
170
+ | Domain logic inline | No (developer-patterns handles it) | Yes (cloud provider detection) | Inline only when single-agent-specific |