@khoavu882/doflow 2.0.0-beta.4 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (497) hide show
  1. package/README.md +12 -11
  2. package/bin/doflow.js +21 -11
  3. package/core/.antigravity-plugin/plugin.json +1 -3
  4. package/core/.claude-plugin/plugin.json +1 -1
  5. package/core/.codex-plugin/plugin.json +1 -1
  6. package/core/.plugin/plugin.json +1 -1
  7. package/core/harnesses/claude/hooks/lib.sh +43 -24
  8. package/core/harnesses/claude/hooks/mcp-tool-guard.sh +7 -17
  9. package/core/harnesses/claude/hooks/permission-audit.sh +3 -0
  10. package/core/harnesses/claude/hooks/post-compact.sh +35 -32
  11. package/core/harnesses/claude/hooks/post-edit-lint.sh +2 -0
  12. package/core/harnesses/claude/hooks/post-shell-observe.sh +48 -0
  13. package/core/harnesses/claude/hooks/post-tool-failure.sh +3 -0
  14. package/core/harnesses/claude/hooks/pre-bash-guard.sh +7 -17
  15. package/core/harnesses/claude/hooks/pre-compact.sh +23 -27
  16. package/core/harnesses/claude/hooks/pre-implement-gate.sh +7 -18
  17. package/core/harnesses/claude/hooks/session-end.sh +23 -10
  18. package/core/harnesses/claude/hooks/session-start.sh +5 -3
  19. package/core/harnesses/claude/hooks/skill-config-audit.sh +3 -0
  20. package/core/harnesses/claude/hooks/stop-check.sh +5 -3
  21. package/core/harnesses/claude/hooks/subagent-audit.sh +5 -5
  22. package/core/harnesses/claude/hooks/user-prompt-submit.sh +5 -3
  23. package/core/harnesses/claude/settings/settings.json +18 -0
  24. package/core/harnesses/claude/statusline/doflow-statusline.sh +1 -0
  25. package/core/harnesses/codex/agents/core-implementer.toml +1 -0
  26. package/core/harnesses/codex/agents/delivery-lead.toml +10 -0
  27. package/core/harnesses/codex/agents/quality-guardian.toml +1 -1
  28. package/core/harnesses/codex/agents/research-writer.toml +1 -1
  29. package/core/harnesses/codex/agents/reviewer.toml +10 -0
  30. package/core/harnesses/codex/agents/spec-analyst.toml +1 -1
  31. package/core/harnesses/codex/agents/system-architect.toml +1 -1
  32. package/core/harnesses/codex/hooks/lib.sh +44 -25
  33. package/core/harnesses/codex/hooks/mcp-tool-guard.sh +7 -15
  34. package/core/harnesses/codex/hooks/post-edit-lint.impl.sh +3 -1
  35. package/core/harnesses/codex/hooks/pre-bash-guard.sh +7 -15
  36. package/core/harnesses/codex/hooks/pre-compact.impl.sh +29 -26
  37. package/core/harnesses/codex/hooks/pre-implement-gate.sh +7 -16
  38. package/core/harnesses/codex/hooks/session-end.impl.sh +23 -10
  39. package/core/harnesses/codex/hooks/session-start.sh +5 -3
  40. package/core/harnesses/codex/hooks/stop-check.sh +6 -5
  41. package/core/harnesses/codex/hooks/subagent-audit.sh +18 -6
  42. package/core/harnesses/codex/hooks/user-prompt-submit.sh +5 -4
  43. package/core/harnesses/copilot/hooks/doflow-lib.sh +93 -0
  44. package/core/harnesses/copilot/hooks/doflow-mcp-tool-guard.sh +9 -0
  45. package/core/harnesses/copilot/hooks/doflow-pre-bash-guard.sh +9 -0
  46. package/core/harnesses/copilot/hooks/doflow-pre-implement-gate.sh +9 -0
  47. package/core/harnesses/copilot/hooks/doflow-session-start.sh +9 -0
  48. package/core/harnesses/copilot/hooks/doflow-stop-check.sh +9 -0
  49. package/core/harnesses/copilot/hooks/doflow-subagent-start.sh +9 -0
  50. package/core/harnesses/copilot/hooks/doflow-subagent-stop.sh +9 -0
  51. package/core/harnesses/copilot/hooks/doflow.json +57 -0
  52. package/core/harnesses/kiro/agents/doflow.json +1 -1
  53. package/core/harnesses/kiro/hooks/lib.sh +26 -6
  54. package/core/harnesses/kiro/hooks/mcp-tool-guard.sh +21 -5
  55. package/core/harnesses/kiro/hooks/pre-bash-guard.sh +21 -5
  56. package/core/harnesses/kiro/hooks/pre-implement-gate.sh +21 -5
  57. package/core/harnesses/kiro/hooks/session-start.sh +12 -5
  58. package/core/harnesses/kiro/hooks/stop-check.sh +22 -30
  59. package/core/harnesses/pi/extensions/doflow-guard.js +167 -0
  60. package/core/harnesses/shared/hooks/ENVELOPE_MIGRATION.md +27 -12
  61. package/core/harnesses/shared/hooks/adapters/antigravity.js +14 -57
  62. package/core/harnesses/shared/hooks/bridge/bridge.sh +277 -0
  63. package/core/harnesses/shared/hooks/bridge/envelope.jq +129 -0
  64. package/core/harnesses/shared/hooks/bridge/observe-model.sh +75 -0
  65. package/core/harnesses/shared/hooks/bridge/respond.sh +70 -0
  66. package/core/harnesses/shared/hooks/policies/blocked-patterns.conf +28 -14
  67. package/core/harnesses/shared/hooks/policies/capture-failure.sh +51 -16
  68. package/core/harnesses/shared/hooks/policies/compact-text.sh +46 -0
  69. package/core/harnesses/shared/hooks/policies/contract.sh +78 -0
  70. package/core/harnesses/shared/hooks/policies/deny-json.sh +35 -9
  71. package/core/harnesses/shared/hooks/policies/emission-rules.sh +37 -0
  72. package/core/harnesses/shared/hooks/policies/emission.jq +209 -0
  73. package/core/harnesses/shared/hooks/policies/emission.sh +383 -0
  74. package/core/harnesses/shared/hooks/policies/identity.sh +177 -0
  75. package/core/harnesses/shared/hooks/policies/lib.sh +65 -40
  76. package/core/harnesses/shared/hooks/policies/mcp-tool-guard.sh +48 -35
  77. package/core/harnesses/shared/hooks/policies/pre-bash-guard.sh +284 -33
  78. package/core/harnesses/shared/hooks/policies/pre-implementation-gate.sh +180 -110
  79. package/core/harnesses/shared/hooks/policies/session-context.sh +66 -7
  80. package/core/harnesses/shared/hooks/policies/stop-check.sh +61 -23
  81. package/core/harnesses/shared/hooks/policies/subagent-audit.sh +39 -6
  82. package/core/harnesses/shared/hooks/policies/summary-store.sh +347 -0
  83. package/core/harnesses/shared/hooks/policies/user-prompt-submit.sh +97 -159
  84. package/core/harnesses/shared/hooks/stream-hook-runner.js +114 -187
  85. package/core/harnesses/shared/locator/doflow-run +2 -3
  86. package/core/registry/advice.json +3 -3
  87. package/core/registry/assets.json +72 -80
  88. package/core/registry/capabilities.json +12 -0
  89. package/core/registry/contracts.json +60 -33
  90. package/core/registry/contribution-points.json +32 -0
  91. package/core/registry/gates.json +32 -0
  92. package/core/registry/guidance-caps.json +40 -0
  93. package/core/registry/harnesses.json +1542 -277
  94. package/core/registry/lifecycle.json +2837 -37
  95. package/core/registry/mcp.json +5 -1
  96. package/core/registry/models.json +7 -1
  97. package/core/registry/package-templates/README.md +19 -0
  98. package/core/registry/package-templates/agent/files/agent.md +9 -0
  99. package/core/registry/package-templates/agent/template.json +4 -0
  100. package/core/registry/package-templates/capability-provider/files/provider.json +9 -0
  101. package/core/registry/package-templates/capability-provider/template.json +11 -0
  102. package/core/registry/package-templates/debate-preset/files/preset.json +26 -0
  103. package/core/registry/package-templates/debate-preset/template.json +4 -0
  104. package/core/registry/package-templates/review-preset/files/preset.json +30 -0
  105. package/core/registry/package-templates/review-preset/template.json +4 -0
  106. package/core/registry/package-templates/skill/files/SKILL.md +8 -0
  107. package/core/registry/package-templates/skill/template.json +4 -0
  108. package/core/registry/package-templates/worker/files/worker.json +92 -0
  109. package/core/registry/package-templates/worker/template.json +11 -0
  110. package/core/registry/packages/doflow/doflow-package.json +15 -0
  111. package/core/registry/packages/doflow/presets/debate-3.json +26 -0
  112. package/core/registry/protocols.json +61 -0
  113. package/core/registry/routes.json +17 -0
  114. package/core/registry/rules.json +431 -0
  115. package/core/registry/settings.json +276 -0
  116. package/core/registry/storage.json +701 -30
  117. package/core/registry/telemetry.json +236 -0
  118. package/core/registry/transcripts.json +142 -0
  119. package/core/registry/verification.json +76 -1
  120. package/core/registry/workflows.json +55 -0
  121. package/core/shared/agent-specs/core-implementer.md +3 -0
  122. package/core/shared/agent-specs/delivery-lead.md +68 -0
  123. package/core/shared/agent-specs/quality-guardian.md +5 -1
  124. package/core/shared/agent-specs/research-writer.md +10 -3
  125. package/core/shared/agent-specs/reviewer.md +53 -0
  126. package/core/shared/agent-specs/spec-analyst.md +5 -6
  127. package/core/shared/agent-specs/system-architect.md +5 -1
  128. package/core/shared/guidance/DOFLOW_CORE.md +1 -5
  129. package/core/shared/guidance/modes/MODE_DeepResearch.md +1 -1
  130. package/core/shared/guidance/modes/MODE_Orchestration.md +4 -3
  131. package/core/shared/guidance/modes/MODE_Task_Management.md +14 -14
  132. package/core/shared/guidance/pointers/codex.md +1 -4
  133. package/core/shared/guidance/references/ARTIFACT_FORMAT.md +30 -16
  134. package/core/shared/guidance/references/ARTIFACT_VOICE.md +3 -2
  135. package/core/shared/guidance/references/CONSTITUTION_BASE.md +17 -15
  136. package/core/shared/guidance/references/DIAGRAM_GUIDE.md +1 -1
  137. package/core/shared/guidance/references/DOFLOW_CHAIN.md +17 -19
  138. package/core/shared/guidance/references/EVIDENCE_LEDGER.md +7 -8
  139. package/core/shared/guidance/references/MODEL_SELECTION.md +5 -3
  140. package/core/shared/guidance/references/ORCHESTRATION.md +1 -2
  141. package/core/shared/guidance/rules/RULES.md +45 -0
  142. package/core/shared/scripts/doflow/bash/do-args.sh +37 -0
  143. package/core/shared/scripts/doflow/bash/do-exec-paths.sh +4 -0
  144. package/core/shared/scripts/doflow/bash/do-git-state.sh +15 -4
  145. package/core/shared/scripts/doflow/bash/do-parallel-check.sh +4 -0
  146. package/core/shared/scripts/doflow/bash/do-paths.sh +40 -2
  147. package/core/shared/scripts/doflow/bash/do-prereqs.sh +2 -1
  148. package/core/shared/scripts/doflow/bash/do-review-package.sh +4 -0
  149. package/core/shared/scripts/doflow/bash/do-task-brief.sh +58 -16
  150. package/core/shared/scripts/doflow/bash/render-audit.sh +26 -2
  151. package/core/shared/scripts/doflow/bash/render-diagrams.sh +1 -0
  152. package/core/shared/scripts/doflow/bash/render-puml.sh +2 -1
  153. package/core/shared/scripts/doflow/bash/validate-artifacts.sh +48 -4
  154. package/core/shared/scripts/doflow/bin/doflow-run +154 -35
  155. package/core/shared/skills/do/SKILL.md +12 -10
  156. package/core/shared/skills/do/references/advice_calls.md +26 -0
  157. package/core/shared/skills/do/references/pm_routing.md +1 -2
  158. package/core/shared/skills/do/references/program_mode.md +31 -0
  159. package/core/shared/skills/do-brainstorm/SKILL.md +20 -74
  160. package/core/shared/skills/do-brainstorm/references/handoff_branches.md +35 -0
  161. package/core/shared/skills/do-brainstorm/references/intent_seed.md +21 -0
  162. package/core/shared/skills/do-brainstorm/references/round_log.md +17 -0
  163. package/core/shared/skills/do-code-review/SKILL.md +41 -144
  164. package/core/shared/skills/do-code-review/content-types/markdown.md +24 -2
  165. package/core/shared/skills/do-code-review/references/tools.md +90 -0
  166. package/core/shared/skills/do-code-review/scripts/doc_quality_checker.py +549 -7
  167. package/core/shared/skills/do-design/SKILL.md +24 -23
  168. package/core/shared/skills/do-diagnose/SKILL.md +14 -4
  169. package/core/shared/skills/do-document/SKILL.md +11 -1
  170. package/core/shared/skills/do-document/references/deep_research.md +1 -2
  171. package/core/shared/skills/do-document/references/embedded-research.md +18 -6
  172. package/core/shared/skills/do-document/references/implementation-flow.md +5 -6
  173. package/core/shared/skills/do-execute-plan/SKILL.md +17 -59
  174. package/core/shared/skills/do-execute-plan/references/handoff_record.md +7 -2
  175. package/core/shared/skills/do-execute-plan/references/parallel_dispatch.md +13 -0
  176. package/core/shared/skills/do-execute-plan/references/readiness_gate.md +28 -1
  177. package/core/shared/skills/do-execute-plan/references/run_position.md +13 -1
  178. package/core/shared/skills/do-execute-plan/references/scaffold.md +17 -9
  179. package/core/shared/skills/do-execute-plan/references/state_checkpoint.md +11 -0
  180. package/core/shared/skills/do-execute-plan/references/task_attempts.md +78 -24
  181. package/core/shared/skills/do-flow/SKILL.md +8 -9
  182. package/core/shared/skills/do-flow/references/task_classes.md +2 -2
  183. package/core/shared/skills/do-git/SKILL.md +4 -0
  184. package/core/shared/skills/do-implement/SKILL.md +7 -9
  185. package/core/shared/skills/do-plan/SKILL.md +29 -19
  186. package/core/shared/skills/do-test/SKILL.md +7 -4
  187. package/core/shared/templates/doflow/constitution-template.md +9 -3
  188. package/core/shared/templates/doflow/data-model-template.md +1 -1
  189. package/core/shared/templates/doflow/design-template.md +113 -16
  190. package/core/shared/templates/doflow/plan-template.md +11 -10
  191. package/core/shared/templates/doflow/question-log-template.md +14 -2
  192. package/core/shared/templates/doflow/requirement-template.md +1 -1
  193. package/core/worker-evidence/antigravity/checks.json +14 -0
  194. package/core/worker-evidence/codex/2026-10-18-cli-check.json +107 -0
  195. package/core/worker-evidence/codex/2026-10-18-live-run-edit.json +73 -0
  196. package/core/worker-evidence/codex/2026-10-18-live-run-read-only.json +62 -0
  197. package/core/worker-evidence/codex/2026-10-24-cli-check.json +126 -0
  198. package/core/worker-evidence/codex/checks.json +38 -0
  199. package/package.json +10 -6
  200. package/src/adapters/antigravity/index.js +226 -113
  201. package/src/adapters/claude/index.js +39 -5
  202. package/src/adapters/codex/agents.js +25 -15
  203. package/src/adapters/codex/hooks.js +40 -5
  204. package/src/adapters/codex/index.js +100 -22
  205. package/src/adapters/codex/native-projection.js +6 -2
  206. package/src/adapters/copilot/index.js +58 -23
  207. package/src/adapters/copy-tree.js +294 -48
  208. package/src/adapters/guidance-manifest.js +71 -0
  209. package/src/adapters/guidance-pointer.js +19 -0
  210. package/src/adapters/hook-commands.js +6 -10
  211. package/src/adapters/index.js +1 -0
  212. package/src/adapters/kiro/index.js +38 -13
  213. package/src/adapters/opencode/index.js +8 -8
  214. package/src/adapters/pi/hooks.js +120 -0
  215. package/src/adapters/pi/index.js +48 -16
  216. package/src/adapters/resolve-source.js +26 -2
  217. package/src/cli/commands/install.js +3 -2
  218. package/src/cli/commands/reconcile.js +53 -9
  219. package/src/cli/commands/remove.js +2 -2
  220. package/src/cli/commands/rollback.js +6 -3
  221. package/src/cli/commands/self-update.js +18 -9
  222. package/src/cli/commands/status.js +21 -2
  223. package/src/cli/commands/ui.js +99 -0
  224. package/src/cli/commands/update.js +3 -2
  225. package/src/cli/index.js +338 -33
  226. package/src/cli/runtime-commands.js +243 -52
  227. package/src/cli/shared.js +0 -2
  228. package/src/helper/git.js +1 -1
  229. package/src/helper/guardrails.js +1 -1
  230. package/src/helper/marker-merge.js +31 -13
  231. package/src/helper/package-ids.js +37 -0
  232. package/src/helper/semver.js +94 -0
  233. package/src/install/backup.js +105 -15
  234. package/src/install/context.js +1 -1
  235. package/src/install/targets.js +31 -16
  236. package/src/lifecycle/coverage.js +74 -0
  237. package/src/lifecycle/hook-step.js +61 -0
  238. package/src/lifecycle/hook-tier.js +160 -0
  239. package/src/lifecycle/index.js +434 -86
  240. package/src/lifecycle/retired-harnesses.js +318 -0
  241. package/src/lifecycle/view.js +35 -15
  242. package/src/registry/index.js +686 -32
  243. package/src/registry/worker-ids.js +45 -0
  244. package/src/release/build-package.js +0 -3
  245. package/src/release/docs-blocks.js +492 -0
  246. package/src/release/preflight.js +425 -0
  247. package/src/release/rehearse.js +401 -0
  248. package/src/release/release-workflow.js +733 -0
  249. package/src/release/sync-plugin-versions.js +43 -7
  250. package/src/runtime/advice/bench-gate.js +25 -0
  251. package/src/runtime/advice/cli.js +59 -16
  252. package/src/runtime/advice/client.js +32 -9
  253. package/src/runtime/advice/config.js +98 -133
  254. package/src/runtime/advice/doctor.js +1 -1
  255. package/src/runtime/advice/elevation.js +97 -0
  256. package/src/runtime/advice/endpoint-guard.js +9 -3
  257. package/src/runtime/advice/mode.js +37 -0
  258. package/src/runtime/advice/record.js +18 -5
  259. package/src/runtime/advice/registry.js +4 -1
  260. package/src/runtime/advice/shadow-config.js +229 -0
  261. package/src/runtime/advice/shadow-dispatcher.js +276 -0
  262. package/src/runtime/brief-rules.js +81 -0
  263. package/src/runtime/brief-tools.js +111 -34
  264. package/src/runtime/candidate.js +514 -0
  265. package/src/runtime/capabilities/executor.js +450 -0
  266. package/src/runtime/capabilities/loopback.js +41 -0
  267. package/src/runtime/capabilities/sanitizer.js +88 -0
  268. package/src/runtime/capability-router.js +135 -3
  269. package/src/runtime/checkouts.js +73 -11
  270. package/src/runtime/claims.js +27 -12
  271. package/src/runtime/cli-result.js +11 -4
  272. package/src/runtime/cli.js +221 -277
  273. package/src/runtime/config-home.js +42 -0
  274. package/src/runtime/context/arbitrate.js +767 -0
  275. package/src/runtime/context/budget.js +203 -0
  276. package/src/runtime/context/compose.js +1367 -0
  277. package/src/runtime/context/delivery-store.js +100 -0
  278. package/src/runtime/context/emission-rules.js +118 -0
  279. package/src/runtime/context/identity.js +227 -0
  280. package/src/runtime/context/mandatory.js +594 -0
  281. package/src/runtime/context/pointer.js +142 -0
  282. package/src/runtime/context/primary-command.js +117 -0
  283. package/src/runtime/context/primary.js +344 -0
  284. package/src/runtime/context/summary-store.js +655 -0
  285. package/src/runtime/context-pack.js +1106 -245
  286. package/src/runtime/decision-register.js +13 -4
  287. package/src/runtime/dispatch/admission.js +392 -0
  288. package/src/runtime/dispatch/attempt-end.js +274 -0
  289. package/src/runtime/dispatch/command.js +628 -0
  290. package/src/runtime/dispatch/controls.js +904 -0
  291. package/src/runtime/dispatch/envelope.js +276 -0
  292. package/src/runtime/dispatch/grants.js +310 -0
  293. package/src/runtime/dispatch/integrate.js +617 -0
  294. package/src/runtime/dispatch/loop.js +1835 -0
  295. package/src/runtime/dispatch/store.js +352 -0
  296. package/src/runtime/dispatch/verify-run.js +201 -0
  297. package/src/runtime/evidence-fields.js +39 -0
  298. package/src/runtime/evidence-ledger.js +41 -7
  299. package/src/runtime/failure/capture.js +3 -1
  300. package/src/runtime/failure/cli.js +25 -9
  301. package/src/runtime/failure/home.js +57 -30
  302. package/src/runtime/failure/store.js +7 -2
  303. package/src/runtime/feature-pointer.js +174 -0
  304. package/src/runtime/feature-resolve.js +13 -2
  305. package/src/runtime/fleet/command.js +77 -0
  306. package/src/runtime/fleet/projects.js +178 -0
  307. package/src/runtime/fleet/tree.js +383 -0
  308. package/src/runtime/freshness.js +77 -10
  309. package/src/runtime/git-memo.js +46 -0
  310. package/src/runtime/guidance/ablation.js +427 -0
  311. package/src/runtime/health.js +565 -17
  312. package/src/runtime/history-compactor.js +13 -3
  313. package/src/runtime/implementation-gate.js +277 -22
  314. package/src/runtime/inventory/coverage.js +1 -1
  315. package/src/runtime/inventory/index.js +1 -1
  316. package/src/runtime/inventory/precedence.js +2 -2
  317. package/src/runtime/inventory/siblings.js +6 -4
  318. package/src/runtime/knowledge/code-corpus.js +277 -0
  319. package/src/runtime/knowledge/code-lexical.js +130 -0
  320. package/src/runtime/knowledge/code-retrieval.js +307 -0
  321. package/src/runtime/knowledge/code-validation.js +106 -0
  322. package/src/runtime/knowledge/gp3-gate.js +74 -0
  323. package/src/runtime/knowledge/graph-adapter.js +288 -0
  324. package/src/runtime/knowledge/graph-fallback.js +394 -0
  325. package/src/runtime/knowledge/hybrid.js +136 -8
  326. package/src/runtime/knowledge/retrieval.js +34 -1
  327. package/src/runtime/knowledge/rtk-compress.js +77 -0
  328. package/src/runtime/knowledge/semble-bridge.py +106 -0
  329. package/src/runtime/knowledge/semble-lifecycle.js +114 -0
  330. package/src/runtime/knowledge/semble-provider.js +365 -0
  331. package/src/runtime/lifecycle/cli.js +16 -6
  332. package/src/runtime/lifecycle/event-store.js +8 -6
  333. package/src/runtime/lifecycle/followup.js +6 -1
  334. package/src/runtime/lifecycle/overview.js +24 -1
  335. package/src/runtime/lifecycle/report-store.js +8 -10
  336. package/src/runtime/lifecycle/retention.js +95 -31
  337. package/src/runtime/lifecycle/root.js +9 -1
  338. package/src/runtime/lifecycle/status.js +34 -17
  339. package/src/runtime/lifecycle/store-upkeep.js +56 -7
  340. package/src/runtime/mask.js +134 -7
  341. package/src/runtime/mcp-consultations.js +40 -6
  342. package/src/runtime/model-router.js +79 -7
  343. package/src/runtime/models/catalogue.js +191 -0
  344. package/src/runtime/models/command.js +153 -0
  345. package/src/runtime/off-words.js +12 -0
  346. package/src/runtime/outcome.js +3 -3
  347. package/src/runtime/packages/command.js +1009 -0
  348. package/src/runtime/packages/contributions.js +116 -0
  349. package/src/runtime/packages/digest.js +132 -0
  350. package/src/runtime/packages/fetch.js +182 -0
  351. package/src/runtime/packages/grants.js +192 -0
  352. package/src/runtime/packages/index-file.js +134 -0
  353. package/src/runtime/packages/instruction.js +90 -0
  354. package/src/runtime/packages/manifest.js +331 -0
  355. package/src/runtime/packages/points.js +477 -0
  356. package/src/runtime/packages/programs.js +216 -0
  357. package/src/runtime/packages/scaffold.js +277 -0
  358. package/src/runtime/packages/source.js +90 -0
  359. package/src/runtime/packages/state.js +164 -0
  360. package/src/runtime/packages/store.js +449 -0
  361. package/src/runtime/packages/tar.js +106 -0
  362. package/src/runtime/packages/view.js +406 -0
  363. package/src/runtime/plan-check.js +59 -0
  364. package/src/runtime/plan-content.js +324 -0
  365. package/src/runtime/policy-init.js +118 -0
  366. package/src/runtime/profiles/doctor.js +96 -0
  367. package/src/runtime/profiles/resolve.js +244 -0
  368. package/src/runtime/profiles/rollback.js +254 -0
  369. package/src/runtime/profiles/sampler.js +41 -0
  370. package/src/runtime/readiness-record.js +16 -11
  371. package/src/runtime/readiness.js +127 -16
  372. package/src/runtime/research-request.js +50 -25
  373. package/src/runtime/retrieval-plan.js +402 -73
  374. package/src/runtime/retrieval-record.js +293 -0
  375. package/src/runtime/review/command.js +246 -0
  376. package/src/runtime/review/dominance.js +68 -0
  377. package/src/runtime/review/findings.js +434 -0
  378. package/src/runtime/review/identity.js +255 -0
  379. package/src/runtime/review/protocol-command.js +109 -0
  380. package/src/runtime/review/protocols.js +405 -0
  381. package/src/runtime/review/resolve-protocol.js +302 -0
  382. package/src/runtime/review/start.js +530 -0
  383. package/src/runtime/roadmap/facts.js +479 -0
  384. package/src/runtime/roadmap/gates.js +270 -0
  385. package/src/runtime/roadmap/loop.js +1636 -0
  386. package/src/runtime/roadmap/merge.js +381 -0
  387. package/src/runtime/roadmap/rows.js +1113 -0
  388. package/src/runtime/roadmap/seed.js +951 -0
  389. package/src/runtime/rules-report.js +336 -0
  390. package/src/runtime/scaffold/artifacts.js +63 -9
  391. package/src/runtime/scaffold/generate.js +21 -9
  392. package/src/runtime/settings/autopilot.js +106 -0
  393. package/src/runtime/settings/cli.js +280 -0
  394. package/src/runtime/settings/config-write.js +314 -0
  395. package/src/runtime/settings/files.js +271 -0
  396. package/src/runtime/settings/legacy.js +154 -0
  397. package/src/runtime/settings/lexical.js +56 -0
  398. package/src/runtime/settings/prepared-run.js +269 -0
  399. package/src/runtime/settings/project-layers.js +118 -0
  400. package/src/runtime/settings/refs.js +288 -0
  401. package/src/runtime/settings/registry.js +553 -0
  402. package/src/runtime/settings/resolve.js +713 -0
  403. package/src/runtime/settings/shared.js +37 -0
  404. package/src/runtime/settings/worker-billing.js +107 -0
  405. package/src/runtime/settings/write.js +269 -0
  406. package/src/runtime/slot-command.js +78 -0
  407. package/src/runtime/slots.js +671 -0
  408. package/src/runtime/source-version.js +290 -0
  409. package/src/runtime/state-root.js +217 -0
  410. package/src/runtime/storage/cli.js +12 -5
  411. package/src/runtime/storage/engine.js +9 -2
  412. package/src/runtime/storage/registry.js +14 -1
  413. package/src/runtime/storage/roots.js +66 -16
  414. package/src/runtime/storage/rules.js +82 -10
  415. package/src/runtime/storage/upkeep.js +10 -2
  416. package/src/runtime/storage/work-status.js +245 -26
  417. package/src/runtime/task-attempts.js +589 -69
  418. package/src/runtime/task-classifier.js +47 -11
  419. package/src/runtime/task-graph.js +373 -0
  420. package/src/runtime/task-run.js +778 -0
  421. package/src/runtime/task-scope.js +202 -56
  422. package/src/runtime/task-sources.js +147 -0
  423. package/src/runtime/task-state.js +440 -65
  424. package/src/runtime/team/admission.js +301 -0
  425. package/src/runtime/team/envelope.js +324 -0
  426. package/src/runtime/team/review-guard.js +156 -0
  427. package/src/runtime/trace/analyze.js +427 -0
  428. package/src/runtime/trace/baseline.js +770 -0
  429. package/src/runtime/trace/ledger.js +63 -140
  430. package/src/runtime/trace/otlp-export.js +568 -0
  431. package/src/runtime/trace/otlp-map.js +481 -0
  432. package/src/runtime/trace/spans.js +745 -0
  433. package/src/runtime/trace/telemetry.js +225 -0
  434. package/src/runtime/trace/views.js +1 -0
  435. package/src/runtime/transcripts/command.js +98 -0
  436. package/src/runtime/transcripts/cursor.js +326 -0
  437. package/src/runtime/transcripts/read.js +126 -0
  438. package/src/runtime/transcripts/readers/claude-jsonl.js +74 -0
  439. package/src/runtime/transcripts/readers/codex-rollout.js +70 -0
  440. package/src/runtime/transcripts/readers/copilot-events.js +90 -0
  441. package/src/runtime/transcripts/readers/kiro-jsonl.js +77 -0
  442. package/src/runtime/transcripts/readers/pi-jsonl.js +59 -0
  443. package/src/runtime/transcripts/registry.js +161 -0
  444. package/src/runtime/transcripts/stats.js +161 -0
  445. package/src/runtime/verification/check-key.js +628 -0
  446. package/src/runtime/verification/contract-runner.js +546 -11
  447. package/src/runtime/verification/engine.js +499 -9
  448. package/src/runtime/verification/impact.js +617 -0
  449. package/src/runtime/verification/inflight.js +205 -0
  450. package/src/runtime/verification/registry.js +176 -0
  451. package/src/runtime/verification/reuse.js +184 -0
  452. package/src/runtime/verification/telemetry-emit.js +254 -0
  453. package/src/runtime/verification/test-selection.js +67 -7
  454. package/src/runtime/worker/active.js +90 -0
  455. package/src/runtime/worker/cancel.js +222 -0
  456. package/src/runtime/worker/catalogue.js +122 -0
  457. package/src/runtime/worker/command.js +677 -0
  458. package/src/runtime/worker/evidence.js +288 -0
  459. package/src/runtime/worker/launch.js +288 -0
  460. package/src/runtime/worker/models.js +137 -0
  461. package/src/runtime/worker/parsers.js +218 -0
  462. package/src/runtime/worker/probes/index.js +706 -0
  463. package/src/runtime/worker/process-tree.js +415 -0
  464. package/src/runtime/worker/quota.js +43 -0
  465. package/src/runtime/worker/readiness.js +713 -0
  466. package/src/runtime/worker/run-store.js +166 -0
  467. package/src/runtime/worker/supervisor.js +541 -0
  468. package/src/runtime/worker/worktree-check.js +252 -0
  469. package/src/runtime/workflow-engine.js +5 -1
  470. package/src/runtime/workflow-orchestrator.js +578 -63
  471. package/src/runtime/worktree.js +149 -22
  472. package/src/state/index.js +1 -1
  473. package/src/state/lockfile.js +64 -10
  474. package/src/state/run-lock.js +1 -1
  475. package/types/node-commonjs.d.ts +106 -7
  476. package/core/.antigravity-plugin/hooks.json +0 -39
  477. package/core/harnesses/gemini/hooks/hooks.json +0 -77
  478. package/core/harnesses/gemini/hooks/lib.sh +0 -302
  479. package/core/harnesses/gemini/hooks/mcp-tool-guard.sh +0 -21
  480. package/core/harnesses/gemini/hooks/post-edit-lint.sh +0 -39
  481. package/core/harnesses/gemini/hooks/pre-bash-guard.sh +0 -21
  482. package/core/harnesses/gemini/hooks/pre-compact.sh +0 -38
  483. package/core/harnesses/gemini/hooks/pre-implement-gate.sh +0 -22
  484. package/core/harnesses/gemini/hooks/session-end.impl.sh +0 -89
  485. package/core/harnesses/gemini/hooks/session-end.sh +0 -5
  486. package/core/harnesses/gemini/hooks/session-start.sh +0 -5
  487. package/core/harnesses/gemini/settings/adapter-defaults.json +0 -4
  488. package/core/harnesses/shared/hooks/adapters/arg-fields.js +0 -19
  489. package/core/harnesses/shared/hooks/adapters/gemini.js +0 -114
  490. package/core/harnesses/shared/hooks/hooks.json +0 -47
  491. package/core/shared/guidance/FLAGS.md +0 -25
  492. package/core/shared/guidance/rules/RULE_01_SAFETY.md +0 -25
  493. package/core/shared/guidance/rules/RULE_02_WORKFLOW.md +0 -23
  494. package/core/shared/guidance/rules/RULE_03_QUALITY.md +0 -14
  495. package/core/shared/guidance/rules/RULE_04_QUESTIONS.md +0 -46
  496. package/src/adapters/gemini/hooks.js +0 -210
  497. package/src/adapters/gemini/index.js +0 -390
@@ -221,6 +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"
285
+ }
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
+ },
395
+ "contextProfile": {
396
+ "capacityTokens": {
397
+ "value": 200000,
398
+ "source": "code.claude.com/docs/en/overview",
399
+ "verifiedOn": "2026-10-20"
400
+ },
401
+ "reserveTokens": {
402
+ "value": 20000,
403
+ "source": "code.claude.com/docs/en/overview",
404
+ "verifiedOn": "2026-10-20"
405
+ },
406
+ "tokenTelemetry": {
407
+ "value": "none",
408
+ "source": "delivery-store.ts:10 (no harness reports token usage directly to external CLI)",
409
+ "verifiedOn": "2026-10-20"
410
+ },
411
+ "toolResultLimitBytes": {
412
+ "value": 524288,
413
+ "source": "code.claude.com/docs/en/hooks",
414
+ "verifiedOn": "2026-10-20"
415
+ },
416
+ "retention": {
417
+ "value": "supported",
418
+ "source": "code.claude.com/docs/en/hooks (transcript replayed on resume)",
419
+ "verifiedOn": "2026-10-20"
224
420
  }
225
421
  },
226
422
  "scopePrecedence": {
@@ -235,6 +431,26 @@
235
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.",
236
432
  "determinedOn": "2026-09-27",
237
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"
238
454
  }
239
455
  },
240
456
  {
@@ -341,7 +557,7 @@
341
557
  "evidence": [
342
558
  "https://learn.chatgpt.com/docs/build-skills"
343
559
  ],
344
- "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."
345
561
  },
346
562
  "agents": {
347
563
  "status": "supported",
@@ -500,239 +716,228 @@
500
716
  "verifiedOn": "2026-10-12",
501
717
  "fallback": "manual",
502
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."
503
- }
504
- },
505
- "scopePrecedence": {
506
- "status": "established",
507
- "order": [
508
- "user",
509
- "project"
510
- ],
511
- "evidence": [
512
- "https://learn.chatgpt.com/docs/agent-configuration/agents-md"
513
- ],
514
- "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.",
515
- "determinedOn": "2026-09-27",
516
- "mode": "last-wins"
517
- }
518
- },
519
- {
520
- "id": "gemini",
521
- "displayName": "Gemini CLI",
522
- "adapter": "gemini",
523
- "scopes": [
524
- "project",
525
- "user"
526
- ],
527
- "nativeTargets": {
528
- "instructions": "GEMINI.md",
529
- "agents": ".gemini/agents",
530
- "hooks": "settings.json"
531
- },
532
- "paths": {
533
- "configDir": {
534
- "project": {
535
- "base": "root",
536
- "segments": [
537
- ".agents"
538
- ]
539
- },
540
- "user": {
541
- "base": "root",
542
- "segments": [
543
- ".gemini",
544
- "config"
545
- ]
546
- }
547
719
  },
548
- "instruction": {
549
- "project": {
550
- "base": "root",
551
- "segments": [
552
- "GEMINI.md"
553
- ]
554
- },
555
- "user": {
556
- "base": "root",
557
- "segments": [
558
- ".gemini",
559
- "GEMINI.md"
560
- ]
561
- }
562
- },
563
- "settings": {
564
- "base": "root",
565
- "segments": [
566
- ".gemini",
567
- "settings.json"
568
- ]
569
- },
570
- "hooksDirectory": {
571
- "base": "root",
572
- "segments": [
573
- ".gemini",
574
- "hooks"
575
- ]
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."
576
727
  }
577
728
  },
578
- "capabilities": {
579
- "instructions": {
580
- "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)",
581
733
  "evidence": [
582
- "https://geminicli.com/docs/cli/gemini-md/"
734
+ "https://learn.chatgpt.com/docs/agent-configuration/subagents"
583
735
  ],
584
- "verification": "Confirm GEMINI.md is loaded by Gemini CLI."
736
+ "verifiedOn": "2026-10-23"
585
737
  },
586
- "skills": {
587
- "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",
588
741
  "evidence": [
589
- "https://geminicli.com/docs/cli/skills/"
742
+ "https://learn.chatgpt.com/docs/agent-configuration/subagents"
590
743
  ],
591
- "verification": "Confirm the installed skill is discoverable."
592
- },
593
- "agents": {
744
+ "verifiedOn": "2026-10-27"
745
+ }
746
+ },
747
+ "worker": {
748
+ "profile": null,
749
+ "billing": "unknown",
750
+ "cli": {
594
751
  "status": "supported",
595
752
  "evidence": [
596
- "https://geminicli.com/docs/core/subagents"
753
+ "bench/inventory/coverage.json → codex --version → codex-cli 0.162.1"
597
754
  ],
598
- "note": "Flat <name>.md files; frontmatter limited to Gemini's documented keys by the gemini-agents transform.",
599
- "verification": "Confirm Gemini CLI lists the installed agents from .gemini/agents."
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
+ ]
600
761
  },
601
- "scripts": {
762
+ "oneShot": {
602
763
  "status": "supported",
603
764
  "evidence": [
604
- "https://geminicli.com/docs/reference/tools",
605
- "https://geminicli.com/docs/cli/creating-skills"
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"
606
768
  ],
607
- "verification": "Confirm run_shell_command executes an installed helper and that a bundled skill scripts/ directory is reachable."
608
- },
609
- "templates": {
610
- "status": "supported",
611
- "evidence": [
612
- "https://geminicli.com/docs/cli/creating-skills",
613
- "https://geminicli.com/docs/cli/skills-best-practices"
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
+ "-"
614
774
  ],
615
- "verification": "Confirm the installed template tree is readable by the agent."
775
+ "promptVia": "stdin"
616
776
  },
617
- "modes": {
618
- "status": "different",
619
- "evidence": [
620
- "https://geminicli.com/docs/cli/gemini-md/"
621
- ],
622
- "verification": "Confirm mode guidance is available through instructions."
623
- },
624
- "settings": {
625
- "status": "different",
626
- "evidence": [
627
- "https://geminicli.com/docs/cli/settings/"
628
- ],
629
- "verification": "Verify only adapter-supported native settings."
630
- },
631
- "hooks": {
777
+ "structuredOutput": {
632
778
  "status": "supported",
633
779
  "evidence": [
634
- "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"
635
783
  ],
636
- "verification": "Exercise one installed hook event.",
637
- "events": {
638
- "SessionStart": {
639
- "status": "supported"
640
- },
641
- "SessionEnd": {
642
- "status": "supported"
643
- },
644
- "BeforeTool": {
645
- "status": "supported"
646
- },
647
- "AfterTool": {
648
- "status": "supported"
649
- },
650
- "PreCompress": {
651
- "status": "supported"
652
- },
653
- "UserPromptSubmit": {
654
- "status": "unavailable",
655
- "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."
656
- },
657
- "Stop": {
658
- "status": "unavailable",
659
- "note": "No exact match; AfterAgent fires at agent-loop end and can halt or retry the turn, which is coarser than Claude's Stop."
660
- },
661
- "SubagentStart": {
662
- "status": "unavailable",
663
- "note": "BeforeAgent/AfterAgent bracket the whole agent loop; they are not subagent lifecycle events."
664
- },
665
- "SubagentStop": {
666
- "status": "unavailable",
667
- "note": "BeforeAgent/AfterAgent bracket the whole agent loop; they are not subagent lifecycle events."
668
- },
669
- "PostToolUseFailure": {
670
- "status": "unavailable",
671
- "note": "AfterTool fires regardless of outcome; failure cannot be isolated."
672
- },
673
- "PermissionDenied": {
674
- "status": "unavailable",
675
- "note": "Gemini exposes no permission-decision event."
676
- }
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": []
677
802
  }
678
803
  },
679
- "mcp": {
680
- "status": "different",
804
+ "readOnly": {
805
+ "status": "supported",
681
806
  "evidence": [
682
- "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"
683
809
  ],
684
- "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
+ ]
685
817
  },
686
- "plugin": {
687
- "status": "different",
688
- "evidence": [
689
- "https://geminicli.com/docs/extensions/"
690
- ],
691
- "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.",
692
- "verification": "Verify extensions through the native host workflow."
693
- }
694
- },
695
- "orchestration": {
696
- "spawn": {
818
+ "spawnDenial": {
697
819
  "status": "supported",
698
820
  "evidence": [
699
- "https://geminicli.com/docs/core/subagents → \"When the main agent calls the tool, it delegates the task to the subagent.\"",
700
- "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"
701
824
  ],
702
- "verification": "Prompt with @<subagent> and confirm the subagent runs.",
703
- "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
+ ]
704
833
  },
705
- "wait": {
834
+ "runnableProbe": {
706
835
  "status": "supported",
707
836
  "evidence": [
708
- "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"
709
838
  ],
710
- "verification": "Delegate a task and confirm the main agent continues from the subagent report.",
711
- "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
+ ]
712
845
  },
713
- "status": {
846
+ "hooksProbe": {
714
847
  "status": "unknown",
715
848
  "evidence": [],
716
- "verification": "Re-read https://geminicli.com/docs/core/subagents and the Gemini CLI changelog for a status operation.",
717
- "verifiedOn": "2026-10-12",
718
- "fallback": "sequential",
719
- "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"
720
852
  },
721
- "cancel": {
853
+ "guidanceProbe": {
722
854
  "status": "unknown",
723
855
  "evidence": [],
724
- "verification": "Re-read https://geminicli.com/docs/core/subagents for a stop operation.",
725
- "verifiedOn": "2026-10-12",
726
- "fallback": "sequential",
727
- "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"
728
873
  },
729
874
  "resume": {
730
875
  "status": "unknown",
731
876
  "evidence": [],
732
- "verification": "Re-read https://geminicli.com/docs/core/subagents for a resume operation.",
733
- "verifiedOn": "2026-10-12",
734
- "fallback": "manual",
735
- "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."
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": []
915
+ },
916
+ "contextProfile": {
917
+ "capacityTokens": {
918
+ "value": 200000,
919
+ "source": "developers.openai.com/api/docs/guides/prompt-caching",
920
+ "verifiedOn": "2026-10-20"
921
+ },
922
+ "reserveTokens": {
923
+ "value": 20000,
924
+ "source": "model_auto_compact_token_limit config reference",
925
+ "verifiedOn": "2026-10-20"
926
+ },
927
+ "tokenTelemetry": {
928
+ "value": "none",
929
+ "source": "delivery-store.ts:10",
930
+ "verifiedOn": "2026-10-20"
931
+ },
932
+ "toolResultLimitBytes": {
933
+ "value": 1048576,
934
+ "source": "codex-cli 0.163.0 exec stdout buffer limit",
935
+ "verifiedOn": "2026-10-20"
936
+ },
937
+ "retention": {
938
+ "value": "unsupported",
939
+ "source": "session transcript inspection (git context developer-role message ephemeral)",
940
+ "verifiedOn": "2026-10-20"
736
941
  }
737
942
  },
738
943
  "scopePrecedence": {
@@ -742,11 +947,32 @@
742
947
  "project"
743
948
  ],
744
949
  "evidence": [
745
- "https://geminicli.com/docs/cli/gemini-md/"
950
+ "https://learn.chatgpt.com/docs/agent-configuration/agents-md"
746
951
  ],
747
- "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.",
748
953
  "determinedOn": "2026-09-27",
749
- "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"
750
976
  }
751
977
  },
752
978
  {
@@ -862,7 +1088,7 @@
862
1088
  "evidence": [
863
1089
  "https://opencode.ai/docs/agents"
864
1090
  ],
865
- "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.",
866
1092
  "verification": "Confirm a native agent under .opencode/agents/ or ~/.config/opencode/agents/ is selectable (Tab cycles primary agents; @ mentions invoke subagents)."
867
1093
  },
868
1094
  "scripts": {
@@ -1013,6 +1239,201 @@
1013
1239
  "verifiedOn": "2026-10-12",
1014
1240
  "fallback": "manual",
1015
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"
1302
+ }
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
+ },
1412
+ "contextProfile": {
1413
+ "capacityTokens": {
1414
+ "value": 128000,
1415
+ "source": "opencode documentation default context window",
1416
+ "verifiedOn": "2026-10-20"
1417
+ },
1418
+ "reserveTokens": {
1419
+ "value": 10000,
1420
+ "source": "opencode documentation default context reserve",
1421
+ "verifiedOn": "2026-10-20"
1422
+ },
1423
+ "tokenTelemetry": {
1424
+ "value": "none",
1425
+ "source": "delivery-store.ts:10",
1426
+ "verifiedOn": "2026-10-20"
1427
+ },
1428
+ "toolResultLimitBytes": {
1429
+ "value": 262144,
1430
+ "source": "opencode cli stdout limits",
1431
+ "verifiedOn": "2026-10-20"
1432
+ },
1433
+ "retention": {
1434
+ "value": "unsupported",
1435
+ "source": "core/registry/harnesses.json:1311-1317 (no hook projection)",
1436
+ "verifiedOn": "2026-10-20"
1016
1437
  }
1017
1438
  },
1018
1439
  "scopePrecedence": {
@@ -1027,6 +1448,21 @@
1027
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.",
1028
1449
  "determinedOn": "2026-09-27",
1029
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"
1030
1466
  }
1031
1467
  },
1032
1468
  {
@@ -1039,7 +1475,6 @@
1039
1475
  ],
1040
1476
  "nativeTargets": {
1041
1477
  "instructions": "AGENTS.md",
1042
- "settings": ".pi/settings.json",
1043
1478
  "mcp": ".pi/mcp.json"
1044
1479
  },
1045
1480
  "paths": {
@@ -1058,23 +1493,6 @@
1058
1493
  ]
1059
1494
  }
1060
1495
  },
1061
- "settings": {
1062
- "project": {
1063
- "base": "root",
1064
- "segments": [
1065
- ".pi",
1066
- "settings.json"
1067
- ]
1068
- },
1069
- "user": {
1070
- "base": "root",
1071
- "segments": [
1072
- ".pi",
1073
- "agent",
1074
- "settings.json"
1075
- ]
1076
- }
1077
- },
1078
1496
  "instruction": {
1079
1497
  "project": {
1080
1498
  "base": "root",
@@ -1155,51 +1573,53 @@
1155
1573
  "verification": "Confirm mode guidance is available through instructions."
1156
1574
  },
1157
1575
  "settings": {
1158
- "status": "supported",
1576
+ "status": "unavailable",
1159
1577
  "evidence": [
1160
1578
  "https://pi.dev/docs/latest/settings"
1161
1579
  ],
1162
- "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."
1163
1582
  },
1164
1583
  "hooks": {
1165
1584
  "status": "different",
1166
1585
  "evidence": [
1167
- "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"
1168
1588
  ],
1169
- "note": "Pi lifecycle hooks are TypeScript extension modules registered through pi.on(), executing arbitrary code with full permissions — a different trust model from the shell hooks DoFlow ships, so no hook projection is attempted.",
1170
- "verification": "Report that DoFlow installs no Pi extension and its shell hooks do not apply here.",
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.",
1590
+ "verification": "Verify the installed extension fingerprint, resolved shared bridge path, bash/jq prerequisites, and the project-trust prerequisite for project scope.",
1171
1591
  "events": {
1172
1592
  "SessionStart": {
1173
1593
  "status": "different",
1174
- "note": "DoFlow projects shell hooks; Pi requires a code module, so no hook is installed. Native equivalent: session_start, which carries reason:\"reload\" on /reload."
1594
+ "note": "DoFlow does not project a hook for this event; its separate code extension guards tool_call. Native equivalent: session_start, which carries reason:\"reload\" on /reload."
1175
1595
  },
1176
1596
  "SessionEnd": {
1177
1597
  "status": "different",
1178
- "note": "DoFlow projects shell hooks; Pi requires a code module, so no hook is installed. Native equivalent: session_shutdown."
1598
+ "note": "DoFlow does not project a hook for this event; its separate code extension guards tool_call. Native equivalent: session_shutdown."
1179
1599
  },
1180
1600
  "UserPromptSubmit": {
1181
1601
  "status": "different",
1182
- "note": "DoFlow projects shell hooks; Pi requires a code module, so no hook is installed. Native equivalent: input, which fires before skill expansion. DoFlow's once-per-session `/do` suggestion is not hook-delivered here and reaches this harness through skill descriptions only."
1602
+ "note": "DoFlow does not project a prompt hook; its separate code extension guards tool_call. Native equivalent: input, which fires before skill expansion. DoFlow's once-per-session `/do` suggestion reaches this harness through skill descriptions only."
1183
1603
  },
1184
1604
  "PreCompact": {
1185
1605
  "status": "different",
1186
- "note": "DoFlow projects shell hooks; Pi requires a code module, so no hook is installed. Native equivalent: session_before_compact, which may cancel or supply a summary."
1606
+ "note": "DoFlow does not project a hook for this event; its separate code extension guards tool_call. Native equivalent: session_before_compact, which may cancel or supply a summary."
1187
1607
  },
1188
1608
  "PostCompact": {
1189
1609
  "status": "different",
1190
- "note": "DoFlow projects shell hooks; Pi requires a code module, so no hook is installed. 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)."
1191
1611
  },
1192
1612
  "PreToolUse": {
1193
1613
  "status": "different",
1194
- "note": "DoFlow projects shell hooks; Pi requires a code module, so no hook is installed. Native equivalent: tool_execution_start, exposed through session.subscribe rather than pi.on."
1614
+ "note": "DoFlow's user- or project-scope extension evaluates tool_call before execution; tool_execution_start is observation-only."
1195
1615
  },
1196
1616
  "PostToolUse": {
1197
1617
  "status": "different",
1198
- "note": "DoFlow projects shell hooks; Pi requires a code module, so no hook is installed. Native equivalent: tool_execution_end, exposed through session.subscribe rather than pi.on."
1618
+ "note": "DoFlow does not register Pi tool_execution_end."
1199
1619
  },
1200
1620
  "Stop": {
1201
1621
  "status": "different",
1202
- "note": "DoFlow projects shell hooks; Pi requires a code module, so no hook is installed. Native equivalent: agent_end."
1622
+ "note": "DoFlow does not project a hook for this event; its separate code extension guards tool_call. Native equivalent: agent_end."
1203
1623
  },
1204
1624
  "SubagentStart": {
1205
1625
  "status": "unavailable",
@@ -1228,9 +1648,9 @@
1228
1648
  "evidence": [
1229
1649
  "https://pi.dev/docs/latest/mcp",
1230
1650
  "https://github.com/earendil-works/pi/blob/main/packages/coding-agent/docs/mcp.md",
1231
- "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"
1232
1652
  ],
1233
- "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.",
1234
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."
1235
1655
  },
1236
1656
  "plugin": {
@@ -1283,6 +1703,166 @@
1283
1703
  "verifiedOn": "2026-10-12",
1284
1704
  "fallback": "manual",
1285
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": {
1833
+ "status": "unknown",
1834
+ "evidence": [],
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": []
1840
+ },
1841
+ "contextProfile": {
1842
+ "capacityTokens": {
1843
+ "value": 128000,
1844
+ "source": "pi-mono coding-agent documentation",
1845
+ "verifiedOn": "2026-10-20"
1846
+ },
1847
+ "reserveTokens": {
1848
+ "value": 10000,
1849
+ "source": "pi-mono coding-agent documentation",
1850
+ "verifiedOn": "2026-10-20"
1851
+ },
1852
+ "tokenTelemetry": {
1853
+ "value": "none",
1854
+ "source": "delivery-store.ts:10",
1855
+ "verifiedOn": "2026-10-20"
1856
+ },
1857
+ "toolResultLimitBytes": {
1858
+ "value": 262144,
1859
+ "source": "pi extension runner stdout limits",
1860
+ "verifiedOn": "2026-10-20"
1861
+ },
1862
+ "retention": {
1863
+ "value": "unsupported",
1864
+ "source": "pi/extensions/doflow-guard.js:128-158 (no sendMessage/context event used)",
1865
+ "verifiedOn": "2026-10-20"
1286
1866
  }
1287
1867
  },
1288
1868
  "scopePrecedence": {
@@ -1293,6 +1873,23 @@
1293
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.",
1294
1874
  "determinedOn": "2026-09-27",
1295
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"
1296
1893
  }
1297
1894
  },
1298
1895
  {
@@ -1306,7 +1903,8 @@
1306
1903
  "nativeTargets": {
1307
1904
  "instructions": ".github/copilot-instructions.md",
1308
1905
  "agents": ".github/agents",
1309
- "mcp": ".mcp.json"
1906
+ "mcp": ".mcp.json",
1907
+ "hooks": ".github/hooks"
1310
1908
  },
1311
1909
  "paths": {
1312
1910
  "skillsConfigDir": {
@@ -1370,23 +1968,37 @@
1370
1968
  "project": {
1371
1969
  "base": "root",
1372
1970
  "segments": [
1373
- ".github",
1374
- "copilot-instructions.md"
1971
+ ".github",
1972
+ "copilot-instructions.md"
1973
+ ]
1974
+ }
1975
+ },
1976
+ "mcp": {
1977
+ "project": {
1978
+ "base": "root",
1979
+ "segments": [
1980
+ ".mcp.json"
1981
+ ]
1982
+ },
1983
+ "user": {
1984
+ "base": "root",
1985
+ "segments": [
1986
+ ".copilot",
1987
+ "mcp-config.json"
1375
1988
  ]
1376
1989
  }
1377
1990
  },
1378
- "mcp": {
1991
+ "hooksConfigDir": {
1379
1992
  "project": {
1380
1993
  "base": "root",
1381
1994
  "segments": [
1382
- ".mcp.json"
1995
+ ".github"
1383
1996
  ]
1384
1997
  },
1385
1998
  "user": {
1386
1999
  "base": "root",
1387
2000
  "segments": [
1388
- ".copilot",
1389
- "mcp-config.json"
2001
+ ".copilot"
1390
2002
  ]
1391
2003
  }
1392
2004
  }
@@ -1396,6 +2008,7 @@
1396
2008
  "status": "supported",
1397
2009
  "evidence": [
1398
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",
1399
2012
  "https://docs.github.com/en/copilot/how-tos/copilot-cli/customize-copilot/add-custom-instructions"
1400
2013
  ],
1401
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."
@@ -1413,7 +2026,7 @@
1413
2026
  "https://docs.github.com/en/copilot/how-tos/copilot-cli/customize-copilot/create-custom-agents-for-cli",
1414
2027
  "https://docs.github.com/en/copilot/reference/custom-agents-configuration"
1415
2028
  ],
1416
- "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.",
1417
2030
  "verification": "Confirm an installed custom agent under ~/.copilot/agents or .github/agents is discoverable and selectable by Copilot CLI."
1418
2031
  },
1419
2032
  "scripts": {
@@ -1439,61 +2052,61 @@
1439
2052
  "verification": "Confirm mode guidance is available through instructions."
1440
2053
  },
1441
2054
  "settings": {
1442
- "status": "supported",
2055
+ "status": "unavailable",
1443
2056
  "evidence": [
1444
2057
  "https://docs.github.com/en/copilot/reference/copilot-cli-reference/cli-config-dir-reference"
1445
2058
  ],
1446
- "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.",
1447
- "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."
1448
2061
  },
1449
2062
  "hooks": {
1450
- "status": "different",
2063
+ "status": "supported",
1451
2064
  "evidence": [
1452
2065
  "https://docs.github.com/en/copilot/how-tos/copilot-cli/customize-copilot/use-hooks",
1453
2066
  "https://docs.github.com/en/copilot/reference/hooks-reference"
1454
2067
  ],
1455
- "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.",
1456
- "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.",
1457
2070
  "events": {
1458
2071
  "SessionStart": {
1459
- "status": "different",
1460
- "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."
1461
2074
  },
1462
2075
  "SessionEnd": {
1463
2076
  "status": "different",
1464
- "note": "Native sessionEnd exists; same payload-schema caveat."
2077
+ "note": "Native sessionEnd exists (captured); no DoFlow policy is wired to it."
1465
2078
  },
1466
2079
  "PreToolUse": {
1467
- "status": "different",
1468
- "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."
1469
2082
  },
1470
2083
  "PostToolUse": {
1471
2084
  "status": "different",
1472
- "note": "Native postToolUse can rewrite results/inject context; not projected."
2085
+ "note": "Native postToolUse exists (captured); not projected."
1473
2086
  },
1474
2087
  "PostToolUseFailure": {
1475
2088
  "status": "different",
1476
- "note": "Native postToolUseFailure exists — a failure-only event Claude lacks a direct name for."
2089
+ "note": "Native postToolUseFailure exists; not projected."
1477
2090
  },
1478
2091
  "Stop": {
1479
- "status": "different",
1480
- "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."
1481
2094
  },
1482
2095
  "UserPromptSubmit": {
1483
2096
  "status": "different",
1484
- "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."
1485
2098
  },
1486
2099
  "PreCompact": {
1487
2100
  "status": "different",
1488
- "note": "Native preCompact exists."
2101
+ "note": "Native preCompact exists; not projected."
1489
2102
  },
1490
2103
  "SubagentStart": {
1491
- "status": "different",
1492
- "note": "Native subagentStart/subagentStop exist."
2104
+ "status": "supported",
2105
+ "note": "Native subagentStart -> subagent-audit (captured; payload carries agentId, agentType, parentAgentId)."
1493
2106
  },
1494
2107
  "SubagentStop": {
1495
- "status": "different",
1496
- "note": "Native subagentStart/subagentStop exist."
2108
+ "status": "supported",
2109
+ "note": "Native subagentStop -> subagent-audit (captured; the payload carries the subagent's response)."
1497
2110
  },
1498
2111
  "PermissionDenied": {
1499
2112
  "status": "unavailable",
@@ -1558,6 +2171,198 @@
1558
2171
  "verifiedOn": "2026-10-12",
1559
2172
  "fallback": "manual",
1560
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"
2231
+ }
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
+ },
2341
+ "contextProfile": {
2342
+ "capacityTokens": {
2343
+ "value": 128000,
2344
+ "source": "github copilot cli specifications",
2345
+ "verifiedOn": "2026-10-20"
2346
+ },
2347
+ "reserveTokens": {
2348
+ "value": 10000,
2349
+ "source": "github copilot cli specifications",
2350
+ "verifiedOn": "2026-10-20"
2351
+ },
2352
+ "tokenTelemetry": {
2353
+ "value": "none",
2354
+ "source": "delivery-store.ts:10",
2355
+ "verifiedOn": "2026-10-20"
2356
+ },
2357
+ "toolResultLimitBytes": {
2358
+ "value": 262144,
2359
+ "source": "copilot cli execution runner limits",
2360
+ "verifiedOn": "2026-10-20"
2361
+ },
2362
+ "retention": {
2363
+ "value": "unsupported",
2364
+ "source": "core/registry/harnesses.json:2115 (unwired hooks)",
2365
+ "verifiedOn": "2026-10-20"
1561
2366
  }
1562
2367
  },
1563
2368
  "scopePrecedence": {
@@ -1572,6 +2377,21 @@
1572
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.",
1573
2378
  "determinedOn": "2026-09-27",
1574
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"
1575
2395
  }
1576
2396
  },
1577
2397
  {
@@ -1654,7 +2474,7 @@
1654
2474
  "evidence": [
1655
2475
  "https://kiro.dev/docs/custom-agents/configuration-reference/"
1656
2476
  ],
1657
- "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`.",
1658
2478
  "verification": "Confirm an installed custom agent under .kiro/agents is discoverable by Kiro."
1659
2479
  },
1660
2480
  "scripts": {
@@ -1694,14 +2514,25 @@
1694
2514
  "evidence": [
1695
2515
  "https://kiro.dev/docs/hooks/",
1696
2516
  "https://kiro.dev/docs/hooks/actions/",
2517
+ "https://kiro.dev/docs/hooks/types/",
1697
2518
  "https://kiro.dev/docs/permissions/"
1698
2519
  ],
1699
- "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.",
1700
- "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.",
1701
2522
  "events": {
1702
2523
  "UserPromptSubmit": {
1703
2524
  "status": "different",
1704
- "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."
2526
+ },
2527
+ "SessionStart": {
2528
+ "status": "supported"
2529
+ },
2530
+ "PreToolUse": {
2531
+ "status": "supported"
2532
+ },
2533
+ "Stop": {
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."
1705
2536
  }
1706
2537
  }
1707
2538
  },
@@ -1761,6 +2592,196 @@
1761
2592
  "verifiedOn": "2026-10-12",
1762
2593
  "fallback": "manual",
1763
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."
2603
+ }
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
+ },
2760
+ "contextProfile": {
2761
+ "capacityTokens": {
2762
+ "value": 128000,
2763
+ "source": "kiro agent documentation",
2764
+ "verifiedOn": "2026-10-20"
2765
+ },
2766
+ "reserveTokens": {
2767
+ "value": 10000,
2768
+ "source": "kiro agent documentation",
2769
+ "verifiedOn": "2026-10-20"
2770
+ },
2771
+ "tokenTelemetry": {
2772
+ "value": "none",
2773
+ "source": "delivery-store.ts:10",
2774
+ "verifiedOn": "2026-10-20"
2775
+ },
2776
+ "toolResultLimitBytes": {
2777
+ "value": 262144,
2778
+ "source": "kiro agent cli limits",
2779
+ "verifiedOn": "2026-10-20"
2780
+ },
2781
+ "retention": {
2782
+ "value": "unsupported",
2783
+ "source": "core/registry/harnesses.json (SessionStart side-effects only)",
2784
+ "verifiedOn": "2026-10-20"
1764
2785
  }
1765
2786
  },
1766
2787
  "scopePrecedence": {
@@ -1776,6 +2797,21 @@
1776
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.",
1777
2798
  "determinedOn": "2026-09-27",
1778
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"
1779
2815
  }
1780
2816
  },
1781
2817
  {
@@ -1814,6 +2850,13 @@
1814
2850
  "segments": [
1815
2851
  "AGENTS.md"
1816
2852
  ]
2853
+ },
2854
+ "user": {
2855
+ "base": "root",
2856
+ "segments": [
2857
+ ".gemini",
2858
+ "GEMINI.md"
2859
+ ]
1817
2860
  }
1818
2861
  },
1819
2862
  "mcpFile": {
@@ -1908,16 +2951,17 @@
1908
2951
  "skills": {
1909
2952
  "status": "supported",
1910
2953
  "evidence": [
1911
- "https://antigravity.google/docs/cli/plugins",
1912
- "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"
1913
2957
  ],
1914
- "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).",
1915
2959
  "verification": "Confirm the skill is discoverable by agy from .agents/skills."
1916
2960
  },
1917
2961
  "agents": {
1918
2962
  "status": "supported",
1919
2963
  "evidence": [
1920
- "https://antigravity.google/docs/cli/subagents"
2964
+ "https://antigravity.google/docs/subagents?tab=cli"
1921
2965
  ],
1922
2966
  "note": "Shared agent-spec frontmatter (name, description) is a compatible subset of Antigravity's subagent schema; body becomes the system prompt.",
1923
2967
  "verification": "Confirm invoke_subagent reaches the installed agent definition."
@@ -1925,7 +2969,7 @@
1925
2969
  "scripts": {
1926
2970
  "status": "supported",
1927
2971
  "evidence": [
1928
- "https://antigravity.google/docs/cli/plugins",
2972
+ "https://antigravity.google/docs/plugins?tab=cli",
1929
2973
  "https://antigravity.google/docs/skills"
1930
2974
  ],
1931
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).",
@@ -1934,21 +2978,21 @@
1934
2978
  "templates": {
1935
2979
  "status": "different",
1936
2980
  "evidence": [
1937
- "https://antigravity.google/docs/cli/plugins"
2981
+ "https://antigravity.google/docs/plugins?tab=cli"
1938
2982
  ],
1939
2983
  "verification": "Report that template access arrives through skill bundles, not a projected tree."
1940
2984
  },
1941
2985
  "modes": {
1942
2986
  "status": "different",
1943
2987
  "evidence": [
1944
- "https://antigravity.google/docs/rules-workflows"
2988
+ "https://antigravity.google/docs/rules"
1945
2989
  ],
1946
2990
  "verification": "Report that mode guidance rides the instructions pointer; .agents/rules projection is future work."
1947
2991
  },
1948
2992
  "settings": {
1949
2993
  "status": "unavailable",
1950
2994
  "evidence": [
1951
- "https://antigravity.google/docs/cli/settings"
2995
+ "https://antigravity.google/docs/settings?tab=cli"
1952
2996
  ],
1953
2997
  "note": "Settings live only at user scope (~/.gemini/antigravity-cli/settings.json); no project settings tier exists.",
1954
2998
  "verification": "Report the capability gap; never write that file."
@@ -1958,9 +3002,13 @@
1958
3002
  "evidence": [
1959
3003
  "https://antigravity.google/docs/hooks/"
1960
3004
  ],
1961
- "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.",
1962
3006
  "verification": "Report that no Antigravity hook is installed.",
1963
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
+ },
1964
3012
  "PreToolUse": {
1965
3013
  "status": "supported",
1966
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."
@@ -1979,7 +3027,7 @@
1979
3027
  },
1980
3028
  "Stop": {
1981
3029
  "status": "supported",
1982
- "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."
1983
3031
  },
1984
3032
  "UserPromptSubmit": {
1985
3033
  "status": "unavailable",
@@ -1990,7 +3038,7 @@
1990
3038
  "mcp": {
1991
3039
  "status": "supported",
1992
3040
  "evidence": [
1993
- "https://antigravity.google/docs/cli/mcp"
3041
+ "https://antigravity.google/docs/mcp?tab=cli"
1994
3042
  ],
1995
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.",
1996
3044
  "verification": "Confirm selected MCP servers appear via /mcp in agy."
@@ -1998,9 +3046,9 @@
1998
3046
  "plugin": {
1999
3047
  "status": "different",
2000
3048
  "evidence": [
2001
- "https://antigravity.google/docs/cli/plugins"
3049
+ "https://antigravity.google/docs/plugins?tab=cli"
2002
3050
  ],
2003
- "note": "Local-path plugin installs only; DoFlow publishes none.",
3051
+ "note": "Marketplace and local-path directory plugin installs; DoFlow publishes none.",
2004
3052
  "verification": "Report that no plugin is installed."
2005
3053
  }
2006
3054
  },
@@ -2044,6 +3092,167 @@
2044
3092
  ],
2045
3093
  "verification": "Message an Idle subagent and confirm it returns to Running.",
2046
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"
3121
+ }
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
+ },
3231
+ "contextProfile": {
3232
+ "capacityTokens": {
3233
+ "value": 1000000,
3234
+ "source": "gemini-compatible proxy configuration",
3235
+ "verifiedOn": "2026-10-20"
3236
+ },
3237
+ "reserveTokens": {
3238
+ "value": 50000,
3239
+ "source": "gemini-compatible proxy configuration",
3240
+ "verifiedOn": "2026-10-20"
3241
+ },
3242
+ "tokenTelemetry": {
3243
+ "value": "none",
3244
+ "source": "delivery-store.ts:10",
3245
+ "verifiedOn": "2026-10-20"
3246
+ },
3247
+ "toolResultLimitBytes": {
3248
+ "value": 1048576,
3249
+ "source": "antigravity hook runner buffer",
3250
+ "verifiedOn": "2026-10-20"
3251
+ },
3252
+ "retention": {
3253
+ "value": "unsupported",
3254
+ "source": "shared/hooks/adapters/antigravity.js:55-61 (empty injectSteps)",
3255
+ "verifiedOn": "2026-10-20"
2047
3256
  }
2048
3257
  },
2049
3258
  "scopePrecedence": {
@@ -2051,11 +3260,67 @@
2051
3260
  "evidence": [
2052
3261
  "https://antigravity.google/docs/skills/",
2053
3262
  "https://antigravity.google/docs/subagents",
2054
- "https://antigravity.google/docs/cli/mcp"
3263
+ "https://antigravity.google/docs/mcp?tab=cli"
2055
3264
  ],
2056
- "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.",
2057
3266
  "determinedOn": "2026-09-27",
2058
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
+ ]
2059
3324
  }
2060
3325
  }
2061
3326
  ]