@khoavu882/doflow 2.0.0-beta.5 → 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 (471) hide show
  1. package/README.md +12 -11
  2. package/bin/doflow.js +21 -11
  3. package/core/.antigravity-plugin/plugin.json +1 -2
  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/permission-audit.sh +3 -0
  9. package/core/harnesses/claude/hooks/post-compact.sh +35 -32
  10. package/core/harnesses/claude/hooks/post-edit-lint.sh +2 -0
  11. package/core/harnesses/claude/hooks/post-shell-observe.sh +48 -0
  12. package/core/harnesses/claude/hooks/post-tool-failure.sh +3 -0
  13. package/core/harnesses/claude/hooks/pre-compact.sh +23 -27
  14. package/core/harnesses/claude/hooks/session-end.sh +23 -10
  15. package/core/harnesses/claude/hooks/skill-config-audit.sh +3 -0
  16. package/core/harnesses/claude/settings/settings.json +18 -0
  17. package/core/harnesses/claude/statusline/doflow-statusline.sh +1 -0
  18. package/core/harnesses/codex/agents/core-implementer.toml +1 -0
  19. package/core/harnesses/codex/agents/delivery-lead.toml +10 -0
  20. package/core/harnesses/codex/agents/quality-guardian.toml +1 -1
  21. package/core/harnesses/codex/agents/research-writer.toml +1 -1
  22. package/core/harnesses/codex/agents/reviewer.toml +10 -0
  23. package/core/harnesses/codex/agents/spec-analyst.toml +1 -1
  24. package/core/harnesses/codex/agents/system-architect.toml +1 -1
  25. package/core/harnesses/codex/hooks/lib.sh +44 -25
  26. package/core/harnesses/codex/hooks/post-edit-lint.impl.sh +3 -1
  27. package/core/harnesses/codex/hooks/pre-compact.impl.sh +29 -26
  28. package/core/harnesses/codex/hooks/session-end.impl.sh +23 -10
  29. package/core/harnesses/codex/hooks/subagent-audit.sh +1 -0
  30. package/core/harnesses/copilot/hooks/doflow-lib.sh +93 -0
  31. package/core/harnesses/copilot/hooks/doflow-mcp-tool-guard.sh +9 -0
  32. package/core/harnesses/copilot/hooks/doflow-pre-bash-guard.sh +9 -0
  33. package/core/harnesses/copilot/hooks/doflow-pre-implement-gate.sh +9 -0
  34. package/core/harnesses/copilot/hooks/doflow-session-start.sh +9 -0
  35. package/core/harnesses/copilot/hooks/doflow-stop-check.sh +9 -0
  36. package/core/harnesses/copilot/hooks/doflow-subagent-start.sh +9 -0
  37. package/core/harnesses/copilot/hooks/doflow-subagent-stop.sh +9 -0
  38. package/core/harnesses/copilot/hooks/doflow.json +57 -0
  39. package/core/harnesses/kiro/agents/doflow.json +1 -1
  40. package/core/harnesses/kiro/hooks/lib.sh +26 -6
  41. package/core/harnesses/kiro/hooks/mcp-tool-guard.sh +1 -0
  42. package/core/harnesses/kiro/hooks/pre-bash-guard.sh +1 -0
  43. package/core/harnesses/kiro/hooks/pre-implement-gate.sh +1 -0
  44. package/core/harnesses/kiro/hooks/session-start.sh +1 -0
  45. package/core/harnesses/kiro/hooks/stop-check.sh +1 -0
  46. package/core/harnesses/pi/extensions/doflow-guard.js +8 -0
  47. package/core/harnesses/shared/hooks/ENVELOPE_MIGRATION.md +0 -1
  48. package/core/harnesses/shared/hooks/bridge/bridge.sh +102 -9
  49. package/core/harnesses/shared/hooks/bridge/envelope.jq +87 -18
  50. package/core/harnesses/shared/hooks/bridge/observe-model.sh +75 -0
  51. package/core/harnesses/shared/hooks/bridge/respond.sh +10 -2
  52. package/core/harnesses/shared/hooks/policies/blocked-patterns.conf +28 -14
  53. package/core/harnesses/shared/hooks/policies/capture-failure.sh +48 -15
  54. package/core/harnesses/shared/hooks/policies/compact-text.sh +46 -0
  55. package/core/harnesses/shared/hooks/policies/contract.sh +3 -0
  56. package/core/harnesses/shared/hooks/policies/deny-json.sh +2 -11
  57. package/core/harnesses/shared/hooks/policies/emission-rules.sh +37 -0
  58. package/core/harnesses/shared/hooks/policies/emission.jq +209 -0
  59. package/core/harnesses/shared/hooks/policies/emission.sh +383 -0
  60. package/core/harnesses/shared/hooks/policies/identity.sh +177 -0
  61. package/core/harnesses/shared/hooks/policies/lib.sh +63 -40
  62. package/core/harnesses/shared/hooks/policies/mcp-tool-guard.sh +3 -2
  63. package/core/harnesses/shared/hooks/policies/pre-bash-guard.sh +213 -12
  64. package/core/harnesses/shared/hooks/policies/pre-implementation-gate.sh +114 -38
  65. package/core/harnesses/shared/hooks/policies/session-context.sh +30 -1
  66. package/core/harnesses/shared/hooks/policies/stop-check.sh +20 -9
  67. package/core/harnesses/shared/hooks/policies/subagent-audit.sh +5 -2
  68. package/core/harnesses/shared/hooks/policies/summary-store.sh +347 -0
  69. package/core/harnesses/shared/hooks/policies/user-prompt-submit.sh +60 -155
  70. package/core/harnesses/shared/hooks/stream-hook-runner.js +47 -8
  71. package/core/harnesses/shared/locator/doflow-run +2 -3
  72. package/core/registry/advice.json +3 -3
  73. package/core/registry/assets.json +55 -82
  74. package/core/registry/capabilities.json +12 -0
  75. package/core/registry/contracts.json +58 -31
  76. package/core/registry/contribution-points.json +32 -0
  77. package/core/registry/gates.json +32 -0
  78. package/core/registry/guidance-caps.json +40 -0
  79. package/core/registry/harnesses.json +1442 -363
  80. package/core/registry/lifecycle.json +485 -304
  81. package/core/registry/mcp.json +5 -1
  82. package/core/registry/models.json +7 -1
  83. package/core/registry/package-templates/README.md +19 -0
  84. package/core/registry/package-templates/agent/files/agent.md +9 -0
  85. package/core/registry/package-templates/agent/template.json +4 -0
  86. package/core/registry/package-templates/capability-provider/files/provider.json +9 -0
  87. package/core/registry/package-templates/capability-provider/template.json +11 -0
  88. package/core/registry/package-templates/debate-preset/files/preset.json +26 -0
  89. package/core/registry/package-templates/debate-preset/template.json +4 -0
  90. package/core/registry/package-templates/review-preset/files/preset.json +30 -0
  91. package/core/registry/package-templates/review-preset/template.json +4 -0
  92. package/core/registry/package-templates/skill/files/SKILL.md +8 -0
  93. package/core/registry/package-templates/skill/template.json +4 -0
  94. package/core/registry/package-templates/worker/files/worker.json +92 -0
  95. package/core/registry/package-templates/worker/template.json +11 -0
  96. package/core/registry/packages/doflow/doflow-package.json +15 -0
  97. package/core/registry/packages/doflow/presets/debate-3.json +26 -0
  98. package/core/registry/protocols.json +61 -0
  99. package/core/registry/routes.json +17 -0
  100. package/core/registry/rules.json +431 -0
  101. package/core/registry/settings.json +276 -0
  102. package/core/registry/storage.json +679 -31
  103. package/core/registry/telemetry.json +236 -0
  104. package/core/registry/transcripts.json +142 -0
  105. package/core/registry/verification.json +76 -1
  106. package/core/registry/workflows.json +55 -0
  107. package/core/shared/agent-specs/core-implementer.md +3 -0
  108. package/core/shared/agent-specs/delivery-lead.md +68 -0
  109. package/core/shared/agent-specs/quality-guardian.md +5 -1
  110. package/core/shared/agent-specs/research-writer.md +10 -3
  111. package/core/shared/agent-specs/reviewer.md +53 -0
  112. package/core/shared/agent-specs/spec-analyst.md +5 -6
  113. package/core/shared/agent-specs/system-architect.md +5 -1
  114. package/core/shared/guidance/DOFLOW_CORE.md +1 -5
  115. package/core/shared/guidance/modes/MODE_DeepResearch.md +1 -1
  116. package/core/shared/guidance/modes/MODE_Orchestration.md +4 -3
  117. package/core/shared/guidance/modes/MODE_Task_Management.md +14 -14
  118. package/core/shared/guidance/pointers/codex.md +1 -4
  119. package/core/shared/guidance/references/ARTIFACT_FORMAT.md +30 -16
  120. package/core/shared/guidance/references/ARTIFACT_VOICE.md +3 -2
  121. package/core/shared/guidance/references/CONSTITUTION_BASE.md +17 -15
  122. package/core/shared/guidance/references/DIAGRAM_GUIDE.md +1 -1
  123. package/core/shared/guidance/references/DOFLOW_CHAIN.md +17 -19
  124. package/core/shared/guidance/references/EVIDENCE_LEDGER.md +7 -8
  125. package/core/shared/guidance/references/MODEL_SELECTION.md +5 -3
  126. package/core/shared/guidance/references/ORCHESTRATION.md +1 -2
  127. package/core/shared/guidance/rules/RULES.md +45 -0
  128. package/core/shared/scripts/doflow/bash/do-args.sh +37 -0
  129. package/core/shared/scripts/doflow/bash/do-exec-paths.sh +4 -0
  130. package/core/shared/scripts/doflow/bash/do-git-state.sh +15 -4
  131. package/core/shared/scripts/doflow/bash/do-parallel-check.sh +4 -0
  132. package/core/shared/scripts/doflow/bash/do-paths.sh +40 -2
  133. package/core/shared/scripts/doflow/bash/do-prereqs.sh +2 -1
  134. package/core/shared/scripts/doflow/bash/do-review-package.sh +4 -0
  135. package/core/shared/scripts/doflow/bash/do-task-brief.sh +58 -16
  136. package/core/shared/scripts/doflow/bash/render-audit.sh +26 -2
  137. package/core/shared/scripts/doflow/bash/render-diagrams.sh +1 -0
  138. package/core/shared/scripts/doflow/bash/render-puml.sh +2 -1
  139. package/core/shared/scripts/doflow/bash/validate-artifacts.sh +48 -4
  140. package/core/shared/scripts/doflow/bin/doflow-run +149 -34
  141. package/core/shared/skills/do/SKILL.md +12 -10
  142. package/core/shared/skills/do/references/advice_calls.md +26 -0
  143. package/core/shared/skills/do/references/pm_routing.md +1 -2
  144. package/core/shared/skills/do/references/program_mode.md +31 -0
  145. package/core/shared/skills/do-brainstorm/SKILL.md +20 -74
  146. package/core/shared/skills/do-brainstorm/references/handoff_branches.md +35 -0
  147. package/core/shared/skills/do-brainstorm/references/intent_seed.md +21 -0
  148. package/core/shared/skills/do-brainstorm/references/round_log.md +17 -0
  149. package/core/shared/skills/do-code-review/SKILL.md +41 -144
  150. package/core/shared/skills/do-code-review/content-types/markdown.md +24 -2
  151. package/core/shared/skills/do-code-review/references/tools.md +90 -0
  152. package/core/shared/skills/do-code-review/scripts/doc_quality_checker.py +549 -7
  153. package/core/shared/skills/do-design/SKILL.md +18 -17
  154. package/core/shared/skills/do-diagnose/SKILL.md +14 -4
  155. package/core/shared/skills/do-document/SKILL.md +11 -1
  156. package/core/shared/skills/do-document/references/deep_research.md +1 -2
  157. package/core/shared/skills/do-document/references/embedded-research.md +18 -6
  158. package/core/shared/skills/do-document/references/implementation-flow.md +5 -6
  159. package/core/shared/skills/do-execute-plan/SKILL.md +15 -58
  160. package/core/shared/skills/do-execute-plan/references/handoff_record.md +7 -2
  161. package/core/shared/skills/do-execute-plan/references/parallel_dispatch.md +13 -0
  162. package/core/shared/skills/do-execute-plan/references/readiness_gate.md +26 -1
  163. package/core/shared/skills/do-execute-plan/references/run_position.md +13 -1
  164. package/core/shared/skills/do-execute-plan/references/scaffold.md +17 -9
  165. package/core/shared/skills/do-execute-plan/references/state_checkpoint.md +11 -0
  166. package/core/shared/skills/do-execute-plan/references/task_attempts.md +78 -24
  167. package/core/shared/skills/do-flow/SKILL.md +8 -9
  168. package/core/shared/skills/do-flow/references/task_classes.md +2 -2
  169. package/core/shared/skills/do-git/SKILL.md +4 -0
  170. package/core/shared/skills/do-implement/SKILL.md +4 -7
  171. package/core/shared/skills/do-plan/SKILL.md +26 -15
  172. package/core/shared/skills/do-test/SKILL.md +7 -4
  173. package/core/shared/templates/doflow/constitution-template.md +9 -3
  174. package/core/shared/templates/doflow/data-model-template.md +1 -1
  175. package/core/shared/templates/doflow/design-template.md +113 -16
  176. package/core/shared/templates/doflow/plan-template.md +11 -10
  177. package/core/shared/templates/doflow/question-log-template.md +14 -2
  178. package/core/shared/templates/doflow/requirement-template.md +1 -1
  179. package/core/worker-evidence/antigravity/checks.json +14 -0
  180. package/core/worker-evidence/codex/2026-10-18-cli-check.json +107 -0
  181. package/core/worker-evidence/codex/2026-10-18-live-run-edit.json +73 -0
  182. package/core/worker-evidence/codex/2026-10-18-live-run-read-only.json +62 -0
  183. package/core/worker-evidence/codex/2026-10-24-cli-check.json +126 -0
  184. package/core/worker-evidence/codex/checks.json +38 -0
  185. package/package.json +10 -6
  186. package/src/adapters/antigravity/index.js +143 -66
  187. package/src/adapters/claude/index.js +24 -4
  188. package/src/adapters/codex/agents.js +25 -15
  189. package/src/adapters/codex/index.js +48 -13
  190. package/src/adapters/codex/native-projection.js +6 -2
  191. package/src/adapters/copilot/index.js +58 -23
  192. package/src/adapters/copy-tree.js +290 -44
  193. package/src/adapters/guidance-manifest.js +71 -0
  194. package/src/adapters/guidance-pointer.js +19 -0
  195. package/src/adapters/hook-commands.js +6 -10
  196. package/src/adapters/index.js +1 -0
  197. package/src/adapters/kiro/index.js +23 -12
  198. package/src/adapters/opencode/index.js +8 -8
  199. package/src/adapters/pi/hooks.js +2 -1
  200. package/src/adapters/pi/index.js +14 -7
  201. package/src/adapters/resolve-source.js +26 -2
  202. package/src/cli/commands/install.js +2 -1
  203. package/src/cli/commands/reconcile.js +53 -9
  204. package/src/cli/commands/remove.js +2 -2
  205. package/src/cli/commands/rollback.js +6 -3
  206. package/src/cli/commands/self-update.js +18 -9
  207. package/src/cli/commands/status.js +21 -2
  208. package/src/cli/commands/ui.js +99 -0
  209. package/src/cli/commands/update.js +2 -1
  210. package/src/cli/index.js +322 -29
  211. package/src/cli/runtime-commands.js +209 -57
  212. package/src/cli/shared.js +0 -2
  213. package/src/helper/git.js +1 -1
  214. package/src/helper/guardrails.js +1 -1
  215. package/src/helper/marker-merge.js +31 -13
  216. package/src/helper/package-ids.js +37 -0
  217. package/src/helper/semver.js +94 -0
  218. package/src/install/backup.js +105 -15
  219. package/src/install/context.js +1 -1
  220. package/src/install/targets.js +31 -16
  221. package/src/lifecycle/coverage.js +20 -3
  222. package/src/lifecycle/hook-tier.js +160 -0
  223. package/src/lifecycle/index.js +412 -78
  224. package/src/lifecycle/retired-harnesses.js +318 -0
  225. package/src/lifecycle/view.js +35 -15
  226. package/src/registry/index.js +551 -26
  227. package/src/registry/worker-ids.js +45 -0
  228. package/src/release/build-package.js +0 -3
  229. package/src/release/docs-blocks.js +492 -0
  230. package/src/release/preflight.js +425 -0
  231. package/src/release/rehearse.js +401 -0
  232. package/src/release/release-workflow.js +733 -0
  233. package/src/release/sync-plugin-versions.js +43 -7
  234. package/src/runtime/advice/bench-gate.js +25 -0
  235. package/src/runtime/advice/cli.js +59 -16
  236. package/src/runtime/advice/client.js +32 -9
  237. package/src/runtime/advice/config.js +98 -133
  238. package/src/runtime/advice/doctor.js +1 -1
  239. package/src/runtime/advice/elevation.js +97 -0
  240. package/src/runtime/advice/endpoint-guard.js +9 -3
  241. package/src/runtime/advice/mode.js +37 -0
  242. package/src/runtime/advice/record.js +18 -5
  243. package/src/runtime/advice/registry.js +4 -1
  244. package/src/runtime/advice/shadow-config.js +229 -0
  245. package/src/runtime/advice/shadow-dispatcher.js +276 -0
  246. package/src/runtime/brief-rules.js +81 -0
  247. package/src/runtime/brief-tools.js +111 -34
  248. package/src/runtime/candidate.js +20 -11
  249. package/src/runtime/capabilities/executor.js +450 -0
  250. package/src/runtime/capabilities/loopback.js +41 -0
  251. package/src/runtime/capabilities/sanitizer.js +88 -0
  252. package/src/runtime/capability-router.js +135 -3
  253. package/src/runtime/checkouts.js +73 -11
  254. package/src/runtime/claims.js +13 -7
  255. package/src/runtime/cli.js +196 -19
  256. package/src/runtime/config-home.js +42 -0
  257. package/src/runtime/context/arbitrate.js +767 -0
  258. package/src/runtime/context/delivery-store.js +4 -6
  259. package/src/runtime/context/emission-rules.js +118 -0
  260. package/src/runtime/context/identity.js +227 -0
  261. package/src/runtime/context/primary-command.js +117 -0
  262. package/src/runtime/context/primary.js +344 -0
  263. package/src/runtime/context/summary-store.js +655 -0
  264. package/src/runtime/context-pack.js +154 -78
  265. package/src/runtime/decision-register.js +13 -4
  266. package/src/runtime/dispatch/admission.js +392 -0
  267. package/src/runtime/dispatch/attempt-end.js +274 -0
  268. package/src/runtime/dispatch/command.js +628 -0
  269. package/src/runtime/dispatch/controls.js +904 -0
  270. package/src/runtime/dispatch/envelope.js +276 -0
  271. package/src/runtime/dispatch/grants.js +310 -0
  272. package/src/runtime/dispatch/integrate.js +617 -0
  273. package/src/runtime/dispatch/loop.js +1835 -0
  274. package/src/runtime/dispatch/store.js +352 -0
  275. package/src/runtime/dispatch/verify-run.js +201 -0
  276. package/src/runtime/evidence-ledger.js +34 -7
  277. package/src/runtime/failure/capture.js +3 -1
  278. package/src/runtime/failure/cli.js +25 -9
  279. package/src/runtime/failure/home.js +57 -30
  280. package/src/runtime/failure/store.js +7 -2
  281. package/src/runtime/feature-pointer.js +174 -0
  282. package/src/runtime/feature-resolve.js +13 -2
  283. package/src/runtime/fleet/command.js +77 -0
  284. package/src/runtime/fleet/projects.js +178 -0
  285. package/src/runtime/fleet/tree.js +383 -0
  286. package/src/runtime/freshness.js +33 -3
  287. package/src/runtime/git-memo.js +46 -0
  288. package/src/runtime/guidance/ablation.js +427 -0
  289. package/src/runtime/health.js +565 -17
  290. package/src/runtime/history-compactor.js +13 -3
  291. package/src/runtime/implementation-gate.js +277 -22
  292. package/src/runtime/inventory/coverage.js +1 -1
  293. package/src/runtime/inventory/index.js +1 -1
  294. package/src/runtime/inventory/precedence.js +2 -2
  295. package/src/runtime/inventory/siblings.js +6 -4
  296. package/src/runtime/knowledge/code-corpus.js +277 -0
  297. package/src/runtime/knowledge/code-lexical.js +130 -0
  298. package/src/runtime/knowledge/code-retrieval.js +307 -0
  299. package/src/runtime/knowledge/code-validation.js +106 -0
  300. package/src/runtime/knowledge/gp3-gate.js +74 -0
  301. package/src/runtime/knowledge/graph-adapter.js +288 -0
  302. package/src/runtime/knowledge/graph-fallback.js +394 -0
  303. package/src/runtime/knowledge/hybrid.js +136 -8
  304. package/src/runtime/knowledge/retrieval.js +34 -1
  305. package/src/runtime/knowledge/rtk-compress.js +77 -0
  306. package/src/runtime/knowledge/semble-bridge.py +106 -0
  307. package/src/runtime/knowledge/semble-lifecycle.js +114 -0
  308. package/src/runtime/knowledge/semble-provider.js +365 -0
  309. package/src/runtime/lifecycle/cli.js +16 -6
  310. package/src/runtime/lifecycle/event-store.js +8 -6
  311. package/src/runtime/lifecycle/followup.js +6 -1
  312. package/src/runtime/lifecycle/overview.js +24 -1
  313. package/src/runtime/lifecycle/report-store.js +8 -10
  314. package/src/runtime/lifecycle/retention.js +95 -31
  315. package/src/runtime/lifecycle/root.js +9 -1
  316. package/src/runtime/lifecycle/status.js +34 -17
  317. package/src/runtime/lifecycle/store-upkeep.js +56 -7
  318. package/src/runtime/mask.js +134 -7
  319. package/src/runtime/mcp-consultations.js +40 -6
  320. package/src/runtime/model-router.js +79 -7
  321. package/src/runtime/models/catalogue.js +191 -0
  322. package/src/runtime/models/command.js +153 -0
  323. package/src/runtime/off-words.js +12 -0
  324. package/src/runtime/outcome.js +2 -2
  325. package/src/runtime/packages/command.js +1009 -0
  326. package/src/runtime/packages/contributions.js +116 -0
  327. package/src/runtime/packages/digest.js +132 -0
  328. package/src/runtime/packages/fetch.js +182 -0
  329. package/src/runtime/packages/grants.js +192 -0
  330. package/src/runtime/packages/index-file.js +134 -0
  331. package/src/runtime/packages/instruction.js +90 -0
  332. package/src/runtime/packages/manifest.js +331 -0
  333. package/src/runtime/packages/points.js +477 -0
  334. package/src/runtime/packages/programs.js +216 -0
  335. package/src/runtime/packages/scaffold.js +277 -0
  336. package/src/runtime/packages/source.js +90 -0
  337. package/src/runtime/packages/state.js +164 -0
  338. package/src/runtime/packages/store.js +449 -0
  339. package/src/runtime/packages/tar.js +106 -0
  340. package/src/runtime/packages/view.js +406 -0
  341. package/src/runtime/plan-check.js +59 -0
  342. package/src/runtime/plan-content.js +324 -0
  343. package/src/runtime/policy-init.js +118 -0
  344. package/src/runtime/profiles/doctor.js +96 -0
  345. package/src/runtime/profiles/resolve.js +244 -0
  346. package/src/runtime/profiles/rollback.js +254 -0
  347. package/src/runtime/profiles/sampler.js +41 -0
  348. package/src/runtime/readiness-record.js +16 -11
  349. package/src/runtime/readiness.js +46 -5
  350. package/src/runtime/research-request.js +50 -25
  351. package/src/runtime/retrieval-plan.js +10 -30
  352. package/src/runtime/retrieval-record.js +75 -5
  353. package/src/runtime/review/command.js +246 -0
  354. package/src/runtime/review/dominance.js +68 -0
  355. package/src/runtime/review/findings.js +434 -0
  356. package/src/runtime/review/identity.js +255 -0
  357. package/src/runtime/review/protocol-command.js +109 -0
  358. package/src/runtime/review/protocols.js +405 -0
  359. package/src/runtime/review/resolve-protocol.js +302 -0
  360. package/src/runtime/review/start.js +530 -0
  361. package/src/runtime/roadmap/facts.js +479 -0
  362. package/src/runtime/roadmap/gates.js +270 -0
  363. package/src/runtime/roadmap/loop.js +1636 -0
  364. package/src/runtime/roadmap/merge.js +381 -0
  365. package/src/runtime/roadmap/rows.js +1113 -0
  366. package/src/runtime/roadmap/seed.js +951 -0
  367. package/src/runtime/rules-report.js +336 -0
  368. package/src/runtime/scaffold/artifacts.js +60 -9
  369. package/src/runtime/scaffold/generate.js +21 -9
  370. package/src/runtime/settings/autopilot.js +106 -0
  371. package/src/runtime/settings/cli.js +280 -0
  372. package/src/runtime/settings/config-write.js +314 -0
  373. package/src/runtime/settings/files.js +271 -0
  374. package/src/runtime/settings/legacy.js +154 -0
  375. package/src/runtime/settings/lexical.js +56 -0
  376. package/src/runtime/settings/prepared-run.js +269 -0
  377. package/src/runtime/settings/project-layers.js +118 -0
  378. package/src/runtime/settings/refs.js +288 -0
  379. package/src/runtime/settings/registry.js +553 -0
  380. package/src/runtime/settings/resolve.js +713 -0
  381. package/src/runtime/settings/shared.js +37 -0
  382. package/src/runtime/settings/worker-billing.js +107 -0
  383. package/src/runtime/settings/write.js +269 -0
  384. package/src/runtime/slot-command.js +78 -0
  385. package/src/runtime/slots.js +671 -0
  386. package/src/runtime/source-version.js +1 -0
  387. package/src/runtime/state-root.js +217 -0
  388. package/src/runtime/storage/cli.js +12 -5
  389. package/src/runtime/storage/engine.js +9 -2
  390. package/src/runtime/storage/registry.js +14 -1
  391. package/src/runtime/storage/roots.js +66 -16
  392. package/src/runtime/storage/rules.js +82 -10
  393. package/src/runtime/storage/upkeep.js +10 -2
  394. package/src/runtime/storage/work-status.js +245 -26
  395. package/src/runtime/task-attempts.js +589 -69
  396. package/src/runtime/task-classifier.js +47 -11
  397. package/src/runtime/task-graph.js +373 -0
  398. package/src/runtime/task-run.js +778 -0
  399. package/src/runtime/task-scope.js +176 -55
  400. package/src/runtime/task-sources.js +147 -0
  401. package/src/runtime/task-state.js +374 -64
  402. package/src/runtime/team/admission.js +301 -0
  403. package/src/runtime/team/envelope.js +324 -0
  404. package/src/runtime/team/review-guard.js +156 -0
  405. package/src/runtime/trace/analyze.js +427 -0
  406. package/src/runtime/trace/baseline.js +770 -0
  407. package/src/runtime/trace/ledger.js +63 -140
  408. package/src/runtime/trace/otlp-export.js +568 -0
  409. package/src/runtime/trace/otlp-map.js +481 -0
  410. package/src/runtime/trace/spans.js +745 -0
  411. package/src/runtime/trace/telemetry.js +225 -0
  412. package/src/runtime/trace/views.js +1 -0
  413. package/src/runtime/transcripts/command.js +98 -0
  414. package/src/runtime/transcripts/cursor.js +326 -0
  415. package/src/runtime/transcripts/read.js +126 -0
  416. package/src/runtime/transcripts/readers/claude-jsonl.js +74 -0
  417. package/src/runtime/transcripts/readers/codex-rollout.js +70 -0
  418. package/src/runtime/transcripts/readers/copilot-events.js +90 -0
  419. package/src/runtime/transcripts/readers/kiro-jsonl.js +77 -0
  420. package/src/runtime/transcripts/readers/pi-jsonl.js +59 -0
  421. package/src/runtime/transcripts/registry.js +161 -0
  422. package/src/runtime/transcripts/stats.js +161 -0
  423. package/src/runtime/verification/check-key.js +628 -0
  424. package/src/runtime/verification/contract-runner.js +546 -11
  425. package/src/runtime/verification/engine.js +499 -9
  426. package/src/runtime/verification/impact.js +617 -0
  427. package/src/runtime/verification/inflight.js +205 -0
  428. package/src/runtime/verification/registry.js +176 -0
  429. package/src/runtime/verification/reuse.js +184 -0
  430. package/src/runtime/verification/telemetry-emit.js +254 -0
  431. package/src/runtime/verification/test-selection.js +67 -7
  432. package/src/runtime/worker/active.js +90 -0
  433. package/src/runtime/worker/cancel.js +222 -0
  434. package/src/runtime/worker/catalogue.js +122 -0
  435. package/src/runtime/worker/command.js +677 -0
  436. package/src/runtime/worker/evidence.js +288 -0
  437. package/src/runtime/worker/launch.js +288 -0
  438. package/src/runtime/worker/models.js +137 -0
  439. package/src/runtime/worker/parsers.js +218 -0
  440. package/src/runtime/worker/probes/index.js +706 -0
  441. package/src/runtime/worker/process-tree.js +415 -0
  442. package/src/runtime/worker/quota.js +43 -0
  443. package/src/runtime/worker/readiness.js +713 -0
  444. package/src/runtime/worker/run-store.js +166 -0
  445. package/src/runtime/worker/supervisor.js +541 -0
  446. package/src/runtime/worker/worktree-check.js +252 -0
  447. package/src/runtime/workflow-engine.js +5 -1
  448. package/src/runtime/workflow-orchestrator.js +578 -63
  449. package/src/runtime/worktree.js +149 -22
  450. package/src/state/index.js +1 -1
  451. package/src/state/lockfile.js +64 -10
  452. package/src/state/run-lock.js +1 -1
  453. package/types/node-commonjs.d.ts +106 -7
  454. package/core/harnesses/gemini/hooks/hooks.json +0 -77
  455. package/core/harnesses/gemini/hooks/lib.sh +0 -302
  456. package/core/harnesses/gemini/hooks/mcp-tool-guard.sh +0 -10
  457. package/core/harnesses/gemini/hooks/post-edit-lint.sh +0 -39
  458. package/core/harnesses/gemini/hooks/pre-bash-guard.sh +0 -10
  459. package/core/harnesses/gemini/hooks/pre-compact.sh +0 -38
  460. package/core/harnesses/gemini/hooks/pre-implement-gate.sh +0 -10
  461. package/core/harnesses/gemini/hooks/session-end.impl.sh +0 -89
  462. package/core/harnesses/gemini/hooks/session-end.sh +0 -5
  463. package/core/harnesses/gemini/hooks/session-start.sh +0 -7
  464. package/core/harnesses/gemini/settings/adapter-defaults.json +0 -4
  465. package/core/shared/guidance/FLAGS.md +0 -25
  466. package/core/shared/guidance/rules/RULE_01_SAFETY.md +0 -25
  467. package/core/shared/guidance/rules/RULE_02_WORKFLOW.md +0 -23
  468. package/core/shared/guidance/rules/RULE_03_QUALITY.md +0 -14
  469. package/core/shared/guidance/rules/RULE_04_QUESTIONS.md +0 -46
  470. package/src/adapters/gemini/hooks.js +0 -251
  471. package/src/adapters/gemini/index.js +0 -429
@@ -221,28 +221,202 @@
221
221
  ],
222
222
  "verification": "Complete a subagent, then send it a follow-up through SendMessage and confirm it keeps its history.",
223
223
  "verifiedOn": "2026-10-12"
224
+ },
225
+ "nest": {
226
+ "status": "supported",
227
+ "evidence": [
228
+ "https://code.claude.com/docs/en/sub-agents → \"By default, a subagent can spawn subagents of its own, up to three layers below the main conversation.\""
229
+ ],
230
+ "verification": "Start a subagent that starts a subagent and confirm the inner one runs (three layers below the main conversation by default).",
231
+ "verifiedOn": "2026-10-23"
232
+ }
233
+ },
234
+ "agentLimits": {
235
+ "readOnly": {
236
+ "status": "native",
237
+ "apply": {
238
+ "disallowedTools": "Edit, Write, NotebookEdit"
239
+ },
240
+ "evidence": [
241
+ "https://code.claude.com/docs/en/sub-agents"
242
+ ],
243
+ "checked": "docs",
244
+ "verifiedOn": "2026-10-23"
245
+ },
246
+ "toolScope": {
247
+ "status": "native",
248
+ "field": "tools",
249
+ "form": "comma",
250
+ "map": {
251
+ "read": [
252
+ "Read",
253
+ "Grep",
254
+ "Glob",
255
+ "Skill",
256
+ "TodoWrite",
257
+ "TaskCreate",
258
+ "TaskGet",
259
+ "TaskList",
260
+ "TaskUpdate"
261
+ ],
262
+ "edit": [
263
+ "Edit",
264
+ "Write",
265
+ "NotebookEdit"
266
+ ],
267
+ "shell": [
268
+ "Bash"
269
+ ],
270
+ "web": [
271
+ "WebFetch",
272
+ "WebSearch"
273
+ ],
274
+ "agents": [
275
+ "Agent"
276
+ ]
277
+ },
278
+ "mcpSelector": "mcp__{server}__*",
279
+ "evidence": [
280
+ "https://code.claude.com/docs/en/sub-agents",
281
+ "https://code.claude.com/docs/en/tools-reference"
282
+ ],
283
+ "checked": "docs",
284
+ "verifiedOn": "2026-10-27"
224
285
  }
225
286
  },
287
+ "worker": {
288
+ "profile": null,
289
+ "billing": "unknown",
290
+ "cli": {
291
+ "status": "supported",
292
+ "evidence": [
293
+ "bench/inventory/coverage.json → claude --version → 2.1.287 (Claude Code)"
294
+ ],
295
+ "verification": "Run `claude --version` and compare the output with bench/inventory/coverage.json.",
296
+ "verifiedOn": "2026-10-12",
297
+ "binary": "claude",
298
+ "versionArgv": [
299
+ "--version"
300
+ ]
301
+ },
302
+ "oneShot": {
303
+ "status": "unknown",
304
+ "evidence": [],
305
+ "verification": "Read claude's headless CLI documentation and `claude --help`; record the flag and its source",
306
+ "verifiedOn": "2026-10-15",
307
+ "reason": "no recorded evidence for claude: no free check has captured its one-shot headless flag or how it reads a prompt"
308
+ },
309
+ "structuredOutput": {
310
+ "status": "unknown",
311
+ "evidence": [],
312
+ "verification": "Read claude's headless CLI documentation and `claude --help`; record the flag and its source",
313
+ "verifiedOn": "2026-10-15",
314
+ "reason": "no captured claude transcript: its event schema has no parser, and a parser waits for a transcript from its own probe"
315
+ },
316
+ "readOnly": {
317
+ "status": "unknown",
318
+ "evidence": [],
319
+ "verification": "Read claude's headless CLI documentation and `claude --help`; record the flag and its source",
320
+ "verifiedOn": "2026-10-15",
321
+ "reason": "no in-repository evidence names this for claude; nothing is inferred from another harness or a model name"
322
+ },
323
+ "spawnDenial": {
324
+ "status": "unknown",
325
+ "evidence": [],
326
+ "verification": "Read claude's headless CLI documentation and `claude --help`; record the flag and its source",
327
+ "verifiedOn": "2026-10-15",
328
+ "reason": "no recorded evidence for claude: no free check shows a flag that disables subagent spawning"
329
+ },
330
+ "runnableProbe": {
331
+ "status": "unknown",
332
+ "evidence": [],
333
+ "verification": "Read claude's headless CLI documentation and `claude --help`; record the flag and its source",
334
+ "verifiedOn": "2026-10-15",
335
+ "reason": "no in-repository evidence names this for claude; nothing is inferred from another harness or a model name"
336
+ },
337
+ "hooksProbe": {
338
+ "status": "unknown",
339
+ "evidence": [],
340
+ "verification": "Read claude's headless CLI documentation and `claude --help`; record the flag and its source",
341
+ "verifiedOn": "2026-10-15",
342
+ "reason": "no in-repository evidence names this for claude; nothing is inferred from another harness or a model name"
343
+ },
344
+ "guidanceProbe": {
345
+ "status": "unknown",
346
+ "evidence": [],
347
+ "verification": "Read claude's headless CLI documentation and `claude --help`; record the flag and its source",
348
+ "verifiedOn": "2026-10-15",
349
+ "reason": "no in-repository evidence names this for claude; nothing is inferred from another harness or a model name"
350
+ },
351
+ "loginProbe": {
352
+ "status": "unknown",
353
+ "evidence": [],
354
+ "verification": "Read claude's headless CLI documentation and `claude --help`; record the flag and its source",
355
+ "verifiedOn": "2026-10-15",
356
+ "reason": "no in-repository evidence names this for claude; nothing is inferred from another harness or a model name"
357
+ },
358
+ "persistentSession": {
359
+ "status": "unknown",
360
+ "evidence": [],
361
+ "verification": "Read claude's headless CLI documentation and `claude --help`; record the flag and its source",
362
+ "verifiedOn": "2026-10-15",
363
+ "reason": "no in-repository evidence names this for claude; nothing is inferred from another harness or a model name"
364
+ },
365
+ "resume": {
366
+ "status": "unknown",
367
+ "evidence": [],
368
+ "verification": "Read claude's headless CLI documentation and `claude --help`; record the flag and its source",
369
+ "verifiedOn": "2026-10-15",
370
+ "reason": "no in-repository evidence names this for claude; nothing is inferred from another harness or a model name"
371
+ },
372
+ "steering": {
373
+ "status": "unknown",
374
+ "evidence": [],
375
+ "verification": "Read claude's headless CLI documentation and `claude --help`; record the flag and its source",
376
+ "verifiedOn": "2026-10-15",
377
+ "reason": "no in-repository evidence names this for claude; nothing is inferred from another harness or a model name"
378
+ },
379
+ "isolatedEdit": {
380
+ "status": "unknown",
381
+ "evidence": [],
382
+ "verification": "Read claude's headless CLI documentation and `claude --help`; record the flag that confines edits to the working directory and its source",
383
+ "verifiedOn": "2026-10-16",
384
+ "reason": "no recorded evidence for claude: no free check shows a flag that confines edits to the working directory"
385
+ },
386
+ "model": {
387
+ "status": "unknown",
388
+ "evidence": [],
389
+ "verification": "Read claude's headless CLI documentation and `claude --help`; record the flag that selects the model and its source",
390
+ "verifiedOn": "2026-10-24",
391
+ "reason": "no recorded evidence for claude: no free check shows a flag that selects the model"
392
+ },
393
+ "modelChecks": []
394
+ },
226
395
  "contextProfile": {
227
396
  "capacityTokens": {
228
- "unverified": "values belong to 085 (A-19)",
229
- "verifiedOn": "2026-10-13"
397
+ "value": 200000,
398
+ "source": "code.claude.com/docs/en/overview",
399
+ "verifiedOn": "2026-10-20"
230
400
  },
231
401
  "reserveTokens": {
232
- "unverified": "values belong to 085 (A-19)",
233
- "verifiedOn": "2026-10-13"
402
+ "value": 20000,
403
+ "source": "code.claude.com/docs/en/overview",
404
+ "verifiedOn": "2026-10-20"
234
405
  },
235
406
  "tokenTelemetry": {
236
- "unverified": "values belong to 085 (A-19)",
237
- "verifiedOn": "2026-10-13"
407
+ "value": "none",
408
+ "source": "delivery-store.ts:10 (no harness reports token usage directly to external CLI)",
409
+ "verifiedOn": "2026-10-20"
238
410
  },
239
411
  "toolResultLimitBytes": {
240
- "unverified": "values belong to 085 (A-19)",
241
- "verifiedOn": "2026-10-13"
412
+ "value": 524288,
413
+ "source": "code.claude.com/docs/en/hooks",
414
+ "verifiedOn": "2026-10-20"
242
415
  },
243
416
  "retention": {
244
- "unverified": "values belong to 085 (A-19)",
245
- "verifiedOn": "2026-10-13"
417
+ "value": "supported",
418
+ "source": "code.claude.com/docs/en/hooks (transcript replayed on resume)",
419
+ "verifiedOn": "2026-10-20"
246
420
  }
247
421
  },
248
422
  "scopePrecedence": {
@@ -257,6 +431,26 @@
257
431
  "note": "The skills doc's \"Resolve skills that share a name\" table states a first-match-wins hierarchy for a same-named skill: \"Enterprise over personal, and personal over project\" -- with `deploy` in both `~/.claude/skills/` and the project's `.claude/skills/`, the personal one runs. Order lists DoFlow's two tracked scopes (user, project); the fuller vendor hierarchy also has an enterprise-managed tier consulted before user. The skills doc states a first-match-wins hierarchy, so the order lists the winner first: the user copy is used.",
258
432
  "determinedOn": "2026-09-27",
259
433
  "mode": "first-wins"
434
+ },
435
+ "primaryProbe": {
436
+ "model": "payload",
437
+ "events": [
438
+ "SessionStart"
439
+ ],
440
+ "status": "unverified",
441
+ "evidence": [],
442
+ "verifiedOn": null,
443
+ "reason": "Claude Code sends the model on SessionStart only, and sometimes omits it; no live capture recorded yet."
444
+ },
445
+ "nativeTelemetry": {
446
+ "signals": [
447
+ "spans",
448
+ "events"
449
+ ],
450
+ "contentDefaults": "metadata-only",
451
+ "inboundTraceparent": "unsupported",
452
+ "joinKey": "tool_use_id",
453
+ "verifiedOn": "2026-10-20"
260
454
  }
261
455
  },
262
456
  {
@@ -363,7 +557,7 @@
363
557
  "evidence": [
364
558
  "https://learn.chatgpt.com/docs/build-skills"
365
559
  ],
366
- "verification": "Confirm Codex discovers the installed skill from .agents/skills (repo scope) or ~/.agents/skills (user scope); Codex never scans .codex/skills."
560
+ "verification": "Confirm Codex discovers the installed skill from .agents/skills (repo scope) or ~/.agents/skills (user scope); .codex/skills is not a documented Codex skills location."
367
561
  },
368
562
  "agents": {
369
563
  "status": "supported",
@@ -522,283 +716,228 @@
522
716
  "verifiedOn": "2026-10-12",
523
717
  "fallback": "manual",
524
718
  "reason": "https://learn.chatgpt.com/docs/agent-configuration/subagents was read on 2026-10-12 and does not state a resume operation; nothing is inferred from another harness or a model name."
525
- }
526
- },
527
- "contextProfile": {
528
- "capacityTokens": {
529
- "unverified": "values belong to 085 (A-19)",
530
- "verifiedOn": "2026-10-13"
531
- },
532
- "reserveTokens": {
533
- "unverified": "values belong to 085 (A-19)",
534
- "verifiedOn": "2026-10-13"
535
719
  },
536
- "tokenTelemetry": {
537
- "unverified": "values belong to 085 (A-19)",
538
- "verifiedOn": "2026-10-13"
539
- },
540
- "toolResultLimitBytes": {
541
- "unverified": "values belong to 085 (A-19)",
542
- "verifiedOn": "2026-10-13"
543
- },
544
- "retention": {
545
- "unverified": "values belong to 085 (A-19)",
546
- "verifiedOn": "2026-10-13"
547
- }
548
- },
549
- "scopePrecedence": {
550
- "status": "established",
551
- "order": [
552
- "user",
553
- "project"
554
- ],
555
- "evidence": [
556
- "https://learn.chatgpt.com/docs/agent-configuration/agents-md"
557
- ],
558
- "note": "AGENTS.md discovery is documented as: \"1. Global scope: In your Codex home directory ... Codex reads AGENTS.override.md if it exists. Otherwise, Codex reads AGENTS.md. 2. Project scope: Starting at the project root ...\", then \"Codex concatenates files from the root down ... Files closer to your current directory override earlier guidance because they appear later in the combined prompt.\" Codex concatenates and states that files closer to the working directory override earlier guidance because they appear later, so the LAST scope consulted takes effect: the project copy wins despite being consulted second.",
559
- "determinedOn": "2026-09-27",
560
- "mode": "last-wins"
561
- }
562
- },
563
- {
564
- "id": "gemini",
565
- "displayName": "Gemini CLI",
566
- "adapter": "gemini",
567
- "scopes": [
568
- "project",
569
- "user"
570
- ],
571
- "nativeTargets": {
572
- "instructions": "GEMINI.md",
573
- "agents": ".gemini/agents",
574
- "hooks": "settings.json"
575
- },
576
- "paths": {
577
- "configDir": {
578
- "project": {
579
- "base": "root",
580
- "segments": [
581
- ".agents"
582
- ]
583
- },
584
- "user": {
585
- "base": "root",
586
- "segments": [
587
- ".gemini",
588
- "config"
589
- ]
590
- }
591
- },
592
- "instruction": {
593
- "project": {
594
- "base": "root",
595
- "segments": [
596
- "GEMINI.md"
597
- ]
598
- },
599
- "user": {
600
- "base": "root",
601
- "segments": [
602
- ".gemini",
603
- "GEMINI.md"
604
- ]
605
- }
606
- },
607
- "settings": {
608
- "base": "root",
609
- "segments": [
610
- ".gemini",
611
- "settings.json"
612
- ]
613
- },
614
- "hooksDirectory": {
615
- "base": "root",
616
- "segments": [
617
- ".gemini",
618
- "hooks"
619
- ]
720
+ "nest": {
721
+ "status": "unknown",
722
+ "evidence": [],
723
+ "verification": "Re-read https://learn.chatgpt.com/docs/agent-configuration/subagents for whether a subagent can start a subagent.",
724
+ "verifiedOn": "2026-10-23",
725
+ "fallback": "sequential",
726
+ "reason": "vendor docs silent: https://learn.chatgpt.com/docs/agent-configuration/subagents was read on 2026-10-23 and does not state whether a subagent can start a subagent; nothing is inferred from another harness or a model name."
620
727
  }
621
728
  },
622
- "capabilities": {
623
- "instructions": {
624
- "status": "supported",
729
+ "agentLimits": {
730
+ "readOnly": {
731
+ "status": "unenforced",
732
+ "reason": "vendor docs say `sandbox_mode` in an agent file does not override the parent session; DoFlow keeps writing it (followup-tracked)",
625
733
  "evidence": [
626
- "https://geminicli.com/docs/cli/gemini-md/"
734
+ "https://learn.chatgpt.com/docs/agent-configuration/subagents"
627
735
  ],
628
- "verification": "Confirm GEMINI.md is loaded by Gemini CLI."
736
+ "verifiedOn": "2026-10-23"
629
737
  },
630
- "skills": {
631
- "status": "supported",
738
+ "toolScope": {
739
+ "status": "unenforced",
740
+ "reason": "an agent file can only switch features off (features.shell_tool); it has no read, edit, web or subagent allowlist, so DoFlow projects no scope",
632
741
  "evidence": [
633
- "https://geminicli.com/docs/cli/skills/"
634
- ],
635
- "verification": "Confirm the installed skill is discoverable."
636
- },
637
- "agents": {
638
- "status": "supported",
639
- "evidence": [
640
- "https://geminicli.com/docs/core/subagents"
742
+ "https://learn.chatgpt.com/docs/agent-configuration/subagents"
641
743
  ],
642
- "note": "Flat <name>.md files; frontmatter limited to Gemini's documented keys by the gemini-agents transform.",
643
- "verification": "Confirm Gemini CLI lists the installed agents from .gemini/agents."
644
- },
645
- "scripts": {
744
+ "verifiedOn": "2026-10-27"
745
+ }
746
+ },
747
+ "worker": {
748
+ "profile": null,
749
+ "billing": "unknown",
750
+ "cli": {
646
751
  "status": "supported",
647
752
  "evidence": [
648
- "https://geminicli.com/docs/reference/tools",
649
- "https://geminicli.com/docs/cli/creating-skills"
753
+ "bench/inventory/coverage.json → codex --version → codex-cli 0.162.1"
650
754
  ],
651
- "verification": "Confirm run_shell_command executes an installed helper and that a bundled skill scripts/ directory is reachable."
755
+ "verification": "Run `codex --version` and compare the output with bench/inventory/coverage.json.",
756
+ "verifiedOn": "2026-10-12",
757
+ "binary": "codex",
758
+ "versionArgv": [
759
+ "--version"
760
+ ]
652
761
  },
653
- "templates": {
762
+ "oneShot": {
654
763
  "status": "supported",
655
764
  "evidence": [
656
- "https://geminicli.com/docs/cli/creating-skills",
657
- "https://geminicli.com/docs/cli/skills-best-practices"
658
- ],
659
- "verification": "Confirm the installed template tree is readable by the agent."
660
- },
661
- "modes": {
662
- "status": "different",
663
- "evidence": [
664
- "https://geminicli.com/docs/cli/gemini-md/"
765
+ "core/worker-evidence/codex/2026-10-18-cli-check.json",
766
+ "core/worker-evidence/codex/2026-10-18-live-run-read-only.json",
767
+ "core/worker-evidence/codex/2026-10-18-live-run-edit.json"
665
768
  ],
666
- "verification": "Confirm mode guidance is available through instructions."
667
- },
668
- "settings": {
669
- "status": "different",
670
- "evidence": [
671
- "https://geminicli.com/docs/cli/settings/"
769
+ "verification": "Run `node bin/doflow.js worker --action evidence --harness codex --checks core/worker-evidence/codex/checks.json --out core/worker-evidence/codex/2026-10-18-cli-check.json` against the installed codex and read the matched help lines. Live run 2026-10-18 (codex-cli 0.163.0): runs w-067a85a5cc2d and w-821933d703be each exited 0 with the prompt on stdin under `--ephemeral -`, report status success, result offered.",
770
+ "verifiedOn": "2026-10-18",
771
+ "argv": [
772
+ "--ephemeral",
773
+ "-"
672
774
  ],
673
- "verification": "Verify only adapter-supported native settings."
775
+ "promptVia": "stdin"
674
776
  },
675
- "hooks": {
777
+ "structuredOutput": {
676
778
  "status": "supported",
677
779
  "evidence": [
678
- "https://geminicli.com/docs/hooks/"
780
+ "core/worker-evidence/codex/2026-10-18-cli-check.json",
781
+ "core/worker-evidence/codex/2026-10-18-live-run-read-only.json",
782
+ "core/worker-evidence/codex/2026-10-18-live-run-edit.json"
679
783
  ],
680
- "verification": "Exercise one installed hook event.",
681
- "events": {
682
- "SessionStart": {
683
- "status": "supported"
684
- },
685
- "SessionEnd": {
686
- "status": "supported"
687
- },
688
- "BeforeTool": {
689
- "status": "supported"
690
- },
691
- "AfterTool": {
692
- "status": "supported"
693
- },
694
- "PreCompress": {
695
- "status": "supported"
696
- },
697
- "UserPromptSubmit": {
698
- "status": "unavailable",
699
- "note": "No Gemini equivalent; the nearest native hook is BeforeAgent, which fires once before planning and can block the turn or inject context — not a per-prompt pre-submission gate. DoFlow's once-per-session `/do` suggestion is not hook-delivered here and reaches this harness through skill descriptions only."
700
- },
701
- "Stop": {
702
- "status": "unavailable",
703
- "note": "No exact match; AfterAgent fires at agent-loop end and can halt or retry the turn, which is coarser than Claude's Stop."
704
- },
705
- "SubagentStart": {
706
- "status": "unavailable",
707
- "note": "BeforeAgent/AfterAgent bracket the whole agent loop; they are not subagent lifecycle events."
708
- },
709
- "SubagentStop": {
710
- "status": "unavailable",
711
- "note": "BeforeAgent/AfterAgent bracket the whole agent loop; they are not subagent lifecycle events."
712
- },
713
- "PostToolUseFailure": {
714
- "status": "unavailable",
715
- "note": "AfterTool fires regardless of outcome; failure cannot be isolated."
716
- },
717
- "PermissionDenied": {
718
- "status": "unavailable",
719
- "note": "Gemini exposes no permission-decision event."
720
- }
784
+ "verification": "Run `node bin/doflow.js worker --action evidence --harness codex --checks core/worker-evidence/codex/checks.json --out core/worker-evidence/codex/2026-10-18-cli-check.json` against the installed codex and read the matched help lines. Live run 2026-10-18 (codex-cli 0.163.0): both runs launched with `--json -o <last-message-file>`, their stdout parsed by codex-exec-json-v1, report status success, result offered.",
785
+ "verifiedOn": "2026-10-18",
786
+ "argv": [
787
+ "--json",
788
+ "-o",
789
+ "{lastMessageFile}"
790
+ ],
791
+ "parser": "codex-exec-json-v1",
792
+ "quotaSignals": {
793
+ "signals": [
794
+ "rate limit",
795
+ "usage limit",
796
+ "quota exceeded",
797
+ "too many requests",
798
+ "resource_exhausted"
799
+ ],
800
+ "basis": "unverified",
801
+ "evidence": []
721
802
  }
722
803
  },
723
- "mcp": {
724
- "status": "different",
804
+ "readOnly": {
805
+ "status": "supported",
725
806
  "evidence": [
726
- "https://geminicli.com/docs/tools/mcp-server/"
807
+ "core/worker-evidence/codex/2026-10-18-cli-check.json",
808
+ "core/worker-evidence/codex/2026-10-18-live-run-read-only.json"
727
809
  ],
728
- "verification": "Verify only adapter-supported MCP registration."
810
+ "verification": "Run `node bin/doflow.js worker --action evidence --harness codex --checks core/worker-evidence/codex/checks.json --out core/worker-evidence/codex/2026-10-18-cli-check.json` against the installed codex and read the matched help lines. Live run 2026-10-18 (codex-cli 0.163.0): run w-067a85a5cc2d under `exec -s read-only` ended with report status success, result offered, a clean worktree and unchanged HEAD and refs.",
811
+ "verifiedOn": "2026-10-18",
812
+ "argv": [
813
+ "exec",
814
+ "-s",
815
+ "read-only"
816
+ ]
729
817
  },
730
- "plugin": {
731
- "status": "different",
732
- "evidence": [
733
- "https://geminicli.com/docs/extensions/"
734
- ],
735
- "note": "Extensions (gemini-extension.json) now package skills, hooks, sub-agents, and MCP; security.blockGitExtensions/allowedExtensions can gate Git-sourced installs. Context: Google sunset Gemini CLI for consumer tiers on 2026-06-18 — enterprise/paid-API use only; Antigravity CLI (GA 2026-05-19, antigravity.google/docs/gcli-migration) is the successor surface carrying skills/hooks/subagents/plugins.",
736
- "verification": "Verify extensions through the native host workflow."
737
- }
738
- },
739
- "orchestration": {
740
- "spawn": {
818
+ "spawnDenial": {
741
819
  "status": "supported",
742
820
  "evidence": [
743
- "https://geminicli.com/docs/core/subagents → \"When the main agent calls the tool, it delegates the task to the subagent.\"",
744
- "https://geminicli.com/docs/core/subagents → \"You can explicitly direct a task to a specific subagent by using the @ symbol followed by the subagent's name at the beginning of your prompt.\""
821
+ "core/worker-evidence/codex/2026-10-18-cli-check.json",
822
+ "core/worker-evidence/codex/2026-10-18-live-run-read-only.json",
823
+ "core/worker-evidence/codex/2026-10-18-live-run-edit.json"
745
824
  ],
746
- "verification": "Prompt with @<subagent> and confirm the subagent runs.",
747
- "verifiedOn": "2026-10-12"
825
+ "verification": "Run `node bin/doflow.js worker --action evidence --harness codex --checks core/worker-evidence/codex/checks.json --out core/worker-evidence/codex/2026-10-18-cli-check.json` against the installed codex and read the matched help lines. Live run 2026-10-18 (codex-cli 0.163.0): both runs launched with `--disable multi_agent --disable multi_agent_v2`, report status success, deniedCount 0 (no spawn was attempted, so a denial was not exercised).",
826
+ "verifiedOn": "2026-10-18",
827
+ "argv": [
828
+ "--disable",
829
+ "multi_agent",
830
+ "--disable",
831
+ "multi_agent_v2"
832
+ ]
748
833
  },
749
- "wait": {
834
+ "runnableProbe": {
750
835
  "status": "supported",
751
836
  "evidence": [
752
- "https://geminicli.com/docs/core/subagents → \"Once the subagent completes its task, it reports back to the main agent with its findings.\""
837
+ "core/worker-evidence/codex/2026-10-18-cli-check.json"
753
838
  ],
754
- "verification": "Delegate a task and confirm the main agent continues from the subagent report.",
755
- "verifiedOn": "2026-10-12"
839
+ "verification": "Run `node bin/doflow.js worker --action evidence --harness codex --checks core/worker-evidence/codex/checks.json --out core/worker-evidence/codex/2026-10-18-cli-check.json` against the installed codex and read the matched help lines",
840
+ "verifiedOn": "2026-10-18",
841
+ "argv": [
842
+ "exec",
843
+ "--help"
844
+ ]
756
845
  },
757
- "status": {
846
+ "hooksProbe": {
758
847
  "status": "unknown",
759
848
  "evidence": [],
760
- "verification": "Re-read https://geminicli.com/docs/core/subagents and the Gemini CLI changelog for a status operation.",
761
- "verifiedOn": "2026-10-12",
762
- "fallback": "sequential",
763
- "reason": "https://geminicli.com/docs/core/subagents was read on 2026-10-12 and does not state a status operation; nothing is inferred from another harness or a model name."
849
+ "verification": "Read codex's headless CLI documentation and `codex --help`; record the flag and its source",
850
+ "verifiedOn": "2026-10-15",
851
+ "reason": "no in-repository evidence names this for codex; nothing is inferred from another harness or a model name"
764
852
  },
765
- "cancel": {
853
+ "guidanceProbe": {
766
854
  "status": "unknown",
767
855
  "evidence": [],
768
- "verification": "Re-read https://geminicli.com/docs/core/subagents for a stop operation.",
769
- "verifiedOn": "2026-10-12",
770
- "fallback": "sequential",
771
- "reason": "https://geminicli.com/docs/core/subagents was read on 2026-10-12 and does not state a cancel operation; nothing is inferred from another harness or a model name."
856
+ "verification": "Read codex's headless CLI documentation and `codex --help`; record the flag and its source",
857
+ "verifiedOn": "2026-10-15",
858
+ "reason": "no in-repository evidence names this for codex; nothing is inferred from another harness or a model name"
859
+ },
860
+ "loginProbe": {
861
+ "status": "unknown",
862
+ "evidence": [],
863
+ "verification": "Read codex's headless CLI documentation and `codex --help`; record the flag and its source",
864
+ "verifiedOn": "2026-10-15",
865
+ "reason": "no in-repository evidence names this for codex; nothing is inferred from another harness or a model name"
866
+ },
867
+ "persistentSession": {
868
+ "status": "unknown",
869
+ "evidence": [],
870
+ "verification": "Read codex's headless CLI documentation and `codex --help`; record the flag and its source",
871
+ "verifiedOn": "2026-10-15",
872
+ "reason": "no in-repository evidence names this for codex; nothing is inferred from another harness or a model name"
772
873
  },
773
874
  "resume": {
774
875
  "status": "unknown",
775
876
  "evidence": [],
776
- "verification": "Re-read https://geminicli.com/docs/core/subagents for a resume operation.",
777
- "verifiedOn": "2026-10-12",
778
- "fallback": "manual",
779
- "reason": "https://geminicli.com/docs/core/subagents was read on 2026-10-12 and does not state a resume operation; nothing is inferred from another harness or a model name."
780
- }
877
+ "verification": "Read codex's headless CLI documentation and `codex --help`; record the flag and its source",
878
+ "verifiedOn": "2026-10-15",
879
+ "reason": "no in-repository evidence names this for codex; nothing is inferred from another harness or a model name"
880
+ },
881
+ "steering": {
882
+ "status": "unknown",
883
+ "evidence": [],
884
+ "verification": "Read codex's headless CLI documentation and `codex --help`; record the flag and its source",
885
+ "verifiedOn": "2026-10-15",
886
+ "reason": "no in-repository evidence names this for codex; nothing is inferred from another harness or a model name"
887
+ },
888
+ "isolatedEdit": {
889
+ "status": "supported",
890
+ "evidence": [
891
+ "core/worker-evidence/codex/2026-10-18-cli-check.json",
892
+ "core/worker-evidence/codex/2026-10-18-live-run-edit.json"
893
+ ],
894
+ "verification": "Run `node bin/doflow.js worker --action evidence --harness codex --checks core/worker-evidence/codex/checks.json --out core/worker-evidence/codex/2026-10-18-cli-check.json` against the installed codex and read the matched help lines. Live run 2026-10-18 (codex-cli 0.163.0): run w-821933d703be under `exec -s workspace-write` in an isolated attempt ended with report status success, result offered, isolation status clean and unchanged caller and attempt refs.",
895
+ "verifiedOn": "2026-10-18",
896
+ "argv": [
897
+ "exec",
898
+ "-s",
899
+ "workspace-write"
900
+ ]
901
+ },
902
+ "model": {
903
+ "status": "supported",
904
+ "evidence": [
905
+ "core/worker-evidence/codex/2026-10-24-cli-check.json"
906
+ ],
907
+ "verification": "Run `codex exec --help` and read the `-m, --model <MODEL>` line; record it with `node bin/doflow.js worker --action evidence --harness codex --checks core/worker-evidence/codex/checks.json --out <new cli-check path>` (check exec-model)",
908
+ "verifiedOn": "2026-10-24",
909
+ "argv": [
910
+ "-m",
911
+ "{model}"
912
+ ]
913
+ },
914
+ "modelChecks": []
781
915
  },
782
916
  "contextProfile": {
783
917
  "capacityTokens": {
784
- "unverified": "values belong to 085 (A-19)",
785
- "verifiedOn": "2026-10-13"
918
+ "value": 200000,
919
+ "source": "developers.openai.com/api/docs/guides/prompt-caching",
920
+ "verifiedOn": "2026-10-20"
786
921
  },
787
922
  "reserveTokens": {
788
- "unverified": "values belong to 085 (A-19)",
789
- "verifiedOn": "2026-10-13"
923
+ "value": 20000,
924
+ "source": "model_auto_compact_token_limit config reference",
925
+ "verifiedOn": "2026-10-20"
790
926
  },
791
927
  "tokenTelemetry": {
792
- "unverified": "values belong to 085 (A-19)",
793
- "verifiedOn": "2026-10-13"
928
+ "value": "none",
929
+ "source": "delivery-store.ts:10",
930
+ "verifiedOn": "2026-10-20"
794
931
  },
795
932
  "toolResultLimitBytes": {
796
- "unverified": "values belong to 085 (A-19)",
797
- "verifiedOn": "2026-10-13"
933
+ "value": 1048576,
934
+ "source": "codex-cli 0.163.0 exec stdout buffer limit",
935
+ "verifiedOn": "2026-10-20"
798
936
  },
799
937
  "retention": {
800
- "unverified": "values belong to 085 (A-19)",
801
- "verifiedOn": "2026-10-13"
938
+ "value": "unsupported",
939
+ "source": "session transcript inspection (git context developer-role message ephemeral)",
940
+ "verifiedOn": "2026-10-20"
802
941
  }
803
942
  },
804
943
  "scopePrecedence": {
@@ -808,11 +947,32 @@
808
947
  "project"
809
948
  ],
810
949
  "evidence": [
811
- "https://geminicli.com/docs/cli/gemini-md/"
950
+ "https://learn.chatgpt.com/docs/agent-configuration/agents-md"
812
951
  ],
813
- "note": "The CLI loads context files in the following order: (1) global context file at ~/.gemini/GEMINI.md, (2) environment/workspace context files (project directory and its parents), (3) just-in-time files read on demand from directories a tool touches. The page states this loading order but explicitly does not state a conflict-resolution rule -- contents are concatenated and sent to the model together. Order here reflects DoFlow's two tracked scopes; the documented third, finer-grained JIT tier is omitted. The load order is documented but the page explicitly states no conflict-resolution rule and describes contents being concatenated and sent together, so no copy can be said to win. Order established, winner not.",
952
+ "note": "AGENTS.md discovery is documented as: \"1. Global scope: In your Codex home directory ... Codex reads AGENTS.override.md if it exists. Otherwise, Codex reads AGENTS.md. 2. Project scope: Starting at the project root ...\", then \"Codex concatenates files from the root down ... Files closer to your current directory override earlier guidance because they appear later in the combined prompt.\" Codex concatenates and states that files closer to the working directory override earlier guidance because they appear later, so the LAST scope consulted takes effect: the project copy wins despite being consulted second.",
814
953
  "determinedOn": "2026-09-27",
815
- "mode": "unestablished"
954
+ "mode": "last-wins"
955
+ },
956
+ "primaryProbe": {
957
+ "model": "payload",
958
+ "events": [
959
+ "PreToolUse",
960
+ "SessionStart",
961
+ "Stop"
962
+ ],
963
+ "status": "unverified",
964
+ "evidence": [],
965
+ "verifiedOn": null,
966
+ "reason": "Codex hook payloads carry the session model (codex-rs/hooks schema); no live capture recorded yet."
967
+ },
968
+ "nativeTelemetry": {
969
+ "signals": [
970
+ "events"
971
+ ],
972
+ "contentDefaults": "metadata-only",
973
+ "inboundTraceparent": "unsupported",
974
+ "joinKey": "session_id",
975
+ "verifiedOn": "2026-10-20"
816
976
  }
817
977
  },
818
978
  {
@@ -928,7 +1088,7 @@
928
1088
  "evidence": [
929
1089
  "https://opencode.ai/docs/agents"
930
1090
  ],
931
- "note": "OpenCode supports native agent definitions as Markdown files with frontmatter (description, mode primary|subagent, model, temperature, permission, hidden) discovered at .opencode/agents/ (project) and ~/.config/opencode/agents/ (global); agents are also definable in opencode.json's agent key. DoFlow still projects specialist guidance through instructions; direct projection into these directories is planned and will reuse copy-tree's layout rename.",
1091
+ "note": "OpenCode supports native agent definitions as Markdown files with frontmatter (description, mode primary|subagent|all, model, temperature, permission, hidden) discovered at .opencode/agents/ (project) and ~/.config/opencode/agents/ (global); agents are also definable in opencode.json's agent key. DoFlow projects each shared agent spec into those directories through the opencode-agents renderer: description, mode subagent, and a permission block (edit and bash set to deny, the keys opencode.ai/docs/permissions documents) for read-only agents; model is omitted because OpenCode has no 'inherit' value, so a subagent uses the model of the primary agent that invoked it.",
932
1092
  "verification": "Confirm a native agent under .opencode/agents/ or ~/.config/opencode/agents/ is selectable (Tab cycles primary agents; @ mentions invoke subagents)."
933
1093
  },
934
1094
  "scripts": {
@@ -1079,28 +1239,201 @@
1079
1239
  "verifiedOn": "2026-10-12",
1080
1240
  "fallback": "manual",
1081
1241
  "reason": "https://opencode.ai/docs/agents was read on 2026-10-12 and does not state a resume operation; nothing is inferred from another harness or a model name."
1242
+ },
1243
+ "nest": {
1244
+ "status": "unknown",
1245
+ "evidence": [],
1246
+ "verification": "Re-read https://opencode.ai/docs/agents for whether a subagent can start a subagent.",
1247
+ "verifiedOn": "2026-10-23",
1248
+ "fallback": "sequential",
1249
+ "reason": "vendor docs silent: https://opencode.ai/docs/agents was read on 2026-10-23 and does not state whether a subagent can start a subagent; nothing is inferred from another harness or a model name."
1250
+ }
1251
+ },
1252
+ "agentLimits": {
1253
+ "readOnly": {
1254
+ "status": "native",
1255
+ "apply": {
1256
+ "permission": {
1257
+ "edit": "deny",
1258
+ "bash": "deny"
1259
+ }
1260
+ },
1261
+ "evidence": [
1262
+ "https://opencode.ai/docs/agents",
1263
+ "https://opencode.ai/docs/permissions"
1264
+ ],
1265
+ "checked": "docs",
1266
+ "verifiedOn": "2026-10-23"
1267
+ },
1268
+ "toolScope": {
1269
+ "status": "native",
1270
+ "field": "permission",
1271
+ "form": "closed",
1272
+ "map": {
1273
+ "read": [
1274
+ "read",
1275
+ "glob",
1276
+ "grep",
1277
+ "lsp",
1278
+ "skill",
1279
+ "todowrite"
1280
+ ],
1281
+ "edit": [
1282
+ "edit"
1283
+ ],
1284
+ "shell": [
1285
+ "bash"
1286
+ ],
1287
+ "web": [
1288
+ "webfetch",
1289
+ "websearch"
1290
+ ],
1291
+ "agents": [
1292
+ "task"
1293
+ ]
1294
+ },
1295
+ "mcpSelector": "{server}_*",
1296
+ "evidence": [
1297
+ "https://opencode.ai/docs/permissions",
1298
+ "https://opencode.ai/docs/mcp-servers/"
1299
+ ],
1300
+ "checked": "docs",
1301
+ "verifiedOn": "2026-10-27"
1082
1302
  }
1083
1303
  },
1304
+ "worker": {
1305
+ "profile": null,
1306
+ "billing": "unknown",
1307
+ "cli": {
1308
+ "status": "supported",
1309
+ "evidence": [
1310
+ "bench/inventory/coverage.json → opencode --version → 1.18.30"
1311
+ ],
1312
+ "verification": "Run `opencode --version` and compare the output with bench/inventory/coverage.json.",
1313
+ "verifiedOn": "2026-10-12",
1314
+ "binary": "opencode",
1315
+ "versionArgv": [
1316
+ "--version"
1317
+ ]
1318
+ },
1319
+ "oneShot": {
1320
+ "status": "unknown",
1321
+ "evidence": [],
1322
+ "verification": "Read opencode's headless CLI documentation and `opencode --help`; record the flag and its source",
1323
+ "verifiedOn": "2026-10-15",
1324
+ "reason": "no recorded evidence for opencode: no free check has captured its one-shot headless flag or how it reads a prompt"
1325
+ },
1326
+ "structuredOutput": {
1327
+ "status": "unknown",
1328
+ "evidence": [],
1329
+ "verification": "Read opencode's headless CLI documentation and `opencode --help`; record the flag and its source",
1330
+ "verifiedOn": "2026-10-15",
1331
+ "reason": "no captured opencode transcript: its event schema has no parser, and a parser waits for a transcript from its own probe"
1332
+ },
1333
+ "readOnly": {
1334
+ "status": "unknown",
1335
+ "evidence": [],
1336
+ "verification": "Read opencode's headless CLI documentation and `opencode --help`; record the flag and its source",
1337
+ "verifiedOn": "2026-10-15",
1338
+ "reason": "no in-repository evidence names this for opencode; nothing is inferred from another harness or a model name"
1339
+ },
1340
+ "spawnDenial": {
1341
+ "status": "unknown",
1342
+ "evidence": [],
1343
+ "verification": "Read opencode's headless CLI documentation and `opencode --help`; record the flag and its source",
1344
+ "verifiedOn": "2026-10-15",
1345
+ "reason": "no recorded evidence for opencode: no free check shows a flag that disables subagent spawning"
1346
+ },
1347
+ "runnableProbe": {
1348
+ "status": "unknown",
1349
+ "evidence": [],
1350
+ "verification": "Read opencode's headless CLI documentation and `opencode --help`; record the flag and its source",
1351
+ "verifiedOn": "2026-10-15",
1352
+ "reason": "no in-repository evidence names this for opencode; nothing is inferred from another harness or a model name"
1353
+ },
1354
+ "hooksProbe": {
1355
+ "status": "unknown",
1356
+ "evidence": [],
1357
+ "verification": "Read opencode's headless CLI documentation and `opencode --help`; record the flag and its source",
1358
+ "verifiedOn": "2026-10-15",
1359
+ "reason": "no in-repository evidence names this for opencode; nothing is inferred from another harness or a model name"
1360
+ },
1361
+ "guidanceProbe": {
1362
+ "status": "unknown",
1363
+ "evidence": [],
1364
+ "verification": "Read opencode's headless CLI documentation and `opencode --help`; record the flag and its source",
1365
+ "verifiedOn": "2026-10-15",
1366
+ "reason": "no in-repository evidence names this for opencode; nothing is inferred from another harness or a model name"
1367
+ },
1368
+ "loginProbe": {
1369
+ "status": "unknown",
1370
+ "evidence": [],
1371
+ "verification": "Read opencode's headless CLI documentation and `opencode --help`; record the flag and its source",
1372
+ "verifiedOn": "2026-10-15",
1373
+ "reason": "no in-repository evidence names this for opencode; nothing is inferred from another harness or a model name"
1374
+ },
1375
+ "persistentSession": {
1376
+ "status": "unknown",
1377
+ "evidence": [],
1378
+ "verification": "Read opencode's headless CLI documentation and `opencode --help`; record the flag and its source",
1379
+ "verifiedOn": "2026-10-15",
1380
+ "reason": "no in-repository evidence names this for opencode; nothing is inferred from another harness or a model name"
1381
+ },
1382
+ "resume": {
1383
+ "status": "unknown",
1384
+ "evidence": [],
1385
+ "verification": "Read opencode's headless CLI documentation and `opencode --help`; record the flag and its source",
1386
+ "verifiedOn": "2026-10-15",
1387
+ "reason": "no in-repository evidence names this for opencode; nothing is inferred from another harness or a model name"
1388
+ },
1389
+ "steering": {
1390
+ "status": "unknown",
1391
+ "evidence": [],
1392
+ "verification": "Read opencode's headless CLI documentation and `opencode --help`; record the flag and its source",
1393
+ "verifiedOn": "2026-10-15",
1394
+ "reason": "no in-repository evidence names this for opencode; nothing is inferred from another harness or a model name"
1395
+ },
1396
+ "isolatedEdit": {
1397
+ "status": "unknown",
1398
+ "evidence": [],
1399
+ "verification": "Read opencode's headless CLI documentation and `opencode --help`; record the flag that confines edits to the working directory and its source",
1400
+ "verifiedOn": "2026-10-16",
1401
+ "reason": "no recorded evidence for opencode: no free check shows a flag that confines edits to the working directory"
1402
+ },
1403
+ "model": {
1404
+ "status": "unknown",
1405
+ "evidence": [],
1406
+ "verification": "Read opencode's headless CLI documentation and `opencode --help`; record the flag that selects the model and its source",
1407
+ "verifiedOn": "2026-10-24",
1408
+ "reason": "no recorded evidence for opencode: no free check shows a flag that selects the model"
1409
+ },
1410
+ "modelChecks": []
1411
+ },
1084
1412
  "contextProfile": {
1085
1413
  "capacityTokens": {
1086
- "unverified": "values belong to 085 (A-19)",
1087
- "verifiedOn": "2026-10-13"
1414
+ "value": 128000,
1415
+ "source": "opencode documentation default context window",
1416
+ "verifiedOn": "2026-10-20"
1088
1417
  },
1089
1418
  "reserveTokens": {
1090
- "unverified": "values belong to 085 (A-19)",
1091
- "verifiedOn": "2026-10-13"
1419
+ "value": 10000,
1420
+ "source": "opencode documentation default context reserve",
1421
+ "verifiedOn": "2026-10-20"
1092
1422
  },
1093
1423
  "tokenTelemetry": {
1094
- "unverified": "values belong to 085 (A-19)",
1095
- "verifiedOn": "2026-10-13"
1424
+ "value": "none",
1425
+ "source": "delivery-store.ts:10",
1426
+ "verifiedOn": "2026-10-20"
1096
1427
  },
1097
1428
  "toolResultLimitBytes": {
1098
- "unverified": "values belong to 085 (A-19)",
1099
- "verifiedOn": "2026-10-13"
1429
+ "value": 262144,
1430
+ "source": "opencode cli stdout limits",
1431
+ "verifiedOn": "2026-10-20"
1100
1432
  },
1101
1433
  "retention": {
1102
- "unverified": "values belong to 085 (A-19)",
1103
- "verifiedOn": "2026-10-13"
1434
+ "value": "unsupported",
1435
+ "source": "core/registry/harnesses.json:1311-1317 (no hook projection)",
1436
+ "verifiedOn": "2026-10-20"
1104
1437
  }
1105
1438
  },
1106
1439
  "scopePrecedence": {
@@ -1115,6 +1448,21 @@
1115
1448
  "note": "\"When opencode starts, it looks for rule files in this order: 1. Local files by traversing up from the current directory (AGENTS.md, CLAUDE.md) 2. Global file at ~/.config/opencode/AGENTS.md\", and \"The first matching file wins in each category.\" A community issue (anomalyco/opencode#9282, filed 2026-01-18) argues project and global files are actually combined rather than one overriding the other; this block records only the documented consultation order above, not that unresolved merge-vs-override dispute. The rules doc states the first matching file wins, so the order lists the winner first: the project copy is used.",
1116
1449
  "determinedOn": "2026-09-27",
1117
1450
  "mode": "first-wins"
1451
+ },
1452
+ "primaryProbe": {
1453
+ "model": "none",
1454
+ "events": [],
1455
+ "status": "unverified",
1456
+ "evidence": [],
1457
+ "verifiedOn": null,
1458
+ "reason": "The hook payload carries no model; the declaration is the only source (declared-only)."
1459
+ },
1460
+ "nativeTelemetry": {
1461
+ "signals": [],
1462
+ "contentDefaults": "metadata-only",
1463
+ "inboundTraceparent": "unsupported",
1464
+ "joinKey": "run_id",
1465
+ "verifiedOn": "2026-10-20"
1118
1466
  }
1119
1467
  },
1120
1468
  {
@@ -1127,7 +1475,6 @@
1127
1475
  ],
1128
1476
  "nativeTargets": {
1129
1477
  "instructions": "AGENTS.md",
1130
- "settings": ".pi/settings.json",
1131
1478
  "mcp": ".pi/mcp.json"
1132
1479
  },
1133
1480
  "paths": {
@@ -1146,23 +1493,6 @@
1146
1493
  ]
1147
1494
  }
1148
1495
  },
1149
- "settings": {
1150
- "project": {
1151
- "base": "root",
1152
- "segments": [
1153
- ".pi",
1154
- "settings.json"
1155
- ]
1156
- },
1157
- "user": {
1158
- "base": "root",
1159
- "segments": [
1160
- ".pi",
1161
- "agent",
1162
- "settings.json"
1163
- ]
1164
- }
1165
- },
1166
1496
  "instruction": {
1167
1497
  "project": {
1168
1498
  "base": "root",
@@ -1243,16 +1573,18 @@
1243
1573
  "verification": "Confirm mode guidance is available through instructions."
1244
1574
  },
1245
1575
  "settings": {
1246
- "status": "supported",
1576
+ "status": "unavailable",
1247
1577
  "evidence": [
1248
1578
  "https://pi.dev/docs/latest/settings"
1249
1579
  ],
1250
- "verification": "Confirm ~/.pi/agent/settings.json (or .pi/settings.json) retains user keys and only DoFlow-owned entries change."
1580
+ "verification": "Report the capability gap; DoFlow does not write Pi's settings file.",
1581
+ "note": "Pi documents .pi/settings.json (and ~/.pi/agent/settings.json), but DoFlow writes no key in either: the adapter leaves them untouched and materialises the skills tree instead of registering it."
1251
1582
  },
1252
1583
  "hooks": {
1253
1584
  "status": "different",
1254
1585
  "evidence": [
1255
- "https://pi.dev/docs/latest/extensions"
1586
+ "https://pi.dev/docs/latest/extensions",
1587
+ "https://raw.githubusercontent.com/earendil-works/pi/main/packages/coding-agent/CHANGELOG.md"
1256
1588
  ],
1257
1589
  "note": "DoFlow installs a ledger-owned extension at user scope or project scope that registers tool_call through pi.on() and invokes the shared lifecycle bridge. Project scope requires project trust.",
1258
1590
  "verification": "Verify the installed extension fingerprint, resolved shared bridge path, bash/jq prerequisites, and the project-trust prerequisite for project scope.",
@@ -1275,7 +1607,7 @@
1275
1607
  },
1276
1608
  "PostCompact": {
1277
1609
  "status": "different",
1278
- "note": "DoFlow does not project a hook for this event; its separate code extension guards tool_call. Native equivalent: compaction_end."
1610
+ "note": "DoFlow does not project a hook for this event; its separate code extension guards tool_call. Native equivalent: session_compact (extension event; compaction_end is an RPC event)."
1279
1611
  },
1280
1612
  "PreToolUse": {
1281
1613
  "status": "different",
@@ -1316,9 +1648,9 @@
1316
1648
  "evidence": [
1317
1649
  "https://pi.dev/docs/latest/mcp",
1318
1650
  "https://github.com/earendil-works/pi/blob/main/packages/coding-agent/docs/mcp.md",
1319
- "https://github.com/earendil-works/pi/blob/main/packages/coding-agent/CHANGELOG.md"
1651
+ "https://raw.githubusercontent.com/earendil-works/pi/main/packages/coding-agent/CHANGELOG.md"
1320
1652
  ],
1321
- "note": "Pi's built-in MCP (Pi 0.99.0 or later) reads stdio and HTTP servers from the mcpServers map of .pi/mcp.json (project, read only after the project is trusted) and ~/.pi/agent/mcp.json (user, or $PI_CODING_AGENT_DIR/mcp.json); a project entry replaces a user entry with the same name, and from Pi 1.0.1 a project entry without command or url overrides only enabled, exposure and toolExposure of that user entry. DoFlow writes stdio entries only. An installed extension that registers /mcp, such as pi-mcp-adapter, replaces the built-in and Pi then does not read mcp.json.",
1653
+ "note": "Pi's built-in MCP (Pi 0.99.0 or later) reads stdio and HTTP servers from the mcpServers map of .pi/mcp.json (project, read only after the project is trusted) and ~/.pi/agent/mcp.json (user, or $PI_CODING_AGENT_DIR/mcp.json); a project entry replaces a user entry with the same name, and from Pi 1.0.1 a project entry without command, url or type overrides only enabled, exposure and toolExposure of that user entry. DoFlow writes stdio entries only. An installed extension that registers /mcp, such as pi-mcp-adapter, replaces the built-in and Pi then does not read mcp.json.",
1322
1654
  "verification": "Confirm the selected MCP servers appear in .pi/mcp.json (project, after trusting the project) or ~/.pi/agent/mcp.json (global) and connect via /mcp in Pi 0.99.0 or later with no extension registering /mcp."
1323
1655
  },
1324
1656
  "plugin": {
@@ -1364,35 +1696,173 @@
1364
1696
  "fallback": "sequential",
1365
1697
  "reason": "https://github.com/earendil-works/pi/blob/main/packages/coding-agent/README.md states no cancel operation; https://pi.dev/docs/latest/extensions states no subagent operation. Nothing is inferred."
1366
1698
  },
1367
- "resume": {
1699
+ "resume": {
1700
+ "status": "unknown",
1701
+ "evidence": [],
1702
+ "verification": "Re-read https://github.com/earendil-works/pi/blob/main/packages/coding-agent/README.md for a resume operation.",
1703
+ "verifiedOn": "2026-10-12",
1704
+ "fallback": "manual",
1705
+ "reason": "https://github.com/earendil-works/pi/blob/main/packages/coding-agent/README.md states no resume operation; https://pi.dev/docs/latest/extensions states no subagent operation. Nothing is inferred."
1706
+ },
1707
+ "nest": {
1708
+ "status": "unsupported",
1709
+ "evidence": [
1710
+ "https://github.com/earendil-works/pi/blob/main/packages/coding-agent/README.md → \"Pi ships with powerful defaults but skips features like sub-agents and plan mode.\""
1711
+ ],
1712
+ "verification": "Re-read https://github.com/earendil-works/pi/blob/main/packages/coding-agent/README.md for a core subagent feature.",
1713
+ "verifiedOn": "2026-10-23",
1714
+ "fallback": "sequential"
1715
+ }
1716
+ },
1717
+ "agentLimits": {
1718
+ "readOnly": {
1719
+ "status": "unenforced",
1720
+ "reason": "no agent surface",
1721
+ "evidence": [
1722
+ "https://pi.dev/docs/latest/extensions"
1723
+ ],
1724
+ "verifiedOn": "2026-10-23"
1725
+ },
1726
+ "toolScope": {
1727
+ "status": "unenforced",
1728
+ "reason": "no agent surface",
1729
+ "evidence": [],
1730
+ "verifiedOn": "2026-10-27"
1731
+ }
1732
+ },
1733
+ "worker": {
1734
+ "profile": null,
1735
+ "billing": "unknown",
1736
+ "cli": {
1737
+ "status": "supported",
1738
+ "evidence": [
1739
+ "bench/inventory/coverage.json → pi --version → 1.1.0"
1740
+ ],
1741
+ "verification": "Run `pi --version` and compare the output with bench/inventory/coverage.json.",
1742
+ "verifiedOn": "2026-10-12",
1743
+ "binary": "pi",
1744
+ "versionArgv": [
1745
+ "--version"
1746
+ ]
1747
+ },
1748
+ "oneShot": {
1749
+ "status": "unknown",
1750
+ "evidence": [],
1751
+ "verification": "Read pi's headless CLI documentation and `pi --help`; record the flag and its source",
1752
+ "verifiedOn": "2026-10-15",
1753
+ "reason": "no recorded evidence for pi: no free check has captured its one-shot headless flag or how it reads a prompt"
1754
+ },
1755
+ "structuredOutput": {
1756
+ "status": "unknown",
1757
+ "evidence": [],
1758
+ "verification": "Read pi's headless CLI documentation and `pi --help`; record the flag and its source",
1759
+ "verifiedOn": "2026-10-15",
1760
+ "reason": "no captured pi transcript: its event schema has no parser, and a parser waits for a transcript from its own probe"
1761
+ },
1762
+ "readOnly": {
1763
+ "status": "unknown",
1764
+ "evidence": [],
1765
+ "verification": "Read pi's headless CLI documentation and `pi --help`; record the flag and its source",
1766
+ "verifiedOn": "2026-10-15",
1767
+ "reason": "no in-repository evidence names this for pi; nothing is inferred from another harness or a model name"
1768
+ },
1769
+ "spawnDenial": {
1770
+ "status": "unknown",
1771
+ "evidence": [],
1772
+ "verification": "Read pi's headless CLI documentation and `pi --help`; record the flag and its source",
1773
+ "verifiedOn": "2026-10-15",
1774
+ "reason": "no recorded evidence for pi: no free check shows a flag that disables subagent spawning"
1775
+ },
1776
+ "runnableProbe": {
1777
+ "status": "unknown",
1778
+ "evidence": [],
1779
+ "verification": "Read pi's headless CLI documentation and `pi --help`; record the flag and its source",
1780
+ "verifiedOn": "2026-10-15",
1781
+ "reason": "no in-repository evidence names this for pi; nothing is inferred from another harness or a model name"
1782
+ },
1783
+ "hooksProbe": {
1784
+ "status": "unknown",
1785
+ "evidence": [],
1786
+ "verification": "Read pi's headless CLI documentation and `pi --help`; record the flag and its source",
1787
+ "verifiedOn": "2026-10-15",
1788
+ "reason": "no in-repository evidence names this for pi; nothing is inferred from another harness or a model name"
1789
+ },
1790
+ "guidanceProbe": {
1791
+ "status": "unknown",
1792
+ "evidence": [],
1793
+ "verification": "Read pi's headless CLI documentation and `pi --help`; record the flag and its source",
1794
+ "verifiedOn": "2026-10-15",
1795
+ "reason": "no in-repository evidence names this for pi; nothing is inferred from another harness or a model name"
1796
+ },
1797
+ "loginProbe": {
1798
+ "status": "unknown",
1799
+ "evidence": [],
1800
+ "verification": "Read pi's headless CLI documentation and `pi --help`; record the flag and its source",
1801
+ "verifiedOn": "2026-10-15",
1802
+ "reason": "no in-repository evidence names this for pi; nothing is inferred from another harness or a model name"
1803
+ },
1804
+ "persistentSession": {
1805
+ "status": "unknown",
1806
+ "evidence": [],
1807
+ "verification": "Read pi's headless CLI documentation and `pi --help`; record the flag and its source",
1808
+ "verifiedOn": "2026-10-15",
1809
+ "reason": "no in-repository evidence names this for pi; nothing is inferred from another harness or a model name"
1810
+ },
1811
+ "resume": {
1812
+ "status": "unknown",
1813
+ "evidence": [],
1814
+ "verification": "Read pi's headless CLI documentation and `pi --help`; record the flag and its source",
1815
+ "verifiedOn": "2026-10-15",
1816
+ "reason": "no in-repository evidence names this for pi; nothing is inferred from another harness or a model name"
1817
+ },
1818
+ "steering": {
1819
+ "status": "unknown",
1820
+ "evidence": [],
1821
+ "verification": "Read pi's headless CLI documentation and `pi --help`; record the flag and its source",
1822
+ "verifiedOn": "2026-10-15",
1823
+ "reason": "no in-repository evidence names this for pi; nothing is inferred from another harness or a model name"
1824
+ },
1825
+ "isolatedEdit": {
1826
+ "status": "unknown",
1827
+ "evidence": [],
1828
+ "verification": "Read pi's headless CLI documentation and `pi --help`; record the flag that confines edits to the working directory and its source",
1829
+ "verifiedOn": "2026-10-16",
1830
+ "reason": "no recorded evidence for pi: no free check shows a flag that confines edits to the working directory"
1831
+ },
1832
+ "model": {
1368
1833
  "status": "unknown",
1369
1834
  "evidence": [],
1370
- "verification": "Re-read https://github.com/earendil-works/pi/blob/main/packages/coding-agent/README.md for a resume operation.",
1371
- "verifiedOn": "2026-10-12",
1372
- "fallback": "manual",
1373
- "reason": "https://github.com/earendil-works/pi/blob/main/packages/coding-agent/README.md states no resume operation; https://pi.dev/docs/latest/extensions states no subagent operation. Nothing is inferred."
1374
- }
1835
+ "verification": "Read pi's headless CLI documentation and `pi --help`; record the flag that selects the model and its source",
1836
+ "verifiedOn": "2026-10-24",
1837
+ "reason": "no recorded evidence for pi: no free check shows a flag that selects the model"
1838
+ },
1839
+ "modelChecks": []
1375
1840
  },
1376
1841
  "contextProfile": {
1377
1842
  "capacityTokens": {
1378
- "unverified": "values belong to 085 (A-19)",
1379
- "verifiedOn": "2026-10-13"
1843
+ "value": 128000,
1844
+ "source": "pi-mono coding-agent documentation",
1845
+ "verifiedOn": "2026-10-20"
1380
1846
  },
1381
1847
  "reserveTokens": {
1382
- "unverified": "values belong to 085 (A-19)",
1383
- "verifiedOn": "2026-10-13"
1848
+ "value": 10000,
1849
+ "source": "pi-mono coding-agent documentation",
1850
+ "verifiedOn": "2026-10-20"
1384
1851
  },
1385
1852
  "tokenTelemetry": {
1386
- "unverified": "values belong to 085 (A-19)",
1387
- "verifiedOn": "2026-10-13"
1853
+ "value": "none",
1854
+ "source": "delivery-store.ts:10",
1855
+ "verifiedOn": "2026-10-20"
1388
1856
  },
1389
1857
  "toolResultLimitBytes": {
1390
- "unverified": "values belong to 085 (A-19)",
1391
- "verifiedOn": "2026-10-13"
1858
+ "value": 262144,
1859
+ "source": "pi extension runner stdout limits",
1860
+ "verifiedOn": "2026-10-20"
1392
1861
  },
1393
1862
  "retention": {
1394
- "unverified": "values belong to 085 (A-19)",
1395
- "verifiedOn": "2026-10-13"
1863
+ "value": "unsupported",
1864
+ "source": "pi/extensions/doflow-guard.js:128-158 (no sendMessage/context event used)",
1865
+ "verifiedOn": "2026-10-20"
1396
1866
  }
1397
1867
  },
1398
1868
  "scopePrecedence": {
@@ -1403,6 +1873,23 @@
1403
1873
  "note": "The question was asked and the documentation is silent: the skills doc names both `.agents/skills/` (project, discovered walking up from the working directory) and `~/.agents/skills/` (user, under ~/.pi/agent) and states only that \"name collisions keep the first discovered skill and produce a warning\" -- it never states which location is discovered first, and no other primary Pi doc found in this pass states one either. Resolution mode is likewise unestablished: with no order documented there is nothing for a mode to qualify.",
1404
1874
  "determinedOn": "2026-09-27",
1405
1875
  "mode": "unestablished"
1876
+ },
1877
+ "primaryProbe": {
1878
+ "model": "payload",
1879
+ "events": [
1880
+ "tool_call"
1881
+ ],
1882
+ "status": "unverified",
1883
+ "evidence": [],
1884
+ "verifiedOn": null,
1885
+ "reason": "The DoFlow pi extension forwards ctx.model.id (task B.3); no live capture recorded yet."
1886
+ },
1887
+ "nativeTelemetry": {
1888
+ "signals": [],
1889
+ "contentDefaults": "metadata-only",
1890
+ "inboundTraceparent": "unsupported",
1891
+ "joinKey": "session_id",
1892
+ "verifiedOn": "2026-10-20"
1406
1893
  }
1407
1894
  },
1408
1895
  {
@@ -1416,7 +1903,8 @@
1416
1903
  "nativeTargets": {
1417
1904
  "instructions": ".github/copilot-instructions.md",
1418
1905
  "agents": ".github/agents",
1419
- "mcp": ".mcp.json"
1906
+ "mcp": ".mcp.json",
1907
+ "hooks": ".github/hooks"
1420
1908
  },
1421
1909
  "paths": {
1422
1910
  "skillsConfigDir": {
@@ -1499,6 +1987,20 @@
1499
1987
  "mcp-config.json"
1500
1988
  ]
1501
1989
  }
1990
+ },
1991
+ "hooksConfigDir": {
1992
+ "project": {
1993
+ "base": "root",
1994
+ "segments": [
1995
+ ".github"
1996
+ ]
1997
+ },
1998
+ "user": {
1999
+ "base": "root",
2000
+ "segments": [
2001
+ ".copilot"
2002
+ ]
2003
+ }
1502
2004
  }
1503
2005
  },
1504
2006
  "capabilities": {
@@ -1506,6 +2008,7 @@
1506
2008
  "status": "supported",
1507
2009
  "evidence": [
1508
2010
  "https://docs.github.com/en/copilot/how-tos/copilot-cli/customize-copilot",
2011
+ "https://docs.github.com/en/copilot/how-tos/copilot-cli/customize-copilot/add-mcp-servers",
1509
2012
  "https://docs.github.com/en/copilot/how-tos/copilot-cli/customize-copilot/add-custom-instructions"
1510
2013
  ],
1511
2014
  "verification": "Confirm .github/copilot-instructions.md is loaded by Copilot CLI. A user-level ~/.copilot/copilot-instructions.md (or $COPILOT_HOME/copilot-instructions.md) also exists upstream; DoFlow writes nothing there."
@@ -1523,7 +2026,7 @@
1523
2026
  "https://docs.github.com/en/copilot/how-tos/copilot-cli/customize-copilot/create-custom-agents-for-cli",
1524
2027
  "https://docs.github.com/en/copilot/reference/custom-agents-configuration"
1525
2028
  ],
1526
- "note": "The on-disk agent file format is `.agent.md` with YAML frontmatter, confirmed against the custom-agents-configuration reference: a required `description`, optional `name`, `tools`, `model`, `disable-model-invocation`, `user-invocable`, `mcp-servers`, and `metadata` fields, with the Markdown body below the frontmatter as the agent's instructions. The adapter renames each core/shared/agent-specs/<name>.md file to <name>.agent.md via copy-tree's layout mechanism on the way out; unrecognized frontmatter keys pass through untouched, the same posture Claude/Codex/Gemini's agent projections already take.",
2029
+ "note": "The on-disk agent file format is `.agent.md` with YAML frontmatter, confirmed against the custom-agents-configuration reference: a required `description`, optional `name`, `tools`, `model`, `target` (`vscode` or `github-copilot`), `disable-model-invocation`, `user-invocable`, `mcp-servers`, `metadata` and `include-custom-instructions` (follow repository custom instructions when run as a subagent) fields; `infer` is retired in favour of `disable-model-invocation` and `user-invocable`, with the Markdown body below the frontmatter as the agent's instructions. The adapter renames each core/shared/agent-specs/<name>.md file to <name>.agent.md via copy-tree's layout mechanism on the way out; unrecognized frontmatter keys pass through untouched, the same posture Claude/Codex's agent projections already take.",
1527
2030
  "verification": "Confirm an installed custom agent under ~/.copilot/agents or .github/agents is discoverable and selectable by Copilot CLI."
1528
2031
  },
1529
2032
  "scripts": {
@@ -1549,61 +2052,61 @@
1549
2052
  "verification": "Confirm mode guidance is available through instructions."
1550
2053
  },
1551
2054
  "settings": {
1552
- "status": "supported",
2055
+ "status": "unavailable",
1553
2056
  "evidence": [
1554
2057
  "https://docs.github.com/en/copilot/reference/copilot-cli-reference/cli-config-dir-reference"
1555
2058
  ],
1556
- "note": "Copilot CLI documents a full settings stack (2026): ~/.copilot/settings.json (user), .github/copilot/settings.json (repo, committed) and .github/copilot/settings.local.json (personal), merged in that order. Documented keys include hooks, disableAllHooks, disabledMcpServers, enabledMcpServers, disabledSkills, skillDirectories, subagents.agents and enabledPlugins. DoFlow merges named keys it owns and never replaces the file, the same posture as its opencode.json merge.",
1557
- "verification": "Confirm .github/copilot/settings.json retains user keys and only DoFlow-owned keys change; run /settings inside Copilot CLI to confirm the file loaded."
2059
+ "note": "Copilot CLI documents a settings stack (~/.copilot/settings.json, .github/copilot/settings.json, .github/copilot/settings.local.json), but DoFlow writes none of those files.",
2060
+ "verification": "Report the capability gap; DoFlow does not write Copilot CLI's settings files."
1558
2061
  },
1559
2062
  "hooks": {
1560
- "status": "different",
2063
+ "status": "supported",
1561
2064
  "evidence": [
1562
2065
  "https://docs.github.com/en/copilot/how-tos/copilot-cli/customize-copilot/use-hooks",
1563
2066
  "https://docs.github.com/en/copilot/reference/hooks-reference"
1564
2067
  ],
1565
- "note": "Copilot CLI documented a full hook surface (2026): .github/hooks/*.json (repo) and ~/.copilot/hooks/ (user), shape {\"version\":1,\"hooks\":{\"<camelCase event>\":[entries]}}, command entries fail-closed on non-zero exit, preToolUse decides via stdout JSON {permissionDecision}. DoFlow wires NONE of it yet, deliberately: its shipped scripts are Claude-payload-coupled (tool names Edit|Write|MultiEdit, .session_id/.transcript_path stdin fields, CLAUDE_CONFIG_DIR/CLAUDE_PROJECT_DIR envs). Projecting them onto Copilot's unverified payload schemas would install hooks that silently misfire — recorded here instead of imitated.",
1566
- "verification": "Report that no Copilot hook is installed; revisit once payload schemas are verified in a live session.",
2068
+ "note": "Surface chosen 2026-10-27 from a live capture (Copilot CLI 1.0.103, `copilot -p`, agent-docs/maintain/issue-21): camelCase events in .github/hooks/*.json (repo) and $COPILOT_HOME or ~/.copilot/hooks/ (user), shape {version:1,hooks:{<event>:[{type:command,bash,cwd,timeoutSec}]}}. camelCase fired sessionStart, sessionEnd, userPromptSubmitted, userPromptTransformed, preToolUse, postToolUse, permissionRequest, agentStop, subagentStart and subagentStop; the PascalCase aliases fired only PreToolUse, PostToolUse, SessionStart, SessionEnd, SubagentStart and SubagentStop (no UserPromptSubmit, Stop or permission event), so camelCase is the only surface that reaches agentStop. DoFlow writes .github/hooks/doflow.json plus doflow-*.sh front doors (project: <root>/.github/hooks; user: $COPILOT_HOME/hooks when COPILOT_HOME is set, else ~/.copilot/hooks) that normalise the camelCase payload to the canonical Claude-style payload (toolName bash/edit/create/apply_patch -> Bash/Edit/Write/apply_patch, toolArgs -> tool_input, sessionId/transcriptPath/agentId -> snake_case) and run the shared lifecycle bridge in ../.doflow/shared/hooks. Wired: sessionStart (session-context), preToolUse (pre-implementation-gate, pre-bash-guard, mcp-tool-guard), agentStop (stop-check; a subagent's own agentStop, which carries agentId, is skipped), subagentStart and subagentStop (subagent-audit). A guarded preToolUse policy that errors or cannot decide (jq or the policy script missing, an edit tool whose target path is not decodable) is denied under every fault profile, Copilot only. A preToolUse deny is the flat JSON {permissionDecision:\"deny\",permissionDecisionReason} on stdout with exit 0; the capture shows Copilot blocked `echo hi` with that output. Where the docs and the capture disagree the capture wins: the docs type camelCase toolArgs `unknown` (and describe tool_input as parsed from a JSON string); the capture shows toolArgs as a JSON object for bash, skill and task and as a raw string (the freeform patch) for apply_patch, and the normaliser accepts an object, a JSON string and a raw string. Copilot also sets CLAUDE_PROJECT_DIR and reads .claude/settings.json, so a project holding both a Claude and a Copilot DoFlow install runs the Claude-wired hooks on Copilot too. The guards are idempotent, but subagent-audit appends unconditionally, so one subagent completion writes two stop records (the capture holds both P:SubagentStop and subagentStop); the dedupe is not done here. Not live-verified: the agentStop block shape {decision:\"block\",reason} (documented, not exercised), MCP tool names on preToolUse, and the arguments of Copilot's `edit` and `create` tools (only apply_patch was captured; path, file_path, filePath, filename and target_file are decoded as the target, anything else is denied). The bash entry only runs under a POSIX shell; no powershell entry is written.",
2069
+ "verification": "Run `copilot -p` in a project with `doflow install -t copilot`, confirm .github/hooks/doflow.json is loaded (hooks fire on a shell command), and that a force-push shell command is denied by pre-bash-guard. Docs read and capture taken 2026-10-27.",
1567
2070
  "events": {
1568
2071
  "SessionStart": {
1569
- "status": "different",
1570
- "note": "Native sessionStart exists; DoFlow's script reads Claude's .session_id/.cwd stdin fields."
2072
+ "status": "supported",
2073
+ "note": "Native sessionStart -> session-context. Copilot accepts an additionalContext output; DoFlow's policy writes state only and prints nothing."
1571
2074
  },
1572
2075
  "SessionEnd": {
1573
2076
  "status": "different",
1574
- "note": "Native sessionEnd exists; same payload-schema caveat."
2077
+ "note": "Native sessionEnd exists (captured); no DoFlow policy is wired to it."
1575
2078
  },
1576
2079
  "PreToolUse": {
1577
- "status": "different",
1578
- "note": "Blocking contract matches ({permissionDecision} on stdout) but tool names differ from Claude's Edit|Write|MultiEdit and the gate reads CLAUDE_* envs."
2080
+ "status": "supported",
2081
+ "note": "Native preToolUse -> pre-implementation-gate, pre-bash-guard and mcp-tool-guard. Command hooks are fail-closed on a non-zero exit; a deny is the flat {permissionDecision,permissionDecisionReason} JSON (live-verified). Timeouts fail open."
1579
2082
  },
1580
2083
  "PostToolUse": {
1581
2084
  "status": "different",
1582
- "note": "Native postToolUse can rewrite results/inject context; not projected."
2085
+ "note": "Native postToolUse exists (captured); not projected."
1583
2086
  },
1584
2087
  "PostToolUseFailure": {
1585
2088
  "status": "different",
1586
- "note": "Native postToolUseFailure exists — a failure-only event Claude lacks a direct name for."
2089
+ "note": "Native postToolUseFailure exists; not projected."
1587
2090
  },
1588
2091
  "Stop": {
1589
- "status": "different",
1590
- "note": "Native agentStop forces continuation via stdout {decision:'block'} (8-block runaway cap), unlike Claude's exit-2 semantics; stop-check relies on .transcript_path."
2092
+ "status": "supported",
2093
+ "note": "Native agentStop -> stop-check, rendered as stdout {decision:\"block\",reason} (documented; capped by Copilot at 8 consecutive blocks; the payload carries stop_hook_active, which stop-check honours). Not live-exercised."
1591
2094
  },
1592
2095
  "UserPromptSubmit": {
1593
2096
  "status": "different",
1594
- "note": "Natives are userPromptSubmitted and userPromptTransformed; pre-submission gating semantics unverified. DoFlow's once-per-session `/do` suggestion is not hook-delivered here and reaches this harness through skill descriptions only."
2097
+ "note": "Native userPromptSubmitted (captured) cannot return context from a command hook (the docs say command output is dropped), so DoFlow wires no hook; its once-per-session `/do` suggestion reaches this harness through skill descriptions only."
1595
2098
  },
1596
2099
  "PreCompact": {
1597
2100
  "status": "different",
1598
- "note": "Native preCompact exists."
2101
+ "note": "Native preCompact exists; not projected."
1599
2102
  },
1600
2103
  "SubagentStart": {
1601
- "status": "different",
1602
- "note": "Native subagentStart/subagentStop exist."
2104
+ "status": "supported",
2105
+ "note": "Native subagentStart -> subagent-audit (captured; payload carries agentId, agentType, parentAgentId)."
1603
2106
  },
1604
2107
  "SubagentStop": {
1605
- "status": "different",
1606
- "note": "Native subagentStart/subagentStop exist."
2108
+ "status": "supported",
2109
+ "note": "Native subagentStop -> subagent-audit (captured; the payload carries the subagent's response)."
1607
2110
  },
1608
2111
  "PermissionDenied": {
1609
2112
  "status": "unavailable",
@@ -1668,28 +2171,198 @@
1668
2171
  "verifiedOn": "2026-10-12",
1669
2172
  "fallback": "manual",
1670
2173
  "reason": "https://docs.github.com/en/copilot/reference/copilot-cli-reference/cli-command-reference offers steering of a running subagent from its session view but states no resume of a finished subagent; nothing is inferred."
2174
+ },
2175
+ "nest": {
2176
+ "status": "supported",
2177
+ "evidence": [
2178
+ "https://docs.github.com/en/copilot/reference/copilot-cli-reference/cli-command-reference → \"Subagents that spawn their own nested subagents appear as an indented tree\" in /tasks."
2179
+ ],
2180
+ "verification": "Start a subagent that starts a subagent and confirm /tasks shows the nested tree; the depth limit is not stated.",
2181
+ "verifiedOn": "2026-10-23"
2182
+ }
2183
+ },
2184
+ "agentLimits": {
2185
+ "readOnly": {
2186
+ "status": "native",
2187
+ "apply": {
2188
+ "tools": [
2189
+ "read",
2190
+ "search",
2191
+ "execute",
2192
+ "web",
2193
+ "todo"
2194
+ ]
2195
+ },
2196
+ "evidence": [
2197
+ "https://docs.github.com/en/copilot/reference/custom-agents-configuration"
2198
+ ],
2199
+ "checked": "docs",
2200
+ "verifiedOn": "2026-10-23"
2201
+ },
2202
+ "toolScope": {
2203
+ "status": "native",
2204
+ "field": "tools",
2205
+ "form": "list",
2206
+ "map": {
2207
+ "read": [
2208
+ "read",
2209
+ "search",
2210
+ "todo"
2211
+ ],
2212
+ "edit": [
2213
+ "edit"
2214
+ ],
2215
+ "shell": [
2216
+ "execute"
2217
+ ],
2218
+ "web": [
2219
+ "web"
2220
+ ],
2221
+ "agents": [
2222
+ "agent"
2223
+ ]
2224
+ },
2225
+ "mcpSelector": "{server}/*",
2226
+ "evidence": [
2227
+ "https://docs.github.com/en/copilot/reference/custom-agents-configuration"
2228
+ ],
2229
+ "checked": "docs",
2230
+ "verifiedOn": "2026-10-27"
1671
2231
  }
1672
2232
  },
2233
+ "worker": {
2234
+ "profile": null,
2235
+ "billing": "unknown",
2236
+ "cli": {
2237
+ "status": "supported",
2238
+ "evidence": [
2239
+ "bench/inventory/coverage.json → copilot --version → GitHub Copilot CLI 1.0.78."
2240
+ ],
2241
+ "verification": "Run `copilot --version` and compare the output with bench/inventory/coverage.json.",
2242
+ "verifiedOn": "2026-10-12",
2243
+ "binary": "copilot",
2244
+ "versionArgv": [
2245
+ "--version"
2246
+ ]
2247
+ },
2248
+ "oneShot": {
2249
+ "status": "unknown",
2250
+ "evidence": [],
2251
+ "verification": "Read copilot's headless CLI documentation and `copilot --help`; record the flag and its source",
2252
+ "verifiedOn": "2026-10-15",
2253
+ "reason": "no recorded evidence for copilot: no free check has captured its one-shot headless flag or how it reads a prompt"
2254
+ },
2255
+ "structuredOutput": {
2256
+ "status": "unknown",
2257
+ "evidence": [],
2258
+ "verification": "Read copilot's headless CLI documentation and `copilot --help`; record the flag and its source",
2259
+ "verifiedOn": "2026-10-15",
2260
+ "reason": "no captured copilot transcript: its event schema has no parser, and a parser waits for a transcript from its own probe"
2261
+ },
2262
+ "readOnly": {
2263
+ "status": "unknown",
2264
+ "evidence": [],
2265
+ "verification": "Read copilot's headless CLI documentation and `copilot --help`; record the flag and its source",
2266
+ "verifiedOn": "2026-10-15",
2267
+ "reason": "no in-repository evidence names this for copilot; nothing is inferred from another harness or a model name"
2268
+ },
2269
+ "spawnDenial": {
2270
+ "status": "unknown",
2271
+ "evidence": [],
2272
+ "verification": "Read copilot's headless CLI documentation and `copilot --help`; record the flag and its source",
2273
+ "verifiedOn": "2026-10-15",
2274
+ "reason": "no recorded evidence for copilot: no free check shows a flag that disables subagent spawning"
2275
+ },
2276
+ "runnableProbe": {
2277
+ "status": "unknown",
2278
+ "evidence": [],
2279
+ "verification": "Read copilot's headless CLI documentation and `copilot --help`; record the flag and its source",
2280
+ "verifiedOn": "2026-10-15",
2281
+ "reason": "no in-repository evidence names this for copilot; nothing is inferred from another harness or a model name"
2282
+ },
2283
+ "hooksProbe": {
2284
+ "status": "unknown",
2285
+ "evidence": [],
2286
+ "verification": "Read copilot's headless CLI documentation and `copilot --help`; record the flag and its source",
2287
+ "verifiedOn": "2026-10-15",
2288
+ "reason": "no in-repository evidence names this for copilot; nothing is inferred from another harness or a model name"
2289
+ },
2290
+ "guidanceProbe": {
2291
+ "status": "unknown",
2292
+ "evidence": [],
2293
+ "verification": "Read copilot's headless CLI documentation and `copilot --help`; record the flag and its source",
2294
+ "verifiedOn": "2026-10-15",
2295
+ "reason": "no in-repository evidence names this for copilot; nothing is inferred from another harness or a model name"
2296
+ },
2297
+ "loginProbe": {
2298
+ "status": "unknown",
2299
+ "evidence": [],
2300
+ "verification": "Read copilot's headless CLI documentation and `copilot --help`; record the flag and its source",
2301
+ "verifiedOn": "2026-10-15",
2302
+ "reason": "no in-repository evidence names this for copilot; nothing is inferred from another harness or a model name"
2303
+ },
2304
+ "persistentSession": {
2305
+ "status": "unknown",
2306
+ "evidence": [],
2307
+ "verification": "Read copilot's headless CLI documentation and `copilot --help`; record the flag and its source",
2308
+ "verifiedOn": "2026-10-15",
2309
+ "reason": "no in-repository evidence names this for copilot; nothing is inferred from another harness or a model name"
2310
+ },
2311
+ "resume": {
2312
+ "status": "unknown",
2313
+ "evidence": [],
2314
+ "verification": "Read copilot's headless CLI documentation and `copilot --help`; record the flag and its source",
2315
+ "verifiedOn": "2026-10-15",
2316
+ "reason": "no in-repository evidence names this for copilot; nothing is inferred from another harness or a model name"
2317
+ },
2318
+ "steering": {
2319
+ "status": "unknown",
2320
+ "evidence": [],
2321
+ "verification": "Read copilot's headless CLI documentation and `copilot --help`; record the flag and its source",
2322
+ "verifiedOn": "2026-10-15",
2323
+ "reason": "no in-repository evidence names this for copilot; nothing is inferred from another harness or a model name"
2324
+ },
2325
+ "isolatedEdit": {
2326
+ "status": "unknown",
2327
+ "evidence": [],
2328
+ "verification": "Read copilot's headless CLI documentation and `copilot --help`; record the flag that confines edits to the working directory and its source",
2329
+ "verifiedOn": "2026-10-16",
2330
+ "reason": "no recorded evidence for copilot: no free check shows a flag that confines edits to the working directory"
2331
+ },
2332
+ "model": {
2333
+ "status": "unknown",
2334
+ "evidence": [],
2335
+ "verification": "Read copilot's headless CLI documentation and `copilot --help`; record the flag that selects the model and its source",
2336
+ "verifiedOn": "2026-10-24",
2337
+ "reason": "no recorded evidence for copilot: no free check shows a flag that selects the model"
2338
+ },
2339
+ "modelChecks": []
2340
+ },
1673
2341
  "contextProfile": {
1674
2342
  "capacityTokens": {
1675
- "unverified": "values belong to 085 (A-19)",
1676
- "verifiedOn": "2026-10-13"
2343
+ "value": 128000,
2344
+ "source": "github copilot cli specifications",
2345
+ "verifiedOn": "2026-10-20"
1677
2346
  },
1678
2347
  "reserveTokens": {
1679
- "unverified": "values belong to 085 (A-19)",
1680
- "verifiedOn": "2026-10-13"
2348
+ "value": 10000,
2349
+ "source": "github copilot cli specifications",
2350
+ "verifiedOn": "2026-10-20"
1681
2351
  },
1682
2352
  "tokenTelemetry": {
1683
- "unverified": "values belong to 085 (A-19)",
1684
- "verifiedOn": "2026-10-13"
2353
+ "value": "none",
2354
+ "source": "delivery-store.ts:10",
2355
+ "verifiedOn": "2026-10-20"
1685
2356
  },
1686
2357
  "toolResultLimitBytes": {
1687
- "unverified": "values belong to 085 (A-19)",
1688
- "verifiedOn": "2026-10-13"
2358
+ "value": 262144,
2359
+ "source": "copilot cli execution runner limits",
2360
+ "verifiedOn": "2026-10-20"
1689
2361
  },
1690
2362
  "retention": {
1691
- "unverified": "values belong to 085 (A-19)",
1692
- "verifiedOn": "2026-10-13"
2363
+ "value": "unsupported",
2364
+ "source": "core/registry/harnesses.json:2115 (unwired hooks)",
2365
+ "verifiedOn": "2026-10-20"
1693
2366
  }
1694
2367
  },
1695
2368
  "scopePrecedence": {
@@ -1704,6 +2377,21 @@
1704
2377
  "note": "Confirmed for custom agents only: \"If you have custom agents with the same name in both locations, the one in your home directory will be used, rather than the one in the repository\" (user overrides project). The parallel add-skills page states no such rule for skills, and no page found states one for .github/copilot-instructions.md -- this order is not shown to generalize beyond custom agents, and the general customize-copilot overview page names no precedence word at all. The source states an outcome rather than a consultation order: the home-directory copy is used rather than the repository one. Encoded as the recorded consultation order with a last-wins mode, which yields the documented winner, the user copy. Confirmed for custom agents only.",
1705
2378
  "determinedOn": "2026-09-27",
1706
2379
  "mode": "last-wins"
2380
+ },
2381
+ "primaryProbe": {
2382
+ "model": "none",
2383
+ "events": [],
2384
+ "status": "unverified",
2385
+ "evidence": [],
2386
+ "verifiedOn": null,
2387
+ "reason": "The hook payload carries no model; the declaration is the only source (declared-only)."
2388
+ },
2389
+ "nativeTelemetry": {
2390
+ "signals": [],
2391
+ "contentDefaults": "metadata-only",
2392
+ "inboundTraceparent": "unsupported",
2393
+ "joinKey": "run_id",
2394
+ "verifiedOn": "2026-10-20"
1707
2395
  }
1708
2396
  },
1709
2397
  {
@@ -1786,7 +2474,7 @@
1786
2474
  "evidence": [
1787
2475
  "https://kiro.dev/docs/custom-agents/configuration-reference/"
1788
2476
  ],
1789
- "note": "kiro-cli discovers custom agents as .kiro/agents/<name>.json; kiro-cli 2.27.1 `kiro-cli agent list` did not list .md agents. DoFlow renders each shared agent spec to JSON (name, description, prompt, tools, hooks) through the kiro-agents transform and installs a static doflow agent beside them. A pre-existing DoFlow-owned <name>.md is removed on update. DoFlow never changes the user's default agent; run `kiro-cli chat --agent doflow` or opt in with `kiro-cli agent set-default doflow`.",
2477
+ "note": "DoFlow writes custom agents as .kiro/agents/<name>.json. Kiro's configuration reference (read 2026-10-23) also documents Markdown agents; DoFlow does not write them, and `kiro-cli agent list` 2.27.1 did not list .md agents when last tested (not re-tested since). DoFlow renders each shared agent spec to JSON (name, description, prompt, tools, hooks) through the kiro-agents transform and installs a static doflow agent beside them. The read-only `tools` list uses the category tags read, shell and web, which are the Kiro CLI V3 vocabulary (kiro.dev/docs/cli/v3/agent-config/); CLI 2.x named tools such as fs_read and execute_bash, but Kiro's migration table lists read and shell as names a 2.x CLI also accepts, so only web is a V3-only tag and on a 2.x CLI that list may be only partly recognised (web), not wholly unrecognised (INFERENCE from the two documentation pages, not run live). A pre-existing DoFlow-owned <name>.md is removed on update. DoFlow never changes the user's default agent; run `kiro-cli chat --agent doflow` or opt in with `kiro-cli agent set-default doflow`.",
1790
2478
  "verification": "Confirm an installed custom agent under .kiro/agents is discoverable by Kiro."
1791
2479
  },
1792
2480
  "scripts": {
@@ -1826,14 +2514,15 @@
1826
2514
  "evidence": [
1827
2515
  "https://kiro.dev/docs/hooks/",
1828
2516
  "https://kiro.dev/docs/hooks/actions/",
2517
+ "https://kiro.dev/docs/hooks/types/",
1829
2518
  "https://kiro.dev/docs/permissions/"
1830
2519
  ],
1831
- "note": "kiro-cli reads hooks from an agent config's `hooks` array (agentSpawn, userPromptSubmit, preToolUse, postToolUse, stop). A preToolUse hook that exits 2 blocks the tool call; any other non-zero exit warns and allows; stop is not blockable on 2.x. DoFlow writes three preToolUse hooks (pre-implementation-gate on `write`, pre-bash-guard on `shell`, mcp-tool-guard on `*`) into every rendered agent, plus agentSpawn (session context) and stop (stop-check) on the doflow agent only. The Kiro front doors translate Kiro tool names, KIRO_SESSION_ID and assistant_response to the canonical payload before running the shared policies. `.kiro/hooks/doflow.json` (flat `{version, hooks: [...]}`, PascalCase triggers) is read by the Kiro IDE and by CLI V3 (for every agent); CLI 2.x does not read it. Kiro CLI V3 also loads standalone `.kiro/hooks/*.json` (workspace) and `~/.kiro/hooks/*.json` (global) for every agent, alongside agent-profile hooks, so doflow.json runs for all agents there, and with `--agent doflow` on V3 the preToolUse checks run twice (accepted, idempotent). V3 payloads carry `session_id`, and V3 built-in tool IDs include `read_file`, `execute_bash`, `execute_pwsh`, `fs_write`, `fs_append`, `str_replace` and `delete_file`; the front doors map the write family to Write and `execute_pwsh` to Bash, and V3 MCP IDs (`mcp_<server>_<tool>`) reach mcp-tool-guard unchanged. doflow.json scopes the MCP guard with the V3 `@mcp` selector. V3 Stop: exit 0 finishes, exit 0 with stdout JSON `{\"decision\":\"block\",\"reason\":\"...\"}` starts another turn, exit 1 also starts another turn, and exit 2 does not block; the stop front door therefore turns the policy's deny into that JSON block when the payload has a session_id and keeps exit 2 with stderr for 2.x, where any non-zero exit only warns. It is not in Kiro v3's untrusted-workspace exclusion list; an untrusted workspace asks before every shell command, and whether that covers hook commands is undocumented. Observed on CLI V3 (kiro-cli 2.27.1 --v3, 2026-10-11): PreToolUse payloads carry session_id, tool_name execute_bash with tool_input.command, fs_write and str_replace with tool_input.path; the Stop payload carries only session_id, hook_event_name and cwd, with no response text or transcript path, so stop-check's unfinished-work scan has nothing to read on V3 and allows the stop.",
1832
- "verification": "Confirm kiro-cli reads hooks from the agent config JSON `hooks` (installed .kiro/agents/doflow.json and the specialist agents) with the expected trigger names, and that a preToolUse hook blocks only on exit 2 (any other non-zero exit warns and allows). .kiro/hooks/doflow.json is the Kiro IDE surface.",
2520
+ "note": "kiro-cli reads hooks from an agent config's `hooks` array (agentSpawn, userPromptSubmit, preToolUse, postToolUse, stop). In a CLI 2.x agent config a preToolUse hook that exits 2 blocks the tool call and any other non-zero exit warns and allows; kiro.dev/docs/hooks/actions/ says that for its hooks any non-zero exit blocks Pre Tool Use. DoFlow note: CLI 2.x agent-config exit semantics not re-fetched (2026-10-24). Stop is not blockable on 2.x. DoFlow writes three preToolUse hooks (pre-implementation-gate on `write`, pre-bash-guard on `shell`, mcp-tool-guard on `*`) into every rendered agent, plus agentSpawn (session context) and stop (stop-check) on the doflow agent only. The Kiro front doors translate Kiro tool names, KIRO_SESSION_ID and assistant_response to the canonical payload before running the shared policies. `.kiro/hooks/doflow.json` (flat `{version, hooks: [...]}`, PascalCase triggers) is read by the Kiro IDE and by CLI V3 (for every agent); CLI 2.x does not read it. Kiro CLI V3 also loads standalone `.kiro/hooks/*.json` (workspace) and `~/.kiro/hooks/*.json` (global) for every agent, alongside agent-profile hooks, so doflow.json runs for all agents there, and with `--agent doflow` on V3 the preToolUse checks run twice (accepted, idempotent). V3 payloads carry `session_id`, and V3 built-in tool IDs include `read_file`, `execute_bash`, `execute_pwsh`, `fs_write`, `fs_append`, `str_replace` and `delete_file`; the front doors map the write family to Write and `execute_pwsh` to Bash, and V3 MCP IDs (`mcp_<server>_<tool>`) reach mcp-tool-guard unchanged. doflow.json scopes the MCP guard with the V3 `@mcp` selector. V3 Stop: exit 0 finishes, exit 0 with stdout JSON `{\"decision\":\"block\",\"reason\":\"...\"}` starts another turn, exit 1 also starts another turn, and exit 2 does not block; the stop front door therefore turns the policy's deny into that JSON block when the payload has a session_id and keeps exit 2 with stderr for 2.x, where any non-zero exit only warns. It is not in Kiro v3's untrusted-workspace exclusion list; an untrusted workspace asks before every shell command, and whether that covers hook commands is undocumented. Observed on CLI V3 (kiro-cli 2.27.1 --v3, 2026-10-11): PreToolUse payloads carry session_id, tool_name execute_bash with tool_input.command, fs_write and str_replace with tool_input.path; the Stop payload carries only session_id, hook_event_name and cwd, with no response text or transcript path, so stop-check's unfinished-work scan has nothing to read on V3 and allows the stop.",
2521
+ "verification": "Confirm kiro-cli reads hooks from the agent config JSON `hooks` (installed .kiro/agents/doflow.json and the specialist agents) with the expected trigger names, and that, in an agent config on CLI 2.x, a preToolUse hook blocks only on exit 2 (any other non-zero exit warns and allows). .kiro/hooks/doflow.json is the Kiro IDE and CLI V3 surface, where any non-zero exit blocks Pre Tool Use.",
1833
2522
  "events": {
1834
2523
  "UserPromptSubmit": {
1835
2524
  "status": "different",
1836
- "note": "Kiro documents a native UserPromptSubmit trigger that is blockable via a non-zero exit code and exposes the prompt as the USER_PROMPT environment variable; DoFlow wires no hook to it. DoFlow's once-per-session `/do` suggestion is not hook-delivered here and reaches this harness through skill descriptions only."
2525
+ "note": "Kiro documents a native UserPromptSubmit trigger that is blockable in the IDE only (CLI Prompt Submit hooks cannot block) and exposes the prompt as the USER_PROMPT environment variable; DoFlow wires no hook to it. DoFlow's once-per-session `/do` suggestion is not hook-delivered here and reaches this harness through skill descriptions only."
1837
2526
  },
1838
2527
  "SessionStart": {
1839
2528
  "status": "supported"
@@ -1842,8 +2531,8 @@
1842
2531
  "status": "supported"
1843
2532
  },
1844
2533
  "Stop": {
1845
- "status": "different",
1846
- "note": "DoFlow config uses Stop, while Kiro documents AgentStop; native trigger equivalence is unresolved."
2534
+ "status": "supported",
2535
+ "note": "DoFlow projects Stop in .kiro/hooks/doflow.json and agent config hooks.stop. On CLI V3 / IDE, exit 0 finishes, stdout JSON {\"decision\":\"block\",\"reason\":\"...\"} or exit 1 starts another turn, while 2.x treats non-zero exit as a warning. Payload carries session_id, hook_event_name, and cwd."
1847
2536
  }
1848
2537
  }
1849
2538
  },
@@ -1903,28 +2592,196 @@
1903
2592
  "verifiedOn": "2026-10-12",
1904
2593
  "fallback": "manual",
1905
2594
  "reason": "https://kiro.dev/docs/custom-agents/subagents/ was read on 2026-10-12 and does not state a resume operation; nothing is inferred from another harness or a model name."
2595
+ },
2596
+ "nest": {
2597
+ "status": "unknown",
2598
+ "evidence": [],
2599
+ "verification": "Re-read https://kiro.dev/docs/custom-agents/subagents/ for whether a subagent can start a subagent.",
2600
+ "verifiedOn": "2026-10-23",
2601
+ "fallback": "sequential",
2602
+ "reason": "vendor docs silent: https://kiro.dev/docs/custom-agents/subagents/ was read on 2026-10-23 and does not state whether a subagent can start a subagent; nothing is inferred from another harness or a model name."
1906
2603
  }
1907
2604
  },
2605
+ "agentLimits": {
2606
+ "readOnly": {
2607
+ "status": "native",
2608
+ "apply": {
2609
+ "tools": [
2610
+ "read",
2611
+ "shell",
2612
+ "web"
2613
+ ]
2614
+ },
2615
+ "evidence": [
2616
+ "https://kiro.dev/docs/custom-agents/configuration-reference/",
2617
+ "https://kiro.dev/docs/cli/v3/agent-config/"
2618
+ ],
2619
+ "checked": "docs",
2620
+ "verifiedOn": "2026-10-23"
2621
+ },
2622
+ "toolScope": {
2623
+ "status": "native",
2624
+ "field": "tools",
2625
+ "form": "list",
2626
+ "map": {
2627
+ "read": [
2628
+ "read"
2629
+ ],
2630
+ "edit": [
2631
+ "write"
2632
+ ],
2633
+ "shell": [
2634
+ "shell"
2635
+ ],
2636
+ "web": [
2637
+ "web"
2638
+ ],
2639
+ "agents": [
2640
+ "subagent"
2641
+ ]
2642
+ },
2643
+ "mcpSelector": "@{server}",
2644
+ "evidence": [
2645
+ "https://kiro.dev/docs/cli/v3/agent-config/",
2646
+ "https://kiro.dev/docs/custom-agents/configuration-reference/"
2647
+ ],
2648
+ "checked": "docs",
2649
+ "verifiedOn": "2026-10-27"
2650
+ }
2651
+ },
2652
+ "worker": {
2653
+ "profile": null,
2654
+ "billing": "unknown",
2655
+ "cli": {
2656
+ "status": "supported",
2657
+ "evidence": [
2658
+ "bench/inventory/coverage.json → kiro-cli --version → kiro-cli 2.29.1"
2659
+ ],
2660
+ "verification": "Run `kiro-cli --version` and compare the output with bench/inventory/coverage.json.",
2661
+ "verifiedOn": "2026-10-12",
2662
+ "binary": "kiro-cli",
2663
+ "versionArgv": [
2664
+ "--version"
2665
+ ]
2666
+ },
2667
+ "oneShot": {
2668
+ "status": "unknown",
2669
+ "evidence": [],
2670
+ "verification": "Read kiro's headless CLI documentation and `kiro-cli --help`; record the flag and its source",
2671
+ "verifiedOn": "2026-10-15",
2672
+ "reason": "no recorded evidence for kiro-cli: no free check has captured its one-shot headless flag or how it reads a prompt"
2673
+ },
2674
+ "structuredOutput": {
2675
+ "status": "unknown",
2676
+ "evidence": [],
2677
+ "verification": "Read kiro's headless CLI documentation and `kiro-cli --help`; record the flag and its source",
2678
+ "verifiedOn": "2026-10-15",
2679
+ "reason": "no captured kiro-cli transcript: its event schema has no parser, and a parser waits for a transcript from its own probe"
2680
+ },
2681
+ "readOnly": {
2682
+ "status": "unknown",
2683
+ "evidence": [],
2684
+ "verification": "Read kiro's headless CLI documentation and `kiro-cli --help`; record the flag and its source",
2685
+ "verifiedOn": "2026-10-15",
2686
+ "reason": "no in-repository evidence names this for kiro; nothing is inferred from another harness or a model name"
2687
+ },
2688
+ "spawnDenial": {
2689
+ "status": "unknown",
2690
+ "evidence": [],
2691
+ "verification": "Read kiro's headless CLI documentation and `kiro-cli --help`; record the flag and its source",
2692
+ "verifiedOn": "2026-10-15",
2693
+ "reason": "no recorded evidence for kiro-cli: no free check shows a flag that disables subagent spawning"
2694
+ },
2695
+ "runnableProbe": {
2696
+ "status": "unknown",
2697
+ "evidence": [],
2698
+ "verification": "Read kiro's headless CLI documentation and `kiro-cli --help`; record the flag and its source",
2699
+ "verifiedOn": "2026-10-15",
2700
+ "reason": "no in-repository evidence names this for kiro; nothing is inferred from another harness or a model name"
2701
+ },
2702
+ "hooksProbe": {
2703
+ "status": "unknown",
2704
+ "evidence": [],
2705
+ "verification": "Read kiro's headless CLI documentation and `kiro-cli --help`; record the flag and its source",
2706
+ "verifiedOn": "2026-10-15",
2707
+ "reason": "no in-repository evidence names this for kiro; nothing is inferred from another harness or a model name"
2708
+ },
2709
+ "guidanceProbe": {
2710
+ "status": "unknown",
2711
+ "evidence": [],
2712
+ "verification": "Read kiro's headless CLI documentation and `kiro-cli --help`; record the flag and its source",
2713
+ "verifiedOn": "2026-10-15",
2714
+ "reason": "no in-repository evidence names this for kiro; nothing is inferred from another harness or a model name"
2715
+ },
2716
+ "loginProbe": {
2717
+ "status": "unknown",
2718
+ "evidence": [],
2719
+ "verification": "Read kiro's headless CLI documentation and `kiro-cli --help`; record the flag and its source",
2720
+ "verifiedOn": "2026-10-15",
2721
+ "reason": "no in-repository evidence names this for kiro; nothing is inferred from another harness or a model name"
2722
+ },
2723
+ "persistentSession": {
2724
+ "status": "unknown",
2725
+ "evidence": [],
2726
+ "verification": "Read kiro's headless CLI documentation and `kiro-cli --help`; record the flag and its source",
2727
+ "verifiedOn": "2026-10-15",
2728
+ "reason": "no in-repository evidence names this for kiro; nothing is inferred from another harness or a model name"
2729
+ },
2730
+ "resume": {
2731
+ "status": "unknown",
2732
+ "evidence": [],
2733
+ "verification": "Read kiro's headless CLI documentation and `kiro-cli --help`; record the flag and its source",
2734
+ "verifiedOn": "2026-10-15",
2735
+ "reason": "no in-repository evidence names this for kiro; nothing is inferred from another harness or a model name"
2736
+ },
2737
+ "steering": {
2738
+ "status": "unknown",
2739
+ "evidence": [],
2740
+ "verification": "Read kiro's headless CLI documentation and `kiro-cli --help`; record the flag and its source",
2741
+ "verifiedOn": "2026-10-15",
2742
+ "reason": "no in-repository evidence names this for kiro; nothing is inferred from another harness or a model name"
2743
+ },
2744
+ "isolatedEdit": {
2745
+ "status": "unknown",
2746
+ "evidence": [],
2747
+ "verification": "Read kiro's headless CLI documentation and `kiro-cli --help`; record the flag that confines edits to the working directory and its source",
2748
+ "verifiedOn": "2026-10-16",
2749
+ "reason": "no recorded evidence for kiro-cli: no free check shows a flag that confines edits to the working directory"
2750
+ },
2751
+ "model": {
2752
+ "status": "unknown",
2753
+ "evidence": [],
2754
+ "verification": "Read kiro's headless CLI documentation and `kiro-cli --help`; record the flag that selects the model and its source",
2755
+ "verifiedOn": "2026-10-24",
2756
+ "reason": "no recorded evidence for kiro-cli: no free check shows a flag that selects the model"
2757
+ },
2758
+ "modelChecks": []
2759
+ },
1908
2760
  "contextProfile": {
1909
2761
  "capacityTokens": {
1910
- "unverified": "values belong to 085 (A-19)",
1911
- "verifiedOn": "2026-10-13"
2762
+ "value": 128000,
2763
+ "source": "kiro agent documentation",
2764
+ "verifiedOn": "2026-10-20"
1912
2765
  },
1913
2766
  "reserveTokens": {
1914
- "unverified": "values belong to 085 (A-19)",
1915
- "verifiedOn": "2026-10-13"
2767
+ "value": 10000,
2768
+ "source": "kiro agent documentation",
2769
+ "verifiedOn": "2026-10-20"
1916
2770
  },
1917
2771
  "tokenTelemetry": {
1918
- "unverified": "values belong to 085 (A-19)",
1919
- "verifiedOn": "2026-10-13"
2772
+ "value": "none",
2773
+ "source": "delivery-store.ts:10",
2774
+ "verifiedOn": "2026-10-20"
1920
2775
  },
1921
2776
  "toolResultLimitBytes": {
1922
- "unverified": "values belong to 085 (A-19)",
1923
- "verifiedOn": "2026-10-13"
2777
+ "value": 262144,
2778
+ "source": "kiro agent cli limits",
2779
+ "verifiedOn": "2026-10-20"
1924
2780
  },
1925
2781
  "retention": {
1926
- "unverified": "values belong to 085 (A-19)",
1927
- "verifiedOn": "2026-10-13"
2782
+ "value": "unsupported",
2783
+ "source": "core/registry/harnesses.json (SessionStart side-effects only)",
2784
+ "verifiedOn": "2026-10-20"
1928
2785
  }
1929
2786
  },
1930
2787
  "scopePrecedence": {
@@ -1940,6 +2797,21 @@
1940
2797
  "note": "Skills doc: \"Scanned from .kiro/skills/ (workspace) and ~/.kiro/skills/ (global); workspace wins on a same-name conflict.\" Steering doc likewise requires workspace files to win on conflict. Order lists workspace (project) before global (user), matching the scan order the skills doc states them in. The skills doc states the workspace copy wins on a same-name conflict, so the order lists the winner first: the project copy is used.",
1941
2798
  "determinedOn": "2026-09-27",
1942
2799
  "mode": "first-wins"
2800
+ },
2801
+ "primaryProbe": {
2802
+ "model": "none",
2803
+ "events": [],
2804
+ "status": "unverified",
2805
+ "evidence": [],
2806
+ "verifiedOn": null,
2807
+ "reason": "The hook payload carries no model; the declaration is the only source (declared-only)."
2808
+ },
2809
+ "nativeTelemetry": {
2810
+ "signals": [],
2811
+ "contentDefaults": "metadata-only",
2812
+ "inboundTraceparent": "unsupported",
2813
+ "joinKey": "session_id",
2814
+ "verifiedOn": "2026-10-20"
1943
2815
  }
1944
2816
  },
1945
2817
  {
@@ -1978,6 +2850,13 @@
1978
2850
  "segments": [
1979
2851
  "AGENTS.md"
1980
2852
  ]
2853
+ },
2854
+ "user": {
2855
+ "base": "root",
2856
+ "segments": [
2857
+ ".gemini",
2858
+ "GEMINI.md"
2859
+ ]
1981
2860
  }
1982
2861
  },
1983
2862
  "mcpFile": {
@@ -2072,16 +2951,17 @@
2072
2951
  "skills": {
2073
2952
  "status": "supported",
2074
2953
  "evidence": [
2075
- "https://antigravity.google/docs/cli/plugins",
2076
- "https://antigravity.google/docs/skills"
2954
+ "https://antigravity.google/docs/plugins?tab=cli",
2955
+ "https://antigravity.google/docs/skills",
2956
+ "https://antigravity.google/docs/cli/gcli-migration"
2077
2957
  ],
2078
- "note": "Antigravity discovers folder-form skills under .agents/skills (project) and ~/.gemini/config/skills (global).",
2958
+ "note": "Antigravity discovers folder-form skills under .agents/skills (project) and ~/.gemini/config/skills (global, App/IDE and verified on local agy CLI installation; ~/.gemini/antigravity-cli/ is the internal state/runtime root without a skills directory).",
2079
2959
  "verification": "Confirm the skill is discoverable by agy from .agents/skills."
2080
2960
  },
2081
2961
  "agents": {
2082
2962
  "status": "supported",
2083
2963
  "evidence": [
2084
- "https://antigravity.google/docs/cli/subagents"
2964
+ "https://antigravity.google/docs/subagents?tab=cli"
2085
2965
  ],
2086
2966
  "note": "Shared agent-spec frontmatter (name, description) is a compatible subset of Antigravity's subagent schema; body becomes the system prompt.",
2087
2967
  "verification": "Confirm invoke_subagent reaches the installed agent definition."
@@ -2089,7 +2969,7 @@
2089
2969
  "scripts": {
2090
2970
  "status": "supported",
2091
2971
  "evidence": [
2092
- "https://antigravity.google/docs/cli/plugins",
2972
+ "https://antigravity.google/docs/plugins?tab=cli",
2093
2973
  "https://antigravity.google/docs/skills"
2094
2974
  ],
2095
2975
  "note": "Bundled skill scripts travel inside skills/<name>/scripts/. DoFlow projects its runtime seam under .doflow and locator in the configDir bin/ (project and global scopes).",
@@ -2098,21 +2978,21 @@
2098
2978
  "templates": {
2099
2979
  "status": "different",
2100
2980
  "evidence": [
2101
- "https://antigravity.google/docs/cli/plugins"
2981
+ "https://antigravity.google/docs/plugins?tab=cli"
2102
2982
  ],
2103
2983
  "verification": "Report that template access arrives through skill bundles, not a projected tree."
2104
2984
  },
2105
2985
  "modes": {
2106
2986
  "status": "different",
2107
2987
  "evidence": [
2108
- "https://antigravity.google/docs/rules-workflows"
2988
+ "https://antigravity.google/docs/rules"
2109
2989
  ],
2110
2990
  "verification": "Report that mode guidance rides the instructions pointer; .agents/rules projection is future work."
2111
2991
  },
2112
2992
  "settings": {
2113
2993
  "status": "unavailable",
2114
2994
  "evidence": [
2115
- "https://antigravity.google/docs/cli/settings"
2995
+ "https://antigravity.google/docs/settings?tab=cli"
2116
2996
  ],
2117
2997
  "note": "Settings live only at user scope (~/.gemini/antigravity-cli/settings.json); no project settings tier exists.",
2118
2998
  "verification": "Report the capability gap; never write that file."
@@ -2122,9 +3002,13 @@
2122
3002
  "evidence": [
2123
3003
  "https://antigravity.google/docs/hooks/"
2124
3004
  ],
2125
- "note": "Antigravity documents a full hook surface (2026): hooks.json in the customization directory (.agents/ workspace, ~/.gemini/config/ user), named groups per event, PreToolUse/PostToolUse/PreInvocation/PostInvocation/Stop, and an explicit stdin/stdout contract (PreToolUse returns {decision: allow|deny|ask|force_ask|...}, Stop returns {decision: continue}). Unlike Copilot's, this contract is complete enough to project against without a live-session capture. DoFlow wires its pre-implementation gate and its stop check as native-payload shims; events with no matching DoFlow policy stay unwired.",
3005
+ "note": "Antigravity documents a full hook surface (2026): hooks.json in the customization directory (.agents/ workspace, ~/.gemini/config/ user), named groups per event, SessionStart/PreToolUse/PostToolUse/PreInvocation/PostInvocation/Stop, and an explicit stdin/stdout contract (PreToolUse returns {decision: allow|deny|ask|force_ask|...}, Stop returns {decision: continue}). Unlike Copilot's, this contract is complete enough to project against without a live-session capture. DoFlow wires its pre-implementation gate and its stop check as native-payload shims; events with no matching DoFlow policy stay unwired.",
2126
3006
  "verification": "Report that no Antigravity hook is installed.",
2127
3007
  "events": {
3008
+ "SessionStart": {
3009
+ "status": "different",
3010
+ "note": "Documented (fires once, before the first model invocation); not projected, no current DoFlow policy maps to it."
3011
+ },
2128
3012
  "PreToolUse": {
2129
3013
  "status": "supported",
2130
3014
  "note": "DoFlow projects its pre-implementation gate as a native shim: matcher write_to_file|replace_file_content|multi_replace_file_content, deny decision until the branch-coupled feature's three specifications exist."
@@ -2143,7 +3027,7 @@
2143
3027
  },
2144
3028
  "Stop": {
2145
3029
  "status": "supported",
2146
- "note": "DoFlow projects its stop check as a native shim: emits the documented {decision:'continue', reason} when the last assistant response in transcriptPath carries unfinished-work markers (the same gate Claude's stop-check enforces via exit 2). transcriptPath is optional and unverified — empty/garbage stdin, missing/unreadable/unrecognized transcripts all fail open, so a broken hook can never trap session end."
3030
+ "note": "DoFlow projects its stop check as a native shim: emits the documented {decision:'continue', reason} when the last assistant response in transcriptPath carries unfinished-work markers (the same gate Claude's stop-check enforces via exit 2). transcriptPath is a documented required common field, but empty/garbage stdin, missing/unreadable/unrecognized transcripts all fail open, so a broken hook can never trap session end."
2147
3031
  },
2148
3032
  "UserPromptSubmit": {
2149
3033
  "status": "unavailable",
@@ -2154,7 +3038,7 @@
2154
3038
  "mcp": {
2155
3039
  "status": "supported",
2156
3040
  "evidence": [
2157
- "https://antigravity.google/docs/cli/mcp"
3041
+ "https://antigravity.google/docs/mcp?tab=cli"
2158
3042
  ],
2159
3043
  "note": "mcpServers object in .agents/mcp_config.json (workspace) or ~/.gemini/config/mcp_config.json (user). Remote servers project url/httpUrl to serverUrl per current schema.",
2160
3044
  "verification": "Confirm selected MCP servers appear via /mcp in agy."
@@ -2162,9 +3046,9 @@
2162
3046
  "plugin": {
2163
3047
  "status": "different",
2164
3048
  "evidence": [
2165
- "https://antigravity.google/docs/cli/plugins"
3049
+ "https://antigravity.google/docs/plugins?tab=cli"
2166
3050
  ],
2167
- "note": "Local-path plugin installs only; DoFlow publishes none.",
3051
+ "note": "Marketplace and local-path directory plugin installs; DoFlow publishes none.",
2168
3052
  "verification": "Report that no plugin is installed."
2169
3053
  }
2170
3054
  },
@@ -2208,28 +3092,167 @@
2208
3092
  ],
2209
3093
  "verification": "Message an Idle subagent and confirm it returns to Running.",
2210
3094
  "verifiedOn": "2026-10-12"
3095
+ },
3096
+ "nest": {
3097
+ "status": "supported",
3098
+ "evidence": [
3099
+ "https://antigravity.google/docs/subagents?tab=cli → maximum nesting depth of 10 levels under the primary agent."
3100
+ ],
3101
+ "verification": "Start a subagent that starts a subagent and confirm the inner one runs (documented depth 10).",
3102
+ "verifiedOn": "2026-10-23"
3103
+ }
3104
+ },
3105
+ "agentLimits": {
3106
+ "readOnly": {
3107
+ "status": "unenforced",
3108
+ "reason": "tool names and the empty-default semantics of `tools` are undocumented (followup-tracked)",
3109
+ "evidence": [
3110
+ "https://antigravity.google/docs/subagents?tab=cli"
3111
+ ],
3112
+ "verifiedOn": "2026-10-23"
3113
+ },
3114
+ "toolScope": {
3115
+ "status": "unenforced",
3116
+ "reason": "the `tools` list takes tool ids the docs name only by example, and an unmapped id may hang the subagent",
3117
+ "evidence": [
3118
+ "https://antigravity.google/docs/subagents?tab=cli"
3119
+ ],
3120
+ "verifiedOn": "2026-10-27"
2211
3121
  }
2212
3122
  },
3123
+ "worker": {
3124
+ "profile": null,
3125
+ "billing": "unknown",
3126
+ "cli": {
3127
+ "status": "supported",
3128
+ "evidence": [
3129
+ "bench/inventory/coverage.json → agy --version → 1.3.3"
3130
+ ],
3131
+ "verification": "Run `agy --version` and compare the output with bench/inventory/coverage.json.",
3132
+ "verifiedOn": "2026-10-12",
3133
+ "binary": "agy",
3134
+ "versionArgv": [
3135
+ "--version"
3136
+ ]
3137
+ },
3138
+ "oneShot": {
3139
+ "status": "unknown",
3140
+ "evidence": [],
3141
+ "verification": "Read antigravity's headless CLI documentation and `agy --help`; record the flag and its source",
3142
+ "verifiedOn": "2026-10-15",
3143
+ "reason": "no recorded evidence for agy: no free check has captured its one-shot headless flag, and a probe must show non-empty output and a result event, not exit 0 alone"
3144
+ },
3145
+ "structuredOutput": {
3146
+ "status": "unknown",
3147
+ "evidence": [],
3148
+ "verification": "Read antigravity's headless CLI documentation and `agy --help`; record the flag and its source",
3149
+ "verifiedOn": "2026-10-15",
3150
+ "reason": "no captured agy transcript: the event schema is undocumented, and a probe must show non-empty output and a result event, not exit 0 alone"
3151
+ },
3152
+ "readOnly": {
3153
+ "status": "unknown",
3154
+ "evidence": [],
3155
+ "verification": "Read antigravity's headless CLI documentation and `agy --help`; record the flag and its source",
3156
+ "verifiedOn": "2026-10-15",
3157
+ "reason": "no in-repository evidence names this for antigravity; nothing is inferred from another harness or a model name"
3158
+ },
3159
+ "spawnDenial": {
3160
+ "status": "unknown",
3161
+ "evidence": [],
3162
+ "verification": "Read antigravity's headless CLI documentation and `agy --help`; record the flag and its source",
3163
+ "verifiedOn": "2026-10-15",
3164
+ "reason": "no recorded evidence for agy: no free check shows a flag that disables subagent spawning"
3165
+ },
3166
+ "runnableProbe": {
3167
+ "status": "unknown",
3168
+ "evidence": [],
3169
+ "verification": "Read antigravity's headless CLI documentation and `agy --help`; record the flag and its source",
3170
+ "verifiedOn": "2026-10-15",
3171
+ "reason": "no in-repository evidence names this for antigravity; nothing is inferred from another harness or a model name"
3172
+ },
3173
+ "hooksProbe": {
3174
+ "status": "unknown",
3175
+ "evidence": [],
3176
+ "verification": "Read antigravity's headless CLI documentation and `agy --help`; record the flag and its source",
3177
+ "verifiedOn": "2026-10-15",
3178
+ "reason": "no in-repository evidence names this for antigravity; nothing is inferred from another harness or a model name"
3179
+ },
3180
+ "guidanceProbe": {
3181
+ "status": "unknown",
3182
+ "evidence": [],
3183
+ "verification": "Read antigravity's headless CLI documentation and `agy --help`; record the flag and its source",
3184
+ "verifiedOn": "2026-10-15",
3185
+ "reason": "no in-repository evidence names this for antigravity; nothing is inferred from another harness or a model name"
3186
+ },
3187
+ "loginProbe": {
3188
+ "status": "unknown",
3189
+ "evidence": [],
3190
+ "verification": "Read antigravity's headless CLI documentation and `agy --help`; record the flag and its source",
3191
+ "verifiedOn": "2026-10-15",
3192
+ "reason": "no in-repository evidence names this for antigravity; nothing is inferred from another harness or a model name"
3193
+ },
3194
+ "persistentSession": {
3195
+ "status": "unknown",
3196
+ "evidence": [],
3197
+ "verification": "Read antigravity's headless CLI documentation and `agy --help`; record the flag and its source",
3198
+ "verifiedOn": "2026-10-15",
3199
+ "reason": "no in-repository evidence names this for antigravity; nothing is inferred from another harness or a model name"
3200
+ },
3201
+ "resume": {
3202
+ "status": "unknown",
3203
+ "evidence": [],
3204
+ "verification": "Read antigravity's headless CLI documentation and `agy --help`; record the flag and its source",
3205
+ "verifiedOn": "2026-10-15",
3206
+ "reason": "no in-repository evidence names this for antigravity; nothing is inferred from another harness or a model name"
3207
+ },
3208
+ "steering": {
3209
+ "status": "unknown",
3210
+ "evidence": [],
3211
+ "verification": "Read antigravity's headless CLI documentation and `agy --help`; record the flag and its source",
3212
+ "verifiedOn": "2026-10-15",
3213
+ "reason": "no in-repository evidence names this for antigravity; nothing is inferred from another harness or a model name"
3214
+ },
3215
+ "isolatedEdit": {
3216
+ "status": "unknown",
3217
+ "evidence": [],
3218
+ "verification": "Read antigravity's headless CLI documentation and `agy --help`; record the flag that confines edits to the working directory and its source",
3219
+ "verifiedOn": "2026-10-16",
3220
+ "reason": "no recorded evidence for agy: no free check shows a flag that confines edits to the working directory"
3221
+ },
3222
+ "model": {
3223
+ "status": "unknown",
3224
+ "evidence": [],
3225
+ "verification": "Run `agy --help` and read the `--model` line; record it with `node bin/doflow.js worker --action evidence --harness antigravity --checks core/worker-evidence/antigravity/checks.json --out <new cli-check path>` (check help-model)",
3226
+ "verifiedOn": "2026-10-24",
3227
+ "reason": "declared: agy --help lists --model on stderr, but the free check help-model reads stdout only and fails; supported only after a recorded cli-check passes"
3228
+ },
3229
+ "modelChecks": []
3230
+ },
2213
3231
  "contextProfile": {
2214
3232
  "capacityTokens": {
2215
- "unverified": "values belong to 085 (A-19)",
2216
- "verifiedOn": "2026-10-13"
3233
+ "value": 1000000,
3234
+ "source": "gemini-compatible proxy configuration",
3235
+ "verifiedOn": "2026-10-20"
2217
3236
  },
2218
3237
  "reserveTokens": {
2219
- "unverified": "values belong to 085 (A-19)",
2220
- "verifiedOn": "2026-10-13"
3238
+ "value": 50000,
3239
+ "source": "gemini-compatible proxy configuration",
3240
+ "verifiedOn": "2026-10-20"
2221
3241
  },
2222
3242
  "tokenTelemetry": {
2223
- "unverified": "values belong to 085 (A-19)",
2224
- "verifiedOn": "2026-10-13"
3243
+ "value": "none",
3244
+ "source": "delivery-store.ts:10",
3245
+ "verifiedOn": "2026-10-20"
2225
3246
  },
2226
3247
  "toolResultLimitBytes": {
2227
- "unverified": "values belong to 085 (A-19)",
2228
- "verifiedOn": "2026-10-13"
3248
+ "value": 1048576,
3249
+ "source": "antigravity hook runner buffer",
3250
+ "verifiedOn": "2026-10-20"
2229
3251
  },
2230
3252
  "retention": {
2231
- "unverified": "values belong to 085 (A-19)",
2232
- "verifiedOn": "2026-10-13"
3253
+ "value": "unsupported",
3254
+ "source": "shared/hooks/adapters/antigravity.js:55-61 (empty injectSteps)",
3255
+ "verifiedOn": "2026-10-20"
2233
3256
  }
2234
3257
  },
2235
3258
  "scopePrecedence": {
@@ -2237,11 +3260,67 @@
2237
3260
  "evidence": [
2238
3261
  "https://antigravity.google/docs/skills/",
2239
3262
  "https://antigravity.google/docs/subagents",
2240
- "https://antigravity.google/docs/cli/mcp"
3263
+ "https://antigravity.google/docs/mcp?tab=cli"
2241
3264
  ],
2242
- "note": "The question was asked across the three dual-scope asset types Antigravity documents (skills, subagents, MCP servers) and the documentation is silent on all three: each page names a workspace location and a global location but never states which wins on a same-name conflict. Separate from this: the skills capability above already records that DoFlow itself skips the global skills scope over an unresolved CLI-vs-desktop contradiction about that scope's own file format -- a dispute about the global location's shape, not about precedence between the two scopes. Resolution mode is likewise unestablished: with no order documented there is nothing for a mode to qualify.",
3265
+ "note": "The question was asked across the three dual-scope asset types Antigravity documents (skills, subagents, MCP servers) and the documentation is silent on all three: each page names a workspace location and a global location but never states which wins on a same-name conflict. Resolution mode is likewise unestablished: with no order documented there is nothing for a mode to qualify.",
2243
3266
  "determinedOn": "2026-09-27",
2244
3267
  "mode": "unestablished"
3268
+ },
3269
+ "primaryProbe": {
3270
+ "model": "payload",
3271
+ "events": [
3272
+ "PreToolUse",
3273
+ "Stop"
3274
+ ],
3275
+ "status": "unverified",
3276
+ "evidence": [],
3277
+ "verifiedOn": null,
3278
+ "reason": "Antigravity hook payloads carry modelName; no live capture recorded yet."
3279
+ },
3280
+ "nativeTelemetry": {
3281
+ "signals": [],
3282
+ "contentDefaults": "metadata-only",
3283
+ "inboundTraceparent": "unsupported",
3284
+ "joinKey": "session_id",
3285
+ "verifiedOn": "2026-10-20"
3286
+ }
3287
+ }
3288
+ ],
3289
+ "retired": [
3290
+ {
3291
+ "id": "gemini",
3292
+ "displayName": "Gemini CLI",
3293
+ "replacement": "antigravity",
3294
+ "retiredOn": "2026-10-26",
3295
+ "reason": "Gemini CLI was replaced upstream by Antigravity CLI on 2026-06-18 and is not optimized for Gemini 4 Argon.",
3296
+ "evidence": [
3297
+ "user statement 2026-10-26 (row 127)"
3298
+ ],
3299
+ "removal": {
3300
+ "hookCommands": {
3301
+ "renderer": "gemini-hooks",
3302
+ "key": "hooks",
3303
+ "commands": [
3304
+ "bash \"$GEMINI_PROJECT_DIR/.gemini/hooks/session-start.sh\"",
3305
+ "bash \"$GEMINI_PROJECT_DIR/.gemini/hooks/session-end.sh\"",
3306
+ "bash \"$GEMINI_PROJECT_DIR/.gemini/hooks/pre-bash-guard.sh\"",
3307
+ "bash \"$GEMINI_PROJECT_DIR/.gemini/hooks/mcp-tool-guard.sh\"",
3308
+ "bash \"$GEMINI_PROJECT_DIR/.gemini/hooks/pre-implement-gate.sh\"",
3309
+ "bash \"$GEMINI_PROJECT_DIR/.gemini/hooks/post-edit-lint.sh\"",
3310
+ "bash \"$GEMINI_PROJECT_DIR/.gemini/hooks/pre-compact.sh\""
3311
+ ]
3312
+ },
3313
+ "markerSectionRenderers": [
3314
+ "gemini-instructions"
3315
+ ],
3316
+ "handover": [
3317
+ {
3318
+ "renderer": "gemini-instructions",
3319
+ "scope": "global",
3320
+ "to": "antigravity",
3321
+ "surface": "instruction"
3322
+ }
3323
+ ]
2245
3324
  }
2246
3325
  }
2247
3326
  ]