@khoavu882/doflow 2.0.0-beta.4 → 2.0.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 (497) hide show
  1. package/README.md +12 -11
  2. package/bin/doflow.js +21 -11
  3. package/core/.antigravity-plugin/plugin.json +1 -3
  4. package/core/.claude-plugin/plugin.json +1 -1
  5. package/core/.codex-plugin/plugin.json +1 -1
  6. package/core/.plugin/plugin.json +1 -1
  7. package/core/harnesses/claude/hooks/lib.sh +43 -24
  8. package/core/harnesses/claude/hooks/mcp-tool-guard.sh +7 -17
  9. package/core/harnesses/claude/hooks/permission-audit.sh +3 -0
  10. package/core/harnesses/claude/hooks/post-compact.sh +35 -32
  11. package/core/harnesses/claude/hooks/post-edit-lint.sh +2 -0
  12. package/core/harnesses/claude/hooks/post-shell-observe.sh +48 -0
  13. package/core/harnesses/claude/hooks/post-tool-failure.sh +3 -0
  14. package/core/harnesses/claude/hooks/pre-bash-guard.sh +7 -17
  15. package/core/harnesses/claude/hooks/pre-compact.sh +23 -27
  16. package/core/harnesses/claude/hooks/pre-implement-gate.sh +7 -18
  17. package/core/harnesses/claude/hooks/session-end.sh +23 -10
  18. package/core/harnesses/claude/hooks/session-start.sh +5 -3
  19. package/core/harnesses/claude/hooks/skill-config-audit.sh +3 -0
  20. package/core/harnesses/claude/hooks/stop-check.sh +5 -3
  21. package/core/harnesses/claude/hooks/subagent-audit.sh +5 -5
  22. package/core/harnesses/claude/hooks/user-prompt-submit.sh +5 -3
  23. package/core/harnesses/claude/settings/settings.json +18 -0
  24. package/core/harnesses/claude/statusline/doflow-statusline.sh +1 -0
  25. package/core/harnesses/codex/agents/core-implementer.toml +1 -0
  26. package/core/harnesses/codex/agents/delivery-lead.toml +10 -0
  27. package/core/harnesses/codex/agents/quality-guardian.toml +1 -1
  28. package/core/harnesses/codex/agents/research-writer.toml +1 -1
  29. package/core/harnesses/codex/agents/reviewer.toml +10 -0
  30. package/core/harnesses/codex/agents/spec-analyst.toml +1 -1
  31. package/core/harnesses/codex/agents/system-architect.toml +1 -1
  32. package/core/harnesses/codex/hooks/lib.sh +44 -25
  33. package/core/harnesses/codex/hooks/mcp-tool-guard.sh +7 -15
  34. package/core/harnesses/codex/hooks/post-edit-lint.impl.sh +3 -1
  35. package/core/harnesses/codex/hooks/pre-bash-guard.sh +7 -15
  36. package/core/harnesses/codex/hooks/pre-compact.impl.sh +29 -26
  37. package/core/harnesses/codex/hooks/pre-implement-gate.sh +7 -16
  38. package/core/harnesses/codex/hooks/session-end.impl.sh +23 -10
  39. package/core/harnesses/codex/hooks/session-start.sh +5 -3
  40. package/core/harnesses/codex/hooks/stop-check.sh +6 -5
  41. package/core/harnesses/codex/hooks/subagent-audit.sh +18 -6
  42. package/core/harnesses/codex/hooks/user-prompt-submit.sh +5 -4
  43. package/core/harnesses/copilot/hooks/doflow-lib.sh +93 -0
  44. package/core/harnesses/copilot/hooks/doflow-mcp-tool-guard.sh +9 -0
  45. package/core/harnesses/copilot/hooks/doflow-pre-bash-guard.sh +9 -0
  46. package/core/harnesses/copilot/hooks/doflow-pre-implement-gate.sh +9 -0
  47. package/core/harnesses/copilot/hooks/doflow-session-start.sh +9 -0
  48. package/core/harnesses/copilot/hooks/doflow-stop-check.sh +9 -0
  49. package/core/harnesses/copilot/hooks/doflow-subagent-start.sh +9 -0
  50. package/core/harnesses/copilot/hooks/doflow-subagent-stop.sh +9 -0
  51. package/core/harnesses/copilot/hooks/doflow.json +57 -0
  52. package/core/harnesses/kiro/agents/doflow.json +1 -1
  53. package/core/harnesses/kiro/hooks/lib.sh +26 -6
  54. package/core/harnesses/kiro/hooks/mcp-tool-guard.sh +21 -5
  55. package/core/harnesses/kiro/hooks/pre-bash-guard.sh +21 -5
  56. package/core/harnesses/kiro/hooks/pre-implement-gate.sh +21 -5
  57. package/core/harnesses/kiro/hooks/session-start.sh +12 -5
  58. package/core/harnesses/kiro/hooks/stop-check.sh +22 -30
  59. package/core/harnesses/pi/extensions/doflow-guard.js +167 -0
  60. package/core/harnesses/shared/hooks/ENVELOPE_MIGRATION.md +27 -12
  61. package/core/harnesses/shared/hooks/adapters/antigravity.js +14 -57
  62. package/core/harnesses/shared/hooks/bridge/bridge.sh +277 -0
  63. package/core/harnesses/shared/hooks/bridge/envelope.jq +129 -0
  64. package/core/harnesses/shared/hooks/bridge/observe-model.sh +75 -0
  65. package/core/harnesses/shared/hooks/bridge/respond.sh +70 -0
  66. package/core/harnesses/shared/hooks/policies/blocked-patterns.conf +28 -14
  67. package/core/harnesses/shared/hooks/policies/capture-failure.sh +51 -16
  68. package/core/harnesses/shared/hooks/policies/compact-text.sh +46 -0
  69. package/core/harnesses/shared/hooks/policies/contract.sh +78 -0
  70. package/core/harnesses/shared/hooks/policies/deny-json.sh +35 -9
  71. package/core/harnesses/shared/hooks/policies/emission-rules.sh +37 -0
  72. package/core/harnesses/shared/hooks/policies/emission.jq +209 -0
  73. package/core/harnesses/shared/hooks/policies/emission.sh +383 -0
  74. package/core/harnesses/shared/hooks/policies/identity.sh +177 -0
  75. package/core/harnesses/shared/hooks/policies/lib.sh +65 -40
  76. package/core/harnesses/shared/hooks/policies/mcp-tool-guard.sh +48 -35
  77. package/core/harnesses/shared/hooks/policies/pre-bash-guard.sh +284 -33
  78. package/core/harnesses/shared/hooks/policies/pre-implementation-gate.sh +180 -110
  79. package/core/harnesses/shared/hooks/policies/session-context.sh +66 -7
  80. package/core/harnesses/shared/hooks/policies/stop-check.sh +61 -23
  81. package/core/harnesses/shared/hooks/policies/subagent-audit.sh +39 -6
  82. package/core/harnesses/shared/hooks/policies/summary-store.sh +347 -0
  83. package/core/harnesses/shared/hooks/policies/user-prompt-submit.sh +97 -159
  84. package/core/harnesses/shared/hooks/stream-hook-runner.js +114 -187
  85. package/core/harnesses/shared/locator/doflow-run +2 -3
  86. package/core/registry/advice.json +3 -3
  87. package/core/registry/assets.json +72 -80
  88. package/core/registry/capabilities.json +12 -0
  89. package/core/registry/contracts.json +60 -33
  90. package/core/registry/contribution-points.json +32 -0
  91. package/core/registry/gates.json +32 -0
  92. package/core/registry/guidance-caps.json +40 -0
  93. package/core/registry/harnesses.json +1542 -277
  94. package/core/registry/lifecycle.json +2837 -37
  95. package/core/registry/mcp.json +5 -1
  96. package/core/registry/models.json +7 -1
  97. package/core/registry/package-templates/README.md +19 -0
  98. package/core/registry/package-templates/agent/files/agent.md +9 -0
  99. package/core/registry/package-templates/agent/template.json +4 -0
  100. package/core/registry/package-templates/capability-provider/files/provider.json +9 -0
  101. package/core/registry/package-templates/capability-provider/template.json +11 -0
  102. package/core/registry/package-templates/debate-preset/files/preset.json +26 -0
  103. package/core/registry/package-templates/debate-preset/template.json +4 -0
  104. package/core/registry/package-templates/review-preset/files/preset.json +30 -0
  105. package/core/registry/package-templates/review-preset/template.json +4 -0
  106. package/core/registry/package-templates/skill/files/SKILL.md +8 -0
  107. package/core/registry/package-templates/skill/template.json +4 -0
  108. package/core/registry/package-templates/worker/files/worker.json +92 -0
  109. package/core/registry/package-templates/worker/template.json +11 -0
  110. package/core/registry/packages/doflow/doflow-package.json +15 -0
  111. package/core/registry/packages/doflow/presets/debate-3.json +26 -0
  112. package/core/registry/protocols.json +61 -0
  113. package/core/registry/routes.json +17 -0
  114. package/core/registry/rules.json +431 -0
  115. package/core/registry/settings.json +276 -0
  116. package/core/registry/storage.json +701 -30
  117. package/core/registry/telemetry.json +236 -0
  118. package/core/registry/transcripts.json +142 -0
  119. package/core/registry/verification.json +76 -1
  120. package/core/registry/workflows.json +55 -0
  121. package/core/shared/agent-specs/core-implementer.md +3 -0
  122. package/core/shared/agent-specs/delivery-lead.md +68 -0
  123. package/core/shared/agent-specs/quality-guardian.md +5 -1
  124. package/core/shared/agent-specs/research-writer.md +10 -3
  125. package/core/shared/agent-specs/reviewer.md +53 -0
  126. package/core/shared/agent-specs/spec-analyst.md +5 -6
  127. package/core/shared/agent-specs/system-architect.md +5 -1
  128. package/core/shared/guidance/DOFLOW_CORE.md +1 -5
  129. package/core/shared/guidance/modes/MODE_DeepResearch.md +1 -1
  130. package/core/shared/guidance/modes/MODE_Orchestration.md +4 -3
  131. package/core/shared/guidance/modes/MODE_Task_Management.md +14 -14
  132. package/core/shared/guidance/pointers/codex.md +1 -4
  133. package/core/shared/guidance/references/ARTIFACT_FORMAT.md +30 -16
  134. package/core/shared/guidance/references/ARTIFACT_VOICE.md +3 -2
  135. package/core/shared/guidance/references/CONSTITUTION_BASE.md +17 -15
  136. package/core/shared/guidance/references/DIAGRAM_GUIDE.md +1 -1
  137. package/core/shared/guidance/references/DOFLOW_CHAIN.md +17 -19
  138. package/core/shared/guidance/references/EVIDENCE_LEDGER.md +7 -8
  139. package/core/shared/guidance/references/MODEL_SELECTION.md +5 -3
  140. package/core/shared/guidance/references/ORCHESTRATION.md +1 -2
  141. package/core/shared/guidance/rules/RULES.md +45 -0
  142. package/core/shared/scripts/doflow/bash/do-args.sh +37 -0
  143. package/core/shared/scripts/doflow/bash/do-exec-paths.sh +4 -0
  144. package/core/shared/scripts/doflow/bash/do-git-state.sh +15 -4
  145. package/core/shared/scripts/doflow/bash/do-parallel-check.sh +4 -0
  146. package/core/shared/scripts/doflow/bash/do-paths.sh +40 -2
  147. package/core/shared/scripts/doflow/bash/do-prereqs.sh +2 -1
  148. package/core/shared/scripts/doflow/bash/do-review-package.sh +4 -0
  149. package/core/shared/scripts/doflow/bash/do-task-brief.sh +58 -16
  150. package/core/shared/scripts/doflow/bash/render-audit.sh +26 -2
  151. package/core/shared/scripts/doflow/bash/render-diagrams.sh +1 -0
  152. package/core/shared/scripts/doflow/bash/render-puml.sh +2 -1
  153. package/core/shared/scripts/doflow/bash/validate-artifacts.sh +48 -4
  154. package/core/shared/scripts/doflow/bin/doflow-run +154 -35
  155. package/core/shared/skills/do/SKILL.md +12 -10
  156. package/core/shared/skills/do/references/advice_calls.md +26 -0
  157. package/core/shared/skills/do/references/pm_routing.md +1 -2
  158. package/core/shared/skills/do/references/program_mode.md +31 -0
  159. package/core/shared/skills/do-brainstorm/SKILL.md +20 -74
  160. package/core/shared/skills/do-brainstorm/references/handoff_branches.md +35 -0
  161. package/core/shared/skills/do-brainstorm/references/intent_seed.md +21 -0
  162. package/core/shared/skills/do-brainstorm/references/round_log.md +17 -0
  163. package/core/shared/skills/do-code-review/SKILL.md +41 -144
  164. package/core/shared/skills/do-code-review/content-types/markdown.md +24 -2
  165. package/core/shared/skills/do-code-review/references/tools.md +90 -0
  166. package/core/shared/skills/do-code-review/scripts/doc_quality_checker.py +549 -7
  167. package/core/shared/skills/do-design/SKILL.md +24 -23
  168. package/core/shared/skills/do-diagnose/SKILL.md +14 -4
  169. package/core/shared/skills/do-document/SKILL.md +11 -1
  170. package/core/shared/skills/do-document/references/deep_research.md +1 -2
  171. package/core/shared/skills/do-document/references/embedded-research.md +18 -6
  172. package/core/shared/skills/do-document/references/implementation-flow.md +5 -6
  173. package/core/shared/skills/do-execute-plan/SKILL.md +17 -59
  174. package/core/shared/skills/do-execute-plan/references/handoff_record.md +7 -2
  175. package/core/shared/skills/do-execute-plan/references/parallel_dispatch.md +13 -0
  176. package/core/shared/skills/do-execute-plan/references/readiness_gate.md +28 -1
  177. package/core/shared/skills/do-execute-plan/references/run_position.md +13 -1
  178. package/core/shared/skills/do-execute-plan/references/scaffold.md +17 -9
  179. package/core/shared/skills/do-execute-plan/references/state_checkpoint.md +11 -0
  180. package/core/shared/skills/do-execute-plan/references/task_attempts.md +78 -24
  181. package/core/shared/skills/do-flow/SKILL.md +8 -9
  182. package/core/shared/skills/do-flow/references/task_classes.md +2 -2
  183. package/core/shared/skills/do-git/SKILL.md +4 -0
  184. package/core/shared/skills/do-implement/SKILL.md +7 -9
  185. package/core/shared/skills/do-plan/SKILL.md +29 -19
  186. package/core/shared/skills/do-test/SKILL.md +7 -4
  187. package/core/shared/templates/doflow/constitution-template.md +9 -3
  188. package/core/shared/templates/doflow/data-model-template.md +1 -1
  189. package/core/shared/templates/doflow/design-template.md +113 -16
  190. package/core/shared/templates/doflow/plan-template.md +11 -10
  191. package/core/shared/templates/doflow/question-log-template.md +14 -2
  192. package/core/shared/templates/doflow/requirement-template.md +1 -1
  193. package/core/worker-evidence/antigravity/checks.json +14 -0
  194. package/core/worker-evidence/codex/2026-10-18-cli-check.json +107 -0
  195. package/core/worker-evidence/codex/2026-10-18-live-run-edit.json +73 -0
  196. package/core/worker-evidence/codex/2026-10-18-live-run-read-only.json +62 -0
  197. package/core/worker-evidence/codex/2026-10-24-cli-check.json +126 -0
  198. package/core/worker-evidence/codex/checks.json +38 -0
  199. package/package.json +10 -6
  200. package/src/adapters/antigravity/index.js +226 -113
  201. package/src/adapters/claude/index.js +39 -5
  202. package/src/adapters/codex/agents.js +25 -15
  203. package/src/adapters/codex/hooks.js +40 -5
  204. package/src/adapters/codex/index.js +100 -22
  205. package/src/adapters/codex/native-projection.js +6 -2
  206. package/src/adapters/copilot/index.js +58 -23
  207. package/src/adapters/copy-tree.js +294 -48
  208. package/src/adapters/guidance-manifest.js +71 -0
  209. package/src/adapters/guidance-pointer.js +19 -0
  210. package/src/adapters/hook-commands.js +6 -10
  211. package/src/adapters/index.js +1 -0
  212. package/src/adapters/kiro/index.js +38 -13
  213. package/src/adapters/opencode/index.js +8 -8
  214. package/src/adapters/pi/hooks.js +120 -0
  215. package/src/adapters/pi/index.js +48 -16
  216. package/src/adapters/resolve-source.js +26 -2
  217. package/src/cli/commands/install.js +3 -2
  218. package/src/cli/commands/reconcile.js +53 -9
  219. package/src/cli/commands/remove.js +2 -2
  220. package/src/cli/commands/rollback.js +6 -3
  221. package/src/cli/commands/self-update.js +18 -9
  222. package/src/cli/commands/status.js +21 -2
  223. package/src/cli/commands/ui.js +99 -0
  224. package/src/cli/commands/update.js +3 -2
  225. package/src/cli/index.js +338 -33
  226. package/src/cli/runtime-commands.js +243 -52
  227. package/src/cli/shared.js +0 -2
  228. package/src/helper/git.js +1 -1
  229. package/src/helper/guardrails.js +1 -1
  230. package/src/helper/marker-merge.js +31 -13
  231. package/src/helper/package-ids.js +37 -0
  232. package/src/helper/semver.js +94 -0
  233. package/src/install/backup.js +105 -15
  234. package/src/install/context.js +1 -1
  235. package/src/install/targets.js +31 -16
  236. package/src/lifecycle/coverage.js +74 -0
  237. package/src/lifecycle/hook-step.js +61 -0
  238. package/src/lifecycle/hook-tier.js +160 -0
  239. package/src/lifecycle/index.js +434 -86
  240. package/src/lifecycle/retired-harnesses.js +318 -0
  241. package/src/lifecycle/view.js +35 -15
  242. package/src/registry/index.js +686 -32
  243. package/src/registry/worker-ids.js +45 -0
  244. package/src/release/build-package.js +0 -3
  245. package/src/release/docs-blocks.js +492 -0
  246. package/src/release/preflight.js +425 -0
  247. package/src/release/rehearse.js +401 -0
  248. package/src/release/release-workflow.js +733 -0
  249. package/src/release/sync-plugin-versions.js +43 -7
  250. package/src/runtime/advice/bench-gate.js +25 -0
  251. package/src/runtime/advice/cli.js +59 -16
  252. package/src/runtime/advice/client.js +32 -9
  253. package/src/runtime/advice/config.js +98 -133
  254. package/src/runtime/advice/doctor.js +1 -1
  255. package/src/runtime/advice/elevation.js +97 -0
  256. package/src/runtime/advice/endpoint-guard.js +9 -3
  257. package/src/runtime/advice/mode.js +37 -0
  258. package/src/runtime/advice/record.js +18 -5
  259. package/src/runtime/advice/registry.js +4 -1
  260. package/src/runtime/advice/shadow-config.js +229 -0
  261. package/src/runtime/advice/shadow-dispatcher.js +276 -0
  262. package/src/runtime/brief-rules.js +81 -0
  263. package/src/runtime/brief-tools.js +111 -34
  264. package/src/runtime/candidate.js +514 -0
  265. package/src/runtime/capabilities/executor.js +450 -0
  266. package/src/runtime/capabilities/loopback.js +41 -0
  267. package/src/runtime/capabilities/sanitizer.js +88 -0
  268. package/src/runtime/capability-router.js +135 -3
  269. package/src/runtime/checkouts.js +73 -11
  270. package/src/runtime/claims.js +27 -12
  271. package/src/runtime/cli-result.js +11 -4
  272. package/src/runtime/cli.js +221 -277
  273. package/src/runtime/config-home.js +42 -0
  274. package/src/runtime/context/arbitrate.js +767 -0
  275. package/src/runtime/context/budget.js +203 -0
  276. package/src/runtime/context/compose.js +1367 -0
  277. package/src/runtime/context/delivery-store.js +100 -0
  278. package/src/runtime/context/emission-rules.js +118 -0
  279. package/src/runtime/context/identity.js +227 -0
  280. package/src/runtime/context/mandatory.js +594 -0
  281. package/src/runtime/context/pointer.js +142 -0
  282. package/src/runtime/context/primary-command.js +117 -0
  283. package/src/runtime/context/primary.js +344 -0
  284. package/src/runtime/context/summary-store.js +655 -0
  285. package/src/runtime/context-pack.js +1106 -245
  286. package/src/runtime/decision-register.js +13 -4
  287. package/src/runtime/dispatch/admission.js +392 -0
  288. package/src/runtime/dispatch/attempt-end.js +274 -0
  289. package/src/runtime/dispatch/command.js +628 -0
  290. package/src/runtime/dispatch/controls.js +904 -0
  291. package/src/runtime/dispatch/envelope.js +276 -0
  292. package/src/runtime/dispatch/grants.js +310 -0
  293. package/src/runtime/dispatch/integrate.js +617 -0
  294. package/src/runtime/dispatch/loop.js +1835 -0
  295. package/src/runtime/dispatch/store.js +352 -0
  296. package/src/runtime/dispatch/verify-run.js +201 -0
  297. package/src/runtime/evidence-fields.js +39 -0
  298. package/src/runtime/evidence-ledger.js +41 -7
  299. package/src/runtime/failure/capture.js +3 -1
  300. package/src/runtime/failure/cli.js +25 -9
  301. package/src/runtime/failure/home.js +57 -30
  302. package/src/runtime/failure/store.js +7 -2
  303. package/src/runtime/feature-pointer.js +174 -0
  304. package/src/runtime/feature-resolve.js +13 -2
  305. package/src/runtime/fleet/command.js +77 -0
  306. package/src/runtime/fleet/projects.js +178 -0
  307. package/src/runtime/fleet/tree.js +383 -0
  308. package/src/runtime/freshness.js +77 -10
  309. package/src/runtime/git-memo.js +46 -0
  310. package/src/runtime/guidance/ablation.js +427 -0
  311. package/src/runtime/health.js +565 -17
  312. package/src/runtime/history-compactor.js +13 -3
  313. package/src/runtime/implementation-gate.js +277 -22
  314. package/src/runtime/inventory/coverage.js +1 -1
  315. package/src/runtime/inventory/index.js +1 -1
  316. package/src/runtime/inventory/precedence.js +2 -2
  317. package/src/runtime/inventory/siblings.js +6 -4
  318. package/src/runtime/knowledge/code-corpus.js +277 -0
  319. package/src/runtime/knowledge/code-lexical.js +130 -0
  320. package/src/runtime/knowledge/code-retrieval.js +307 -0
  321. package/src/runtime/knowledge/code-validation.js +106 -0
  322. package/src/runtime/knowledge/gp3-gate.js +74 -0
  323. package/src/runtime/knowledge/graph-adapter.js +288 -0
  324. package/src/runtime/knowledge/graph-fallback.js +394 -0
  325. package/src/runtime/knowledge/hybrid.js +136 -8
  326. package/src/runtime/knowledge/retrieval.js +34 -1
  327. package/src/runtime/knowledge/rtk-compress.js +77 -0
  328. package/src/runtime/knowledge/semble-bridge.py +106 -0
  329. package/src/runtime/knowledge/semble-lifecycle.js +114 -0
  330. package/src/runtime/knowledge/semble-provider.js +365 -0
  331. package/src/runtime/lifecycle/cli.js +16 -6
  332. package/src/runtime/lifecycle/event-store.js +8 -6
  333. package/src/runtime/lifecycle/followup.js +6 -1
  334. package/src/runtime/lifecycle/overview.js +24 -1
  335. package/src/runtime/lifecycle/report-store.js +8 -10
  336. package/src/runtime/lifecycle/retention.js +95 -31
  337. package/src/runtime/lifecycle/root.js +9 -1
  338. package/src/runtime/lifecycle/status.js +34 -17
  339. package/src/runtime/lifecycle/store-upkeep.js +56 -7
  340. package/src/runtime/mask.js +134 -7
  341. package/src/runtime/mcp-consultations.js +40 -6
  342. package/src/runtime/model-router.js +79 -7
  343. package/src/runtime/models/catalogue.js +191 -0
  344. package/src/runtime/models/command.js +153 -0
  345. package/src/runtime/off-words.js +12 -0
  346. package/src/runtime/outcome.js +3 -3
  347. package/src/runtime/packages/command.js +1009 -0
  348. package/src/runtime/packages/contributions.js +116 -0
  349. package/src/runtime/packages/digest.js +132 -0
  350. package/src/runtime/packages/fetch.js +182 -0
  351. package/src/runtime/packages/grants.js +192 -0
  352. package/src/runtime/packages/index-file.js +134 -0
  353. package/src/runtime/packages/instruction.js +90 -0
  354. package/src/runtime/packages/manifest.js +331 -0
  355. package/src/runtime/packages/points.js +477 -0
  356. package/src/runtime/packages/programs.js +216 -0
  357. package/src/runtime/packages/scaffold.js +277 -0
  358. package/src/runtime/packages/source.js +90 -0
  359. package/src/runtime/packages/state.js +164 -0
  360. package/src/runtime/packages/store.js +449 -0
  361. package/src/runtime/packages/tar.js +106 -0
  362. package/src/runtime/packages/view.js +406 -0
  363. package/src/runtime/plan-check.js +59 -0
  364. package/src/runtime/plan-content.js +324 -0
  365. package/src/runtime/policy-init.js +118 -0
  366. package/src/runtime/profiles/doctor.js +96 -0
  367. package/src/runtime/profiles/resolve.js +244 -0
  368. package/src/runtime/profiles/rollback.js +254 -0
  369. package/src/runtime/profiles/sampler.js +41 -0
  370. package/src/runtime/readiness-record.js +16 -11
  371. package/src/runtime/readiness.js +127 -16
  372. package/src/runtime/research-request.js +50 -25
  373. package/src/runtime/retrieval-plan.js +402 -73
  374. package/src/runtime/retrieval-record.js +293 -0
  375. package/src/runtime/review/command.js +246 -0
  376. package/src/runtime/review/dominance.js +68 -0
  377. package/src/runtime/review/findings.js +434 -0
  378. package/src/runtime/review/identity.js +255 -0
  379. package/src/runtime/review/protocol-command.js +109 -0
  380. package/src/runtime/review/protocols.js +405 -0
  381. package/src/runtime/review/resolve-protocol.js +302 -0
  382. package/src/runtime/review/start.js +530 -0
  383. package/src/runtime/roadmap/facts.js +479 -0
  384. package/src/runtime/roadmap/gates.js +270 -0
  385. package/src/runtime/roadmap/loop.js +1636 -0
  386. package/src/runtime/roadmap/merge.js +381 -0
  387. package/src/runtime/roadmap/rows.js +1113 -0
  388. package/src/runtime/roadmap/seed.js +951 -0
  389. package/src/runtime/rules-report.js +336 -0
  390. package/src/runtime/scaffold/artifacts.js +63 -9
  391. package/src/runtime/scaffold/generate.js +21 -9
  392. package/src/runtime/settings/autopilot.js +106 -0
  393. package/src/runtime/settings/cli.js +280 -0
  394. package/src/runtime/settings/config-write.js +314 -0
  395. package/src/runtime/settings/files.js +271 -0
  396. package/src/runtime/settings/legacy.js +154 -0
  397. package/src/runtime/settings/lexical.js +56 -0
  398. package/src/runtime/settings/prepared-run.js +269 -0
  399. package/src/runtime/settings/project-layers.js +118 -0
  400. package/src/runtime/settings/refs.js +288 -0
  401. package/src/runtime/settings/registry.js +553 -0
  402. package/src/runtime/settings/resolve.js +713 -0
  403. package/src/runtime/settings/shared.js +37 -0
  404. package/src/runtime/settings/worker-billing.js +107 -0
  405. package/src/runtime/settings/write.js +269 -0
  406. package/src/runtime/slot-command.js +78 -0
  407. package/src/runtime/slots.js +671 -0
  408. package/src/runtime/source-version.js +290 -0
  409. package/src/runtime/state-root.js +217 -0
  410. package/src/runtime/storage/cli.js +12 -5
  411. package/src/runtime/storage/engine.js +9 -2
  412. package/src/runtime/storage/registry.js +14 -1
  413. package/src/runtime/storage/roots.js +66 -16
  414. package/src/runtime/storage/rules.js +82 -10
  415. package/src/runtime/storage/upkeep.js +10 -2
  416. package/src/runtime/storage/work-status.js +245 -26
  417. package/src/runtime/task-attempts.js +589 -69
  418. package/src/runtime/task-classifier.js +47 -11
  419. package/src/runtime/task-graph.js +373 -0
  420. package/src/runtime/task-run.js +778 -0
  421. package/src/runtime/task-scope.js +202 -56
  422. package/src/runtime/task-sources.js +147 -0
  423. package/src/runtime/task-state.js +440 -65
  424. package/src/runtime/team/admission.js +301 -0
  425. package/src/runtime/team/envelope.js +324 -0
  426. package/src/runtime/team/review-guard.js +156 -0
  427. package/src/runtime/trace/analyze.js +427 -0
  428. package/src/runtime/trace/baseline.js +770 -0
  429. package/src/runtime/trace/ledger.js +63 -140
  430. package/src/runtime/trace/otlp-export.js +568 -0
  431. package/src/runtime/trace/otlp-map.js +481 -0
  432. package/src/runtime/trace/spans.js +745 -0
  433. package/src/runtime/trace/telemetry.js +225 -0
  434. package/src/runtime/trace/views.js +1 -0
  435. package/src/runtime/transcripts/command.js +98 -0
  436. package/src/runtime/transcripts/cursor.js +326 -0
  437. package/src/runtime/transcripts/read.js +126 -0
  438. package/src/runtime/transcripts/readers/claude-jsonl.js +74 -0
  439. package/src/runtime/transcripts/readers/codex-rollout.js +70 -0
  440. package/src/runtime/transcripts/readers/copilot-events.js +90 -0
  441. package/src/runtime/transcripts/readers/kiro-jsonl.js +77 -0
  442. package/src/runtime/transcripts/readers/pi-jsonl.js +59 -0
  443. package/src/runtime/transcripts/registry.js +161 -0
  444. package/src/runtime/transcripts/stats.js +161 -0
  445. package/src/runtime/verification/check-key.js +628 -0
  446. package/src/runtime/verification/contract-runner.js +546 -11
  447. package/src/runtime/verification/engine.js +499 -9
  448. package/src/runtime/verification/impact.js +617 -0
  449. package/src/runtime/verification/inflight.js +205 -0
  450. package/src/runtime/verification/registry.js +176 -0
  451. package/src/runtime/verification/reuse.js +184 -0
  452. package/src/runtime/verification/telemetry-emit.js +254 -0
  453. package/src/runtime/verification/test-selection.js +67 -7
  454. package/src/runtime/worker/active.js +90 -0
  455. package/src/runtime/worker/cancel.js +222 -0
  456. package/src/runtime/worker/catalogue.js +122 -0
  457. package/src/runtime/worker/command.js +677 -0
  458. package/src/runtime/worker/evidence.js +288 -0
  459. package/src/runtime/worker/launch.js +288 -0
  460. package/src/runtime/worker/models.js +137 -0
  461. package/src/runtime/worker/parsers.js +218 -0
  462. package/src/runtime/worker/probes/index.js +706 -0
  463. package/src/runtime/worker/process-tree.js +415 -0
  464. package/src/runtime/worker/quota.js +43 -0
  465. package/src/runtime/worker/readiness.js +713 -0
  466. package/src/runtime/worker/run-store.js +166 -0
  467. package/src/runtime/worker/supervisor.js +541 -0
  468. package/src/runtime/worker/worktree-check.js +252 -0
  469. package/src/runtime/workflow-engine.js +5 -1
  470. package/src/runtime/workflow-orchestrator.js +578 -63
  471. package/src/runtime/worktree.js +149 -22
  472. package/src/state/index.js +1 -1
  473. package/src/state/lockfile.js +64 -10
  474. package/src/state/run-lock.js +1 -1
  475. package/types/node-commonjs.d.ts +106 -7
  476. package/core/.antigravity-plugin/hooks.json +0 -39
  477. package/core/harnesses/gemini/hooks/hooks.json +0 -77
  478. package/core/harnesses/gemini/hooks/lib.sh +0 -302
  479. package/core/harnesses/gemini/hooks/mcp-tool-guard.sh +0 -21
  480. package/core/harnesses/gemini/hooks/post-edit-lint.sh +0 -39
  481. package/core/harnesses/gemini/hooks/pre-bash-guard.sh +0 -21
  482. package/core/harnesses/gemini/hooks/pre-compact.sh +0 -38
  483. package/core/harnesses/gemini/hooks/pre-implement-gate.sh +0 -22
  484. package/core/harnesses/gemini/hooks/session-end.impl.sh +0 -89
  485. package/core/harnesses/gemini/hooks/session-end.sh +0 -5
  486. package/core/harnesses/gemini/hooks/session-start.sh +0 -5
  487. package/core/harnesses/gemini/settings/adapter-defaults.json +0 -4
  488. package/core/harnesses/shared/hooks/adapters/arg-fields.js +0 -19
  489. package/core/harnesses/shared/hooks/adapters/gemini.js +0 -114
  490. package/core/harnesses/shared/hooks/hooks.json +0 -47
  491. package/core/shared/guidance/FLAGS.md +0 -25
  492. package/core/shared/guidance/rules/RULE_01_SAFETY.md +0 -25
  493. package/core/shared/guidance/rules/RULE_02_WORKFLOW.md +0 -23
  494. package/core/shared/guidance/rules/RULE_03_QUALITY.md +0 -14
  495. package/core/shared/guidance/rules/RULE_04_QUESTIONS.md +0 -46
  496. package/src/adapters/gemini/hooks.js +0 -210
  497. package/src/adapters/gemini/index.js +0 -390
@@ -20,21 +20,17 @@
20
20
  "hook-review"
21
21
  ]
22
22
  },
23
- "gemini": {
24
- "event": "BeforeTool",
25
- "status": "different"
26
- },
27
23
  "opencode": {
28
24
  "status": "unavailable",
29
25
  "fallback": "guidance"
30
26
  },
31
27
  "pi": {
32
- "status": "unavailable",
33
- "fallback": "guidance"
28
+ "event": "tool_call",
29
+ "status": "different"
34
30
  },
35
31
  "copilot": {
36
- "status": "unavailable",
37
- "fallback": "guidance"
32
+ "event": "PreToolUse",
33
+ "status": "supported"
38
34
  },
39
35
  "kiro": {
40
36
  "event": "PreToolUse",
@@ -65,21 +61,17 @@
65
61
  "hook-review"
66
62
  ]
67
63
  },
68
- "gemini": {
69
- "event": "BeforeTool",
70
- "status": "different"
71
- },
72
64
  "opencode": {
73
65
  "status": "unavailable",
74
66
  "fallback": "guidance"
75
67
  },
76
68
  "pi": {
77
- "status": "unavailable",
78
- "fallback": "guidance"
69
+ "event": "tool_call",
70
+ "status": "different"
79
71
  },
80
72
  "copilot": {
81
- "status": "unavailable",
82
- "fallback": "guidance"
73
+ "event": "PreToolUse",
74
+ "status": "supported"
83
75
  },
84
76
  "kiro": {
85
77
  "event": "PreToolUse",
@@ -110,10 +102,6 @@
110
102
  "hook-review"
111
103
  ]
112
104
  },
113
- "gemini": {
114
- "event": "SessionStart",
115
- "status": "supported"
116
- },
117
105
  "opencode": {
118
106
  "status": "unavailable",
119
107
  "fallback": "guidance"
@@ -123,8 +111,8 @@
123
111
  "fallback": "guidance"
124
112
  },
125
113
  "copilot": {
126
- "status": "unavailable",
127
- "fallback": "guidance"
114
+ "event": "SessionStart",
115
+ "status": "supported"
128
116
  },
129
117
  "kiro": {
130
118
  "event": "SessionStart",
@@ -156,21 +144,17 @@
156
144
  "hook-review"
157
145
  ]
158
146
  },
159
- "gemini": {
160
- "event": "BeforeTool",
161
- "status": "different"
162
- },
163
147
  "opencode": {
164
148
  "status": "unavailable",
165
149
  "fallback": "guidance"
166
150
  },
167
151
  "pi": {
168
- "status": "unavailable",
169
- "fallback": "guidance"
152
+ "event": "tool_call",
153
+ "status": "different"
170
154
  },
171
155
  "copilot": {
172
- "status": "unavailable",
173
- "fallback": "guidance"
156
+ "event": "PreToolUse",
157
+ "status": "supported"
174
158
  },
175
159
  "kiro": {
176
160
  "event": "PreToolUse",
@@ -201,10 +185,6 @@
201
185
  "hook-review"
202
186
  ]
203
187
  },
204
- "gemini": {
205
- "status": "unavailable",
206
- "fallback": "guidance"
207
- },
208
188
  "opencode": {
209
189
  "status": "unavailable",
210
190
  "fallback": "guidance"
@@ -214,8 +194,8 @@
214
194
  "fallback": "guidance"
215
195
  },
216
196
  "copilot": {
217
- "status": "unavailable",
218
- "fallback": "guidance"
197
+ "event": "Stop",
198
+ "status": "supported"
219
199
  },
220
200
  "kiro": {
221
201
  "event": "Stop",
@@ -227,5 +207,2825 @@
227
207
  }
228
208
  }
229
209
  }
230
- ]
210
+ ],
211
+ "coverage": {
212
+ "schemaVersion": 1,
213
+ "revision": 3,
214
+ "refresh": {
215
+ "trigger": "a harness bridge, template or installed harness version changes",
216
+ "owner": "the feature that changes it"
217
+ },
218
+ "profiles": {
219
+ "any": "Applies across every installed profile; query evaluates all applicable rows.",
220
+ "user-interactive": "User-scope interactive harness session.",
221
+ "user-headless": "User-scope non-interactive harness session.",
222
+ "project-interactive": "Project-scope interactive harness session.",
223
+ "project-headless": "Project-scope non-interactive harness session.",
224
+ "cli-extension": "Harness launched with its CLI extension mechanism.",
225
+ "no-extensions": "Harness profile where extensions are unavailable.",
226
+ "ide": "Harness IDE integration.",
227
+ "cli-v3": "Kiro CLI V3.",
228
+ "cli-v3-agent": "Kiro CLI V3 agent mode.",
229
+ "cli-2x-agent": "Kiro CLI 2.x agent mode."
230
+ },
231
+ "rows": [
232
+ {
233
+ "policy": "pre-implementation-gate",
234
+ "harness": "claude",
235
+ "event": "PreToolUse",
236
+ "timing": "pre-tool",
237
+ "profile": "any",
238
+ "wired": true,
239
+ "configSource": "core/harnesses/claude/settings/settings.json:89",
240
+ "harnessVersion": {
241
+ "tested": "2.1.287 (Claude Code)"
242
+ },
243
+ "class": "blocking",
244
+ "verification": "verified",
245
+ "prerequisites": [],
246
+ "covers": [],
247
+ "doesNotCover": [
248
+ "writes via shell commands"
249
+ ],
250
+ "caveats": [],
251
+ "provenance": [
252
+ {
253
+ "kind": "doc",
254
+ "locator": "https://code.claude.com/docs/en/hooks",
255
+ "date": "2026-10-12"
256
+ },
257
+ {
258
+ "kind": "fixture",
259
+ "locator": "test/fixtures/hooks/claude/pre-implement-gate/deny.json",
260
+ "date": "2026-10-14"
261
+ }
262
+ ]
263
+ },
264
+ {
265
+ "policy": "pre-implementation-gate",
266
+ "harness": "codex",
267
+ "event": "PreToolUse",
268
+ "timing": "pre-tool",
269
+ "profile": "any",
270
+ "wired": true,
271
+ "configSource": "core/harnesses/codex/hooks/hooks.json:45",
272
+ "harnessVersion": {
273
+ "tested": "codex-cli 0.162.1"
274
+ },
275
+ "class": "blocking",
276
+ "verification": "verified",
277
+ "prerequisites": [
278
+ "hook-review"
279
+ ],
280
+ "covers": [],
281
+ "doesNotCover": [
282
+ "writes via shell commands"
283
+ ],
284
+ "caveats": [],
285
+ "provenance": [
286
+ {
287
+ "kind": "doc",
288
+ "locator": "https://learn.chatgpt.com/docs/hooks",
289
+ "date": "2026-10-12"
290
+ },
291
+ {
292
+ "kind": "fixture",
293
+ "locator": "test/fixtures/hooks/codex/pre-implement-gate/deny.json",
294
+ "date": "2026-10-14"
295
+ }
296
+ ]
297
+ },
298
+ {
299
+ "policy": "pre-implementation-gate",
300
+ "harness": "opencode",
301
+ "event": "*",
302
+ "timing": "pre-tool",
303
+ "profile": "any",
304
+ "wired": false,
305
+ "configSource": null,
306
+ "harnessVersion": {
307
+ "tested": "1.18.30"
308
+ },
309
+ "class": "unsupported",
310
+ "verification": "unverified",
311
+ "prerequisites": [],
312
+ "covers": [],
313
+ "doesNotCover": [
314
+ "writes via shell commands"
315
+ ],
316
+ "caveats": [],
317
+ "provenance": [
318
+ {
319
+ "kind": "doc",
320
+ "locator": "core/registry/harnesses.json: opencode harness; core/registry/contracts.json: unavailable hook mapping",
321
+ "date": "2026-10-12"
322
+ }
323
+ ]
324
+ },
325
+ {
326
+ "policy": "pre-implementation-gate",
327
+ "harness": "pi",
328
+ "event": "tool_call",
329
+ "timing": "pre-tool",
330
+ "profile": "cli-extension",
331
+ "wired": true,
332
+ "configSource": "core/harnesses/pi/extensions/doflow-guard.js:129",
333
+ "harnessVersion": {
334
+ "tested": "1.1.0"
335
+ },
336
+ "class": "blocking",
337
+ "verification": "verified",
338
+ "prerequisites": [],
339
+ "covers": [],
340
+ "doesNotCover": [
341
+ "writes via shell commands"
342
+ ],
343
+ "caveats": [
344
+ "live-verified only: print mode, `-e` load, project-scope install; interactive mode, project-trust auto-load and user scope not observed",
345
+ "a later tool_call handler may mutate input after DoFlow allows it"
346
+ ],
347
+ "provenance": [
348
+ {
349
+ "kind": "types",
350
+ "locator": "@earendil-works/pi-coding-agent@1.1.0 dist/core/extensions/types.d.ts:907-958",
351
+ "date": "2026-10-14"
352
+ },
353
+ {
354
+ "kind": "doc",
355
+ "locator": "@earendil-works/pi-coding-agent@1.1.0 docs/extensions.md:169",
356
+ "date": "2026-10-14"
357
+ },
358
+ {
359
+ "kind": "fixture",
360
+ "locator": "test/fixtures/hooks/pi/tool_call/edit-deny.json",
361
+ "date": "2026-10-14"
362
+ },
363
+ {
364
+ "kind": "live",
365
+ "locator": "test/fixtures/hooks/pi/live/probe-2026-10-14.jsonl",
366
+ "date": "2026-10-14"
367
+ }
368
+ ]
369
+ },
370
+ {
371
+ "policy": "pre-implementation-gate",
372
+ "harness": "pi",
373
+ "event": "tool_execution_start",
374
+ "timing": "post-tool",
375
+ "profile": "cli-extension",
376
+ "wired": false,
377
+ "configSource": null,
378
+ "harnessVersion": {
379
+ "tested": "1.1.0"
380
+ },
381
+ "class": "observation",
382
+ "verification": "unverified",
383
+ "prerequisites": [],
384
+ "covers": [],
385
+ "doesNotCover": [
386
+ "writes via shell commands"
387
+ ],
388
+ "caveats": [
389
+ "Pi user- and project-scope extensions have not been exercised in a live session; a later tool_call handler may mutate input after DoFlow allows it"
390
+ ],
391
+ "provenance": [
392
+ {
393
+ "kind": "doc",
394
+ "locator": "https://pi.dev/docs/latest/extensions",
395
+ "date": "2026-10-14"
396
+ }
397
+ ]
398
+ },
399
+ {
400
+ "policy": "pre-implementation-gate",
401
+ "harness": "pi",
402
+ "event": "tool_call",
403
+ "timing": "pre-tool",
404
+ "profile": "user-headless",
405
+ "wired": true,
406
+ "configSource": "core/harnesses/pi/extensions/doflow-guard.js:129",
407
+ "harnessVersion": {
408
+ "tested": "1.1.0"
409
+ },
410
+ "class": "unknown",
411
+ "verification": "unverified",
412
+ "prerequisites": [],
413
+ "covers": [],
414
+ "doesNotCover": [
415
+ "writes via shell commands"
416
+ ],
417
+ "caveats": [
418
+ "Pi extension has not been exercised in a live session; a later tool_call handler may mutate input after DoFlow allows it",
419
+ "live probe pending"
420
+ ],
421
+ "provenance": [
422
+ {
423
+ "kind": "types",
424
+ "locator": "@earendil-works/pi-coding-agent@1.1.0 dist/core/extensions/types.d.ts:907-958",
425
+ "date": "2026-10-14"
426
+ },
427
+ {
428
+ "kind": "doc",
429
+ "locator": "@earendil-works/pi-coding-agent@1.1.0 docs/extensions.md:169",
430
+ "date": "2026-10-14"
431
+ },
432
+ {
433
+ "kind": "fixture",
434
+ "locator": "test/fixtures/hooks/pi/tool_call/edit-deny.json",
435
+ "date": "2026-10-14"
436
+ }
437
+ ]
438
+ },
439
+ {
440
+ "policy": "pre-implementation-gate",
441
+ "harness": "pi",
442
+ "event": "tool_call",
443
+ "timing": "pre-tool",
444
+ "profile": "project-headless",
445
+ "wired": true,
446
+ "configSource": "core/harnesses/pi/extensions/doflow-guard.js:129",
447
+ "harnessVersion": {
448
+ "tested": "1.1.0"
449
+ },
450
+ "class": "unknown",
451
+ "verification": "unverified",
452
+ "prerequisites": [
453
+ "project-trust"
454
+ ],
455
+ "covers": [],
456
+ "doesNotCover": [
457
+ "writes via shell commands"
458
+ ],
459
+ "caveats": [
460
+ "Pi extension has not been exercised in a live session; a later tool_call handler may mutate input after DoFlow allows it",
461
+ "live probe pending",
462
+ "project-trust is required for the project-scope extension"
463
+ ],
464
+ "provenance": [
465
+ {
466
+ "kind": "types",
467
+ "locator": "@earendil-works/pi-coding-agent@1.1.0 dist/core/extensions/types.d.ts:907-958",
468
+ "date": "2026-10-14"
469
+ },
470
+ {
471
+ "kind": "doc",
472
+ "locator": "@earendil-works/pi-coding-agent@1.1.0 docs/extensions.md:169",
473
+ "date": "2026-10-14"
474
+ },
475
+ {
476
+ "kind": "fixture",
477
+ "locator": "test/fixtures/hooks/pi/tool_call/edit-deny.json",
478
+ "date": "2026-10-14"
479
+ }
480
+ ]
481
+ },
482
+ {
483
+ "policy": "pre-implementation-gate",
484
+ "harness": "pi",
485
+ "event": "*",
486
+ "timing": "pre-tool",
487
+ "profile": "no-extensions",
488
+ "wired": false,
489
+ "configSource": null,
490
+ "harnessVersion": {
491
+ "tested": "1.1.0"
492
+ },
493
+ "class": "unsupported",
494
+ "verification": "unverified",
495
+ "prerequisites": [],
496
+ "covers": [],
497
+ "doesNotCover": [
498
+ "writes via shell commands"
499
+ ],
500
+ "caveats": [
501
+ "Pi user- and project-scope extensions have not been exercised in a live session; a later tool_call handler may mutate input after DoFlow allows it",
502
+ "Pi extension unavailable in this profile"
503
+ ],
504
+ "provenance": [
505
+ {
506
+ "kind": "types",
507
+ "locator": "@earendil-works/pi-coding-agent@1.1.0 dist/core/extensions/types.d.ts:907-958",
508
+ "date": "2026-10-14"
509
+ },
510
+ {
511
+ "kind": "doc",
512
+ "locator": "@earendil-works/pi-coding-agent@1.1.0 docs/extensions.md:169",
513
+ "date": "2026-10-14"
514
+ },
515
+ {
516
+ "kind": "fixture",
517
+ "locator": "test/fixtures/hooks/pi/tool_call/edit-deny.json",
518
+ "date": "2026-10-14"
519
+ }
520
+ ]
521
+ },
522
+ {
523
+ "policy": "pre-bash-guard",
524
+ "harness": "pi",
525
+ "event": "tool_call",
526
+ "timing": "pre-tool",
527
+ "profile": "cli-extension",
528
+ "wired": true,
529
+ "configSource": "core/harnesses/pi/extensions/doflow-guard.js:129",
530
+ "harnessVersion": {
531
+ "tested": "1.1.0"
532
+ },
533
+ "class": "unknown",
534
+ "verification": "unverified",
535
+ "prerequisites": [],
536
+ "covers": [],
537
+ "doesNotCover": [],
538
+ "caveats": [
539
+ "Pi extension has not been exercised in a live session; a later tool_call handler may mutate input after DoFlow allows it"
540
+ ],
541
+ "provenance": [
542
+ {
543
+ "kind": "types",
544
+ "locator": "@earendil-works/pi-coding-agent@1.1.0 dist/core/extensions/types.d.ts:907-958",
545
+ "date": "2026-10-14"
546
+ },
547
+ {
548
+ "kind": "doc",
549
+ "locator": "@earendil-works/pi-coding-agent@1.1.0 docs/extensions.md:169",
550
+ "date": "2026-10-14"
551
+ },
552
+ {
553
+ "kind": "fixture",
554
+ "locator": "test/fixtures/hooks/pi/tool_call/bash-deny.json",
555
+ "date": "2026-10-14"
556
+ }
557
+ ]
558
+ },
559
+ {
560
+ "policy": "pre-bash-guard",
561
+ "harness": "pi",
562
+ "event": "tool_execution_start",
563
+ "timing": "post-tool",
564
+ "profile": "cli-extension",
565
+ "wired": false,
566
+ "configSource": null,
567
+ "harnessVersion": {
568
+ "tested": "1.1.0"
569
+ },
570
+ "class": "observation",
571
+ "verification": "unverified",
572
+ "prerequisites": [],
573
+ "covers": [],
574
+ "doesNotCover": [],
575
+ "caveats": [
576
+ "Pi user- and project-scope extensions have not been exercised in a live session; a later tool_call handler may mutate input after DoFlow allows it"
577
+ ],
578
+ "provenance": [
579
+ {
580
+ "kind": "doc",
581
+ "locator": "https://pi.dev/docs/latest/extensions",
582
+ "date": "2026-10-14"
583
+ }
584
+ ]
585
+ },
586
+ {
587
+ "policy": "pre-bash-guard",
588
+ "harness": "pi",
589
+ "event": "tool_call",
590
+ "timing": "pre-tool",
591
+ "profile": "user-headless",
592
+ "wired": true,
593
+ "configSource": "core/harnesses/pi/extensions/doflow-guard.js:129",
594
+ "harnessVersion": {
595
+ "tested": "1.1.0"
596
+ },
597
+ "class": "unknown",
598
+ "verification": "unverified",
599
+ "prerequisites": [],
600
+ "covers": [],
601
+ "doesNotCover": [],
602
+ "caveats": [
603
+ "Pi extension has not been exercised in a live session; a later tool_call handler may mutate input after DoFlow allows it",
604
+ "live probe pending"
605
+ ],
606
+ "provenance": [
607
+ {
608
+ "kind": "types",
609
+ "locator": "@earendil-works/pi-coding-agent@1.1.0 dist/core/extensions/types.d.ts:907-958",
610
+ "date": "2026-10-14"
611
+ },
612
+ {
613
+ "kind": "doc",
614
+ "locator": "@earendil-works/pi-coding-agent@1.1.0 docs/extensions.md:169",
615
+ "date": "2026-10-14"
616
+ },
617
+ {
618
+ "kind": "fixture",
619
+ "locator": "test/fixtures/hooks/pi/tool_call/bash-deny.json",
620
+ "date": "2026-10-14"
621
+ }
622
+ ]
623
+ },
624
+ {
625
+ "policy": "pre-bash-guard",
626
+ "harness": "pi",
627
+ "event": "tool_call",
628
+ "timing": "pre-tool",
629
+ "profile": "project-headless",
630
+ "wired": true,
631
+ "configSource": "core/harnesses/pi/extensions/doflow-guard.js:129",
632
+ "harnessVersion": {
633
+ "tested": "1.1.0"
634
+ },
635
+ "class": "unknown",
636
+ "verification": "unverified",
637
+ "prerequisites": [
638
+ "project-trust"
639
+ ],
640
+ "covers": [],
641
+ "doesNotCover": [],
642
+ "caveats": [
643
+ "Pi extension has not been exercised in a live session; a later tool_call handler may mutate input after DoFlow allows it",
644
+ "live probe pending",
645
+ "project-trust is required for the project-scope extension"
646
+ ],
647
+ "provenance": [
648
+ {
649
+ "kind": "types",
650
+ "locator": "@earendil-works/pi-coding-agent@1.1.0 dist/core/extensions/types.d.ts:907-958",
651
+ "date": "2026-10-14"
652
+ },
653
+ {
654
+ "kind": "doc",
655
+ "locator": "@earendil-works/pi-coding-agent@1.1.0 docs/extensions.md:169",
656
+ "date": "2026-10-14"
657
+ },
658
+ {
659
+ "kind": "fixture",
660
+ "locator": "test/fixtures/hooks/pi/tool_call/bash-deny.json",
661
+ "date": "2026-10-14"
662
+ }
663
+ ]
664
+ },
665
+ {
666
+ "policy": "pre-bash-guard",
667
+ "harness": "pi",
668
+ "event": "*",
669
+ "timing": "pre-tool",
670
+ "profile": "no-extensions",
671
+ "wired": false,
672
+ "configSource": null,
673
+ "harnessVersion": {
674
+ "tested": "1.1.0"
675
+ },
676
+ "class": "unsupported",
677
+ "verification": "unverified",
678
+ "prerequisites": [],
679
+ "covers": [],
680
+ "doesNotCover": [],
681
+ "caveats": [
682
+ "Pi user- and project-scope extensions have not been exercised in a live session; a later tool_call handler may mutate input after DoFlow allows it",
683
+ "Pi extension unavailable in this profile"
684
+ ],
685
+ "provenance": [
686
+ {
687
+ "kind": "types",
688
+ "locator": "@earendil-works/pi-coding-agent@1.1.0 dist/core/extensions/types.d.ts:907-958",
689
+ "date": "2026-10-14"
690
+ },
691
+ {
692
+ "kind": "doc",
693
+ "locator": "@earendil-works/pi-coding-agent@1.1.0 docs/extensions.md:169",
694
+ "date": "2026-10-14"
695
+ },
696
+ {
697
+ "kind": "fixture",
698
+ "locator": "test/fixtures/hooks/pi/tool_call/bash-deny.json",
699
+ "date": "2026-10-14"
700
+ }
701
+ ]
702
+ },
703
+ {
704
+ "policy": "session-context",
705
+ "harness": "pi",
706
+ "event": "*",
707
+ "timing": "session",
708
+ "profile": "any",
709
+ "wired": false,
710
+ "configSource": null,
711
+ "harnessVersion": {
712
+ "tested": "1.1.0"
713
+ },
714
+ "class": "unsupported",
715
+ "verification": "unverified",
716
+ "prerequisites": [],
717
+ "covers": [],
718
+ "doesNotCover": [],
719
+ "caveats": [
720
+ "not wired for this harness mapping",
721
+ "Pi user- and project-scope extensions have not been exercised in a live session; a later tool_call handler may mutate input after DoFlow allows it"
722
+ ],
723
+ "provenance": [
724
+ {
725
+ "kind": "doc",
726
+ "locator": "core/registry/lifecycle.json: policy session-context mapping for pi",
727
+ "date": "2026-10-14"
728
+ }
729
+ ]
730
+ },
731
+ {
732
+ "policy": "mcp-tool-guard",
733
+ "harness": "pi",
734
+ "event": "tool_call",
735
+ "timing": "pre-tool",
736
+ "profile": "cli-extension",
737
+ "wired": true,
738
+ "configSource": "core/harnesses/pi/extensions/doflow-guard.js:129",
739
+ "harnessVersion": {
740
+ "tested": "1.1.0"
741
+ },
742
+ "class": "unknown",
743
+ "verification": "unverified",
744
+ "prerequisites": [],
745
+ "covers": [],
746
+ "doesNotCover": [],
747
+ "caveats": [
748
+ "Pi extension has not been exercised in a live session; a later tool_call handler may mutate input after DoFlow allows it"
749
+ ],
750
+ "provenance": [
751
+ {
752
+ "kind": "types",
753
+ "locator": "@earendil-works/pi-coding-agent@1.1.0 dist/core/extensions/types.d.ts:907-958",
754
+ "date": "2026-10-14"
755
+ },
756
+ {
757
+ "kind": "doc",
758
+ "locator": "@earendil-works/pi-coding-agent@1.1.0 docs/extensions.md:169",
759
+ "date": "2026-10-14"
760
+ },
761
+ {
762
+ "kind": "fixture",
763
+ "locator": "test/fixtures/hooks/pi/tool_call/nested-mcp-deny.json",
764
+ "date": "2026-10-14"
765
+ }
766
+ ]
767
+ },
768
+ {
769
+ "policy": "mcp-tool-guard",
770
+ "harness": "pi",
771
+ "event": "tool_execution_start",
772
+ "timing": "post-tool",
773
+ "profile": "cli-extension",
774
+ "wired": false,
775
+ "configSource": null,
776
+ "harnessVersion": {
777
+ "tested": "1.1.0"
778
+ },
779
+ "class": "observation",
780
+ "verification": "unverified",
781
+ "prerequisites": [],
782
+ "covers": [],
783
+ "doesNotCover": [],
784
+ "caveats": [
785
+ "Pi user- and project-scope extensions have not been exercised in a live session; a later tool_call handler may mutate input after DoFlow allows it"
786
+ ],
787
+ "provenance": [
788
+ {
789
+ "kind": "doc",
790
+ "locator": "https://pi.dev/docs/latest/extensions",
791
+ "date": "2026-10-14"
792
+ }
793
+ ]
794
+ },
795
+ {
796
+ "policy": "mcp-tool-guard",
797
+ "harness": "pi",
798
+ "event": "tool_call",
799
+ "timing": "pre-tool",
800
+ "profile": "user-headless",
801
+ "wired": true,
802
+ "configSource": "core/harnesses/pi/extensions/doflow-guard.js:129",
803
+ "harnessVersion": {
804
+ "tested": "1.1.0"
805
+ },
806
+ "class": "unknown",
807
+ "verification": "unverified",
808
+ "prerequisites": [],
809
+ "covers": [],
810
+ "doesNotCover": [],
811
+ "caveats": [
812
+ "Pi extension has not been exercised in a live session; a later tool_call handler may mutate input after DoFlow allows it",
813
+ "live probe pending"
814
+ ],
815
+ "provenance": [
816
+ {
817
+ "kind": "types",
818
+ "locator": "@earendil-works/pi-coding-agent@1.1.0 dist/core/extensions/types.d.ts:907-958",
819
+ "date": "2026-10-14"
820
+ },
821
+ {
822
+ "kind": "doc",
823
+ "locator": "@earendil-works/pi-coding-agent@1.1.0 docs/extensions.md:169",
824
+ "date": "2026-10-14"
825
+ },
826
+ {
827
+ "kind": "fixture",
828
+ "locator": "test/fixtures/hooks/pi/tool_call/nested-mcp-deny.json",
829
+ "date": "2026-10-14"
830
+ }
831
+ ]
832
+ },
833
+ {
834
+ "policy": "mcp-tool-guard",
835
+ "harness": "pi",
836
+ "event": "tool_call",
837
+ "timing": "pre-tool",
838
+ "profile": "project-headless",
839
+ "wired": true,
840
+ "configSource": "core/harnesses/pi/extensions/doflow-guard.js:129",
841
+ "harnessVersion": {
842
+ "tested": "1.1.0"
843
+ },
844
+ "class": "unknown",
845
+ "verification": "unverified",
846
+ "prerequisites": [
847
+ "project-trust"
848
+ ],
849
+ "covers": [],
850
+ "doesNotCover": [],
851
+ "caveats": [
852
+ "Pi extension has not been exercised in a live session; a later tool_call handler may mutate input after DoFlow allows it",
853
+ "live probe pending",
854
+ "project-trust is required for the project-scope extension"
855
+ ],
856
+ "provenance": [
857
+ {
858
+ "kind": "types",
859
+ "locator": "@earendil-works/pi-coding-agent@1.1.0 dist/core/extensions/types.d.ts:907-958",
860
+ "date": "2026-10-14"
861
+ },
862
+ {
863
+ "kind": "doc",
864
+ "locator": "@earendil-works/pi-coding-agent@1.1.0 docs/extensions.md:169",
865
+ "date": "2026-10-14"
866
+ },
867
+ {
868
+ "kind": "fixture",
869
+ "locator": "test/fixtures/hooks/pi/tool_call/nested-mcp-deny.json",
870
+ "date": "2026-10-14"
871
+ }
872
+ ]
873
+ },
874
+ {
875
+ "policy": "mcp-tool-guard",
876
+ "harness": "pi",
877
+ "event": "*",
878
+ "timing": "pre-tool",
879
+ "profile": "no-extensions",
880
+ "wired": false,
881
+ "configSource": null,
882
+ "harnessVersion": {
883
+ "tested": "1.1.0"
884
+ },
885
+ "class": "unsupported",
886
+ "verification": "unverified",
887
+ "prerequisites": [],
888
+ "covers": [],
889
+ "doesNotCover": [],
890
+ "caveats": [
891
+ "Pi user- and project-scope extensions have not been exercised in a live session; a later tool_call handler may mutate input after DoFlow allows it",
892
+ "Pi extension unavailable in this profile"
893
+ ],
894
+ "provenance": [
895
+ {
896
+ "kind": "types",
897
+ "locator": "@earendil-works/pi-coding-agent@1.1.0 dist/core/extensions/types.d.ts:907-958",
898
+ "date": "2026-10-14"
899
+ },
900
+ {
901
+ "kind": "doc",
902
+ "locator": "@earendil-works/pi-coding-agent@1.1.0 docs/extensions.md:169",
903
+ "date": "2026-10-14"
904
+ },
905
+ {
906
+ "kind": "fixture",
907
+ "locator": "test/fixtures/hooks/pi/tool_call/nested-mcp-deny.json",
908
+ "date": "2026-10-14"
909
+ }
910
+ ]
911
+ },
912
+ {
913
+ "policy": "stop-check",
914
+ "harness": "pi",
915
+ "event": "*",
916
+ "timing": "stop",
917
+ "profile": "any",
918
+ "wired": false,
919
+ "configSource": null,
920
+ "harnessVersion": {
921
+ "tested": "1.1.0"
922
+ },
923
+ "class": "unsupported",
924
+ "verification": "unverified",
925
+ "prerequisites": [],
926
+ "covers": [],
927
+ "doesNotCover": [],
928
+ "caveats": [
929
+ "not wired for this harness mapping",
930
+ "Pi user- and project-scope extensions have not been exercised in a live session; a later tool_call handler may mutate input after DoFlow allows it"
931
+ ],
932
+ "provenance": [
933
+ {
934
+ "kind": "doc",
935
+ "locator": "core/registry/lifecycle.json: policy stop-check mapping for pi",
936
+ "date": "2026-10-14"
937
+ }
938
+ ]
939
+ },
940
+ {
941
+ "policy": "pre-implementation-gate",
942
+ "harness": "copilot",
943
+ "event": "PreToolUse",
944
+ "timing": "pre-tool",
945
+ "profile": "any",
946
+ "wired": true,
947
+ "configSource": "core/harnesses/copilot/hooks/doflow.json:12",
948
+ "harnessVersion": {
949
+ "tested": "GitHub Copilot CLI 1.0.103"
950
+ },
951
+ "class": "blocking",
952
+ "verification": "verified",
953
+ "prerequisites": [],
954
+ "covers": [],
955
+ "doesNotCover": [
956
+ "writes via shell commands"
957
+ ],
958
+ "caveats": [
959
+ "live-verified: the preToolUse deny shape (a shell command was blocked) and the apply_patch payload; the edit and create tool arguments are not captured, so their path field is assumed to be `path` or `file_path`",
960
+ "version-drift:GitHub Copilot CLI 1.0.104."
961
+ ],
962
+ "provenance": [
963
+ {
964
+ "kind": "doc",
965
+ "locator": "https://docs.github.com/en/copilot/reference/hooks-reference",
966
+ "date": "2026-10-27"
967
+ },
968
+ {
969
+ "kind": "fixture",
970
+ "locator": "test/fixtures/hooks/copilot/pre-implement-gate/apply_patch-deny.json",
971
+ "date": "2026-10-27"
972
+ },
973
+ {
974
+ "kind": "live",
975
+ "locator": "test/fixtures/hooks/copilot/live/deny-proof-2026-10-27.json",
976
+ "date": "2026-10-27"
977
+ },
978
+ {
979
+ "kind": "live",
980
+ "locator": "test/fixtures/hooks/copilot/live/capture-2026-10-27.jsonl",
981
+ "date": "2026-10-27"
982
+ }
983
+ ]
984
+ },
985
+ {
986
+ "policy": "pre-implementation-gate",
987
+ "harness": "kiro",
988
+ "event": "PreToolUse",
989
+ "timing": "pre-tool",
990
+ "profile": "ide",
991
+ "wired": true,
992
+ "configSource": "core/harnesses/kiro/hooks/doflow.json:15",
993
+ "harnessVersion": {
994
+ "tested": "kiro-cli 2.29.1"
995
+ },
996
+ "class": "blocking",
997
+ "verification": "verified",
998
+ "prerequisites": [],
999
+ "covers": [],
1000
+ "doesNotCover": [
1001
+ "writes via shell commands"
1002
+ ],
1003
+ "caveats": [],
1004
+ "provenance": [
1005
+ {
1006
+ "kind": "doc",
1007
+ "locator": "https://kiro.dev/docs/hooks/types/",
1008
+ "date": "2026-10-12"
1009
+ },
1010
+ {
1011
+ "kind": "fixture",
1012
+ "locator": "test/fixtures/hooks/kiro/pre-implement-gate/deny.json",
1013
+ "date": "2026-10-14"
1014
+ }
1015
+ ]
1016
+ },
1017
+ {
1018
+ "policy": "pre-implementation-gate",
1019
+ "harness": "kiro",
1020
+ "event": "PreToolUse",
1021
+ "timing": "pre-tool",
1022
+ "profile": "cli-v3",
1023
+ "wired": true,
1024
+ "configSource": "core/harnesses/kiro/hooks/doflow.json:15",
1025
+ "harnessVersion": {
1026
+ "tested": "kiro-cli 2.29.1"
1027
+ },
1028
+ "class": "blocking",
1029
+ "verification": "verified",
1030
+ "prerequisites": [],
1031
+ "covers": [],
1032
+ "doesNotCover": [
1033
+ "writes via shell commands"
1034
+ ],
1035
+ "caveats": [],
1036
+ "provenance": [
1037
+ {
1038
+ "kind": "doc",
1039
+ "locator": "https://kiro.dev/docs/hooks/types/",
1040
+ "date": "2026-10-12"
1041
+ },
1042
+ {
1043
+ "kind": "fixture",
1044
+ "locator": "test/fixtures/hooks/kiro/pre-implement-gate/deny.json",
1045
+ "date": "2026-10-14"
1046
+ }
1047
+ ]
1048
+ },
1049
+ {
1050
+ "policy": "pre-implementation-gate",
1051
+ "harness": "kiro",
1052
+ "event": "PreToolUse",
1053
+ "timing": "pre-tool",
1054
+ "profile": "cli-v3-agent",
1055
+ "wired": true,
1056
+ "configSource": "core/harnesses/kiro/agents/doflow.json:11",
1057
+ "harnessVersion": {
1058
+ "tested": "kiro-cli 2.29.1"
1059
+ },
1060
+ "class": "blocking",
1061
+ "verification": "verified",
1062
+ "prerequisites": [],
1063
+ "covers": [],
1064
+ "doesNotCover": [
1065
+ "writes via shell commands"
1066
+ ],
1067
+ "caveats": [],
1068
+ "provenance": [
1069
+ {
1070
+ "kind": "doc",
1071
+ "locator": "https://kiro.dev/docs/hooks/types/",
1072
+ "date": "2026-10-12"
1073
+ },
1074
+ {
1075
+ "kind": "fixture",
1076
+ "locator": "test/fixtures/hooks/kiro/pre-implement-gate/agent-deny.json",
1077
+ "date": "2026-10-14"
1078
+ }
1079
+ ]
1080
+ },
1081
+ {
1082
+ "policy": "pre-implementation-gate",
1083
+ "harness": "kiro",
1084
+ "event": "PreToolUse",
1085
+ "timing": "pre-tool",
1086
+ "profile": "cli-2x-agent",
1087
+ "wired": true,
1088
+ "configSource": "core/harnesses/kiro/hooks/doflow.json:15",
1089
+ "harnessVersion": {
1090
+ "tested": "kiro-cli 2.29.1"
1091
+ },
1092
+ "class": "blocking",
1093
+ "verification": "verified",
1094
+ "prerequisites": [],
1095
+ "covers": [],
1096
+ "doesNotCover": [
1097
+ "writes via shell commands"
1098
+ ],
1099
+ "caveats": [],
1100
+ "provenance": [
1101
+ {
1102
+ "kind": "doc",
1103
+ "locator": "https://kiro.dev/docs/hooks/types/",
1104
+ "date": "2026-10-12"
1105
+ },
1106
+ {
1107
+ "kind": "fixture",
1108
+ "locator": "test/fixtures/hooks/kiro/pre-implement-gate/agent-deny.json",
1109
+ "date": "2026-10-14"
1110
+ }
1111
+ ]
1112
+ },
1113
+ {
1114
+ "policy": "pre-implementation-gate",
1115
+ "harness": "antigravity",
1116
+ "event": "PreToolUse",
1117
+ "timing": "pre-tool",
1118
+ "profile": "any",
1119
+ "wired": true,
1120
+ "configSource": "src/adapters/antigravity/index.js:60",
1121
+ "harnessVersion": {
1122
+ "tested": "1.3.3"
1123
+ },
1124
+ "class": "blocking",
1125
+ "verification": "verified",
1126
+ "prerequisites": [],
1127
+ "covers": [],
1128
+ "doesNotCover": [
1129
+ "writes via shell commands"
1130
+ ],
1131
+ "caveats": [],
1132
+ "provenance": [
1133
+ {
1134
+ "kind": "doc",
1135
+ "locator": "https://antigravity.google/docs/hooks/",
1136
+ "date": "2026-10-12"
1137
+ },
1138
+ {
1139
+ "kind": "fixture",
1140
+ "locator": "test/fixtures/hooks/antigravity/pre-implement-gate/deny-missing-design.json",
1141
+ "date": "2026-10-14"
1142
+ }
1143
+ ]
1144
+ },
1145
+ {
1146
+ "policy": "pre-bash-guard",
1147
+ "harness": "claude",
1148
+ "event": "PreToolUse",
1149
+ "timing": "pre-tool",
1150
+ "profile": "any",
1151
+ "wired": true,
1152
+ "configSource": "core/harnesses/claude/settings/settings.json:89",
1153
+ "harnessVersion": {
1154
+ "tested": "2.1.287 (Claude Code)"
1155
+ },
1156
+ "class": "blocking",
1157
+ "verification": "verified",
1158
+ "prerequisites": [],
1159
+ "covers": [],
1160
+ "doesNotCover": [],
1161
+ "caveats": [],
1162
+ "provenance": [
1163
+ {
1164
+ "kind": "doc",
1165
+ "locator": "https://code.claude.com/docs/en/hooks",
1166
+ "date": "2026-10-12"
1167
+ },
1168
+ {
1169
+ "kind": "fixture",
1170
+ "locator": "test/fixtures/hooks/claude/pre-bash-guard/deny.json",
1171
+ "date": "2026-10-14"
1172
+ }
1173
+ ]
1174
+ },
1175
+ {
1176
+ "policy": "pre-bash-guard",
1177
+ "harness": "codex",
1178
+ "event": "PreToolUse",
1179
+ "timing": "pre-tool",
1180
+ "profile": "any",
1181
+ "wired": true,
1182
+ "configSource": "core/harnesses/codex/hooks/hooks.json:45",
1183
+ "harnessVersion": {
1184
+ "tested": "codex-cli 0.162.1"
1185
+ },
1186
+ "class": "blocking",
1187
+ "verification": "verified",
1188
+ "prerequisites": [
1189
+ "hook-review"
1190
+ ],
1191
+ "covers": [],
1192
+ "doesNotCover": [],
1193
+ "caveats": [],
1194
+ "provenance": [
1195
+ {
1196
+ "kind": "doc",
1197
+ "locator": "https://learn.chatgpt.com/docs/hooks",
1198
+ "date": "2026-10-12"
1199
+ },
1200
+ {
1201
+ "kind": "fixture",
1202
+ "locator": "test/fixtures/hooks/codex/pre-bash-guard/deny.json",
1203
+ "date": "2026-10-14"
1204
+ }
1205
+ ]
1206
+ },
1207
+ {
1208
+ "policy": "pre-bash-guard",
1209
+ "harness": "opencode",
1210
+ "event": "*",
1211
+ "timing": "pre-tool",
1212
+ "profile": "any",
1213
+ "wired": false,
1214
+ "configSource": null,
1215
+ "harnessVersion": {
1216
+ "tested": "1.18.30"
1217
+ },
1218
+ "class": "unsupported",
1219
+ "verification": "unverified",
1220
+ "prerequisites": [],
1221
+ "covers": [],
1222
+ "doesNotCover": [],
1223
+ "caveats": [],
1224
+ "provenance": [
1225
+ {
1226
+ "kind": "doc",
1227
+ "locator": "core/registry/harnesses.json: opencode harness; core/registry/contracts.json: unavailable hook mapping",
1228
+ "date": "2026-10-12"
1229
+ }
1230
+ ]
1231
+ },
1232
+ {
1233
+ "policy": "pre-bash-guard",
1234
+ "harness": "kiro",
1235
+ "event": "PreToolUse",
1236
+ "timing": "pre-tool",
1237
+ "profile": "ide",
1238
+ "wired": true,
1239
+ "configSource": "core/harnesses/kiro/hooks/doflow.json:24",
1240
+ "harnessVersion": {
1241
+ "tested": "kiro-cli 2.29.1"
1242
+ },
1243
+ "class": "blocking",
1244
+ "verification": "verified",
1245
+ "prerequisites": [],
1246
+ "covers": [],
1247
+ "doesNotCover": [],
1248
+ "caveats": [],
1249
+ "provenance": [
1250
+ {
1251
+ "kind": "doc",
1252
+ "locator": "https://kiro.dev/docs/hooks/types/",
1253
+ "date": "2026-10-12"
1254
+ },
1255
+ {
1256
+ "kind": "fixture",
1257
+ "locator": "test/fixtures/hooks/kiro/pre-bash-guard/deny.json",
1258
+ "date": "2026-10-14"
1259
+ }
1260
+ ]
1261
+ },
1262
+ {
1263
+ "policy": "pre-bash-guard",
1264
+ "harness": "kiro",
1265
+ "event": "PreToolUse",
1266
+ "timing": "pre-tool",
1267
+ "profile": "cli-v3",
1268
+ "wired": true,
1269
+ "configSource": "core/harnesses/kiro/hooks/doflow.json:24",
1270
+ "harnessVersion": {
1271
+ "tested": "kiro-cli 2.29.1"
1272
+ },
1273
+ "class": "blocking",
1274
+ "verification": "verified",
1275
+ "prerequisites": [],
1276
+ "covers": [],
1277
+ "doesNotCover": [],
1278
+ "caveats": [],
1279
+ "provenance": [
1280
+ {
1281
+ "kind": "doc",
1282
+ "locator": "https://kiro.dev/docs/hooks/types/",
1283
+ "date": "2026-10-12"
1284
+ },
1285
+ {
1286
+ "kind": "fixture",
1287
+ "locator": "test/fixtures/hooks/kiro/pre-bash-guard/deny.json",
1288
+ "date": "2026-10-14"
1289
+ }
1290
+ ]
1291
+ },
1292
+ {
1293
+ "policy": "pre-bash-guard",
1294
+ "harness": "kiro",
1295
+ "event": "PreToolUse",
1296
+ "timing": "pre-tool",
1297
+ "profile": "cli-v3-agent",
1298
+ "wired": true,
1299
+ "configSource": "core/harnesses/kiro/agents/doflow.json:21",
1300
+ "harnessVersion": {
1301
+ "tested": "kiro-cli 2.29.1"
1302
+ },
1303
+ "class": "blocking",
1304
+ "verification": "verified",
1305
+ "prerequisites": [],
1306
+ "covers": [],
1307
+ "doesNotCover": [],
1308
+ "caveats": [],
1309
+ "provenance": [
1310
+ {
1311
+ "kind": "doc",
1312
+ "locator": "https://kiro.dev/docs/hooks/types/",
1313
+ "date": "2026-10-12"
1314
+ },
1315
+ {
1316
+ "kind": "fixture",
1317
+ "locator": "test/fixtures/hooks/kiro/pre-bash-guard/agent-deny.json",
1318
+ "date": "2026-10-14"
1319
+ }
1320
+ ]
1321
+ },
1322
+ {
1323
+ "policy": "pre-bash-guard",
1324
+ "harness": "kiro",
1325
+ "event": "PreToolUse",
1326
+ "timing": "pre-tool",
1327
+ "profile": "cli-2x-agent",
1328
+ "wired": true,
1329
+ "configSource": "core/harnesses/kiro/agents/doflow.json:21",
1330
+ "harnessVersion": {
1331
+ "tested": "kiro-cli 2.29.1"
1332
+ },
1333
+ "class": "blocking",
1334
+ "verification": "verified",
1335
+ "prerequisites": [],
1336
+ "covers": [],
1337
+ "doesNotCover": [],
1338
+ "caveats": [],
1339
+ "provenance": [
1340
+ {
1341
+ "kind": "doc",
1342
+ "locator": "https://kiro.dev/docs/hooks/types/",
1343
+ "date": "2026-10-12"
1344
+ },
1345
+ {
1346
+ "kind": "fixture",
1347
+ "locator": "test/fixtures/hooks/kiro/pre-bash-guard/agent-deny.json",
1348
+ "date": "2026-10-14"
1349
+ }
1350
+ ]
1351
+ },
1352
+ {
1353
+ "policy": "pre-bash-guard",
1354
+ "harness": "antigravity",
1355
+ "event": "*",
1356
+ "timing": "pre-tool",
1357
+ "profile": "any",
1358
+ "wired": false,
1359
+ "configSource": null,
1360
+ "harnessVersion": {
1361
+ "tested": "1.3.3"
1362
+ },
1363
+ "class": "unsupported",
1364
+ "verification": "unverified",
1365
+ "prerequisites": [],
1366
+ "covers": [],
1367
+ "doesNotCover": [],
1368
+ "caveats": [
1369
+ "not wired for this harness mapping"
1370
+ ],
1371
+ "provenance": [
1372
+ {
1373
+ "kind": "doc",
1374
+ "locator": "core/registry/lifecycle.json: policy pre-bash-guard mapping for antigravity",
1375
+ "date": "2026-10-14"
1376
+ }
1377
+ ]
1378
+ },
1379
+ {
1380
+ "policy": "session-context",
1381
+ "harness": "claude",
1382
+ "event": "SessionStart",
1383
+ "timing": "session",
1384
+ "profile": "any",
1385
+ "wired": true,
1386
+ "configSource": "core/harnesses/claude/settings/settings.json:36",
1387
+ "harnessVersion": {
1388
+ "tested": "2.1.287 (Claude Code)"
1389
+ },
1390
+ "class": "unknown",
1391
+ "verification": "unverified",
1392
+ "prerequisites": [],
1393
+ "covers": [],
1394
+ "doesNotCover": [],
1395
+ "caveats": [
1396
+ "native event enforcement is not yet verified"
1397
+ ],
1398
+ "provenance": [
1399
+ {
1400
+ "kind": "doc",
1401
+ "locator": "https://code.claude.com/docs/en/hooks",
1402
+ "date": "2026-10-12"
1403
+ }
1404
+ ]
1405
+ },
1406
+ {
1407
+ "policy": "session-context",
1408
+ "harness": "codex",
1409
+ "event": "SessionStart",
1410
+ "timing": "session",
1411
+ "profile": "any",
1412
+ "wired": true,
1413
+ "configSource": "core/harnesses/codex/hooks/hooks.json:4",
1414
+ "harnessVersion": {
1415
+ "tested": "codex-cli 0.162.1"
1416
+ },
1417
+ "class": "unknown",
1418
+ "verification": "unverified",
1419
+ "prerequisites": [
1420
+ "hook-review"
1421
+ ],
1422
+ "covers": [],
1423
+ "doesNotCover": [],
1424
+ "caveats": [
1425
+ "native event enforcement is not yet verified"
1426
+ ],
1427
+ "provenance": [
1428
+ {
1429
+ "kind": "doc",
1430
+ "locator": "https://learn.chatgpt.com/docs/hooks",
1431
+ "date": "2026-10-12"
1432
+ }
1433
+ ]
1434
+ },
1435
+ {
1436
+ "policy": "session-context",
1437
+ "harness": "opencode",
1438
+ "event": "*",
1439
+ "timing": "session",
1440
+ "profile": "any",
1441
+ "wired": false,
1442
+ "configSource": null,
1443
+ "harnessVersion": {
1444
+ "tested": "1.18.30"
1445
+ },
1446
+ "class": "unsupported",
1447
+ "verification": "unverified",
1448
+ "prerequisites": [],
1449
+ "covers": [],
1450
+ "doesNotCover": [],
1451
+ "caveats": [],
1452
+ "provenance": [
1453
+ {
1454
+ "kind": "doc",
1455
+ "locator": "core/registry/harnesses.json: opencode harness; core/registry/contracts.json: unavailable hook mapping",
1456
+ "date": "2026-10-12"
1457
+ }
1458
+ ]
1459
+ },
1460
+ {
1461
+ "policy": "session-context",
1462
+ "harness": "copilot",
1463
+ "event": "PreCompact",
1464
+ "timing": "compact",
1465
+ "profile": "any",
1466
+ "wired": false,
1467
+ "configSource": null,
1468
+ "harnessVersion": {
1469
+ "tested": "GitHub Copilot CLI 1.0.78"
1470
+ },
1471
+ "class": "unknown",
1472
+ "verification": "unverified",
1473
+ "prerequisites": [],
1474
+ "covers": [],
1475
+ "doesNotCover": [],
1476
+ "caveats": [
1477
+ "fixture-pending",
1478
+ "version-drift:GitHub Copilot CLI 1.0.78."
1479
+ ],
1480
+ "provenance": [
1481
+ {
1482
+ "kind": "doc",
1483
+ "locator": "core/registry/contracts.json: Copilot documented event inventory",
1484
+ "date": "2026-10-14"
1485
+ }
1486
+ ]
1487
+ },
1488
+ {
1489
+ "policy": "session-context",
1490
+ "harness": "copilot",
1491
+ "event": "SessionEnd",
1492
+ "timing": "session",
1493
+ "profile": "any",
1494
+ "wired": false,
1495
+ "configSource": null,
1496
+ "harnessVersion": {
1497
+ "tested": "GitHub Copilot CLI 1.0.78"
1498
+ },
1499
+ "class": "unknown",
1500
+ "verification": "unverified",
1501
+ "prerequisites": [],
1502
+ "covers": [],
1503
+ "doesNotCover": [],
1504
+ "caveats": [
1505
+ "fixture-pending",
1506
+ "version-drift:GitHub Copilot CLI 1.0.78."
1507
+ ],
1508
+ "provenance": [
1509
+ {
1510
+ "kind": "doc",
1511
+ "locator": "core/registry/contracts.json: Copilot documented event inventory",
1512
+ "date": "2026-10-14"
1513
+ }
1514
+ ]
1515
+ },
1516
+ {
1517
+ "policy": "session-context",
1518
+ "harness": "copilot",
1519
+ "event": "SessionStart",
1520
+ "timing": "session",
1521
+ "profile": "any",
1522
+ "wired": true,
1523
+ "configSource": "core/harnesses/copilot/hooks/doflow.json:4",
1524
+ "harnessVersion": {
1525
+ "tested": "GitHub Copilot CLI 1.0.103"
1526
+ },
1527
+ "class": "unknown",
1528
+ "verification": "unverified",
1529
+ "prerequisites": [],
1530
+ "covers": [],
1531
+ "doesNotCover": [],
1532
+ "caveats": [
1533
+ "native event enforcement is not yet verified; the policy writes session state and prints nothing",
1534
+ "version-drift:GitHub Copilot CLI 1.0.104."
1535
+ ],
1536
+ "provenance": [
1537
+ {
1538
+ "kind": "doc",
1539
+ "locator": "https://docs.github.com/en/copilot/reference/hooks-reference",
1540
+ "date": "2026-10-27"
1541
+ },
1542
+ {
1543
+ "kind": "fixture",
1544
+ "locator": "test/fixtures/hooks/copilot/session-start/start.json",
1545
+ "date": "2026-10-27"
1546
+ },
1547
+ {
1548
+ "kind": "live",
1549
+ "locator": "test/fixtures/hooks/copilot/live/capture-2026-10-27.jsonl",
1550
+ "date": "2026-10-27"
1551
+ }
1552
+ ]
1553
+ },
1554
+ {
1555
+ "policy": "session-context",
1556
+ "harness": "copilot",
1557
+ "event": "SubagentStart",
1558
+ "timing": "subagent",
1559
+ "profile": "any",
1560
+ "wired": false,
1561
+ "configSource": null,
1562
+ "harnessVersion": {
1563
+ "tested": "GitHub Copilot CLI 1.0.78"
1564
+ },
1565
+ "class": "unknown",
1566
+ "verification": "unverified",
1567
+ "prerequisites": [],
1568
+ "covers": [],
1569
+ "doesNotCover": [],
1570
+ "caveats": [
1571
+ "fixture-pending",
1572
+ "version-drift:GitHub Copilot CLI 1.0.78."
1573
+ ],
1574
+ "provenance": [
1575
+ {
1576
+ "kind": "doc",
1577
+ "locator": "core/registry/contracts.json: Copilot documented event inventory",
1578
+ "date": "2026-10-14"
1579
+ }
1580
+ ]
1581
+ },
1582
+ {
1583
+ "policy": "session-context",
1584
+ "harness": "copilot",
1585
+ "event": "SubagentStop",
1586
+ "timing": "subagent",
1587
+ "profile": "any",
1588
+ "wired": false,
1589
+ "configSource": null,
1590
+ "harnessVersion": {
1591
+ "tested": "GitHub Copilot CLI 1.0.78"
1592
+ },
1593
+ "class": "unknown",
1594
+ "verification": "unverified",
1595
+ "prerequisites": [],
1596
+ "covers": [],
1597
+ "doesNotCover": [],
1598
+ "caveats": [
1599
+ "fixture-pending",
1600
+ "version-drift:GitHub Copilot CLI 1.0.78."
1601
+ ],
1602
+ "provenance": [
1603
+ {
1604
+ "kind": "doc",
1605
+ "locator": "core/registry/contracts.json: Copilot documented event inventory",
1606
+ "date": "2026-10-14"
1607
+ }
1608
+ ]
1609
+ },
1610
+ {
1611
+ "policy": "session-context",
1612
+ "harness": "copilot",
1613
+ "event": "UserPromptSubmit",
1614
+ "timing": "prompt",
1615
+ "profile": "any",
1616
+ "wired": false,
1617
+ "configSource": null,
1618
+ "harnessVersion": {
1619
+ "tested": "GitHub Copilot CLI 1.0.78"
1620
+ },
1621
+ "class": "unknown",
1622
+ "verification": "unverified",
1623
+ "prerequisites": [],
1624
+ "covers": [],
1625
+ "doesNotCover": [],
1626
+ "caveats": [
1627
+ "fixture-pending",
1628
+ "version-drift:GitHub Copilot CLI 1.0.78."
1629
+ ],
1630
+ "provenance": [
1631
+ {
1632
+ "kind": "doc",
1633
+ "locator": "core/registry/contracts.json: Copilot documented event inventory",
1634
+ "date": "2026-10-14"
1635
+ }
1636
+ ]
1637
+ },
1638
+ {
1639
+ "policy": "session-context",
1640
+ "harness": "kiro",
1641
+ "event": "SessionStart",
1642
+ "timing": "session",
1643
+ "profile": "any",
1644
+ "wired": true,
1645
+ "configSource": "core/harnesses/kiro/hooks/doflow.json:6",
1646
+ "harnessVersion": {
1647
+ "tested": "kiro-cli 2.29.1"
1648
+ },
1649
+ "class": "advisory",
1650
+ "verification": "unverified",
1651
+ "prerequisites": [],
1652
+ "covers": [],
1653
+ "doesNotCover": [],
1654
+ "caveats": [
1655
+ "native event enforcement is not yet verified"
1656
+ ],
1657
+ "provenance": [
1658
+ {
1659
+ "kind": "doc",
1660
+ "locator": "https://kiro.dev/docs/hooks/types/",
1661
+ "date": "2026-10-12"
1662
+ }
1663
+ ]
1664
+ },
1665
+ {
1666
+ "policy": "session-context",
1667
+ "harness": "antigravity",
1668
+ "event": "*",
1669
+ "timing": "session",
1670
+ "profile": "any",
1671
+ "wired": false,
1672
+ "configSource": null,
1673
+ "harnessVersion": {
1674
+ "tested": "1.3.3"
1675
+ },
1676
+ "class": "unsupported",
1677
+ "verification": "unverified",
1678
+ "prerequisites": [],
1679
+ "covers": [],
1680
+ "doesNotCover": [],
1681
+ "caveats": [
1682
+ "not wired for this harness mapping"
1683
+ ],
1684
+ "provenance": [
1685
+ {
1686
+ "kind": "doc",
1687
+ "locator": "core/registry/lifecycle.json: policy session-context mapping for antigravity",
1688
+ "date": "2026-10-14"
1689
+ }
1690
+ ]
1691
+ },
1692
+ {
1693
+ "policy": "mcp-tool-guard",
1694
+ "harness": "claude",
1695
+ "event": "PreToolUse",
1696
+ "timing": "pre-tool",
1697
+ "profile": "any",
1698
+ "wired": true,
1699
+ "configSource": "core/harnesses/claude/settings/settings.json:89",
1700
+ "harnessVersion": {
1701
+ "tested": "2.1.287 (Claude Code)"
1702
+ },
1703
+ "class": "blocking",
1704
+ "verification": "verified",
1705
+ "prerequisites": [],
1706
+ "covers": [],
1707
+ "doesNotCover": [],
1708
+ "caveats": [],
1709
+ "provenance": [
1710
+ {
1711
+ "kind": "doc",
1712
+ "locator": "https://code.claude.com/docs/en/hooks",
1713
+ "date": "2026-10-12"
1714
+ },
1715
+ {
1716
+ "kind": "fixture",
1717
+ "locator": "test/fixtures/hooks/claude/mcp-tool-guard/deny.json",
1718
+ "date": "2026-10-14"
1719
+ }
1720
+ ]
1721
+ },
1722
+ {
1723
+ "policy": "mcp-tool-guard",
1724
+ "harness": "codex",
1725
+ "event": "PreToolUse",
1726
+ "timing": "pre-tool",
1727
+ "profile": "any",
1728
+ "wired": true,
1729
+ "configSource": "core/harnesses/codex/hooks/hooks.json:45",
1730
+ "harnessVersion": {
1731
+ "tested": "codex-cli 0.162.1"
1732
+ },
1733
+ "class": "blocking",
1734
+ "verification": "verified",
1735
+ "prerequisites": [
1736
+ "hook-review"
1737
+ ],
1738
+ "covers": [],
1739
+ "doesNotCover": [],
1740
+ "caveats": [],
1741
+ "provenance": [
1742
+ {
1743
+ "kind": "doc",
1744
+ "locator": "https://learn.chatgpt.com/docs/hooks",
1745
+ "date": "2026-10-12"
1746
+ },
1747
+ {
1748
+ "kind": "fixture",
1749
+ "locator": "test/fixtures/hooks/codex/mcp-tool-guard/deny.json",
1750
+ "date": "2026-10-14"
1751
+ }
1752
+ ]
1753
+ },
1754
+ {
1755
+ "policy": "mcp-tool-guard",
1756
+ "harness": "opencode",
1757
+ "event": "*",
1758
+ "timing": "pre-tool",
1759
+ "profile": "any",
1760
+ "wired": false,
1761
+ "configSource": null,
1762
+ "harnessVersion": {
1763
+ "tested": "1.18.30"
1764
+ },
1765
+ "class": "unsupported",
1766
+ "verification": "unverified",
1767
+ "prerequisites": [],
1768
+ "covers": [],
1769
+ "doesNotCover": [],
1770
+ "caveats": [],
1771
+ "provenance": [
1772
+ {
1773
+ "kind": "doc",
1774
+ "locator": "core/registry/harnesses.json: opencode harness; core/registry/contracts.json: unavailable hook mapping",
1775
+ "date": "2026-10-12"
1776
+ }
1777
+ ]
1778
+ },
1779
+ {
1780
+ "policy": "mcp-tool-guard",
1781
+ "harness": "copilot",
1782
+ "event": "PermissionDenied",
1783
+ "timing": "session",
1784
+ "profile": "any",
1785
+ "wired": false,
1786
+ "configSource": null,
1787
+ "harnessVersion": {
1788
+ "tested": "GitHub Copilot CLI 1.0.78"
1789
+ },
1790
+ "class": "unknown",
1791
+ "verification": "unverified",
1792
+ "prerequisites": [],
1793
+ "covers": [],
1794
+ "doesNotCover": [],
1795
+ "caveats": [
1796
+ "fixture-pending",
1797
+ "version-drift:GitHub Copilot CLI 1.0.78."
1798
+ ],
1799
+ "provenance": [
1800
+ {
1801
+ "kind": "doc",
1802
+ "locator": "core/registry/contracts.json: Copilot documented event inventory",
1803
+ "date": "2026-10-14"
1804
+ }
1805
+ ]
1806
+ },
1807
+ {
1808
+ "policy": "mcp-tool-guard",
1809
+ "harness": "copilot",
1810
+ "event": "PostToolUse",
1811
+ "timing": "post-tool",
1812
+ "profile": "any",
1813
+ "wired": false,
1814
+ "configSource": null,
1815
+ "harnessVersion": {
1816
+ "tested": "GitHub Copilot CLI 1.0.78"
1817
+ },
1818
+ "class": "unknown",
1819
+ "verification": "unverified",
1820
+ "prerequisites": [],
1821
+ "covers": [],
1822
+ "doesNotCover": [],
1823
+ "caveats": [
1824
+ "fixture-pending",
1825
+ "version-drift:GitHub Copilot CLI 1.0.78."
1826
+ ],
1827
+ "provenance": [
1828
+ {
1829
+ "kind": "doc",
1830
+ "locator": "core/registry/contracts.json: Copilot documented event inventory",
1831
+ "date": "2026-10-14"
1832
+ }
1833
+ ]
1834
+ },
1835
+ {
1836
+ "policy": "mcp-tool-guard",
1837
+ "harness": "copilot",
1838
+ "event": "PostToolUseFailure",
1839
+ "timing": "post-tool",
1840
+ "profile": "any",
1841
+ "wired": false,
1842
+ "configSource": null,
1843
+ "harnessVersion": {
1844
+ "tested": "GitHub Copilot CLI 1.0.78"
1845
+ },
1846
+ "class": "unknown",
1847
+ "verification": "unverified",
1848
+ "prerequisites": [],
1849
+ "covers": [],
1850
+ "doesNotCover": [],
1851
+ "caveats": [
1852
+ "fixture-pending",
1853
+ "version-drift:GitHub Copilot CLI 1.0.78."
1854
+ ],
1855
+ "provenance": [
1856
+ {
1857
+ "kind": "doc",
1858
+ "locator": "core/registry/contracts.json: Copilot documented event inventory",
1859
+ "date": "2026-10-14"
1860
+ }
1861
+ ]
1862
+ },
1863
+ {
1864
+ "policy": "mcp-tool-guard",
1865
+ "harness": "copilot",
1866
+ "event": "PreToolUse",
1867
+ "timing": "pre-tool",
1868
+ "profile": "any",
1869
+ "wired": true,
1870
+ "configSource": "core/harnesses/copilot/hooks/doflow.json:12",
1871
+ "harnessVersion": {
1872
+ "tested": "GitHub Copilot CLI 1.0.103"
1873
+ },
1874
+ "class": "unknown",
1875
+ "verification": "unverified",
1876
+ "prerequisites": [],
1877
+ "covers": [],
1878
+ "doesNotCover": [],
1879
+ "caveats": [
1880
+ "the MCP tool-name form on preToolUse was not captured: the guard matches the mcp__<server>__<tool> and mcp_ prefixes, so an MCP call under another name is allowed",
1881
+ "version-drift:GitHub Copilot CLI 1.0.104."
1882
+ ],
1883
+ "provenance": [
1884
+ {
1885
+ "kind": "doc",
1886
+ "locator": "https://docs.github.com/en/copilot/reference/hooks-reference",
1887
+ "date": "2026-10-27"
1888
+ },
1889
+ {
1890
+ "kind": "fixture",
1891
+ "locator": "test/fixtures/hooks/copilot/mcp-tool-guard/deny.json",
1892
+ "date": "2026-10-27"
1893
+ }
1894
+ ]
1895
+ },
1896
+ {
1897
+ "policy": "mcp-tool-guard",
1898
+ "harness": "kiro",
1899
+ "event": "PreToolUse",
1900
+ "timing": "pre-tool",
1901
+ "profile": "ide",
1902
+ "wired": true,
1903
+ "configSource": "core/harnesses/kiro/hooks/doflow.json:34",
1904
+ "harnessVersion": {
1905
+ "tested": "kiro-cli 2.29.1"
1906
+ },
1907
+ "class": "blocking",
1908
+ "verification": "verified",
1909
+ "prerequisites": [],
1910
+ "covers": [],
1911
+ "doesNotCover": [],
1912
+ "caveats": [],
1913
+ "provenance": [
1914
+ {
1915
+ "kind": "doc",
1916
+ "locator": "https://kiro.dev/docs/hooks/types/",
1917
+ "date": "2026-10-12"
1918
+ },
1919
+ {
1920
+ "kind": "fixture",
1921
+ "locator": "test/fixtures/hooks/kiro/mcp-tool-guard/deny.json",
1922
+ "date": "2026-10-14"
1923
+ }
1924
+ ]
1925
+ },
1926
+ {
1927
+ "policy": "mcp-tool-guard",
1928
+ "harness": "kiro",
1929
+ "event": "PreToolUse",
1930
+ "timing": "pre-tool",
1931
+ "profile": "cli-v3",
1932
+ "wired": true,
1933
+ "configSource": "core/harnesses/kiro/hooks/doflow.json:34",
1934
+ "harnessVersion": {
1935
+ "tested": "kiro-cli 2.29.1"
1936
+ },
1937
+ "class": "blocking",
1938
+ "verification": "verified",
1939
+ "prerequisites": [],
1940
+ "covers": [],
1941
+ "doesNotCover": [],
1942
+ "caveats": [],
1943
+ "provenance": [
1944
+ {
1945
+ "kind": "doc",
1946
+ "locator": "https://kiro.dev/docs/hooks/types/",
1947
+ "date": "2026-10-12"
1948
+ },
1949
+ {
1950
+ "kind": "fixture",
1951
+ "locator": "test/fixtures/hooks/kiro/mcp-tool-guard/deny.json",
1952
+ "date": "2026-10-14"
1953
+ }
1954
+ ]
1955
+ },
1956
+ {
1957
+ "policy": "mcp-tool-guard",
1958
+ "harness": "kiro",
1959
+ "event": "PreToolUse",
1960
+ "timing": "pre-tool",
1961
+ "profile": "cli-v3-agent",
1962
+ "wired": true,
1963
+ "configSource": "core/harnesses/kiro/agents/doflow.json:31",
1964
+ "harnessVersion": {
1965
+ "tested": "kiro-cli 2.29.1"
1966
+ },
1967
+ "class": "blocking",
1968
+ "verification": "verified",
1969
+ "prerequisites": [],
1970
+ "covers": [],
1971
+ "doesNotCover": [],
1972
+ "caveats": [],
1973
+ "provenance": [
1974
+ {
1975
+ "kind": "doc",
1976
+ "locator": "https://kiro.dev/docs/hooks/types/",
1977
+ "date": "2026-10-12"
1978
+ },
1979
+ {
1980
+ "kind": "fixture",
1981
+ "locator": "test/fixtures/hooks/kiro/mcp-tool-guard/agent-deny.json",
1982
+ "date": "2026-10-14"
1983
+ }
1984
+ ]
1985
+ },
1986
+ {
1987
+ "policy": "mcp-tool-guard",
1988
+ "harness": "kiro",
1989
+ "event": "PreToolUse",
1990
+ "timing": "pre-tool",
1991
+ "profile": "cli-2x-agent",
1992
+ "wired": true,
1993
+ "configSource": "core/harnesses/kiro/agents/doflow.json:31",
1994
+ "harnessVersion": {
1995
+ "tested": "kiro-cli 2.29.1"
1996
+ },
1997
+ "class": "blocking",
1998
+ "verification": "verified",
1999
+ "prerequisites": [],
2000
+ "covers": [],
2001
+ "doesNotCover": [],
2002
+ "caveats": [],
2003
+ "provenance": [
2004
+ {
2005
+ "kind": "doc",
2006
+ "locator": "https://kiro.dev/docs/hooks/types/",
2007
+ "date": "2026-10-12"
2008
+ },
2009
+ {
2010
+ "kind": "fixture",
2011
+ "locator": "test/fixtures/hooks/kiro/mcp-tool-guard/agent-deny.json",
2012
+ "date": "2026-10-14"
2013
+ }
2014
+ ]
2015
+ },
2016
+ {
2017
+ "policy": "mcp-tool-guard",
2018
+ "harness": "antigravity",
2019
+ "event": "*",
2020
+ "timing": "pre-tool",
2021
+ "profile": "any",
2022
+ "wired": false,
2023
+ "configSource": null,
2024
+ "harnessVersion": {
2025
+ "tested": "1.3.3"
2026
+ },
2027
+ "class": "unsupported",
2028
+ "verification": "unverified",
2029
+ "prerequisites": [],
2030
+ "covers": [],
2031
+ "doesNotCover": [],
2032
+ "caveats": [
2033
+ "not wired for this harness mapping"
2034
+ ],
2035
+ "provenance": [
2036
+ {
2037
+ "kind": "doc",
2038
+ "locator": "core/registry/lifecycle.json: policy mcp-tool-guard mapping for antigravity",
2039
+ "date": "2026-10-14"
2040
+ }
2041
+ ]
2042
+ },
2043
+ {
2044
+ "policy": "stop-check",
2045
+ "harness": "claude",
2046
+ "event": "Stop",
2047
+ "timing": "stop",
2048
+ "profile": "any",
2049
+ "wired": true,
2050
+ "configSource": "core/harnesses/claude/settings/settings.json:147",
2051
+ "harnessVersion": {
2052
+ "tested": "2.1.287 (Claude Code)"
2053
+ },
2054
+ "class": "blocking",
2055
+ "verification": "verified",
2056
+ "prerequisites": [],
2057
+ "covers": [],
2058
+ "doesNotCover": [],
2059
+ "caveats": [],
2060
+ "provenance": [
2061
+ {
2062
+ "kind": "doc",
2063
+ "locator": "https://code.claude.com/docs/en/hooks",
2064
+ "date": "2026-10-12"
2065
+ },
2066
+ {
2067
+ "kind": "fixture",
2068
+ "locator": "test/fixtures/hooks/claude/stop-check/deny.json",
2069
+ "date": "2026-10-14"
2070
+ }
2071
+ ]
2072
+ },
2073
+ {
2074
+ "policy": "stop-check",
2075
+ "harness": "codex",
2076
+ "event": "Stop",
2077
+ "timing": "stop",
2078
+ "profile": "any",
2079
+ "wired": true,
2080
+ "configSource": "core/harnesses/codex/hooks/hooks.json:99",
2081
+ "harnessVersion": {
2082
+ "tested": "codex-cli 0.162.1"
2083
+ },
2084
+ "class": "blocking",
2085
+ "verification": "verified",
2086
+ "prerequisites": [
2087
+ "hook-review"
2088
+ ],
2089
+ "covers": [],
2090
+ "doesNotCover": [],
2091
+ "caveats": [],
2092
+ "provenance": [
2093
+ {
2094
+ "kind": "doc",
2095
+ "locator": "https://learn.chatgpt.com/docs/hooks",
2096
+ "date": "2026-10-12"
2097
+ },
2098
+ {
2099
+ "kind": "fixture",
2100
+ "locator": "test/fixtures/hooks/codex/stop-check/deny.json",
2101
+ "date": "2026-10-14"
2102
+ }
2103
+ ]
2104
+ },
2105
+ {
2106
+ "policy": "stop-check",
2107
+ "harness": "opencode",
2108
+ "event": "*",
2109
+ "timing": "stop",
2110
+ "profile": "any",
2111
+ "wired": false,
2112
+ "configSource": null,
2113
+ "harnessVersion": {
2114
+ "tested": "1.18.30"
2115
+ },
2116
+ "class": "unsupported",
2117
+ "verification": "unverified",
2118
+ "prerequisites": [],
2119
+ "covers": [],
2120
+ "doesNotCover": [],
2121
+ "caveats": [],
2122
+ "provenance": [
2123
+ {
2124
+ "kind": "doc",
2125
+ "locator": "core/registry/harnesses.json: opencode harness; core/registry/contracts.json: unavailable hook mapping",
2126
+ "date": "2026-10-12"
2127
+ }
2128
+ ]
2129
+ },
2130
+ {
2131
+ "policy": "stop-check",
2132
+ "harness": "copilot",
2133
+ "event": "Stop",
2134
+ "timing": "stop",
2135
+ "profile": "any",
2136
+ "wired": true,
2137
+ "configSource": "core/harnesses/copilot/hooks/doflow.json:32",
2138
+ "harnessVersion": {
2139
+ "tested": "GitHub Copilot CLI 1.0.103"
2140
+ },
2141
+ "class": "unknown",
2142
+ "verification": "unverified",
2143
+ "prerequisites": [],
2144
+ "covers": [],
2145
+ "doesNotCover": [],
2146
+ "caveats": [
2147
+ "the {decision:\"block\"} output is documented but not exercised live",
2148
+ "the last assistant message is read from the events.jsonl transcript, and whether agentStop fires after it is written is unverified; a subagent's own agentStop is skipped",
2149
+ "version-drift:GitHub Copilot CLI 1.0.104."
2150
+ ],
2151
+ "provenance": [
2152
+ {
2153
+ "kind": "doc",
2154
+ "locator": "https://docs.github.com/en/copilot/reference/hooks-reference",
2155
+ "date": "2026-10-27"
2156
+ },
2157
+ {
2158
+ "kind": "fixture",
2159
+ "locator": "test/fixtures/hooks/copilot/stop-check/deny.json",
2160
+ "date": "2026-10-27"
2161
+ },
2162
+ {
2163
+ "kind": "live",
2164
+ "locator": "test/fixtures/hooks/copilot/live/capture-2026-10-27.jsonl",
2165
+ "date": "2026-10-27"
2166
+ }
2167
+ ]
2168
+ },
2169
+ {
2170
+ "policy": "pre-bash-guard",
2171
+ "harness": "copilot",
2172
+ "event": "PreToolUse",
2173
+ "timing": "pre-tool",
2174
+ "profile": "any",
2175
+ "wired": true,
2176
+ "configSource": "core/harnesses/copilot/hooks/doflow.json:12",
2177
+ "harnessVersion": {
2178
+ "tested": "GitHub Copilot CLI 1.0.103"
2179
+ },
2180
+ "class": "blocking",
2181
+ "verification": "verified",
2182
+ "prerequisites": [],
2183
+ "covers": [],
2184
+ "doesNotCover": [],
2185
+ "caveats": [
2186
+ "live-verified: the deny output blocked a shell command; Copilot command hooks are fail-closed on a non-zero exit and fail open on a timeout",
2187
+ "version-drift:GitHub Copilot CLI 1.0.104."
2188
+ ],
2189
+ "provenance": [
2190
+ {
2191
+ "kind": "doc",
2192
+ "locator": "https://docs.github.com/en/copilot/reference/hooks-reference",
2193
+ "date": "2026-10-27"
2194
+ },
2195
+ {
2196
+ "kind": "fixture",
2197
+ "locator": "test/fixtures/hooks/copilot/pre-bash-guard/deny.json",
2198
+ "date": "2026-10-27"
2199
+ },
2200
+ {
2201
+ "kind": "live",
2202
+ "locator": "test/fixtures/hooks/copilot/live/deny-proof-2026-10-27.json",
2203
+ "date": "2026-10-27"
2204
+ },
2205
+ {
2206
+ "kind": "live",
2207
+ "locator": "test/fixtures/hooks/copilot/live/capture-2026-10-27.jsonl",
2208
+ "date": "2026-10-27"
2209
+ }
2210
+ ]
2211
+ },
2212
+ {
2213
+ "policy": "stop-check",
2214
+ "harness": "kiro",
2215
+ "event": "Stop",
2216
+ "timing": "stop",
2217
+ "profile": "ide",
2218
+ "wired": true,
2219
+ "configSource": "core/harnesses/kiro/hooks/doflow.json:44",
2220
+ "harnessVersion": {
2221
+ "tested": "kiro-cli 2.29.1"
2222
+ },
2223
+ "class": "unknown",
2224
+ "verification": "unverified",
2225
+ "prerequisites": [],
2226
+ "covers": [],
2227
+ "doesNotCover": [],
2228
+ "caveats": [
2229
+ "Kiro documents AgentStop, not the configured Stop trigger; native trigger equivalence is unresolved",
2230
+ "V3 payload carries no transcript"
2231
+ ],
2232
+ "provenance": [
2233
+ {
2234
+ "kind": "doc",
2235
+ "locator": "https://kiro.dev/docs/hooks/types/",
2236
+ "date": "2026-10-12"
2237
+ },
2238
+ {
2239
+ "kind": "doc",
2240
+ "locator": "core/registry/harnesses.json: Kiro V3 Stop observation; bench/inventory/coverage.json: AgentStop",
2241
+ "date": "2026-10-14"
2242
+ },
2243
+ {
2244
+ "kind": "fixture",
2245
+ "locator": "test/fixtures/hooks/kiro/stop-check/v3-deny.json",
2246
+ "date": "2026-10-14"
2247
+ }
2248
+ ]
2249
+ },
2250
+ {
2251
+ "policy": "stop-check",
2252
+ "harness": "kiro",
2253
+ "event": "Stop",
2254
+ "timing": "stop",
2255
+ "profile": "cli-v3",
2256
+ "wired": true,
2257
+ "configSource": "core/harnesses/kiro/hooks/doflow.json:44",
2258
+ "harnessVersion": {
2259
+ "tested": "kiro-cli 2.29.1"
2260
+ },
2261
+ "class": "unknown",
2262
+ "verification": "unverified",
2263
+ "prerequisites": [],
2264
+ "covers": [],
2265
+ "doesNotCover": [],
2266
+ "caveats": [
2267
+ "Kiro documents AgentStop, not the configured Stop trigger; native trigger equivalence is unresolved",
2268
+ "V3 payload carries no transcript"
2269
+ ],
2270
+ "provenance": [
2271
+ {
2272
+ "kind": "doc",
2273
+ "locator": "https://kiro.dev/docs/hooks/types/",
2274
+ "date": "2026-10-12"
2275
+ },
2276
+ {
2277
+ "kind": "doc",
2278
+ "locator": "core/registry/harnesses.json: Kiro V3 Stop observation; bench/inventory/coverage.json: AgentStop",
2279
+ "date": "2026-10-14"
2280
+ },
2281
+ {
2282
+ "kind": "fixture",
2283
+ "locator": "test/fixtures/hooks/kiro/stop-check/v3-deny.json",
2284
+ "date": "2026-10-14"
2285
+ }
2286
+ ]
2287
+ },
2288
+ {
2289
+ "policy": "stop-check",
2290
+ "harness": "antigravity",
2291
+ "event": "Stop",
2292
+ "timing": "stop",
2293
+ "profile": "any",
2294
+ "wired": true,
2295
+ "configSource": "src/adapters/antigravity/index.js:60",
2296
+ "harnessVersion": {
2297
+ "tested": "1.3.3"
2298
+ },
2299
+ "class": "blocking",
2300
+ "verification": "verified",
2301
+ "prerequisites": [],
2302
+ "covers": [],
2303
+ "doesNotCover": [],
2304
+ "caveats": [],
2305
+ "provenance": [
2306
+ {
2307
+ "kind": "doc",
2308
+ "locator": "https://antigravity.google/docs/hooks/",
2309
+ "date": "2026-10-12"
2310
+ },
2311
+ {
2312
+ "kind": "fixture",
2313
+ "locator": "test/fixtures/hooks/antigravity/stop-check/continue.json",
2314
+ "date": "2026-10-14"
2315
+ }
2316
+ ]
2317
+ },
2318
+ {
2319
+ "policy": "pre-implementation-gate",
2320
+ "harness": "pi",
2321
+ "event": "tool_call",
2322
+ "timing": "pre-tool",
2323
+ "profile": "project-interactive",
2324
+ "wired": true,
2325
+ "configSource": "core/harnesses/pi/extensions/doflow-guard.js:129",
2326
+ "harnessVersion": {
2327
+ "tested": "1.1.0"
2328
+ },
2329
+ "class": "unknown",
2330
+ "verification": "unverified",
2331
+ "prerequisites": [
2332
+ "project-trust"
2333
+ ],
2334
+ "covers": [],
2335
+ "doesNotCover": [
2336
+ "writes via shell commands"
2337
+ ],
2338
+ "caveats": [
2339
+ "project-trust is required for the project-scope extension",
2340
+ "loading path not live-observed",
2341
+ "project-trust is required for the project-scope extension"
2342
+ ],
2343
+ "provenance": [
2344
+ {
2345
+ "kind": "types",
2346
+ "locator": "@earendil-works/pi-coding-agent@1.1.0 dist/core/extensions/types.d.ts:907-958",
2347
+ "date": "2026-10-14"
2348
+ },
2349
+ {
2350
+ "kind": "doc",
2351
+ "locator": "@earendil-works/pi-coding-agent@1.1.0 docs/extensions.md:169",
2352
+ "date": "2026-10-14"
2353
+ },
2354
+ {
2355
+ "kind": "fixture",
2356
+ "locator": "test/fixtures/hooks/pi/tool_call/edit-deny.json",
2357
+ "date": "2026-10-14"
2358
+ }
2359
+ ]
2360
+ },
2361
+ {
2362
+ "policy": "pre-bash-guard",
2363
+ "harness": "pi",
2364
+ "event": "tool_call",
2365
+ "timing": "pre-tool",
2366
+ "profile": "project-interactive",
2367
+ "wired": true,
2368
+ "configSource": "core/harnesses/pi/extensions/doflow-guard.js:129",
2369
+ "harnessVersion": {
2370
+ "tested": "1.1.0"
2371
+ },
2372
+ "class": "unknown",
2373
+ "verification": "unverified",
2374
+ "prerequisites": [
2375
+ "project-trust"
2376
+ ],
2377
+ "covers": [],
2378
+ "doesNotCover": [],
2379
+ "caveats": [
2380
+ "project-trust is required for the project-scope extension",
2381
+ "loading path not live-observed",
2382
+ "project-trust is required for the project-scope extension"
2383
+ ],
2384
+ "provenance": [
2385
+ {
2386
+ "kind": "types",
2387
+ "locator": "@earendil-works/pi-coding-agent@1.1.0 dist/core/extensions/types.d.ts:907-958",
2388
+ "date": "2026-10-14"
2389
+ },
2390
+ {
2391
+ "kind": "doc",
2392
+ "locator": "@earendil-works/pi-coding-agent@1.1.0 docs/extensions.md:169",
2393
+ "date": "2026-10-14"
2394
+ },
2395
+ {
2396
+ "kind": "fixture",
2397
+ "locator": "test/fixtures/hooks/pi/tool_call/bash-deny.json",
2398
+ "date": "2026-10-14"
2399
+ }
2400
+ ]
2401
+ },
2402
+ {
2403
+ "policy": "mcp-tool-guard",
2404
+ "harness": "pi",
2405
+ "event": "tool_call",
2406
+ "timing": "pre-tool",
2407
+ "profile": "project-interactive",
2408
+ "wired": true,
2409
+ "configSource": "core/harnesses/pi/extensions/doflow-guard.js:129",
2410
+ "harnessVersion": {
2411
+ "tested": "1.1.0"
2412
+ },
2413
+ "class": "unknown",
2414
+ "verification": "unverified",
2415
+ "prerequisites": [
2416
+ "project-trust"
2417
+ ],
2418
+ "covers": [],
2419
+ "doesNotCover": [],
2420
+ "caveats": [
2421
+ "project-trust is required for the project-scope extension",
2422
+ "loading path not live-observed",
2423
+ "project-trust is required for the project-scope extension"
2424
+ ],
2425
+ "provenance": [
2426
+ {
2427
+ "kind": "types",
2428
+ "locator": "@earendil-works/pi-coding-agent@1.1.0 dist/core/extensions/types.d.ts:907-958",
2429
+ "date": "2026-10-14"
2430
+ },
2431
+ {
2432
+ "kind": "doc",
2433
+ "locator": "@earendil-works/pi-coding-agent@1.1.0 docs/extensions.md:169",
2434
+ "date": "2026-10-14"
2435
+ },
2436
+ {
2437
+ "kind": "fixture",
2438
+ "locator": "test/fixtures/hooks/pi/tool_call/nested-mcp-deny.json",
2439
+ "date": "2026-10-14"
2440
+ }
2441
+ ]
2442
+ },
2443
+ {
2444
+ "policy": "stop-check",
2445
+ "harness": "kiro",
2446
+ "event": "stop",
2447
+ "timing": "stop",
2448
+ "profile": "cli-2x-agent",
2449
+ "wired": true,
2450
+ "configSource": "core/harnesses/kiro/agents/doflow.json:50",
2451
+ "harnessVersion": {
2452
+ "tested": "kiro-cli 2.29.1"
2453
+ },
2454
+ "class": "observation",
2455
+ "verification": "verified",
2456
+ "prerequisites": [],
2457
+ "covers": [],
2458
+ "doesNotCover": [],
2459
+ "caveats": [
2460
+ "Kiro CLI 2.x agent stop cannot block session completion"
2461
+ ],
2462
+ "provenance": [
2463
+ {
2464
+ "kind": "doc",
2465
+ "locator": "https://kiro.dev/docs/hooks/types/",
2466
+ "date": "2026-10-14"
2467
+ },
2468
+ {
2469
+ "kind": "fixture",
2470
+ "locator": "test/fixtures/hooks/kiro/stop-check/agent-deny.json",
2471
+ "date": "2026-10-14"
2472
+ }
2473
+ ]
2474
+ },
2475
+ {
2476
+ "policy": "stop-check",
2477
+ "harness": "kiro",
2478
+ "event": "Stop",
2479
+ "timing": "stop",
2480
+ "profile": "cli-v3-agent",
2481
+ "wired": true,
2482
+ "configSource": "core/harnesses/kiro/agents/doflow.json:50",
2483
+ "harnessVersion": {
2484
+ "tested": "kiro-cli 2.29.1"
2485
+ },
2486
+ "class": "unknown",
2487
+ "verification": "unverified",
2488
+ "prerequisites": [],
2489
+ "covers": [],
2490
+ "doesNotCover": [],
2491
+ "caveats": [
2492
+ "Kiro documents AgentStop, not the configured Stop trigger; native trigger equivalence is unresolved",
2493
+ "V3 payload carries no transcript"
2494
+ ],
2495
+ "provenance": [
2496
+ {
2497
+ "kind": "doc",
2498
+ "locator": "https://kiro.dev/docs/hooks/types/",
2499
+ "date": "2026-10-12"
2500
+ },
2501
+ {
2502
+ "kind": "doc",
2503
+ "locator": "core/registry/harnesses.json: Kiro V3 Stop observation; bench/inventory/coverage.json: AgentStop",
2504
+ "date": "2026-10-14"
2505
+ },
2506
+ {
2507
+ "kind": "fixture",
2508
+ "locator": "test/fixtures/hooks/kiro/stop-check/v3-deny.json",
2509
+ "date": "2026-10-14"
2510
+ }
2511
+ ]
2512
+ },
2513
+ {
2514
+ "policy": "pre-implementation-gate",
2515
+ "harness": "pi",
2516
+ "event": "tool_call",
2517
+ "timing": "pre-tool",
2518
+ "profile": "user-interactive",
2519
+ "wired": true,
2520
+ "configSource": "core/harnesses/pi/extensions/doflow-guard.js:129",
2521
+ "harnessVersion": {
2522
+ "tested": "1.1.0"
2523
+ },
2524
+ "class": "unknown",
2525
+ "verification": "unverified",
2526
+ "prerequisites": [],
2527
+ "covers": [],
2528
+ "doesNotCover": [
2529
+ "writes via shell commands"
2530
+ ],
2531
+ "caveats": [
2532
+ "Pi extension has not been exercised in a live session; a later tool_call handler may mutate input after DoFlow allows it",
2533
+ "live probe pending"
2534
+ ],
2535
+ "provenance": [
2536
+ {
2537
+ "kind": "types",
2538
+ "locator": "@earendil-works/pi-coding-agent@1.1.0 dist/core/extensions/types.d.ts:907-958",
2539
+ "date": "2026-10-14"
2540
+ },
2541
+ {
2542
+ "kind": "doc",
2543
+ "locator": "@earendil-works/pi-coding-agent@1.1.0 docs/extensions.md:169",
2544
+ "date": "2026-10-14"
2545
+ },
2546
+ {
2547
+ "kind": "fixture",
2548
+ "locator": "test/fixtures/hooks/pi/tool_call/edit-deny.json",
2549
+ "date": "2026-10-14"
2550
+ }
2551
+ ]
2552
+ },
2553
+ {
2554
+ "policy": "pre-bash-guard",
2555
+ "harness": "pi",
2556
+ "event": "tool_call",
2557
+ "timing": "pre-tool",
2558
+ "profile": "user-interactive",
2559
+ "wired": true,
2560
+ "configSource": "core/harnesses/pi/extensions/doflow-guard.js:129",
2561
+ "harnessVersion": {
2562
+ "tested": "1.1.0"
2563
+ },
2564
+ "class": "unknown",
2565
+ "verification": "unverified",
2566
+ "prerequisites": [],
2567
+ "covers": [],
2568
+ "doesNotCover": [],
2569
+ "caveats": [
2570
+ "Pi extension has not been exercised in a live session; a later tool_call handler may mutate input after DoFlow allows it",
2571
+ "live probe pending"
2572
+ ],
2573
+ "provenance": [
2574
+ {
2575
+ "kind": "types",
2576
+ "locator": "@earendil-works/pi-coding-agent@1.1.0 dist/core/extensions/types.d.ts:907-958",
2577
+ "date": "2026-10-14"
2578
+ },
2579
+ {
2580
+ "kind": "doc",
2581
+ "locator": "@earendil-works/pi-coding-agent@1.1.0 docs/extensions.md:169",
2582
+ "date": "2026-10-14"
2583
+ },
2584
+ {
2585
+ "kind": "fixture",
2586
+ "locator": "test/fixtures/hooks/pi/tool_call/bash-deny.json",
2587
+ "date": "2026-10-14"
2588
+ }
2589
+ ]
2590
+ },
2591
+ {
2592
+ "policy": "mcp-tool-guard",
2593
+ "harness": "pi",
2594
+ "event": "tool_call",
2595
+ "timing": "pre-tool",
2596
+ "profile": "user-interactive",
2597
+ "wired": true,
2598
+ "configSource": "core/harnesses/pi/extensions/doflow-guard.js:129",
2599
+ "harnessVersion": {
2600
+ "tested": "1.1.0"
2601
+ },
2602
+ "class": "unknown",
2603
+ "verification": "unverified",
2604
+ "prerequisites": [],
2605
+ "covers": [],
2606
+ "doesNotCover": [],
2607
+ "caveats": [
2608
+ "Pi extension has not been exercised in a live session; a later tool_call handler may mutate input after DoFlow allows it",
2609
+ "live probe pending"
2610
+ ],
2611
+ "provenance": [
2612
+ {
2613
+ "kind": "types",
2614
+ "locator": "@earendil-works/pi-coding-agent@1.1.0 dist/core/extensions/types.d.ts:907-958",
2615
+ "date": "2026-10-14"
2616
+ },
2617
+ {
2618
+ "kind": "doc",
2619
+ "locator": "@earendil-works/pi-coding-agent@1.1.0 docs/extensions.md:169",
2620
+ "date": "2026-10-14"
2621
+ },
2622
+ {
2623
+ "kind": "fixture",
2624
+ "locator": "test/fixtures/hooks/pi/tool_call/nested-mcp-deny.json",
2625
+ "date": "2026-10-14"
2626
+ }
2627
+ ]
2628
+ },
2629
+ {
2630
+ "policy": "session-context",
2631
+ "harness": "kiro",
2632
+ "event": "SessionStart",
2633
+ "timing": "session",
2634
+ "profile": "cli-v3-agent",
2635
+ "wired": true,
2636
+ "configSource": "core/harnesses/kiro/agents/doflow.json:42",
2637
+ "harnessVersion": {
2638
+ "tested": "kiro-cli 2.29.1"
2639
+ },
2640
+ "class": "advisory",
2641
+ "verification": "unverified",
2642
+ "prerequisites": [],
2643
+ "covers": [],
2644
+ "doesNotCover": [],
2645
+ "caveats": [
2646
+ "native event enforcement is not yet verified"
2647
+ ],
2648
+ "provenance": [
2649
+ {
2650
+ "kind": "doc",
2651
+ "locator": "https://kiro.dev/docs/hooks/types/",
2652
+ "date": "2026-10-12"
2653
+ }
2654
+ ]
2655
+ }
2656
+ ],
2657
+ "endOfTurn": [
2658
+ {
2659
+ "harness": "claude",
2660
+ "events": [
2661
+ "Stop"
2662
+ ],
2663
+ "provenance": [
2664
+ {
2665
+ "kind": "doc",
2666
+ "locator": "https://code.claude.com/docs/en/hooks",
2667
+ "date": "2026-10-12"
2668
+ }
2669
+ ]
2670
+ },
2671
+ {
2672
+ "harness": "codex",
2673
+ "events": [
2674
+ "Stop"
2675
+ ],
2676
+ "provenance": [
2677
+ {
2678
+ "kind": "doc",
2679
+ "locator": "https://learn.chatgpt.com/docs/hooks",
2680
+ "date": "2026-10-12"
2681
+ }
2682
+ ]
2683
+ },
2684
+ {
2685
+ "harness": "opencode",
2686
+ "events": [],
2687
+ "none": "no DoFlow hook bridge",
2688
+ "provenance": []
2689
+ },
2690
+ {
2691
+ "harness": "pi",
2692
+ "events": [],
2693
+ "none": "the extension handles tool_call only",
2694
+ "provenance": []
2695
+ },
2696
+ {
2697
+ "harness": "copilot",
2698
+ "events": [
2699
+ "Stop"
2700
+ ],
2701
+ "provenance": [
2702
+ {
2703
+ "kind": "doc",
2704
+ "locator": "core/registry/contracts.json: Copilot documented event inventory",
2705
+ "date": "2026-10-14"
2706
+ },
2707
+ {
2708
+ "kind": "doc",
2709
+ "locator": "https://docs.github.com/en/copilot/reference/copilot-cli-reference/cli-hooks-reference",
2710
+ "date": "2026-10-15"
2711
+ }
2712
+ ]
2713
+ },
2714
+ {
2715
+ "harness": "kiro",
2716
+ "events": [
2717
+ "Stop",
2718
+ "stop"
2719
+ ],
2720
+ "provenance": [
2721
+ {
2722
+ "kind": "doc",
2723
+ "locator": "https://kiro.dev/docs/hooks/types/",
2724
+ "date": "2026-10-12"
2725
+ },
2726
+ {
2727
+ "kind": "doc",
2728
+ "locator": "https://kiro.dev/docs/hooks/types/",
2729
+ "date": "2026-10-14"
2730
+ }
2731
+ ]
2732
+ },
2733
+ {
2734
+ "harness": "antigravity",
2735
+ "events": [
2736
+ "Stop"
2737
+ ],
2738
+ "provenance": [
2739
+ {
2740
+ "kind": "doc",
2741
+ "locator": "https://antigravity.google/docs/hooks/",
2742
+ "date": "2026-10-12"
2743
+ }
2744
+ ]
2745
+ }
2746
+ ],
2747
+ "behaviours": [
2748
+ {
2749
+ "behaviour": "context-authority",
2750
+ "harness": "claude",
2751
+ "status": "enforced",
2752
+ "tests": [
2753
+ "test/hooks/context-authority.test.ts"
2754
+ ]
2755
+ },
2756
+ {
2757
+ "behaviour": "context-authority",
2758
+ "harness": "codex",
2759
+ "status": "enforced",
2760
+ "tests": [
2761
+ "test/hooks/context-authority.test.ts"
2762
+ ]
2763
+ },
2764
+ {
2765
+ "behaviour": "context-authority",
2766
+ "harness": "opencode",
2767
+ "status": "limitation",
2768
+ "limitation": "no DoFlow hook bridge"
2769
+ },
2770
+ {
2771
+ "behaviour": "context-authority",
2772
+ "harness": "pi",
2773
+ "status": "limitation",
2774
+ "limitation": "extension handles tool_call only"
2775
+ },
2776
+ {
2777
+ "behaviour": "context-authority",
2778
+ "harness": "copilot",
2779
+ "status": "limitation",
2780
+ "limitation": "no prompt hook wired; SessionStart emits no context"
2781
+ },
2782
+ {
2783
+ "behaviour": "context-authority",
2784
+ "harness": "kiro",
2785
+ "status": "limitation",
2786
+ "limitation": "no prompt hook wired; SessionStart emits no context"
2787
+ },
2788
+ {
2789
+ "behaviour": "context-authority",
2790
+ "harness": "antigravity",
2791
+ "status": "limitation",
2792
+ "limitation": "only PreToolUse and Stop wired"
2793
+ },
2794
+ {
2795
+ "behaviour": "default-silence",
2796
+ "harness": "claude",
2797
+ "status": "enforced",
2798
+ "tests": [
2799
+ "test/hooks/context-authority.test.ts",
2800
+ "test/hooks/emission-adapter.test.ts"
2801
+ ]
2802
+ },
2803
+ {
2804
+ "behaviour": "default-silence",
2805
+ "harness": "codex",
2806
+ "status": "enforced",
2807
+ "tests": [
2808
+ "test/hooks/context-authority.test.ts",
2809
+ "test/hooks/emission-adapter.test.ts"
2810
+ ]
2811
+ },
2812
+ {
2813
+ "behaviour": "default-silence",
2814
+ "harness": "opencode",
2815
+ "status": "limitation",
2816
+ "limitation": "no DoFlow hook bridge"
2817
+ },
2818
+ {
2819
+ "behaviour": "default-silence",
2820
+ "harness": "pi",
2821
+ "status": "limitation",
2822
+ "limitation": "no prompt-time emission"
2823
+ },
2824
+ {
2825
+ "behaviour": "default-silence",
2826
+ "harness": "copilot",
2827
+ "status": "limitation",
2828
+ "limitation": "no prompt-time emission"
2829
+ },
2830
+ {
2831
+ "behaviour": "default-silence",
2832
+ "harness": "kiro",
2833
+ "status": "limitation",
2834
+ "limitation": "no prompt-time emission"
2835
+ },
2836
+ {
2837
+ "behaviour": "default-silence",
2838
+ "harness": "antigravity",
2839
+ "status": "limitation",
2840
+ "limitation": "no prompt-time emission"
2841
+ },
2842
+ {
2843
+ "behaviour": "summary-scope",
2844
+ "harness": "claude",
2845
+ "status": "enforced",
2846
+ "tests": [
2847
+ "test/hooks/summary-scope.test.ts",
2848
+ "test/hooks/cross-harness-parity.test.ts"
2849
+ ]
2850
+ },
2851
+ {
2852
+ "behaviour": "summary-scope",
2853
+ "harness": "codex",
2854
+ "status": "limitation",
2855
+ "limitation": "PreCompact carries no summary text"
2856
+ },
2857
+ {
2858
+ "behaviour": "summary-scope",
2859
+ "harness": "opencode",
2860
+ "status": "limitation",
2861
+ "limitation": "no DoFlow hook bridge"
2862
+ },
2863
+ {
2864
+ "behaviour": "summary-scope",
2865
+ "harness": "pi",
2866
+ "status": "limitation",
2867
+ "limitation": "no compaction hook wired"
2868
+ },
2869
+ {
2870
+ "behaviour": "summary-scope",
2871
+ "harness": "copilot",
2872
+ "status": "limitation",
2873
+ "limitation": "no compaction hook wired"
2874
+ },
2875
+ {
2876
+ "behaviour": "summary-scope",
2877
+ "harness": "kiro",
2878
+ "status": "limitation",
2879
+ "limitation": "no compaction hook wired"
2880
+ },
2881
+ {
2882
+ "behaviour": "summary-scope",
2883
+ "harness": "antigravity",
2884
+ "status": "limitation",
2885
+ "limitation": "no compaction hook wired"
2886
+ },
2887
+ {
2888
+ "behaviour": "summary-grant",
2889
+ "harness": "claude",
2890
+ "status": "enforced",
2891
+ "tests": [
2892
+ "test/hooks/summary-scope.test.ts",
2893
+ "test/hooks/cross-harness-parity.test.ts"
2894
+ ]
2895
+ },
2896
+ {
2897
+ "behaviour": "summary-grant",
2898
+ "harness": "codex",
2899
+ "status": "enforced",
2900
+ "tests": [
2901
+ "test/hooks/cross-harness-parity.test.ts"
2902
+ ]
2903
+ },
2904
+ {
2905
+ "behaviour": "summary-grant",
2906
+ "harness": "opencode",
2907
+ "status": "limitation",
2908
+ "limitation": "no DoFlow hook bridge"
2909
+ },
2910
+ {
2911
+ "behaviour": "summary-grant",
2912
+ "harness": "pi",
2913
+ "status": "limitation",
2914
+ "limitation": "no prompt hook to deliver"
2915
+ },
2916
+ {
2917
+ "behaviour": "summary-grant",
2918
+ "harness": "copilot",
2919
+ "status": "limitation",
2920
+ "limitation": "no prompt hook to deliver"
2921
+ },
2922
+ {
2923
+ "behaviour": "summary-grant",
2924
+ "harness": "kiro",
2925
+ "status": "limitation",
2926
+ "limitation": "no prompt hook to deliver"
2927
+ },
2928
+ {
2929
+ "behaviour": "summary-grant",
2930
+ "harness": "antigravity",
2931
+ "status": "limitation",
2932
+ "limitation": "no prompt hook to deliver"
2933
+ },
2934
+ {
2935
+ "behaviour": "identity",
2936
+ "harness": "claude",
2937
+ "status": "limitation",
2938
+ "limitation": "launcher environment forwarding into hook processes is unverified until 081 (DEC-004)"
2939
+ },
2940
+ {
2941
+ "behaviour": "identity",
2942
+ "harness": "codex",
2943
+ "status": "limitation",
2944
+ "limitation": "launcher environment forwarding into hook processes is unverified until 081 (DEC-004)"
2945
+ },
2946
+ {
2947
+ "behaviour": "identity",
2948
+ "harness": "opencode",
2949
+ "status": "limitation",
2950
+ "limitation": "no DoFlow hook bridge"
2951
+ },
2952
+ {
2953
+ "behaviour": "identity",
2954
+ "harness": "pi",
2955
+ "status": "limitation",
2956
+ "limitation": "launcher environment forwarding into hook processes is unverified until 081 (DEC-004)"
2957
+ },
2958
+ {
2959
+ "behaviour": "identity",
2960
+ "harness": "copilot",
2961
+ "status": "limitation",
2962
+ "limitation": "launcher environment forwarding into hook processes is unverified until 081 (DEC-004)"
2963
+ },
2964
+ {
2965
+ "behaviour": "identity",
2966
+ "harness": "kiro",
2967
+ "status": "limitation",
2968
+ "limitation": "launcher environment forwarding into hook processes is unverified until 081 (DEC-004)"
2969
+ },
2970
+ {
2971
+ "behaviour": "identity",
2972
+ "harness": "antigravity",
2973
+ "status": "limitation",
2974
+ "limitation": "launcher environment forwarding into hook processes is unverified until 081 (DEC-004)"
2975
+ },
2976
+ {
2977
+ "behaviour": "check-freshness",
2978
+ "harness": "claude",
2979
+ "status": "enforced",
2980
+ "tests": [
2981
+ "test/hooks/check-freshness.test.ts"
2982
+ ]
2983
+ },
2984
+ {
2985
+ "behaviour": "check-freshness",
2986
+ "harness": "codex",
2987
+ "status": "enforced",
2988
+ "tests": [
2989
+ "test/hooks/check-freshness.test.ts"
2990
+ ]
2991
+ },
2992
+ {
2993
+ "behaviour": "check-freshness",
2994
+ "harness": "opencode",
2995
+ "status": "limitation",
2996
+ "limitation": "no pre-edit or pre-command gate"
2997
+ },
2998
+ {
2999
+ "behaviour": "check-freshness",
3000
+ "harness": "pi",
3001
+ "status": "enforced",
3002
+ "tests": [
3003
+ "test/hooks/check-freshness.test.ts"
3004
+ ]
3005
+ },
3006
+ {
3007
+ "behaviour": "check-freshness",
3008
+ "harness": "copilot",
3009
+ "status": "limitation",
3010
+ "limitation": "pre-tool gate and shell guard are wired; check-freshness is not exercised against Copilot payloads"
3011
+ },
3012
+ {
3013
+ "behaviour": "check-freshness",
3014
+ "harness": "kiro",
3015
+ "status": "enforced",
3016
+ "tests": [
3017
+ "test/hooks/check-freshness.test.ts"
3018
+ ]
3019
+ },
3020
+ {
3021
+ "behaviour": "check-freshness",
3022
+ "harness": "antigravity",
3023
+ "status": "enforced",
3024
+ "tests": [
3025
+ "test/hooks/check-freshness.test.ts"
3026
+ ]
3027
+ }
3028
+ ],
3029
+ "rowsDigest": "sha256:d8fdf93bb4a556f0ba91d5a8eb74e5857c29fe7ea87e2731a39afb955d50bb59"
3030
+ }
231
3031
  }