@raishin/vanguard-frontier-agentic 3.14.0 → 3.16.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 (223) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/.cursor-plugin/plugin.json +1 -1
  4. package/.github/plugin/marketplace.json +1 -1
  5. package/agents/cross-functional/revenue-critical-journey-integrity-agent/harnesses/codex.toml +1 -1
  6. package/agents/dotnet/dotnet-aspire-cloud-native-review-agent/harnesses/codex.toml +1 -1
  7. package/agents/dotnet/dotnet-aspnetcore-api-review-agent/harnesses/codex.toml +1 -1
  8. package/agents/dotnet/dotnet-aspnetcore-identity-authz-review-agent/harnesses/codex.toml +1 -1
  9. package/agents/dotnet/dotnet-csharp-runtime-review-agent/harnesses/codex.toml +1 -1
  10. package/agents/dotnet/dotnet-efcore-data-access-review-agent/harnesses/codex.toml +1 -1
  11. package/agents/dotnet/dotnet-maestro-agent/harnesses/codex.toml +1 -1
  12. package/agents/dotnet/dotnet-observability-otel-review-agent/harnesses/codex.toml +1 -1
  13. package/agents/dotnet/dotnet-performance-aot-review-agent/harnesses/codex.toml +1 -1
  14. package/agents/dotnet/dotnet-supply-chain-review-agent/harnesses/codex.toml +1 -1
  15. package/agents/dotnet/dotnet-testing-quality-review-agent/harnesses/codex.toml +1 -1
  16. package/agents/frontend/nextjs-specialist-agent/harnesses/codex.toml +1 -1
  17. package/agents/frontend/svelte-sveltekit-specialist-agent/harnesses/codex.toml +1 -1
  18. package/agents/hr/hr-analytics-people-data-agent/harnesses/codex.toml +1 -1
  19. package/agents/hr/hr-benefits-payroll-agent/harnesses/codex.toml +1 -1
  20. package/agents/hr/hr-compensation-equity-agent/harnesses/codex.toml +1 -1
  21. package/agents/hr/hr-culture-dei-agent/harnesses/codex.toml +1 -1
  22. package/agents/hr/hr-employee-relations-agent/harnesses/codex.toml +1 -1
  23. package/agents/hr/hr-hris-process-controls-agent/harnesses/codex.toml +1 -1
  24. package/agents/hr/hr-learning-policy-agent/harnesses/codex.toml +1 -1
  25. package/agents/hr/hr-leave-accommodation-agent/harnesses/codex.toml +1 -1
  26. package/agents/hr/hr-maestro-agent/harnesses/codex.toml +1 -1
  27. package/agents/hr/hr-performance-management-agent/harnesses/codex.toml +1 -1
  28. package/agents/hr/hr-recruiting-selection-agent/harnesses/codex.toml +1 -1
  29. package/agents/hr/hr-risk-triage-review-agent/harnesses/codex.toml +1 -1
  30. package/agents/hr/hr-termination-readiness-agent/harnesses/codex.toml +1 -1
  31. package/agents/hr/hr-workforce-planning-rif-agent/harnesses/codex.toml +1 -1
  32. package/agents/hr/hr-workplace-investigations-agent/harnesses/codex.toml +1 -1
  33. package/agents/java/java-application-server-exit-agent/harnesses/codex.toml +1 -1
  34. package/agents/java/java-concurrency-and-virtual-thread-agent/harnesses/codex.toml +1 -1
  35. package/agents/java/java-container-and-kubernetes-readiness-agent/harnesses/codex.toml +1 -1
  36. package/agents/java/java-database-migration-safety-agent/harnesses/codex.toml +1 -1
  37. package/agents/java/java-deserialization-and-parser-security-agent/harnesses/codex.toml +1 -1
  38. package/agents/java/java-framework-production-readiness-agent/harnesses/codex.toml +1 -1
  39. package/agents/java/java-jdk-lifecycle-and-upgrade-agent/harnesses/codex.toml +1 -1
  40. package/agents/java/java-jpa-hibernate-performance-agent/harnesses/codex.toml +1 -1
  41. package/agents/java/java-jvm-performance-and-gc-agent/harnesses/codex.toml +1 -1
  42. package/agents/java/java-kafka-reliability-agent/harnesses/codex.toml +1 -1
  43. package/agents/java/java-maestro-agent/harnesses/codex.toml +1 -1
  44. package/agents/java/java-resilience-pattern-agent/harnesses/codex.toml +1 -1
  45. package/agents/java/java-spring-security-agent/harnesses/codex.toml +1 -1
  46. package/agents/java/java-test-architecture-agent/harnesses/codex.toml +1 -1
  47. package/agents/java/java-transaction-and-consistency-agent/harnesses/codex.toml +1 -1
  48. package/agents/legal/legal-contract-review-agent/harnesses/codex.toml +1 -1
  49. package/agents/legal/legal-counsel-review-agent/harnesses/codex.toml +1 -1
  50. package/agents/legal/legal-employment-law-risk-agent/harnesses/codex.toml +1 -1
  51. package/agents/legal/legal-ethics-investigations-agent/harnesses/codex.toml +1 -1
  52. package/agents/legal/legal-ip-open-source-agent/harnesses/codex.toml +1 -1
  53. package/agents/legal/legal-knowledge-management-agent/harnesses/codex.toml +1 -1
  54. package/agents/legal/legal-litigation-discovery-hold-agent/harnesses/codex.toml +1 -1
  55. package/agents/legal/legal-maestro-agent/harnesses/codex.toml +1 -1
  56. package/agents/legal/legal-policy-governance-agent/harnesses/codex.toml +1 -1
  57. package/agents/legal/legal-privacy-data-protection-agent/harnesses/codex.toml +1 -1
  58. package/agents/legal/legal-public-disclosure-agent/harnesses/codex.toml +1 -1
  59. package/agents/legal/legal-regulatory-compliance-agent/harnesses/codex.toml +1 -1
  60. package/agents/legal/legal-vendor-procurement-risk-agent/harnesses/codex.toml +1 -1
  61. package/agents/netsuite/netsuite-administrator-agent/harnesses/codex.toml +1 -1
  62. package/agents/netsuite/netsuite-ai-connector-mcp-agent/harnesses/codex.toml +1 -1
  63. package/agents/netsuite/netsuite-ai-foundations-agent/harnesses/codex.toml +1 -1
  64. package/agents/netsuite/netsuite-application-developer-agent/harnesses/codex.toml +1 -1
  65. package/agents/netsuite/netsuite-audit-controls-sox-agent/harnesses/codex.toml +1 -1
  66. package/agents/netsuite/netsuite-bi-reporting-agent/harnesses/codex.toml +1 -1
  67. package/agents/netsuite/netsuite-data-governance-privacy-agent/harnesses/codex.toml +1 -1
  68. package/agents/netsuite/netsuite-enterprise-architecture-agent/harnesses/codex.toml +1 -1
  69. package/agents/netsuite/netsuite-erp-consultant-agent/harnesses/codex.toml +1 -1
  70. package/agents/netsuite/netsuite-evidence-release-drift-agent/harnesses/codex.toml +1 -1
  71. package/agents/netsuite/netsuite-financial-foundations-agent/harnesses/codex.toml +1 -1
  72. package/agents/netsuite/netsuite-identity-access-role-permission-agent/harnesses/codex.toml +1 -1
  73. package/agents/netsuite/netsuite-integration-migration-agent/harnesses/codex.toml +1 -1
  74. package/agents/netsuite/netsuite-live-org-mutation-guard-agent/harnesses/codex.toml +1 -1
  75. package/agents/netsuite/netsuite-maestro-agent/harnesses/codex.toml +1 -1
  76. package/agents/netsuite/netsuite-oneworld-multisubsidiary-agent/harnesses/codex.toml +1 -1
  77. package/agents/netsuite/netsuite-sandbox-nonproduction-governance-agent/harnesses/codex.toml +1 -1
  78. package/agents/netsuite/netsuite-saved-searches-workbook-agent/harnesses/codex.toml +1 -1
  79. package/agents/netsuite/netsuite-sdf-devops-release-agent/harnesses/codex.toml +1 -1
  80. package/agents/netsuite/netsuite-sso-oauth-tba-agent/harnesses/codex.toml +1 -1
  81. package/agents/netsuite/netsuite-suitecloud-developer-agent/harnesses/codex.toml +1 -1
  82. package/agents/netsuite/netsuite-suiteflow-automation-agent/harnesses/codex.toml +1 -1
  83. package/agents/netsuite/netsuite-suitefoundation-agent/harnesses/codex.toml +1 -1
  84. package/agents/netsuite/netsuite-suitescript-secure-code-review-agent/harnesses/codex.toml +1 -1
  85. package/agents/netsuite/netsuite-web-services-integration-agent/harnesses/codex.toml +1 -1
  86. package/agents/qa/ci-test-pipeline-review-agent/harnesses/codex.toml +1 -1
  87. package/agents/qa/helm-chart-quality-review-agent/harnesses/codex.toml +1 -1
  88. package/agents/qa/kubernetes-manifest-quality-review-agent/harnesses/codex.toml +1 -1
  89. package/agents/qa/llm-ai-pipeline-test-review-agent/harnesses/codex.toml +1 -1
  90. package/agents/qa/playwright-e2e-suite-review-agent/harnesses/codex.toml +1 -1
  91. package/agents/qa/plc-control-logic-safety-review-agent/harnesses/codex.toml +1 -1
  92. package/agents/qa/rpa-workflow-resilience-review-agent/harnesses/codex.toml +1 -1
  93. package/agents/qa/test-coverage-quality-review-agent/harnesses/codex.toml +1 -1
  94. package/agents/qa/test-flakiness-triage-agent/harnesses/codex.toml +1 -1
  95. package/agents/salesforce/salesforce-adaptive-access-agent/harnesses/codex.toml +1 -1
  96. package/agents/salesforce/salesforce-agentforce-ai-agent/harnesses/codex.toml +1 -1
  97. package/agents/salesforce/salesforce-analytics-tableau-agent/harnesses/codex.toml +1 -1
  98. package/agents/salesforce/salesforce-app-builder-automation-agent/harnesses/codex.toml +1 -1
  99. package/agents/salesforce/salesforce-business-analyst-agent/harnesses/codex.toml +1 -1
  100. package/agents/salesforce/salesforce-certificate-lifecycle-agent/harnesses/codex.toml +1 -1
  101. package/agents/salesforce/salesforce-change-impact-analyst-agent/harnesses/codex.toml +1 -1
  102. package/agents/salesforce/salesforce-code-analyzer-orchestrator-agent/harnesses/codex.toml +1 -1
  103. package/agents/salesforce/salesforce-compliance-privacy-agent/harnesses/codex.toml +1 -1
  104. package/agents/salesforce/salesforce-continuous-verification-agent/harnesses/codex.toml +1 -1
  105. package/agents/salesforce/salesforce-data-architecture-agent/harnesses/codex.toml +1 -1
  106. package/agents/salesforce/salesforce-development-agent/harnesses/codex.toml +1 -1
  107. package/agents/salesforce/salesforce-devops-release-agent/harnesses/codex.toml +1 -1
  108. package/agents/salesforce/salesforce-enterprise-architect-agent/harnesses/codex.toml +1 -1
  109. package/agents/salesforce/salesforce-experience-cloud-agent/harnesses/codex.toml +1 -1
  110. package/agents/salesforce/salesforce-hyperforce-security-agent/harnesses/codex.toml +1 -1
  111. package/agents/salesforce/salesforce-industry-cloud-agent/harnesses/codex.toml +1 -1
  112. package/agents/salesforce/salesforce-integration-mulesoft-agent/harnesses/codex.toml +1 -1
  113. package/agents/salesforce/salesforce-live-guard-agent/harnesses/codex.toml +1 -1
  114. package/agents/salesforce/salesforce-maestro-agent/harnesses/codex.toml +1 -1
  115. package/agents/salesforce/salesforce-marketing-cloud-agent/harnesses/codex.toml +1 -1
  116. package/agents/salesforce/salesforce-network-policy-architect-agent/harnesses/codex.toml +1 -1
  117. package/agents/salesforce/salesforce-platform-admin-review-agent/harnesses/codex.toml +1 -1
  118. package/agents/salesforce/salesforce-sales-cloud-revenue-agent/harnesses/codex.toml +1 -1
  119. package/agents/salesforce/salesforce-sandbox-governance-agent/harnesses/codex.toml +1 -1
  120. package/agents/salesforce/salesforce-sandbox-isolation-agent/harnesses/codex.toml +1 -1
  121. package/agents/salesforce/salesforce-security-identity-access-agent/harnesses/codex.toml +1 -1
  122. package/agents/salesforce/salesforce-service-field-service-agent/harnesses/codex.toml +1 -1
  123. package/agents/salesforce/salesforce-session-governance-agent/harnesses/codex.toml +1 -1
  124. package/agents/salesforce/salesforce-slack-collaboration-agent/harnesses/codex.toml +1 -1
  125. package/catalog/AGENTS.md +2 -1
  126. package/catalog/asset-integrity.json +723 -276
  127. package/catalog/index.json +3 -2
  128. package/catalog/model-assignments.json +121 -121
  129. package/catalog/model-policy.json +9 -9
  130. package/catalog/model-registry.json +28 -13
  131. package/catalog/mods.json +131 -0
  132. package/mods/README.md +220 -0
  133. package/mods/audit-trail/README.md +70 -0
  134. package/mods/audit-trail/bin/hook.mjs +65 -0
  135. package/mods/audit-trail/claude-code/UNSUPPORTED.md +11 -0
  136. package/mods/audit-trail/claude-code/settings.hooks.json +14 -0
  137. package/mods/audit-trail/codex/hooks.json +14 -0
  138. package/mods/audit-trail/kiro/UNSUPPORTED.md +7 -0
  139. package/mods/audit-trail/kiro/audit-trail-post-tool-use-hook.json +14 -0
  140. package/mods/audit-trail/lib/common.mjs +213 -0
  141. package/mods/audit-trail/lib/core.mjs +50 -0
  142. package/mods/audit-trail/lib/runtime.mjs +140 -0
  143. package/mods/audit-trail/mod.toml +37 -0
  144. package/mods/blast-radius-guard/.claude-plugin/plugin.json +5 -0
  145. package/mods/blast-radius-guard/README.md +53 -0
  146. package/mods/blast-radius-guard/bin/hook.mjs +18 -0
  147. package/mods/blast-radius-guard/claude-code/settings.hooks.json +14 -0
  148. package/mods/blast-radius-guard/codex/UNSUPPORTED.md +7 -0
  149. package/mods/blast-radius-guard/codex/hooks.json +14 -0
  150. package/mods/blast-radius-guard/hooks/hooks.json +5 -0
  151. package/mods/blast-radius-guard/hooks/register.test.ts +97 -0
  152. package/mods/blast-radius-guard/hooks/register.ts +13 -0
  153. package/mods/blast-radius-guard/kiro/UNSUPPORTED.md +7 -0
  154. package/mods/blast-radius-guard/kiro/blast-radius-guard-pre-tool-use-hook.json +14 -0
  155. package/mods/blast-radius-guard/lib/common.mjs +213 -0
  156. package/mods/blast-radius-guard/lib/core.mjs +66 -0
  157. package/mods/blast-radius-guard/lib/patterns.mjs +102 -0
  158. package/mods/blast-radius-guard/lib/runtime.mjs +140 -0
  159. package/mods/blast-radius-guard/mod.toml +34 -0
  160. package/mods/blast-radius-guard/patterns.json +101 -0
  161. package/mods/context-burn/.claude-plugin/plugin.json +5 -0
  162. package/mods/context-burn/README.md +66 -0
  163. package/mods/context-burn/bin/hook.mjs +38 -0
  164. package/mods/context-burn/claude-code/UNSUPPORTED.md +7 -0
  165. package/mods/context-burn/claude-code/settings.hooks.json +24 -0
  166. package/mods/context-burn/codex/UNSUPPORTED.md +7 -0
  167. package/mods/context-burn/codex/hooks.json +24 -0
  168. package/mods/context-burn/hooks/hooks.json +5 -0
  169. package/mods/context-burn/hooks/register.test.ts +151 -0
  170. package/mods/context-burn/hooks/register.ts +35 -0
  171. package/mods/context-burn/kiro/UNSUPPORTED.md +7 -0
  172. package/mods/context-burn/kiro/context-burn-post-tool-use-hook.json +14 -0
  173. package/mods/context-burn/kiro/context-burn-session-start-hook.json +14 -0
  174. package/mods/context-burn/lib/common.mjs +213 -0
  175. package/mods/context-burn/lib/core.mjs +79 -0
  176. package/mods/context-burn/lib/runtime.mjs +140 -0
  177. package/mods/context-burn/mod.toml +37 -0
  178. package/mods/live-guard-gate/.claude-plugin/plugin.json +5 -0
  179. package/mods/live-guard-gate/README.md +43 -0
  180. package/mods/live-guard-gate/bin/hook.mjs +12 -0
  181. package/mods/live-guard-gate/claude-code/settings.hooks.json +14 -0
  182. package/mods/live-guard-gate/codex/UNSUPPORTED.md +7 -0
  183. package/mods/live-guard-gate/codex/hooks.json +14 -0
  184. package/mods/live-guard-gate/hooks/hooks.json +5 -0
  185. package/mods/live-guard-gate/hooks/register.test.ts +59 -0
  186. package/mods/live-guard-gate/hooks/register.ts +11 -0
  187. package/mods/live-guard-gate/kiro/UNSUPPORTED.md +7 -0
  188. package/mods/live-guard-gate/kiro/live-guard-gate-pre-tool-use-hook.json +14 -0
  189. package/mods/live-guard-gate/lib/common.mjs +213 -0
  190. package/mods/live-guard-gate/lib/core.mjs +24 -0
  191. package/mods/live-guard-gate/lib/live-agents.mjs +65 -0
  192. package/mods/live-guard-gate/lib/patterns.mjs +523 -0
  193. package/mods/live-guard-gate/lib/runtime.mjs +140 -0
  194. package/mods/live-guard-gate/mod.toml +34 -0
  195. package/mods/live-guard-gate/patterns.json +522 -0
  196. package/mods/secret-redactor/.claude-plugin/plugin.json +5 -0
  197. package/mods/secret-redactor/README.md +86 -0
  198. package/mods/secret-redactor/bin/hook.mjs +35 -0
  199. package/mods/secret-redactor/claude-code/UNSUPPORTED.md +7 -0
  200. package/mods/secret-redactor/claude-code/settings.hooks.json +24 -0
  201. package/mods/secret-redactor/codex/UNSUPPORTED.md +11 -0
  202. package/mods/secret-redactor/codex/hooks.json +14 -0
  203. package/mods/secret-redactor/hooks/hooks.json +5 -0
  204. package/mods/secret-redactor/hooks/register.test.ts +150 -0
  205. package/mods/secret-redactor/hooks/register.ts +19 -0
  206. package/mods/secret-redactor/kiro/UNSUPPORTED.md +11 -0
  207. package/mods/secret-redactor/kiro/secret-redactor-pre-tool-use-hook.json +14 -0
  208. package/mods/secret-redactor/lib/common.mjs +213 -0
  209. package/mods/secret-redactor/lib/core.mjs +61 -0
  210. package/mods/secret-redactor/lib/patterns.mjs +75 -0
  211. package/mods/secret-redactor/lib/runtime.mjs +140 -0
  212. package/mods/secret-redactor/mod.toml +43 -0
  213. package/mods/secret-redactor/patterns.json +74 -0
  214. package/package.json +9 -5
  215. package/plugins/vanguard-frontier-agentic/.codex-plugin/plugin.json +1 -1
  216. package/scripts/generate-mods.mjs +784 -0
  217. package/scripts/mods/common.mjs +213 -0
  218. package/scripts/mods/runtime.mjs +140 -0
  219. package/tests/fixtures/README.md +1 -1
  220. package/tests/fuzz-properties.test.mjs +254 -0
  221. package/tests/mods.test.mjs +768 -0
  222. package/tests/validate-asset-integrity.py +1 -0
  223. package/tests/validate-mods.py +821 -0
@@ -15,42 +15,42 @@
15
15
  {
16
16
  "scope": "provider:dotnet",
17
17
  "harness": "codex",
18
- "model": "gpt-5.5"
18
+ "model": "gpt-6-sol"
19
19
  },
20
20
  {
21
21
  "scope": "provider:generic",
22
22
  "harness": "codex",
23
- "model": "gpt-5.5"
23
+ "model": "gpt-6-sol"
24
24
  },
25
25
  {
26
26
  "scope": "provider:hr",
27
27
  "harness": "codex",
28
- "model": "gpt-5.5"
28
+ "model": "gpt-6-sol"
29
29
  },
30
30
  {
31
31
  "scope": "provider:java",
32
32
  "harness": "codex",
33
- "model": "gpt-5.5"
33
+ "model": "gpt-6-sol"
34
34
  },
35
35
  {
36
36
  "scope": "provider:legal",
37
37
  "harness": "codex",
38
- "model": "gpt-5.5"
38
+ "model": "gpt-6-sol"
39
39
  },
40
40
  {
41
41
  "scope": "provider:netsuite",
42
42
  "harness": "codex",
43
- "model": "gpt-5.5"
43
+ "model": "gpt-6-sol"
44
44
  },
45
45
  {
46
46
  "scope": "provider:salesforce",
47
47
  "harness": "codex",
48
- "model": "gpt-5.5"
48
+ "model": "gpt-6-sol"
49
49
  },
50
50
  {
51
51
  "scope": "agent:nextjs-specialist-agent",
52
52
  "harness": "codex",
53
- "model": "gpt-5.5"
53
+ "model": "gpt-6-sol"
54
54
  },
55
55
  {
56
56
  "scope": "agent:oci-cloud-guard-responder-agent",
@@ -145,7 +145,7 @@
145
145
  {
146
146
  "scope": "agent:svelte-sveltekit-specialist-agent",
147
147
  "harness": "codex",
148
- "model": "gpt-5.5"
148
+ "model": "gpt-6-sol"
149
149
  },
150
150
  {
151
151
  "scope": "provider:aws",
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "manifest_version": 1,
3
3
  "description": "Verified model-name and reasoning-effort capability matrix per harness. scripts/model-policy.mjs fails closed on model names and reasoning efforts not covered here, so a policy can never project a value that would 404 (OpenAI: HTTP 404 invalid_request_error/model_not_found; OpenRouter: HTTP 404) or be silently dropped at request time. Namespaces are evaluated in order; first 'match' wins. Human-readable matrix: docs/model-policy-matrix.md. Refresh workflow: .claude/skills/model-registry-refresh/SKILL.md.",
4
- "last_refreshed": "2026-09-23",
4
+ "last_refreshed": "2026-10-06",
5
5
  "harnesses": {
6
6
  "codex": {
7
7
  "reasoning_key": "model_reasoning_effort",
8
8
  "reasoning_efforts": ["none", "minimal", "low", "medium", "high", "xhigh", "max", "ultra"],
9
- "reasoning_note": "Codex does not check a configured effort against the model's advertised supported_reasoning_levels: resolve_reasoning_effort (codex-rs/protocol/src/openai_models/reasoning_effort.rs) passes every value through unchanged except ultra (sent as the model's multi_agent_reasoning_effort, else max) and persistent (sent as Custom(\"disabled\")), and the advertised list is used only to fill the TUI effort picker and to remap the effort when a session switches model (core/src/session/turn_context.rs). An unsupported pairing therefore fails, if at all, at the provider, so the registry narrows per model family below to make it fail at check time instead. o-series models predate none/minimal/xhigh; \"max\" is advertised only by the gpt-6 and gpt-5.6 families, and \"ultra\" only by gpt-6-astra, gpt-6-sol, gpt-5.6-sol and gpt-5.6-terra. The Responses reasoning guide states the accepted set is \"model-dependent and can include none, minimal, low, medium, high, xhigh, and max\", with defaults also model-dependent (gpt-5.6 and gpt-5.5 default to medium) — which is why narrowing lives per model here rather than at the harness level. Note that guide's detailed table omits \"minimal\" while its own opening sentence lists it; that is not treated as removal, since absence from one table contradicted by the same page's prose is not evidence a value was withdrawn. The Codex ReasoningEffort enum carries None|Minimal|Low|Medium|High|XHigh|Max|Ultra|Persistent plus a Custom(String) fallback, and the config schema types the key as a free-form non-empty string, so the harness itself does not reject a value — the narrowing here is what makes an unsupported pairing fail at check time instead of at the provider. \"ultra\" joined this vocabulary on 2026-09-23. It had been excluded because https://learn.chatgpt.com/docs/models documented the CLI effort list as Low|Medium|High|Extra high|Max and placed Ultra on web/desktop only; that page now lists \"Ultra — Maximum reasoning with automatic task delegation\" for the CLI surface, and https://learn.chatgpt.com/docs/config-file/config-reference documents model_reasoning_effort as \"low\", \"medium\", \"high\", \"xhigh\", \"max\", or \"ultra\" (\"Available levels depend on the model and client\"). It is registered only on the models whose entry in codex-rs/models-manager/models.json advertises it (gpt-6-astra, gpt-6-sol, gpt-5.6-sol, gpt-5.6-terra); the docs state GPT-6 Luna stops at Max, which the catalog agrees with. \"persistent\" stays out: it is an enum variant only — absent from the config reference and advertised by no model. This registry governs codex.toml, which is the CLI — an enum variant existing is not evidence the configured surface accepts it, the same distinction that applies to the ollama and openrouter routes. Note also that UI labels differ from wire values (the app shows \"Light\" for low, \"Extra High\" for xhigh), and that the app's Speed control (Fast/Standard) is a separate axis from effort with no documented codex.toml key, so it is not projectable at all.",
9
+ "reasoning_note": "Codex does not check a configured effort against the model's advertised supported_reasoning_levels: resolve_reasoning_effort (codex-rs/protocol/src/openai_models/reasoning_effort.rs) passes every value through unchanged except ultra (sent as the model's multi_agent_reasoning_effort, else max) and persistent (sent as Custom(\"disabled\")), and the advertised list is used only to fill the TUI effort picker and to remap the effort when a session switches model (core/src/session/turn_context.rs). An unsupported pairing therefore fails, if at all, at the provider, so the registry narrows per model family below to make it fail at check time instead. o-series models predate none/minimal/xhigh; \"max\" is advertised only by the gpt-6, gpt-6.1 and gpt-5.6 families, and \"ultra\" only by gpt-6-astra, gpt-6.1-sol, gpt-6-sol, gpt-5.6-sol and gpt-5.6-terra. The Responses reasoning guide states the accepted set is \"model-dependent and can include none, minimal, low, medium, high, xhigh, and max\", with defaults also model-dependent (gpt-5.6 and gpt-5.5 default to medium) — which is why narrowing lives per model here rather than at the harness level. Note that guide's detailed table omits \"minimal\" while its own opening sentence lists it; that is not treated as removal, since absence from one table contradicted by the same page's prose is not evidence a value was withdrawn. The Codex ReasoningEffort enum carries None|Minimal|Low|Medium|High|XHigh|Max|Ultra|Persistent plus a Custom(String) fallback, and the config schema types the key as a free-form non-empty string, so the harness itself does not reject a value — the narrowing here is what makes an unsupported pairing fail at check time instead of at the provider. \"ultra\" joined this vocabulary on 2026-09-23. It had been excluded because https://learn.chatgpt.com/docs/models documented the CLI effort list as Low|Medium|High|Extra high|Max and placed Ultra on web/desktop only; that page now lists \"Ultra — Maximum reasoning with automatic task delegation\" for the CLI surface, and https://learn.chatgpt.com/docs/config-file/config-reference documents model_reasoning_effort as \"low\", \"medium\", \"high\", \"xhigh\", \"max\", or \"ultra\" (\"Available levels depend on the model and client\"). It is registered only on the models whose entry in codex-rs/models-manager/models.json advertises it (gpt-6-astra, gpt-6.1-sol, gpt-6-sol, gpt-5.6-sol, gpt-5.6-terra); the docs state GPT-6 Luna stops at Max, which the catalog agrees with. \"persistent\" stays out: it is an enum variant only — absent from the config reference and advertised by no model. This registry governs codex.toml, which is the CLI — an enum variant existing is not evidence the configured surface accepts it, the same distinction that applies to the ollama and openrouter routes. Note also that UI labels differ from wire values (the app shows \"Light\" for low, \"Extra High\" for xhigh), and that the app's Speed control (Fast/Standard) is a separate axis from effort with no documented codex.toml key, so it is not projectable at all.",
10
10
  "namespaces": [
11
11
  {
12
12
  "id": "openai",
@@ -24,22 +24,26 @@
24
24
  "https://raw.githubusercontent.com/openai/codex/main/codex-rs/models-manager/models.json (gpt-6-sol, gpt-6-luna and per-model ultra support, verified 2026-09-23)",
25
25
  "https://learn.chatgpt.com/docs/config-file/config-reference (model_reasoning_effort values including ultra, verified 2026-09-23)",
26
26
  "https://learn.chatgpt.com/docs/models?surface=cli (CLI effort list including Ultra; GPT-6 Luna stops at Max, verified 2026-09-23)",
27
- "Context7 /openai/codex resolve_reasoning_effort, build_reasoning and turn_context (a configured effort is sent unchanged except ultra and persistent; verified 2026-09-23)"
27
+ "Context7 /openai/codex resolve_reasoning_effort, build_reasoning and turn_context (a configured effort is sent unchanged except ultra and persistent; verified 2026-09-23)",
28
+ "https://developers.openai.com/api/docs/models (GPT-6.1 Sol model ID and reasoning list, verified 2026-10-06)",
29
+ "https://developers.openai.com/api/docs/deprecations (2026-10-01 GPT-5.3-Codex, GPT-5.1, GPT-5.4-Nano deprecation, verified 2026-10-06)",
30
+ "https://learn.chatgpt.com/docs/models?surface=cli (GPT-5.5 leaves ChatGPT sign-in Codex on 2026-10-14, API unaffected; verified 2026-10-06)"
28
31
  ],
29
32
  "models": [
30
33
  { "id": "gpt-6-astra", "reasoning_efforts": ["low", "medium", "high", "xhigh", "max", "ultra"], "last_verified": "2026-09-23", "source": "https://raw.githubusercontent.com/openai/codex/main/codex-rs/models-manager/models.json", "note": "flagship end-to-end coding model; the reasoning guide states outright that GPT-6 Astra does not support \"none\" reasoning effort; ultra is advertised in the Codex model catalog" },
34
+ { "id": "gpt-6.1-sol", "reasoning_efforts": ["low", "medium", "high", "xhigh", "max", "ultra"], "last_verified": "2026-10-06", "source": "https://raw.githubusercontent.com/openai/codex/main/codex-rs/models-manager/models.json", "note": "GPT-6.1 Sol; the API models page lists reasoning low|medium|high|xhigh|max and the reasoning guide states it does not support none or minimal; ultra is advertised in the Codex model catalog. Default effort is documented inconsistently (the API reasoning guide says medium, the Codex catalog default_reasoning_level is low), so pin an effort rather than relying on the default; requires Codex CLI 0.153.0 or later" },
31
35
  { "id": "gpt-6-sol", "reasoning_efforts": ["low", "medium", "high", "xhigh", "max", "ultra"], "last_verified": "2026-09-23", "source": "https://raw.githubusercontent.com/openai/codex/main/codex-rs/models-manager/models.json", "note": "flagship coding and agentic model per the API models page; listed in the Codex picker, default medium; requires Codex CLI 0.155.0 or later" },
32
36
  { "id": "gpt-6-luna", "reasoning_efforts": ["low", "medium", "high", "xhigh", "max"], "last_verified": "2026-09-23", "source": "https://raw.githubusercontent.com/openai/codex/main/codex-rs/models-manager/models.json", "note": "efficient high-volume model per the API models page; the Codex docs state it supports efforts up to Max but not Ultra; requires Codex CLI 0.155.0 or later" },
33
37
  { "id": "gpt-5.6", "reasoning_efforts": ["none", "low", "medium", "high", "xhigh", "max"], "last_verified": "2026-09-05", "source": "https://developers.openai.com/api/docs/models", "note": "alias routing to gpt-5.6-sol; family drops minimal" },
34
38
  { "id": "gpt-5.6-sol", "reasoning_efforts": ["none", "low", "medium", "high", "xhigh", "max", "ultra"], "last_verified": "2026-09-23", "source": "https://raw.githubusercontent.com/openai/codex/main/codex-rs/models-manager/models.json", "note": "ultra is advertised in the Codex model catalog; none comes from the API models page. The Codex catalog does not list none for this model, but Codex sends a configured effort unchanged, so the API decides whether it is accepted" },
35
39
  { "id": "gpt-5.6-terra", "reasoning_efforts": ["none", "low", "medium", "high", "xhigh", "max", "ultra"], "last_verified": "2026-09-23", "source": "https://raw.githubusercontent.com/openai/codex/main/codex-rs/models-manager/models.json", "note": "ultra is advertised in the Codex model catalog; none comes from the API models page. The Codex catalog does not list none for this model, but Codex sends a configured effort unchanged, so the API decides whether it is accepted" },
36
40
  { "id": "gpt-5.6-luna", "reasoning_efforts": ["none", "low", "medium", "high", "xhigh", "max"], "last_verified": "2026-09-05", "source": "https://developers.openai.com/api/docs/models" },
37
- { "id": "gpt-5.5", "reasoning_efforts": ["none", "minimal", "low", "medium", "high", "xhigh"], "last_verified": "2026-09-08", "source": "Context7 /openai/codex codex-rs/models-manager/models.json (Codex model map, verified 2026-09-08)", "note": "still listed and visible in the Codex model map" },
41
+ { "id": "gpt-5.5", "reasoning_efforts": ["none", "minimal", "low", "medium", "high", "xhigh"], "status": "retiring", "retirement_date": "2026-10-14", "successor": "gpt-6-sol", "last_verified": "2026-10-06", "source": "https://learn.chatgpt.com/docs/models?surface=cli", "note": "retires from ChatGPT, ChatGPT Work and Codex on all plans on 2026-10-14; the page directs ChatGPT sign-in users to replace gpt-5.5 \"in ... custom agents\" with gpt-6-sol (gpt-6-luna on Free/Go). That page states the retirement does not apply to the OpenAI API, so API-key Codex users can still call it — the entry is kept, and kept as the documented successor of gpt-5-2025-08-07, but marked retiring because Codex under ChatGPT sign-in is a surface this namespace governs. The repo policy no longer pins it" },
38
42
  { "id": "gpt-5.5-pro", "reasoning_efforts": ["none", "minimal", "low", "medium", "high", "xhigh"], "last_verified": "2026-07-09" },
39
43
  { "id": "gpt-5.4", "reasoning_efforts": ["none", "minimal", "low", "medium", "high", "xhigh"], "last_verified": "2026-09-08", "source": "Context7 /openai/codex codex-rs/models-manager/models.json (Codex model map, verified 2026-09-08)", "note": "present but visibility:hide in the Codex model map — legacy, kept because the policy still pins it; not a lifecycle status, and no retirement date is documented" },
40
44
  { "id": "gpt-5.4-mini", "reasoning_efforts": ["none", "minimal", "low", "medium", "high", "xhigh"], "last_verified": "2026-09-08", "source": "Context7 /openai/codex codex-rs/models-manager/models.json (Codex model map, verified 2026-09-08)", "note": "present but visibility:hide in the Codex model map — legacy" },
41
- { "id": "gpt-5.4-nano", "reasoning_efforts": ["none", "minimal", "low", "medium", "high", "xhigh"], "last_verified": "2026-07-09" },
42
- { "id": "gpt-5.3-codex", "reasoning_efforts": ["none", "minimal", "low", "medium", "high", "xhigh"], "last_verified": "2026-07-09" },
45
+ { "id": "gpt-5.4-nano", "reasoning_efforts": ["none", "minimal", "low", "medium", "high", "xhigh"], "status": "retiring", "retirement_date": "2027-04-01", "successor": "gpt-6-luna", "last_verified": "2026-10-06", "source": "https://developers.openai.com/api/docs/deprecations", "note": "deprecation announced 2026-10-01; shutdown 2027-04-01, replacement gpt-6-luna" },
46
+ { "id": "gpt-5.3-codex", "reasoning_efforts": ["none", "minimal", "low", "medium", "high", "xhigh"], "status": "retiring", "retirement_date": "2027-04-01", "successor": "gpt-6-sol", "last_verified": "2026-10-06", "source": "https://developers.openai.com/api/docs/deprecations", "note": "deprecation announced 2026-10-01; shutdown 2027-04-01, replacement gpt-6-sol" },
43
47
  { "id": "gpt-5.1-codex-mini", "reasoning_efforts": ["none", "minimal", "low", "medium", "high", "xhigh"], "last_verified": "2026-07-09" },
44
48
  { "id": "gpt-4.1-mini", "reasoning_efforts": [], "last_verified": "2026-07-09", "note": "non-reasoning text model" },
45
49
  { "id": "gpt-4.1-nano", "reasoning_efforts": [], "last_verified": "2026-07-09", "note": "non-reasoning text model" },
@@ -95,7 +99,7 @@
95
99
  "https://openrouter.ai/docs/guides/best-practices/reasoning-tokens (chat-completions surface — wider vocabulary, not the route used here)",
96
100
  "https://openrouter.ai/docs/api_reference/responses/reasoning (Responses route; the vocabulary this namespace enforces, verified 2026-09-08)"
97
101
  ],
98
- "examples": ["anthropic/claude-sonnet-4.5", "openai/gpt-4o", "google/gemini-2.5-pro"]
102
+ "examples": ["openai/gpt-6.1-sol", "anthropic/claude-sonnet-5.5", "google/gemini-3.8-flash", "anthropic/claude-sonnet-4.5", "openai/gpt-4o", "google/gemini-2.5-pro"]
99
103
  }
100
104
  ]
101
105
  },
@@ -109,9 +113,9 @@
109
113
  "description": "Version-floating aliases resolved by Claude Code to maintained defaults. Enumerated rather than shape-only so that per-alias effort narrowing is expressible: the alias namespace is matched before the pinned anthropic namespace, so leaving it open would let model \"haiku\" inherit the full harness vocabulary and bypass the empty reasoning_efforts carried by the pinned Claude Haiku 4.5 ids.",
110
114
  "match": "^(sonnet|opus|haiku|fable|inherit)$",
111
115
  "membership": "closed",
112
- "sources": ["https://code.claude.com/docs/en/sub-agents", "https://platform.claude.com/docs/en/about-claude/models/overview"],
116
+ "sources": ["https://code.claude.com/docs/en/sub-agents", "https://platform.claude.com/docs/en/about-claude/models/overview", "https://code.claude.com/docs/en/model-config (per-provider alias resolution, verified 2026-10-06)"],
113
117
  "models": [
114
- { "id": "sonnet", "last_verified": "2026-09-05", "note": "floating alias for the maintained Sonnet default" },
118
+ { "id": "sonnet", "last_verified": "2026-10-06", "source": "https://code.claude.com/docs/en/model-config", "note": "floating alias for the maintained Sonnet default; resolves per provider — Sonnet 5.5 on the Anthropic API, Sonnet 4.6 on Claude Platform on AWS, Sonnet 4.5 on Amazon Bedrock, Google Cloud and Microsoft Foundry. Inherits the full vocabulary, which matches the Anthropic API resolution only: on a provider where it resolves to Sonnet 4.5 an effort value is unsupported" },
115
119
  { "id": "opus", "last_verified": "2026-09-05", "note": "floating alias for the maintained Opus default" },
116
120
  { "id": "haiku", "reasoning_efforts": [], "last_verified": "2026-09-05", "source": "https://platform.claude.com/docs/en/about-claude/models/overview", "note": "resolves to Claude Haiku 4.5, which does not support effort; gated here so the alias matches the pinned ids" },
117
121
  { "id": "fable", "last_verified": "2026-09-05", "note": "floating alias for the maintained Fable default" },
@@ -133,10 +137,11 @@
133
137
  { "id": "claude-opus-4-6", "reasoning_efforts": ["low", "medium", "high", "max"], "last_verified": "2026-09-08", "source": "https://platform.claude.com/docs/en/build-with-claude/effort", "note": "effort page lists max but not xhigh for Opus 4.6" },
134
138
  { "id": "claude-opus-4-5", "reasoning_efforts": ["low", "medium", "high"], "last_verified": "2026-09-08", "source": "https://platform.claude.com/docs/en/about-claude/models/model-ids-and-versions", "note": "preferred readable form; pre-4.6 alias pointing at claude-opus-4-5-20251101. Supports effort but is absent from both the xhigh and max availability lists" },
135
139
  { "id": "claude-opus-4-5-20251101", "reasoning_efforts": ["low", "medium", "high"], "last_verified": "2026-09-08", "source": "https://platform.claude.com/docs/en/build-with-claude/effort", "note": "dated snapshot the claude-opus-4-5 alias resolves to; pin only when an exact snapshot is required" },
140
+ { "id": "claude-sonnet-5-5", "last_verified": "2026-10-06", "source": "https://platform.claude.com/docs/en/build-with-claude/effort", "note": "current Sonnet lineup; the dateless ID is its own pinned snapshot; on both the xhigh and max lists (\"supports all five effort levels, and high is the default\"); requires Claude Code v2.1.284 or later" },
136
141
  { "id": "claude-sonnet-5", "last_verified": "2026-09-05", "source": "https://platform.claude.com/docs/en/about-claude/models/overview" },
137
142
  { "id": "claude-sonnet-4-6", "reasoning_efforts": ["low", "medium", "high", "max"], "last_verified": "2026-09-08", "source": "https://platform.claude.com/docs/en/build-with-claude/effort", "note": "effort page lists max but not xhigh for Sonnet 4.6" },
138
- { "id": "claude-sonnet-4-5", "reasoning_efforts": [], "last_verified": "2026-09-08", "source": "https://platform.claude.com/docs/en/about-claude/models/model-ids-and-versions", "note": "preferred readable form; pre-4.6 alias pointing at claude-sonnet-4-5-20250929. Absent from the effort page supported-models list, so effort is not projectable" },
139
- { "id": "claude-sonnet-4-5-20250929", "reasoning_efforts": [], "last_verified": "2026-09-08", "source": "https://platform.claude.com/docs/en/build-with-claude/effort", "note": "dated snapshot the claude-sonnet-4-5 alias resolves to; pin only when an exact snapshot is required" },
143
+ { "id": "claude-sonnet-4-5", "reasoning_efforts": [], "last_verified": "2026-10-06", "source": "https://platform.claude.com/docs/en/about-claude/models/model-ids-and-versions", "status": "retiring", "retirement_date": "2026-11-30", "successor": "claude-sonnet-5-5", "note": "preferred readable form; pre-4.6 alias pointing at claude-sonnet-4-5-20250929, so it retires with that snapshot (deprecated 2026-09-30, replacement claude-sonnet-5-5). Absent from the effort page supported-models list, so effort is not projectable" },
144
+ { "id": "claude-sonnet-4-5-20250929", "reasoning_efforts": [], "status": "retiring", "retirement_date": "2026-11-30", "successor": "claude-sonnet-5-5", "last_verified": "2026-10-06", "source": "https://platform.claude.com/docs/en/about-claude/model-deprecations", "note": "dated snapshot the claude-sonnet-4-5 alias resolves to; deprecated 2026-09-30, retiring 2026-11-30, replacement claude-sonnet-5-5" },
140
145
  { "id": "claude-haiku-4-5", "reasoning_efforts": [], "last_verified": "2026-09-05", "source": "https://platform.claude.com/docs/en/build-with-claude/effort", "note": "absent from the effort page supported-models list" },
141
146
  { "id": "claude-haiku-4-5-20251001", "reasoning_efforts": [], "last_verified": "2026-09-05", "source": "https://platform.claude.com/docs/en/about-claude/models/overview", "note": "dated snapshot ID; effort not supported" },
142
147
  { "id": "claude-fable-5", "last_verified": "2026-09-05", "source": "https://platform.claude.com/docs/en/about-claude/model-deprecations" }
@@ -158,12 +163,22 @@
158
163
  },
159
164
  {
160
165
  "id": "named",
161
- "description": "Named models documented for Cursor subagent frontmatter. Cursor's picker evolves quickly and availability is plan/admin-dependent — verify with Cursor.models.list() and extend via the refresh workflow. A model id may carry Cursor's documented per-model parameter group in square brackets (cursor.com/docs/subagents), e.g. claude-opus-5[effort=high,context=300k]; the documented keys are fast, effort and context. The allowlist below enumerates BASE ids only — the parameter group is a per-rule modifier, so membership is checked against the id with the group stripped. This pattern deliberately shapes the group only (charset, single trailing pair of brackets) rather than encoding key=value structure: a nested-quantifier pattern is rejected by the registry ReDoS guard, and the precise structure — key=value pairs, no duplicates, keys restricted to the documented set — is enforced semantically by scripts/model-policy.mjs, which gives a clearer error than a regex miss would.",
166
+ "description": "Named models documented for Cursor subagent frontmatter. Cursor's picker evolves quickly and availability is plan/admin-dependent — verify with Cursor.models.list() and extend via the refresh workflow. A model id may carry Cursor's documented per-model parameter group in square brackets (cursor.com/docs/subagents), e.g. claude-opus-5[effort=high,context=300k]; the documented keys are fast, effort and context. The allowlist below enumerates BASE ids only — the parameter group is a per-rule modifier, so membership is checked against the id with the group stripped. This pattern deliberately shapes the group only (charset, single trailing pair of brackets) rather than encoding key=value structure: a nested-quantifier pattern is rejected by the registry ReDoS guard, and the precise structure — key=value pairs, no duplicates, keys restricted to the documented set — is enforced semantically by scripts/model-policy.mjs, which gives a clearer error than a regex miss would. Evidence for entries verified 2026-10-06: the subagents page says a specific model ID may be used and points to the models reference for available IDs; each per-model page under cursor.com/docs/models states a \"Model ID\" (e.g. claude-sonnet-5-5, hyphenated, not claude-sonnet-5.5) and those are the values registered. The subagents page itself names only composer-2 and gpt-5.6-sol, so confirm with Cursor.models.list() before relying on one.",
162
167
  "match": "^[a-z0-9][a-z0-9.-]*(\\[[a-z0-9.=,]+\\])?$",
163
168
  "membership": "closed",
164
- "sources": ["https://cursor.com/docs/subagents", "https://cursor.com/docs/cli/reference/configuration"],
169
+ "sources": ["https://cursor.com/docs/subagents", "https://cursor.com/docs/cli/reference/configuration", "https://cursor.com/docs/models (per-model pages give the Model ID, verified 2026-10-06)"],
165
170
  "models": [
166
171
  { "id": "gpt-5.6-sol", "last_verified": "2026-09-05", "source": "https://cursor.com/docs/subagents" },
172
+ { "id": "claude-sonnet-5-5", "last_verified": "2026-10-06", "source": "https://cursor.com/docs/models/claude-sonnet-5-5" },
173
+ { "id": "claude-opus-5-5", "last_verified": "2026-10-06", "source": "https://cursor.com/docs/models/claude-opus-5-5" },
174
+ { "id": "claude-fable-5-1", "last_verified": "2026-10-06", "source": "https://cursor.com/docs/models/claude-fable-5-1" },
175
+ { "id": "gpt-5.6-terra", "last_verified": "2026-10-06", "source": "https://cursor.com/docs/models/gpt-5-6-terra" },
176
+ { "id": "gpt-5.6-luna", "last_verified": "2026-10-06", "source": "https://cursor.com/docs/models/gpt-5-6-luna" },
177
+ { "id": "gemini-3.1-pro", "last_verified": "2026-10-06", "source": "https://cursor.com/docs/models/gemini-3-1-pro" },
178
+ { "id": "gemini-3.8-flash", "last_verified": "2026-10-06", "source": "https://cursor.com/docs/models/gemini-3-8-flash" },
179
+ { "id": "grok-4.7", "last_verified": "2026-10-06", "source": "https://cursor.com/docs/models/grok-4-7" },
180
+ { "id": "grok-4.6", "last_verified": "2026-10-06", "source": "https://cursor.com/docs/models/grok-4-6" },
181
+ { "id": "muse-spark-1.3", "last_verified": "2026-10-06", "source": "https://cursor.com/docs/models/muse-spark-1-3" },
167
182
  { "id": "gpt-5.5", "last_verified": "2026-07-09" },
168
183
  { "id": "gpt-5", "last_verified": "2026-07-09" },
169
184
  { "id": "claude-opus-5", "last_verified": "2026-09-05", "source": "https://cursor.com/docs/subagents" },
@@ -0,0 +1,131 @@
1
+ [
2
+ {
3
+ "id": "audit-trail",
4
+ "name": "Audit Trail",
5
+ "version": "1.0.0",
6
+ "description": "Appends one JSON line per tool call to a per-session log with sha256 hashes of the arguments and result.",
7
+ "reach_level": 1,
8
+ "events": [
9
+ "PostToolUse"
10
+ ],
11
+ "harnesses": [
12
+ "claude-code",
13
+ "codex",
14
+ "kiro"
15
+ ],
16
+ "path": "mods/audit-trail",
17
+ "footprint": {
18
+ "env_reads": [
19
+ "VANGUARD_AUDIT_TRAIL_LOG_DIR",
20
+ "VANGUARD_AUDIT_TRAIL_SESSION_ID",
21
+ "VANGUARD_AUDIT_TRAIL_AGENT_ID"
22
+ ],
23
+ "file_writes": [
24
+ ".audit/**"
25
+ ],
26
+ "spawns": [],
27
+ "egress_hosts": []
28
+ }
29
+ },
30
+ {
31
+ "id": "blast-radius-guard",
32
+ "name": "Blast Radius Guard",
33
+ "version": "1.0.0",
34
+ "description": "Asks before, or blocks, destructive shell commands and writes to system paths.",
35
+ "reach_level": 0,
36
+ "events": [
37
+ "PreToolUse"
38
+ ],
39
+ "harnesses": [
40
+ "claude-code",
41
+ "codex",
42
+ "kiro"
43
+ ],
44
+ "path": "mods/blast-radius-guard",
45
+ "footprint": {
46
+ "env_reads": [
47
+ "VANGUARD_BLAST_RADIUS_GUARD_MODE",
48
+ "VANGUARD_BLAST_RADIUS_GUARD_PATTERNS"
49
+ ],
50
+ "file_writes": [],
51
+ "spawns": [],
52
+ "egress_hosts": []
53
+ }
54
+ },
55
+ {
56
+ "id": "context-burn",
57
+ "name": "Context Burn",
58
+ "version": "1.0.0",
59
+ "description": "Tracks context use per session in a status file and warns at 70% and 90% where the harness reports token use.",
60
+ "reach_level": 1,
61
+ "events": [
62
+ "PostToolUse",
63
+ "SessionStart"
64
+ ],
65
+ "harnesses": [
66
+ "claude-code",
67
+ "codex",
68
+ "kiro"
69
+ ],
70
+ "path": "mods/context-burn",
71
+ "footprint": {
72
+ "env_reads": [
73
+ "VANGUARD_CONTEXT_BURN_STATUS_PATH"
74
+ ],
75
+ "file_writes": [
76
+ ".claude/context-burn-status/*.json",
77
+ ".kiro/context-burn-status/*.json",
78
+ ".codex/context-burn-status/*.json"
79
+ ],
80
+ "spawns": [],
81
+ "egress_hosts": []
82
+ }
83
+ },
84
+ {
85
+ "id": "live-guard-gate",
86
+ "name": "Live Guard Gate",
87
+ "version": "1.0.0",
88
+ "description": "Asks before live cloud mutations and names the guard agent that should review them.",
89
+ "reach_level": 0,
90
+ "events": [
91
+ "PreToolUse"
92
+ ],
93
+ "harnesses": [
94
+ "claude-code",
95
+ "codex",
96
+ "kiro"
97
+ ],
98
+ "path": "mods/live-guard-gate",
99
+ "footprint": {
100
+ "env_reads": [],
101
+ "file_writes": [],
102
+ "spawns": [],
103
+ "egress_hosts": []
104
+ }
105
+ },
106
+ {
107
+ "id": "secret-redactor",
108
+ "name": "Secret Redactor",
109
+ "version": "1.0.0",
110
+ "description": "Asks before tool calls whose input carries a credential and redacts credentials from tool output.",
111
+ "reach_level": 0,
112
+ "events": [
113
+ "PreToolUse",
114
+ "PostToolUse"
115
+ ],
116
+ "harnesses": [
117
+ "claude-code",
118
+ "codex",
119
+ "kiro"
120
+ ],
121
+ "path": "mods/secret-redactor",
122
+ "footprint": {
123
+ "env_reads": [
124
+ "VANGUARD_SECRET_REDACTOR_PATTERNS"
125
+ ],
126
+ "file_writes": [],
127
+ "spawns": [],
128
+ "egress_hosts": []
129
+ }
130
+ }
131
+ ]
package/mods/README.md ADDED
@@ -0,0 +1,220 @@
1
+ # Vanguard Mods
2
+
3
+ <div align="center">
4
+
5
+ <img src="../assets/logos/vanguard-frontier-agentic-logo.png" alt="Vanguard Frontier Agentic" width="140" />
6
+
7
+ <p><strong>Less “oops.” More visibility.</strong></p>
8
+ <p>Tool-call guardrails and observers for Claude Code, Kiro and Codex.</p>
9
+
10
+ <p>
11
+ <a href="#pick-a-mod">Pick a mod</a> &nbsp;·&nbsp;
12
+ <a href="#get-started">Get started</a> &nbsp;·&nbsp;
13
+ <a href="#know-the-limits">Know the limits</a> &nbsp;·&nbsp;
14
+ <a href="#under-the-hood">Under the hood</a>
15
+ </p>
16
+
17
+ </div>
18
+
19
+ ---
20
+
21
+ Skills guide the agent. **Mods inspect its tool calls.** Ask before risky actions,
22
+ redact supported output, or record what happened. Pick what you need—not everything at once.
23
+
24
+ <a id="pick-a-mod"></a>
25
+
26
+ ## 🧰 Pick your guardrails
27
+
28
+ | Mod | The job | Reach |
29
+ | --- | --- | --- |
30
+ | [Secret Redactor](secret-redactor/README.md) | Spot credential-shaped input; redact supported output. | L0 |
31
+ | [Blast Radius Guard](blast-radius-guard/README.md) | Ask or deny on destructive commands and system-path writes. | L0 |
32
+ | [Live Guard Gate](live-guard-gate/README.md) | Flag cloud mutations and name guard agents to consult. | L0 |
33
+ | [Context Burn](context-burn/README.md) | Count tool calls; warn on reported context use where supported. | L1 |
34
+ | [Audit Trail](audit-trail/README.md) | Append call hashes and per-session sequence numbers. | L1 |
35
+
36
+ **Reach is a label, not a sandbox:** L0 = no declared writes/spawns/network;
37
+ L1 = file writes; L2 = subprocesses; L3 = network (warned, not blocked).
38
+ Reads are allowed at L0; starting the Node adapter is not a mod-spawned subprocess.
39
+
40
+ **Support differs:** Kiro/Codex deny instead of asking and cannot redact output.
41
+ Claude Code Audit Trail needs classic. Classic Post hooks miss failed calls.
42
+
43
+ <details>
44
+ <summary><strong>🔎 Same mod, different harness? Check the fine print.</strong></summary>
45
+
46
+ | Mod | Claude Code native | Claude Code classic | Kiro / Codex |
47
+ | --- | --- | --- | --- |
48
+ | Secret Redactor | Ask on input; redact or withhold output | Ask on input; replace successful output only | Deny matching input; no output redaction |
49
+ | Blast Radius Guard | Ask in confirm mode; deny in block mode | Same | Deny in either mode |
50
+ | Live Guard Gate | Ask and name guard agents | Same | Deny and name guard agents |
51
+ | Context Burn | Session context usage and threshold toasts | Tool-call counter only | Tool-call counter only |
52
+ | Audit Trail | Unsupported—use classic | Append after successful calls | Append; Kiro payload interpretation is degraded |
53
+
54
+ Guards use `PreToolUse`; supported redaction and observers use `PostToolUse`;
55
+ Context Burn also uses `SessionStart`.
56
+ Native equivalents are `tool.check`, `tool.call` and `session.start`.
57
+
58
+ Kiro's stdin fields are undocumented: guards scan the whole payload if input is
59
+ unrecognized; Audit Trail hashes that payload as arguments and `null` as the result.
60
+ Set `VANGUARD_AUDIT_TRAIL_SESSION_ID` to avoid its shared `unsessioned` fallback.
61
+ See generated `<harness>/UNSUPPORTED.md` for remaining limits.
62
+
63
+ </details>
64
+
65
+ ---
66
+
67
+ <a id="get-started"></a>
68
+
69
+ ## 🚀 Get started
70
+
71
+ Use a local checkout. Command adapters need **Node 22+**; native modules use the
72
+ harness runtime. No service needed.
73
+
74
+ ```bash
75
+ source=/absolute/path/to/vanguard-frontier-agentic
76
+ target=/absolute/path/to/your/project
77
+ mod=blast-radius-guard
78
+ ```
79
+
80
+ > [!IMPORTANT]
81
+ > **Native or classic. Not both for the same mod.** They duplicate checks and can
82
+ > double-count Context Burn. Audit Trail has no native adapter—use classic.
83
+
84
+ <details>
85
+ <summary><strong>🤖 Claude Code native</strong> — load a plugin root</summary>
86
+
87
+ ```bash
88
+ cd "$target"
89
+ claude --plugin-dir "$source/mods/$mod"
90
+ ```
91
+
92
+ Not for `audit-trail`. Native API: early access. Check the verified build in the
93
+ [implementation notes](#under-the-hood) before upgrading.
94
+
95
+ </details>
96
+
97
+ <details>
98
+ <summary><strong>🤖 Claude Code classic</strong> — copy, then merge hooks</summary>
99
+
100
+ ```bash
101
+ mkdir -p "$target/.claude/vanguard-mods/$mod"
102
+ cp -R "$source/mods/$mod/bin" "$source/mods/$mod/lib" "$target/.claude/vanguard-mods/$mod/"
103
+ ```
104
+
105
+ Append `mods/<id>/claude-code/settings.hooks.json` entries under `hooks` in the
106
+ target's `.claude/settings.json`. **Keep existing hooks/settings.** Generated command:
107
+
108
+ ```text
109
+ node "$CLAUDE_PROJECT_DIR/.claude/vanguard-mods/<id>/bin/hook.mjs" --harness claude-code --event <event>
110
+ ```
111
+
112
+ `CLAUDE_PROJECT_DIR` stays at the initial project root, even across worktree changes.
113
+ Observers resolve relative writes from the installed adapter location.
114
+
115
+ </details>
116
+
117
+ <details>
118
+ <summary><strong>🔮 Kiro</strong> — copy the adapters and hook JSON</summary>
119
+
120
+ ```bash
121
+ mkdir -p "$target/.kiro/hooks" "$target/.kiro/vanguard-mods/$mod"
122
+ cp -R "$source/mods/$mod/bin" "$source/mods/$mod/lib" "$target/.kiro/vanguard-mods/$mod/"
123
+ cp "$source/mods/$mod/kiro/"*-hook.json "$target/.kiro/hooks/"
124
+ ```
125
+
126
+ Copy only `*-hook.json`, not `UNSUPPORTED.md`. Replace the relative script path
127
+ inside each hook with its **absolute installed path**: hook cwd is undocumented.
128
+ Commands use `--harness kiro --event <event>`; confirmation requests deny with exit 2.
129
+
130
+ </details>
131
+
132
+ <details>
133
+ <summary><strong>⚡ Codex</strong> — copy, merge, then review trust</summary>
134
+
135
+ ```bash
136
+ mkdir -p "$target/.codex/vanguard-mods/$mod"
137
+ cp -R "$source/mods/$mod/bin" "$source/mods/$mod/lib" "$target/.codex/vanguard-mods/$mod/"
138
+ ```
139
+
140
+ Append event entries from `mods/<id>/codex/hooks.json` to the target's
141
+ `.codex/hooks.json`, preserving existing hooks. Replace relative script paths with
142
+ **absolute installed paths**; hook cwd is undocumented. Complete Codex's hook trust review.
143
+
144
+ Commands use `--harness codex --event <event>`; asks deny with exit 2.
145
+ Redactor Post is unsupported; the narrower MCP output field is not substituted.
146
+
147
+ </details>
148
+
149
+ **Try it before trusting it:** run ordinary and harmless pattern-matching calls in
150
+ the harness. Inspect the decision, output or observer file—not just exit codes.
151
+ Repeat after path, permission, Node or harness changes.
152
+
153
+ ---
154
+
155
+ <a id="know-the-limits"></a>
156
+
157
+ ## ⚠️ Guardrails, not guarantees
158
+
159
+ - **A hook must run to help.** Guards deny handler/input errors; missing Node,
160
+ moved scripts, startup crashes and timeouts can leave calls unguarded.
161
+ CLI errors may not block; Kiro IDE handling differs.
162
+ - **Regex is not complete DLP.** Pre checks never rewrite arguments; approved input
163
+ still reaches the tool. Post redaction does not scrub other logs or network traffic.
164
+ Redactor errors attempt withholding; classic shape mismatches may be ignored.
165
+ [Withholding has limits, too](secret-redactor/README.md#limitations).
166
+ - **A review prompt is not authorization.** Live Guard Gate names agents—it never
167
+ spawns them or verifies production accounts. Guards scan strings, not shell semantics;
168
+ relative paths stay unresolved. Bypass modes can auto-approve an ask.
169
+ - **Observers are not compliance proof.** Node counters track calls, not tokens or
170
+ spend; only native Context Burn uses reported context data. Unlocked updates can
171
+ lose increments. Audit logs are mutable, unsigned and not tamper-evident.
172
+ Observer failures do not block tools.
173
+
174
+ <details>
175
+ <summary><strong>🗂️ State files and custom patterns</strong></summary>
176
+
177
+ - **Context Burn:** `.<harness>/context-burn-status/<session-hash>.json`
178
+ (`.claude` for Claude Code). Filenames use the full lowercase SHA-256 of the UTF-8
179
+ session ID, never raw IDs. Missing/empty Node IDs share `unsessioned` state.
180
+ `VANGUARD_CONTEXT_BURN_STATUS_PATH` is an exact override; sharing it opts out of
181
+ isolation. Old single-file state is not migrated automatically.
182
+ - **Audit Trail:** `.audit/<UTC-date>/<session>.jsonl`; an earlier file is reused
183
+ across dates. `VANGUARD_AUDIT_TRAIL_LOG_DIR` overrides the directory.
184
+ - **Footprints disclose defaults, not containment.** Overrides can write outside
185
+ declared globs; overlap checks do not constrain operator overrides.
186
+ - **Patterns append, never replace.** `VANGUARD_SECRET_REDACTOR_PATTERNS` and
187
+ `VANGUARD_BLAST_RADIUS_GUARD_PATTERNS` accept extra pattern files. Use absolute paths.
188
+ Unreadable/invalid configured files deny guards or withhold redactor output.
189
+ Each mod README documents schemas and environment names.
190
+
191
+ </details>
192
+
193
+ <a id="under-the-hood"></a>
194
+
195
+ ## 🔧 Under the hood
196
+
197
+ `mod.toml` declares support and footprint; `lib/core.mjs` holds shared behavior.
198
+ Edit those sources, `patterns.json`, entries and native modules—not generated adapters.
199
+ The generator produces manifests, shared runtime copies, pattern modules and `catalog/mods.json`.
200
+
201
+ <details>
202
+ <summary><strong>🛠️ Contributing? Run the gates.</strong></summary>
203
+
204
+ ```bash
205
+ npm run mods:write
206
+ npm run validate:mods
207
+ npm run test:fuzz
208
+ npm run asset-integrity:write # last generator, on its own
209
+ npm run validate
210
+ ```
211
+
212
+ The Python gate needs **Python 3.11+**. For each supported native mod, also run
213
+ `claude plugin validate mods/<id>` and `claude plugin test mods/<id>` locally;
214
+ CI has no native CLI. Spelling and Markdown lint are separate gates.
215
+ Static checks are not proof that an installed hook runs.
216
+
217
+ </details>
218
+
219
+ [Implementation plan](https://github.com/VincentChuWaiChow/vanguard-frontier-agentic/blob/dc8b29c823fb89dc4246413f38a7b82fdd34aa18/.claude/plan/cross-harness-mods.md)
220
+ · [Spec deviations](https://github.com/VincentChuWaiChow/vanguard-frontier-agentic/blob/dc8b29c823fb89dc4246413f38a7b82fdd34aa18/.kiro/specs/cross-harness-mods/deviations.md)
@@ -0,0 +1,70 @@
1
+ # Audit Trail
2
+
3
+ Appends one JSON line per tool call to a per-session log. It is an honest append log: it makes
4
+ no claim of immutability, carries no signatures, and any process with write access can edit or
5
+ delete the file.
6
+
7
+ ## Reach and declared footprint
8
+
9
+ **L1 (file writes).** The manifest declares default writes to `.audit/**`, reads
10
+ `VANGUARD_AUDIT_TRAIL_LOG_DIR`, `VANGUARD_AUDIT_TRAIL_SESSION_ID` and
11
+ `VANGUARD_AUDIT_TRAIL_AGENT_ID`, and declares no subprocess spawns or network egress.
12
+ This is capability disclosure, not isolation; the log-directory override can write
13
+ outside the declared default footprint.
14
+
15
+ ## What it records
16
+
17
+ | Field | Value |
18
+ |---|---|
19
+ | `timestamp` | UTC ISO 8601 time of the hook run |
20
+ | `session_id` | The safe session id (see below) |
21
+ | `agent_id` | `VANGUARD_AUDIT_TRAIL_AGENT_ID`, or `null` |
22
+ | `tool_name` | The payload `tool_name`, or `null` |
23
+ | `args_hash` | SHA-256 of the canonical JSON of `tool_input` (`null` when absent) |
24
+ | `result_hash` | SHA-256 of the canonical JSON of `tool_response` (`null` when absent) |
25
+ | `sequence_number` | 1, 2, 3 ... per session file |
26
+
27
+ Only hashes are stored, never the arguments or results themselves.
28
+
29
+ ## File layout
30
+
31
+ `<dir>/<YYYY-MM-DD>/<session>.jsonl`, where `<dir>` defaults to `.audit` and dates are UTC. If
32
+ the session already has a file under an earlier date directory, that file is reused, so the
33
+ sequence does not reset at midnight. A relative `<dir>` resolves against the project root when
34
+ the hook runs from its installed location, otherwise against the working directory.
35
+
36
+ ## Session ids
37
+
38
+ 1. `VANGUARD_AUDIT_TRAIL_SESSION_ID`, when set and non-empty.
39
+ 2. The payload `session_id`, when a non-empty string.
40
+ 3. Otherwise `unsessioned`.
41
+
42
+ An id that does not match `[A-Za-z0-9._-]{1,128}` is replaced by the first 32 hex characters of
43
+ its SHA-256, so it can never escape the date directory.
44
+
45
+ ## Environment
46
+
47
+ | Variable | Purpose |
48
+ |---|---|
49
+ | `VANGUARD_AUDIT_TRAIL_LOG_DIR` | Log directory (default `.audit`). It can point outside the declared `.audit/**` write footprint; that is the operator's choice. |
50
+ | `VANGUARD_AUDIT_TRAIL_SESSION_ID` | Session id override |
51
+ | `VANGUARD_AUDIT_TRAIL_AGENT_ID` | Value for `agent_id` |
52
+
53
+ ## Harness support
54
+
55
+ | Harness | Status |
56
+ |---|---|
57
+ | Claude Code native | Unsupported: the native API has no file append. Install the classic hook instead. |
58
+ | Claude Code classic | Supported. `PostToolUse` fires only after a tool succeeds, so failed calls are not logged. |
59
+ | Kiro | Degraded: stdin field names are undocumented, so `args_hash` covers the whole payload, `result_hash` hashes `null`, and without a session id env var every session shares the `unsessioned` log. |
60
+ | Codex | Supported. |
61
+
62
+ ## Locking and failure
63
+
64
+ Each append takes an exclusive `<dir>/<session>.lock` before selecting the session file
65
+ (retrying for up to 2 s). Locks are never automatically stolen or removed based on age.
66
+ After a crash, confirm no writer remains before manually removing its orphaned lock.
67
+ A corrupt or unterminated last line, a lock timeout, or any I/O error exits 1 with a message on stderr and
68
+ appends nothing. A failure is loud but never blocks the tool call.
69
+
70
+ Requires Node 22+. Install: see `mods/README.md`.