@jaguilar87/gaia-ops 4.4.0 → 4.7.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 (371) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +12 -3
  3. package/ARCHITECTURE.md +9 -8
  4. package/CHANGELOG.md +34 -0
  5. package/README.md +43 -11
  6. package/agents/terraform-architect.md +1 -1
  7. package/bin/README.md +2 -2
  8. package/bin/gaia-doctor.js +18 -5
  9. package/bin/gaia-history.js +0 -1
  10. package/bin/gaia-metrics.js +2 -2
  11. package/bin/gaia-scan.py +23 -1
  12. package/bin/gaia-update.js +346 -54
  13. package/bin/pre-publish-validate.js +33 -10
  14. package/commands/gaia.md +37 -0
  15. package/config/README.md +3 -9
  16. package/config/context-contracts.json +47 -15
  17. package/config/surface-routing.json +9 -1
  18. package/dist/gaia-ops/.claude-plugin/plugin.json +22 -0
  19. package/dist/gaia-ops/agents/cloud-troubleshooter.md +73 -0
  20. package/dist/gaia-ops/agents/devops-developer.md +57 -0
  21. package/dist/gaia-ops/agents/gaia-system.md +58 -0
  22. package/dist/gaia-ops/agents/gitops-operator.md +60 -0
  23. package/dist/gaia-ops/agents/speckit-planner.md +71 -0
  24. package/dist/gaia-ops/agents/terraform-architect.md +60 -0
  25. package/dist/gaia-ops/commands/gaia.md +37 -0
  26. package/dist/gaia-ops/config/README.md +58 -0
  27. package/dist/gaia-ops/config/cloud/aws.json +140 -0
  28. package/dist/gaia-ops/config/cloud/gcp.json +145 -0
  29. package/dist/gaia-ops/config/context-contracts.json +131 -0
  30. package/dist/gaia-ops/config/git_standards.json +72 -0
  31. package/dist/gaia-ops/config/surface-routing.json +197 -0
  32. package/dist/gaia-ops/config/universal-rules.json +10 -0
  33. package/dist/gaia-ops/hooks/adapters/__init__.py +52 -0
  34. package/dist/gaia-ops/hooks/adapters/base.py +219 -0
  35. package/dist/gaia-ops/hooks/adapters/channel.py +17 -0
  36. package/dist/gaia-ops/hooks/adapters/claude_code.py +1477 -0
  37. package/dist/gaia-ops/hooks/adapters/types.py +194 -0
  38. package/dist/gaia-ops/hooks/adapters/utils.py +25 -0
  39. package/dist/gaia-ops/hooks/hooks.json +126 -0
  40. package/dist/gaia-ops/hooks/modules/__init__.py +15 -0
  41. package/dist/gaia-ops/hooks/modules/agents/__init__.py +29 -0
  42. package/dist/gaia-ops/hooks/modules/agents/contract_validator.py +647 -0
  43. package/dist/gaia-ops/hooks/modules/agents/response_contract.py +496 -0
  44. package/dist/gaia-ops/hooks/modules/agents/skill_injection_verifier.py +124 -0
  45. package/dist/gaia-ops/hooks/modules/agents/task_info_builder.py +74 -0
  46. package/dist/gaia-ops/hooks/modules/agents/transcript_analyzer.py +458 -0
  47. package/dist/gaia-ops/hooks/modules/agents/transcript_reader.py +152 -0
  48. package/dist/gaia-ops/hooks/modules/audit/__init__.py +28 -0
  49. package/dist/gaia-ops/hooks/modules/audit/event_detector.py +168 -0
  50. package/dist/gaia-ops/hooks/modules/audit/logger.py +131 -0
  51. package/dist/gaia-ops/hooks/modules/audit/metrics.py +134 -0
  52. package/dist/gaia-ops/hooks/modules/audit/workflow_auditor.py +576 -0
  53. package/dist/gaia-ops/hooks/modules/audit/workflow_recorder.py +296 -0
  54. package/dist/gaia-ops/hooks/modules/context/__init__.py +11 -0
  55. package/dist/gaia-ops/hooks/modules/context/anchor_tracker.py +317 -0
  56. package/dist/gaia-ops/hooks/modules/context/compact_context_builder.py +215 -0
  57. package/dist/gaia-ops/hooks/modules/context/context_cache.py +129 -0
  58. package/dist/gaia-ops/hooks/modules/context/context_freshness.py +145 -0
  59. package/dist/gaia-ops/hooks/modules/context/context_injector.py +427 -0
  60. package/dist/gaia-ops/hooks/modules/context/context_writer.py +518 -0
  61. package/dist/gaia-ops/hooks/modules/context/contracts_loader.py +161 -0
  62. package/dist/gaia-ops/hooks/modules/core/__init__.py +40 -0
  63. package/dist/gaia-ops/hooks/modules/core/hook_entry.py +78 -0
  64. package/dist/gaia-ops/hooks/modules/core/paths.py +160 -0
  65. package/dist/gaia-ops/hooks/modules/core/plugin_mode.py +149 -0
  66. package/dist/gaia-ops/hooks/modules/core/plugin_setup.py +558 -0
  67. package/dist/gaia-ops/hooks/modules/core/state.py +179 -0
  68. package/dist/gaia-ops/hooks/modules/core/stdin.py +24 -0
  69. package/dist/gaia-ops/hooks/modules/events/__init__.py +1 -0
  70. package/dist/gaia-ops/hooks/modules/events/event_writer.py +210 -0
  71. package/dist/gaia-ops/hooks/modules/identity/__init__.py +0 -0
  72. package/dist/gaia-ops/hooks/modules/identity/identity_provider.py +21 -0
  73. package/dist/gaia-ops/hooks/modules/identity/ops_identity.py +34 -0
  74. package/dist/gaia-ops/hooks/modules/identity/security_identity.py +10 -0
  75. package/dist/gaia-ops/hooks/modules/memory/__init__.py +8 -0
  76. package/dist/gaia-ops/hooks/modules/memory/episode_writer.py +227 -0
  77. package/dist/gaia-ops/hooks/modules/orchestrator/__init__.py +1 -0
  78. package/dist/gaia-ops/hooks/modules/orchestrator/delegate_mode.py +128 -0
  79. package/dist/gaia-ops/hooks/modules/scanning/__init__.py +8 -0
  80. package/dist/gaia-ops/hooks/modules/scanning/scan_trigger.py +84 -0
  81. package/dist/gaia-ops/hooks/modules/security/__init__.py +89 -0
  82. package/dist/gaia-ops/hooks/modules/security/approval_cleanup.py +87 -0
  83. package/dist/gaia-ops/hooks/modules/security/approval_constants.py +23 -0
  84. package/dist/gaia-ops/hooks/modules/security/approval_grants.py +912 -0
  85. package/dist/gaia-ops/hooks/modules/security/approval_messages.py +71 -0
  86. package/dist/gaia-ops/hooks/modules/security/approval_scopes.py +153 -0
  87. package/dist/gaia-ops/hooks/modules/security/blocked_commands.py +584 -0
  88. package/dist/gaia-ops/hooks/modules/security/blocked_message_formatter.py +86 -0
  89. package/dist/gaia-ops/hooks/modules/security/command_semantics.py +130 -0
  90. package/dist/gaia-ops/hooks/modules/security/gitops_validator.py +179 -0
  91. package/dist/gaia-ops/hooks/modules/security/mutative_verbs.py +850 -0
  92. package/dist/gaia-ops/hooks/modules/security/prompt_validator.py +40 -0
  93. package/dist/gaia-ops/hooks/modules/security/tiers.py +196 -0
  94. package/dist/gaia-ops/hooks/modules/session/__init__.py +10 -0
  95. package/dist/gaia-ops/hooks/modules/session/session_context_writer.py +100 -0
  96. package/dist/gaia-ops/hooks/modules/session/session_event_injector.py +158 -0
  97. package/dist/gaia-ops/hooks/modules/session/session_manager.py +31 -0
  98. package/dist/gaia-ops/hooks/modules/tools/__init__.py +25 -0
  99. package/dist/gaia-ops/hooks/modules/tools/bash_validator.py +708 -0
  100. package/dist/gaia-ops/hooks/modules/tools/cloud_pipe_validator.py +181 -0
  101. package/dist/gaia-ops/hooks/modules/tools/hook_response.py +55 -0
  102. package/dist/gaia-ops/hooks/modules/tools/shell_parser.py +227 -0
  103. package/dist/gaia-ops/hooks/modules/tools/task_validator.py +283 -0
  104. package/dist/gaia-ops/hooks/modules/validation/__init__.py +23 -0
  105. package/dist/gaia-ops/hooks/modules/validation/commit_validator.py +380 -0
  106. package/dist/gaia-ops/hooks/post_compact.py +43 -0
  107. package/dist/gaia-ops/hooks/post_tool_use.py +54 -0
  108. package/dist/gaia-ops/hooks/pre_tool_use.py +383 -0
  109. package/dist/gaia-ops/hooks/session_start.py +69 -0
  110. package/dist/gaia-ops/hooks/stop_hook.py +69 -0
  111. package/dist/gaia-ops/hooks/subagent_start.py +71 -0
  112. package/dist/gaia-ops/hooks/subagent_stop.py +288 -0
  113. package/dist/gaia-ops/hooks/task_completed.py +70 -0
  114. package/dist/gaia-ops/hooks/user_prompt_submit.py +177 -0
  115. package/dist/gaia-ops/settings.json +72 -0
  116. package/dist/gaia-ops/skills/README.md +109 -0
  117. package/dist/gaia-ops/skills/agent-protocol/SKILL.md +105 -0
  118. package/dist/gaia-ops/skills/agent-protocol/examples.md +170 -0
  119. package/dist/gaia-ops/skills/agent-response/SKILL.md +53 -0
  120. package/dist/gaia-ops/skills/approval/SKILL.md +85 -0
  121. package/dist/gaia-ops/skills/approval/examples.md +140 -0
  122. package/dist/gaia-ops/skills/approval/reference.md +57 -0
  123. package/dist/gaia-ops/skills/command-execution/SKILL.md +64 -0
  124. package/dist/gaia-ops/skills/command-execution/reference.md +83 -0
  125. package/dist/gaia-ops/skills/context-updater/SKILL.md +76 -0
  126. package/dist/gaia-ops/skills/context-updater/examples.md +71 -0
  127. package/dist/gaia-ops/skills/developer-patterns/SKILL.md +93 -0
  128. package/dist/gaia-ops/skills/developer-patterns/reference.md +112 -0
  129. package/dist/gaia-ops/skills/execution/SKILL.md +66 -0
  130. package/dist/gaia-ops/skills/fast-queries/SKILL.md +47 -0
  131. package/dist/gaia-ops/skills/gaia-patterns/SKILL.md +92 -0
  132. package/dist/gaia-ops/skills/gaia-patterns/reference.md +22 -0
  133. package/dist/gaia-ops/skills/git-conventions/SKILL.md +48 -0
  134. package/dist/gaia-ops/skills/gitops-patterns/SKILL.md +73 -0
  135. package/dist/gaia-ops/skills/gitops-patterns/reference.md +183 -0
  136. package/dist/gaia-ops/skills/investigation/SKILL.md +77 -0
  137. package/dist/gaia-ops/skills/orchestrator-approval/SKILL.md +64 -0
  138. package/dist/gaia-ops/skills/reference.md +134 -0
  139. package/dist/gaia-ops/skills/security-tiers/SKILL.md +61 -0
  140. package/dist/gaia-ops/skills/security-tiers/destructive-commands-reference.md +623 -0
  141. package/dist/gaia-ops/skills/security-tiers/reference.md +39 -0
  142. package/dist/gaia-ops/skills/skill-creation/SKILL.md +119 -0
  143. package/dist/gaia-ops/skills/specification/SKILL.md +186 -0
  144. package/dist/gaia-ops/skills/speckit-workflow/SKILL.md +165 -0
  145. package/dist/gaia-ops/skills/speckit-workflow/reference.md +117 -0
  146. package/dist/gaia-ops/skills/terraform-patterns/SKILL.md +63 -0
  147. package/dist/gaia-ops/skills/terraform-patterns/reference.md +93 -0
  148. package/dist/gaia-ops/speckit/README.md +516 -0
  149. package/dist/gaia-ops/speckit/scripts/.gitkeep +0 -0
  150. package/dist/gaia-ops/speckit/templates/adr-template.md +118 -0
  151. package/dist/gaia-ops/speckit/templates/agent-file-template.md +23 -0
  152. package/dist/gaia-ops/speckit/templates/plan-template.md +227 -0
  153. package/dist/gaia-ops/speckit/templates/spec-template.md +140 -0
  154. package/dist/gaia-ops/speckit/templates/tasks-template.md +257 -0
  155. package/dist/gaia-ops/tools/context/README.md +132 -0
  156. package/dist/gaia-ops/tools/context/__init__.py +42 -0
  157. package/dist/gaia-ops/tools/context/_paths.py +20 -0
  158. package/dist/gaia-ops/tools/context/context_provider.py +476 -0
  159. package/dist/gaia-ops/tools/context/context_section_reader.py +330 -0
  160. package/dist/gaia-ops/tools/context/deep_merge.py +159 -0
  161. package/dist/gaia-ops/tools/context/pending_updates.py +760 -0
  162. package/dist/gaia-ops/tools/context/surface_router.py +278 -0
  163. package/dist/gaia-ops/tools/fast-queries/README.md +65 -0
  164. package/dist/gaia-ops/tools/fast-queries/__init__.py +30 -0
  165. package/dist/gaia-ops/tools/fast-queries/appservices/quicktriage_devops_developer.sh +75 -0
  166. package/dist/gaia-ops/tools/fast-queries/cloud/aws/quicktriage_aws_troubleshooter.sh +32 -0
  167. package/dist/gaia-ops/tools/fast-queries/cloud/gcp/quicktriage_gcp_troubleshooter.sh +88 -0
  168. package/dist/gaia-ops/tools/fast-queries/gitops/quicktriage_gitops_operator.sh +48 -0
  169. package/dist/gaia-ops/tools/fast-queries/run_triage.sh +59 -0
  170. package/dist/gaia-ops/tools/fast-queries/terraform/quicktriage_terraform_architect.sh +80 -0
  171. package/dist/gaia-ops/tools/gaia_simulator/__init__.py +33 -0
  172. package/dist/gaia-ops/tools/gaia_simulator/cli.py +354 -0
  173. package/dist/gaia-ops/tools/gaia_simulator/extractor.py +457 -0
  174. package/dist/gaia-ops/tools/gaia_simulator/reporter.py +258 -0
  175. package/dist/gaia-ops/tools/gaia_simulator/routing_simulator.py +334 -0
  176. package/dist/gaia-ops/tools/gaia_simulator/runner.py +539 -0
  177. package/dist/gaia-ops/tools/gaia_simulator/skills_mapper.py +262 -0
  178. package/dist/gaia-ops/tools/memory/README.md +0 -0
  179. package/dist/gaia-ops/tools/memory/__init__.py +20 -0
  180. package/dist/gaia-ops/tools/memory/episodic.py +1196 -0
  181. package/dist/gaia-ops/tools/persist_transcript_analysis.py +85 -0
  182. package/dist/gaia-ops/tools/review/__init__.py +1 -0
  183. package/dist/gaia-ops/tools/review/review_engine.py +157 -0
  184. package/dist/gaia-ops/tools/scan/__init__.py +35 -0
  185. package/dist/gaia-ops/tools/scan/config.py +247 -0
  186. package/dist/gaia-ops/tools/scan/merge.py +212 -0
  187. package/dist/gaia-ops/tools/scan/orchestrator.py +549 -0
  188. package/dist/gaia-ops/tools/scan/registry.py +127 -0
  189. package/dist/gaia-ops/tools/scan/scanners/__init__.py +18 -0
  190. package/dist/gaia-ops/tools/scan/scanners/base.py +137 -0
  191. package/dist/gaia-ops/tools/scan/scanners/environment.py +324 -0
  192. package/dist/gaia-ops/tools/scan/scanners/git.py +570 -0
  193. package/dist/gaia-ops/tools/scan/scanners/infrastructure.py +875 -0
  194. package/dist/gaia-ops/tools/scan/scanners/orchestration.py +600 -0
  195. package/dist/gaia-ops/tools/scan/scanners/stack.py +1085 -0
  196. package/dist/gaia-ops/tools/scan/scanners/tools.py +260 -0
  197. package/dist/gaia-ops/tools/scan/setup.py +753 -0
  198. package/dist/gaia-ops/tools/scan/tests/__init__.py +1 -0
  199. package/dist/gaia-ops/tools/scan/tests/conftest.py +796 -0
  200. package/dist/gaia-ops/tools/scan/tests/test_environment.py +323 -0
  201. package/dist/gaia-ops/tools/scan/tests/test_git.py +419 -0
  202. package/dist/gaia-ops/tools/scan/tests/test_infrastructure.py +382 -0
  203. package/dist/gaia-ops/tools/scan/tests/test_integration.py +920 -0
  204. package/dist/gaia-ops/tools/scan/tests/test_merge.py +269 -0
  205. package/dist/gaia-ops/tools/scan/tests/test_orchestration.py +304 -0
  206. package/dist/gaia-ops/tools/scan/tests/test_stack.py +604 -0
  207. package/dist/gaia-ops/tools/scan/tests/test_tools.py +349 -0
  208. package/dist/gaia-ops/tools/scan/ui.py +624 -0
  209. package/dist/gaia-ops/tools/scan/verify.py +266 -0
  210. package/dist/gaia-ops/tools/scan/walk.py +118 -0
  211. package/dist/gaia-ops/tools/scan/workspace.py +85 -0
  212. package/dist/gaia-ops/tools/validation/README.md +244 -0
  213. package/dist/gaia-ops/tools/validation/__init__.py +17 -0
  214. package/dist/gaia-ops/tools/validation/approval_gate.py +321 -0
  215. package/dist/gaia-ops/tools/validation/validate_skills.py +189 -0
  216. package/dist/gaia-security/.claude-plugin/plugin.json +22 -0
  217. package/dist/gaia-security/config/universal-rules.json +10 -0
  218. package/dist/gaia-security/hooks/adapters/__init__.py +52 -0
  219. package/dist/gaia-security/hooks/adapters/base.py +219 -0
  220. package/dist/gaia-security/hooks/adapters/channel.py +17 -0
  221. package/dist/gaia-security/hooks/adapters/claude_code.py +1477 -0
  222. package/dist/gaia-security/hooks/adapters/types.py +194 -0
  223. package/dist/gaia-security/hooks/adapters/utils.py +25 -0
  224. package/dist/gaia-security/hooks/hooks.json +57 -0
  225. package/dist/gaia-security/hooks/modules/__init__.py +15 -0
  226. package/dist/gaia-security/hooks/modules/agents/__init__.py +29 -0
  227. package/dist/gaia-security/hooks/modules/agents/contract_validator.py +647 -0
  228. package/dist/gaia-security/hooks/modules/agents/response_contract.py +496 -0
  229. package/dist/gaia-security/hooks/modules/agents/skill_injection_verifier.py +124 -0
  230. package/dist/gaia-security/hooks/modules/agents/task_info_builder.py +74 -0
  231. package/dist/gaia-security/hooks/modules/agents/transcript_analyzer.py +458 -0
  232. package/dist/gaia-security/hooks/modules/agents/transcript_reader.py +152 -0
  233. package/dist/gaia-security/hooks/modules/audit/__init__.py +28 -0
  234. package/dist/gaia-security/hooks/modules/audit/event_detector.py +168 -0
  235. package/dist/gaia-security/hooks/modules/audit/logger.py +131 -0
  236. package/dist/gaia-security/hooks/modules/audit/metrics.py +134 -0
  237. package/dist/gaia-security/hooks/modules/audit/workflow_auditor.py +576 -0
  238. package/dist/gaia-security/hooks/modules/audit/workflow_recorder.py +296 -0
  239. package/dist/gaia-security/hooks/modules/context/__init__.py +11 -0
  240. package/dist/gaia-security/hooks/modules/context/anchor_tracker.py +317 -0
  241. package/dist/gaia-security/hooks/modules/context/compact_context_builder.py +215 -0
  242. package/dist/gaia-security/hooks/modules/context/context_cache.py +129 -0
  243. package/dist/gaia-security/hooks/modules/context/context_freshness.py +145 -0
  244. package/dist/gaia-security/hooks/modules/context/context_injector.py +427 -0
  245. package/dist/gaia-security/hooks/modules/context/context_writer.py +518 -0
  246. package/dist/gaia-security/hooks/modules/context/contracts_loader.py +161 -0
  247. package/dist/gaia-security/hooks/modules/core/__init__.py +40 -0
  248. package/dist/gaia-security/hooks/modules/core/hook_entry.py +78 -0
  249. package/dist/gaia-security/hooks/modules/core/paths.py +160 -0
  250. package/dist/gaia-security/hooks/modules/core/plugin_mode.py +149 -0
  251. package/dist/gaia-security/hooks/modules/core/plugin_setup.py +558 -0
  252. package/dist/gaia-security/hooks/modules/core/state.py +179 -0
  253. package/dist/gaia-security/hooks/modules/core/stdin.py +24 -0
  254. package/dist/gaia-security/hooks/modules/events/__init__.py +1 -0
  255. package/dist/gaia-security/hooks/modules/events/event_writer.py +210 -0
  256. package/dist/gaia-security/hooks/modules/identity/__init__.py +0 -0
  257. package/dist/gaia-security/hooks/modules/identity/identity_provider.py +21 -0
  258. package/dist/gaia-security/hooks/modules/identity/ops_identity.py +34 -0
  259. package/dist/gaia-security/hooks/modules/identity/security_identity.py +10 -0
  260. package/dist/gaia-security/hooks/modules/memory/__init__.py +8 -0
  261. package/dist/gaia-security/hooks/modules/memory/episode_writer.py +227 -0
  262. package/dist/gaia-security/hooks/modules/orchestrator/__init__.py +1 -0
  263. package/dist/gaia-security/hooks/modules/orchestrator/delegate_mode.py +128 -0
  264. package/dist/gaia-security/hooks/modules/scanning/__init__.py +8 -0
  265. package/dist/gaia-security/hooks/modules/scanning/scan_trigger.py +84 -0
  266. package/dist/gaia-security/hooks/modules/security/__init__.py +89 -0
  267. package/dist/gaia-security/hooks/modules/security/approval_cleanup.py +87 -0
  268. package/dist/gaia-security/hooks/modules/security/approval_constants.py +23 -0
  269. package/dist/gaia-security/hooks/modules/security/approval_grants.py +912 -0
  270. package/dist/gaia-security/hooks/modules/security/approval_messages.py +71 -0
  271. package/dist/gaia-security/hooks/modules/security/approval_scopes.py +153 -0
  272. package/dist/gaia-security/hooks/modules/security/blocked_commands.py +584 -0
  273. package/dist/gaia-security/hooks/modules/security/blocked_message_formatter.py +86 -0
  274. package/dist/gaia-security/hooks/modules/security/command_semantics.py +130 -0
  275. package/dist/gaia-security/hooks/modules/security/gitops_validator.py +179 -0
  276. package/dist/gaia-security/hooks/modules/security/mutative_verbs.py +850 -0
  277. package/dist/gaia-security/hooks/modules/security/prompt_validator.py +40 -0
  278. package/dist/gaia-security/hooks/modules/security/tiers.py +196 -0
  279. package/dist/gaia-security/hooks/modules/session/__init__.py +10 -0
  280. package/dist/gaia-security/hooks/modules/session/session_context_writer.py +100 -0
  281. package/dist/gaia-security/hooks/modules/session/session_event_injector.py +158 -0
  282. package/dist/gaia-security/hooks/modules/session/session_manager.py +31 -0
  283. package/dist/gaia-security/hooks/modules/tools/__init__.py +25 -0
  284. package/dist/gaia-security/hooks/modules/tools/bash_validator.py +708 -0
  285. package/dist/gaia-security/hooks/modules/tools/cloud_pipe_validator.py +181 -0
  286. package/dist/gaia-security/hooks/modules/tools/hook_response.py +55 -0
  287. package/dist/gaia-security/hooks/modules/tools/shell_parser.py +227 -0
  288. package/dist/gaia-security/hooks/modules/tools/task_validator.py +283 -0
  289. package/dist/gaia-security/hooks/modules/validation/__init__.py +23 -0
  290. package/dist/gaia-security/hooks/modules/validation/commit_validator.py +380 -0
  291. package/dist/gaia-security/hooks/post_tool_use.py +54 -0
  292. package/dist/gaia-security/hooks/pre_tool_use.py +383 -0
  293. package/dist/gaia-security/hooks/session_start.py +69 -0
  294. package/dist/gaia-security/hooks/stop_hook.py +69 -0
  295. package/dist/gaia-security/hooks/user_prompt_submit.py +177 -0
  296. package/dist/gaia-security/settings.json +58 -0
  297. package/git-hooks/commit-msg +41 -0
  298. package/hooks/README.md +8 -6
  299. package/hooks/adapters/channel.py +0 -25
  300. package/hooks/adapters/claude_code.py +364 -125
  301. package/hooks/elicitation_result.py +132 -0
  302. package/hooks/hooks.json +10 -1
  303. package/hooks/modules/README.md +3 -2
  304. package/hooks/modules/agents/contract_validator.py +3 -51
  305. package/hooks/modules/agents/response_contract.py +4 -8
  306. package/hooks/modules/agents/transcript_reader.py +4 -5
  307. package/hooks/modules/audit/__init__.py +4 -6
  308. package/hooks/modules/audit/event_detector.py +0 -2
  309. package/hooks/modules/audit/metrics.py +108 -187
  310. package/hooks/modules/audit/workflow_auditor.py +0 -4
  311. package/hooks/modules/audit/workflow_recorder.py +0 -5
  312. package/hooks/modules/context/compact_context_builder.py +1 -0
  313. package/hooks/modules/context/context_cache.py +129 -0
  314. package/hooks/modules/context/context_injector.py +18 -40
  315. package/hooks/modules/context/context_writer.py +1 -25
  316. package/hooks/modules/context/contracts_loader.py +7 -10
  317. package/hooks/modules/core/hook_entry.py +1 -0
  318. package/hooks/modules/core/paths.py +12 -13
  319. package/hooks/modules/core/plugin_mode.py +74 -4
  320. package/hooks/modules/core/plugin_setup.py +395 -23
  321. package/hooks/modules/events/__init__.py +1 -0
  322. package/hooks/modules/events/event_writer.py +210 -0
  323. package/hooks/modules/identity/ops_identity.py +18 -27
  324. package/hooks/modules/memory/episode_writer.py +1 -6
  325. package/hooks/modules/orchestrator/__init__.py +1 -0
  326. package/hooks/modules/orchestrator/delegate_mode.py +128 -0
  327. package/hooks/modules/security/__init__.py +2 -4
  328. package/hooks/modules/security/approval_constants.py +5 -1
  329. package/hooks/modules/security/approval_grants.py +189 -6
  330. package/hooks/modules/security/approval_messages.py +9 -21
  331. package/hooks/modules/security/blocked_commands.py +98 -34
  332. package/hooks/modules/security/command_semantics.py +0 -4
  333. package/hooks/modules/security/gitops_validator.py +1 -11
  334. package/hooks/modules/security/mutative_verbs.py +179 -38
  335. package/hooks/modules/security/tiers.py +1 -19
  336. package/hooks/modules/session/session_event_injector.py +1 -25
  337. package/hooks/modules/tools/bash_validator.py +310 -94
  338. package/hooks/modules/tools/shell_parser.py +0 -1
  339. package/hooks/modules/tools/task_validator.py +9 -29
  340. package/hooks/post_tool_use.py +0 -72
  341. package/hooks/pre_tool_use.py +42 -102
  342. package/hooks/session_start.py +4 -2
  343. package/hooks/subagent_start.py +6 -2
  344. package/hooks/subagent_stop.py +1 -13
  345. package/hooks/user_prompt_submit.py +119 -37
  346. package/index.js +1 -1
  347. package/package.json +5 -3
  348. package/skills/README.md +3 -5
  349. package/skills/agent-protocol/SKILL.md +17 -16
  350. package/skills/agent-protocol/examples.md +6 -6
  351. package/skills/agent-response/SKILL.md +11 -14
  352. package/skills/approval/SKILL.md +28 -13
  353. package/skills/approval/reference.md +2 -2
  354. package/skills/execution/SKILL.md +1 -1
  355. package/skills/gaia-patterns/SKILL.md +2 -3
  356. package/skills/orchestrator-approval/SKILL.md +22 -50
  357. package/skills/security-tiers/SKILL.md +1 -1
  358. package/templates/README.md +9 -9
  359. package/templates/managed-settings.template.json +43 -0
  360. package/tools/gaia_simulator/runner.py +34 -1
  361. package/tools/scan/orchestrator.py +13 -0
  362. package/tools/scan/scanners/base.py +8 -0
  363. package/tools/scan/scanners/git.py +78 -0
  364. package/tools/scan/scanners/infrastructure.py +65 -0
  365. package/tools/scan/scanners/stack.py +110 -0
  366. package/tools/scan/setup.py +120 -13
  367. package/tools/scan/workspace.py +85 -0
  368. package/config/context-contracts.aws.json +0 -42
  369. package/config/context-contracts.gcp.json +0 -39
  370. package/skills/project-dispatch/SKILL.md +0 -34
  371. package/templates/settings.template.json +0 -226
@@ -0,0 +1,57 @@
1
+ # Approval Plan Template
2
+
3
+ Use this template when presenting a T3 plan for user approval.
4
+ The fields below map directly to the `approval_request` object in your `json:contract` block.
5
+
6
+ ```markdown
7
+ ## Deployment Plan
8
+
9
+ ### Summary (3-5 bullets)
10
+ - What will be changed
11
+ - Why this change is needed
12
+ - What the expected outcome is
13
+
14
+ ### Changes Proposed
15
+
16
+ **Resources to CREATE:**
17
+ - [Resource]: [Description]
18
+
19
+ **Resources to MODIFY:**
20
+ - [Resource]: [What changes] (before -> after)
21
+
22
+ **Resources to DELETE:**
23
+ - [Resource]: [Why deletion]
24
+
25
+ ### Validation Results
26
+
27
+ **Dry-run status:**
28
+ - `[simulation command]` - [result summary]
29
+
30
+ **Dependencies verified:**
31
+ - [Dependency]: Available
32
+
33
+ ### approval_request fields
34
+
35
+ These 6 fields MUST appear in the `approval_request` object of your `json:contract`:
36
+
37
+ | Field | Example value |
38
+ |-------|---------------|
39
+ | `operation` | `"apply Terraform changes to dev VPC"` |
40
+ | `exact_content` | `"terraform -chdir=/infra/dev apply -auto-approve"` |
41
+ | `scope` | `"infra/dev/vpc.tf, infra/dev/subnets.tf -- dev environment only"` |
42
+ | `risk_level` | `"MEDIUM"` |
43
+ | `rollback` | `"terraform -chdir=/infra/dev apply -target=module.vpc -var='cidr=10.0.0.0/16'"` |
44
+ | `verification` | `"terraform -chdir=/infra/dev output vpc_id -- expect vpc-xxx"` |
45
+
46
+ When a hook blocked the command, also include:
47
+ | Field | Example value |
48
+ |-------|---------------|
49
+ | `approval_id` | `"a1b2c3d4e5f6..."` (hex from hook deny response) |
50
+
51
+ ### Files Affected
52
+
53
+ **Git changes:**
54
+ - Modified: [files]
55
+ - Added: [files]
56
+ - Deleted: [files]
57
+ ```
@@ -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** — working directory is not reliable.
41
+ 5. **Quote variables** — always `"${VAR}"`.
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,76 @@
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
+ ---
7
+
8
+ # Context Updater Protocol
9
+
10
+ ## When to Emit CONTEXT_UPDATE
11
+
12
+ Emit a `CONTEXT_UPDATE` block when ANY of these are true:
13
+
14
+ 1. **Empty section** — A section you own exists but has no data
15
+ 2. **Drift detected** — Discovered data differs from current section
16
+ 3. **New resources found** — Resources not currently listed
17
+ 4. **Pattern discovered** — Investigation revealed a pattern, structure, or config not yet captured (see `investigation` skill DOCUMENT rule)
18
+
19
+ Do NOT emit if findings match existing data exactly.
20
+
21
+ ## Format
22
+
23
+ Place this block after analysis and before the `json:contract` block:
24
+
25
+ ```
26
+ CONTEXT_UPDATE:
27
+ {
28
+ "section_name": {
29
+ "key": "value"
30
+ }
31
+ }
32
+ ```
33
+
34
+ **Rules:**
35
+ - Must be valid JSON
36
+ - Section names must match your writable sections
37
+ - One block per response (combine all updates)
38
+ - Include only keys to add or update
39
+
40
+ ## Merge Rules
41
+
42
+ | Operation | Behavior |
43
+ |-----------|----------|
44
+ | **ADD** | New keys inserted into the section |
45
+ | **MERGE** | Existing dicts recursively merged |
46
+ | **UNION** | Lists merged, no duplicates |
47
+ | **OVERWRITE** | Scalar values replaced |
48
+ | **NO-DELETE** | Keys you don't mention are preserved |
49
+
50
+ ## Writable Sections Source of Truth
51
+
52
+ Do **not** memorize a static table from this skill.
53
+ Your write permissions are shown in the injected context under
54
+ **Your Write Permissions**. The `writable_sections` list there is the source of truth.
55
+
56
+ If `write_permissions` is absent, fall back to your agent contract in
57
+ `config/context-contracts.json`. Do not invent section names.
58
+
59
+ Writing to a section you do not own will be rejected by the hook.
60
+ `gaia` and `speckit-planner` do not write to project-context — they manage
61
+ gaia-ops internals and specs respectively.
62
+
63
+ ## Progressive Enrichment Targets
64
+
65
+ When a section you own is empty or sparse, prioritize populating it with high-value keys first.
66
+
67
+ | Priority | What to capture | Why |
68
+ |----------|----------------|-----|
69
+ | **P0** | Resource identifiers (names, IDs, paths) | Enables direct targeting in future searches |
70
+ | **P1** | Structural relationships (what connects to what) | Enables cross-agent reasoning |
71
+ | **P2** | Configuration values (versions, replicas, limits) | Enables drift detection |
72
+ | **P3** | Behavioral patterns (conventions, naming schemes) | Enables consistency enforcement |
73
+
74
+ Capture P0 keys on every investigation. P1-P3 when naturally encountered -- do not investigate solely to populate context.
75
+
76
+ For concrete examples, read `examples.md` in this directory.
@@ -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
+ ## devops-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,93 @@
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
+ Project-agnostic conventions for application development. Use values from your injected project-context — never hardcode environment-specific configuration.
12
+
13
+ For config file templates (tsconfig.json, pyproject.toml, jest.config.ts), read `reference.md` in this directory.
14
+
15
+ ## Node.js / TypeScript
16
+
17
+ ### Project Structure
18
+
19
+ ```
20
+ src/
21
+ ├── index.ts # Entry point / public API
22
+ ├── {module}/
23
+ │ ├── index.ts # Module public API
24
+ │ ├── {module}.ts # Implementation
25
+ │ └── {module}.test.ts # Co-located tests
26
+ ├── types/ # Shared type definitions
27
+ └── utils/ # Shared utilities
28
+ ```
29
+
30
+ ### Toolchain
31
+
32
+ | Concern | Tool |
33
+ |---------|------|
34
+ | Type checking | TypeScript (`strict: true`) |
35
+ | Linting | ESLint |
36
+ | Formatting | Prettier |
37
+ | Testing | Jest or Vitest |
38
+ | Pre-commit | Husky + lint-staged |
39
+ | Security | `npm audit` |
40
+
41
+ ### Key Conventions
42
+
43
+ - **Strict TypeScript** — `strict: true`, `noImplicitAny: true`, `strictNullChecks: true`
44
+ - **Tests co-located** — `{file}.test.ts` next to `{file}.ts`, not in a separate `/tests` folder
45
+ - **Absolute imports** — configure `paths` in tsconfig, never `../../../`
46
+ - **No barrel exports** unless intentional — they create circular dependency risks
47
+ - **Lock file committed** — `package-lock.json` or `pnpm-lock.yaml` always in Git
48
+
49
+ ---
50
+
51
+ ## Python
52
+
53
+ ### Project Structure
54
+
55
+ ```
56
+ src/
57
+ └── {package}/
58
+ ├── __init__.py
59
+ ├── {module}.py
60
+ └── tests/
61
+ ├── conftest.py # Shared fixtures at directory level
62
+ └── test_{module}.py
63
+ pyproject.toml # Single source of truth
64
+ ```
65
+
66
+ ### Toolchain
67
+
68
+ | Concern | Tool |
69
+ |---------|------|
70
+ | Packaging + deps | Poetry or pip-tools |
71
+ | Linting + formatting | ruff (replaces black + isort + flake8) |
72
+ | Type checking | mypy |
73
+ | Testing | pytest |
74
+ | Security | `pip-audit` |
75
+
76
+ ### Key Conventions
77
+
78
+ - **src layout** — package under `src/`, not at root — prevents import confusion during development
79
+ - **pyproject.toml only** — no `setup.py`, no `setup.cfg`, no bare `requirements.txt` for packaged code
80
+ - **ruff over black + flake8** — one tool, faster, same behavior
81
+ - **Type hints everywhere** — return types, parameter types; no `Any` without an inline comment explaining why
82
+ - **Fixtures in conftest.py** — shared fixtures at directory level, not duplicated across test files
83
+ - **Lock file committed** — `poetry.lock` always in Git
84
+
85
+ ---
86
+
87
+ ## Key Rules (Both Stacks)
88
+
89
+ 1. **Tests before merge** — no code without tests; CI must enforce
90
+ 2. **Linter is non-negotiable** — CI must fail on lint errors; never disable rules without comment
91
+ 3. **No secrets in code** — environment variables only; `.env.example` documents what's needed
92
+ 4. **Dependency pinning** — lock files always committed
93
+ 5. **Security scanning** — `npm audit` / `pip-audit` before release, not just on CI failures
@@ -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
+ ```
@@ -0,0 +1,66 @@
1
+ ---
2
+ name: execution
3
+ description: Use when the user has approved a T3 operation and execution is about to begin
4
+ metadata:
5
+ user-invocable: false
6
+ type: discipline
7
+ ---
8
+
9
+ # Execution
10
+
11
+ ```
12
+ NO COMPLETION CLAIMS WITHOUT FRESH VERIFICATION EVIDENCE.
13
+ Commands finishing is not success. Verification criteria passing is success.
14
+ ```
15
+
16
+ ## Mental Model
17
+
18
+ T3 operations modify live state. Live state changes can be
19
+ irreversible. You cannot claim COMPLETE until you have verified
20
+ the result — not assumed it. A command can exit 0 and leave the
21
+ system in a broken state.
22
+
23
+ ## Pre-Execution Checklist
24
+
25
+ Before executing ANY approved operation:
26
+
27
+ - [ ] User approved via AskUserQuestion and ElicitationResult hook activated the grant
28
+ - [ ] Capture current state — know what you can roll back to
29
+ - [ ] Plan still valid — re-run dry-run if time has passed
30
+ - [ ] Commands will not prompt for interactive input
31
+
32
+ If ANY check fails → `BLOCKED`.
33
+
34
+ ## Execution Protocol
35
+
36
+ 1. Run each step separately — verify exit code before next
37
+ 2. On failure — classify: recoverable (`IN_PROGRESS`) or not (`BLOCKED`)
38
+ 3. After all steps — run Verification Criteria from the plan
39
+
40
+ ## Error Reporting
41
+
42
+ ```
43
+ Error Type: [Transient | Validation | Permission | State conflict]
44
+ Error Message: [exact output]
45
+ Rollback Status: [what needs rollback if partial]
46
+ ```
47
+
48
+ ## Rollback
49
+
50
+ Know your rollback path BEFORE executing. This varies by domain:
51
+ your domain skill defines the specific rollback strategy.
52
+
53
+ ## Traps
54
+
55
+ | If you're thinking... | The reality is... |
56
+ |---|---|
57
+ | "The plan just ran, no drift possible" | State can change between planning and execution |
58
+ | "Dry-run passed during planning" | Stale dry-run ≠ current state — re-run |
59
+ | "All commands exited 0, I'm done" | Exit 0 ≠ desired state — run verification criteria |
60
+ | "It's only dev, fewer checks needed" | Irreversibility is irreversibility regardless of env |
61
+
62
+ ## Anti-Patterns
63
+
64
+ - COMPLETE without running verification criteria — the most common failure mode
65
+ - Execute on approximate approval — "user approved something like this" is not the canonical token
66
+ - Mutate without knowing rollback path — if you can't undo it, you're not ready to do it
@@ -0,0 +1,47 @@
1
+ ---
2
+ name: fast-queries
3
+ description: Use when diagnosing an issue, checking system health, or validating infrastructure state before starting a task
4
+ metadata:
5
+ user-invocable: false
6
+ type: reference
7
+ ---
8
+
9
+ # Fast-Query Diagnostics
10
+
11
+ **Always run fast-queries FIRST** when investigating issues, checking status, or validating changes.
12
+
13
+ ## Available Scripts
14
+
15
+ Run from project root. Use absolute path if calling from a different directory.
16
+
17
+ | Script | Command | Duration |
18
+ |--------|---------|----------|
19
+ | **All systems** | `bash .claude/tools/fast-queries/run_triage.sh [domain]` | 8-15s |
20
+ | **GitOps/K8s** | `bash .claude/tools/fast-queries/gitops/quicktriage_gitops_operator.sh [ns]` | 2-3s |
21
+ | **Terraform** | `bash .claude/tools/fast-queries/terraform/quicktriage_terraform_architect.sh [dir]` | 3-4s |
22
+ | **AWS** | `bash .claude/tools/fast-queries/cloud/aws/quicktriage_aws_troubleshooter.sh` | 4-5s |
23
+ | **GCP** | `bash .claude/tools/fast-queries/cloud/gcp/quicktriage_gcp_troubleshooter.sh [project]` | 4-5s |
24
+
25
+ **Domains for triage:** `all`, `gitops`, `terraform`, `cloud`, `appservices`
26
+
27
+ ## Exit Codes
28
+
29
+ - `0` OK = All healthy — proceed
30
+ - `1` WARNING = Warnings found — review before proceeding, not necessarily blocking
31
+ - `2` ERROR = Errors found — stop and investigate before continuing
32
+ - `3` SCRIPT_ERROR = Script error (missing tools, permissions) — check setup
33
+
34
+ ## Usage Pattern
35
+
36
+ ```
37
+ 1. User reports issue or asks for status
38
+ 2. Run fast-queries for relevant domain
39
+ 3. Interpret by exit code:
40
+ - 0 OK → proceed with task
41
+ - 1 WARNING → review each warning, decide if blocking before continuing
42
+ - 2 ERROR → report to user, do not proceed, investigate flagged issues
43
+ - 3 SCRIPT_ERROR → check tool availability and permissions
44
+ 4. Deep-dive only on flagged issues (exit 1 or 2)
45
+ ```
46
+
47
+ Use domain-specific scripts when you know the area. Use `all` only for general status checks.