@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
@@ -0,0 +1,185 @@
1
+ ---
2
+ name: brief-spec
3
+ description: Use when the user wants to create a brief or spec for a feature before planning
4
+ metadata:
5
+ user-invocable: false
6
+ type: technique
7
+ ---
8
+
9
+ # Brief Spec
10
+
11
+ Conversational brief creation. The orchestrator loads this inline to
12
+ co-create a brief with the user before dispatching to gaia-planner.
13
+
14
+ ## Cuando llegas aquí
15
+
16
+ El orquestador cargó esta skill porque la conversación entró en Cerrar:
17
+ el usuario y él han acordado varias cosas y es momento de materializarlas.
18
+ No estás aquí porque la petición superó un umbral de tamaño. Estás aquí
19
+ porque hay acuerdos que capturar.
20
+
21
+ Tu trabajo:
22
+ 1. Resumir los acuerdos que ya emergieron en la conversación previa —
23
+ no re-descubrirlos desde cero.
24
+ 2. Preguntar sólo lo que falte para convertir los acuerdos en AC
25
+ reproducibles (evidence types, surface type).
26
+ 3. Escribir el brief y presentarlo al usuario para validar.
27
+
28
+ ## Process
29
+
30
+ 1. **Ask questions** -- Target gaps, not completeness:
31
+ - **Surface type** (always, before AC): Is this a UI a human uses, an API,
32
+ or a background job? Determines valid evidence types for the ACs.
33
+ - What problem does this solve?
34
+ - What constraints matter? (cloud, performance, security, timeline)
35
+ - How will you verify each AC yourself? (reproduce steps, not just "it works")
36
+ - What artifact do you want to review after execution?
37
+ (log file, screenshot, JSON snapshot, HTTP response, diff)
38
+ - If this failed silently, what symptom would you look for?
39
+ - What is explicitly NOT in scope?
40
+
41
+ One question per round via AskUserQuestion. Stop when each AC has
42
+ a declared evidence type and every question above has an answer or
43
+ an explicit "N/A".
44
+
45
+ 2. **Write brief.md** -- Use the structure below. Write to:
46
+ `.claude/project-context/briefs/open_{feature-name}/brief.md`
47
+ where `{feature-name}` is a kebab-case slug.
48
+
49
+ **Directory prefix convention:**
50
+ - `open_` -- draft or ready, no work started yet (this skill always creates with `open_`)
51
+ - `in-progress_` -- work has begun
52
+ - `closed_` -- complete, verified, or done
53
+
54
+ Transitions between prefixes are done with `gaia plans rename`. This skill
55
+ only ever creates with `open_`.
56
+
57
+ ## Brief Structure
58
+
59
+ The frontmatter is the executable source of truth (orchestrator parses it
60
+ with `yaml.safe_load`). The body's `## Acceptance Criteria` section mirrors
61
+ it as a human summary.
62
+
63
+ ```markdown
64
+ ---
65
+ status: draft
66
+ surface_type: ui | api | job | cli
67
+ acceptance_criteria:
68
+ - id: AC-1
69
+ description: "Login button visible on /login"
70
+ evidence:
71
+ type: url
72
+ shape:
73
+ method: GET
74
+ url: http://localhost:3000/login
75
+ expect:
76
+ status: 200
77
+ body_contains: "Sign in"
78
+ artifact: evidence/AC-1.json
79
+ - id: AC-2
80
+ description: "pytest auth suite green"
81
+ evidence:
82
+ type: command
83
+ shape:
84
+ run: "pytest tests/auth/ -q"
85
+ expect: "exit 0"
86
+ artifact: evidence/AC-2.txt
87
+ ---
88
+
89
+ # [Feature Name]
90
+
91
+ ## Objective
92
+ [1-3 sentences: what problem, why now, who benefits]
93
+
94
+ ## Context
95
+ [Project constraints relevant to this feature]
96
+
97
+ ## Approach
98
+ [High-level strategy, not implementation details. 3-5 sentences max]
99
+
100
+ ## Acceptance Criteria
101
+ Human-readable summary. Source of truth lives in frontmatter.
102
+ - AC-1: Login button visible on /login (evidence: url)
103
+ - AC-2: pytest auth suite green (evidence: command)
104
+
105
+ ## Milestones (M/L features only)
106
+ - M1: [name] -- [what is shippable after this]
107
+ - M2: [name] -- [what is shippable after this]
108
+
109
+ ## Out of Scope
110
+ [Explicit boundaries -- what this feature does NOT include]
111
+ ```
112
+
113
+ ## Acceptance Criteria Rules
114
+
115
+ - Every AC has a description (user observation) and an evidence block.
116
+ - Evidence must be reproducible by the user -- not only by the agent.
117
+ - Every AC declares an `artifact` path; the orchestrator persists the
118
+ verification output there so the user can read it after completion.
119
+ - Vague ACs get pushed back: "Fast means what? Under 200ms p95?"
120
+ - Surface type restricts valid evidence types (see table).
121
+
122
+ ### Evidence Types
123
+
124
+ The shapes below are frontmatter fragments under `acceptance_criteria:`.
125
+ The body's `## Acceptance Criteria` section mirrors them for human reading;
126
+ the frontmatter is the executable source of truth.
127
+
128
+ | type | shape | valid surface |
129
+ |------|-------|---------------|
130
+ | `command` | `run: "bash command"; expect: exit_code \| substring` | any |
131
+ | `url` | `method: GET\|POST; url; expect: {status, body_contains}` | ui, api |
132
+ | `playwright` | `url; steps: [...]; assert: "selector visible" \| screenshot` | ui |
133
+ | `artifact` | `path; kind: json\|log\|screenshot; assert: schema \| contains` | any |
134
+ | `metric` | `query; threshold: "p95 < 200ms"` | api, job |
135
+
136
+ Shape examples (frontmatter fragments):
137
+
138
+ ```yaml
139
+ # command
140
+ evidence:
141
+ type: command
142
+ shape:
143
+ run: "pytest tests/auth/ -q"
144
+ expect: "exit 0"
145
+
146
+ # url
147
+ evidence:
148
+ type: url
149
+ shape:
150
+ method: GET
151
+ url: http://localhost:3000/health
152
+ expect:
153
+ status: 200
154
+ body_contains: '"status":"ok"'
155
+
156
+ # playwright
157
+ evidence:
158
+ type: playwright
159
+ shape:
160
+ url: http://localhost:3000/login
161
+ steps:
162
+ - fill: "#email with user@test.com"
163
+ - click: "button[type=submit]"
164
+ assert: "selector [data-testid=dashboard] visible"
165
+
166
+ # artifact
167
+ evidence:
168
+ type: artifact
169
+ shape:
170
+ path: dist/build-report.json
171
+ kind: json
172
+ assert: ".summary.errors == 0"
173
+
174
+ # metric
175
+ evidence:
176
+ type: metric
177
+ shape:
178
+ query: "curl -s http://localhost:3000/metrics | grep http_p95"
179
+ threshold: "< 200"
180
+ ```
181
+
182
+ ## After Brief
183
+
184
+ Present the full brief. Ask: "Does this capture what you want?"
185
+ When confirmed, suggest dispatching to gaia-planner to create a plan.
@@ -0,0 +1,64 @@
1
+ ---
2
+ name: command-execution
3
+ description: Use when executing any bash command, CLI tool, or shell operation
4
+ metadata:
5
+ user-invocable: false
6
+ type: discipline
7
+ ---
8
+
9
+ # Command Execution
10
+
11
+ ```
12
+ ONE COMMAND. ONE RESULT. ONE EXIT CODE.
13
+ NO PIPES. NO CHAINS. NO REDIRECTS.
14
+ ```
15
+
16
+ ## Mental Model
17
+
18
+ When you reach for a pipe, you have not looked for the flag yet.
19
+ CLIs have `--format`, `--filter`, `--limit` flags that do what pipes
20
+ do — without hiding exit codes or triggering extra permission prompts.
21
+
22
+ When you want to chain with `&&`, stop. Run one command, verify the
23
+ exit code, then run the next. Two verified commands beat one fragile chain.
24
+
25
+ For file I/O, always use Claude Code tools over Bash:
26
+
27
+ | Bash | Claude Code tool |
28
+ |---|---|
29
+ | `cat`, `head`, `tail` | Read |
30
+ | `echo >`, heredocs | Write |
31
+ | `sed -i`, `awk` | Edit |
32
+ | `grep -r`, `rg` | Grep |
33
+ | `find` | Glob |
34
+
35
+ ## Rules
36
+
37
+ 1. **No pipes** — find the CLI's native flag first.
38
+ 2. **One command per step** — no `&&` or `;`.
39
+ 3. **Tools over Bash** — for file I/O, always.
40
+ 4. **Absolute paths** — agent cwd resets between calls; relative paths break silently.
41
+ 5. **Quote variables** — unquoted `${VAR}` with spaces becomes multiple arguments.
42
+
43
+ ## Traps
44
+
45
+ | If you're thinking... | The reality is... |
46
+ |---|---|
47
+ | "I'll pipe to grep/awk/jq to filter" | Find `--filter` or `--format` flag |
48
+ | "I'll chain with && for efficiency" | Run separately, verify each exit code |
49
+ | "Let me cat/head this file" | Use the Read tool |
50
+ | "Let me cd first, then run" | Use absolute path or `-chdir` |
51
+ | "I need jq to parse JSON" | Use `--format json` at source |
52
+ | "A heredoc is cleanest for multi-line" | Use Write tool. Heredocs fail in batch. |
53
+ | "This pipe is read-only, it's safe" | Pipes still hide exit codes |
54
+
55
+ **Exception:** `git commit -m "$(cat <<'EOF' ...)"` heredocs are allowed.
56
+
57
+ ## Anti-Patterns
58
+
59
+ - `kubectl get pods | grep Error` → use `-l` label selectors or `--field-selector`
60
+ - `cd dir && terraform plan` → `terraform -chdir=/absolute/path plan`
61
+ - `cat file | wc -l` → Read tool
62
+
63
+ The `cloud_pipe_validator.py` hook enforces no-pipes at runtime.
64
+ For mutation rules and cloud CLI examples, see `reference.md`.
@@ -0,0 +1,83 @@
1
+ # Command Execution -- Reference
2
+
3
+ Read on-demand by infrastructure agents. Not injected automatically.
4
+
5
+ ## Timeouts
6
+
7
+ | Operation | Timeout |
8
+ |-----------|---------|
9
+ | Read / query | 30s |
10
+ | Validation (lint, fmt) | 30s |
11
+ | Simulation (plan, diff) | 300s |
12
+ | Realization (apply, deploy) | 600s |
13
+ | Flux reconcile | 90s |
14
+
15
+ Use tool-native timeout flag first (`--request-timeout=30s`), fall back to `timeout 30s <cmd>`. Unreachable -- report and abort.
16
+
17
+ ## Rule 5: Validate Before Mutate
18
+
19
+ Mutations are irreversible. Always dry-run, then diff, then apply -- each a separate, atomic confirmation.
20
+
21
+ ```bash
22
+ kubectl apply -f manifest.yaml --dry-run=server
23
+ kubectl diff -f manifest.yaml
24
+ kubectl apply -f manifest.yaml
25
+ ```
26
+
27
+ ## Rule 6: Files Over Inline Data
28
+
29
+ Inline JSON/YAML/HCL creates shell quoting fragility. Write to a temp file, reference by path: `helm upgrade app chart -f /tmp/values.yaml` instead of `--set "config={key: value}"`.
30
+
31
+ ## Cloud CLI Examples
32
+
33
+ ### No Pipes (Rule 1)
34
+
35
+ ```bash
36
+ # BAD: kubectl get pods -o json | jq '.items[0].metadata.name'
37
+ # GOOD: kubectl get pods -o jsonpath='{.items[0].metadata.name}'
38
+ ```
39
+
40
+ ### One Command Per Step (Rule 2)
41
+
42
+ ```bash
43
+ # BAD: terraform init && terraform validate && terraform plan
44
+ # GOOD: run each separately, verify each exit code
45
+ terraform init
46
+ terraform validate
47
+ terraform plan -out=/tmp/tfplan
48
+ ```
49
+
50
+ ### Absolute Paths (Rule 4)
51
+
52
+ ```bash
53
+ # BAD: cd ../../shared/vpc && terraform plan
54
+ # GOOD: terraform plan -chdir="/abs/path/to/terraform/shared/vpc"
55
+ ```
56
+
57
+ ## Additional Red Flags (Mutation-Specific)
58
+
59
+ - *"It won't hang"* -- Timeouts: apply it anyway
60
+ - *"Dry-run passed, I can apply"* -- Rule 5: dry-run, then diff, then apply -- three required steps
61
+ - *"Simple value, I'll inline it"* -- Rule 6: write to temp file first
62
+
63
+ ## Rationalization Table
64
+
65
+ Every excuse an agent makes for violating a rule, and why it is wrong.
66
+
67
+ | Rationalization | Reality | Rule |
68
+ |----------------|---------|------|
69
+ | "This command is fast, no timeout needed" | External systems hang for reasons unrelated to command complexity | Timeouts |
70
+ | "It's just to filter output, not a real pipe" | Pipes hide exit codes and split the atomic contract regardless of intent | 1 |
71
+ | "I need `grep` to find what I'm looking for" | `gcloud`/`kubectl` `--filter` finds it natively, without a subprocess | 1 |
72
+ | "These steps always run together, chaining is fine" | Each command needs its own exit code verification -- chaining loses that | 2 |
73
+ | "I need to persist the output for later analysis" | Use the Write tool -- redirects in bash break the hook's structured output | 3 |
74
+ | "It's faster to use `cat` than the Read tool" | Bash subprocesses lose structured output and create unnecessary permission prompts | 3 |
75
+ | "The relative path should work here" | Working directory is not reliable across tool calls -- it will break | 4 |
76
+ | "Dry-run passed so apply is safe" | dry-run and diff are separate validations -- skip either and you miss drift | 5 |
77
+ | "The inline value is simple enough" | Shell quoting breaks at spaces, special chars, and nested quotes -- always | 6 |
78
+ | "This variable definitely won't have spaces" | It will, eventually -- and when it does, it breaks silently and is hard to debug | 7 |
79
+ | "I need to search file contents with grep" | Use the Grep tool -- it handles permissions, output formatting, and never needs piping | 3 |
80
+
81
+ ## Anti-Patterns
82
+
83
+ Pipe as shortcut. Chain as convenience. Redirect as persistence. `cd` before command. Inline complex data. Unquoted variables.
@@ -0,0 +1,87 @@
1
+ ---
2
+ name: context-updater
3
+ description: Use when investigation reveals data that is missing from or differs from project-context.json
4
+ metadata:
5
+ user-invocable: false
6
+ type: technique
7
+ ---
8
+
9
+ # Context Updater
10
+
11
+ project-context.json is shared memory across agents. When you discover something
12
+ about the project that other agents would need, you are the only one who saw it.
13
+ If you do not write it, the next agent starts from zero on that question.
14
+
15
+ ## When to Emit CONTEXT_UPDATE
16
+
17
+ Emit a `CONTEXT_UPDATE` block when ANY of these are true:
18
+
19
+ 1. **Empty section** — A section you own exists but has no data
20
+ 2. **Drift detected** — Discovered data differs from current section
21
+ 3. **New resources found** — Resources not currently listed
22
+ 4. **Pattern discovered** — Investigation revealed a pattern, structure, or config not yet captured
23
+
24
+ Skip when findings match existing data exactly -- redundant writes
25
+ create noise in the audit trail without adding information.
26
+
27
+ ## How to Emit
28
+
29
+ **Step 1: Check permissions**
30
+
31
+ Do **not** memorize a static table from this skill. Your write permissions are
32
+ shown in the injected context under **Your Write Permissions**. The
33
+ `writable_sections` list there is the source of truth.
34
+
35
+ If `write_permissions` is absent, fall back to your agent contract in
36
+ `config/context-contracts.json`. Do not invent section names. Writing to a
37
+ section you do not own will be rejected by the hook. `gaia-system` and `gaia-planner` do not write to project-context -- they
38
+ manage gaia-ops internals and planning respectively.
39
+
40
+ **Step 2: Build the CONTEXT_UPDATE block**
41
+
42
+ Place this block after analysis and before the `json:contract` block:
43
+
44
+ ```
45
+ CONTEXT_UPDATE:
46
+ {
47
+ "section_name": {
48
+ "key": "value"
49
+ }
50
+ }
51
+ ```
52
+
53
+ Rules: valid JSON, section names must match writable sections, one block per
54
+ response (combine all updates), include only keys to add or update.
55
+
56
+ **Step 3: Apply merge semantics**
57
+
58
+ | Operation | Behavior |
59
+ |-----------|----------|
60
+ | **ADD** | New keys inserted into the section |
61
+ | **MERGE** | Existing dicts recursively merged |
62
+ | **UNION** | Lists merged, no duplicates |
63
+ | **OVERWRITE** | Scalar values replaced |
64
+ | **NO-DELETE** | Keys you don't mention are preserved |
65
+
66
+ ## Prioritization
67
+
68
+ When a section you own is empty or sparse, prioritize high-value keys first.
69
+
70
+ | Priority | What to capture | Why |
71
+ |----------|----------------|-----|
72
+ | **P0** | Resource identifiers (names, IDs, paths) | Enables direct targeting in future searches |
73
+ | **P1** | Structural relationships (what connects to what) | Enables cross-agent reasoning |
74
+ | **P2** | Configuration values (versions, replicas, limits) | Enables drift detection |
75
+ | **P3** | Behavioral patterns (conventions, naming schemes) | Enables consistency enforcement |
76
+
77
+ Capture P0 keys on every investigation. P1-P3 when naturally encountered -- do
78
+ not investigate solely to populate context.
79
+
80
+ For concrete examples, read `examples.md` in this directory.
81
+
82
+ ## Anti-Patterns
83
+
84
+ - Emitting updates without checking writable sections
85
+ - Overwriting user-curated fields with generic values
86
+ - Waiting until task completion to emit (emit as you discover)
87
+ - Skipping P0 fields while enriching lower-priority ones
@@ -0,0 +1,71 @@
1
+ # CONTEXT_UPDATE Examples
2
+
3
+ ## cloud-troubleshooter
4
+
5
+ ```
6
+ CONTEXT_UPDATE:
7
+ {
8
+ "cluster_details": {
9
+ "kubernetes_version": "1.29",
10
+ "node_pools": [
11
+ {"name": "default-pool", "machine_type": "e2-standard-4", "node_count": 3}
12
+ ]
13
+ }
14
+ }
15
+ ```
16
+
17
+ ## gitops-operator
18
+
19
+ ```
20
+ CONTEXT_UPDATE:
21
+ {
22
+ "gitops_configuration": {
23
+ "flux_version": "v2.6.1",
24
+ "reconciliation_interval": "1m"
25
+ }
26
+ }
27
+ ```
28
+
29
+ ## terraform-architect
30
+
31
+ ```
32
+ CONTEXT_UPDATE:
33
+ {
34
+ "terraform_infrastructure": {
35
+ "modules": ["vpc", "eks", "rds"],
36
+ "backend": "s3"
37
+ }
38
+ }
39
+ ```
40
+
41
+ ## developer
42
+
43
+ ```
44
+ CONTEXT_UPDATE:
45
+ {
46
+ "application_services": {
47
+ "services": [
48
+ {"name": "graphql-server", "port": 3000, "namespace": "common"}
49
+ ]
50
+ }
51
+ }
52
+ ```
53
+
54
+ ## Fresh Install Enrichment
55
+
56
+ After investigating a new cluster, the gitops-operator discovers namespace structure:
57
+
58
+ ```
59
+ CONTEXT_UPDATE:
60
+ {
61
+ "cluster_details": {
62
+ "namespaces": {
63
+ "application": ["adm", "dev", "test"],
64
+ "infrastructure": ["flux-system", "ingress-nginx"],
65
+ "system": ["kube-system", "kube-public"]
66
+ }
67
+ }
68
+ }
69
+ ```
70
+
71
+ This merges into existing `cluster_details`. Keys already present (like `kubernetes_version`) are preserved. The `namespaces` dict is added as a new key.
@@ -0,0 +1,50 @@
1
+ ---
2
+ name: developer-patterns
3
+ description: Use when creating, modifying, or reviewing application code in Node.js/TypeScript or Python
4
+ metadata:
5
+ user-invocable: false
6
+ type: domain
7
+ ---
8
+
9
+ # Developer Patterns
10
+
11
+ Reference conventions for Node.js/TypeScript and Python. The codebase is the authority -- these patterns help you find and interpret what's already there.
12
+
13
+ For config file templates (tsconfig.json, pyproject.toml, jest.config.ts), read `reference.md` in this directory.
14
+
15
+ ## Discover the Project's Conventions
16
+
17
+ Before writing code, understand how THIS project is organized.
18
+
19
+ 1. **Find the entry points.** Look for `src/`, `lib/`, `app/`, or the package.json `main`/`exports` field. The layout varies -- what matters is where this project puts its code.
20
+ 2. **Read 2-3 existing modules.** How are tests organized -- co-located or in a `tests/` directory? What import style is used? What tooling does the config reflect?
21
+ 3. **Check the existing toolchain.** Read `package.json` scripts, `tsconfig.json`, `pyproject.toml`, or equivalent. The project's configured tools are your tools.
22
+ 4. **Follow the majority pattern.** If the project uses Vitest, don't introduce Jest. If tests live in `__tests__/`, put yours there too. Consistency with the project matters more than what you'd choose on a greenfield.
23
+
24
+ ## Node.js / TypeScript (Reference)
25
+
26
+ Common conventions -- defer to the project's actual configuration.
27
+
28
+ - **Strict TypeScript** — `strict: true` catches entire categories of null/undefined bugs at compile time rather than runtime
29
+ - **Tests co-located** — `{file}.test.ts` next to `{file}.ts` keeps test and implementation in sync; but some projects prefer `__tests__/` directories, and that's fine
30
+ - **Absolute imports** — path aliases in tsconfig eliminate fragile `../../../` chains that break on refactors
31
+ - **Barrel exports with care** — re-export files (`index.ts`) create circular dependency risks in larger projects; use them intentionally
32
+ - **Lock file committed** — reproducible installs across environments; without it, CI and local can diverge silently
33
+
34
+ ## Python (Reference)
35
+
36
+ Common conventions -- defer to the project's actual configuration.
37
+
38
+ - **src layout** — package under `src/` prevents accidental imports of the uninstalled package during development
39
+ - **pyproject.toml** — single source of truth for packaging; `setup.py` and `setup.cfg` are legacy unless the project already uses them
40
+ - **Type hints** — return types, parameter types; `Any` without a comment explaining why is a hole in the type safety net
41
+ - **Fixtures in conftest.py** — shared fixtures at directory level prevent duplication; pytest discovers them automatically
42
+ - **Lock file committed** — same reason as Node: reproducible installs
43
+
44
+ ## Key Rules (Both Stacks)
45
+
46
+ 1. **Tests with code** — untested code is unverified code; CI should enforce this, and if it doesn't, that's worth flagging
47
+ 2. **Linter runs clean** — disabling a lint rule without a comment explaining why creates invisible technical debt
48
+ 3. **No secrets in code** — environment variables only; `.env.example` documents what's needed so new developers don't have to guess
49
+ 4. **Dependency pinning** — lock files committed; without them, "works on my machine" is the default state
50
+ 5. **Security scanning** — `npm audit` / `pip-audit` catches known vulnerabilities before they reach production
@@ -0,0 +1,112 @@
1
+ # Developer Patterns — Config Reference
2
+
3
+ Minimal config templates. Replace `{package-name}` and other placeholders with project values.
4
+
5
+ For project-specific examples, discover patterns from the existing codebase using the `investigation` skill.
6
+
7
+ ---
8
+
9
+ ## tsconfig.json (strict baseline)
10
+
11
+ ```json
12
+ {
13
+ "compilerOptions": {
14
+ "target": "ES2022",
15
+ "module": "NodeNext",
16
+ "moduleResolution": "NodeNext",
17
+ "strict": true,
18
+ "noImplicitAny": true,
19
+ "strictNullChecks": true,
20
+ "noUncheckedIndexedAccess": true,
21
+ "outDir": "dist",
22
+ "rootDir": "src",
23
+ "paths": {
24
+ "@/*": ["src/*"]
25
+ }
26
+ },
27
+ "include": ["src"],
28
+ "exclude": ["node_modules", "dist"]
29
+ }
30
+ ```
31
+
32
+ ## pyproject.toml (Poetry baseline)
33
+
34
+ ```toml
35
+ [tool.poetry]
36
+ name = "{package-name}"
37
+ version = "0.1.0"
38
+ description = ""
39
+ packages = [{include = "{package-name}", from = "src"}]
40
+
41
+ [tool.poetry.dependencies]
42
+ python = "^3.12"
43
+
44
+ [tool.poetry.group.dev.dependencies]
45
+ pytest = "^8.0"
46
+ ruff = "^0.4"
47
+ mypy = "^1.10"
48
+
49
+ [tool.ruff]
50
+ line-length = 88
51
+ select = ["E", "F", "I", "N", "UP"]
52
+
53
+ [tool.mypy]
54
+ strict = true
55
+ python_version = "3.12"
56
+
57
+ [tool.pytest.ini_options]
58
+ testpaths = ["src"]
59
+ ```
60
+
61
+ ## jest.config.ts (TypeScript)
62
+
63
+ ```typescript
64
+ import type { Config } from 'jest'
65
+
66
+ const config: Config = {
67
+ preset: 'ts-jest',
68
+ testEnvironment: 'node',
69
+ moduleNameMapper: {
70
+ '^@/(.*)$': '<rootDir>/src/$1',
71
+ },
72
+ collectCoverageFrom: ['src/**/*.ts', '!src/**/*.test.ts'],
73
+ coverageThreshold: {
74
+ global: { lines: 80 }
75
+ }
76
+ }
77
+
78
+ export default config
79
+ ```
80
+
81
+ ## pytest conftest.py (fixture baseline)
82
+
83
+ ```python
84
+ import pytest
85
+
86
+ @pytest.fixture(scope="session")
87
+ def db_connection():
88
+ """Session-scoped fixture for database connection."""
89
+ # Setup
90
+ conn = create_connection()
91
+ yield conn
92
+ # Teardown
93
+ conn.close()
94
+
95
+ @pytest.fixture(autouse=True)
96
+ def reset_state():
97
+ """Auto-use fixture to reset state between tests."""
98
+ yield
99
+ # cleanup after each test
100
+ ```
101
+
102
+ ## .env.example
103
+
104
+ ```bash
105
+ # Required
106
+ DATABASE_URL=postgresql://user:password@localhost:5432/dbname
107
+ API_KEY=your-api-key-here
108
+
109
+ # Optional
110
+ LOG_LEVEL=info
111
+ PORT=3000
112
+ ```