@raishin/vanguard-frontier-agentic 3.15.0 → 3.17.0

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 (374) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/.claude-plugin/plugin.json +3 -1
  3. package/.cursor-plugin/plugin.json +3 -1
  4. package/.github/plugin/marketplace.json +1 -1
  5. package/README.md +11 -11
  6. package/agents/AGENTS.md +1 -1
  7. package/agents/README.md +1 -1
  8. package/agents/cross-functional/agentic-security-review-agent/AGENT.md +168 -0
  9. package/agents/cross-functional/agentic-security-review-agent/harnesses/claude-code.agent.md +158 -0
  10. package/agents/cross-functional/agentic-security-review-agent/harnesses/codex.toml +165 -0
  11. package/agents/cross-functional/agentic-security-review-agent/harnesses/copilot.agent.md +163 -0
  12. package/agents/cross-functional/agentic-security-review-agent/harnesses/cursor.agent.md +158 -0
  13. package/agents/cross-functional/agentic-security-review-agent/harnesses/gemini.agent.md +164 -0
  14. package/agents/cross-functional/agentic-security-review-agent/harnesses/kiro-cli.agent.json +5 -0
  15. package/agents/cross-functional/agentic-security-review-agent/harnesses/kiro-ide.agent.md +157 -0
  16. package/agents/cross-functional/agentic-security-review-agent/metadata.json +45 -0
  17. package/agents/cross-functional/agentic-system-architecture-review-agent/AGENT.md +157 -0
  18. package/agents/cross-functional/agentic-system-architecture-review-agent/harnesses/claude-code.agent.md +147 -0
  19. package/agents/cross-functional/agentic-system-architecture-review-agent/harnesses/codex.toml +154 -0
  20. package/agents/cross-functional/agentic-system-architecture-review-agent/harnesses/copilot.agent.md +152 -0
  21. package/agents/cross-functional/agentic-system-architecture-review-agent/harnesses/cursor.agent.md +147 -0
  22. package/agents/cross-functional/agentic-system-architecture-review-agent/harnesses/gemini.agent.md +153 -0
  23. package/agents/cross-functional/agentic-system-architecture-review-agent/harnesses/kiro-cli.agent.json +5 -0
  24. package/agents/cross-functional/agentic-system-architecture-review-agent/harnesses/kiro-ide.agent.md +146 -0
  25. package/agents/cross-functional/agentic-system-architecture-review-agent/metadata.json +46 -0
  26. package/agents/typescript/typescript-maestro-agent/AGENT.md +1 -1
  27. package/agents/typescript/typescript-maestro-agent/harnesses/claude-code.agent.md +1 -1
  28. package/agents/typescript/typescript-maestro-agent/harnesses/codex.toml +1 -1
  29. package/agents/typescript/typescript-maestro-agent/harnesses/copilot.agent.md +1 -1
  30. package/agents/typescript/typescript-maestro-agent/harnesses/cursor.agent.md +1 -1
  31. package/agents/typescript/typescript-maestro-agent/harnesses/gemini.agent.md +1 -1
  32. package/agents/typescript/typescript-maestro-agent/harnesses/kiro-cli.agent.json +1 -1
  33. package/agents/typescript/typescript-maestro-agent/harnesses/kiro-ide.agent.md +1 -1
  34. package/agents/typescript/typescript-mcp-tool-contract-agent/AGENT.md +1 -1
  35. package/agents/typescript/typescript-mcp-tool-contract-agent/harnesses/claude-code.agent.md +1 -1
  36. package/agents/typescript/typescript-mcp-tool-contract-agent/harnesses/copilot.agent.md +1 -1
  37. package/agents/typescript/typescript-mcp-tool-contract-agent/harnesses/cursor.agent.md +1 -1
  38. package/agents/typescript/typescript-mcp-tool-contract-agent/harnesses/gemini.agent.md +1 -1
  39. package/agents/typescript/typescript-mcp-tool-contract-agent/harnesses/kiro-cli.agent.json +1 -1
  40. package/agents/typescript/typescript-mcp-tool-contract-agent/harnesses/kiro-ide.agent.md +1 -1
  41. package/catalog/AGENTS.md +2 -1
  42. package/catalog/agents.json +71 -0
  43. package/catalog/asset-integrity.json +1639 -92
  44. package/catalog/index.json +3 -2
  45. package/catalog/install-roles.json +24 -3
  46. package/catalog/model-assignments.json +66 -0
  47. package/catalog/mods.json +131 -0
  48. package/catalog/skill-manifest.json +134 -8
  49. package/catalog/skills.json +89 -0
  50. package/mods/README.md +220 -0
  51. package/mods/audit-trail/README.md +70 -0
  52. package/mods/audit-trail/bin/hook.mjs +65 -0
  53. package/mods/audit-trail/claude-code/UNSUPPORTED.md +11 -0
  54. package/mods/audit-trail/claude-code/settings.hooks.json +14 -0
  55. package/mods/audit-trail/codex/hooks.json +14 -0
  56. package/mods/audit-trail/kiro/UNSUPPORTED.md +7 -0
  57. package/mods/audit-trail/kiro/audit-trail-post-tool-use-hook.json +14 -0
  58. package/mods/audit-trail/lib/common.mjs +213 -0
  59. package/mods/audit-trail/lib/core.mjs +50 -0
  60. package/mods/audit-trail/lib/runtime.mjs +140 -0
  61. package/mods/audit-trail/mod.toml +37 -0
  62. package/mods/blast-radius-guard/.claude-plugin/plugin.json +5 -0
  63. package/mods/blast-radius-guard/README.md +53 -0
  64. package/mods/blast-radius-guard/bin/hook.mjs +18 -0
  65. package/mods/blast-radius-guard/claude-code/settings.hooks.json +14 -0
  66. package/mods/blast-radius-guard/codex/UNSUPPORTED.md +7 -0
  67. package/mods/blast-radius-guard/codex/hooks.json +14 -0
  68. package/mods/blast-radius-guard/hooks/hooks.json +5 -0
  69. package/mods/blast-radius-guard/hooks/register.test.ts +97 -0
  70. package/mods/blast-radius-guard/hooks/register.ts +13 -0
  71. package/mods/blast-radius-guard/kiro/UNSUPPORTED.md +7 -0
  72. package/mods/blast-radius-guard/kiro/blast-radius-guard-pre-tool-use-hook.json +14 -0
  73. package/mods/blast-radius-guard/lib/common.mjs +213 -0
  74. package/mods/blast-radius-guard/lib/core.mjs +66 -0
  75. package/mods/blast-radius-guard/lib/patterns.mjs +102 -0
  76. package/mods/blast-radius-guard/lib/runtime.mjs +140 -0
  77. package/mods/blast-radius-guard/mod.toml +34 -0
  78. package/mods/blast-radius-guard/patterns.json +101 -0
  79. package/mods/context-burn/.claude-plugin/plugin.json +5 -0
  80. package/mods/context-burn/README.md +66 -0
  81. package/mods/context-burn/bin/hook.mjs +38 -0
  82. package/mods/context-burn/claude-code/UNSUPPORTED.md +7 -0
  83. package/mods/context-burn/claude-code/settings.hooks.json +24 -0
  84. package/mods/context-burn/codex/UNSUPPORTED.md +7 -0
  85. package/mods/context-burn/codex/hooks.json +24 -0
  86. package/mods/context-burn/hooks/hooks.json +5 -0
  87. package/mods/context-burn/hooks/register.test.ts +151 -0
  88. package/mods/context-burn/hooks/register.ts +35 -0
  89. package/mods/context-burn/kiro/UNSUPPORTED.md +7 -0
  90. package/mods/context-burn/kiro/context-burn-post-tool-use-hook.json +14 -0
  91. package/mods/context-burn/kiro/context-burn-session-start-hook.json +14 -0
  92. package/mods/context-burn/lib/common.mjs +213 -0
  93. package/mods/context-burn/lib/core.mjs +79 -0
  94. package/mods/context-burn/lib/runtime.mjs +140 -0
  95. package/mods/context-burn/mod.toml +37 -0
  96. package/mods/live-guard-gate/.claude-plugin/plugin.json +5 -0
  97. package/mods/live-guard-gate/README.md +43 -0
  98. package/mods/live-guard-gate/bin/hook.mjs +12 -0
  99. package/mods/live-guard-gate/claude-code/settings.hooks.json +14 -0
  100. package/mods/live-guard-gate/codex/UNSUPPORTED.md +7 -0
  101. package/mods/live-guard-gate/codex/hooks.json +14 -0
  102. package/mods/live-guard-gate/hooks/hooks.json +5 -0
  103. package/mods/live-guard-gate/hooks/register.test.ts +59 -0
  104. package/mods/live-guard-gate/hooks/register.ts +11 -0
  105. package/mods/live-guard-gate/kiro/UNSUPPORTED.md +7 -0
  106. package/mods/live-guard-gate/kiro/live-guard-gate-pre-tool-use-hook.json +14 -0
  107. package/mods/live-guard-gate/lib/common.mjs +213 -0
  108. package/mods/live-guard-gate/lib/core.mjs +24 -0
  109. package/mods/live-guard-gate/lib/live-agents.mjs +65 -0
  110. package/mods/live-guard-gate/lib/patterns.mjs +523 -0
  111. package/mods/live-guard-gate/lib/runtime.mjs +140 -0
  112. package/mods/live-guard-gate/mod.toml +34 -0
  113. package/mods/live-guard-gate/patterns.json +522 -0
  114. package/mods/secret-redactor/.claude-plugin/plugin.json +5 -0
  115. package/mods/secret-redactor/README.md +86 -0
  116. package/mods/secret-redactor/bin/hook.mjs +35 -0
  117. package/mods/secret-redactor/claude-code/UNSUPPORTED.md +7 -0
  118. package/mods/secret-redactor/claude-code/settings.hooks.json +24 -0
  119. package/mods/secret-redactor/codex/UNSUPPORTED.md +11 -0
  120. package/mods/secret-redactor/codex/hooks.json +14 -0
  121. package/mods/secret-redactor/hooks/hooks.json +5 -0
  122. package/mods/secret-redactor/hooks/register.test.ts +150 -0
  123. package/mods/secret-redactor/hooks/register.ts +19 -0
  124. package/mods/secret-redactor/kiro/UNSUPPORTED.md +11 -0
  125. package/mods/secret-redactor/kiro/secret-redactor-pre-tool-use-hook.json +14 -0
  126. package/mods/secret-redactor/lib/common.mjs +213 -0
  127. package/mods/secret-redactor/lib/core.mjs +61 -0
  128. package/mods/secret-redactor/lib/patterns.mjs +75 -0
  129. package/mods/secret-redactor/lib/runtime.mjs +140 -0
  130. package/mods/secret-redactor/mod.toml +43 -0
  131. package/mods/secret-redactor/patterns.json +74 -0
  132. package/package.json +9 -4
  133. package/plugins/vanguard-frontier-agentic/.codex-plugin/plugin.json +1 -1
  134. package/powers/vanguard-generic/POWER.md +6 -6
  135. package/powers/vanguard-kubernetes/POWER.md +1 -1
  136. package/powers/vanguard-multi-cloud/POWER.md +1 -1
  137. package/schemas/agentic-handoff.schema.json +443 -0
  138. package/scripts/generate-kiro-powers.mjs +17 -6
  139. package/scripts/generate-mods.mjs +784 -0
  140. package/scripts/mods/common.mjs +213 -0
  141. package/scripts/mods/runtime.mjs +140 -0
  142. package/scripts/typescript_data/agents/00-typescript-maestro-agent.json +2 -2
  143. package/scripts/typescript_data/agents/11-typescript-mcp-tool-contract-agent.json +4 -4
  144. package/skills/cross-functional/agentic-board-protocol/SKILL.md +85 -0
  145. package/skills/cross-functional/agentic-board-protocol/metadata.json +28 -0
  146. package/skills/cross-functional/agentic-board-protocol/references/decision-record.md +134 -0
  147. package/skills/cross-functional/agentic-board-protocol/references/handoff-envelope.md +208 -0
  148. package/skills/cross-functional/agentic-board-protocol/references/risk-tier-crosswalk.md +88 -0
  149. package/skills/cross-functional/agentic-board-protocol/references/stop-conditions.md +122 -0
  150. package/skills/cross-functional/agentic-board-protocol/references/value-case.md +159 -0
  151. package/skills/cross-functional/agentic-security-review/SKILL.md +78 -0
  152. package/skills/cross-functional/agentic-security-review/metadata.json +30 -0
  153. package/skills/cross-functional/agentic-security-review/references/identity-and-delegated-authorization.md +144 -0
  154. package/skills/cross-functional/agentic-security-review/references/supply-chain-and-provenance.md +111 -0
  155. package/skills/cross-functional/agentic-security-review/references/threat-model-owasp-asi.md +55 -0
  156. package/skills/cross-functional/agentic-security-review/references/tools-memory-and-data-reach.md +125 -0
  157. package/skills/cross-functional/agentic-security-review/references/workflow-and-output.md +210 -0
  158. package/skills/cross-functional/agentic-system-architecture-review/SKILL.md +74 -0
  159. package/skills/cross-functional/agentic-system-architecture-review/metadata.json +31 -0
  160. package/skills/cross-functional/agentic-system-architecture-review/references/delegation-and-handoff-review.md +107 -0
  161. package/skills/cross-functional/agentic-system-architecture-review/references/pattern-selection.md +81 -0
  162. package/skills/cross-functional/agentic-system-architecture-review/references/reliability-and-containment.md +86 -0
  163. package/skills/cross-functional/agentic-system-architecture-review/references/state-memory-and-durability.md +102 -0
  164. package/skills/cross-functional/agentic-system-architecture-review/references/workflow-and-output.md +135 -0
  165. package/skills/typescript/typescript-maestro/SKILL.md +1 -1
  166. package/skills/typescript/typescript-maestro/references/routing-taxonomy.md +1 -1
  167. package/skills/typescript/typescript-mcp-tool-contract/SKILL.md +1 -1
  168. package/tests/agentic-board-suite/_build_fixtures.py +1751 -0
  169. package/tests/agentic-board-suite/_build_harnesses.py +123 -0
  170. package/tests/agentic-board-suite/agentic_board_rules.py +857 -0
  171. package/tests/agentic-board-suite/fixtures/invalid/CH-PROPOSAL-LINK--challenge-names-a-later-envelope.json +244 -0
  172. package/tests/agentic-board-suite/fixtures/invalid/CH-PROPOSAL-LINK--dangling-challenge-beside-a-request.json +410 -0
  173. package/tests/agentic-board-suite/fixtures/invalid/CH-PROPOSAL-LINK--dangling-proposal.json +187 -0
  174. package/tests/agentic-board-suite/fixtures/invalid/CH-ROUND-COUNTED--round-two-declared-as-one.json +481 -0
  175. package/tests/agentic-board-suite/fixtures/invalid/CH-ROUND-COUNTED--self-declared-round.json +187 -0
  176. package/tests/agentic-board-suite/fixtures/invalid/DR-ALTERNATIVES--no-alternatives.json +340 -0
  177. package/tests/agentic-board-suite/fixtures/invalid/DR-CHALLENGE-COMPLETE--hard-gate-left-behind-by-proposer-swap.json +532 -0
  178. package/tests/agentic-board-suite/fixtures/invalid/DR-CHALLENGE-COMPLETE--hard-gate-left-unattached.json +480 -0
  179. package/tests/agentic-board-suite/fixtures/invalid/DR-CHALLENGE-COMPLETE--hard-gate-on-root-left-unattached.json +410 -0
  180. package/tests/agentic-board-suite/fixtures/invalid/DR-CHALLENGE-COMPLETE--late-challenge-before-record.json +410 -0
  181. package/tests/agentic-board-suite/fixtures/invalid/DR-CHALLENGE-COMPLETE--superseded-request-missed-earlier-challenge.json +565 -0
  182. package/tests/agentic-board-suite/fixtures/invalid/DR-CHALLENGE-PRECEDES--withdrawal-attached-before-it-was-sent.json +483 -0
  183. package/tests/agentic-board-suite/fixtures/invalid/DR-CHALLENGE-PRECEDES--withdrawal-descends-from-the-record.json +547 -0
  184. package/tests/agentic-board-suite/fixtures/invalid/DR-CHALLENGE-REQUIRED--r1-flag-without-challenge.json +349 -0
  185. package/tests/agentic-board-suite/fixtures/invalid/DR-CHALLENGE-REQUIRED--r2-without-challenge.json +339 -0
  186. package/tests/agentic-board-suite/fixtures/invalid/DR-CHALLENGE-REQUIRED--r3-no-flags-without-challenge.json +339 -0
  187. package/tests/agentic-board-suite/fixtures/invalid/DR-CHALLENGE-RESOLVES--dangling-challenge.json +347 -0
  188. package/tests/agentic-board-suite/fixtures/invalid/DR-CHALLENGE-TARGETS-PROPOSAL--challenge-of-requester-message.json +415 -0
  189. package/tests/agentic-board-suite/fixtures/invalid/DR-CLASS-FROM-ROOT--root-declares-no-class.json +345 -0
  190. package/tests/agentic-board-suite/fixtures/invalid/DR-CLASS-FROM-ROOT--root-declares-other-class.json +346 -0
  191. package/tests/agentic-board-suite/fixtures/invalid/DR-DESIGNATED-CHALLENGER--designated-challenger-only-on-the-framing.json +346 -0
  192. package/tests/agentic-board-suite/fixtures/invalid/DR-DESIGNATED-CHALLENGER--investment-without-finance.json +436 -0
  193. package/tests/agentic-board-suite/fixtures/invalid/DR-DESIGNATED-CHALLENGER--stopped-designated-challenge.json +348 -0
  194. package/tests/agentic-board-suite/fixtures/invalid/DR-HARD-GATE--conditional-over-hard-gate.json +357 -0
  195. package/tests/agentic-board-suite/fixtures/invalid/DR-HARD-GATE--unresolved-hard-gate.json +357 -0
  196. package/tests/agentic-board-suite/fixtures/invalid/DR-NO-APPROVE-OVER-DISSENT--approve-over-a-stopped-challenge.json +413 -0
  197. package/tests/agentic-board-suite/fixtures/invalid/DR-NO-APPROVE-OVER-DISSENT--approve-over-dissent.json +346 -0
  198. package/tests/agentic-board-suite/fixtures/invalid/DR-ONE-REQUEST--re-ask-without-supersedes.json +426 -0
  199. package/tests/agentic-board-suite/fixtures/invalid/DR-ONE-REQUEST--request-superseded-twice.json +581 -0
  200. package/tests/agentic-board-suite/fixtures/invalid/DR-ONE-REQUEST--supersedes-a-challenge.json +427 -0
  201. package/tests/agentic-board-suite/fixtures/invalid/DR-ONE-REQUEST--supersedes-a-dangling-id.json +427 -0
  202. package/tests/agentic-board-suite/fixtures/invalid/DR-ONE-REQUEST--supersedes-a-later-request.json +500 -0
  203. package/tests/agentic-board-suite/fixtures/invalid/DR-ONE-REQUEST--superseding-request-from-another-proposer.json +621 -0
  204. package/tests/agentic-board-suite/fixtures/invalid/DR-ONE-REQUEST--supersession-cycle.json +501 -0
  205. package/tests/agentic-board-suite/fixtures/invalid/DR-OWNER-FROM-ROOT--agent-opens-decision-path.json +480 -0
  206. package/tests/agentic-board-suite/fixtures/invalid/DR-OWNER-FROM-ROOT--owner-is-the-requester.json +273 -0
  207. package/tests/agentic-board-suite/fixtures/invalid/DR-OWNER-FROM-ROOT--request-to-later-sorting-non-owner.json +273 -0
  208. package/tests/agentic-board-suite/fixtures/invalid/DR-OWNER-FROM-ROOT--request-to-non-owner.json +273 -0
  209. package/tests/agentic-board-suite/fixtures/invalid/DR-OWNER-FROM-ROOT--root-names-no-owner.json +341 -0
  210. package/tests/agentic-board-suite/fixtures/invalid/DR-PROPOSER-IS-SENDER--challenger-assembles-request.json +337 -0
  211. package/tests/agentic-board-suite/fixtures/invalid/DR-PROPOSER-NOT-CHALLENGER--self-challenge.json +411 -0
  212. package/tests/agentic-board-suite/fixtures/invalid/DR-RISK-CARRIED--concurrent-higher-tier-envelope.json +403 -0
  213. package/tests/agentic-board-suite/fixtures/invalid/DR-RISK-CARRIED--r5-decided-through-lower-tier-request.json +433 -0
  214. package/tests/agentic-board-suite/fixtures/invalid/DR-RISK-CARRIED--request-drops-materiality-flags.json +479 -0
  215. package/tests/agentic-board-suite/fixtures/invalid/DR-RISK-CARRIED--risk-raised-after-request-before-decision.json +403 -0
  216. package/tests/agentic-board-suite/fixtures/invalid/DR-TO-PRINCIPAL--request-to-agent.json +272 -0
  217. package/tests/agentic-board-suite/fixtures/invalid/DR-UNRESOLVED-DISSENT--dissent-dropped.json +341 -0
  218. package/tests/agentic-board-suite/fixtures/invalid/DR-UNRESOLVED-DISSENT--stopped-challenge-recorded-withdrawn.json +408 -0
  219. package/tests/agentic-board-suite/fixtures/invalid/DR-UNRESOLVED-DISSENT--unresolved-without-dissent.json +341 -0
  220. package/tests/agentic-board-suite/fixtures/invalid/DR-VALUE-CASE-REQUIRED--investment-without-value-case.json +353 -0
  221. package/tests/agentic-board-suite/fixtures/invalid/DRC-AFTER-REQUEST--decided-before-request.json +408 -0
  222. package/tests/agentic-board-suite/fixtures/invalid/DRC-AFTER-REQUEST--request-descends-from-its-record.json +408 -0
  223. package/tests/agentic-board-suite/fixtures/invalid/DRC-APPROVAL-STATE--state-contradicts-outcome.json +346 -0
  224. package/tests/agentic-board-suite/fixtures/invalid/DRC-CO-SIGN-BINDING--co-sign-approves-a-redesign.json +433 -0
  225. package/tests/agentic-board-suite/fixtures/invalid/DRC-CO-SIGN-BINDING--co-sign-contradicts-outcome.json +433 -0
  226. package/tests/agentic-board-suite/fixtures/invalid/DRC-CO-SIGN-BINDING--co-sign-does-not-descend-from-its-record.json +499 -0
  227. package/tests/agentic-board-suite/fixtures/invalid/DRC-CO-SIGN-BINDING--co-sign-is-the-parent-of-its-record.json +500 -0
  228. package/tests/agentic-board-suite/fixtures/invalid/DRC-CO-SIGN-BINDING--co-sign-names-another-approver.json +438 -0
  229. package/tests/agentic-board-suite/fixtures/invalid/DRC-CO-SIGN-BINDING--co-sign-nobody-asked-for.json +421 -0
  230. package/tests/agentic-board-suite/fixtures/invalid/DRC-CO-SIGN-BINDING--co-sign-sent-before-the-record.json +499 -0
  231. package/tests/agentic-board-suite/fixtures/invalid/DRC-CO-SIGNED--decision-in-force-not-co-signed.json +591 -0
  232. package/tests/agentic-board-suite/fixtures/invalid/DRC-CO-SIGNED--later-sorting-second-approver-never-signs.json +359 -0
  233. package/tests/agentic-board-suite/fixtures/invalid/DRC-CO-SIGNED--named-second-approver-never-signs.json +359 -0
  234. package/tests/agentic-board-suite/fixtures/invalid/DRC-COMPLETED--record-left-dispatched.json +346 -0
  235. package/tests/agentic-board-suite/fixtures/invalid/DRC-DECIDER-IS-ADDRESSEE--decided-by-non-addressee.json +408 -0
  236. package/tests/agentic-board-suite/fixtures/invalid/DRC-DECIDER-IS-ADDRESSEE--earlier-sorting-non-addressee-decides.json +408 -0
  237. package/tests/agentic-board-suite/fixtures/invalid/DRC-DECIDER-IS-SENDER--relayed-decision.json +408 -0
  238. package/tests/agentic-board-suite/fixtures/invalid/DRC-HARD-GATE-ACCEPTANCE--override-without-acceptance.json +356 -0
  239. package/tests/agentic-board-suite/fixtures/invalid/DRC-HARD-GATE-ACCEPTANCE--same-round-withdrawal.json +423 -0
  240. package/tests/agentic-board-suite/fixtures/invalid/DRC-HARD-GATE-ACCEPTANCE--stopped-over-cap-withdrawal.json +623 -0
  241. package/tests/agentic-board-suite/fixtures/invalid/DRC-HARD-GATE-ACCEPTANCE--unrelated-withdrawal-does-not-clear-gate.json +482 -0
  242. package/tests/agentic-board-suite/fixtures/invalid/DRC-HARD-GATE-ACCEPTANCE--withdrawal-names-an-undelivered-envelope.json +482 -0
  243. package/tests/agentic-board-suite/fixtures/invalid/DRC-HARD-GATE-ACCEPTANCE--withdrawal-on-another-proposers-revision.json +600 -0
  244. package/tests/agentic-board-suite/fixtures/invalid/DRC-NOT-REQUESTER--second-approver-is-requester.json +433 -0
  245. package/tests/agentic-board-suite/fixtures/invalid/DRC-ONE-RECORD--contradicting-records.json +416 -0
  246. package/tests/agentic-board-suite/fixtures/invalid/DRC-ONE-RECORD--duplicate-co-signature.json +507 -0
  247. package/tests/agentic-board-suite/fixtures/invalid/DRC-PRINCIPAL-SOURCE--agent-writes-decision.json +345 -0
  248. package/tests/agentic-board-suite/fixtures/invalid/DRC-REQUEST-BINDING--points-at-challenge.json +346 -0
  249. package/tests/agentic-board-suite/fixtures/invalid/DRC-REQUEST-BINDING--record-names-a-missing-request.json +346 -0
  250. package/tests/agentic-board-suite/fixtures/invalid/DRC-REQUEST-BINDING--request-edited-after-decision.json +346 -0
  251. package/tests/agentic-board-suite/fixtures/invalid/DRC-SECOND-APPROVER--r5-request-decided-on-lower-tier-branch.json +418 -0
  252. package/tests/agentic-board-suite/fixtures/invalid/DRC-SECOND-APPROVER--r5-single-approver.json +354 -0
  253. package/tests/agentic-board-suite/fixtures/invalid/DRC-SECOND-APPROVER--second-approver-is-decider.json +359 -0
  254. package/tests/agentic-board-suite/fixtures/invalid/HO-AGENT-NO-APPROVAL--agent-claims-approval.json +132 -0
  255. package/tests/agentic-board-suite/fixtures/invalid/HO-APPROVAL-ONLY-ON-RECORD--principal-delegate-claims-approval.json +132 -0
  256. package/tests/agentic-board-suite/fixtures/invalid/HO-ATTEN-ACTIONS--child-widens-actions.json +345 -0
  257. package/tests/agentic-board-suite/fixtures/invalid/HO-ATTEN-BUDGET--child-raises-limit.json +132 -0
  258. package/tests/agentic-board-suite/fixtures/invalid/HO-ATTEN-BUDGET--currency-changed.json +132 -0
  259. package/tests/agentic-board-suite/fixtures/invalid/HO-BLOCK-AS-CHALLENGE--block-sent-as-return.json +184 -0
  260. package/tests/agentic-board-suite/fixtures/invalid/HO-CHAIN-CUSTODY--parent-sender-continues-unstopped.json +187 -0
  261. package/tests/agentic-board-suite/fixtures/invalid/HO-CHAIN-CUSTODY--reply-from-outside-chain.json +132 -0
  262. package/tests/agentic-board-suite/fixtures/invalid/HO-CHAIN-PARENT--hop-skips.json +132 -0
  263. package/tests/agentic-board-suite/fixtures/invalid/HO-CHAIN-TIME--sent-before-parent.json +132 -0
  264. package/tests/agentic-board-suite/fixtures/invalid/HO-DESTINATION-TIER--delegate-to-live-guard.json +132 -0
  265. package/tests/agentic-board-suite/fixtures/invalid/HO-DESTINATION-TIER--delegate-to-untiered-agent.json +132 -0
  266. package/tests/agentic-board-suite/fixtures/invalid/HO-ESCALATE-TO-PRINCIPAL--escalate-to-agent.json +131 -0
  267. package/tests/agentic-board-suite/fixtures/invalid/HO-ESCALATE-TO-PRINCIPAL--escalated-delegate-to-agent.json +132 -0
  268. package/tests/agentic-board-suite/fixtures/invalid/HO-MONO-CLASS--classification-lowered.json +346 -0
  269. package/tests/agentic-board-suite/fixtures/invalid/HO-MONO-DEADLINE--deadline-extended.json +132 -0
  270. package/tests/agentic-board-suite/fixtures/invalid/HO-MONO-MATERIALITY--flag-dropped.json +434 -0
  271. package/tests/agentic-board-suite/fixtures/invalid/HO-MONO-MAX-HOPS--max-hops-raised.json +132 -0
  272. package/tests/agentic-board-suite/fixtures/invalid/HO-MONO-PROHIBITIONS--prohibition-dropped.json +131 -0
  273. package/tests/agentic-board-suite/fixtures/invalid/HO-MONO-SPENT--one-counter-decreases.json +346 -0
  274. package/tests/agentic-board-suite/fixtures/invalid/HO-MONO-SPENT--spent-counter-reset.json +346 -0
  275. package/tests/agentic-board-suite/fixtures/invalid/HO-MONO-TIER--tier-lowered.json +346 -0
  276. package/tests/agentic-board-suite/fixtures/invalid/HO-NO-EXECUTION--deploy-authorized.json +133 -0
  277. package/tests/agentic-board-suite/fixtures/invalid/HO-NO-SELF-ADDRESS--challenge-to-self.json +187 -0
  278. package/tests/agentic-board-suite/fixtures/invalid/HO-ONE-CORRELATION--two-correlations.json +132 -0
  279. package/tests/agentic-board-suite/fixtures/invalid/HO-ONE-ROOT--second-root-beside-a-decision.json +410 -0
  280. package/tests/agentic-board-suite/fixtures/invalid/HO-ONE-ROOT--two-roots.json +190 -0
  281. package/tests/agentic-board-suite/fixtures/invalid/HO-PAYLOAD-CHALLENGE--challenge-without-payload.json +180 -0
  282. package/tests/agentic-board-suite/fixtures/invalid/HO-PAYLOAD-DECISION-RECORD--record-without-payload.json +331 -0
  283. package/tests/agentic-board-suite/fixtures/invalid/HO-PAYLOAD-DECISION-REQUEST--request-without-payload.json +324 -0
  284. package/tests/agentic-board-suite/fixtures/invalid/HO-PAYLOAD-ESCALATE--escalate-without-payload.json +128 -0
  285. package/tests/agentic-board-suite/fixtures/invalid/HO-PAYLOAD-EXCLUSIVE--return-with-escalation.json +136 -0
  286. package/tests/agentic-board-suite/fixtures/invalid/HO-PAYLOAD-RETURN--return-without-verdict.json +124 -0
  287. package/tests/agentic-board-suite/fixtures/invalid/HO-REASON-HAS-STATUS--reason-on-completed.json +134 -0
  288. package/tests/agentic-board-suite/fixtures/invalid/HO-RETURN-EVIDENCE--pass-on-inference-only.json +132 -0
  289. package/tests/agentic-board-suite/fixtures/invalid/HO-RETURN-EVIDENCE--pass-over-blocking-gap.json +137 -0
  290. package/tests/agentic-board-suite/fixtures/invalid/HO-RETURN-EVIDENCE--pass-with-no-evidence.json +127 -0
  291. package/tests/agentic-board-suite/fixtures/invalid/HO-RETURN-TO-SENDER--return-skips-the-delegator.json +185 -0
  292. package/tests/agentic-board-suite/fixtures/invalid/HO-ROOT-PARENT--root-with-parent.json +132 -0
  293. package/tests/agentic-board-suite/fixtures/invalid/HO-SCHEMA--unknown-credential-field.json +133 -0
  294. package/tests/agentic-board-suite/fixtures/invalid/HO-STOP-NOTE--conflict-without-note.json +133 -0
  295. package/tests/agentic-board-suite/fixtures/invalid/HO-STOPPED-HAS-REASON--stopped-without-reason.json +132 -0
  296. package/tests/agentic-board-suite/fixtures/invalid/HO-UNIQUE-TASK-ID--duplicate-task-id.json +198 -0
  297. package/tests/agentic-board-suite/fixtures/invalid/STOP-BUDGET--budget-undeclared.json +123 -0
  298. package/tests/agentic-board-suite/fixtures/invalid/STOP-BUDGET--return-overspent.json +132 -0
  299. package/tests/agentic-board-suite/fixtures/invalid/STOP-CHALLENGE-ROUNDS--revisions-carried-in-rebuttal-challenges.json +461 -0
  300. package/tests/agentic-board-suite/fixtures/invalid/STOP-CHALLENGE-ROUNDS--third-round.json +454 -0
  301. package/tests/agentic-board-suite/fixtures/invalid/STOP-CHALLENGE-ROUNDS--third-version-by-return-naming-the-original.json +461 -0
  302. package/tests/agentic-board-suite/fixtures/invalid/STOP-DEADLINE--sent-after-deadline.json +132 -0
  303. package/tests/agentic-board-suite/fixtures/invalid/STOP-DEPTH--depth-undeclared.json +182 -0
  304. package/tests/agentic-board-suite/fixtures/invalid/STOP-INSTRUCTION-BAIT--claimed-approval-dispatched.json +132 -0
  305. package/tests/agentic-board-suite/fixtures/invalid/STOP-LIVE-GUARD--mutation-dispatched.json +130 -0
  306. package/tests/agentic-board-suite/fixtures/invalid/STOP-MISSING-EVIDENCE--blocking-gap-dispatched.json +137 -0
  307. package/tests/agentic-board-suite/fixtures/invalid/STOP-MISSING-EVIDENCE--decision-request-blocking-gap.json +351 -0
  308. package/tests/agentic-board-suite/fixtures/invalid/STOP-ROUTING-LOOP--exchanges-on-the-original-envelope.json +381 -0
  309. package/tests/agentic-board-suite/fixtures/invalid/STOP-ROUTING-LOOP--loop-undeclared.json +182 -0
  310. package/tests/agentic-board-suite/fixtures/invalid/STOP-ROUTING-LOOP--revisit-to-challenger-of-another-party.json +256 -0
  311. package/tests/agentic-board-suite/fixtures/invalid/STOP-ROUTING-LOOP--second-revisit-to-challenger.json +540 -0
  312. package/tests/agentic-board-suite/fixtures/invalid/STOP-TERMINAL--challenge-answers-stopped-delegate.json +247 -0
  313. package/tests/agentic-board-suite/fixtures/invalid/STOP-TERMINAL--decision-on-escalated-request.json +353 -0
  314. package/tests/agentic-board-suite/fixtures/invalid/STOP-TERMINAL--decision-on-stopped-request.json +422 -0
  315. package/tests/agentic-board-suite/fixtures/invalid/STOP-TERMINAL--reply-to-stopped-delegate.json +244 -0
  316. package/tests/agentic-board-suite/fixtures/invalid/VC-BENEFIT-CEILING--benefit-above-baseline.json +436 -0
  317. package/tests/agentic-board-suite/fixtures/invalid/VC-COST-SIGN--negative-risk-loss.json +436 -0
  318. package/tests/agentic-board-suite/fixtures/invalid/VC-COST-SIGN--risk-loss-low-minus-one.json +436 -0
  319. package/tests/agentic-board-suite/fixtures/invalid/VC-COUNTERFACTUALS--single-agent-counterfactual-missing.json +427 -0
  320. package/tests/agentic-board-suite/fixtures/invalid/VC-COUNTERFACTUALS--workflow-counterfactual-missing.json +427 -0
  321. package/tests/agentic-board-suite/fixtures/invalid/VC-NAV-ARITHMETIC--nav-off-by-one.json +436 -0
  322. package/tests/agentic-board-suite/fixtures/invalid/VC-ORDER--inverted-range.json +436 -0
  323. package/tests/agentic-board-suite/fixtures/invalid/VC-OVERSIGHT--free-oversight.json +436 -0
  324. package/tests/agentic-board-suite/fixtures/invalid/VC-PROMOTION--measured-but-not-incremental.json +436 -0
  325. package/tests/agentic-board-suite/fixtures/invalid/VC-PROMOTION--promoted-on-estimate.json +436 -0
  326. package/tests/agentic-board-suite/fixtures/invalid/VC-RECOMMEND-INCREMENTAL--recommend-non-incremental.json +436 -0
  327. package/tests/agentic-board-suite/fixtures/invalid/VC-RUNS-BOUND--more-successes-than-runs.json +436 -0
  328. package/tests/agentic-board-suite/fixtures/invalid/VC-SYNTHETIC--synthetic-claims-measured.json +436 -0
  329. package/tests/agentic-board-suite/fixtures/invalid/VC-UNIT-COST--no-successes-nonzero-cost.json +436 -0
  330. package/tests/agentic-board-suite/fixtures/invalid/VC-UNIT-COST--unit-cost-mismatch.json +436 -0
  331. package/tests/agentic-board-suite/fixtures/valid/v01-r0-single-review.json +129 -0
  332. package/tests/agentic-board-suite/fixtures/valid/v01x-block-return-on-inference.json +125 -0
  333. package/tests/agentic-board-suite/fixtures/valid/v01x-block-return-to-principal.json +125 -0
  334. package/tests/agentic-board-suite/fixtures/valid/v01x-pass-return-documentation-evidence.json +129 -0
  335. package/tests/agentic-board-suite/fixtures/valid/v01x-pass-return-mixed-evidence.json +133 -0
  336. package/tests/agentic-board-suite/fixtures/valid/v01x-pass-return-nonblocking-gap.json +134 -0
  337. package/tests/agentic-board-suite/fixtures/valid/v02-r2-architecture-dissent.json +343 -0
  338. package/tests/agentic-board-suite/fixtures/valid/v02x-challenge-after-decision.json +407 -0
  339. package/tests/agentic-board-suite/fixtures/valid/v02x-challenge-after-record-same-second.json +464 -0
  340. package/tests/agentic-board-suite/fixtures/valid/v02x-redispatch-after-cured-stop.json +534 -0
  341. package/tests/agentic-board-suite/fixtures/valid/v02x-security-proposal-returned-to-its-delegator.json +407 -0
  342. package/tests/agentic-board-suite/fixtures/valid/v03-investment-loses-to-workflow.json +433 -0
  343. package/tests/agentic-board-suite/fixtures/valid/v04-r3-hard-gate-risk-acceptance.json +354 -0
  344. package/tests/agentic-board-suite/fixtures/valid/v04x-live-hard-gate-recommend-escalate.json +354 -0
  345. package/tests/agentic-board-suite/fixtures/valid/v04x-live-hard-gate-recommend-reject.json +354 -0
  346. package/tests/agentic-board-suite/fixtures/valid/v05-live-guard-escalation.json +129 -0
  347. package/tests/agentic-board-suite/fixtures/valid/v06-r5-dual-approval.json +430 -0
  348. package/tests/agentic-board-suite/fixtures/valid/v06x-co-sign-same-second.json +430 -0
  349. package/tests/agentic-board-suite/fixtures/valid/v06x-re-asked-r5-decision-co-signed-again.json +662 -0
  350. package/tests/agentic-board-suite/fixtures/valid/v06x-unsigned-approve-superseded-by-co-signed-reject.json +588 -0
  351. package/tests/agentic-board-suite/fixtures/valid/v07-depth-and-routing-loop.json +180 -0
  352. package/tests/agentic-board-suite/fixtures/valid/v08-budget-exhausted.json +186 -0
  353. package/tests/agentic-board-suite/fixtures/valid/v09-instruction-bait.json +131 -0
  354. package/tests/agentic-board-suite/fixtures/valid/v09x-requester-restates-after-bait.json +251 -0
  355. package/tests/agentic-board-suite/fixtures/valid/v10-r1-optional-challenge.json +184 -0
  356. package/tests/agentic-board-suite/fixtures/valid/v10x-report-up-after-challenge.json +246 -0
  357. package/tests/agentic-board-suite/fixtures/valid/v11-two-rounds-hard-gate-withdrawn.json +478 -0
  358. package/tests/agentic-board-suite/fixtures/valid/v11x-designated-challenge-first-answer-over-cap.json +598 -0
  359. package/tests/agentic-board-suite/fixtures/valid/v11x-interleaved-challenger-round-two.json +604 -0
  360. package/tests/agentic-board-suite/fixtures/valid/v11x-proposal-handed-to-the-challenger-capped.json +860 -0
  361. package/tests/agentic-board-suite/fixtures/valid/v11x-round-three-escalation-path.json +747 -0
  362. package/tests/agentic-board-suite/fixtures/valid/v11x-same-second-round-two.json +478 -0
  363. package/tests/agentic-board-suite/fixtures/valid/v11x-two-findings-one-round.json +549 -0
  364. package/tests/agentic-board-suite/fixtures/valid/v12-superseded-request.json +497 -0
  365. package/tests/agentic-board-suite/fixtures/valid/v12x-challenge-after-the-first-decision.json +566 -0
  366. package/tests/agentic-board-suite/fixtures/valid/v12x-late-challenge-cured-by-supersede.json +566 -0
  367. package/tests/agentic-board-suite/fixtures/valid/v12x-supersede-in-the-same-second.json +497 -0
  368. package/tests/agentic-board-suite/test_agentic_board.py +502 -0
  369. package/tests/fixtures/README.md +1 -1
  370. package/tests/fuzz-properties.test.mjs +254 -0
  371. package/tests/mods.test.mjs +768 -0
  372. package/tests/validate-agent-tool-tiers.py +7 -5
  373. package/tests/validate-asset-integrity.py +1 -0
  374. package/tests/validate-mods.py +821 -0
@@ -0,0 +1,34 @@
1
+ [mod]
2
+ id = "live-guard-gate"
3
+ name = "Live Guard Gate"
4
+ description = "Asks before live cloud mutations and names the guard agent that should review them."
5
+ version = "1.0.0"
6
+ reach_level = 0
7
+ events = ["PreToolUse"]
8
+
9
+ [footprint]
10
+ env_reads = []
11
+ file_writes = []
12
+ spawns = []
13
+ egress_hosts = []
14
+
15
+ [harnesses.claude-code]
16
+ supported = true
17
+ surfaces = ["native", "classic"]
18
+ events = ["PreToolUse"]
19
+
20
+ [harnesses.kiro]
21
+ supported = true
22
+ requires = ["node"]
23
+ events = ["PreToolUse"]
24
+
25
+ [harnesses.kiro.degraded]
26
+ PreToolUse = "Kiro documents no confirmation protocol or stdin field names; the whole payload is scanned and a hit is denied."
27
+
28
+ [harnesses.codex]
29
+ supported = true
30
+ requires = ["node"]
31
+ events = ["PreToolUse"]
32
+
33
+ [harnesses.codex.degraded]
34
+ PreToolUse = "Codex rejects ask; a hit is denied with a reason."
@@ -0,0 +1,522 @@
1
+ [
2
+ {
3
+ "id": "live-iac-terraform-pulumi",
4
+ "name": "Terraform/OpenTofu/Terragrunt/Pulumi state-changing command",
5
+ "description": "terraform|tofu|terragrunt apply|destroy|import|taint|untaint|force-unlock|state rm|mv|push; pulumi up|destroy|refresh|import|cancel. Cloud is not knowable from the command, so every IaC guard that explicitly covers Terraform/stacks is listed; consult the one for the target cloud.",
6
+ "regex": "(?:^|[^A-Za-z0-9_.-])(?:(?:terraform|tofu|terragrunt)(?![A-Za-z0-9_-])(?:[ \\t]+-[^ \\t\\r\\n;&|]+(?:[ \\t]+[^ \\t\\r\\n;&|-][^ \\t\\r\\n;&|]*)?){0,4}[ \\t]+(?:run-all[ \\t]+)?(?:apply|destroy|import|taint|untaint|force-unlock|state[ \\t]+(?:rm|mv|push))(?![^ \\t\\r\\n;&|)])|pulumi(?![A-Za-z0-9_-])(?:[ \\t]+-[^ \\t\\r\\n;&|]+(?:[ \\t]+[^ \\t\\r\\n;&|-][^ \\t\\r\\n;&|]*)?){0,4}[ \\t]+(?:up|destroy|refresh|import|cancel)(?![^ \\t\\r\\n;&|)]))",
7
+ "agents": [
8
+ "aws-live-iac-change-guard-agent",
9
+ "oci-live-resource-manager-stack-guard-agent",
10
+ "azure-live-arm-deployment-stack-guard-agent"
11
+ ],
12
+ "flags": "",
13
+ "context": [
14
+ "bash"
15
+ ]
16
+ },
17
+ {
18
+ "id": "live-aws-cloudformation-cdk",
19
+ "name": "CloudFormation / CDK mutation",
20
+ "description": "aws cloudformation create/update/delete-stack[-set], deploy, execute-change-set, update-termination-protection; cdk deploy|destroy|bootstrap.",
21
+ "regex": "(?:^|[^A-Za-z0-9_.-])(?:aws(?![A-Za-z0-9_-])(?=[^;&|\\n]*[ \\t]cloudformation[ \\t]+(?:create-stack|update-stack|delete-stack|create-stack-set|update-stack-set|delete-stack-set|deploy|execute-change-set|update-termination-protection)(?![^ \\t\\r\\n;&|)]))|cdk(?![A-Za-z0-9_-])(?=[^;&|\\n]*[ \\t](?:deploy|destroy|bootstrap)(?![^ \\t\\r\\n;&|)])))",
22
+ "agents": [
23
+ "aws-live-iac-change-guard-agent"
24
+ ],
25
+ "flags": "",
26
+ "context": [
27
+ "bash"
28
+ ]
29
+ },
30
+ {
31
+ "id": "live-aws-ecs",
32
+ "name": "aws ecs mutation",
33
+ "description": "aws ... ecs (create|delete|update|put|run|start|stop|register|deregister)-*.",
34
+ "regex": "(?:^|[^A-Za-z0-9_.-])aws(?![A-Za-z0-9_-])(?=[^;&|\\n]*[ \\t]ecs[ \\t]+(?:create|delete|update|put|run|start|stop|register|deregister)-[a-z0-9-]+(?![^ \\t\\r\\n;&|)]))",
35
+ "agents": [
36
+ "aws-live-ecs-rollout-guard-agent"
37
+ ],
38
+ "flags": "",
39
+ "context": [
40
+ "bash"
41
+ ]
42
+ },
43
+ {
44
+ "id": "live-aws-lambda-apigw-serverless",
45
+ "name": "Lambda / API Gateway / Serverless Framework release",
46
+ "description": "aws lambda (create|delete|update|publish|put|add|remove)-*; aws apigateway|apigatewayv2 (create|delete|update|put|import)-*; serverless|sls deploy|remove|rollback.",
47
+ "regex": "(?:^|[^A-Za-z0-9_.-])(?:aws(?![A-Za-z0-9_-])(?=[^;&|\\n]*[ \\t](?:lambda[ \\t]+(?:create|delete|update|publish|put|add|remove)|apigateway(?:v2)?[ \\t]+(?:create|delete|update|put|import))-[a-z0-9-]+(?![^ \\t\\r\\n;&|)]))|(?:serverless|sls)(?![A-Za-z0-9_-])(?=[^;&|\\n]*[ \\t](?:deploy|remove|rollback)(?![^ \\t\\r\\n;&|)])))",
48
+ "agents": [
49
+ "aws-live-serverless-release-guard-agent"
50
+ ],
51
+ "flags": "",
52
+ "context": [
53
+ "bash"
54
+ ]
55
+ },
56
+ {
57
+ "id": "live-aws-sam",
58
+ "name": "SAM deploy/delete",
59
+ "description": "sam deploy|delete. Both the serverless-release and IaC guards apply (SAM is CloudFormation-backed Lambda).",
60
+ "regex": "(?:^|[^A-Za-z0-9_.-])sam(?![A-Za-z0-9_-])(?=[^;&|\\n]*[ \\t](?:deploy|delete)(?![^ \\t\\r\\n;&|)]))",
61
+ "agents": [
62
+ "aws-live-serverless-release-guard-agent",
63
+ "aws-live-iac-change-guard-agent"
64
+ ],
65
+ "flags": "",
66
+ "context": [
67
+ "bash"
68
+ ]
69
+ },
70
+ {
71
+ "id": "live-azure-arm-stack",
72
+ "name": "az deployment / stack create|delete",
73
+ "description": "az deployment [sub|group|mg|tenant] create|delete and az stack [sub|group|mg] create|delete. what-if / validate / show / list are excluded.",
74
+ "regex": "(?:^|[^A-Za-z0-9_.-])az(?![A-Za-z0-9_-])(?=[^;&|\\n]*[ \\t](?:deployment|stack)[ \\t]+(?:(?:sub|group|mg|tenant)[ \\t]+)?(?:create|delete)(?![^ \\t\\r\\n;&|)]))",
75
+ "agents": [
76
+ "azure-live-arm-deployment-stack-guard-agent"
77
+ ],
78
+ "flags": "",
79
+ "context": [
80
+ "bash"
81
+ ]
82
+ },
83
+ {
84
+ "id": "live-azure-aks",
85
+ "name": "az aks mutation",
86
+ "description": "az aks create|delete|update|upgrade|scale|stop|start|rotate-certs|operation-abort and az aks nodepool add|delete|scale|update|upgrade|start|stop.",
87
+ "regex": "(?:^|[^A-Za-z0-9_.-])az(?![A-Za-z0-9_-])(?=[^;&|\\n]*[ \\t]aks[ \\t]+(?:(?:create|delete|update|upgrade|scale|stop|start|rotate-certs|operation-abort)|nodepool[ \\t]+(?:add|delete|scale|update|upgrade|start|stop))(?![^ \\t\\r\\n;&|)]))",
88
+ "agents": [
89
+ "azure-live-aks-rollout-guard-agent"
90
+ ],
91
+ "flags": "",
92
+ "context": [
93
+ "bash"
94
+ ]
95
+ },
96
+ {
97
+ "id": "live-azure-slot-swap",
98
+ "name": "az webapp/functionapp deployment slot swap",
99
+ "description": "az webapp|functionapp deployment slot swap.",
100
+ "regex": "(?:^|[^A-Za-z0-9_.-])az(?![A-Za-z0-9_-])(?=[^;&|\\n]*[ \\t](?:webapp|functionapp)[ \\t]+deployment[ \\t]+slot[ \\t]+swap(?![^ \\t\\r\\n;&|)]))",
101
+ "agents": [
102
+ "azure-live-app-service-slot-swap-guard-agent"
103
+ ],
104
+ "flags": "",
105
+ "context": [
106
+ "bash"
107
+ ]
108
+ },
109
+ {
110
+ "id": "live-azure-keyvault",
111
+ "name": "az keyvault delete/purge/rotate",
112
+ "description": "az keyvault delete|purge and az keyvault key|secret|certificate delete|purge|rotate.",
113
+ "regex": "(?:^|[^A-Za-z0-9_.-])az(?![A-Za-z0-9_-])(?=[^;&|\\n]*[ \\t]keyvault[ \\t]+(?:(?:delete|purge)|(?:key|secret|certificate)[ \\t]+(?:delete|purge|rotate))(?![^ \\t\\r\\n;&|)]))",
114
+ "agents": [
115
+ "azure-live-keyvault-rotation-purge-guard-agent"
116
+ ],
117
+ "flags": "",
118
+ "context": [
119
+ "bash"
120
+ ]
121
+ },
122
+ {
123
+ "id": "live-azure-role-assignment",
124
+ "name": "az role assignment/definition write",
125
+ "description": "az role assignment|definition create|update|delete.",
126
+ "regex": "(?:^|[^A-Za-z0-9_.-])az(?![A-Za-z0-9_-])(?=[^;&|\\n]*[ \\t]role[ \\t]+(?:assignment|definition)[ \\t]+(?:create|update|delete)(?![^ \\t\\r\\n;&|)]))",
127
+ "agents": [
128
+ "azure-live-entra-role-assignment-guard-agent"
129
+ ],
130
+ "flags": "",
131
+ "context": [
132
+ "bash"
133
+ ]
134
+ },
135
+ {
136
+ "id": "live-azure-budget",
137
+ "name": "az consumption budget write",
138
+ "description": "az consumption budget create|update|delete.",
139
+ "regex": "(?:^|[^A-Za-z0-9_.-])az(?![A-Za-z0-9_-])(?=[^;&|\\n]*[ \\t]consumption[ \\t]+budget[ \\t]+(?:create|update|delete)(?![^ \\t\\r\\n;&|)]))",
140
+ "agents": [
141
+ "azure-live-cost-budget-action-guard-agent"
142
+ ],
143
+ "flags": "",
144
+ "context": [
145
+ "bash"
146
+ ]
147
+ },
148
+ {
149
+ "id": "live-gcloud-gke",
150
+ "name": "gcloud container clusters/node-pools mutation",
151
+ "description": "gcloud container clusters|node-pools create|delete|update|upgrade|resize|rollback.",
152
+ "regex": "(?:^|[^A-Za-z0-9_.-])gcloud(?![A-Za-z0-9_-])(?=[^;&|\\n]*[ \\t]container[ \\t]+(?:clusters|node-pools)[ \\t]+(?:create|delete|update|upgrade|resize|rollback)(?![^ \\t\\r\\n;&|)]))",
153
+ "agents": [
154
+ "gcp-live-gke-rollout-guard-agent"
155
+ ],
156
+ "flags": "",
157
+ "context": [
158
+ "bash"
159
+ ]
160
+ },
161
+ {
162
+ "id": "live-gcloud-run",
163
+ "name": "gcloud run deploy / traffic / delete",
164
+ "description": "gcloud run deploy; gcloud run services update|update-traffic|delete|replace; gcloud run revisions delete.",
165
+ "regex": "(?:^|[^A-Za-z0-9_.-])gcloud(?![A-Za-z0-9_-])(?=[^;&|\\n]*[ \\t]run[ \\t]+(?:deploy|(?:services|revisions)[ \\t]+(?:update|update-traffic|delete|replace))(?![^ \\t\\r\\n;&|)]))",
166
+ "agents": [
167
+ "gcp-live-cloud-run-traffic-migration-guard-agent"
168
+ ],
169
+ "flags": "",
170
+ "context": [
171
+ "bash"
172
+ ]
173
+ },
174
+ {
175
+ "id": "live-gcloud-iam",
176
+ "name": "gcloud IAM binding / policy / SA key / org-policy mutation",
177
+ "description": "*-iam-policy-binding (add|remove|set), set-iam-policy, iam service-accounts keys create, iam roles create|update|delete, org-policies set-policy|delete.",
178
+ "regex": "(?:^|[^A-Za-z0-9_.-])gcloud(?![A-Za-z0-9_-])(?=[^;&|\\n]*[ \\t](?:(?:add|remove)-iam-policy-binding|set-iam-policy|iam[ \\t]+service-accounts[ \\t]+keys[ \\t]+create|iam[ \\t]+roles[ \\t]+(?:create|update|delete)|(?:resource-manager[ \\t]+)?org-policies[ \\t]+(?:set-policy|delete))(?![^ \\t\\r\\n;&|)]))",
179
+ "agents": [
180
+ "gcp-live-iam-policy-change-guard-agent"
181
+ ],
182
+ "flags": "",
183
+ "context": [
184
+ "bash"
185
+ ]
186
+ },
187
+ {
188
+ "id": "live-gcloud-kms",
189
+ "name": "gcloud kms key version destroy/disable",
190
+ "description": "gcloud kms keys versions destroy|disable.",
191
+ "regex": "(?:^|[^A-Za-z0-9_.-])gcloud(?![A-Za-z0-9_-])(?=[^;&|\\n]*[ \\t]kms[ \\t]+keys[ \\t]+versions[ \\t]+(?:destroy|disable)(?![^ \\t\\r\\n;&|)]))",
192
+ "agents": [
193
+ "gcp-live-kms-key-destruction-guard-agent"
194
+ ],
195
+ "flags": "",
196
+ "context": [
197
+ "bash"
198
+ ]
199
+ },
200
+ {
201
+ "id": "live-gcloud-billing-budget",
202
+ "name": "gcloud billing budgets write",
203
+ "description": "gcloud billing budgets create|update|delete.",
204
+ "regex": "(?:^|[^A-Za-z0-9_.-])gcloud(?![A-Za-z0-9_-])(?=[^;&|\\n]*[ \\t]billing[ \\t]+budgets[ \\t]+(?:create|update|delete)(?![^ \\t\\r\\n;&|)]))",
205
+ "agents": [
206
+ "gcp-live-cost-budget-action-guard-agent"
207
+ ],
208
+ "flags": "",
209
+ "context": [
210
+ "bash"
211
+ ]
212
+ },
213
+ {
214
+ "id": "live-bq-destructive",
215
+ "name": "bq rm / truncate",
216
+ "description": "bq rm|truncate (dataset/table deletion).",
217
+ "regex": "(?:^|[^A-Za-z0-9_.-])bq(?![A-Za-z0-9_-])(?=[^;&|\\n]*[ \\t](?:rm|truncate)(?![^ \\t\\r\\n;&|)]))",
218
+ "agents": [
219
+ "gcp-live-bigquery-dataset-deletion-guard-agent"
220
+ ],
221
+ "flags": "",
222
+ "context": [
223
+ "bash"
224
+ ]
225
+ },
226
+ {
227
+ "id": "live-k8s-rbac",
228
+ "name": "kubectl RBAC mutation",
229
+ "description": "kubectl|oc apply|create|delete|patch|replace|edit on role(s)/rolebinding(s)/clusterrole(s)/clusterrolebinding(s) given inline, or kubectl auth reconcile. Resources hidden inside -f manifests are not visible to a regex.",
230
+ "regex": "(?:^|[^A-Za-z0-9_.-])(?:kubectl|oc)(?![A-Za-z0-9_-])(?:[ \\t]+-[^ \\t\\r\\n;&|]+(?:[ \\t]+[^ \\t\\r\\n;&|-][^ \\t\\r\\n;&|]*)?){0,8}[ \\t]+(?:(?:apply|create|delete|patch|replace|edit))(?:[ \\t]+-[^ \\t\\r\\n;&|]+(?:[ \\t]+[^ \\t\\r\\n;&|-][^ \\t\\r\\n;&|]*)?){0,6}[ \\t]+(?:roles?|rolebindings?|clusterroles?|clusterrolebindings?)(?:\\.[a-z0-9.-]+)?(?:/|,|(?![^ \\t\\r\\n;&|)]))|(?:^|[^A-Za-z0-9_.-])(?:kubectl|oc)(?![A-Za-z0-9_-])(?:[ \\t]+-[^ \\t\\r\\n;&|]+(?:[ \\t]+[^ \\t\\r\\n;&|-][^ \\t\\r\\n;&|]*)?){0,8}[ \\t]+(?:auth[ \\t]+reconcile)(?![^ \\t\\r\\n;&|)])",
231
+ "agents": [
232
+ "kubernetes-live-rbac-mutation-guard-agent"
233
+ ],
234
+ "flags": "",
235
+ "context": [
236
+ "bash"
237
+ ]
238
+ },
239
+ {
240
+ "id": "live-k8s-network-policy",
241
+ "name": "kubectl NetworkPolicy / Cilium policy mutation",
242
+ "description": "kubectl|oc apply|create|delete|patch|replace|edit on networkpolicy/netpol/ciliumnetworkpolicy/cnp/ciliumclusterwidenetworkpolicy/ccnp/ciliumegressgatewaypolicy/cegp.",
243
+ "regex": "(?:^|[^A-Za-z0-9_.-])(?:kubectl|oc)(?![A-Za-z0-9_-])(?:[ \\t]+-[^ \\t\\r\\n;&|]+(?:[ \\t]+[^ \\t\\r\\n;&|-][^ \\t\\r\\n;&|]*)?){0,8}[ \\t]+(?:(?:apply|create|delete|patch|replace|edit))(?:[ \\t]+-[^ \\t\\r\\n;&|]+(?:[ \\t]+[^ \\t\\r\\n;&|-][^ \\t\\r\\n;&|]*)?){0,6}[ \\t]+(?:networkpolic(?:y|ies)|netpol|ciliumnetworkpolic(?:y|ies)|cnp|ciliumclusterwidenetworkpolic(?:y|ies)|ccnp|ciliumegressgatewaypolic(?:y|ies)|cegp)(?:\\.[a-z0-9.-]+)?(?:/|,|(?![^ \\t\\r\\n;&|)]))",
244
+ "agents": [
245
+ "kubernetes-live-network-policy-guard-agent"
246
+ ],
247
+ "flags": "",
248
+ "context": [
249
+ "bash"
250
+ ]
251
+ },
252
+ {
253
+ "id": "live-k8s-admission-policy",
254
+ "name": "kubectl admission policy / webhook / Kyverno mutation",
255
+ "description": "kubectl|oc apply|create|delete|patch|replace|edit on validating/mutatingwebhookconfiguration, validating/mutatingadmissionpolicy[binding], clusterpolicy/cpol, policyexception/polex.",
256
+ "regex": "(?:^|[^A-Za-z0-9_.-])(?:kubectl|oc)(?![A-Za-z0-9_-])(?:[ \\t]+-[^ \\t\\r\\n;&|]+(?:[ \\t]+[^ \\t\\r\\n;&|-][^ \\t\\r\\n;&|]*)?){0,8}[ \\t]+(?:(?:apply|create|delete|patch|replace|edit))(?:[ \\t]+-[^ \\t\\r\\n;&|]+(?:[ \\t]+[^ \\t\\r\\n;&|-][^ \\t\\r\\n;&|]*)?){0,6}[ \\t]+(?:validatingwebhookconfigurations?|mutatingwebhookconfigurations?|validatingadmissionpolic(?:y|ies)|validatingadmissionpolicybindings?|mutatingadmissionpolic(?:y|ies)|mutatingadmissionpolicybindings?|clusterpolic(?:y|ies)|cpol|policyexceptions?|polex)(?:\\.[a-z0-9.-]+)?(?:/|,|(?![^ \\t\\r\\n;&|)]))",
257
+ "agents": [
258
+ "kubernetes-live-admission-policy-guard-agent"
259
+ ],
260
+ "flags": "",
261
+ "context": [
262
+ "bash"
263
+ ]
264
+ },
265
+ {
266
+ "id": "live-k8s-mesh-policy",
267
+ "name": "kubectl Istio policy mutation",
268
+ "description": "kubectl|oc apply|create|delete|patch|replace|edit on virtualservice, destinationrule, peerauthentication, requestauthentication, authorizationpolicy, serviceentry, envoyfilter.",
269
+ "regex": "(?:^|[^A-Za-z0-9_.-])(?:kubectl|oc)(?![A-Za-z0-9_-])(?:[ \\t]+-[^ \\t\\r\\n;&|]+(?:[ \\t]+[^ \\t\\r\\n;&|-][^ \\t\\r\\n;&|]*)?){0,8}[ \\t]+(?:(?:apply|create|delete|patch|replace|edit))(?:[ \\t]+-[^ \\t\\r\\n;&|]+(?:[ \\t]+[^ \\t\\r\\n;&|-][^ \\t\\r\\n;&|]*)?){0,6}[ \\t]+(?:virtualservices?|destinationrules?|peerauthentications?|requestauthentications?|authorizationpolic(?:y|ies)|serviceentr(?:y|ies)|envoyfilters?)(?:\\.[a-z0-9.-]+)?(?:/|,|(?![^ \\t\\r\\n;&|)]))",
270
+ "agents": [
271
+ "kubernetes-live-mesh-policy-guard-agent"
272
+ ],
273
+ "flags": "",
274
+ "context": [
275
+ "bash"
276
+ ]
277
+ },
278
+ {
279
+ "id": "live-argocd-sync",
280
+ "name": "argocd app/proj/appset mutation",
281
+ "description": "argocd app|proj|appset sync|rollback|delete|create|set|patch|edit|terminate-op, or kubectl on application(s).argoproj.io/appproject(s)/applicationset(s).",
282
+ "regex": "(?:^|[^A-Za-z0-9_.-])argocd(?![A-Za-z0-9_-])[ \\t]+(?:app|proj|appset)[ \\t]+(?:sync|rollback|delete|create|set|patch|edit|terminate-op)(?![^ \\t\\r\\n;&|)])|(?:^|[^A-Za-z0-9_.-])(?:kubectl|oc)(?![A-Za-z0-9_-])(?:[ \\t]+-[^ \\t\\r\\n;&|]+(?:[ \\t]+[^ \\t\\r\\n;&|-][^ \\t\\r\\n;&|]*)?){0,8}[ \\t]+(?:(?:apply|create|delete|patch|replace|edit))(?:[ \\t]+-[^ \\t\\r\\n;&|]+(?:[ \\t]+[^ \\t\\r\\n;&|-][^ \\t\\r\\n;&|]*)?){0,6}[ \\t]+(?:applications?|appprojects?|applicationsets?|[a-z]*applications?[.]argoproj[.]io)(?:\\.[a-z0-9.-]+)?(?:/|,|(?![^ \\t\\r\\n;&|)]))",
283
+ "agents": [
284
+ "kubernetes-live-argocd-sync-guard-agent"
285
+ ],
286
+ "flags": "",
287
+ "context": [
288
+ "bash"
289
+ ]
290
+ },
291
+ {
292
+ "id": "live-velero-restore",
293
+ "name": "velero restore / backup delete",
294
+ "description": "velero restore create|delete, velero create restore, velero backup|schedule delete, velero delete backup|restore|schedule. Backup create/describe/get excluded.",
295
+ "regex": "(?:^|[^A-Za-z0-9_.-])velero(?![A-Za-z0-9_-])(?=[^;&|\\n]*[ \\t](?:restore[ \\t]+(?:create|delete)|create[ \\t]+restore|(?:backup|schedule)[ \\t]+delete|delete[ \\t]+(?:backup|restore|schedule))(?![^ \\t\\r\\n;&|)]))",
296
+ "agents": [
297
+ "kubernetes-live-velero-restore-guard-agent"
298
+ ],
299
+ "flags": "",
300
+ "context": [
301
+ "bash"
302
+ ]
303
+ },
304
+ {
305
+ "id": "live-kubectl-mutate",
306
+ "name": "kubectl/oc workload-mutating verb",
307
+ "description": "kubectl|oc apply|create|replace|patch|delete|scale|autoscale|edit|drain|cordon|uncordon|taint|annotate|label|set|expose|rollout restart|undo|pause|resume, unless --dry-run=client|server. Cluster provider unknown, so the managed-Kubernetes rollout guards are listed; consult the one for the cluster. Specific kubernetes-live-* patterns above win (first match).",
308
+ "regex": "(?:^|[^A-Za-z0-9_.-])(?:kubectl|oc)(?![A-Za-z0-9_-])(?![^;&|\\n]*[ \\t]--dry-run(?:=(?:client|server|true))?(?![^ \\t\\r\\n;&|)]))(?:[ \\t]+-[^ \\t\\r\\n;&|]+(?:[ \\t]+[^ \\t\\r\\n;&|-][^ \\t\\r\\n;&|]*)?){0,8}[ \\t]+(?:apply|create|replace|patch|delete|scale|autoscale|edit|drain|cordon|uncordon|taint|annotate|label|set|expose|rollout[ \\t]+(?:restart|undo|pause|resume))(?![^ \\t\\r\\n;&|)])",
309
+ "agents": [
310
+ "azure-live-aks-rollout-guard-agent",
311
+ "gcp-live-gke-rollout-guard-agent",
312
+ "oci-live-oke-rollout-guard-agent",
313
+ "huawei-live-cce-rollout-guard-agent",
314
+ "alibaba-live-ack-rollout-guard-agent",
315
+ "scaleway-live-kapsule-rollout-guard-agent"
316
+ ],
317
+ "flags": "",
318
+ "context": [
319
+ "bash"
320
+ ]
321
+ },
322
+ {
323
+ "id": "live-helm-mutate",
324
+ "name": "helm install/upgrade/uninstall/rollback",
325
+ "description": "helm install|upgrade|uninstall|delete|rollback unless --dry-run. Same managed-Kubernetes rollout guards as live-kubectl-mutate.",
326
+ "regex": "(?:^|[^A-Za-z0-9_.-])helm(?![A-Za-z0-9_-])(?![^;&|\\n]*[ \\t]--dry-run(?:=(?:client|server|true))?(?![^ \\t\\r\\n;&|)]))(?:[ \\t]+-[^ \\t\\r\\n;&|]+(?:[ \\t]+[^ \\t\\r\\n;&|-][^ \\t\\r\\n;&|]*)?){0,8}[ \\t]+(?:install|upgrade|uninstall|delete|rollback)(?![^ \\t\\r\\n;&|)])",
327
+ "agents": [
328
+ "azure-live-aks-rollout-guard-agent",
329
+ "gcp-live-gke-rollout-guard-agent",
330
+ "oci-live-oke-rollout-guard-agent",
331
+ "huawei-live-cce-rollout-guard-agent",
332
+ "alibaba-live-ack-rollout-guard-agent",
333
+ "scaleway-live-kapsule-rollout-guard-agent"
334
+ ],
335
+ "flags": "",
336
+ "context": [
337
+ "bash"
338
+ ]
339
+ },
340
+ {
341
+ "id": "live-oci-network-security-rule",
342
+ "name": "oci network security-list / NSG rule mutation",
343
+ "description": "oci network security-list create|update|delete; oci network nsg rules add|update|remove; oci network nsg create|update|delete. add/update and security-list update are named in the oci-live-network-security-rule-guard-agent docs; the remaining verbs are from OCI CLI knowledge.",
344
+ "regex": "(?:^|[^A-Za-z0-9_.-])oci(?![A-Za-z0-9_-])(?=[^;&|\\n]*[ \\t]network[ \\t]+(?:security-list[ \\t]+(?:create|update|delete)|nsg[ \\t]+rules[ \\t]+(?:add|update|remove)|nsg[ \\t]+(?:create|update|delete))(?![^ \\t\\r\\n;&|)]))",
345
+ "agents": [
346
+ "oci-live-network-security-rule-guard-agent"
347
+ ],
348
+ "flags": "",
349
+ "context": [
350
+ "bash"
351
+ ]
352
+ },
353
+ {
354
+ "id": "live-oci-iam-policy-compartment",
355
+ "name": "oci iam policy / dynamic-group / compartment mutation",
356
+ "description": "oci iam policy create|update|delete; oci iam dynamic-group create|update|delete; oci iam compartment delete|move. policy update|delete and dynamic-group update are named in the oci-live-iam-policy-compartment-guard-agent docs; the other verbs are from OCI CLI knowledge. Global flags before the service are tolerated by scanning the simple command.",
357
+ "regex": "(?:^|[^A-Za-z0-9_.-])oci(?![A-Za-z0-9_-])(?=[^;&|\\n]*[ \\t]iam[ \\t]+(?:policy[ \\t]+(?:create|update|delete)|dynamic-group[ \\t]+(?:create|update|delete)|compartment[ \\t]+(?:delete|move))(?![^ \\t\\r\\n;&|)]))",
358
+ "agents": [
359
+ "oci-live-iam-policy-compartment-guard-agent"
360
+ ],
361
+ "flags": "",
362
+ "context": [
363
+ "bash"
364
+ ]
365
+ },
366
+ {
367
+ "id": "live-oci-autonomous-db",
368
+ "name": "oci db autonomous-database lifecycle change",
369
+ "description": "oci db autonomous-database update|restore|start|stop|restart|delete|create-from-clone. update, restore, start and create-from-clone are named in the oci-live-autonomous-db-lifecycle-guard-agent docs; stop, restart and delete are from OCI CLI knowledge.",
370
+ "regex": "(?:^|[^A-Za-z0-9_.-])oci(?![A-Za-z0-9_-])(?=[^;&|\\n]*[ \\t]db[ \\t]+autonomous-database[ \\t]+(?:update|restore|start|stop|restart|delete|create-from-clone)(?![^ \\t\\r\\n;&|)]))",
371
+ "agents": [
372
+ "oci-live-autonomous-db-lifecycle-guard-agent"
373
+ ],
374
+ "flags": "",
375
+ "context": [
376
+ "bash"
377
+ ]
378
+ },
379
+ {
380
+ "id": "live-oci-budget-quota",
381
+ "name": "oci budgets / limits quota mutation",
382
+ "description": "oci budgets budget|alert-rule|alert create|update|delete; oci limits quota create|update|delete. budgets budget update, budgets alert update and limits quota create are named in the oci-live-cost-budget-runaway-guard-agent docs; the other verbs are from OCI CLI knowledge.",
383
+ "regex": "(?:^|[^A-Za-z0-9_.-])oci(?![A-Za-z0-9_-])(?=[^;&|\\n]*[ \\t](?:budgets[ \\t]+(?:budget|alert-rule|alert)|limits[ \\t]+quota)[ \\t]+(?:create|update|delete)(?![^ \\t\\r\\n;&|)]))",
384
+ "agents": [
385
+ "oci-live-cost-budget-runaway-guard-agent"
386
+ ],
387
+ "flags": "",
388
+ "context": [
389
+ "bash"
390
+ ]
391
+ },
392
+ {
393
+ "id": "live-snowflake-rbac",
394
+ "name": "snowsql / snow sql GRANT, REVOKE, ALTER ROLE",
395
+ "description": "snowsql or 'snow sql' on the same line as a GRANT|REVOKE statement or ALTER ROLE (flags i). The SQL must be on the command line (-q); statements piped in or read from -f files are invisible. Statements inside string literals match (known false positive).",
396
+ "regex": "(?:^|[^A-Za-z0-9_.-])(?:snowsql|snow[ \\t]+sql)(?![A-Za-z0-9_-])(?=[^\\n]*[\"' \\t;](?:(?:grant|revoke)[ \\t]+[a-z]|alter[ \\t]+role[ \\t]))",
397
+ "agents": [
398
+ "snowflake-live-rbac-grant-guard-agent"
399
+ ],
400
+ "flags": "i",
401
+ "context": [
402
+ "bash"
403
+ ]
404
+ },
405
+ {
406
+ "id": "live-snowflake-warehouse",
407
+ "name": "snowsql / snow sql warehouse change",
408
+ "description": "snowsql or 'snow sql' with ALTER|DROP|CREATE [OR REPLACE|OR ALTER] WAREHOUSE (flags i). ALTER WAREHOUSE is named in the snowflake-live-warehouse-cost-change-guard-agent docs; CREATE and DROP are from Snowflake SQL knowledge.",
409
+ "regex": "(?:^|[^A-Za-z0-9_.-])(?:snowsql|snow[ \\t]+sql)(?![A-Za-z0-9_-])(?=[^\\n]*[\"' \\t;](?:alter|drop|create(?:[ \\t]+or[ \\t]+(?:replace|alter))?)[ \\t]+warehouse[ \\t])",
410
+ "agents": [
411
+ "snowflake-live-warehouse-cost-change-guard-agent"
412
+ ],
413
+ "flags": "i",
414
+ "context": [
415
+ "bash"
416
+ ]
417
+ },
418
+ {
419
+ "id": "live-snowflake-failover",
420
+ "name": "snowsql / snow sql failover group change",
421
+ "description": "snowsql or 'snow sql' with ALTER FAILOVER GROUP (flags i), named in the snowflake-live-failover-promotion-guard-agent docs.",
422
+ "regex": "(?:^|[^A-Za-z0-9_.-])(?:snowsql|snow[ \\t]+sql)(?![A-Za-z0-9_-])(?=[^\\n]*[\"' \\t;]alter[ \\t]+failover[ \\t]+group[ \\t])",
423
+ "agents": [
424
+ "snowflake-live-failover-promotion-guard-agent"
425
+ ],
426
+ "flags": "i",
427
+ "context": [
428
+ "bash"
429
+ ]
430
+ },
431
+ {
432
+ "id": "live-snowflake-auth-network-policy",
433
+ "name": "snowsql / snow sql network or authentication policy change",
434
+ "description": "snowsql or 'snow sql' with ALTER|DROP|CREATE [OR REPLACE] NETWORK|AUTHENTICATION POLICY (flags i). ALTER forms are named in the snowflake-live-auth-network-policy-guard-agent docs; CREATE and DROP are from Snowflake SQL knowledge.",
435
+ "regex": "(?:^|[^A-Za-z0-9_.-])(?:snowsql|snow[ \\t]+sql)(?![A-Za-z0-9_-])(?=[^\\n]*[\"' \\t;](?:alter|drop|create(?:[ \\t]+or[ \\t]+replace)?)[ \\t]+(?:network|authentication)[ \\t]+policy[ \\t])",
436
+ "agents": [
437
+ "snowflake-live-auth-network-policy-guard-agent"
438
+ ],
439
+ "flags": "i",
440
+ "context": [
441
+ "bash"
442
+ ]
443
+ },
444
+ {
445
+ "id": "live-snowflake-pipeline",
446
+ "name": "snowsql / snow sql pipe, task or dynamic table change",
447
+ "description": "snowsql or 'snow sql' with ALTER PIPE|TASK|DYNAMIC TABLE (flags i), named in the snowflake-live-pipeline-streaming-change-guard-agent docs.",
448
+ "regex": "(?:^|[^A-Za-z0-9_.-])(?:snowsql|snow[ \\t]+sql)(?![A-Za-z0-9_-])(?=[^\\n]*[\"' \\t;]alter[ \\t]+(?:pipe|task|dynamic[ \\t]+table)[ \\t])",
449
+ "agents": [
450
+ "snowflake-live-pipeline-streaming-change-guard-agent"
451
+ ],
452
+ "flags": "i",
453
+ "context": [
454
+ "bash"
455
+ ]
456
+ },
457
+ {
458
+ "id": "live-snowflake-data-protection",
459
+ "name": "snowsql / snow sql masking or row access policy application",
460
+ "description": "snowsql or 'snow sql' with SET|UNSET|ADD|DROP MASKING POLICY or ROW ACCESS POLICY (flags i), the ALTER TABLE column / row-access forms named in the snowflake-live-data-protection-policy-guard-agent docs. CREATE MASKING POLICY (definition only) is not matched.",
461
+ "regex": "(?:^|[^A-Za-z0-9_.-])(?:snowsql|snow[ \\t]+sql)(?![A-Za-z0-9_-])(?=[^\\n]*[ \\t](?:set|unset|add|drop)[ \\t]+(?:masking|row[ \\t]+access)[ \\t]+policy(?![A-Za-z0-9_]))",
462
+ "agents": [
463
+ "snowflake-live-data-protection-policy-guard-agent"
464
+ ],
465
+ "flags": "i",
466
+ "context": [
467
+ "bash"
468
+ ]
469
+ },
470
+ {
471
+ "id": "live-aws-cli-mutation",
472
+ "name": "aws CLI mutating operation (fallback)",
473
+ "description": "aws [global flags] <service> <operation> where operation is (create|delete|update|terminate|modify|remove|attach|detach|disable|schedule|revoke|authorize|deregister|associate|disassociate|reboot|stop)-* or put-* (data-plane put-object/put-item/put-metric-data/put-log-events/put-record(s) excluded), plus aws s3 rb|rm|mb. No dedicated guard exists for most services (ec2, rds, iam, s3, ...): all AWS live guards are listed; aws-live-iac-change-guard-agent is the nearest change-control fit. The near-miss aws-live-deployment-guarded-operator-agent is outside the *-live-*-guard-agent glob and therefore not referenced.",
474
+ "regex": "(?:^|[^A-Za-z0-9_.-])aws(?![A-Za-z0-9_-])(?:[ \\t]+-[^ \\t\\r\\n;&|]+(?:[ \\t]+[^ \\t\\r\\n;&|-][^ \\t\\r\\n;&|]*)?){0,8}[ \\t]+(?:s3[ \\t]+(?:rb|rm|mb)|[a-z0-9][a-z0-9-]*[ \\t]+(?:(?:create|delete|update|terminate|modify|remove|attach|detach|disable|schedule|revoke|authorize|deregister|associate|disassociate|reboot|stop)-[a-z0-9-]+|put-(?!(?:object|item|metric-data|log-events|records?)(?![^ \\t\\r\\n;&|)]))[a-z0-9-]+))(?![^ \\t\\r\\n;&|)])",
475
+ "agents": [
476
+ "aws-live-ecs-rollout-guard-agent",
477
+ "aws-live-iac-change-guard-agent",
478
+ "aws-live-serverless-release-guard-agent"
479
+ ],
480
+ "flags": "",
481
+ "context": [
482
+ "bash"
483
+ ]
484
+ },
485
+ {
486
+ "id": "live-az-cli-mutation",
487
+ "name": "az CLI mutating verb (fallback)",
488
+ "description": "az <command path of up to 5 words> create|delete|update|purge|deallocate|scale|upgrade|start|stop|restart; the verb must sit in the command path before the first flag, so values of --query/--name are not mistaken for verbs. All Azure live guards listed (no service-specific guard matched).",
489
+ "regex": "(?:^|[^A-Za-z0-9_.-])az(?![A-Za-z0-9_-])(?:[ \\t]+[a-z][a-z0-9-]*){0,5}[ \\t]+(?:create|delete|update|purge|deallocate|scale|upgrade|start|stop|restart)(?![^ \\t\\r\\n;&|)])",
490
+ "agents": [
491
+ "azure-live-aks-rollout-guard-agent",
492
+ "azure-live-app-service-slot-swap-guard-agent",
493
+ "azure-live-arm-deployment-stack-guard-agent",
494
+ "azure-live-cost-budget-action-guard-agent",
495
+ "azure-live-entra-role-assignment-guard-agent",
496
+ "azure-live-keyvault-rotation-purge-guard-agent",
497
+ "azure-live-pim-jit-activation-guard-agent"
498
+ ],
499
+ "flags": "",
500
+ "context": [
501
+ "bash"
502
+ ]
503
+ },
504
+ {
505
+ "id": "live-gcloud-cli-mutation",
506
+ "name": "gcloud mutating verb (fallback)",
507
+ "description": "gcloud <command path of up to 5 words> create|delete|update|deploy|patch|resize|restore|import|rm, verb in the path before the first flag. All GCP live guards listed (no service-specific guard matched).",
508
+ "regex": "(?:^|[^A-Za-z0-9_.-])gcloud(?![A-Za-z0-9_-])(?:[ \\t]+[a-z][a-z0-9-]*){0,5}[ \\t]+(?:create|delete|update|deploy|patch|resize|restore|import|rm)(?![^ \\t\\r\\n;&|)])",
509
+ "agents": [
510
+ "gcp-live-bigquery-dataset-deletion-guard-agent",
511
+ "gcp-live-cloud-run-traffic-migration-guard-agent",
512
+ "gcp-live-cost-budget-action-guard-agent",
513
+ "gcp-live-gke-rollout-guard-agent",
514
+ "gcp-live-iam-policy-change-guard-agent",
515
+ "gcp-live-kms-key-destruction-guard-agent"
516
+ ],
517
+ "flags": "",
518
+ "context": [
519
+ "bash"
520
+ ]
521
+ }
522
+ ]
@@ -0,0 +1,5 @@
1
+ {
2
+ "name": "secret-redactor",
3
+ "version": "1.0.0",
4
+ "description": "Asks before tool calls whose input carries a credential and redacts credentials from tool output."
5
+ }
@@ -0,0 +1,86 @@
1
+ # Secret Redactor
2
+
3
+ ## Reach and declared footprint
4
+
5
+ **L0 (no declared file writes, subprocess spawns or network egress).** The manifest
6
+ only declares an environment read of `VANGUARD_SECRET_REDACTOR_PATTERNS`.
7
+ The `file_writes`, `spawns` and `egress_hosts` arrays are empty. This is capability
8
+ disclosure, not enforced isolation.
9
+
10
+ ## What it does
11
+
12
+ - **Before a tool runs**, it scans every string in the tool input against the credential
13
+ patterns in `patterns.json`. These cover GitHub tokens, AWS access key IDs and secret
14
+ keys, HTTP Bearer tokens and passwords embedded in URLs.
15
+ - A hit asks for confirmation.
16
+ - The reason names the pattern, never the matched text.
17
+ - **After a tool runs**, it replaces every match in the tool output with
18
+ `[REDACTED:<pattern id>]` before the model reads it. This works only where the harness
19
+ lets a hook replace output (see the table).
20
+
21
+ A secret is still found when it is split across a key and its value, for example
22
+ `aws_secret_access_key` paired with its value. The same holds for a secret split across
23
+ argument-list elements (`"Bearer"`, `"<token>"`).
24
+
25
+ Redaction repeats until the text stops changing. Text that never settles is replaced by
26
+ `[REDACTED:overflow]`.
27
+
28
+ ## Configuration
29
+
30
+ `VANGUARD_SECRET_REDACTOR_PATTERNS` is an optional path to a JSON file of extra patterns.
31
+
32
+ - The extra patterns are appended to the built-in list. They never replace it.
33
+ - The file is an array of entries with the same keys as `patterns.json`:
34
+ - `id`: kebab-case, and not a built-in id.
35
+ - `name`
36
+ - `description`
37
+ - `regex`
38
+ - `flags`: `""` or `"i"`.
39
+ - `context`: `"tool-input"`, `"tool-output"` or both.
40
+ - `severity`
41
+ - **The file fails closed.** If it is set and cannot be read, is not valid JSON, is
42
+ malformed, reuses a built-in id or names any other context:
43
+ - before a tool runs, every call is denied;
44
+ - after a tool runs, the output is withheld.
45
+ - **Do not let an extension regex match a `[REDACTED:...]` marker.** Its redaction never
46
+ settles, so the output comes back as `[REDACTED:overflow]`.
47
+
48
+ ## Per-harness behavior
49
+
50
+ | Harness | Surface | Before a tool runs | After a tool runs |
51
+ | --- | --- | --- | --- |
52
+ | Claude Code | native | `tool.check`: asks on a hit, never loosens the engine verdict | `tool.call`: returns the redacted result |
53
+ | Claude Code | classic | `PreToolUse`: asks on a hit | `PostToolUse`: `updatedToolOutput` with the redacted output |
54
+ | Kiro | hook | Degraded: the whole payload is scanned and a hit is denied | Unsupported: Kiro documents no way to replace output |
55
+ | Codex | hook | Degraded: Codex rejects ask, so a hit is denied with a reason | Unsupported: Codex cannot replace output |
56
+
57
+ On the native surface, some results cannot be rebuilt from a redacted value:
58
+
59
+ - an errored call;
60
+ - a credential that shows only in the text the model reads;
61
+ - a credential in context added by another hook.
62
+
63
+ Instead of the result, the model reads a notice followed by the redacted text.
64
+
65
+ ## Limitations
66
+
67
+ - **Classic `PostToolUse` fires only after a tool succeeds.** Output from a failed tool is
68
+ not redacted there.
69
+ - **Classic Claude Code ignores a replacement whose shape differs from the tool's output.**
70
+ The withheld output then cannot take effect in two cases:
71
+ - the hook's stdin is invalid;
72
+ - the redaction fails on output that is not an object.
73
+ - **Two keys can redact to the same marker.** They collapse into one. This loses data but
74
+ may invalidate the tool's output schema; classic Claude Code may then ignore the
75
+ replacement and retain the original output.
76
+ - **When redaction itself fails**, the withheld replacement keeps the output's keys and
77
+ masks only its values. Credentials embedded in keys are not protected by that fallback.
78
+ - **An `ask` is settled by the permission mode**, so a bypass mode may auto-approve it.
79
+ - **Patterns are regexes, not proof.** A credential format they do not describe passes
80
+ through, and a long uppercase run that starts like an AWS key is over-redacted.
81
+ - **The native API is early access**, verified against Claude Code 2.1.296.
82
+ - **Classic, Kiro and Codex hooks need Node 22+.**
83
+
84
+ ## Install
85
+
86
+ See `mods/README.md`.