cool-workflow 0.1.97 → 0.2.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 (309) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/.codex-plugin/plugin.json +1 -1
  3. package/README.md +11 -2
  4. package/apps/architecture-review/app.json +1 -1
  5. package/apps/architecture-review-fast/app.json +1 -1
  6. package/apps/end-to-end-golden-path/app.json +1 -1
  7. package/apps/pr-review-fix-ci/app.json +1 -1
  8. package/apps/release-cut/app.json +1 -1
  9. package/apps/research-synthesis/app.json +1 -1
  10. package/dist/cli/dispatch.js +236 -0
  11. package/dist/cli/entry.js +120 -0
  12. package/dist/cli/io.js +21 -4
  13. package/dist/cli/parseargv.js +157 -0
  14. package/dist/cli.js +6 -33
  15. package/dist/core/capability-table.js +3534 -0
  16. package/dist/core/format/help.js +314 -0
  17. package/dist/{state-explosion/format.js → core/format/state-explosion-text.js} +10 -1
  18. package/dist/core/hash.js +137 -0
  19. package/dist/core/multi-agent/candidate-scoring.js +219 -0
  20. package/dist/core/multi-agent/collaboration.js +481 -0
  21. package/dist/core/multi-agent/coordinator.js +515 -0
  22. package/dist/core/multi-agent/eval-replay.js +306 -0
  23. package/dist/core/multi-agent/runtime.js +929 -0
  24. package/dist/core/multi-agent/topology.js +298 -0
  25. package/dist/core/multi-agent/trust-policy.js +197 -0
  26. package/dist/core/pipeline/commit-gate.js +320 -0
  27. package/dist/{pipeline-contract.js → core/pipeline/contract.js} +24 -37
  28. package/dist/core/pipeline/dispatch.js +103 -0
  29. package/dist/core/pipeline/drive-decide.js +227 -0
  30. package/dist/core/pipeline/error-feedback.js +161 -0
  31. package/dist/core/pipeline/loop-expansion.js +124 -0
  32. package/dist/{result-normalize.js → core/pipeline/result-normalize.js} +14 -37
  33. package/dist/core/pipeline/runner.js +230 -0
  34. package/dist/{contract-migration.js → core/state/contract-migration.js} +68 -92
  35. package/dist/{state-migrations.js → core/state/migrations.js} +103 -96
  36. package/dist/core/state/node-projection.js +95 -0
  37. package/dist/core/state/node-snapshot.js +230 -0
  38. package/dist/core/state/run-paths.js +93 -0
  39. package/dist/{schema-validate.js → core/state/schema-validate.js} +35 -28
  40. package/dist/core/state/schema.js +50 -0
  41. package/dist/core/state/state-explosion/digest.js +243 -0
  42. package/dist/core/state/state-explosion/graph.js +527 -0
  43. package/dist/{state-explosion → core/state/state-explosion}/helpers.js +34 -3
  44. package/dist/core/state/state-explosion/report.js +187 -0
  45. package/dist/{state-explosion → core/state/state-explosion}/size.js +25 -7
  46. package/dist/{state-node.js → core/state/state-node.js} +90 -113
  47. package/dist/core/state/types.js +19 -0
  48. package/dist/{validation.js → core/state/validation.js} +64 -131
  49. package/dist/core/trust/evidence-grounding.js +134 -0
  50. package/dist/core/trust/ledger.js +199 -0
  51. package/dist/{telemetry-attestation.js → core/trust/telemetry-attestation.js} +94 -68
  52. package/dist/core/trust/telemetry-ledger.js +127 -0
  53. package/dist/core/types.js +20 -0
  54. package/dist/core/version.js +16 -0
  55. package/dist/{workflow-app-framework.js → core/workflow-apps/app-schema.js} +337 -426
  56. package/dist/mcp/dispatch.js +104 -0
  57. package/dist/mcp/server.js +144 -0
  58. package/dist/mcp-server.js +6 -84
  59. package/dist/{agent-config.js → shell/agent-config.js} +118 -71
  60. package/dist/shell/app-run-cli.js +88 -0
  61. package/dist/shell/audit-cli.js +259 -0
  62. package/dist/shell/audit-provenance.js +83 -0
  63. package/dist/shell/candidate-scoring-io.js +459 -0
  64. package/dist/shell/collaboration-io.js +264 -0
  65. package/dist/shell/commit-summary.js +104 -0
  66. package/dist/shell/commit.js +290 -0
  67. package/dist/shell/coordinator-io.js +476 -0
  68. package/dist/shell/demo-cli.js +19 -0
  69. package/dist/shell/dispatch.js +162 -0
  70. package/dist/{doctor.js → shell/doctor.js} +123 -56
  71. package/dist/shell/drive.js +873 -0
  72. package/dist/shell/error-feedback-io.js +305 -0
  73. package/dist/shell/eval-io.js +473 -0
  74. package/dist/{multi-agent-eval/format.js → shell/eval-text.js} +78 -49
  75. package/dist/{evidence-reasoning.js → shell/evidence-reasoning.js} +124 -255
  76. package/dist/shell/exec-backend-cli.js +88 -0
  77. package/dist/shell/execution-backend/agent.js +475 -0
  78. package/dist/shell/execution-backend/ci.js +15 -0
  79. package/dist/shell/execution-backend/container.js +69 -0
  80. package/dist/shell/execution-backend/envelopes.js +55 -0
  81. package/dist/shell/execution-backend/local.js +113 -0
  82. package/dist/shell/execution-backend/probes.js +175 -0
  83. package/dist/shell/execution-backend/registry.js +402 -0
  84. package/dist/shell/execution-backend/remote.js +128 -0
  85. package/dist/shell/execution-backend/types.js +11 -0
  86. package/dist/shell/feedback-cli.js +81 -0
  87. package/dist/shell/feedback-operations.js +48 -0
  88. package/dist/shell/fs-atomic.js +276 -0
  89. package/dist/shell/harness.js +98 -0
  90. package/dist/shell/ledger-cli.js +212 -0
  91. package/dist/shell/ledger-io.js +169 -0
  92. package/dist/shell/man-cli.js +89 -0
  93. package/dist/shell/metrics-cli.js +98 -0
  94. package/dist/shell/multi-agent-cli.js +1002 -0
  95. package/dist/shell/multi-agent-host.js +563 -0
  96. package/dist/shell/multi-agent-io.js +387 -0
  97. package/dist/{multi-agent-operator-ux.js → shell/multi-agent-operator-ux.js} +234 -191
  98. package/dist/shell/node-store.js +124 -0
  99. package/dist/{observability/format.js → shell/observability-format.js} +7 -1
  100. package/dist/{observability/intake.js → shell/observability-intake.js} +79 -56
  101. package/dist/{observability.js → shell/observability.js} +159 -332
  102. package/dist/{onramp.js → shell/onramp.js} +11 -0
  103. package/dist/{operator-ux/format.js → shell/operator-ux-text.js} +250 -239
  104. package/dist/shell/operator-ux.js +431 -0
  105. package/dist/shell/orchestrator.js +231 -0
  106. package/dist/shell/pipeline-cli.js +667 -0
  107. package/dist/shell/pipeline.js +217 -0
  108. package/dist/shell/reclamation-io.js +1366 -0
  109. package/dist/shell/registry-cli.js +329 -0
  110. package/dist/{remote-source.js → shell/remote-source.js} +12 -5
  111. package/dist/shell/report-cli.js +101 -0
  112. package/dist/shell/report-view-cli.js +117 -0
  113. package/dist/{orchestrator → shell}/report.js +289 -282
  114. package/dist/shell/reporter.js +62 -0
  115. package/dist/shell/run-export-cli.js +106 -0
  116. package/dist/shell/run-export.js +680 -0
  117. package/dist/shell/run-registry-io.js +1014 -0
  118. package/dist/shell/run-store.js +164 -0
  119. package/dist/{sandbox-profile.js → shell/sandbox-profile.js} +134 -95
  120. package/dist/{scheduler.js → shell/scheduler-io.js} +248 -48
  121. package/dist/shell/scheduling-io.js +311 -0
  122. package/dist/shell/state-cli.js +181 -0
  123. package/dist/shell/state-explosion-cli.js +197 -0
  124. package/dist/shell/telemetry-cli.js +85 -0
  125. package/dist/{telemetry-demo.js → shell/telemetry-demo.js} +149 -119
  126. package/dist/shell/telemetry-ledger-io.js +132 -0
  127. package/dist/{term.js → shell/term.js} +36 -46
  128. package/dist/shell/topology-io.js +361 -0
  129. package/dist/shell/trust-audit.js +471 -0
  130. package/dist/{multi-agent-trust.js → shell/trust-policy-io.js} +67 -205
  131. package/dist/shell/verifier.js +48 -0
  132. package/dist/shell/workbench-host.js +250 -0
  133. package/dist/shell/workbench-text.js +18 -0
  134. package/dist/shell/workbench.js +175 -0
  135. package/dist/shell/worker-cli.js +124 -0
  136. package/dist/shell/worker-isolation.js +852 -0
  137. package/dist/shell/workflow-app-loader.js +650 -0
  138. package/docs/agent-delegation-drive.7.md +4 -0
  139. package/docs/cli-mcp-parity.7.md +284 -211
  140. package/docs/contract-migration-tooling.7.md +4 -0
  141. package/docs/control-plane-scheduling.7.md +4 -0
  142. package/docs/cross-agent-ledger.7.md +217 -0
  143. package/docs/designs/handoff-ledger.md +145 -0
  144. package/docs/durable-state-and-locking.7.md +4 -0
  145. package/docs/evidence-adoption-reasoning-chain.7.md +4 -0
  146. package/docs/execution-backends.7.md +4 -0
  147. package/docs/handoff-setup.md +120 -0
  148. package/docs/multi-agent-cli-mcp-surface.7.md +4 -0
  149. package/docs/multi-agent-eval-replay-harness.7.md +4 -0
  150. package/docs/multi-agent-operator-ux.7.md +4 -0
  151. package/docs/node-snapshot-diff-replay.7.md +4 -0
  152. package/docs/observability-cost-accounting.7.md +4 -0
  153. package/docs/project-index.md +143 -71
  154. package/docs/real-execution-backends.7.md +4 -0
  155. package/docs/release-and-migration.7.md +4 -0
  156. package/docs/release-tooling.7.md +4 -0
  157. package/docs/run-registry-control-plane.7.md +4 -0
  158. package/docs/run-retention-reclamation.7.md +25 -0
  159. package/docs/state-explosion-management.7.md +4 -0
  160. package/docs/team-collaboration.7.md +4 -0
  161. package/docs/web-desktop-workbench.7.md +4 -0
  162. package/manifest/plugin.manifest.json +1 -1
  163. package/manifest/source-context-profiles.json +9 -13
  164. package/package.json +1 -1
  165. package/scripts/agents/codex-agent.js +34 -4
  166. package/scripts/agents/cw-attest-wrap.js +2 -2
  167. package/scripts/bump-version.js +4 -3
  168. package/scripts/canonical-apps.js +4 -4
  169. package/scripts/children/batch-delegate-child.js +30 -10
  170. package/scripts/dogfood-architecture-review.js +2 -3
  171. package/scripts/dogfood-release.js +3 -3
  172. package/scripts/gen-parity-doc.js +15 -2
  173. package/scripts/golden-path.js +4 -4
  174. package/scripts/onramp-check.js +1 -1
  175. package/scripts/parity-check.js +38 -21
  176. package/scripts/release-flow.js +9 -3
  177. package/scripts/sync-project-index.js +51 -27
  178. package/scripts/validate-run-state-schema.js +2 -2
  179. package/scripts/version-sync-check.js +30 -30
  180. package/dist/candidate-scoring.js +0 -729
  181. package/dist/capability-core.js +0 -1186
  182. package/dist/capability-registry.js +0 -879
  183. package/dist/cli/command-surface.js +0 -490
  184. package/dist/cli/format.js +0 -56
  185. package/dist/cli/handlers/audit.js +0 -82
  186. package/dist/cli/handlers/blackboard.js +0 -81
  187. package/dist/cli/handlers/candidate.js +0 -40
  188. package/dist/cli/handlers/clones.js +0 -34
  189. package/dist/cli/handlers/collaboration.js +0 -61
  190. package/dist/cli/handlers/eval.js +0 -40
  191. package/dist/cli/handlers/maintenance.js +0 -107
  192. package/dist/cli/handlers/multi-agent.js +0 -165
  193. package/dist/cli/handlers/node.js +0 -41
  194. package/dist/cli/handlers/operational.js +0 -155
  195. package/dist/cli/handlers/operator.js +0 -146
  196. package/dist/cli/handlers/registry.js +0 -68
  197. package/dist/cli/handlers/run.js +0 -153
  198. package/dist/cli/handlers/scheduling.js +0 -132
  199. package/dist/cli/handlers/workbench.js +0 -41
  200. package/dist/cli/handlers/worker.js +0 -45
  201. package/dist/cli/run-summary.js +0 -45
  202. package/dist/clones.js +0 -162
  203. package/dist/collaboration.js +0 -726
  204. package/dist/commit.js +0 -592
  205. package/dist/compare.js +0 -18
  206. package/dist/coordinator/classify.js +0 -45
  207. package/dist/coordinator/paths.js +0 -42
  208. package/dist/coordinator/util.js +0 -126
  209. package/dist/coordinator.js +0 -990
  210. package/dist/daemon.js +0 -44
  211. package/dist/dispatch.js +0 -250
  212. package/dist/drive.js +0 -827
  213. package/dist/error-feedback.js +0 -419
  214. package/dist/evidence-grounding.js +0 -184
  215. package/dist/execution-backend/agent.js +0 -294
  216. package/dist/execution-backend/probes.js +0 -112
  217. package/dist/execution-backend/util.js +0 -47
  218. package/dist/execution-backend.js +0 -961
  219. package/dist/gates.js +0 -48
  220. package/dist/harness.js +0 -61
  221. package/dist/loop-expansion.js +0 -60
  222. package/dist/mcp/tool-call.js +0 -434
  223. package/dist/mcp/tool-definitions.js +0 -1040
  224. package/dist/mcp-surface.js +0 -30
  225. package/dist/multi-agent/graph.js +0 -84
  226. package/dist/multi-agent/helpers.js +0 -141
  227. package/dist/multi-agent/ids.js +0 -20
  228. package/dist/multi-agent/paths.js +0 -22
  229. package/dist/multi-agent-eval/normalize.js +0 -51
  230. package/dist/multi-agent-eval.js +0 -678
  231. package/dist/multi-agent-host.js +0 -777
  232. package/dist/multi-agent.js +0 -984
  233. package/dist/node-projection.js +0 -59
  234. package/dist/node-snapshot.js +0 -260
  235. package/dist/operator-ux.js +0 -631
  236. package/dist/orchestrator/app-operations.js +0 -211
  237. package/dist/orchestrator/audit-operations.js +0 -182
  238. package/dist/orchestrator/candidate-operations.js +0 -117
  239. package/dist/orchestrator/cli-options.js +0 -294
  240. package/dist/orchestrator/collaboration-operations.js +0 -86
  241. package/dist/orchestrator/feedback-operations.js +0 -81
  242. package/dist/orchestrator/host-operations.js +0 -78
  243. package/dist/orchestrator/lifecycle-operations.js +0 -626
  244. package/dist/orchestrator/migration-operations.js +0 -44
  245. package/dist/orchestrator/multi-agent-operations.js +0 -362
  246. package/dist/orchestrator/topology-operations.js +0 -84
  247. package/dist/orchestrator.js +0 -917
  248. package/dist/pipeline-runner.js +0 -285
  249. package/dist/reclamation/hash.js +0 -72
  250. package/dist/reclamation.js +0 -812
  251. package/dist/reporter.js +0 -67
  252. package/dist/run-export.js +0 -784
  253. package/dist/run-registry/derive.js +0 -175
  254. package/dist/run-registry/format.js +0 -124
  255. package/dist/run-registry/gc.js +0 -251
  256. package/dist/run-registry/policy.js +0 -16
  257. package/dist/run-registry/queue.js +0 -115
  258. package/dist/run-registry.js +0 -850
  259. package/dist/run-state-schema.js +0 -68
  260. package/dist/scheduling.js +0 -184
  261. package/dist/state-explosion.js +0 -1014
  262. package/dist/state.js +0 -367
  263. package/dist/telemetry-ledger.js +0 -196
  264. package/dist/topology.js +0 -565
  265. package/dist/triggers.js +0 -184
  266. package/dist/trust-audit.js +0 -644
  267. package/dist/types/blackboard.js +0 -2
  268. package/dist/types/candidate.js +0 -2
  269. package/dist/types/collaboration.js +0 -2
  270. package/dist/types/core.js +0 -2
  271. package/dist/types/drive.js +0 -10
  272. package/dist/types/error-feedback.js +0 -2
  273. package/dist/types/evidence-reasoning.js +0 -2
  274. package/dist/types/execution-backend.js +0 -2
  275. package/dist/types/multi-agent.js +0 -2
  276. package/dist/types/observability.js +0 -2
  277. package/dist/types/pipeline.js +0 -2
  278. package/dist/types/reclamation.js +0 -8
  279. package/dist/types/report-bundle.js +0 -6
  280. package/dist/types/result.js +0 -2
  281. package/dist/types/run-registry.js +0 -2
  282. package/dist/types/run.js +0 -2
  283. package/dist/types/sandbox.js +0 -2
  284. package/dist/types/schedule.js +0 -2
  285. package/dist/types/state-node.js +0 -2
  286. package/dist/types/topology.js +0 -2
  287. package/dist/types/trust.js +0 -2
  288. package/dist/types/workbench.js +0 -2
  289. package/dist/types/worker.js +0 -2
  290. package/dist/types/workflow-app.js +0 -2
  291. package/dist/types.js +0 -44
  292. package/dist/util/fingerprint.js +0 -19
  293. package/dist/util/fingerprint.test.js +0 -27
  294. package/dist/verifier.js +0 -78
  295. package/dist/version.js +0 -8
  296. package/dist/workbench-host.js +0 -182
  297. package/dist/workbench.js +0 -192
  298. package/dist/worker-accept/acceptance.js +0 -114
  299. package/dist/worker-accept/blackboard-fanout.js +0 -80
  300. package/dist/worker-accept/blackboard-linkage.js +0 -19
  301. package/dist/worker-accept/context.js +0 -2
  302. package/dist/worker-accept/telemetry-ledger.js +0 -126
  303. package/dist/worker-accept/validation.js +0 -77
  304. package/dist/worker-accept/verifier-completion.js +0 -73
  305. package/dist/worker-isolation/helpers.js +0 -51
  306. package/dist/worker-isolation/paths.js +0 -46
  307. package/dist/worker-isolation.js +0 -656
  308. package/dist/workflow-api.js +0 -131
  309. /package/dist/{types → core/types}/boundary.js +0 -0
@@ -82,214 +82,249 @@ relationship. `identical` means `cw <cmd> --json` is equal to the `cw_<tool>`
82
82
  payload; `projected` means a declared divergence with a reason; `cli-only` marks
83
83
  a surface-specific capability with a recorded reason. The matrix is
84
84
  <!-- gen:parity:count -->
85
- machine-complete by design: 202 capabilities, 189 MCP tools.
85
+ machine-complete by design: 237 capabilities, 196 MCP tools.
86
86
  <!-- /gen:parity:count -->
87
87
 
88
88
  <!-- gen:parity:table -->
89
89
  | Capability | CLI command | MCP tool | Core entry | Surface | Payload |
90
90
  | --- | --- | --- | --- | --- | --- |
91
- | `help` | `cw help` | `—` | `formatHelp` | cli-only | cli-only |
92
- | `version` | `cw version` | `—` | `CURRENT_COOL_WORKFLOW_VERSION` | cli-only | cli-only |
93
- | `update` | `cw update` | `—` | `npmUpdate` | cli-only | cli-only |
94
- | `fix` | `cw fix` | `—` | `runDoctor` | cli-only | cli-only |
95
- | `list` | `cw list` | `cw_list` | `listWorkflows` | both | identical |
96
- | `info` | `cw info` | `—` | `showApp` | cli-only | cli-only |
97
- | `search` | `cw search` | `—` | `listApps` | cli-only | cli-only |
98
- | `man` | `cw man` | `—` | `n/a` | cli-only | cli-only |
99
- | `doctor` | `cw doctor` | `—` | `runDoctor` | cli-only | cli-only |
100
- | `init` | `cw init` | `cw_init` | `init` | both | identical |
101
- | `plan` | `cw plan` | `cw_plan` | `planSummary` | both | identical |
91
+ | `list` | `cw list` | `cw_list` | `list` | both | identical |
92
+ | `plan` | `cw plan` | `cw_plan` | `plan` | both | identical |
93
+ | `app.run` | `cw app run` | `cw_app_run` | `app.run` | both | identical |
102
94
  | `status` | `cw status` | `cw_status` | `status` | both | identical |
95
+ | `init` | `cw init` | `cw_init` | `init` | both | identical |
103
96
  | `next` | `cw next` | `cw_next` | `next` | both | identical |
97
+ | `state.check` | `cw state check` | `cw_state_check` | `state.check` | both | identical |
98
+ | `contract.show` | `cw contract show` | `cw_contract_show` | `contract.show` | both | identical |
99
+ | `node.list` | `cw node list` | `cw_node_list` | `node.list` | both | identical |
100
+ | `node.show` | `cw node show` | `cw_node_show` | `node.show` | both | identical |
101
+ | `node.graph` | `cw node graph` | `cw_node_graph` | `node.graph` | both | identical |
102
+ | `node.snapshot` | `cw node snapshot` | `cw_node_snapshot` | `node.snapshot` | both | identical |
103
+ | `node.diff` | `cw node diff` | `cw_node_diff` | `node.diff` | both | identical |
104
+ | `node.replay` | `cw node replay` | `cw_node_replay` | `node.replay` | both | identical |
105
+ | `node.replay.verify` | `cw node verify` | `cw_node_replay_verify` | `node.replay.verify` | both | identical |
106
+ | `migration.list` | `cw migration list` | `cw_migration_list` | `migration.list` | both | identical |
107
+ | `migration.check` | `cw migration check` | `cw_migration_check` | `migration.check` | both | identical |
108
+ | `migration.prove` | `cw migration prove` | `cw_migration_prove` | `migration.prove` | both | identical |
109
+ | `operator.status` | `cw operator status` | `cw_operator_status` | `operator.status` | both | identical |
110
+ | `graph` | `cw graph` | `cw_operator_graph` | `graph` | both | identical |
111
+ | `operator.report` | `cw operator report` | `cw_operator_report` | `operator.report` | both | identical |
112
+ | `worker.summary` | `cw worker summary` | `cw_worker_summary` | `worker.summary` | both | identical |
113
+ | `workbench.view` | `cw workbench view` | `cw_workbench_view` | `workbench.view` | both | identical |
114
+ | `workbench.serve` | `cw workbench serve` | `cw_workbench_serve` | `workbench.serve` | both | projected |
115
+ | `candidate.summary` | `cw candidate summary` | `cw_candidate_summary` | `candidate.summary` | both | identical |
116
+ | `feedback.summary` | `cw feedback summary` | `cw_feedback_summary` | `feedback.summary` | both | identical |
117
+ | `commit.summary` | `cw commit summary` | `cw_commit_summary` | `commit.summary` | both | identical |
118
+ | `multi-agent.summary` | `cw multi-agent summary` | `cw_multi_agent_summary` | `multi-agent.summary` | both | identical |
119
+ | `multi-agent.graph` | `cw multi-agent graph` | `cw_multi_agent_graph` | `multi-agent.graph` | both | identical |
120
+ | `multi-agent.dependencies` | `cw multi-agent dependencies` | `cw_multi_agent_dependencies` | `multi-agent.dependencies` | both | identical |
121
+ | `multi-agent.failures` | `cw multi-agent failures` | `cw_multi_agent_failures` | `multi-agent.failures` | both | identical |
122
+ | `multi-agent.evidence` | `cw multi-agent evidence` | `cw_multi_agent_evidence` | `multi-agent.evidence` | both | identical |
123
+ | `multi-agent.reasoning` | `cw multi-agent reasoning` | `cw_evidence_reasoning` | `multi-agent.reasoning` | both | identical |
124
+ | `multi-agent.reasoning.refresh` | `cw multi-agent reasoning` | `cw_evidence_reasoning_refresh` | `multi-agent.reasoning.refresh` | both | identical |
125
+ | `summary.refresh` | `cw summary refresh` | `cw_summary_refresh` | `summary.refresh` | both | identical |
126
+ | `summary.show` | `cw summary show` | `cw_summary_show` | `summary.show` | both | identical |
127
+ | `blackboard.summarize` | `cw blackboard summarize` | `cw_blackboard_summarize` | `blackboard.summarize` | both | identical |
128
+ | `multi-agent.summarize` | `cw multi-agent summarize` | `cw_multi_agent_summarize` | `multi-agent.summarize` | both | identical |
129
+ | `multi-agent.graph.compact` | `cw multi-agent graph` | `cw_multi_agent_graph_compact` | `multi-agent.graph.compact` | both | identical |
130
+ | `multi-agent.run` | `cw multi-agent run` | `cw_multi_agent_run` | `multi-agent.run` | both | identical |
131
+ | `multi-agent.status` | `cw multi-agent status` | `cw_multi_agent_status` | `multi-agent.status` | both | identical |
132
+ | `multi-agent.step` | `cw multi-agent step` | `cw_multi_agent_step` | `multi-agent.step` | both | identical |
133
+ | `multi-agent.blackboard` | `cw multi-agent blackboard` | `cw_multi_agent_blackboard` | `multi-agent.blackboard` | both | identical |
134
+ | `multi-agent.score` | `cw multi-agent score` | `cw_multi_agent_score` | `multi-agent.score` | both | identical |
135
+ | `multi-agent.select` | `cw multi-agent select` | `cw_multi_agent_select` | `multi-agent.select` | both | identical |
136
+ | `eval.snapshot` | `cw eval snapshot` | `cw_eval_snapshot` | `eval.snapshot` | both | identical |
137
+ | `eval.replay` | `cw eval replay` | `cw_eval_replay` | `eval.replay` | both | identical |
138
+ | `eval.compare` | `cw eval compare` | `cw_eval_compare` | `eval.compare` | both | identical |
139
+ | `eval.score` | `cw eval score` | `cw_eval_score` | `eval.score` | both | identical |
140
+ | `eval.gate` | `cw eval gate` | `cw_eval_gate` | `eval.gate` | both | identical |
141
+ | `eval.report` | `cw eval report` | `cw_eval_report` | `eval.report` | both | identical |
142
+ | `multi-agent.run.create` | `cw multi-agent role` | `cw_multi_agent_run_create` | `multi-agent.run.create` | both | identical |
143
+ | `multi-agent.run.transition` | `cw multi-agent transition` | `cw_multi_agent_run_transition` | `multi-agent.run.transition` | both | identical |
144
+ | `multi-agent.run.show` | `cw multi-agent show` | `cw_multi_agent_run_show` | `multi-agent.run.show` | both | identical |
145
+ | `multi-agent.role.create` | `cw multi-agent role` | `cw_multi_agent_role_create` | `multi-agent.role.create` | both | identical |
146
+ | `multi-agent.role.show` | `cw multi-agent role` | `cw_multi_agent_role_show` | `multi-agent.role.show` | both | identical |
147
+ | `multi-agent.group.create` | `cw multi-agent group` | `cw_multi_agent_group_create` | `multi-agent.group.create` | both | identical |
148
+ | `multi-agent.group.show` | `cw multi-agent group` | `cw_multi_agent_group_show` | `multi-agent.group.show` | both | identical |
149
+ | `multi-agent.membership.create` | `cw multi-agent membership` | `cw_multi_agent_membership_create` | `multi-agent.membership.create` | both | identical |
150
+ | `multi-agent.membership.show` | `cw multi-agent membership` | `cw_multi_agent_membership_show` | `multi-agent.membership.show` | both | identical |
151
+ | `multi-agent.fanout.create` | `cw multi-agent fanout` | `cw_multi_agent_fanout_create` | `multi-agent.fanout.create` | both | identical |
152
+ | `multi-agent.fanout.show` | `cw multi-agent fanout` | `cw_multi_agent_fanout_show` | `multi-agent.fanout.show` | both | identical |
153
+ | `multi-agent.fanin.collect` | `cw multi-agent fanin` | `cw_multi_agent_fanin_collect` | `multi-agent.fanin.collect` | both | identical |
154
+ | `multi-agent.fanin.show` | `cw multi-agent fanin` | `cw_multi_agent_fanin_show` | `multi-agent.fanin.show` | both | identical |
155
+ | `topology.list` | `cw topology list` | `cw_topology_list` | `topology.list` | both | identical |
156
+ | `topology.show` | `cw topology show` | `cw_topology_show` | `topology.show` | both | identical |
157
+ | `topology.validate` | `cw topology validate` | `cw_topology_validate` | `topology.validate` | both | identical |
158
+ | `topology.apply` | `cw topology apply` | `cw_topology_apply` | `topology.apply` | both | identical |
159
+ | `topology.summary` | `cw topology summary` | `cw_topology_summary` | `topology.summary` | both | identical |
160
+ | `topology.graph` | `cw topology graph` | `cw_topology_graph` | `topology.graph` | both | identical |
161
+ | `blackboard.summary` | `cw blackboard summary` | `cw_blackboard_summary` | `blackboard.summary` | both | identical |
162
+ | `blackboard.graph` | `cw blackboard graph` | `cw_blackboard_graph` | `blackboard.graph` | both | identical |
163
+ | `blackboard.resolve` | `cw blackboard resolve` | `cw_blackboard_resolve` | `blackboard.resolve` | both | identical |
164
+ | `blackboard.topic.create` | `cw blackboard topic` | `cw_blackboard_topic_create` | `blackboard.topic.create` | both | identical |
165
+ | `blackboard.message.post` | `cw blackboard message` | `cw_blackboard_message_post` | `blackboard.message.post` | both | identical |
166
+ | `blackboard.message.list` | `cw blackboard message` | `cw_blackboard_message_list` | `blackboard.message.list` | both | identical |
167
+ | `blackboard.context.put` | `cw blackboard context` | `cw_blackboard_context_put` | `blackboard.context.put` | both | identical |
168
+ | `blackboard.artifact.add` | `cw blackboard artifact` | `cw_blackboard_artifact_add` | `blackboard.artifact.add` | both | identical |
169
+ | `blackboard.artifact.list` | `cw blackboard artifact` | `cw_blackboard_artifact_list` | `blackboard.artifact.list` | both | identical |
170
+ | `blackboard.snapshot` | `cw blackboard snapshot` | `cw_blackboard_snapshot` | `blackboard.snapshot` | both | identical |
171
+ | `coordinator.summary` | `cw coordinator summary` | `cw_coordinator_summary` | `coordinator.summary` | both | identical |
172
+ | `coordinator.decision` | `cw coordinator decision` | `cw_coordinator_decision` | `coordinator.decision` | both | identical |
173
+ | `audit.summary` | `cw audit summary` | `cw_audit_summary` | `audit.summary` | both | identical |
174
+ | `audit.verify` | `cw audit verify` | `cw_audit_verify` | `audit.verify` | both | identical |
175
+ | `audit.worker` | `cw audit worker` | `cw_audit_worker` | `audit.worker` | both | identical |
176
+ | `audit.provenance` | `cw audit provenance` | `cw_audit_provenance` | `audit.provenance` | both | identical |
177
+ | `audit.multi-agent` | `cw audit multi-agent` | `cw_audit_multi_agent` | `audit.multi-agent` | both | identical |
178
+ | `audit.policy` | `cw audit policy` | `cw_audit_policy` | `audit.policy` | both | identical |
179
+ | `audit.role` | `cw audit role` | `cw_audit_role` | `audit.role` | both | identical |
180
+ | `audit.blackboard` | `cw audit blackboard` | `cw_audit_blackboard` | `audit.blackboard` | both | identical |
181
+ | `audit.judge` | `cw audit judge` | `cw_audit_judge` | `audit.judge` | both | identical |
182
+ | `audit.attest` | `cw audit attest` | `cw_audit_attest` | `audit.attest` | both | identical |
183
+ | `audit.decision` | `cw audit decision` | `cw_audit_decision` | `audit.decision` | both | identical |
104
184
  | `dispatch` | `cw dispatch` | `cw_dispatch` | `dispatch` | both | identical |
105
- | `result` | `cw result` | `cw_result` | `recordResult` | both | identical |
185
+ | `sandbox.list` | `cw sandbox list` | `cw_sandbox_list` | `sandbox.list` | both | identical |
186
+ | `sandbox.show` | `cw sandbox show` | `cw_sandbox_show` | `sandbox.show` | both | identical |
187
+ | `sandbox.validate` | `cw sandbox validate` | `cw_sandbox_validate` | `sandbox.validate` | both | identical |
188
+ | `sandbox.choose` | `cw sandbox choose` | `cw_sandbox_choose` | `sandbox.choose` | both | identical |
189
+ | `sandbox.resolve` | `cw sandbox resolve` | `cw_sandbox_resolve` | `sandbox.resolve` | both | identical |
190
+ | `backend.list` | `cw backend list` | `cw_backend_list` | `backend.list` | both | identical |
191
+ | `backend.show` | `cw backend show` | `cw_backend_show` | `backend.show` | both | identical |
192
+ | `backend.probe` | `cw backend probe` | `cw_backend_probe` | `backend.probe` | both | identical |
193
+ | `backend.agent.config.show` | `cw backend agent` | `cw_backend_agent_config_show` | `backend.agent.config.show` | both | identical |
194
+ | `backend.agent.config.set` | `cw backend agent` | `cw_backend_agent_config_set` | `backend.agent.config.set` | both | projected |
195
+ | `result` | `cw result` | `cw_result` | `result` | both | identical |
106
196
  | `commit` | `cw commit` | `cw_commit` | `commit` | both | projected |
107
- | `commit.summary` | `cw commit summary` | `cw_commit_summary` | `summarizeCommitRecords` | both | identical |
108
197
  | `report` | `cw report` | `cw_report` | `report` | both | identical |
109
- | `graph` | `cw graph` | `cw_operator_graph` | `operatorGraph` | both | identical |
110
- | `loop` | `cw loop` | `—` | `scheduler.create` | cli-only | cli-only |
111
- | `operator.status` | `cw operator status` | `cw_operator_status` | `operatorStatus` | both | identical |
112
- | `operator.report` | `cw operator report` | `cw_operator_report` | `operatorReport` | both | identical |
113
- | `app.list` | `cw app list` | `cw_app_list` | `listApps` | both | identical |
114
- | `app.show` | `cw app show` | `cw_app_show` | `showApp` | both | identical |
115
- | `app.validate` | `cw app validate` | `cw_app_validate` | `validateApp` | both | identical |
116
- | `app.init` | `cw app init` | `cw_app_init` | `initApp` | both | identical |
117
- | `app.package` | `cw app package` | `cw_app_package` | `packageApp` | both | identical |
118
- | `app.run` | `cw app run` | `cw_app_run` | `appRun` | both | identical |
119
- | `state.check` | `cw state check` | `cw_state_check` | `checkState` | both | identical |
120
- | `contract.show` | `cw contract show` | `cw_contract_show` | `showContract` | both | identical |
121
- | `node.list` | `cw node list` | `cw_node_list` | `listNodes` | both | identical |
122
- | `node.show` | `cw node show` | `cw_node_show` | `showNode` | both | identical |
123
- | `node.graph` | `cw node graph` | `cw_node_graph` | `graphNodes` | both | identical |
124
- | `node.snapshot` | `cw node snapshot` | `cw_node_snapshot` | `nodeSnapshot` | both | identical |
125
- | `node.diff` | `cw node diff` | `cw_node_diff` | `nodeDiff` | both | identical |
126
- | `node.replay` | `cw node replay` | `cw_node_replay` | `nodeReplay` | both | identical |
127
- | `node.replay.verify` | `cw node verify` | `cw_node_replay_verify` | `nodeReplayVerify` | both | identical |
128
- | `migration.list` | `cw migration list` | `cw_migration_list` | `migrationList` | both | identical |
129
- | `migration.check` | `cw migration check` | `cw_migration_check` | `migrationCheck` | both | identical |
130
- | `migration.prove` | `cw migration prove` | `cw_migration_prove` | `migrationProve` | both | identical |
131
- | `topology.list` | `cw topology list` | `cw_topology_list` | `listTopologies` | both | identical |
132
- | `topology.show` | `cw topology show` | `cw_topology_show` | `showTopology` | both | identical |
133
- | `topology.validate` | `cw topology validate` | `cw_topology_validate` | `validateTopology` | both | identical |
134
- | `topology.apply` | `cw topology apply` | `cw_topology_apply` | `applyTopology` | both | identical |
135
- | `topology.summary` | `cw topology summary` | `cw_topology_summary` | `topologySummary` | both | identical |
136
- | `topology.graph` | `cw topology graph` | `cw_topology_graph` | `topologyGraph` | both | identical |
137
- | `summary.refresh` | `cw summary refresh` | `cw_summary_refresh` | `summaryRefresh` | both | identical |
138
- | `summary.show` | `cw summary show` | `cw_summary_show` | `summaryShow` | both | identical |
139
- | `multi-agent.run` | `cw multi-agent run` | `cw_multi_agent_run` | `hostMultiAgentRun` | both | identical |
140
- | `multi-agent.status` | `cw multi-agent status` | `cw_multi_agent_status` | `hostMultiAgentStatus` | both | identical |
141
- | `multi-agent.step` | `cw multi-agent step` | `cw_multi_agent_step` | `hostMultiAgentStep` | both | identical |
142
- | `multi-agent.blackboard` | `cw multi-agent blackboard` | `cw_multi_agent_blackboard` | `hostMultiAgentBlackboard` | both | identical |
143
- | `multi-agent.score` | `cw multi-agent score` | `cw_multi_agent_score` | `hostMultiAgentScore` | both | identical |
144
- | `multi-agent.select` | `cw multi-agent select` | `cw_multi_agent_select` | `hostMultiAgentSelect` | both | identical |
145
- | `multi-agent.summary` | `cw multi-agent summary` | `cw_multi_agent_summary` | `multiAgentSummary` | both | identical |
146
- | `multi-agent.summarize` | `cw multi-agent summarize` | `cw_multi_agent_summarize` | `multiAgentSummarize` | both | identical |
147
- | `multi-agent.graph` | `cw multi-agent graph` | `cw_multi_agent_graph` | `multiAgentOperatorGraph` | both | identical |
148
- | `multi-agent.graph.compact` | `cw multi-agent graph` | `cw_multi_agent_graph_compact` | `multiAgentGraphView` | both | identical |
149
- | `multi-agent.dependencies` | `cw multi-agent dependencies` | `cw_multi_agent_dependencies` | `multiAgentDependencies` | both | identical |
150
- | `multi-agent.failures` | `cw multi-agent failures` | `cw_multi_agent_failures` | `multiAgentFailures` | both | identical |
151
- | `multi-agent.evidence` | `cw multi-agent evidence` | `cw_multi_agent_evidence` | `multiAgentEvidence` | both | identical |
152
- | `multi-agent.reasoning` | `cw multi-agent reasoning` | `cw_evidence_reasoning` | `multiAgentReasoning` | both | identical |
153
- | `multi-agent.reasoning.refresh` | `cw multi-agent reasoning` | `cw_evidence_reasoning_refresh` | `multiAgentReasoningRefresh` | both | identical |
154
- | `multi-agent.run.create` | `cw multi-agent run` | `cw_multi_agent_run_create` | `createMultiAgentRun` | both | identical |
155
- | `multi-agent.run.transition` | `cw multi-agent run` | `cw_multi_agent_run_transition` | `transitionMultiAgentRun` | both | identical |
156
- | `multi-agent.run.show` | `cw multi-agent show` | `cw_multi_agent_run_show` | `showMultiAgentRun` | both | identical |
157
- | `multi-agent.role.create` | `cw multi-agent role` | `cw_multi_agent_role_create` | `createAgentRole` | both | identical |
158
- | `multi-agent.role.show` | `cw multi-agent role` | `cw_multi_agent_role_show` | `showAgentRole` | both | identical |
159
- | `multi-agent.group.create` | `cw multi-agent group` | `cw_multi_agent_group_create` | `createAgentGroup` | both | identical |
160
- | `multi-agent.group.show` | `cw multi-agent group` | `cw_multi_agent_group_show` | `showAgentGroup` | both | identical |
161
- | `multi-agent.membership.create` | `cw multi-agent membership` | `cw_multi_agent_membership_create` | `assignAgentMembership` | both | identical |
162
- | `multi-agent.membership.show` | `cw multi-agent membership` | `cw_multi_agent_membership_show` | `showAgentMembership` | both | identical |
163
- | `multi-agent.fanout.create` | `cw multi-agent fanout` | `cw_multi_agent_fanout_create` | `createAgentFanout` | both | identical |
164
- | `multi-agent.fanout.show` | `cw multi-agent fanout` | `cw_multi_agent_fanout_show` | `showAgentFanout` | both | identical |
165
- | `multi-agent.fanin.collect` | `cw multi-agent fanin` | `cw_multi_agent_fanin_collect` | `collectAgentFanin` | both | identical |
166
- | `multi-agent.fanin.show` | `cw multi-agent fanin` | `cw_multi_agent_fanin_show` | `showAgentFanin` | both | identical |
167
- | `eval.snapshot` | `cw eval snapshot` | `cw_eval_snapshot` | `evalSnapshot` | both | identical |
168
- | `eval.replay` | `cw eval replay` | `cw_eval_replay` | `evalReplay` | both | identical |
169
- | `eval.compare` | `cw eval compare` | `cw_eval_compare` | `evalCompare` | both | identical |
170
- | `eval.score` | `cw eval score` | `cw_eval_score` | `evalScore` | both | identical |
171
- | `eval.gate` | `cw eval gate` | `cw_eval_gate` | `evalGate` | both | identical |
172
- | `eval.report` | `cw eval report` | `cw_eval_report` | `evalReport` | both | identical |
173
- | `blackboard.summary` | `cw blackboard summary` | `cw_blackboard_summary` | `blackboardSummary` | both | identical |
174
- | `blackboard.summarize` | `cw blackboard summarize` | `cw_blackboard_summarize` | `blackboardSummarize` | both | identical |
175
- | `blackboard.graph` | `cw blackboard graph` | `cw_blackboard_graph` | `blackboardGraph` | both | identical |
176
- | `blackboard.resolve` | `cw blackboard resolve` | `cw_blackboard_resolve` | `resolveRunBlackboard` | both | identical |
177
- | `blackboard.topic.create` | `cw blackboard topic create` | `cw_blackboard_topic_create` | `createBlackboardTopic` | both | identical |
178
- | `blackboard.message.post` | `cw blackboard message post` | `cw_blackboard_message_post` | `postBlackboardMessage` | both | identical |
179
- | `blackboard.message.list` | `cw blackboard message list` | `cw_blackboard_message_list` | `listBlackboardMessages` | both | identical |
180
- | `blackboard.context.put` | `cw blackboard context put` | `cw_blackboard_context_put` | `putBlackboardContext` | both | identical |
181
- | `blackboard.artifact.add` | `cw blackboard artifact add` | `cw_blackboard_artifact_add` | `addBlackboardArtifact` | both | identical |
182
- | `blackboard.artifact.list` | `cw blackboard artifact list` | `cw_blackboard_artifact_list` | `listBlackboardArtifacts` | both | identical |
183
- | `blackboard.snapshot` | `cw blackboard snapshot` | `cw_blackboard_snapshot` | `snapshotBlackboard` | both | identical |
184
- | `coordinator.summary` | `cw coordinator summary` | `cw_coordinator_summary` | `coordinatorSummary` | both | identical |
185
- | `coordinator.decision` | `cw coordinator decision` | `cw_coordinator_decision` | `recordCoordinatorDecision` | both | identical |
186
- | `audit.summary` | `cw audit summary` | `cw_audit_summary` | `auditSummary` | both | identical |
187
- | `audit.verify` | `cw audit verify` | `cw_audit_verify` | `auditVerify` | both | identical |
188
- | `audit.worker` | `cw audit worker` | `cw_audit_worker` | `workerAudit` | both | identical |
189
- | `audit.provenance` | `cw audit provenance` | `cw_audit_provenance` | `evidenceProvenance` | both | identical |
190
- | `audit.multi-agent` | `cw audit multi-agent` | `cw_audit_multi_agent` | `auditMultiAgent` | both | identical |
191
- | `audit.policy` | `cw audit policy` | `cw_audit_policy` | `auditPolicy` | both | identical |
192
- | `audit.role` | `cw audit role` | `cw_audit_role` | `auditRole` | both | identical |
193
- | `audit.blackboard` | `cw audit blackboard` | `cw_audit_blackboard` | `auditBlackboard` | both | identical |
194
- | `audit.judge` | `cw audit judge` | `cw_audit_judge` | `auditJudge` | both | identical |
195
- | `audit.attest` | `cw audit attest` | `cw_audit_attest` | `recordAuditAttestation` | both | identical |
196
- | `audit.decision` | `cw audit decision` | `cw_audit_decision` | `recordAuditDecision` | both | identical |
197
- | `sandbox.list` | `cw sandbox list` | `cw_sandbox_list` | `listSandboxProfiles` | both | identical |
198
- | `sandbox.show` | `cw sandbox show` | `cw_sandbox_show` | `showSandboxProfile` | both | identical |
199
- | `sandbox.validate` | `cw sandbox validate` | `cw_sandbox_validate` | `validateSandboxProfile` | both | identical |
200
- | `sandbox.choose` | `cw sandbox choose` | `cw_sandbox_choose` | `sandboxChoose` | both | identical |
201
- | `sandbox.resolve` | `cw sandbox resolve` | `cw_sandbox_resolve` | `sandboxChoose` | both | identical |
202
- | `backend.list` | `cw backend list` | `cw_backend_list` | `listBackends` | both | identical |
203
- | `backend.show` | `cw backend show` | `cw_backend_show` | `showBackend` | both | identical |
204
- | `backend.probe` | `cw backend probe` | `cw_backend_probe` | `probeBackend` | both | identical |
205
- | `backend.agent.config.show` | `cw backend agent config` | `cw_backend_agent_config_show` | `backendAgentConfigShow` | both | identical |
206
- | `backend.agent.config.set` | `cw backend agent config` | `cw_backend_agent_config_set` | `backendAgentConfigSet` | both | projected |
207
- | `worker.list` | `cw worker list` | `cw_worker_list` | `listWorkers` | both | identical |
208
- | `worker.summary` | `cw worker summary` | `cw_worker_summary` | `summarizeWorkerRecords` | both | identical |
209
- | `worker.show` | `cw worker show` | `cw_worker_show` | `showWorker` | both | identical |
210
- | `worker.manifest` | `cw worker manifest` | `cw_worker_manifest` | `showWorkerManifest` | both | identical |
211
- | `worker.output` | `cw worker output` | `cw_worker_output` | `recordWorkerOutput` | both | identical |
212
- | `worker.fail` | `cw worker fail` | `cw_worker_fail` | `recordWorkerFailure` | both | identical |
213
- | `worker.validate` | `cw worker validate` | `cw_worker_validate` | `validateWorker` | both | identical |
214
- | `candidate.list` | `cw candidate list` | `cw_candidate_list` | `listCandidates` | both | identical |
215
- | `candidate.show` | `cw candidate show` | `cw_candidate_show` | `showCandidate` | both | identical |
216
- | `candidate.register` | `cw candidate register` | `cw_candidate_register` | `registerCandidate` | both | identical |
217
- | `candidate.score` | `cw candidate score` | `cw_candidate_score` | `scoreCandidate` | both | identical |
218
- | `candidate.rank` | `cw candidate rank` | `cw_candidate_rank` | `rankCandidates` | both | identical |
219
- | `candidate.select` | `cw candidate select` | `cw_candidate_select` | `selectCandidate` | both | identical |
220
- | `candidate.reject` | `cw candidate reject` | `cw_candidate_reject` | `rejectCandidate` | both | identical |
221
- | `candidate.summary` | `cw candidate summary` | `cw_candidate_summary` | `summarizeCandidateOperatorRecords` | both | identical |
222
- | `feedback.list` | `cw feedback list` | `cw_feedback_list` | `listFeedback` | both | identical |
223
- | `feedback.show` | `cw feedback show` | `cw_feedback_show` | `showFeedback` | both | identical |
224
- | `feedback.collect` | `cw feedback collect` | `cw_feedback_collect` | `collectFeedback` | both | identical |
225
- | `feedback.summary` | `cw feedback summary` | `cw_feedback_summary` | `summarizeFeedbackRecords` | both | identical |
226
- | `feedback.task` | `cw feedback task` | `cw_feedback_task` | `createFeedbackTask` | both | identical |
227
- | `feedback.resolve` | `cw feedback resolve` | `cw_feedback_resolve` | `resolveFeedback` | both | identical |
228
- | `schedule.create` | `cw schedule create` | `cw_schedule_create` | `scheduler.create` | both | identical |
229
- | `schedule.list` | `cw schedule list` | `cw_schedule_list` | `scheduler.list` | both | identical |
230
- | `schedule.delete` | `cw schedule delete` | `cw_schedule_delete` | `scheduler.delete` | both | identical |
231
- | `schedule.due` | `cw schedule due` | `cw_schedule_due` | `scheduler.due` | both | identical |
232
- | `schedule.complete` | `cw schedule complete` | `cw_schedule_complete` | `scheduler.complete` | both | identical |
233
- | `schedule.pause` | `cw schedule pause` | `cw_schedule_pause` | `scheduler.pause` | both | identical |
234
- | `schedule.resume` | `cw schedule resume` | `cw_schedule_resume` | `scheduler.resume` | both | identical |
235
- | `schedule.run-now` | `cw schedule run-now` | `cw_schedule_run_now` | `scheduler.runNow` | both | identical |
236
- | `schedule.history` | `cw schedule history` | `cw_schedule_history` | `scheduler.history` | both | identical |
237
- | `schedule.daemon` | `cw schedule daemon` | `—` | `DesktopSchedulerDaemon.run` | cli-only | cli-only |
238
- | `routine.create` | `cw routine create` | `cw_routine_create` | `triggers.create` | both | identical |
239
- | `routine.list` | `cw routine list` | `cw_routine_list` | `triggers.list` | both | identical |
240
- | `routine.delete` | `cw routine delete` | `cw_routine_delete` | `triggers.delete` | both | identical |
241
- | `routine.fire` | `cw routine fire` | `cw_routine_fire` | `triggers.fire` | both | identical |
242
- | `routine.events` | `cw routine events` | `cw_routine_events` | `triggers.events` | both | identical |
243
- | `registry.refresh` | `cw registry refresh` | `cw_registry_refresh` | `runRegistry.refresh` | both | identical |
244
- | `registry.show` | `cw registry show` | `cw_registry_show` | `runRegistry.show` | both | identical |
245
- | `run.search` | `cw run search` | `cw_run_search` | `runRegistry.search` | both | identical |
246
- | `run.list` | `cw run list` | `cw_run_list` | `runRegistry.list` | both | identical |
247
- | `run.show` | `cw run show` | `cw_run_show` | `runRegistry.showRun` | both | identical |
248
- | `run.resume` | `cw run resume` | `cw_run_resume` | `runRegistry.resume` | both | identical |
249
- | `run.archive` | `cw run archive` | `cw_run_archive` | `runRegistry.archive` | both | identical |
250
- | `run.rerun` | `cw run rerun` | `cw_run_rerun` | `runRegistry.rerun` | both | identical |
251
- | `run.export` | `cw run export` | `cw_run_export` | `runExportArchive` | both | identical |
252
- | `run.import` | `cw run import` | `cw_run_import` | `runImportArchive` | both | identical |
253
- | `run.verify-import` | `cw run verify-import` | `cw_run_verify_import` | `runVerifyImport` | both | identical |
254
- | `run.inspect-archive` | `cw run inspect-archive` | `cw_run_inspect_archive` | `runInspectArchive` | both | identical |
255
- | `run.restore` | `cw run restore` | `cw_run_restore` | `runRestoreArchive` | both | identical |
256
- | `report.verify-bundle` | `cw report verify-bundle` | `cw_report_verify_bundle` | `runVerifyReportBundle` | both | identical |
257
- | `report.bundle` | `cw report bundle` | `cw_report_bundle` | `reportBundle` | both | identical |
258
- | `run.drive` | `cw run drive` | `cw_run_drive` | `runDrivePreview` | both | identical |
259
- | `run.drive.step` | `cw run drive` | `cw_run_drive_step` | `runDrive` | both | projected |
198
+ | `app.list` | `cw app list` | `cw_app_list` | `app.list` | both | identical |
199
+ | `app.show` | `cw app show` | `cw_app_show` | `app.show` | both | identical |
200
+ | `app.validate` | `cw app validate` | `cw_app_validate` | `app.validate` | both | identical |
201
+ | `app.init` | `cw app init` | `cw_app_init` | `app.init` | both | identical |
202
+ | `app.package` | `cw app package` | `cw_app_package` | `app.package` | both | identical |
203
+ | `worker.list` | `cw worker list` | `cw_worker_list` | `worker.list` | both | identical |
204
+ | `worker.show` | `cw worker show` | `cw_worker_show` | `worker.show` | both | identical |
205
+ | `worker.manifest` | `cw worker manifest` | `cw_worker_manifest` | `worker.manifest` | both | identical |
206
+ | `worker.output` | `cw worker output` | `cw_worker_output` | `worker.output` | both | identical |
207
+ | `worker.fail` | `cw worker fail` | `cw_worker_fail` | `worker.fail` | both | identical |
208
+ | `worker.validate` | `cw worker validate` | `cw_worker_validate` | `worker.validate` | both | identical |
209
+ | `candidate.list` | `cw candidate list` | `cw_candidate_list` | `candidate.list` | both | identical |
210
+ | `candidate.show` | `cw candidate show` | `cw_candidate_show` | `candidate.show` | both | identical |
211
+ | `candidate.register` | `cw candidate register` | `cw_candidate_register` | `candidate.register` | both | identical |
212
+ | `candidate.score` | `cw candidate score` | `cw_candidate_score` | `candidate.score` | both | identical |
213
+ | `candidate.rank` | `cw candidate rank` | `cw_candidate_rank` | `candidate.rank` | both | identical |
214
+ | `candidate.select` | `cw candidate select` | `cw_candidate_select` | `candidate.select` | both | identical |
215
+ | `candidate.reject` | `cw candidate reject` | `cw_candidate_reject` | `candidate.reject` | both | identical |
216
+ | `approve` | `cw approve` | `cw_approve` | `approve` | both | identical |
217
+ | `reject` | `cw reject` | `cw_reject` | `reject` | both | identical |
218
+ | `comment.add` | `cw comment add` | `cw_comment_add` | `comment.add` | both | identical |
219
+ | `comment.list` | `cw comment list` | `cw_comment_list` | `comment.list` | both | identical |
220
+ | `handoff` | `cw handoff` | `cw_handoff` | `handoff` | both | identical |
221
+ | `ledger.propose` | `cw ledger propose` | `cw_ledger_propose` | `ledger.propose` | both | projected |
222
+ | `ledger.review` | `cw ledger review` | `cw_ledger_review` | `ledger.review` | both | projected |
223
+ | `ledger.verify` | `cw ledger verify` | `cw_ledger_verify` | `ledger.verify` | both | projected |
224
+ | `ledger.apply` | `cw ledger apply` | `cw_ledger_apply` | `ledger.apply` | both | projected |
225
+ | `ledger.list` | `cw ledger list` | `cw_ledger_list` | `ledger.list` | both | projected |
226
+ | `review.status` | `cw review status` | `cw_review_status` | `review.status` | both | identical |
227
+ | `review.policy` | `cw review policy` | `cw_review_policy` | `review.policy` | both | identical |
228
+ | `feedback.list` | `cw feedback list` | `cw_feedback_list` | `feedback.list` | both | identical |
229
+ | `feedback.show` | `cw feedback show` | `cw_feedback_show` | `feedback.show` | both | identical |
230
+ | `feedback.collect` | `cw feedback collect` | `cw_feedback_collect` | `feedback.collect` | both | identical |
231
+ | `feedback.task` | `cw feedback task` | `cw_feedback_task` | `feedback.task` | both | identical |
232
+ | `feedback.resolve` | `cw feedback resolve` | `cw_feedback_resolve` | `feedback.resolve` | both | identical |
233
+ | `schedule.create` | `cw schedule create` | `cw_schedule_create` | `schedule.create` | both | identical |
234
+ | `schedule.list` | `cw schedule list` | `cw_schedule_list` | `schedule.list` | both | identical |
235
+ | `schedule.due` | `cw schedule due` | `cw_schedule_due` | `schedule.due` | both | identical |
236
+ | `schedule.complete` | `cw schedule complete` | `cw_schedule_complete` | `schedule.complete` | both | identical |
237
+ | `schedule.pause` | `cw schedule pause` | `cw_schedule_pause` | `schedule.pause` | both | identical |
238
+ | `schedule.resume` | `cw schedule resume` | `cw_schedule_resume` | `schedule.resume` | both | identical |
239
+ | `schedule.run-now` | `cw schedule run-now` | `cw_schedule_run_now` | `schedule.run-now` | both | identical |
240
+ | `schedule.history` | `cw schedule history` | `cw_schedule_history` | `schedule.history` | both | identical |
241
+ | `schedule.delete` | `cw schedule delete` | `cw_schedule_delete` | `schedule.delete` | both | identical |
242
+ | `routine.create` | `cw routine create` | `cw_routine_create` | `routine.create` | both | identical |
243
+ | `routine.list` | `cw routine list` | `cw_routine_list` | `routine.list` | both | identical |
244
+ | `routine.fire` | `cw routine fire` | `cw_routine_fire` | `routine.fire` | both | identical |
245
+ | `routine.events` | `cw routine events` | `cw_routine_events` | `routine.events` | both | identical |
246
+ | `routine.delete` | `cw routine delete` | `cw_routine_delete` | `routine.delete` | both | identical |
247
+ | `registry.refresh` | `cw registry refresh` | `cw_registry_refresh` | `registry.refresh` | both | identical |
248
+ | `registry.show` | `cw registry show` | `cw_registry_show` | `registry.show` | both | identical |
249
+ | `metrics.show` | `cw metrics show` | `cw_metrics_show` | `metrics.show` | both | identical |
250
+ | `metrics.summary` | `cw metrics summary` | `cw_metrics_summary` | `metrics.summary` | both | identical |
251
+ | `run.search` | `cw run search` | `cw_run_search` | `run.search` | both | identical |
252
+ | `run.list` | `cw run list` | `cw_run_list` | `run.list` | both | identical |
253
+ | `run.show` | `cw run show` | `cw_run_show` | `run.show` | both | identical |
254
+ | `run.resume` | `cw run resume` | `cw_run_resume` | `run.resume` | both | identical |
255
+ | `run.archive` | `cw run archive` | `cw_run_archive` | `run.archive` | both | identical |
256
+ | `run.rerun` | `cw run rerun` | `cw_run_rerun` | `run.rerun` | both | identical |
257
+ | `run.export` | `cw run export` | `cw_run_export` | `run.export` | both | identical |
258
+ | `run.import` | `cw run import` | `cw_run_import` | `run.import` | both | identical |
259
+ | `run.verify-import` | `cw run verify-import` | `cw_run_verify_import` | `run.verify-import` | both | identical |
260
+ | `run.inspect-archive` | `cw run inspect-archive` | `cw_run_inspect_archive` | `run.inspect-archive` | both | identical |
261
+ | `run.restore` | `cw run restore` | `cw_run_restore` | `run.restore` | both | identical |
262
+ | `report.verify-bundle` | `cw report verify-bundle` | `cw_report_verify_bundle` | `report.verify-bundle` | both | identical |
263
+ | `report.bundle` | `cw report bundle` | `cw_report_bundle` | `report.bundle` | both | identical |
264
+ | `run.drive` | `cw run drive` | `cw_run_drive` | `run.drive` | both | identical |
265
+ | `run.drive.step` | `cw run` | `cw_run_drive_step` | `run.drive.step` | both | projected |
266
+ | `queue.add` | `cw queue add` | `cw_queue_add` | `queue.add` | both | identical |
267
+ | `queue.list` | `cw queue list` | `cw_queue_list` | `queue.list` | both | identical |
268
+ | `queue.drain` | `cw queue drain` | `cw_queue_drain` | `queue.drain` | both | identical |
269
+ | `queue.show` | `cw queue show` | `cw_queue_show` | `queue.show` | both | identical |
270
+ | `sched.plan` | `cw sched plan` | `cw_sched_plan` | `sched.plan` | both | identical |
271
+ | `sched.lease` | `cw sched lease` | `cw_sched_lease` | `sched.lease` | both | identical |
272
+ | `sched.release` | `cw sched release` | `cw_sched_release` | `sched.release` | both | identical |
273
+ | `sched.complete` | `cw sched complete` | `cw_sched_complete` | `sched.complete` | both | identical |
274
+ | `sched.reclaim` | `cw sched reclaim` | `cw_sched_reclaim` | `sched.reclaim` | both | identical |
275
+ | `sched.reset` | `cw sched reset` | `cw_sched_reset` | `sched.reset` | both | identical |
276
+ | `sched.policy.show` | `cw sched policy` | `cw_sched_policy_show` | `sched.policy.show` | both | identical |
277
+ | `sched.policy.set` | `cw sched policy` | `cw_sched_policy_set` | `sched.policy.set` | both | identical |
278
+ | `gc.plan` | `cw gc plan` | `cw_gc_plan` | `gc.plan` | both | identical |
279
+ | `gc.run` | `cw gc run` | `cw_gc_run` | `gc.run` | both | projected |
280
+ | `gc.verify` | `cw gc verify` | `cw_gc_verify` | `gc.verify` | both | identical |
281
+ | `clones.list` | `cw clones list` | `cw_clones_list` | `clones.list` | both | identical |
282
+ | `clones.gc` | `cw clones gc` | `cw_clones_gc` | `clones.gc` | both | projected |
283
+ | `orphans.list` | `cw orphans list` | `cw_orphans_list` | `orphans.list` | both | identical |
284
+ | `orphans.gc` | `cw orphans gc` | `cw_orphans_gc` | `orphans.gc` | both | projected |
285
+ | `telemetry.verify` | `cw telemetry verify` | `cw_telemetry_verify` | `telemetry.verify` | both | identical |
286
+ | `history` | `cw history` | `cw_history` | `history` | both | identical |
287
+ | `version` | `cw version` | `—` | `version` | cli-only | cli-only |
288
+ | `doctor` | `cw doctor` | `—` | `doctor` | cli-only | cli-only |
289
+ | `fix` | `cw fix` | `—` | `fix` | cli-only | cli-only |
260
290
  | `quickstart` | `cw quickstart` | `—` | `quickstart` | cli-only | cli-only |
261
- | `queue.add` | `cw queue add` | `cw_queue_add` | `runRegistry.queueAdd` | both | identical |
262
- | `queue.list` | `cw queue list` | `cw_queue_list` | `runRegistry.queueList` | both | identical |
263
- | `queue.drain` | `cw queue drain` | `cw_queue_drain` | `runRegistry.queueDrain` | both | identical |
264
- | `queue.show` | `cw queue show` | `cw_queue_show` | `runRegistry.queueShow` | both | identical |
265
- | `sched.plan` | `cw sched plan` | `cw_sched_plan` | `schedPlan` | both | identical |
266
- | `sched.lease` | `cw sched lease` | `cw_sched_lease` | `schedLease` | both | identical |
267
- | `sched.release` | `cw sched release` | `cw_sched_release` | `schedRelease` | both | identical |
268
- | `sched.complete` | `cw sched complete` | `cw_sched_complete` | `schedComplete` | both | identical |
269
- | `sched.reclaim` | `cw sched reclaim` | `cw_sched_reclaim` | `schedReclaim` | both | identical |
270
- | `sched.reset` | `cw sched reset` | `cw_sched_reset` | `schedReset` | both | identical |
271
- | `sched.policy.show` | `cw sched policy` | `cw_sched_policy_show` | `schedPolicyShow` | both | identical |
272
- | `sched.policy.set` | `cw sched policy` | `cw_sched_policy_set` | `schedPolicySet` | both | identical |
273
- | `gc.plan` | `cw gc plan` | `cw_gc_plan` | `gcPlan` | both | identical |
274
- | `gc.run` | `cw gc run` | `cw_gc_run` | `gcRun` | both | projected |
275
- | `gc.verify` | `cw gc verify` | `cw_gc_verify` | `gcVerify` | both | identical |
276
- | `clones.list` | `cw clones list` | `cw_clones_list` | `listClones` | both | identical |
277
- | `clones.gc` | `cw clones gc` | `cw_clones_gc` | `gcClones` | both | projected |
278
- | `telemetry.verify` | `cw telemetry verify` | `cw_telemetry_verify` | `telemetryVerify` | both | identical |
279
- | `demo.tamper` | `cw demo tamper` | `—` | `demoTamper` | cli-only | cli-only |
280
- | `demo.bundle` | `cw demo bundle` | `—` | `demoBundle` | cli-only | cli-only |
281
- | `history` | `cw history` | `cw_history` | `runRegistry.history` | both | identical |
282
- | `workbench.view` | `cw workbench view` | `cw_workbench_view` | `buildWorkbenchRunView` | both | identical |
283
- | `workbench.serve` | `cw workbench serve` | `cw_workbench_serve` | `buildWorkbenchServeDescriptor` | both | projected |
284
- | `metrics.show` | `cw metrics show` | `cw_metrics_show` | `metricsShow` | both | identical |
285
- | `metrics.summary` | `cw metrics summary` | `cw_metrics_summary` | `metricsSummary` | both | identical |
286
- | `approve` | `cw approve` | `cw_approve` | `collaborationApprove` | both | identical |
287
- | `reject` | `cw reject` | `cw_reject` | `collaborationReject` | both | identical |
288
- | `comment.add` | `cw comment add` | `cw_comment_add` | `collaborationComment` | both | identical |
289
- | `comment.list` | `cw comment list` | `cw_comment_list` | `collaborationCommentList` | both | identical |
290
- | `handoff` | `cw handoff` | `cw_handoff` | `collaborationHandoff` | both | identical |
291
- | `review.status` | `cw review status` | `cw_review_status` | `reviewStatus` | both | identical |
292
- | `review.policy` | `cw review policy` | `cw_review_policy` | `reviewPolicy` | both | identical |
291
+ | `demo.tamper` | `cw demo tamper` | `—` | `demo.tamper` | cli-only | cli-only |
292
+ | `demo.bundle` | `cw demo bundle` | `—` | `demo.bundle` | cli-only | cli-only |
293
+ | `loop` | `cw loop` | `—` | `loop` | cli-only | cli-only |
294
+ | `schedule` | `cw schedule` | `—` | `schedule` | cli-only | cli-only |
295
+ | `routine` | `cw routine` | `—` | `routine` | cli-only | cli-only |
296
+ | `sched` | `cw sched` | `—` | `sched` | cli-only | cli-only |
297
+ | `registry` | `cw registry` | `—` | `registry` | cli-only | cli-only |
298
+ | `queue` | `cw queue` | `—` | `queue` | cli-only | cli-only |
299
+ | `gc` | `cw gc` | `—` | `gc` | cli-only | cli-only |
300
+ | `orphans` | `cw orphans` | `—` | `orphans` | cli-only | cli-only |
301
+ | `clones` | `cw clones` | `—` | `clones` | cli-only | cli-only |
302
+ | `app.usage` | `cw app` | `—` | `app.usage` | cli-only | cli-only |
303
+ | `sandbox.usage` | `cw sandbox` | `—` | `sandbox.usage` | cli-only | cli-only |
304
+ | `state.usage` | `cw state` | `—` | `state.usage` | cli-only | cli-only |
305
+ | `audit.usage` | `cw audit` | `—` | `audit.usage` | cli-only | cli-only |
306
+ | `blackboard.usage` | `cw blackboard` | `—` | `blackboard.usage` | cli-only | cli-only |
307
+ | `candidate.usage` | `cw candidate` | `—` | `candidate.usage` | cli-only | cli-only |
308
+ | `comment.usage` | `cw comment` | `—` | `comment.usage` | cli-only | cli-only |
309
+ | `eval.usage` | `cw eval` | `—` | `eval.usage` | cli-only | cli-only |
310
+ | `telemetry.usage` | `cw telemetry` | `—` | `telemetry.usage` | cli-only | cli-only |
311
+ | `demo.usage` | `cw demo` | `—` | `demo.usage` | cli-only | cli-only |
312
+ | `multi-agent.usage` | `cw multi-agent` | `—` | `multi-agent.usage` | cli-only | cli-only |
313
+ | `node.usage` | `cw node` | `—` | `node.usage` | cli-only | cli-only |
314
+ | `backend.usage` | `cw backend` | `—` | `backend.usage` | cli-only | cli-only |
315
+ | `contract.usage` | `cw contract` | `—` | `contract.usage` | cli-only | cli-only |
316
+ | `migration.usage` | `cw migration` | `—` | `migration.usage` | cli-only | cli-only |
317
+ | `feedback.usage` | `cw feedback` | `—` | `feedback.usage` | cli-only | cli-only |
318
+ | `metrics.usage` | `cw metrics` | `—` | `metrics.usage` | cli-only | cli-only |
319
+ | `operator.usage` | `cw operator` | `—` | `operator.usage` | cli-only | cli-only |
320
+ | `topology.usage` | `cw topology` | `—` | `topology.usage` | cli-only | cli-only |
321
+ | `summary.usage` | `cw summary` | `—` | `summary.usage` | cli-only | cli-only |
322
+ | `workbench.usage` | `cw workbench` | `—` | `workbench.usage` | cli-only | cli-only |
323
+ | `worker.usage` | `cw worker` | `—` | `worker.usage` | cli-only | cli-only |
324
+ | `review.usage` | `cw review` | `—` | `review.usage` | cli-only | cli-only |
325
+ | `coordinator.usage` | `cw coordinator` | `—` | `coordinator.usage` | cli-only | cli-only |
326
+ | `man` | `cw man` | `—` | `man` | cli-only | cli-only |
327
+ | `info` | `cw info` | `—` | `info` | cli-only | cli-only |
293
328
  <!-- /gen:parity:table -->
294
329
 
295
330
  v0.1.27 closed the old gaps. It added MCP peers `cw_init`, `cw_next`,
@@ -304,32 +339,66 @@ A capability may be on one surface only, but never without word of it — it mus
304
339
  carry a recorded reason in the registry.
305
340
 
306
341
  <!-- gen:parity:cliOnly -->
307
- 13 capabilities are CLI-only:
342
+ 41 capabilities are CLI-only:
308
343
 
309
- - `help` — Human help text. MCP hosts enumerate capabilities via tools/list, not a help command.
310
- - `version` — Version string — no structured data contract.
311
- - `update` — Self-update via npm — inherently local shell operation, no MCP surface.
312
- - `fix` — Environment fix commands are local diagnostics, same reasoning as doctor.
313
- - `info` — Human-focused workflow discovery tool (like Homebrew's `brew info`). MCP agents discover workflows via cw_list and cw_app_show tools.
314
- - `search` — Human-focused workflow discovery (like Homebrew's `brew search`). MCP agents discover workflows via cw_list tool.
315
- - `man` — Human documentation viewer. MCP agents read docs/ directly via file tools.
344
+ - `version` — version is a local, no-run-state print; the old build never gave it an MCP peer.
316
345
  - `doctor` — Environment diagnostics are inherently local to the CLI host — Node version, $PATH, $CW_HOME/cwd writability. An MCP client diagnosing the server process's environment is not meaningful; agents already receive the same readiness facts in their typed results (e.g. status: blocked, agentConfigured). Inspired by `brew doctor`.
317
- - `loop` — Convenience alias of `schedule create` with kind=loop. MCP hosts use cw_schedule_create with kind=loop.
318
- - `schedule daemon` — Long-running desktop daemon process, not a request/response tool. MCP hosts drive ticks via cw_schedule_due + cw_schedule_run_now.
319
- - `quickstart` — CLI UX convenience layer (newcomer first value in one command) over the existing run.drive.step + report verbs; it spawns nothing new and delegates worker execution to the operator's agent backend. MCP hosts compose the same outcome from cw_run_drive_step + cw_report (+ cw_report_bundle for --bundle). `audit-run` is a CLI-only alias of the same wrapper.
346
+ - `fix` — Environment fix commands are local diagnostics, same reasoning as doctor.
347
+ - `quickstart` — quickstart composes plan/runDrive/report; SPEC/mcp.md's declared cli-only list names it explicitly (no MCP peer). `audit-run` is a CLI-only alias of the same wrapper.
320
348
  - `demo tamper` — Human-facing demonstration (operator/newcomer onboarding); the underlying integrity check is exposed programmatically as the both-surface telemetry.verify. No agent or MCP client needs to invoke a demo.
321
349
  - `demo bundle` — Human-facing demonstration (operator/newcomer onboarding); the underlying integrity check is exposed programmatically as the both-surface report.verify-bundle. No agent or MCP client needs to invoke a demo.
350
+ - `loop` — loop is CLI-only sugar over schedule.create; the old build never gave it an MCP tool of its own (SPEC/scheduling-registry.md section I).
351
+ - `schedule` — cw schedule is the desktop wall-clock scheduler; SPEC/mcp.md declares its MCP peers per verb (cw_schedule_*), each wired below.
352
+ - `routine` — cw routine is the API/GitHub-style trigger bridge; SPEC/mcp.md declares its MCP peers per verb (cw_routine_*), each wired below.
353
+ - `sched` — cw sched is the durable-queue lease scheduler; SPEC/mcp.md declares its MCP peers per verb (cw_sched_*), each wired below.
354
+ - `registry` — cw registry is the derived run-registry index; SPEC/mcp.md declares its MCP peers (cw_registry_refresh|show), each wired below.
355
+ - `queue` — cw queue is the durable run queue; SPEC/mcp.md declares its MCP peers (cw_queue_add|list|drain|show), each wired below.
356
+ - `gc` — cw gc is run retention & provable reclamation; SPEC/mcp.md declares its MCP peers (cw_gc_plan|run|verify), each wired below.
357
+ - `orphans` — cw orphans reclaims killed-process run dirs with no state.json; SPEC/mcp.md declares its MCP peers (cw_orphans_list|gc), each wired below.
358
+ - `clones` — cw clones is the cached remote-source checkout cache; SPEC/mcp.md declares its MCP peers (cw_clones_list|gc), each wired below.
359
+ - `app` — app.usage exists only to own the fixed usage-error text for an unrecognized app subcommand; every real app.* action is its own capability row above.
360
+ - `sandbox` — sandbox.usage exists only to own the fixed usage-error text for an unrecognized sandbox subcommand; every real sandbox.* action is its own capability row above.
361
+ - `state` — state.usage exists only to own the fixed usage-error text for an unrecognized state subcommand; every real state.* action is its own capability row above.
362
+ - `audit` — audit.usage exists only to own the fixed usage-error text for an unrecognized audit subcommand; every real audit.* action is its own capability row above.
363
+ - `blackboard` — blackboard.usage exists only to own the fixed usage-error text for an unrecognized blackboard subcommand; every real blackboard.* action is its own capability row above.
364
+ - `candidate` — candidate.usage exists only to own the fixed usage-error text for an unrecognized candidate subcommand; every real candidate.* action is its own capability row above.
365
+ - `comment` — comment.usage exists only to own the fixed usage-error text for an unrecognized comment subcommand; every real comment.* action is its own capability row above.
366
+ - `eval` — eval.usage exists only to own the fixed usage-error text for an unrecognized eval subcommand; every real eval.* action is its own capability row above.
367
+ - `telemetry` — telemetry.usage exists only to own the fixed usage-error text for an unrecognized telemetry subcommand; every real telemetry.* action is its own capability row above.
368
+ - `demo` — demo.usage exists only to own the fixed usage-error text for an unrecognized demo subcommand; every real demo.* action is its own capability row above.
369
+ - `multi-agent` — multi-agent.usage exists only to own the fixed usage-error text for an unrecognized multi-agent subcommand; every real multi-agent.* action is its own capability row above.
370
+ - `node` — node.usage exists only to own the fixed usage-error text for an unrecognized node subcommand; every real node.* action is its own capability row above.
371
+ - `backend` — backend.usage exists only to own the fixed usage-error text for an unrecognized backend subcommand; every real backend.* action is its own capability row above.
372
+ - `contract` — contract.usage exists only to own the fixed usage-error text for an unrecognized contract subcommand; every real contract.* action is its own capability row above.
373
+ - `migration` — migration.usage exists only to own the fixed usage-error text for an unrecognized migration subcommand; every real migration.* action is its own capability row above.
374
+ - `feedback` — feedback.usage exists only to own the fixed usage-error text for an unrecognized feedback subcommand; every real feedback.* action is its own capability row above.
375
+ - `metrics` — metrics.usage exists only to own the fixed usage-error text for an unrecognized metrics subcommand; every real metrics.* action is its own capability row above.
376
+ - `operator` — operator.usage exists only to own the fixed usage-error text for an unrecognized operator subcommand; every real operator.* action is its own capability row above.
377
+ - `topology` — topology.usage exists only to own the fixed usage-error text for an unrecognized topology subcommand; every real topology.* action is its own capability row above.
378
+ - `summary` — summary.usage exists only to own the fixed usage-error text for an unrecognized summary subcommand; every real summary.* action is its own capability row above.
379
+ - `workbench` — workbench.usage exists only to own the fixed usage-error text for an unrecognized workbench subcommand; every real workbench.* action is its own capability row above.
380
+ - `worker` — worker.usage exists only to own the fixed usage-error text for an unrecognized worker subcommand; every real worker.* action is its own capability row above.
381
+ - `review` — review.usage exists only to own the fixed usage-error text for an unrecognized review subcommand; every real review.* action is its own capability row above.
382
+ - `coordinator` — coordinator.usage exists only to own the fixed usage-error text for an unrecognized coordinator subcommand; every real coordinator.* action is its own capability row above.
383
+ - `man` — man is a CLI-only raw-file reader over docs/; the old build never gave it an MCP peer.
384
+ - `info` — info is a CLI-only convenience card over app.show; the old build never gave it an MCP peer.
322
385
  <!-- /gen:parity:cliOnly -->
323
386
 
324
387
  <!-- gen:parity:projected -->
325
- Six capabilities are payload-divergent on purpose (`projected`):
388
+ Twelve capabilities are payload-divergent on purpose (`projected`):
326
389
 
327
- - `commit` — Both surfaces route through the single core entry runner.commit. The CLI emits the raw StateCommitResult for scripting (commit.id, commit.evidence, commit.gate, commit.acceptanceRationale); cw_commit emits the operator commit envelope (commitId, verifierGated, checkpoint, evidenceCount, snapshotPath, nextActions, plus the raw result under `commit`). Declared projection via capability-core.commitEnvelope, not drift.
390
+ - `workbench.serve` — Both surfaces route through the single core entry buildWorkbenchServeDescriptor and return the IDENTICAL serve descriptor under `cw workbench serve --json`/`--once` and `cw_workbench_serve`. They diverge only in side effect, not payload: the CLI's default `cw workbench serve` (no --once) additionally STARTS the blocking localhost host, which an MCP stdio host cannot do, so cw_workbench_serve only ever returns the descriptor. Declared divergence, not drift.
328
391
  - `backend.agent.config.set` — Mutating: persists $CW_HOME/agent-config.json (secret-stripped) before returning the effective config; both surfaces perform the same write — it is a surface-mutating verb, not a read probe.
392
+ - `commit` — Both surfaces route through the single core entry runner.commit. The CLI emits the raw StateCommitResult for scripting (commit.id, commit.evidence, commit.gate); cw_commit emits the operator commit envelope (commitId, verifierGated, checkpoint, evidenceCount, snapshotPath, nextActions, plus the raw result under `commit`). Declared projection, not drift.
393
+ - `ledger.propose` — Mints a fresh entry each call: createdAt is the wall-clock instant and the id/digest are derived from it, so the output is inherently non-deterministic and a byte-identity probe does not apply. Both surfaces call the same buildLedgerProposal core; round-trip + fail-closed behavior is covered by ledger-verify-smoke.
394
+ - `ledger.review` — Mints a fresh timestamped/digested verdict each call — non-deterministic output, same reasoning as ledger.propose. Both surfaces call the same buildLedgerReview core.
395
+ - `ledger.verify` — The entry arrives by --file/stdin on the CLI and as an `entry` argument over MCP; there is no shared arg-bag the byte-identity probe can feed both. Both surfaces call the same verifyLedgerEntry core; ledger-verify-smoke proves the fail-closed contract.
396
+ - `ledger.apply` — The entry arrives by --file/stdin on the CLI and as an `entry` argument over MCP; there is no shared arg-bag the byte-identity probe can feed both. Both surfaces call the same applyLedgerProposal core (a fail-closed wrapper over verifyLedgerEntry); ledger-apply-smoke proves the diff only escapes a verified proposal.
397
+ - `ledger.list` — Output depends on the on-disk contents of the named ledger directory/directories, which the generic payload probe does not populate. Both surfaces call the same listLedgerEntries/unionLedgerEntries core; ledger-verify-smoke covers the fail-closed inbox and the multi-mirror union.
329
398
  - `run.drive.step` — Mutating: advances the run by spawning the external agent per worker and recording attested output — not a read probe. CLI (--drive/--step) and MCP route through the same drive() core.
330
399
  - `gc.run` — Mutating: frees disk and appends a tombstone; both surfaces perform the identical transaction but the payload reports now-derived bytesFreed/tombstone.
331
400
  - `clones.gc` — Mutating: removes cache directories and reports now-derived freedBytes/removed; both surfaces perform the identical reclamation.
332
- - `workbench.serve` — Both surfaces route through the single core entry buildWorkbenchServeDescriptor and return the IDENTICAL serve descriptor under `cw workbench serve --json`/`--once` and `cw_workbench_serve`. They diverge only in side effect, not payload: the CLI's default `cw workbench serve` (no --once) additionally STARTS the blocking localhost host (like `schedule daemon`), which an MCP stdio host cannot do, so cw_workbench_serve only ever returns the descriptor. Declared divergence, not drift.
401
+ - `orphans.gc` — Mutating: removes orphan run directories and reports now-derived freedBytes/removed; both surfaces perform the identical sweep.
333
402
  <!-- /gen:parity:projected -->
334
403
 
335
404
  ## Fail-Closed Rules
@@ -553,3 +622,7 @@ CLI golden-path fixes: `cw -q "…"` routes the question (was read as an app id
553
622
  0.1.96
554
623
 
555
624
  0.1.97
625
+
626
+ 0.1.98
627
+
628
+ 0.2.0