@jaguilar87/gaia 5.0.0-rc1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (609) hide show
  1. package/.claude-plugin/marketplace.json +33 -0
  2. package/.claude-plugin/plugin.json +26 -0
  3. package/ARCHITECTURE.md +335 -0
  4. package/CHANGELOG.md +1212 -0
  5. package/CODE_OF_CONDUCT.md +11 -0
  6. package/CONTRIBUTING.md +146 -0
  7. package/INSTALL.md +436 -0
  8. package/LICENSE +21 -0
  9. package/README.md +222 -0
  10. package/SECURITY.md +47 -0
  11. package/agents/README.md +78 -0
  12. package/agents/cloud-troubleshooter.md +73 -0
  13. package/agents/developer.md +65 -0
  14. package/agents/gaia-operator.md +64 -0
  15. package/agents/gaia-orchestrator.md +237 -0
  16. package/agents/gaia-planner.md +53 -0
  17. package/agents/gaia-system.md +70 -0
  18. package/agents/gitops-operator.md +61 -0
  19. package/agents/terraform-architect.md +63 -0
  20. package/bin/README.md +106 -0
  21. package/bin/cli/__init__.py +1 -0
  22. package/bin/cli/approvals.py +740 -0
  23. package/bin/cli/cleanup.py +562 -0
  24. package/bin/cli/context.py +283 -0
  25. package/bin/cli/doctor.py +628 -0
  26. package/bin/cli/history.py +305 -0
  27. package/bin/cli/memory.py +464 -0
  28. package/bin/cli/metrics.py +1068 -0
  29. package/bin/cli/plans.py +515 -0
  30. package/bin/cli/status.py +302 -0
  31. package/bin/cli/update.py +382 -0
  32. package/bin/gaia +112 -0
  33. package/bin/gaia-cleanup.js +531 -0
  34. package/bin/gaia-doctor.js +635 -0
  35. package/bin/gaia-evidence +126 -0
  36. package/bin/gaia-history.js +251 -0
  37. package/bin/gaia-metrics.js +1278 -0
  38. package/bin/gaia-review.js +269 -0
  39. package/bin/gaia-scan +44 -0
  40. package/bin/gaia-scan.py +589 -0
  41. package/bin/gaia-skills-diagnose.js +929 -0
  42. package/bin/gaia-status.js +278 -0
  43. package/bin/gaia-uninstall.js +111 -0
  44. package/bin/gaia-update.js +816 -0
  45. package/bin/pre-publish-validate.js +610 -0
  46. package/bin/python-detect.js +60 -0
  47. package/commands/README.md +64 -0
  48. package/commands/gaia.md +37 -0
  49. package/commands/scan-project.md +67 -0
  50. package/config/README.md +71 -0
  51. package/config/cloud/aws.json +134 -0
  52. package/config/cloud/gcp.json +139 -0
  53. package/config/context-contracts.json +158 -0
  54. package/config/crons-schema.md +81 -0
  55. package/config/git_standards.json +72 -0
  56. package/config/surface-routing.json +421 -0
  57. package/config/universal-rules.json +102 -0
  58. package/dist/gaia-ops/.claude-plugin/plugin.json +24 -0
  59. package/dist/gaia-ops/README.md +80 -0
  60. package/dist/gaia-ops/agents/cloud-troubleshooter.md +73 -0
  61. package/dist/gaia-ops/agents/developer.md +65 -0
  62. package/dist/gaia-ops/agents/gaia-operator.md +64 -0
  63. package/dist/gaia-ops/agents/gaia-orchestrator.md +237 -0
  64. package/dist/gaia-ops/agents/gaia-planner.md +53 -0
  65. package/dist/gaia-ops/agents/gaia-system.md +70 -0
  66. package/dist/gaia-ops/agents/gitops-operator.md +61 -0
  67. package/dist/gaia-ops/agents/terraform-architect.md +63 -0
  68. package/dist/gaia-ops/commands/gaia.md +37 -0
  69. package/dist/gaia-ops/config/README.md +71 -0
  70. package/dist/gaia-ops/config/cloud/aws.json +134 -0
  71. package/dist/gaia-ops/config/cloud/gcp.json +139 -0
  72. package/dist/gaia-ops/config/context-contracts.json +158 -0
  73. package/dist/gaia-ops/config/crons-schema.md +81 -0
  74. package/dist/gaia-ops/config/git_standards.json +72 -0
  75. package/dist/gaia-ops/config/surface-routing.json +421 -0
  76. package/dist/gaia-ops/config/universal-rules.json +102 -0
  77. package/dist/gaia-ops/hooks/adapters/__init__.py +52 -0
  78. package/dist/gaia-ops/hooks/adapters/base.py +219 -0
  79. package/dist/gaia-ops/hooks/adapters/channel.py +17 -0
  80. package/dist/gaia-ops/hooks/adapters/claude_code.py +1890 -0
  81. package/dist/gaia-ops/hooks/adapters/types.py +194 -0
  82. package/dist/gaia-ops/hooks/adapters/utils.py +25 -0
  83. package/dist/gaia-ops/hooks/hooks.json +163 -0
  84. package/dist/gaia-ops/hooks/modules/__init__.py +15 -0
  85. package/dist/gaia-ops/hooks/modules/agents/__init__.py +29 -0
  86. package/dist/gaia-ops/hooks/modules/agents/contract_validator.py +647 -0
  87. package/dist/gaia-ops/hooks/modules/agents/response_contract.py +496 -0
  88. package/dist/gaia-ops/hooks/modules/agents/skill_injection_verifier.py +120 -0
  89. package/dist/gaia-ops/hooks/modules/agents/state_tracker.py +267 -0
  90. package/dist/gaia-ops/hooks/modules/agents/task_info_builder.py +74 -0
  91. package/dist/gaia-ops/hooks/modules/agents/transcript_analyzer.py +458 -0
  92. package/dist/gaia-ops/hooks/modules/agents/transcript_reader.py +152 -0
  93. package/dist/gaia-ops/hooks/modules/audit/__init__.py +28 -0
  94. package/dist/gaia-ops/hooks/modules/audit/event_detector.py +168 -0
  95. package/dist/gaia-ops/hooks/modules/audit/logger.py +131 -0
  96. package/dist/gaia-ops/hooks/modules/audit/metrics.py +134 -0
  97. package/dist/gaia-ops/hooks/modules/audit/workflow_auditor.py +611 -0
  98. package/dist/gaia-ops/hooks/modules/audit/workflow_recorder.py +296 -0
  99. package/dist/gaia-ops/hooks/modules/context/__init__.py +11 -0
  100. package/dist/gaia-ops/hooks/modules/context/agentic_loop_detector.py +165 -0
  101. package/dist/gaia-ops/hooks/modules/context/anchor_tracker.py +317 -0
  102. package/dist/gaia-ops/hooks/modules/context/compact_context_builder.py +218 -0
  103. package/dist/gaia-ops/hooks/modules/context/context_freshness.py +145 -0
  104. package/dist/gaia-ops/hooks/modules/context/context_injector.py +558 -0
  105. package/dist/gaia-ops/hooks/modules/context/context_writer.py +530 -0
  106. package/dist/gaia-ops/hooks/modules/context/contracts_loader.py +161 -0
  107. package/dist/gaia-ops/hooks/modules/core/__init__.py +40 -0
  108. package/dist/gaia-ops/hooks/modules/core/hook_entry.py +78 -0
  109. package/dist/gaia-ops/hooks/modules/core/paths.py +160 -0
  110. package/dist/gaia-ops/hooks/modules/core/plugin_mode.py +149 -0
  111. package/dist/gaia-ops/hooks/modules/core/plugin_setup.py +577 -0
  112. package/dist/gaia-ops/hooks/modules/core/state.py +179 -0
  113. package/dist/gaia-ops/hooks/modules/core/stdin.py +24 -0
  114. package/dist/gaia-ops/hooks/modules/events/__init__.py +1 -0
  115. package/dist/gaia-ops/hooks/modules/events/event_writer.py +210 -0
  116. package/dist/gaia-ops/hooks/modules/memory/__init__.py +8 -0
  117. package/dist/gaia-ops/hooks/modules/memory/episode_writer.py +216 -0
  118. package/dist/gaia-ops/hooks/modules/orchestrator/__init__.py +1 -0
  119. package/dist/gaia-ops/hooks/modules/orchestrator/delegate_mode.py +122 -0
  120. package/dist/gaia-ops/hooks/modules/scanning/__init__.py +8 -0
  121. package/dist/gaia-ops/hooks/modules/scanning/scan_trigger.py +84 -0
  122. package/dist/gaia-ops/hooks/modules/security/__init__.py +120 -0
  123. package/dist/gaia-ops/hooks/modules/security/approval_cleanup.py +87 -0
  124. package/dist/gaia-ops/hooks/modules/security/approval_constants.py +23 -0
  125. package/dist/gaia-ops/hooks/modules/security/approval_grants.py +1638 -0
  126. package/dist/gaia-ops/hooks/modules/security/approval_messages.py +71 -0
  127. package/dist/gaia-ops/hooks/modules/security/approval_scopes.py +222 -0
  128. package/dist/gaia-ops/hooks/modules/security/blocked_commands.py +595 -0
  129. package/dist/gaia-ops/hooks/modules/security/blocked_message_formatter.py +87 -0
  130. package/dist/gaia-ops/hooks/modules/security/command_semantics.py +181 -0
  131. package/dist/gaia-ops/hooks/modules/security/composition_rules.py +547 -0
  132. package/dist/gaia-ops/hooks/modules/security/flag_classifiers.py +873 -0
  133. package/dist/gaia-ops/hooks/modules/security/gitops_validator.py +179 -0
  134. package/dist/gaia-ops/hooks/modules/security/mutative_verbs.py +1131 -0
  135. package/dist/gaia-ops/hooks/modules/security/network_hosts.py +481 -0
  136. package/dist/gaia-ops/hooks/modules/security/prompt_validator.py +40 -0
  137. package/dist/gaia-ops/hooks/modules/security/shell_unwrapper.py +165 -0
  138. package/dist/gaia-ops/hooks/modules/security/tiers.py +196 -0
  139. package/dist/gaia-ops/hooks/modules/session/__init__.py +10 -0
  140. package/dist/gaia-ops/hooks/modules/session/pending_scanner.py +174 -0
  141. package/dist/gaia-ops/hooks/modules/session/session_context_writer.py +100 -0
  142. package/dist/gaia-ops/hooks/modules/session/session_event_injector.py +160 -0
  143. package/dist/gaia-ops/hooks/modules/session/session_manager.py +31 -0
  144. package/dist/gaia-ops/hooks/modules/session/session_registry.py +232 -0
  145. package/dist/gaia-ops/hooks/modules/tools/__init__.py +29 -0
  146. package/dist/gaia-ops/hooks/modules/tools/bash_validator.py +1008 -0
  147. package/dist/gaia-ops/hooks/modules/tools/cloud_pipe_validator.py +231 -0
  148. package/dist/gaia-ops/hooks/modules/tools/hook_response.py +55 -0
  149. package/dist/gaia-ops/hooks/modules/tools/shell_parser.py +227 -0
  150. package/dist/gaia-ops/hooks/modules/tools/stage_decomposer.py +315 -0
  151. package/dist/gaia-ops/hooks/modules/tools/task_validator.py +294 -0
  152. package/dist/gaia-ops/hooks/modules/validation/__init__.py +23 -0
  153. package/dist/gaia-ops/hooks/modules/validation/commit_validator.py +380 -0
  154. package/dist/gaia-ops/hooks/post_compact.py +43 -0
  155. package/dist/gaia-ops/hooks/post_tool_use.py +54 -0
  156. package/dist/gaia-ops/hooks/pre_compact.py +60 -0
  157. package/dist/gaia-ops/hooks/pre_tool_use.py +413 -0
  158. package/dist/gaia-ops/hooks/session_start.py +81 -0
  159. package/dist/gaia-ops/hooks/stop_hook.py +82 -0
  160. package/dist/gaia-ops/hooks/subagent_start.py +71 -0
  161. package/dist/gaia-ops/hooks/subagent_stop.py +295 -0
  162. package/dist/gaia-ops/hooks/task_completed.py +70 -0
  163. package/dist/gaia-ops/hooks/user_prompt_submit.py +246 -0
  164. package/dist/gaia-ops/settings.json +72 -0
  165. package/dist/gaia-ops/skills/README.md +154 -0
  166. package/dist/gaia-ops/skills/agent-protocol/SKILL.md +93 -0
  167. package/dist/gaia-ops/skills/agent-protocol/examples.md +223 -0
  168. package/dist/gaia-ops/skills/agent-response/SKILL.md +69 -0
  169. package/dist/gaia-ops/skills/agentic-loop/SKILL.md +80 -0
  170. package/dist/gaia-ops/skills/agentic-loop/reference.md +378 -0
  171. package/dist/gaia-ops/skills/blog-writing/SKILL.md +98 -0
  172. package/dist/gaia-ops/skills/blog-writing/reference.md +130 -0
  173. package/dist/gaia-ops/skills/brief-spec/SKILL.md +182 -0
  174. package/dist/gaia-ops/skills/command-execution/SKILL.md +64 -0
  175. package/dist/gaia-ops/skills/command-execution/reference.md +83 -0
  176. package/dist/gaia-ops/skills/context-updater/SKILL.md +87 -0
  177. package/dist/gaia-ops/skills/context-updater/examples.md +71 -0
  178. package/dist/gaia-ops/skills/developer-patterns/SKILL.md +50 -0
  179. package/dist/gaia-ops/skills/developer-patterns/reference.md +112 -0
  180. package/dist/gaia-ops/skills/execution/SKILL.md +99 -0
  181. package/dist/gaia-ops/skills/fast-queries/SKILL.md +43 -0
  182. package/dist/gaia-ops/skills/gaia-compact/SKILL.md +74 -0
  183. package/dist/gaia-ops/skills/gaia-patterns/SKILL.md +108 -0
  184. package/dist/gaia-ops/skills/gaia-patterns/reference.md +395 -0
  185. package/dist/gaia-ops/skills/gaia-planner/SKILL.md +37 -0
  186. package/dist/gaia-ops/skills/gaia-planner/reference.md +107 -0
  187. package/dist/gaia-ops/skills/gaia-release/SKILL.md +82 -0
  188. package/dist/gaia-ops/skills/gaia-release/reference.md +102 -0
  189. package/dist/gaia-ops/skills/gaia-self-check/SKILL.md +114 -0
  190. package/dist/gaia-ops/skills/gaia-self-check/reference.md +453 -0
  191. package/dist/gaia-ops/skills/gaia-verify/SKILL.md +77 -0
  192. package/dist/gaia-ops/skills/gaia-verify/reference.md +80 -0
  193. package/dist/gaia-ops/skills/git-conventions/SKILL.md +47 -0
  194. package/dist/gaia-ops/skills/gitops-patterns/SKILL.md +60 -0
  195. package/dist/gaia-ops/skills/gitops-patterns/reference.md +183 -0
  196. package/dist/gaia-ops/skills/gmail-policy/SKILL.md +200 -0
  197. package/dist/gaia-ops/skills/gmail-policy/reference.md +150 -0
  198. package/dist/gaia-ops/skills/gmail-triage/SKILL.md +100 -0
  199. package/dist/gaia-ops/skills/gws-setup/SKILL.md +99 -0
  200. package/dist/gaia-ops/skills/gws-setup/reference.md +73 -0
  201. package/dist/gaia-ops/skills/investigation/SKILL.md +100 -0
  202. package/dist/gaia-ops/skills/memory-curation/SKILL.md +83 -0
  203. package/dist/gaia-ops/skills/memory-search/SKILL.md +88 -0
  204. package/dist/gaia-ops/skills/orchestrator-approval/SKILL.md +160 -0
  205. package/dist/gaia-ops/skills/orchestrator-approval/reference.md +174 -0
  206. package/dist/gaia-ops/skills/pending-approvals/SKILL.md +72 -0
  207. package/dist/gaia-ops/skills/pending-approvals/reference.md +214 -0
  208. package/dist/gaia-ops/skills/readme-writing/SKILL.md +71 -0
  209. package/dist/gaia-ops/skills/readme-writing/reference.md +188 -0
  210. package/dist/gaia-ops/skills/reference.md +135 -0
  211. package/dist/gaia-ops/skills/request-approval/SKILL.md +140 -0
  212. package/dist/gaia-ops/skills/request-approval/examples.md +140 -0
  213. package/dist/gaia-ops/skills/request-approval/reference.md +57 -0
  214. package/dist/gaia-ops/skills/schedule-task/SKILL.md +64 -0
  215. package/dist/gaia-ops/skills/schedule-task/reference.md +233 -0
  216. package/dist/gaia-ops/skills/security-tiers/SKILL.md +141 -0
  217. package/dist/gaia-ops/skills/security-tiers/destructive-commands-reference.md +623 -0
  218. package/dist/gaia-ops/skills/security-tiers/reference.md +39 -0
  219. package/dist/gaia-ops/skills/skill-creation/SKILL.md +92 -0
  220. package/dist/gaia-ops/skills/skill-creation/reference.md +29 -0
  221. package/dist/gaia-ops/skills/terraform-patterns/SKILL.md +89 -0
  222. package/dist/gaia-ops/skills/terraform-patterns/reference.md +93 -0
  223. package/dist/gaia-ops/tools/__init__.py +9 -0
  224. package/dist/gaia-ops/tools/agentic-loop/decide-status.py +210 -0
  225. package/dist/gaia-ops/tools/agentic-loop/parse-metric.py +106 -0
  226. package/dist/gaia-ops/tools/agentic-loop/record-iteration.py +221 -0
  227. package/dist/gaia-ops/tools/context/README.md +132 -0
  228. package/dist/gaia-ops/tools/context/__init__.py +42 -0
  229. package/dist/gaia-ops/tools/context/_paths.py +20 -0
  230. package/dist/gaia-ops/tools/context/context_provider.py +721 -0
  231. package/dist/gaia-ops/tools/context/context_section_reader.py +342 -0
  232. package/dist/gaia-ops/tools/context/deep_merge.py +159 -0
  233. package/dist/gaia-ops/tools/context/pending_updates.py +760 -0
  234. package/dist/gaia-ops/tools/context/surface_router.py +278 -0
  235. package/dist/gaia-ops/tools/fast-queries/README.md +65 -0
  236. package/dist/gaia-ops/tools/fast-queries/__init__.py +30 -0
  237. package/dist/gaia-ops/tools/fast-queries/appservices/quicktriage_devops_developer.sh +75 -0
  238. package/dist/gaia-ops/tools/fast-queries/cloud/aws/quicktriage_aws_troubleshooter.sh +32 -0
  239. package/dist/gaia-ops/tools/fast-queries/cloud/gcp/quicktriage_gcp_troubleshooter.sh +88 -0
  240. package/dist/gaia-ops/tools/fast-queries/gitops/quicktriage_gitops_operator.sh +48 -0
  241. package/dist/gaia-ops/tools/fast-queries/run_triage.sh +59 -0
  242. package/dist/gaia-ops/tools/fast-queries/terraform/quicktriage_terraform_architect.sh +80 -0
  243. package/dist/gaia-ops/tools/gaia_simulator/__init__.py +33 -0
  244. package/dist/gaia-ops/tools/gaia_simulator/cli.py +354 -0
  245. package/dist/gaia-ops/tools/gaia_simulator/extractor.py +457 -0
  246. package/dist/gaia-ops/tools/gaia_simulator/reporter.py +258 -0
  247. package/dist/gaia-ops/tools/gaia_simulator/routing_simulator.py +334 -0
  248. package/dist/gaia-ops/tools/gaia_simulator/runner.py +539 -0
  249. package/dist/gaia-ops/tools/gaia_simulator/skills_mapper.py +264 -0
  250. package/dist/gaia-ops/tools/memory/README.md +0 -0
  251. package/dist/gaia-ops/tools/memory/__init__.py +20 -0
  252. package/dist/gaia-ops/tools/memory/backfill_fts5.py +107 -0
  253. package/dist/gaia-ops/tools/memory/conflict_detector.py +295 -0
  254. package/dist/gaia-ops/tools/memory/episodic.py +1210 -0
  255. package/dist/gaia-ops/tools/memory/git_invalidator.py +262 -0
  256. package/dist/gaia-ops/tools/memory/paths.py +102 -0
  257. package/dist/gaia-ops/tools/memory/scoring.py +193 -0
  258. package/dist/gaia-ops/tools/memory/search_store.py +360 -0
  259. package/dist/gaia-ops/tools/persist_transcript_analysis.py +85 -0
  260. package/dist/gaia-ops/tools/review/__init__.py +1 -0
  261. package/dist/gaia-ops/tools/review/review_engine.py +157 -0
  262. package/dist/gaia-ops/tools/scan/__init__.py +35 -0
  263. package/dist/gaia-ops/tools/scan/config.py +247 -0
  264. package/dist/gaia-ops/tools/scan/merge.py +212 -0
  265. package/dist/gaia-ops/tools/scan/orchestrator.py +549 -0
  266. package/dist/gaia-ops/tools/scan/registry.py +127 -0
  267. package/dist/gaia-ops/tools/scan/scanners/__init__.py +18 -0
  268. package/dist/gaia-ops/tools/scan/scanners/base.py +137 -0
  269. package/dist/gaia-ops/tools/scan/scanners/environment.py +349 -0
  270. package/dist/gaia-ops/tools/scan/scanners/git.py +570 -0
  271. package/dist/gaia-ops/tools/scan/scanners/infrastructure.py +875 -0
  272. package/dist/gaia-ops/tools/scan/scanners/orchestration.py +600 -0
  273. package/dist/gaia-ops/tools/scan/scanners/stack.py +1085 -0
  274. package/dist/gaia-ops/tools/scan/scanners/tools.py +260 -0
  275. package/dist/gaia-ops/tools/scan/setup.py +686 -0
  276. package/dist/gaia-ops/tools/scan/tests/__init__.py +1 -0
  277. package/dist/gaia-ops/tools/scan/tests/conftest.py +796 -0
  278. package/dist/gaia-ops/tools/scan/tests/test_environment.py +323 -0
  279. package/dist/gaia-ops/tools/scan/tests/test_git.py +419 -0
  280. package/dist/gaia-ops/tools/scan/tests/test_infrastructure.py +382 -0
  281. package/dist/gaia-ops/tools/scan/tests/test_integration.py +920 -0
  282. package/dist/gaia-ops/tools/scan/tests/test_merge.py +269 -0
  283. package/dist/gaia-ops/tools/scan/tests/test_orchestration.py +304 -0
  284. package/dist/gaia-ops/tools/scan/tests/test_stack.py +604 -0
  285. package/dist/gaia-ops/tools/scan/tests/test_tools.py +349 -0
  286. package/dist/gaia-ops/tools/scan/ui.py +624 -0
  287. package/dist/gaia-ops/tools/scan/verify.py +270 -0
  288. package/dist/gaia-ops/tools/scan/walk.py +118 -0
  289. package/dist/gaia-ops/tools/scan/workspace.py +85 -0
  290. package/dist/gaia-ops/tools/validation/README.md +244 -0
  291. package/dist/gaia-ops/tools/validation/__init__.py +17 -0
  292. package/dist/gaia-ops/tools/validation/approval_gate.py +321 -0
  293. package/dist/gaia-ops/tools/validation/validate_skills.py +189 -0
  294. package/dist/gaia-security/.claude-plugin/plugin.json +24 -0
  295. package/dist/gaia-security/README.md +90 -0
  296. package/dist/gaia-security/config/universal-rules.json +102 -0
  297. package/dist/gaia-security/hooks/adapters/__init__.py +52 -0
  298. package/dist/gaia-security/hooks/adapters/base.py +219 -0
  299. package/dist/gaia-security/hooks/adapters/channel.py +17 -0
  300. package/dist/gaia-security/hooks/adapters/claude_code.py +1890 -0
  301. package/dist/gaia-security/hooks/adapters/types.py +194 -0
  302. package/dist/gaia-security/hooks/adapters/utils.py +25 -0
  303. package/dist/gaia-security/hooks/hooks.json +84 -0
  304. package/dist/gaia-security/hooks/modules/__init__.py +15 -0
  305. package/dist/gaia-security/hooks/modules/agents/__init__.py +29 -0
  306. package/dist/gaia-security/hooks/modules/agents/contract_validator.py +647 -0
  307. package/dist/gaia-security/hooks/modules/agents/response_contract.py +496 -0
  308. package/dist/gaia-security/hooks/modules/agents/skill_injection_verifier.py +120 -0
  309. package/dist/gaia-security/hooks/modules/agents/state_tracker.py +267 -0
  310. package/dist/gaia-security/hooks/modules/agents/task_info_builder.py +74 -0
  311. package/dist/gaia-security/hooks/modules/agents/transcript_analyzer.py +458 -0
  312. package/dist/gaia-security/hooks/modules/agents/transcript_reader.py +152 -0
  313. package/dist/gaia-security/hooks/modules/audit/__init__.py +28 -0
  314. package/dist/gaia-security/hooks/modules/audit/event_detector.py +168 -0
  315. package/dist/gaia-security/hooks/modules/audit/logger.py +131 -0
  316. package/dist/gaia-security/hooks/modules/audit/metrics.py +134 -0
  317. package/dist/gaia-security/hooks/modules/audit/workflow_auditor.py +611 -0
  318. package/dist/gaia-security/hooks/modules/audit/workflow_recorder.py +296 -0
  319. package/dist/gaia-security/hooks/modules/context/__init__.py +11 -0
  320. package/dist/gaia-security/hooks/modules/context/agentic_loop_detector.py +165 -0
  321. package/dist/gaia-security/hooks/modules/context/anchor_tracker.py +317 -0
  322. package/dist/gaia-security/hooks/modules/context/compact_context_builder.py +218 -0
  323. package/dist/gaia-security/hooks/modules/context/context_freshness.py +145 -0
  324. package/dist/gaia-security/hooks/modules/context/context_injector.py +558 -0
  325. package/dist/gaia-security/hooks/modules/context/context_writer.py +530 -0
  326. package/dist/gaia-security/hooks/modules/context/contracts_loader.py +161 -0
  327. package/dist/gaia-security/hooks/modules/core/__init__.py +40 -0
  328. package/dist/gaia-security/hooks/modules/core/hook_entry.py +78 -0
  329. package/dist/gaia-security/hooks/modules/core/paths.py +160 -0
  330. package/dist/gaia-security/hooks/modules/core/plugin_mode.py +149 -0
  331. package/dist/gaia-security/hooks/modules/core/plugin_setup.py +577 -0
  332. package/dist/gaia-security/hooks/modules/core/state.py +179 -0
  333. package/dist/gaia-security/hooks/modules/core/stdin.py +24 -0
  334. package/dist/gaia-security/hooks/modules/events/__init__.py +1 -0
  335. package/dist/gaia-security/hooks/modules/events/event_writer.py +210 -0
  336. package/dist/gaia-security/hooks/modules/memory/__init__.py +8 -0
  337. package/dist/gaia-security/hooks/modules/memory/episode_writer.py +216 -0
  338. package/dist/gaia-security/hooks/modules/orchestrator/__init__.py +1 -0
  339. package/dist/gaia-security/hooks/modules/orchestrator/delegate_mode.py +122 -0
  340. package/dist/gaia-security/hooks/modules/scanning/__init__.py +8 -0
  341. package/dist/gaia-security/hooks/modules/scanning/scan_trigger.py +84 -0
  342. package/dist/gaia-security/hooks/modules/security/__init__.py +120 -0
  343. package/dist/gaia-security/hooks/modules/security/approval_cleanup.py +87 -0
  344. package/dist/gaia-security/hooks/modules/security/approval_constants.py +23 -0
  345. package/dist/gaia-security/hooks/modules/security/approval_grants.py +1638 -0
  346. package/dist/gaia-security/hooks/modules/security/approval_messages.py +71 -0
  347. package/dist/gaia-security/hooks/modules/security/approval_scopes.py +222 -0
  348. package/dist/gaia-security/hooks/modules/security/blocked_commands.py +595 -0
  349. package/dist/gaia-security/hooks/modules/security/blocked_message_formatter.py +87 -0
  350. package/dist/gaia-security/hooks/modules/security/command_semantics.py +181 -0
  351. package/dist/gaia-security/hooks/modules/security/composition_rules.py +547 -0
  352. package/dist/gaia-security/hooks/modules/security/flag_classifiers.py +873 -0
  353. package/dist/gaia-security/hooks/modules/security/gitops_validator.py +179 -0
  354. package/dist/gaia-security/hooks/modules/security/mutative_verbs.py +1131 -0
  355. package/dist/gaia-security/hooks/modules/security/network_hosts.py +481 -0
  356. package/dist/gaia-security/hooks/modules/security/prompt_validator.py +40 -0
  357. package/dist/gaia-security/hooks/modules/security/shell_unwrapper.py +165 -0
  358. package/dist/gaia-security/hooks/modules/security/tiers.py +196 -0
  359. package/dist/gaia-security/hooks/modules/session/__init__.py +10 -0
  360. package/dist/gaia-security/hooks/modules/session/pending_scanner.py +174 -0
  361. package/dist/gaia-security/hooks/modules/session/session_context_writer.py +100 -0
  362. package/dist/gaia-security/hooks/modules/session/session_event_injector.py +160 -0
  363. package/dist/gaia-security/hooks/modules/session/session_manager.py +31 -0
  364. package/dist/gaia-security/hooks/modules/session/session_registry.py +232 -0
  365. package/dist/gaia-security/hooks/modules/tools/__init__.py +29 -0
  366. package/dist/gaia-security/hooks/modules/tools/bash_validator.py +1008 -0
  367. package/dist/gaia-security/hooks/modules/tools/cloud_pipe_validator.py +231 -0
  368. package/dist/gaia-security/hooks/modules/tools/hook_response.py +55 -0
  369. package/dist/gaia-security/hooks/modules/tools/shell_parser.py +227 -0
  370. package/dist/gaia-security/hooks/modules/tools/stage_decomposer.py +315 -0
  371. package/dist/gaia-security/hooks/modules/tools/task_validator.py +294 -0
  372. package/dist/gaia-security/hooks/modules/validation/__init__.py +23 -0
  373. package/dist/gaia-security/hooks/modules/validation/commit_validator.py +380 -0
  374. package/dist/gaia-security/hooks/post_tool_use.py +54 -0
  375. package/dist/gaia-security/hooks/pre_tool_use.py +413 -0
  376. package/dist/gaia-security/hooks/session_start.py +81 -0
  377. package/dist/gaia-security/hooks/stop_hook.py +82 -0
  378. package/dist/gaia-security/hooks/user_prompt_submit.py +246 -0
  379. package/dist/gaia-security/settings.json +58 -0
  380. package/git-hooks/commit-msg +41 -0
  381. package/hooks/README.md +100 -0
  382. package/hooks/adapters/__init__.py +52 -0
  383. package/hooks/adapters/base.py +219 -0
  384. package/hooks/adapters/channel.py +17 -0
  385. package/hooks/adapters/claude_code.py +1890 -0
  386. package/hooks/adapters/types.py +194 -0
  387. package/hooks/adapters/utils.py +25 -0
  388. package/hooks/elicitation_result.py +179 -0
  389. package/hooks/hooks.json +84 -0
  390. package/hooks/modules/README.md +189 -0
  391. package/hooks/modules/__init__.py +15 -0
  392. package/hooks/modules/agents/__init__.py +29 -0
  393. package/hooks/modules/agents/contract_validator.py +647 -0
  394. package/hooks/modules/agents/response_contract.py +496 -0
  395. package/hooks/modules/agents/skill_injection_verifier.py +120 -0
  396. package/hooks/modules/agents/state_tracker.py +267 -0
  397. package/hooks/modules/agents/task_info_builder.py +74 -0
  398. package/hooks/modules/agents/transcript_analyzer.py +458 -0
  399. package/hooks/modules/agents/transcript_reader.py +152 -0
  400. package/hooks/modules/audit/__init__.py +28 -0
  401. package/hooks/modules/audit/event_detector.py +168 -0
  402. package/hooks/modules/audit/logger.py +131 -0
  403. package/hooks/modules/audit/metrics.py +134 -0
  404. package/hooks/modules/audit/workflow_auditor.py +611 -0
  405. package/hooks/modules/audit/workflow_recorder.py +296 -0
  406. package/hooks/modules/context/__init__.py +11 -0
  407. package/hooks/modules/context/agentic_loop_detector.py +165 -0
  408. package/hooks/modules/context/anchor_tracker.py +317 -0
  409. package/hooks/modules/context/compact_context_builder.py +218 -0
  410. package/hooks/modules/context/context_freshness.py +145 -0
  411. package/hooks/modules/context/context_injector.py +558 -0
  412. package/hooks/modules/context/context_writer.py +530 -0
  413. package/hooks/modules/context/contracts_loader.py +161 -0
  414. package/hooks/modules/core/__init__.py +40 -0
  415. package/hooks/modules/core/hook_entry.py +78 -0
  416. package/hooks/modules/core/paths.py +160 -0
  417. package/hooks/modules/core/plugin_mode.py +149 -0
  418. package/hooks/modules/core/plugin_setup.py +577 -0
  419. package/hooks/modules/core/state.py +179 -0
  420. package/hooks/modules/core/stdin.py +24 -0
  421. package/hooks/modules/events/__init__.py +1 -0
  422. package/hooks/modules/events/event_writer.py +210 -0
  423. package/hooks/modules/evidence/__init__.py +34 -0
  424. package/hooks/modules/evidence/assertions.py +137 -0
  425. package/hooks/modules/evidence/index_writer.py +57 -0
  426. package/hooks/modules/evidence/loader.py +126 -0
  427. package/hooks/modules/evidence/runner.py +241 -0
  428. package/hooks/modules/memory/__init__.py +8 -0
  429. package/hooks/modules/memory/episode_writer.py +216 -0
  430. package/hooks/modules/orchestrator/__init__.py +1 -0
  431. package/hooks/modules/orchestrator/delegate_mode.py +122 -0
  432. package/hooks/modules/scanning/__init__.py +8 -0
  433. package/hooks/modules/scanning/scan_trigger.py +84 -0
  434. package/hooks/modules/security/__init__.py +120 -0
  435. package/hooks/modules/security/approval_cleanup.py +87 -0
  436. package/hooks/modules/security/approval_constants.py +23 -0
  437. package/hooks/modules/security/approval_grants.py +1638 -0
  438. package/hooks/modules/security/approval_messages.py +71 -0
  439. package/hooks/modules/security/approval_scopes.py +222 -0
  440. package/hooks/modules/security/blocked_commands.py +595 -0
  441. package/hooks/modules/security/blocked_message_formatter.py +87 -0
  442. package/hooks/modules/security/command_semantics.py +181 -0
  443. package/hooks/modules/security/composition_rules.py +547 -0
  444. package/hooks/modules/security/flag_classifiers.py +873 -0
  445. package/hooks/modules/security/gitops_validator.py +179 -0
  446. package/hooks/modules/security/mutative_verbs.py +1131 -0
  447. package/hooks/modules/security/network_hosts.py +481 -0
  448. package/hooks/modules/security/prompt_validator.py +40 -0
  449. package/hooks/modules/security/shell_unwrapper.py +165 -0
  450. package/hooks/modules/security/tiers.py +196 -0
  451. package/hooks/modules/session/__init__.py +10 -0
  452. package/hooks/modules/session/pending_scanner.py +174 -0
  453. package/hooks/modules/session/session_context_writer.py +100 -0
  454. package/hooks/modules/session/session_event_injector.py +160 -0
  455. package/hooks/modules/session/session_manager.py +31 -0
  456. package/hooks/modules/session/session_registry.py +232 -0
  457. package/hooks/modules/tools/__init__.py +29 -0
  458. package/hooks/modules/tools/bash_validator.py +1008 -0
  459. package/hooks/modules/tools/cloud_pipe_validator.py +231 -0
  460. package/hooks/modules/tools/hook_response.py +55 -0
  461. package/hooks/modules/tools/shell_parser.py +227 -0
  462. package/hooks/modules/tools/stage_decomposer.py +315 -0
  463. package/hooks/modules/tools/task_validator.py +294 -0
  464. package/hooks/modules/validation/__init__.py +23 -0
  465. package/hooks/modules/validation/commit_validator.py +380 -0
  466. package/hooks/post_compact.py +43 -0
  467. package/hooks/post_tool_use.py +54 -0
  468. package/hooks/pre_compact.py +60 -0
  469. package/hooks/pre_tool_use.py +413 -0
  470. package/hooks/session_start.py +81 -0
  471. package/hooks/stop_hook.py +82 -0
  472. package/hooks/subagent_start.py +71 -0
  473. package/hooks/subagent_stop.py +295 -0
  474. package/hooks/task_completed.py +70 -0
  475. package/hooks/user_prompt_submit.py +246 -0
  476. package/index.js +83 -0
  477. package/package.json +99 -0
  478. package/pyproject.toml +32 -0
  479. package/skills/README.md +154 -0
  480. package/skills/agent-protocol/SKILL.md +93 -0
  481. package/skills/agent-protocol/examples.md +223 -0
  482. package/skills/agent-response/SKILL.md +69 -0
  483. package/skills/agentic-loop/SKILL.md +80 -0
  484. package/skills/agentic-loop/reference.md +378 -0
  485. package/skills/blog-writing/SKILL.md +98 -0
  486. package/skills/blog-writing/reference.md +130 -0
  487. package/skills/brief-spec/SKILL.md +182 -0
  488. package/skills/command-execution/SKILL.md +64 -0
  489. package/skills/command-execution/reference.md +83 -0
  490. package/skills/context-updater/SKILL.md +87 -0
  491. package/skills/context-updater/examples.md +71 -0
  492. package/skills/developer-patterns/SKILL.md +50 -0
  493. package/skills/developer-patterns/reference.md +112 -0
  494. package/skills/execution/SKILL.md +99 -0
  495. package/skills/fast-queries/SKILL.md +43 -0
  496. package/skills/gaia-compact/SKILL.md +74 -0
  497. package/skills/gaia-patterns/SKILL.md +108 -0
  498. package/skills/gaia-patterns/reference.md +395 -0
  499. package/skills/gaia-planner/SKILL.md +37 -0
  500. package/skills/gaia-planner/reference.md +107 -0
  501. package/skills/gaia-release/SKILL.md +82 -0
  502. package/skills/gaia-release/reference.md +102 -0
  503. package/skills/gaia-self-check/SKILL.md +114 -0
  504. package/skills/gaia-self-check/reference.md +453 -0
  505. package/skills/gaia-verify/SKILL.md +77 -0
  506. package/skills/gaia-verify/reference.md +80 -0
  507. package/skills/git-conventions/SKILL.md +47 -0
  508. package/skills/gitops-patterns/SKILL.md +60 -0
  509. package/skills/gitops-patterns/reference.md +183 -0
  510. package/skills/gmail-policy/SKILL.md +200 -0
  511. package/skills/gmail-policy/reference.md +150 -0
  512. package/skills/gmail-triage/SKILL.md +100 -0
  513. package/skills/gws-setup/SKILL.md +99 -0
  514. package/skills/gws-setup/reference.md +73 -0
  515. package/skills/investigation/SKILL.md +100 -0
  516. package/skills/memory-curation/SKILL.md +83 -0
  517. package/skills/memory-search/SKILL.md +88 -0
  518. package/skills/orchestrator-approval/SKILL.md +160 -0
  519. package/skills/orchestrator-approval/reference.md +174 -0
  520. package/skills/pending-approvals/SKILL.md +72 -0
  521. package/skills/pending-approvals/reference.md +214 -0
  522. package/skills/readme-writing/SKILL.md +71 -0
  523. package/skills/readme-writing/reference.md +188 -0
  524. package/skills/reference.md +135 -0
  525. package/skills/request-approval/SKILL.md +140 -0
  526. package/skills/request-approval/examples.md +140 -0
  527. package/skills/request-approval/reference.md +57 -0
  528. package/skills/schedule-task/SKILL.md +64 -0
  529. package/skills/schedule-task/reference.md +233 -0
  530. package/skills/security-tiers/SKILL.md +141 -0
  531. package/skills/security-tiers/destructive-commands-reference.md +623 -0
  532. package/skills/security-tiers/reference.md +39 -0
  533. package/skills/skill-creation/SKILL.md +92 -0
  534. package/skills/skill-creation/reference.md +29 -0
  535. package/skills/terraform-patterns/SKILL.md +89 -0
  536. package/skills/terraform-patterns/reference.md +93 -0
  537. package/templates/README.md +69 -0
  538. package/templates/managed-settings.template.json +43 -0
  539. package/tools/__init__.py +9 -0
  540. package/tools/agentic-loop/decide-status.py +210 -0
  541. package/tools/agentic-loop/parse-metric.py +106 -0
  542. package/tools/agentic-loop/record-iteration.py +221 -0
  543. package/tools/context/README.md +132 -0
  544. package/tools/context/__init__.py +42 -0
  545. package/tools/context/_paths.py +20 -0
  546. package/tools/context/context_provider.py +721 -0
  547. package/tools/context/context_section_reader.py +342 -0
  548. package/tools/context/deep_merge.py +159 -0
  549. package/tools/context/pending_updates.py +760 -0
  550. package/tools/context/surface_router.py +278 -0
  551. package/tools/fast-queries/README.md +65 -0
  552. package/tools/fast-queries/__init__.py +30 -0
  553. package/tools/fast-queries/appservices/quicktriage_devops_developer.sh +75 -0
  554. package/tools/fast-queries/cloud/aws/quicktriage_aws_troubleshooter.sh +32 -0
  555. package/tools/fast-queries/cloud/gcp/quicktriage_gcp_troubleshooter.sh +88 -0
  556. package/tools/fast-queries/gitops/quicktriage_gitops_operator.sh +48 -0
  557. package/tools/fast-queries/run_triage.sh +59 -0
  558. package/tools/fast-queries/terraform/quicktriage_terraform_architect.sh +80 -0
  559. package/tools/gaia_simulator/__init__.py +33 -0
  560. package/tools/gaia_simulator/cli.py +354 -0
  561. package/tools/gaia_simulator/extractor.py +457 -0
  562. package/tools/gaia_simulator/reporter.py +258 -0
  563. package/tools/gaia_simulator/routing_simulator.py +334 -0
  564. package/tools/gaia_simulator/runner.py +539 -0
  565. package/tools/gaia_simulator/skills_mapper.py +264 -0
  566. package/tools/memory/README.md +0 -0
  567. package/tools/memory/__init__.py +20 -0
  568. package/tools/memory/backfill_fts5.py +107 -0
  569. package/tools/memory/conflict_detector.py +295 -0
  570. package/tools/memory/episodic.py +1210 -0
  571. package/tools/memory/git_invalidator.py +262 -0
  572. package/tools/memory/paths.py +102 -0
  573. package/tools/memory/scoring.py +193 -0
  574. package/tools/memory/search_store.py +360 -0
  575. package/tools/persist_transcript_analysis.py +85 -0
  576. package/tools/review/__init__.py +1 -0
  577. package/tools/review/review_engine.py +157 -0
  578. package/tools/scan/__init__.py +35 -0
  579. package/tools/scan/config.py +247 -0
  580. package/tools/scan/merge.py +212 -0
  581. package/tools/scan/orchestrator.py +549 -0
  582. package/tools/scan/registry.py +127 -0
  583. package/tools/scan/scanners/__init__.py +18 -0
  584. package/tools/scan/scanners/base.py +137 -0
  585. package/tools/scan/scanners/environment.py +349 -0
  586. package/tools/scan/scanners/git.py +570 -0
  587. package/tools/scan/scanners/infrastructure.py +875 -0
  588. package/tools/scan/scanners/orchestration.py +600 -0
  589. package/tools/scan/scanners/stack.py +1085 -0
  590. package/tools/scan/scanners/tools.py +260 -0
  591. package/tools/scan/setup.py +686 -0
  592. package/tools/scan/tests/__init__.py +1 -0
  593. package/tools/scan/tests/conftest.py +796 -0
  594. package/tools/scan/tests/test_environment.py +323 -0
  595. package/tools/scan/tests/test_git.py +419 -0
  596. package/tools/scan/tests/test_infrastructure.py +382 -0
  597. package/tools/scan/tests/test_integration.py +920 -0
  598. package/tools/scan/tests/test_merge.py +269 -0
  599. package/tools/scan/tests/test_orchestration.py +304 -0
  600. package/tools/scan/tests/test_stack.py +604 -0
  601. package/tools/scan/tests/test_tools.py +349 -0
  602. package/tools/scan/ui.py +624 -0
  603. package/tools/scan/verify.py +270 -0
  604. package/tools/scan/walk.py +118 -0
  605. package/tools/scan/workspace.py +85 -0
  606. package/tools/validation/README.md +244 -0
  607. package/tools/validation/__init__.py +17 -0
  608. package/tools/validation/approval_gate.py +321 -0
  609. package/tools/validation/validate_skills.py +189 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,1212 @@
1
+ # Changelog: CLAUDE.md
2
+
3
+ All notable changes to the gaia-ops orchestration system are documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [Unreleased]
9
+
10
+ ## [5.0.0-rc1] - 2026-04-21
11
+
12
+ ### Release Candidate: Context Evals, Planner M1-M6, Memory CLI, Security Hardening
13
+
14
+ First release candidate for v5.0.0. Consolidates the agentic-loop evaluation
15
+ framework, the closed gaia-planner milestones, the unified `gaia memory` CLI,
16
+ and a round of security hardening covering approval lifecycle, Gmail policy,
17
+ and session compaction.
18
+
19
+ #### Added
20
+ - **Context-evals framework** — full pytest-driven evaluation suite for agent
21
+ context consumption. 5 graders (code, contract, trace, routing,
22
+ skill-injection), 3 backends (static, headless, live), 10 scenarios in
23
+ catalog, baseline snapshot with drift detection, and reporter for CI-friendly
24
+ output. Tests under `tests/evals/` with `baseline.json` tracked and
25
+ `{timestamp}-smoke.json` gitignored.
26
+ - **gaia-planner M1-M6 closed** — brief-spec + gaia-planner agent pipeline
27
+ end-to-end. Includes plan state machine, REVIEW -> APPROVAL_REQUEST split,
28
+ session_registry liveness filter, and approvals-drift-fix closed 2026-04-20.
29
+ - **gaia memory CLI** — `python3 bin/gaia memory` subcommand with search
30
+ (`gaia memory search`), episode inspection (`gaia memory show <id>`), FTS5
31
+ full-text index, scoring overhaul, and session context orientation.
32
+ - **gaia-compact skill** — structured session compaction preserving decisions,
33
+ components, gaps, file map, and next steps. Invoked via `/compact` or
34
+ orchestrator-level "compacta" triggers.
35
+ - **tools/__init__.py** — namespace marker for pytest rootdir parity. Resolves
36
+ 8 collection errors when running full suite (tests goes to 3702 passed,
37
+ 36 skipped, 0 errors).
38
+
39
+ #### Changed
40
+ - **Gmail policy** — macro-prefix fix: `+` in label prefixes now correctly
41
+ strips before state-machine classification. Reply classified as mutative
42
+ (was previously read-only, causing false negatives in T3 flow).
43
+ - **Approval workflow docs** — documented that `permissionMode` does not
44
+ survive SendMessage resume. Subagents emitting APPROVAL_REQUEST mid-task
45
+ require orchestrator to re-dispatch fresh (mode does not inherit on resume).
46
+ - **Package version** — `package.json` aligned with `pyproject.toml` at
47
+ `5.0.0-rc1` (previously drifted at `5.0.0-beta.9`).
48
+
49
+ #### Fixed
50
+ - **pytest collection** — `tools/__init__.py` prevents rootdir walk-up mismatch
51
+ between `tests/` and `tools/scan/tests/`. Full suite now collects cleanly.
52
+ - **Evals smoke JSONs** — transient artifacts no longer tracked in git;
53
+ `tests/evals/results/*-smoke.json` gitignored, `baseline.json` preserved.
54
+
55
+ ### Unified Python CLI + JS CLI Deprecation (inherited from beta cycle)
56
+
57
+ The JS CLIs (`gaia-status`, `gaia-doctor`, `gaia-cleanup`, `gaia-update`, `gaia-history`, `gaia-metrics`) are now deprecated in favor of the unified `bin/gaia` Python CLI. The JS CLIs remain functional but print deprecation warnings to stderr on every invocation.
58
+
59
+ #### Migration: Old Command → New Command
60
+
61
+ | Old JS command | New unified command |
62
+ |---|---|
63
+ | `npx gaia-status` | `python3 bin/gaia status` |
64
+ | `npx gaia-doctor` | `python3 bin/gaia doctor` |
65
+ | `npx gaia-cleanup` | `python3 bin/gaia cleanup` |
66
+ | `npx gaia-update` | `python3 bin/gaia update` |
67
+ | `npx gaia-history` | `python3 bin/gaia history` |
68
+ | `npx gaia-metrics` | `python3 bin/gaia metrics` |
69
+
70
+ #### New commands with no JS equivalent
71
+
72
+ The unified CLI also provides subcommands that did not exist as standalone JS CLIs:
73
+
74
+ | New command | Description |
75
+ |---|---|
76
+ | `python3 bin/gaia approvals list` | List pending T3 approval requests |
77
+ | `python3 bin/gaia approvals show APPROVAL_ID` | Show approval detail |
78
+ | `python3 bin/gaia approvals reject NONCE` | Reject a pending approval |
79
+ | `python3 bin/gaia approvals clean` | Remove expired grants |
80
+ | `python3 bin/gaia approvals stats` | Show approval statistics |
81
+ | `python3 bin/gaia plans list` | List all feature briefs |
82
+ | `python3 bin/gaia plans show BRIEF_NAME` | Show a brief and plan |
83
+ | `python3 bin/gaia context show` | Display project-context.json summary |
84
+ | `python3 bin/gaia context scan` | Invoke gaia-scan to refresh context |
85
+
86
+ #### Deprecation timeline
87
+
88
+ - **Now (M6):** JS CLIs print `[DEPRECATED]` warnings to stderr. All functionality remains intact.
89
+ - **Future version (TBD):** JS CLIs will be removed from `package.json` bin field.
90
+
91
+ #### Why a unified CLI?
92
+
93
+ - Zero external dependencies (stdlib only, Python 3.9+)
94
+ - Single entry point: `bin/gaia --help` for all subcommands
95
+ - Machine-readable `--json` output on all subcommands
96
+ - Consistent exit codes: 0=ok, 1=warnings, 2=errors
97
+ - Extensible: add subcommands by dropping a `bin/cli/<name>.py` file
98
+
99
+ ---
100
+
101
+ ## [4.5.0] - 2026-03-24
102
+
103
+ ### Settings Architecture Redesign + Multi-Cloud Security
104
+
105
+ Unified approach for permissions across NPM and plugin installation modes. Permissions now live in `settings.local.json` (union merge, preserves user config). `settings.json` contains only hooks.
106
+
107
+ #### Added
108
+ - **Azure deny rules** — 39 rules covering resource groups, networking, AKS, Key Vault, CosmosDB, Service Bus, and more
109
+ - **Generic wildcard deny rules** — 20 rules that catch all present and future cloud services (`aws * delete-*`, `az * delete`, `gcloud * delete`, etc.)
110
+ - **Indirect execution detection** — Catches `bash -c`, `eval`, `python3 -c`, `node -e`, `ruby -e`, `perl -e` wrappers that bypass regex patterns
111
+ - **Managed settings template** — `templates/managed-settings.template.json` for enterprise deployment via Claude.ai Admin Console
112
+ - **`updateLocalPermissions()`** in `gaia-update.js` — NPM postinstall now merges permissions into `settings.local.json` (same approach as plugin SessionStart)
113
+ - **Plugin mode detection via `plugin.json`** — `plugin_setup.py` and `plugin_mode.py` now read `.claude-plugin/plugin.json` for reliable name/version/mode detection with `--plugin-dir`
114
+ - **First-run welcome message** — `user_prompt_submit.py` detects first run and injects a welcome explaining that restart is needed to activate permissions
115
+
116
+ #### Changed
117
+ - **`settings.template.json`** — Removed permissions block; template now contains only hooks + environment
118
+ - **`_DENY_RULES` centralized in Python** — Single source of truth in `plugin_setup.py`, shared by both OPS and SECURITY modes
119
+ - **T3 approval flow** — All T3 mutative operations now use native `ask` dialog (both ops and security mode). Nonce workflow removed from direct conversation; kept for subagent use via skills.
120
+ - **`approval_messages.py`** — Simplified T3 block message to minimal data (tier + nonce). Workflow instructions live in skills, not hook messages.
121
+ - **`pre_tool_use.py`** — Simplified: passes through `block_response` from `bash_validator` directly, no more mode-specific branching
122
+ - **`bash_validator.py`** — T3 mutative returns `ask` response directly (no nonce generation, no pending files)
123
+ - **`session_start.py`** — Uses `mark_done=False` so `user_prompt_submit.py` can detect first-run and show welcome before marking initialized
124
+ - **`gaia-update.js` registry path** — Fixed to write `plugin-registry.json` in `.claude/` (same path Python hooks expect)
125
+ - **`gaia-doctor.js`** — Now checks permissions in `settings.local.json` (not just `settings.json`). Updated agent and config file lists.
126
+ - **`gaia-update.js` health check** — Updated config files (`surface-routing.json`) and agent list (`gaia-system.md`, `speckit-planner.md`)
127
+
128
+ #### Fixed
129
+ - **Registry path mismatch** — `gaia-update.js` wrote to `.claude/project-context/`, Python read from `.claude/`. Now both use `.claude/`.
130
+ - **Orphaned nonce files** — `bash_validator` no longer writes pending approval files for `ask` responses
131
+ - **Plugin mode detection** — `--plugin-dir` now correctly detects `gaia-ops` vs `gaia-security` via `plugin.json` instead of path parsing
132
+ - **First-run welcome race condition** — `SessionStart` no longer marks initialized; `UserPromptSubmit` marks after showing welcome
133
+ - **`_build_welcome()` framing** — Rewritten to explain WHY the user needs to restart (permissions not active yet), making Claude naturally relay the message
134
+
135
+ ## [4.4.0-rc.5] - 2026-03-19
136
+
137
+ ### Identity Redesign
138
+
139
+ Orchestrator identity is now minimal (~900 chars) and delegates to on-demand skills. CLAUDE.template.md deleted -- the UserPromptSubmit hook is the single source of truth for orchestrator identity.
140
+
141
+ #### Added
142
+ - **`skills/project-dispatch/SKILL.md`** (Reference type) -- agent routing table and dispatch rules, loaded on-demand via Skill tool
143
+ - **`skills/agent-response/SKILL.md`** (Protocol type) -- contract status handling, loaded on-demand via Skill tool
144
+ - Plugin distribution: `.claude-plugin/plugin.json` manifest with engines + categories for Claude Code native plugin system
145
+ - Self-hosted marketplace: `.claude-plugin/marketplace.json` with 2 sub-plugin tiers (gaia-security, gaia-ops)
146
+ - Adapter layer: `hooks/adapters/` with normalized types, abstract base, and Claude Code adapter
147
+ - `hooks/hooks.json` for plugin-channel hook configuration
148
+ - Distribution channel detection (`hooks/adapters/channel.py`)
149
+ - Integration tests for adapter -> business logic -> response flow
150
+ - Plugin manifest validation tests
151
+
152
+ #### Changed
153
+ - **`hooks/modules/identity/ops_identity.py`** -- reduced to ~900 chars; tells orchestrator to load skills on-demand instead of embedding all instructions inline
154
+ - **SendMessage validation** -- moved from invalid hook event to PreToolUse matcher (agent ID format + nonce approval check)
155
+ - **`hooks/modules/scanning/scan_trigger.py`** -- imports `tools.scan` directly (no `bin/` dependency), works in both npm and plugin mode
156
+ - **Agent namespace support** -- accepts both `cloud-troubleshooter` and `gaia-ops:cloud-troubleshooter` forms
157
+ - **`hooks/user_prompt_submit.py`** -- calls `ensure_plugin_registry()` as fallback if SessionStart didn't fire
158
+ - **`hooks/modules/context/context_injector.py`** -- path fixes for plugin mode
159
+ - **`hooks/modules/session/session_event_injector.py`** -- path fixes for plugin mode
160
+ - Hook entry points (pre_tool_use.py, post_tool_use.py, subagent_stop.py) now use adapter layer for stdin/stdout
161
+ - hook_response.py delegates to ClaudeCodeAdapter internally
162
+ - npm dist-tag now derived from version suffix (rc -> next, beta -> beta, etc.)
163
+
164
+ #### Removed
165
+ - **`templates/CLAUDE.template.md`** -- identity now injected dynamically; no generated CLAUDE.md
166
+ - **`copy_claude_md()`** in `tools/scan/setup.py` -- deprecated to no-op (callers still reference it for backward compat)
167
+
168
+ ## [4.0.0] - 2026-03-03
169
+
170
+ ### Breaking: Contracts as Single Source of Truth
171
+
172
+ Contracts now fully control what context each agent receives. Removed the progressive disclosure layer that was silently overriding contract definitions, and cleaned up ~400 lines of dead code from context_provider.py.
173
+
174
+ #### Changed
175
+ - **context_provider.py**: Contracts are the single source of truth -- removed progressive disclosure filtering that overrode contract-defined sections
176
+ - **context_provider.py**: Simplified output payload -- removed `enrichment` and `progressive_disclosure` keys from response
177
+ - **contracts/terraform-architect.json**: Now reads `cluster_details` and `application_services` sections
178
+ - **contracts/gitops-operator.json**: Now reads `gcp_services` section (GCP overlay)
179
+ - **pre_tool_use.py**: Updated log message to show sections count and rules count
180
+ - **templates/CLAUDE.template.md**: Synced agent routing descriptions with CLAUDE.md
181
+
182
+ #### Fixed
183
+ - **context_provider.py `get_contracts_dir()`**: Path traversal went up 2 levels instead of 3, producing wrong directory -- masked by legacy fallback that silently compensated
184
+
185
+ #### Removed
186
+ - **context_provider.py**: ~400 lines of dead code:
187
+ - Progressive disclosure engine (section filtering, phase-based visibility)
188
+ - `LEGACY_AGENT_CONTRACTS` dictionary (hardcoded fallback contracts)
189
+ - Semantic enrichment pipeline
190
+ - `validate_project_paths()` function
191
+ - Path resolution utility functions
192
+
193
+ #### Tests
194
+ - **tests/tools/test_context_provider.py**: Complete rewrite -- 8 tests covering all 6 agents, payload structure, and invalid agent handling
195
+
196
+ ## [3.15.1] - 2026-02-24
197
+
198
+ ### Fix: Cross-Layer Consistency & Dead Code Cleanup
199
+
200
+ Comprehensive audit of skills, hooks, and security modules. Fixed inconsistencies between layers that caused silent failures (tests pass but system broken).
201
+
202
+ #### Fixed
203
+ - **bash_validator**: Check blocked commands BEFORE safe commands (defense-in-depth order was inverted)
204
+ - **tiers.py**: Split `VALIDATION_PATTERNS` into `T1_PATTERNS` (validate, lint, fmt, check) and `T2_PATTERNS` (plan, template, diff) — aligns with security-tiers skill
205
+ - **tiers.py**: Removed `terraform plan` from `ULTRA_COMMON_T0_COMMANDS` fast-path (was T0, should be T2)
206
+ - **safe_commands.py**: Removed `terraform plan`/`terragrunt plan` from `ALWAYS_SAFE_MULTIWORD` (simulation, not read-only)
207
+ - **safe_commands.py**: Removed `python3`, `python` from `always_safe` (can execute arbitrary code)
208
+ - **safe_commands.py**: Removed `tar`, `gzip`, `gunzip`, `zip`, `unzip` from `always_safe` (modify filesystem)
209
+ - **task_validator.py**: Removed legacy `APPROVAL_INDICATORS` (`'validation["approved"] == True'`, `"Phase 5: Realization"`)
210
+ - **task_validator.py**: Added `speckit-planner` to `META_AGENTS`
211
+ - **pre_tool_use.py**: Resume regex `{6,7}` → `{5,}` to accept real Claude Code agent IDs
212
+ - **pre_tool_use.py**: Session events now inject BEFORE `# User Task` marker (was after)
213
+ - **post_tool_use.py**: Added `fcntl.flock` to prevent race conditions on `context.json`
214
+ - **post_tool_use.py**: Guard empty timestamps in retention filter
215
+ - **subagent_stop.py**: Fixed indentation bug in consecutive failure detection
216
+ - **subagent_stop.py**: Use `deque(f, maxlen=7)` instead of `f.readlines()` for metrics.jsonl
217
+ - **settings.json**: Moved 7 T3 commands from `allow` → `ask`: kubectl exec/label/annotate/uncordon, helm rollback, flux suspend/resume
218
+ - **settings.json**: Added `flux create` to `ask` list (was unprotected)
219
+ - **agent-protocol skill**: Removed `CURRENT_PHASE` from AGENT_STATUS (redundant with `PLAN_STATUS`)
220
+ - **agent-protocol skill**: `PLANNING` state now explicitly emitted in Phase 2
221
+ - **execution skill**: Scope clarified as T3-only (was accidentally broadened to T2)
222
+ - All 3 hooks: Removed `logging.StreamHandler()` (was sending noise to stderr)
223
+
224
+ #### Removed
225
+ - **`config_loader.py`** — Dead code, never imported by any module
226
+ - **`discovery_classifier.py`** — Deprecated, replaced by context_writer.py (609 lines)
227
+ - **`exhaustion_detector.py`** — Never worked (wrong glob pattern, wrong file format parsing, 200K thresholds obsolete with 1M context)
228
+ - **`detect_speckit_milestone()`** in event_detector.py — Dead code (post_hook only runs for Bash, not Skill)
229
+ - **`SPECKIT_MILESTONE`** enum value from EventType
230
+ - **`test_config_loader.py`** — Tests for deleted module
231
+ - **`test_discovery_classifier.py`** — Tests for deleted module
232
+ - Slow execution detection in subagent_stop.py (duration_ms always None)
233
+
234
+ #### Added
235
+ - **`test_cross_layer_consistency.py`** — 24 tests validating consistency between settings.json ↔ safe_commands ↔ blocked_commands ↔ tiers ↔ skills ↔ task_validator
236
+
237
+ #### Metrics
238
+ - Dead code removed: ~1,500 lines (config_loader + discovery_classifier + exhaustion_detector + dead test files)
239
+ - All 890 tests pass, 0 failures
240
+
241
+ ## [3.12.0] - 2026-02-17
242
+
243
+ ### Refactor: Principle-First Skills & Agent Deduplication
244
+
245
+ Major redesign of skills and agents. Skills now teach principles instead of enumerating commands. Agents delegate process knowledge to skills, keeping only domain identity.
246
+
247
+ #### Removed
248
+ - **`skills/anti-patterns/`** - Merged into `command-execution` skill as defensive execution principles
249
+
250
+ #### Changed
251
+ - **`skills/command-execution/SKILL.md`** - Complete rewrite with defensive execution framework
252
+ - Timeout hierarchy (tool-native → shell wrapper → abort)
253
+ - Pre-flight checklist ("Can this hang?" / "Do I know the timeout?")
254
+ - 7 numbered rules: no pipes, one command per step, Claude Code tools over bash, validate before mutate, absolute paths, files over inline data, quote variables
255
+ - **`skills/security-tiers/SKILL.md`** - Changed from command enumeration to decision framework
256
+ - Classification by question: "Does it modify live state?" → T3
257
+ - **`skills/terraform-patterns/SKILL.md`** - Split into slim SKILL.md (86 lines) + reference.md
258
+ - **`skills/gitops-patterns/SKILL.md`** - Split into slim SKILL.md (94 lines) + reference.md
259
+ - **`skills/fast-queries/SKILL.md`** - Cut from 256 to 41 lines (essentials only)
260
+ - **`skills/investigation/SKILL.md`** - Fixed to use Glob/Grep/Read tools, removed duplicated content
261
+ - **`skills/output-format/SKILL.md`** - Removed dead escalation protocol
262
+ - **`skills/execution/SKILL.md`** - Consolidated commit format to git-conventions reference
263
+ - **`skills/approval/SKILL.md`** - Removed duplicated commit standards and AskUserQuestion section
264
+ - **All 6 agents** - Removed duplicated Before Acting, Investigation Protocol, Pre-loaded Standards, and command enumeration tier tables
265
+
266
+ #### Added
267
+ - **`skills/reference.md`** - Agent template and npm release checklist (moved from gaia agent)
268
+ - **`skills/terraform-patterns/reference.md`** - Full HCL examples
269
+ - **`skills/gitops-patterns/reference.md`** - Full YAML examples
270
+ - **`investigation` skill** assigned to cloud-troubleshooter, terraform-architect, gitops-operator, devops-developer, gaia
271
+ - **`git-conventions` skill** assigned to terraform-architect, gitops-operator, devops-developer
272
+ - **`agent-protocol` + `security-tiers` skills** assigned to speckit-planner
273
+
274
+ #### Metrics
275
+ - Skills: 1,865 → 725 lines (-61%)
276
+ - Agents: 1,914 → 1,007 lines (-47%)
277
+ - Total injected tokens significantly reduced
278
+ - All 882 tests pass
279
+
280
+ ## [3.11.0] - 2026-02-16
281
+
282
+ ### feat: 3-Layer E2E Testing System
283
+
284
+ Added Layer 1 prompt regression tests (86 tests) validating agent frontmatter, prompt content, skill cross-references, context contracts, security tier consistency, routing table, and skill content rules.
285
+
286
+ ## [3.7.0] - 2026-01-20
287
+
288
+ ### Refactor: Commit Validator Architecture
289
+
290
+ Moved commit validation to hooks system for better encapsulation and clearer separation of concerns.
291
+
292
+ #### Changed
293
+ - **commit_validator.py location**: Moved from `tools/validation/` to `hooks/modules/validation/`
294
+ - **bash_validator.py imports**: Updated to use relative import from sibling module
295
+ - **Module structure**: commit_validator.py now exclusively used by bash_validator.py (no direct imports)
296
+ - **Documentation**: Updated tools/validation/README.md to reflect new architecture
297
+
298
+ #### Technical Details
299
+ - bash_validator.py now uses relative import: `from ..validation.commit_validator import validate_commit_message`
300
+ - commit_validator.py path resolution updated for new location (4 dirname calls instead of 3)
301
+ - pre-publish-validate.js updated to validate new path
302
+ - tools/validation/__init__.py no longer exports commit_validator (internal use only)
303
+
304
+ #### Benefits
305
+ - Better encapsulation: commit validation only accessible through bash_validator
306
+ - Clearer architecture: validation logic properly contained within hooks system
307
+ - No breaking changes: commit validation continues to work identically
308
+
309
+ ## [3.6.1] - 2026-01-20
310
+
311
+ ### Fix: Include skills/ directory in npm package
312
+
313
+ #### Fixed
314
+ - **package.json files array**: Added `"skills/"` to ensure skills directory is published to npm
315
+ - This was preventing skills/standards/ from being available in v3.6.0
316
+
317
+ ## [3.6.0] - 2026-01-20
318
+
319
+ ### Standards Migration to Skills System
320
+
321
+ Major architectural change: migrated from dual context system (standards + skills) to unified skills-based architecture.
322
+
323
+ #### Added
324
+ - **New skills directory**: `skills/standards/` with 4 standards skills:
325
+ - `security-tiers/` - T0-T3 operation classification (auto_load)
326
+ - `output-format/` - Global output contract for all agents (auto_load)
327
+ - `command-execution/` - Shell security rules and timeout guidelines (triggered)
328
+ - `anti-patterns/` - Common mistakes by tool: kubectl, terraform, gcloud, helm, flux, npm, docker (triggered)
329
+ - **Standards loader in skill_loader.py**: New `_load_standards_skills()` method
330
+ - **Standards config in skill-triggers.json**: New `standards` section with auto_load and triggers
331
+
332
+ #### Changed
333
+ - **Unified loading system**: All context now loaded via `skill_loader.py` (skills only)
334
+ - **skill-triggers.json**: Added `standards` section with 4 skills configuration
335
+
336
+ #### Removed
337
+ - **build_standards_context()**: Removed 91 lines from `context_provider.py`
338
+ - **Standards system**: Deleted `get_standards_dir()`, `read_standard_file()`, `should_preload_standard()`, `build_standards_context()`
339
+ - **--no-standards flag**: Removed from context_provider.py (no longer needed)
340
+ - **docs/ directory**: Eliminated symlink `.claude/docs` (standards now in skills/)
341
+ - **Obsolete tests**: Removed 66 lines of standards-specific tests from `test_context_provider.py`
342
+ - **Duplicate content**: Removed docs/standards reference from universal-protocol skill
343
+
344
+ #### Migration Notes
345
+ - **Breaking change**: Systems relying on `.claude/docs/standards/` must update to use skills system
346
+ - **Skills auto-load**: `security-tiers` and `output-format` now load for ALL agents (not just PROJECT_AGENTS)
347
+ - **No functional impact**: Same content, different delivery mechanism
348
+ - **Benefits**: Single loading system, better versioning, no duplication
349
+
350
+ ## [3.3.2] - 2025-12-11
351
+
352
+ ### Read-Only Auto-Approval & Code Optimization
353
+
354
+ Major improvements to the permission system with compound command support and code quality optimizations.
355
+
356
+ #### Added
357
+ - **Compound command auto-approval**: Safe compound commands (`cat file | grep foo`, `ls && pwd`, `tail file || echo error`) now execute WITHOUT ASK prompts
358
+ - **Extended safe command list**: Added `base64`, `md5sum`, `sha256sum`, `tar`, `gzip`, `time`, `timeout`, `sleep` to always-safe commands
359
+ - **Multi-word command support**: Added `kubectl get/describe/logs`, `helm list/status`, `flux check/get`, `docker ps/images`, `gcloud/aws describe/list` as always-safe
360
+
361
+ #### Changed
362
+ - **R1: Unified safe command configuration** (`SAFE_COMMANDS_CONFIG`) - Single source of truth for all safe commands, eliminating ~150 lines of duplicate patterns
363
+ - **R2: Unified validation flow** - `classify_command_tier()` now uses `is_read_only_command()` for T0 classification
364
+ - **R4: Singleton ShellCommandParser** - Single instance reused across all validations
365
+
366
+ #### Removed
367
+ - **R3: Dead code removal** - Removed unused `_contains_command_chaining()` method (~30 lines)
368
+ - **Removed tenacity dependency** - Simplified capabilities loading (retry logic was over-engineering)
369
+ - **Removed duplicate `allowed_read_operations`** - Now derived from `SAFE_COMMANDS_CONFIG`
370
+
371
+ #### Fixed
372
+ - Compound commands with safe components no longer trigger ASK prompts
373
+ - More consistent tier classification between auto-approval and security validation
374
+
375
+ #### Technical Details
376
+ - **Lines reduced**: ~200 lines removed through deduplication
377
+ - **Maintainability**: Single source of truth for safe commands
378
+ - **Performance**: Singleton parser avoids repeated instantiation
379
+
380
+ #### Test Results
381
+ All previous tests continue to pass:
382
+ - Simple read-only commands: NO ASK (auto-approved)
383
+ - Safe compound commands: NO ASK (NEW - auto-approved)
384
+ - Dangerous commands: BLOCKED correctly
385
+ - Compound with dangerous components: BLOCKED correctly
386
+
387
+ ---
388
+
389
+ ## [3.3.1] - 2025-12-11
390
+
391
+ ### Granular AWS Permissions & Command Chaining Block
392
+
393
+ Refined AWS permission patterns to read-only operations and blocked command chaining to ensure predictable permission evaluation.
394
+
395
+ #### Changed
396
+ - **AWS permissions**: Replaced broad service wildcards with granular read-only patterns
397
+ - `Bash(aws ec2:*)` → 40 specific `describe-*` and `get-*` commands
398
+ - `Bash(aws s3:*)` → `s3 ls`, `s3api get-*`, `s3api list-*`, `s3api head-*`
399
+ - `Bash(aws rds:*)` → `describe-*`, `list-tags-for-resource`
400
+ - `Bash(aws iam:*)` → `get-*`, `list-*`, `generate-*`, `simulate-*`
401
+ - Similar granular patterns for Lambda, Logs, CloudWatch, CloudFormation, ELB, Route53, SecretsManager, SSM, SNS, SQS, DynamoDB, ECR, EKS, ElastiCache
402
+
403
+ #### Added
404
+ - **Command chaining block** in `pre_tool_use.py`:
405
+ - Blocks `&&`, `;`, `||` operators to prevent bypassing permission checks
406
+ - Allows pipes `|` (don't affect permissions)
407
+ - Smart detection avoids false positives in quoted strings
408
+ - Clear error message: "Execute each command separately"
409
+
410
+ #### Fixed
411
+ - Moved `agents/README.md` files to `docs/` to resolve Claude Code parse errors
412
+
413
+ #### Security Impact
414
+ - Modification commands (create, start, stop) now properly require ASK confirmation
415
+ - Chained commands can no longer bypass individual permission evaluation
416
+ - Read-only operations execute without confirmation
417
+
418
+ ---
419
+
420
+ ## [3.2.3] - 2025-12-09
421
+
422
+ ### Service-Level Permission Wildcards
423
+
424
+ Simplified permission patterns using service-level wildcards for better Claude Code compatibility.
425
+
426
+ #### Changed
427
+ - **AWS patterns**: Simplified from `Bash(aws rds describe-:*)` to `Bash(aws rds :*)`
428
+ - Service-level wildcards: `aws ec2`, `aws rds`, `aws s3`, `aws iam`, etc.
429
+ - Works around Claude Code pattern matching issues with hyphens
430
+ - **GCP patterns**: Simplified to `Bash(gcloud compute :*)`, `Bash(gcloud container :*)`, etc.
431
+ - **Format standardization**: Removed spaces before `:*` for commands without arguments
432
+
433
+ #### Fixed
434
+ - Agent README files renamed back to `README.md` (underscore prefix removed)
435
+ - Pattern matching now works for `aws rds describe-db-instances` and similar commands
436
+
437
+ #### Impact
438
+ - **Read-only commands**: Execute automatically ✓
439
+ - **Modification commands** (start/stop, upload, resize): Now execute automatically (Option A1)
440
+ - **Destructive commands** (delete, terminate): Still blocked ✓
441
+
442
+ #### Philosophy (Option A1 - Permissive with guardrails)
443
+ - Wide `allow[]` for entire services (e.g., `aws ec2 :*`)
444
+ - Strict `deny[]` for destructive operations
445
+ - Trade-off: Modification commands no longer require confirmation
446
+
447
+ ---
448
+
449
+ ## [3.2.2] - 2025-12-09
450
+
451
+ ### Enhanced Permissions System
452
+
453
+ Complete overhaul of the permissions configuration to implement "permissive-with-guardrails" strategy.
454
+
455
+ #### Changed
456
+ - **Comprehensive allow[] rules**: 331 specific read-only patterns for shell, git, kubernetes, helm, flux, terraform, aws, gcp, docker commands
457
+ - **Granular ask[] rules**: 162 modification operations that require user confirmation
458
+ - **Strict deny[] rules**: 73 destructive operations that are completely blocked
459
+
460
+ #### Fixed
461
+ - Removed duplicate patterns (`uname:*`, `xargs:*`)
462
+ - Fixed `gsutil rm -r:*::*` → `gsutil rm -r:*` (incorrect double colon)
463
+ - Added missing `git branch:*` to allow[] for `git branch -a`
464
+
465
+ #### Added
466
+ - **New test suite**: `tests/permissions-validation/test_permissions_validation.py`
467
+ - Emulates Claude Code's actual permission matching behavior
468
+ - 114 test cases across 13 categories
469
+ - Tests prefix matching with `:*` wildcard
470
+ - Validates precedence: Deny → Allow → Ask
471
+
472
+ #### Philosophy
473
+ - **Allow**: Read-only commands execute automatically (no confirmation)
474
+ - **Ask**: Modification commands require user approval (can be approved)
475
+ - **Deny**: Destructive commands are blocked (cannot be approved)
476
+
477
+ ---
478
+
479
+ ## [3.2.1] - 2025-12-06
480
+
481
+ ### Security Fix - Permission Bypass Bug
482
+
483
+ **Critical security fix** for permission enforcement in `settings.template.json`.
484
+
485
+ #### Fixed
486
+ - **Removed generic `"Bash"` from `allow[]`**: The generic `"Bash"` permission was bypassing all specific `ask[]` rules like `"Bash(git push:*)"`, allowing T3 operations (git push, git commit) to execute without user confirmation.
487
+ - **Changed hook matcher from `"BashTool"` to `"Bash"`**: The PreToolUse and PostToolUse hooks were configured with matcher `"BashTool"` but Claude Code invokes the tool as `"Bash"`, causing hooks to never execute.
488
+
489
+ #### Root Cause Analysis
490
+ - See post-mortem: Generic permission `allow: ["Bash"]` has higher precedence than specific `ask: ["Bash(git push:*)"]` in Claude Code's permission evaluation.
491
+ - Hook matchers must match the exact tool name used by Claude Code.
492
+
493
+ #### Impact
494
+ - All git operations (push, commit, add) now correctly trigger "ask" confirmation
495
+ - PreToolUse hooks now execute for bash commands
496
+ - Security tier enforcement restored
497
+
498
+ ---
499
+
500
+ ## [3.2.0] - 2025-12-06
501
+
502
+ ### Added - Episodic Memory P0+P1 Enhancements
503
+
504
+ Inspired by [memory-graph](https://github.com/gregorydickson/memory-graph) analysis, selective feature adoption.
505
+
506
+ - **P0: Outcome Tracking** (`tools/4-memory/episodic.py`)
507
+ - New fields: `outcome`, `success`, `duration_seconds`, `commands_executed`
508
+ - Valid outcomes: "success", "partial", "failed", "abandoned"
509
+ - New method: `update_outcome()` - Update episode results after execution
510
+ - Search boost: 10% relevance increase for successful episodes
511
+
512
+ - **P1: Simple Relationships** (`tools/4-memory/episodic.py`)
513
+ - New field: `related_episodes` - List of related episode IDs with types
514
+ - Relationship types: SOLVES, CAUSES, DEPENDS_ON, VALIDATES, SUPERSEDES, RELATED_TO
515
+ - New method: `add_relationship()` - Link episodes together
516
+ - New method: `get_related_episodes()` - Query related episodes (outgoing/incoming/both)
517
+ - Search enhancement: `include_relationships=True` parameter
518
+
519
+ - **Statistics Enhancements**
520
+ - Outcome counts by type
521
+ - Total relationships count
522
+ - Relationship types breakdown
523
+
524
+ - **CLI Commands**
525
+ - `store --outcome --duration` - Store with outcome tracking
526
+ - `update-outcome <id> <outcome>` - Update episode outcome
527
+ - `add-relationship <source> <target> <type>` - Create relationship
528
+ - `get-related <id>` - Query related episodes
529
+ - `search --include-relationships` - Search with relationship context
530
+
531
+ ### Design Decisions
532
+
533
+ - Backward compatible: All new fields optional with None defaults
534
+ - Audit trail: Relationship and outcome events logged to JSONL
535
+ - Performance limits: 1000 episodes, 5000 relationships in index
536
+ - No external dependencies: Pure Python implementation
537
+
538
+ ## [3.1.1] - 2025-12-06
539
+
540
+ ### Fixed
541
+
542
+ - **package.json** - Added `docs/` to files array (was missing in 3.1.0)
543
+ - `docs/standards/` now included in npm package
544
+ - Required for hybrid pre-loading in `context_provider.py`
545
+
546
+ ## [3.1.0] - 2025-12-06
547
+
548
+ ### Added - Token Optimization & Consolidation
549
+
550
+ - **NEW:** `docs/standards/` - Shared execution standards
551
+ - `security-tiers.md` - T0-T3 definitions
552
+ - `output-format.md` - Report structure
553
+ - `command-execution.md` - Execution pillars
554
+ - `anti-patterns.md` - Common mistakes by tool
555
+
556
+ - **NEW:** Hybrid pre-loading in `context_provider.py`
557
+ - Always loads: security-tiers, output-format
558
+ - On-demand: command-execution
559
+ - **78% token reduction** per agent invocation
560
+
561
+ - **NEW:** QuickTriage scripts
562
+ - `tools/fast-queries/cloud/aws/quicktriage_aws_troubleshooter.sh`
563
+ - `tools/fast-queries/appservices/quicktriage_devops_developer.sh`
564
+
565
+ ### Changed - Agent Optimization
566
+
567
+ - **agents/*.md** - All 6 agents reduced by 78%
568
+ - terraform-architect: 916 → 183 lines
569
+ - gitops-operator: 1,238 → 217 lines
570
+ - gcp-troubleshooter: 600 → 156 lines
571
+ - aws-troubleshooter: 565 → 142 lines
572
+ - devops-developer: 641 → 173 lines
573
+
574
+ ### Removed - Session System Consolidation
575
+
576
+ - **REMOVED:** Session management system (consolidated into Episodic Memory)
577
+ - `commands/save-session.md`
578
+ - `commands/restore-session.md`
579
+ - `commands/session-status.md`
580
+ - `hooks/session_start.py`
581
+ - `tools/5-task-management/session-manager.py`
582
+ - `tools/5-task-management/create_current_session_bundle.py`
583
+ - `tools/5-task-management/restore_session.py`
584
+
585
+ ### Changed - Episodic Memory Enhanced
586
+
587
+ - **tools/4-memory/episodic.py** - Added `capture_git_state()` migrated from session system
588
+
589
+ ### Fixed - Test Suite
590
+
591
+ - **359 tests passing (100%)**
592
+ - Fixed import in `test_commit_validator.py`
593
+ - Fixed import in `test_episodic_memory.py`
594
+ - Updated `test_agent_definitions.py` for meta-agents
595
+ - Changed `test_hook_blocks_docker_ps` to `test_hook_default_permit_for_docker_ps`
596
+ - Fixed 11 warnings (return → assert)
597
+
598
+ ### Changed - Documentation
599
+
600
+ - **README.md & README.en.md** - Updated to v3.1.0, reduced 41%
601
+ - **All subdirectory READMEs** - Reduced 63% total (~2,025 lines removed)
602
+ - Eliminated all references to session system
603
+
604
+ ---
605
+
606
+ ## [3.0.0] - 2025-12-05
607
+
608
+ ### Added - Agent Intelligence System (MAJOR)
609
+
610
+ - **NEW:** `tools/10-agent-intelligence/` module for intelligent agent optimization
611
+ - `agent_writing_assistant.py` (24KB) - Assists in writing and improving agent definitions
612
+ - `workflow_optimizer.py` (29KB) - Applies the 7 LLM Engineering Principles to optimize workflows
613
+ - Binary Decision Trees
614
+ - Guards Over Advice
615
+ - Tool Contracts
616
+ - Failure Paths
617
+ - TL;DR First
618
+ - References Over Duplication
619
+ - Metrics Over Subjective Goals
620
+
621
+ - **NEW:** `tools/4-memory/` Episodic Memory System
622
+ - `episodic.py` (23KB) - Persistent storage and retrieval of historical context
623
+ - `demo.py` - Demonstration script for episodic memory
624
+ - Features:
625
+ - Automatic episode storage with keywords and classifications
626
+ - Smart search with time decay and relevance scoring
627
+ - Auto-classification of episode types (deployment, troubleshooting, etc.)
628
+ - Index management with automatic trimming (1000 episode limit)
629
+ - Audit trail with append-only JSONL file
630
+
631
+ - **NEW:** `tools/conversation/` Enhanced Conversation Management
632
+ - `enhanced_conversation_manager.py` (21KB) - Advanced conversation state management
633
+ - `agent_contract_builder.py` (19KB) - Dynamic agent contract generation
634
+ - `progressive_disclosure.py` (17KB) - Progressive context disclosure for token optimization
635
+
636
+ - **NEW:** `tests/workflow/` directory for workflow-specific tests
637
+ - **NEW:** `tests/test_agent_contract_integration.py` - Agent contract validation tests
638
+ - **NEW:** `tools/agent_capabilities.json` - Centralized agent capabilities definition
639
+
640
+ ### Changed - Agent Enhancements
641
+
642
+ - **agents/gaia.md** - Major refactoring (1707 lines changed)
643
+ - Streamlined agent definition
644
+ - Improved protocol definitions
645
+ - Better integration with new intelligence modules
646
+
647
+ - **agents/gitops-operator.md** - Enhanced with 234 new lines
648
+ - Improved Kubernetes operation patterns
649
+ - Better Flux CD integration guidance
650
+ - Enhanced troubleshooting protocols
651
+
652
+ - **agents/terraform-architect.md** - Enhanced with 47 new lines
653
+ - Improved Terragrunt support
654
+ - Better module design guidance
655
+ - Enhanced security scanning protocols
656
+
657
+ - **agents/gcp-troubleshooter.md** - Enhanced with 52 new lines
658
+ - Improved GKE diagnostics
659
+ - Better IAM analysis patterns
660
+ - Enhanced networking troubleshooting
661
+
662
+ ### Changed - Tools & Infrastructure
663
+
664
+ - **hooks/pre_tool_use.py** - Major enhancement (286+ lines)
665
+ - Improved security validations
666
+ - Better command blocking logic
667
+ - Enhanced credential detection
668
+
669
+ - **hooks/subagent_stop.py** - Enhanced with 193 new lines
670
+ - Better result packaging
671
+ - Improved bundle generation
672
+ - Enhanced session integration
673
+
674
+ - **tools/2-context/context_provider.py** - Enhanced (120+ lines changed)
675
+ - Better provider detection
676
+ - Improved contract validation
677
+ - Enhanced error handling
678
+
679
+ - **tools/3-clarification/workflow.py** - Major enhancement (162+ lines)
680
+ - Episodic memory integration
681
+ - Improved ambiguity detection
682
+ - Better context enrichment
683
+
684
+ - **tools/9-agent-framework/agent_orchestrator.py** - Enhanced (38+ lines)
685
+ - Better phase management
686
+ - Improved error recovery
687
+ - Enhanced logging
688
+
689
+ ### Changed - Fast Queries (Simplified)
690
+
691
+ - **tools/fast-queries/README.md** - Simplified documentation (185 lines changed)
692
+ - **tools/fast-queries/run_triage.sh** - Streamlined (152 lines changed)
693
+ - **tools/fast-queries/terraform/quicktriage_terraform_architect.sh** - Enhanced (90+ lines)
694
+ - **tools/fast-queries/gitops/quicktriage_gitops_operator.sh** - Enhanced (69+ lines)
695
+ - **tools/fast-queries/cloud/gcp/quicktriage_gcp_troubleshooter.sh** - Enhanced (99+ lines)
696
+
697
+ ### Removed (BREAKING)
698
+
699
+ - **REMOVED:** `tools/fast-queries/USAGE_GUIDE.md` (369 lines) - Consolidated into README
700
+ - **REMOVED:** `tools/fast-queries/appservices/quicktriage_devops_developer.sh` (38 lines)
701
+ - **REMOVED:** `tools/fast-queries/cloud/aws/quicktriage_aws_troubleshooter.sh` (45 lines)
702
+
703
+ ### Improved
704
+
705
+ - **Token Efficiency:** New progressive disclosure system reduces context by up to 70%
706
+ - **Agent Intelligence:** Workflows now validated against 7 engineering principles
707
+ - **Memory System:** Historical context improves routing accuracy over time
708
+ - **Conversation Management:** Multi-turn conversations with intelligent context carry-over
709
+ - **Test Coverage:** New workflow and integration tests
710
+
711
+ ### Migration Guide for v3.0.0
712
+
713
+ **Breaking Changes:**
714
+ 1. Removed `quicktriage_devops_developer.sh` - Use agent directly
715
+ 2. Removed `quicktriage_aws_troubleshooter.sh` - Use agent directly
716
+ 3. Removed `USAGE_GUIDE.md` - See README.md instead
717
+
718
+ **New Features to Adopt:**
719
+ ```python
720
+ # Episodic Memory
721
+ from tools.4_memory.episodic import EpisodicMemory
722
+ memory = EpisodicMemory()
723
+ memory.store_episode(prompt="...", context={...})
724
+
725
+ # Workflow Optimizer
726
+ from tools.10_agent_intelligence.workflow_optimizer import WorkflowOptimizer
727
+ optimizer = WorkflowOptimizer()
728
+ result = optimizer.analyze(workflow_content)
729
+
730
+ # Enhanced Conversation
731
+ from tools.conversation.enhanced_conversation_manager import EnhancedConversationManager
732
+ manager = EnhancedConversationManager()
733
+ ```
734
+
735
+ **Recommended Actions:**
736
+ - Review new agent definitions for improved patterns
737
+ - Enable episodic memory for better context over time
738
+ - Use workflow optimizer to validate custom workflows
739
+
740
+ ---
741
+
742
+ ## [2.6.2] - 2025-11-14
743
+
744
+ ### Added - Absolute Paths Support
745
+
746
+ - **NEW:** `normalizePath()` function - Handles both absolute and relative paths transparently
747
+ - **NEW:** CLI option `--project-context-repo` - Specify git repository for project context in non-interactive mode
748
+ - **NEW:** Environment variable `CLAUDE_PROJECT_CONTEXT_REPO` - Alternative way to specify context repo
749
+
750
+ ### Changed
751
+
752
+ - **`getConfiguration()`** - Now normalizes paths using `normalizePath()`
753
+ - **`validateAndSetupProjectPaths()`** - Enhanced to handle absolute paths correctly
754
+ - **CLI help and documentation** - Updated examples with absolute paths
755
+
756
+ ### Improved
757
+
758
+ - Path handling is now more robust and user-friendly
759
+ - Better error messages for path-related issues
760
+ - Clearer documentation and examples
761
+
762
+ ### Examples
763
+
764
+ ```bash
765
+ # Absolute paths without context repo
766
+ npx gaia-init --non-interactive \
767
+ --gitops /home/user/project/gitops \
768
+ --terraform /home/user/project/terraform \
769
+ --app-services /home/user/project/services
770
+
771
+ # Absolute paths with context repo
772
+ npx gaia-init --non-interactive \
773
+ --gitops /path/to/gitops \
774
+ --terraform /path/to/terraform \
775
+ --project-context-repo git@bitbucket.org:org/repo.git
776
+ ```
777
+
778
+ ---
779
+
780
+ ## [2.3.0] - 2025-11-11
781
+
782
+ ### Added - Phase 0 Clarification Module
783
+
784
+ - **NEW:** `tools/clarification/` module for intelligent ambiguity detection before routing
785
+ - `clarification/engine.py`: Core clarification engine (refactored from clarify_engine.py)
786
+ - `clarification/patterns.py`: Ambiguity detection patterns (ServiceAmbiguityPattern, NamespaceAmbiguityPattern, etc.)
787
+ - `clarification/workflow.py`: High-level helper functions for orchestrators (`execute_workflow()`)
788
+ - `clarification/__init__.py`: Clean public API
789
+ - **Protocol G** in `agents/gaia.md`: Clarification system analysis and troubleshooting guide
790
+ - **Rule 5.0.1** in `templates/CLAUDE.template.md`: Phase 0 implementation guide with code examples
791
+ - **Phase 0 integration** in `/speckit.specify` command
792
+ - **Regression tests** in `tests/integration/test_phase_0_regression.py`
793
+ - **Clarification metrics** to Key System Metrics (target: 20-30% clarification rate)
794
+
795
+ ### Changed - Module Restructuring (BREAKING)
796
+
797
+ - **BREAKING:** `clarify_engine.py` and `clarify_patterns.py` moved to `clarification/` module
798
+ - **Old imports:** `from clarify_engine import request_clarification`
799
+ - **New imports:** `from clarification import execute_workflow, request_clarification`
800
+ - Updated `application_services` structure in project-context.json:
801
+ - Added `tech_stack` field (replaces `technology`)
802
+ - Added `namespace` field for service location
803
+ - **Removed** `status` field (dynamic state must be verified in real-time, not stored in SSOT)
804
+ - Service metadata now shows only static information: `tech_stack | namespace | port`
805
+
806
+ ### Fixed
807
+
808
+ - Import paths in `tests/tools/test_clarify_engine.py` updated to new module structure
809
+ - Service metadata test updated to reflect removal of dynamic status field
810
+ - All 20 unit tests passing with new module structure
811
+
812
+ ### Migration Guide for v2.3.0
813
+
814
+ ```python
815
+ # Before (v2.2.x)
816
+ from clarify_engine import request_clarification, process_clarification
817
+
818
+ # After (v2.3.0)
819
+ from clarification import execute_workflow
820
+
821
+ # Simple usage
822
+ result = execute_workflow(user_prompt)
823
+ enriched_prompt = result["enriched_prompt"]
824
+ ```
825
+
826
+ ---
827
+
828
+ ## [2.2.3] - 2025-11-11
829
+
830
+ ### Fixed - Deterministic Project Context Location
831
+
832
+ - **context_provider.py**
833
+ - Always reads `.claude/project-context/project-context.json` (no fallback to legacy paths)
834
+ - Removed legacy auto-detection logic and unused imports
835
+ - Prevents "Context file not found" errors when projects only use the new structure
836
+ - **templates/CLAUDE.template.md**
837
+ - Rule 1 clarifies when to delegate vs. self-execute
838
+ - Rule 2 explicitly documents the `context_provider.py --context-file .claude/project-context/project-context.json …` invocation
839
+ - Workflow summary now references orchestration docs after the table (cleaner render)
840
+
841
+ ### Changed - CLI Documentation & Version Alignment
842
+
843
+ - **README.md / README.en.md**
844
+ - Documented the exact `npx` commands (`npx gaia-init` / `npx @jaguilar87/gaia-ops`) and clarified installation steps
845
+ - Updated "Current version" badges to **2.2.3**
846
+ - **package.json**
847
+ - Bumped package version to `2.2.3`
848
+
849
+ ### Benefits
850
+
851
+ - No manual tweaks needed to point `context_provider.py` at the correct project context
852
+ - CLAUDE template now tells the orchestrator exactly how to invoke the context provider
853
+ - README instructions reflect the real CLI entry points, reducing confusion for new installs
854
+
855
+ ---
856
+
857
+ ## [2.2.2] - 2025-11-11
858
+
859
+ ### Added - Pre-generated Semantic Embeddings
860
+
861
+ - **NEW:** Included pre-generated intent embeddings in package (74KB total)
862
+ - `config/intent_embeddings.json` (55KB) - Semantic vectors for intent matching
863
+ - `config/intent_embeddings.npy` (19KB) - Binary embeddings for fast loading
864
+ - `config/embeddings_info.json` (371B) - Metadata about embeddings
865
+
866
+ ### Changed - Semantic Routing Now Works Out-of-the-Box
867
+
868
+ - **Semantic matching enabled by default:** No manual setup required
869
+ - **Routing accuracy improved:** Ambiguous queries now route correctly using semantic similarity
870
+ - **Example improvement:**
871
+ ```
872
+ Query: "puede decirme el estado de los servicios de tcm?"
873
+ Before: devops-developer (keyword "ci" - incorrect)
874
+ After: gitops-operator (semantic matching - correct)
875
+ ```
876
+
877
+ ### Fixed - Directory Structure Consistency
878
+
879
+ - **Consolidated `configs/` into `config/`:** All configuration and data files now in single directory
880
+ - **Updated tool references:**
881
+ - `tools/semantic_matcher.py`: Updated embeddings path (configs/ → config/)
882
+ - `tools/generate_embeddings.py`: Updated output path (configs/ → config/)
883
+ - All documentation updated to reference correct paths
884
+
885
+ ### Fixed - Test Suite (254 tests, 100% passing)
886
+
887
+ - **tests/system/test_configuration_files.py:**
888
+ - Updated to validate `templates/settings.template.json` (package contains template, not installed settings.json)
889
+ - Tests now reflect npm package structure instead of installed project structure
890
+
891
+ - **tests/system/test_directory_structure.py:**
892
+ - Completely rewritten for npm package validation
893
+ - Tests now verify package directories (agents/, tools/, config/, templates/, bin/)
894
+ - Removed tests for installed-project structure (session/, .claude/ name)
895
+ - Added comprehensive tests for all package subdirectories (agents, tools, hooks, config, speckit)
896
+
897
+ - **tests/tools/test_clarify_engine.py:**
898
+ - Fixed import paths (tests/tools → gaia-ops/tools)
899
+ - Made emoji checks flexible (accepts any emoji, not just 📦)
900
+ - All 32 clarify_engine tests now pass
901
+
902
+ - **tests/tools/test_context_provider.py:**
903
+ - Updated troubleshooter contract test (application_services is optional, not required)
904
+ - Fixed invalid_agent test expectation (now correctly exits with code 1)
905
+
906
+ - **tools/context_provider.py:**
907
+ - Changed behavior for invalid agents: now exits with code 1 (was: warning + empty contract)
908
+ - Better error messages: "ERROR: Invalid agent" instead of "Warning: No contract found"
909
+
910
+ ### Benefits
911
+
912
+ - Zero configuration: Semantic routing works immediately after installation
913
+ - Better routing: Handles ambiguous queries with 6x higher confidence
914
+ - Consistent structure: All config files in one place (`config/`)
915
+ - Smaller package: Embeddings optimized for size (74KB vs 5MB unoptimized)
916
+ - Regeneration optional: Users can regenerate with `python3 .claude/tools/generate_embeddings.py` if needed
917
+ - Test coverage: 254 tests passing (0 failures)
918
+
919
+ ---
920
+
921
+ ## [2.2.1] - 2025-11-10
922
+
923
+ ### Fixed - Documentation Consistency
924
+
925
+ - **README.md & README.en.md:**
926
+ - Updated version numbers from 2.1.0 → 2.2.0
927
+ - Corrected package structure (hooks/, templates/, commands/)
928
+ - Fixed hooks/ listing: now shows actual Python files (pre_tool_use.py, post_tool_use.py, etc.) instead of non-existent pre-commit
929
+ - Fixed templates/ listing: removed non-existent code-examples/, listed actual files (CLAUDE.template.md, settings.template.json)
930
+ - Added context-contracts.gcp.json and context-contracts.aws.json to config/ section
931
+ - Removed CLAUDE.md and AGENTS.md from package root (only templates exist)
932
+ - Added speckit/ directory to structure
933
+
934
+ - **config/AGENTS.md:**
935
+ - Updated all references: `.claude/docs/` → `.claude/config/`
936
+ - Fixed quick links and support documentation paths
937
+
938
+ - **config/agent-catalog.md:**
939
+ - Updated all 5 context contract references: `.claude/docs/` → `.claude/config/`
940
+
941
+ - **index.js:**
942
+ - Deprecated `getDocPath()` function with console warning
943
+ - Function now redirects to `config/` directory instead of non-existent `docs/`
944
+ - Added JSDoc @deprecated annotation
945
+
946
+ - **README.en.md (Documentation section):**
947
+ - Removed broken reference to `./CLAUDE.md` (file not in package)
948
+ - Fixed all documentation links: `./docs/` → `./config/`
949
+ - Updated to match actual config/ directory structure
950
+
951
+ - **speckit/README.en.md:**
952
+ - Removed 3 non-existent commands: speckit.clarify, speckit.analyze-plan, speckit.constitution
953
+ - Updated command count: 9 → 7 actual commands
954
+ - Removed references to non-existent tasks-richer.py tool
955
+ - Removed entire sections for non-existent templates (data-model-template.md, contracts-template.md)
956
+ - Updated tool files list with actual tools (task_manager.py, clarify_engine.py, context_provider.py)
957
+ - Fixed all code examples to use only existing commands
958
+
959
+ - **tools/context_provider.py:**
960
+ - Added auto-detection for project-context.json location
961
+ - Honors GAIA_CONTEXT_PATH environment variable
962
+ - Falls back through common locations (.claude/project-context.json, .claude/project-context/project-context.json)
963
+ - Fixes agent routing failures when project-context.json is in non-legacy location
964
+
965
+ - **package.json:**
966
+ - Fixed `npm test` script (was calling non-existent pytest tests)
967
+ - Now echoes informative message about fixture availability
968
+
969
+ - **Agent Branding Unification:**
970
+ - Renamed `agents/claude-architect.md` → `agents/gaia.md` (aligns with gaia-ops package name)
971
+ - Renamed `commands/gaina.md` → `commands/gaia.md` (unified as `/gaia` command)
972
+ - Updated all references in README.md, README.en.md, and agents/gaia.md
973
+ - Complete branding consistency: package name, agent name, and command name all use "gaia"
974
+
975
+ ### Benefits
976
+
977
+ - Accurate documentation: All paths and structures match actual package contents
978
+ - No broken links: References point to existing files
979
+ - Clear API: Deprecated functions clearly marked
980
+ - User trust: Documentation matches reality
981
+ - npm test passes: No false failures
982
+
983
+ ---
984
+
985
+ ## [2.2.0] - 2025-11-10
986
+
987
+ ### Added - Unified Settings Template & Auto-Installation
988
+
989
+ - **NEW:** Created unified `templates/settings.template.json` (214 lines)
990
+ - Merged functionality from `settings.json` + `settings.local.json`
991
+ - Includes all hooks (PreToolUse, PostToolUse, SubagentStop)
992
+ - Complete permissions (75+ allow, 9 deny, 27 ask entries)
993
+ - Full security tier definitions (T0-T3)
994
+ - Environment configuration
995
+
996
+ - **Auto-Installation:** `gaia-init.js` now automatically generates `.claude/settings.json`
997
+ - Added `generateSettingsJson()` function
998
+ - Integrated into installation workflow (Step 6.5)
999
+ - Projects get complete settings from day 1
1000
+
1001
+ ### Removed - Dead Code Elimination
1002
+
1003
+ - **CLAUDE.md** from package root (only template exists now)
1004
+ - **templates/code-examples/** (321 lines - never imported or executed)
1005
+ - `commit_validation.py`
1006
+ - `clarification_workflow.py`
1007
+ - `approval_gate_workflow.py`
1008
+ - **templates/project-context.template.json** (126 lines - unused, installer generates programmatically)
1009
+ - **templates/project-context.template.aws.json** (128 lines - never used)
1010
+ - **package.json:** Removed `CLAUDE.md` from files array
1011
+
1012
+ ### Changed - Package Consistency
1013
+
1014
+ - **templates/CLAUDE.template.md:**
1015
+ - Updated all references: `.claude/docs/` → `.claude/config/`
1016
+ - Updated package name: `@aaxis/claude-agents` → `@jaguilar87/gaia-ops`
1017
+ - Removed code-examples reference (no longer exists)
1018
+
1019
+ - **README.en.md:**
1020
+ - Updated API examples to use `@jaguilar87/gaia-ops`
1021
+ - Changed `getDocPath()` → `getConfigPath()` (correct function)
1022
+
1023
+ - **index.js:**
1024
+ - Updated header and JSDoc comments with new package name
1025
+ - Updated example usage
1026
+
1027
+ - **agents/gaia.md:**
1028
+ - Updated system paths to reflect gaia-ops package structure
1029
+ - Clarified symlink architecture and layout
1030
+
1031
+ ### Improved - Package Quality
1032
+
1033
+ - **Reduced template bloat by 57%:** 882 lines → 378 lines (504 lines removed)
1034
+ - **Single source of truth:** One settings template instead of scattered config
1035
+ - **Cleaner architecture:** Only actual templates remain in `templates/`
1036
+ - **Better defaults:** Projects start with complete, production-ready settings
1037
+
1038
+ ### Benefits
1039
+
1040
+ - Unified configuration: Everything in one settings.json file
1041
+ - Automatic setup: No manual settings configuration needed
1042
+ - Smaller package: 57% reduction in template code
1043
+ - Flexibility maintained: Users can still create `settings.local.json` for overrides
1044
+ - Package consistency: All references use correct package name
1045
+
1046
+ ---
1047
+
1048
+ ## [2.1.0] - 2025-11-10
1049
+
1050
+ ### Added - Provider-Specific Context Contracts
1051
+
1052
+ - **NEW:** Created separate contract files per cloud provider
1053
+ - `config/context-contracts.gcp.json` - GCP-specific contracts
1054
+ - `config/context-contracts.aws.json` - AWS-specific contracts
1055
+ - Ready for `context-contracts.azure.json` (future)
1056
+
1057
+ - **Auto-Detection:** `context_provider.py` now automatically:
1058
+ 1. Detects cloud provider from `metadata.cloud_provider`
1059
+ 2. Falls back to inferring from field presence (`project_id` → GCP, `account_id` → AWS)
1060
+ 3. Loads the correct contract file
1061
+ 4. Validates against provider-specific requirements
1062
+
1063
+ - **Test Fixtures:** Added sample contexts for testing
1064
+ - `tests/fixtures/project-context.gcp.json`
1065
+ - `tests/fixtures/project-context.aws.json`
1066
+
1067
+ ### Changed
1068
+
1069
+ - **Context Provider:** Updated `tools/context_provider.py`
1070
+ - Added `detect_cloud_provider()` function
1071
+ - Added `load_provider_contracts()` function
1072
+ - Updated `get_contract_context()` to accept provider contracts
1073
+ - Legacy contracts remain for backward compatibility
1074
+
1075
+ - **Field Names:** Standardized provider-specific fields
1076
+ - GCP: `project_details.project_id` (no change)
1077
+ - AWS: `project_details.account_id` (was `aws_account`)
1078
+ - Installer updated to generate correct field names
1079
+
1080
+ - **Templates:** Created AWS-specific template
1081
+ - `templates/project-context.template.aws.json`
1082
+ - Matches AWS naming conventions (EKS, RDS, ECR, etc.)
1083
+
1084
+ - **Documentation:** Updated `config/context-contracts.md`
1085
+ - Added "Provider-Specific Contracts" section
1086
+ - Documented how provider detection works
1087
+ - Explained benefits of provider-specific approach
1088
+ - Version bumped to 2.1.0
1089
+
1090
+ ### Benefits
1091
+
1092
+ - Clarity: Field names match cloud provider terminology
1093
+ - Simplicity: No complex conditional validation logic in agents
1094
+ - Extensibility: Adding Azure = create one JSON file (15 minutes)
1095
+ - Agents Stay Agnostic: Agents use pattern discovery, don't need provider logic
1096
+ - Single Source of Truth: Orchestrator selects the right contract
1097
+
1098
+ ### Backward Compatibility
1099
+
1100
+ - Legacy support maintained: If provider-specific contracts don't exist, falls back to hardcoded contracts
1101
+ - Existing projects: Continue to work without changes
1102
+ - Migration: Optional, but recommended for clarity
1103
+
1104
+ ---
1105
+
1106
+ ## [1.4.0] - 2025-11-10
1107
+
1108
+ ### Changed - BREAKING: Complete Installer Redesign
1109
+
1110
+ - **NEW FLOW:** Directories first, context second (much more logical!)
1111
+ 1. Ask for directories (gitops, terraform, app-services) - ALWAYS
1112
+ 2. Ask for project context repo - OPTIONAL
1113
+ 3. If NO context: Ask basic questions to create project-context.json
1114
+ 4. If YES context: Use that configuration and done!
1115
+
1116
+ ### Improved
1117
+
1118
+ - **Clearer Purpose:** Context repo is now clearly optional
1119
+ - **Better Fallback:** If no context exists, creates a basic one with minimal info
1120
+ - **All Fields Optional:** Can leave everything empty if you don't know yet
1121
+ - **Logical Order:** Ask for what you always need first (paths), then optional context
1122
+
1123
+ ---
1124
+
1125
+ ## [1.3.6] - 2025-11-10
1126
+
1127
+ ### Fixed
1128
+
1129
+ - **Installer:** Skip questions when project context already has the answers
1130
+ - **Smart Detection:** Only ask what's missing or needs confirmation (paths)
1131
+ - **User Experience:** Show config summary when context is loaded
1132
+ - **Directory Creation:** Auto-create missing directories without prompting
1133
+
1134
+ ### Changed
1135
+
1136
+ - When project context loads successfully, only asks to confirm/adjust paths
1137
+ - Cloud provider, credentials, region, and cluster name auto-applied from context
1138
+ - Clearer feedback showing what was loaded from project context
1139
+ - Missing directories (gitops, terraform, app-services) now created automatically
1140
+
1141
+ ---
1142
+
1143
+ ## [1.3.5] - 2025-11-10
1144
+
1145
+ ### Added
1146
+
1147
+ - **Smart Installer Flow:** Project context repo now asked FIRST, with auto-population of all config
1148
+ - **Input Sanitization:** Handles "git clone <url>" pastes automatically (extracts just URL)
1149
+ - **Auto-Configuration:** Parses project-context.json and pre-fills all wizard questions
1150
+ - **Better Error Messages:** Clear troubleshooting tips for git clone failures (SSH keys, access, URL)
1151
+
1152
+ ### Changed
1153
+
1154
+ - **Wizard Question Order:** Project context moved from last to first question
1155
+ - **User Experience:** Reduced manual input when project context exists
1156
+ - **Clone Strategy:** Validates project context early, then sets up in final location
1157
+ - **Error Handling:** Installation continues even if project context clone fails
1158
+
1159
+ ---
1160
+
1161
+ ## [1.3.4] - 2025-11-10
1162
+
1163
+ ### Fixed
1164
+
1165
+ - **Installer:** Removed incorrect AGENTS.md symlink creation in project root during installation
1166
+ - **Documentation:** AGENTS.md now only accessible via `.claude/config/AGENTS.md` as intended
1167
+ - **Package Quality:** Excluded Python cache files (`__pycache__/`) from published package
1168
+
1169
+ ### Changed
1170
+
1171
+ - **README.md:** Updated project structure documentation to reflect correct AGENTS.md location
1172
+ - **README.en.md:** Updated project structure and corrected package references
1173
+ - **Package Size:** Reduced from 911.7 kB (93 files) to 660.7 kB (77 files) - 27% reduction
1174
+
1175
+ ### Added
1176
+
1177
+ - **Package Metadata:** Added `homepage` and `bugs` fields to package.json for better npm discovery
1178
+ - **Badges:** Added npm version, license, and Node.js version badges to README files
1179
+ - **CI/CD:** Created GitHub Actions workflow for automated npm publishing
1180
+ - **.npmignore:** Added file to exclude development artifacts from package
1181
+ - **Cleanup Script:** Added `npm run clean` to remove Python cache files automatically
1182
+ - **Pre-publish Hook:** Added `prepublishOnly` script for automatic cleanup before publishing
1183
+
1184
+ ---
1185
+
1186
+ ## Versioning Policy
1187
+
1188
+ ### Version Number Format: MAJOR.MINOR.PATCH
1189
+
1190
+ - **MAJOR:** Breaking changes to orchestrator behavior (requires agent updates, system changes)
1191
+ - **MINOR:** New features, sections, or substantial improvements (backward compatible)
1192
+ - **PATCH:** Bug fixes, clarifications, typos (backward compatible)
1193
+
1194
+ ### Examples
1195
+
1196
+ - Adding new agent: MINOR (e.g., 2.0.0 → 2.1.0)
1197
+ - Changing core principle: MAJOR (e.g., 2.1.0 → 3.0.0)
1198
+ - Fixing typo in docs: PATCH (e.g., 2.1.0 → 2.1.1)
1199
+ - Refactoring structure (like 2.0.0): MAJOR (changed from monolith to modular)
1200
+
1201
+ ---
1202
+
1203
+ ## Maintainers
1204
+
1205
+ - **Primary:** Jorge Aguilar (jorge.aguilar87@gmail.com)
1206
+ - **Contributors:** Claude Code Agent Swarm
1207
+
1208
+ ---
1209
+
1210
+ ## License
1211
+
1212
+ Internal documentation for Aaxis RnD team. Not for external distribution.