cool-workflow 0.2.4 → 0.2.5

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 (132) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/.codex-plugin/plugin.json +1 -1
  3. package/.gemini-plugin/mcp.json +10 -0
  4. package/.gemini-plugin/plugin.json +40 -0
  5. package/.opencode-plugin/mcp.json +10 -0
  6. package/.opencode-plugin/plugin.json +40 -0
  7. package/README.md +202 -48
  8. package/apps/architecture-review/app.json +1 -1
  9. package/apps/architecture-review-fast/app.json +1 -1
  10. package/apps/end-to-end-golden-path/app.json +1 -1
  11. package/apps/pr-review-fix-ci/app.json +1 -1
  12. package/apps/release-cut/app.json +1 -1
  13. package/apps/research-synthesis/app.json +1 -1
  14. package/dist/cli/dispatch.js +32 -4
  15. package/dist/cli/entry.js +11 -19
  16. package/dist/cli/global-flags.js +113 -0
  17. package/dist/cli/parseargv.js +7 -1
  18. package/dist/core/capability-data.js +337 -8
  19. package/dist/core/format/help.js +73 -3
  20. package/dist/core/format/recovery-hint.js +32 -0
  21. package/dist/core/multi-agent/collaboration.js +35 -6
  22. package/dist/core/multi-agent/runtime.js +7 -0
  23. package/dist/core/multi-agent/trust-policy.js +7 -1
  24. package/dist/core/pipeline/contract.js +7 -0
  25. package/dist/core/pipeline/error-feedback.js +2 -2
  26. package/dist/core/trust/evidence-grounding.js +13 -1
  27. package/dist/core/util/cli-args.js +22 -0
  28. package/dist/core/version.js +1 -1
  29. package/dist/mcp/dispatch.js +22 -2
  30. package/dist/mcp/server.js +124 -13
  31. package/dist/mcp-server.js +20 -0
  32. package/dist/shell/commit.js +8 -2
  33. package/dist/shell/coordinator-io.js +73 -1
  34. package/dist/shell/drive.js +120 -63
  35. package/dist/shell/error-feedback-io.js +6 -0
  36. package/dist/shell/execution-backend/agent.js +195 -23
  37. package/dist/shell/execution-backend/container.js +44 -10
  38. package/dist/shell/execution-backend/local.js +32 -0
  39. package/dist/shell/fs-atomic.js +93 -12
  40. package/dist/shell/ledger-cli.js +9 -2
  41. package/dist/shell/multi-agent-cli.js +5 -1
  42. package/dist/shell/onramp.js +48 -5
  43. package/dist/shell/pipeline.js +2 -1
  44. package/dist/shell/reclamation-io.js +10 -9
  45. package/dist/shell/run-export.js +52 -4
  46. package/dist/shell/run-store.js +156 -0
  47. package/dist/shell/scheduler-io.js +101 -10
  48. package/dist/shell/telemetry-ledger-io.js +36 -24
  49. package/dist/shell/trust-audit.js +104 -10
  50. package/dist/shell/workbench-host.js +121 -10
  51. package/dist/shell/workbench.js +79 -5
  52. package/dist/shell/worker-isolation.js +1 -1
  53. package/dist/wiring/capability-table/basics.js +5 -0
  54. package/dist/wiring/capability-table/exec-backend.js +40 -22
  55. package/dist/wiring/capability-table/pipeline.js +32 -0
  56. package/dist/wiring/capability-table/registry-core.js +26 -3
  57. package/dist/wiring/capability-table/reporting.js +7 -1
  58. package/dist/wiring/capability-table/scheduling-registry.js +8 -2
  59. package/dist/wiring/capability-table/trust-ledger.js +54 -12
  60. package/docs/agent-delegation-drive.7.md +15 -0
  61. package/docs/cli-mcp-parity.7.md +25 -0
  62. package/docs/contract-migration-tooling.7.md +2 -0
  63. package/docs/control-plane-scheduling.7.md +36 -0
  64. package/docs/cross-agent-ledger.7.md +20 -8
  65. package/docs/durable-state-and-locking.7.md +2 -0
  66. package/docs/evidence-adoption-reasoning-chain.7.md +2 -0
  67. package/docs/execution-backends.7.md +2 -0
  68. package/docs/fix.7.md +4 -4
  69. package/docs/getting-started.md +40 -32
  70. package/docs/index.md +17 -0
  71. package/docs/launch/demo.tape +4 -3
  72. package/docs/mcp-app-surface.7.md +6 -0
  73. package/docs/multi-agent-cli-mcp-surface.7.md +2 -0
  74. package/docs/multi-agent-eval-replay-harness.7.md +2 -0
  75. package/docs/multi-agent-operator-ux.7.md +2 -0
  76. package/docs/node-snapshot-diff-replay.7.md +2 -0
  77. package/docs/observability-cost-accounting.7.md +2 -0
  78. package/docs/project-index.md +39 -9
  79. package/docs/real-execution-backends.7.md +2 -0
  80. package/docs/release-and-migration.7.md +2 -0
  81. package/docs/release-tooling.7.md +2 -0
  82. package/docs/routine.7.md +22 -0
  83. package/docs/run-registry-control-plane.7.md +2 -0
  84. package/docs/run-retention-reclamation.7.md +10 -4
  85. package/docs/state-explosion-management.7.md +2 -0
  86. package/docs/team-collaboration.7.md +2 -0
  87. package/docs/trust-audit-anchor.7.md +2 -0
  88. package/docs/web-desktop-workbench.7.md +24 -2
  89. package/docs/workflow-app-framework.7.md +31 -0
  90. package/manifest/plugin.manifest.json +1 -1
  91. package/manifest/source-context-profiles.json +4 -3
  92. package/package.json +4 -2
  93. package/scripts/agents/agent-adapter-core.js +26 -0
  94. package/scripts/agents/claude-p-agent.js +4 -1
  95. package/scripts/agents/codex-agent.js +4 -0
  96. package/scripts/agents/cw-attest-wrap.js +1 -1
  97. package/scripts/agents/gemini-agent.js +4 -0
  98. package/scripts/agents/opencode-agent.js +5 -0
  99. package/scripts/block-unapproved-tag.js +160 -0
  100. package/scripts/canonical-apps.js +4 -4
  101. package/scripts/children/batch-delegate-child.js +72 -4
  102. package/scripts/children/http-batch-delegate-child.js +132 -0
  103. package/scripts/children/http-delegate-child.js +8 -0
  104. package/scripts/dogfood-release.js +2 -2
  105. package/scripts/fake-date-for-reproduction.js +1 -1
  106. package/scripts/golden-path.js +4 -4
  107. package/scripts/lang-policy-check.js +82 -0
  108. package/scripts/purity-gate.js +16 -3
  109. package/scripts/release-check.js +2 -1
  110. package/scripts/release-flow.js +128 -30
  111. package/scripts/release-gate.js +184 -0
  112. package/scripts/release-oneclick.js +38 -7
  113. package/scripts/release-tags.js +47 -0
  114. package/scripts/verdict-keygen.js +2 -2
  115. package/scripts/verify-bump-reproduction.js +193 -0
  116. package/scripts/verify-verdict-signature.js +1 -1
  117. package/ui/workbench/app.css +41 -9
  118. package/ui/workbench/app.js +160 -27
  119. package/ui/workbench/index.html +2 -2
  120. package/docs/agent-framework.md +0 -177
  121. package/docs/designs/handoff-ledger.md +0 -145
  122. package/docs/dogfood/resume-drive-real-agent-2026-06-14.md +0 -40
  123. package/docs/launch/launch-kit.md +0 -195
  124. package/docs/launch/pre-launch-checklist.md +0 -53
  125. package/docs/readme-v0.1.87-full.md +0 -301
  126. package/docs/routines.md +0 -101
  127. package/docs/scheduled-tasks.md +0 -80
  128. package/scripts/agents/claude-p-agent.sh +0 -9
  129. package/scripts/block-unapproved-tag.sh +0 -75
  130. package/scripts/release-gate.sh +0 -94
  131. package/scripts/verify-bump-reproduction.sh +0 -148
  132. package/scripts/verify-container-selfref.js +0 -64
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "cool-workflow",
3
3
  "description": "A workflow control plane and run-time you are able to check: it sends out jobs in TypeScript, makes certain of work against facts before it goes through, puts state into fixed records, orders jobs by time, runs jobs again and again, gets a group of agents to do their parts together, and talks MCP. It gives the doing of the work to outside agents — it never runs the models itself.",
4
- "version": "0.2.4",
4
+ "version": "0.2.5",
5
5
  "author": {
6
6
  "name": "COOLWHITE LLC"
7
7
  },
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cool-workflow",
3
- "version": "0.2.4",
3
+ "version": "0.2.5",
4
4
  "description": "A workflow control plane and run-time you are able to check: it sends out jobs in TypeScript, makes certain of work against facts before it goes through, puts state into fixed records, orders jobs by time, runs jobs again and again, gets a group of agents to do their parts together, and talks MCP. It gives the doing of the work to outside agents — it never runs the models itself.",
5
5
  "author": {
6
6
  "name": "COOLWHITE LLC"
@@ -0,0 +1,10 @@
1
+ {
2
+ "mcpServers": {
3
+ "cool-workflow": {
4
+ "command": "node",
5
+ "args": [
6
+ "./dist/mcp-server.js"
7
+ ]
8
+ }
9
+ }
10
+ }
@@ -0,0 +1,40 @@
1
+ {
2
+ "name": "cool-workflow",
3
+ "description": "A workflow control plane and run-time you are able to check: it sends out jobs in TypeScript, makes certain of work against facts before it goes through, puts state into fixed records, orders jobs by time, runs jobs again and again, gets a group of agents to do their parts together, and talks MCP. It gives the doing of the work to outside agents — it never runs the models itself.",
4
+ "version": "0.2.5",
5
+ "author": {
6
+ "name": "COOLWHITE LLC"
7
+ },
8
+ "homepage": "https://github.com/coo1white/cool-workflow",
9
+ "license": "BSD-2-Clause",
10
+ "keywords": [
11
+ "workflow",
12
+ "control-plane",
13
+ "dynamic-workflows",
14
+ "subagents",
15
+ "orchestration",
16
+ "agents",
17
+ "multi-agent",
18
+ "mcp"
19
+ ],
20
+ "skills": "./skills/",
21
+ "mcpServers": "./.gemini-plugin/mcp.json",
22
+ "interface": {
23
+ "displayName": "Cool Workflow",
24
+ "shortDescription": "A workflow control plane you are able to check.",
25
+ "longDescription": "Cool Workflow (CW) is a workflow control plane and run-time you are able to check. It gives you: a TypeScript COL run-time, Workflow App framework agreements, a Router and Orchestrator, Subagent Dispatch, a same-every-time Harness, a hard-questioning Verifier, Git and State Commit, Sandbox Profiles, time-ordered jobs, jobs that come round again, a high-level Multi-Agent CLI and MCP host face, and an MCP JSON-RPC 2.0 bridge. Builders make workflow apps they are able to use again; CW gives the doing of the work to an outside agent host and keeps a checked, play-again record of state — it never puts a model API inside itself.",
26
+ "developerName": "COOLWHITE LLC",
27
+ "category": "Productivity",
28
+ "capabilities": [
29
+ "Interactive",
30
+ "Read",
31
+ "Write"
32
+ ],
33
+ "brandColor": "#2563EB",
34
+ "defaultPrompt": [
35
+ "Use Cool Workflow to plan this as phases and agents.",
36
+ "Run the architecture review workflow with CW.",
37
+ "Create a reusable CW workflow for this task."
38
+ ]
39
+ }
40
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "mcpServers": {
3
+ "cool-workflow": {
4
+ "command": "node",
5
+ "args": [
6
+ "./dist/mcp-server.js"
7
+ ]
8
+ }
9
+ }
10
+ }
@@ -0,0 +1,40 @@
1
+ {
2
+ "name": "cool-workflow",
3
+ "description": "A workflow control plane and run-time you are able to check: it sends out jobs in TypeScript, makes certain of work against facts before it goes through, puts state into fixed records, orders jobs by time, runs jobs again and again, gets a group of agents to do their parts together, and talks MCP. It gives the doing of the work to outside agents — it never runs the models itself.",
4
+ "version": "0.2.5",
5
+ "author": {
6
+ "name": "COOLWHITE LLC"
7
+ },
8
+ "homepage": "https://github.com/coo1white/cool-workflow",
9
+ "license": "BSD-2-Clause",
10
+ "keywords": [
11
+ "workflow",
12
+ "control-plane",
13
+ "dynamic-workflows",
14
+ "subagents",
15
+ "orchestration",
16
+ "agents",
17
+ "multi-agent",
18
+ "mcp"
19
+ ],
20
+ "skills": "./skills/",
21
+ "mcpServers": "./.opencode-plugin/mcp.json",
22
+ "interface": {
23
+ "displayName": "Cool Workflow",
24
+ "shortDescription": "A workflow control plane you are able to check.",
25
+ "longDescription": "Cool Workflow (CW) is a workflow control plane and run-time you are able to check. It gives you: a TypeScript COL run-time, Workflow App framework agreements, a Router and Orchestrator, Subagent Dispatch, a same-every-time Harness, a hard-questioning Verifier, Git and State Commit, Sandbox Profiles, time-ordered jobs, jobs that come round again, a high-level Multi-Agent CLI and MCP host face, and an MCP JSON-RPC 2.0 bridge. Builders make workflow apps they are able to use again; CW gives the doing of the work to an outside agent host and keeps a checked, play-again record of state — it never puts a model API inside itself.",
26
+ "developerName": "COOLWHITE LLC",
27
+ "category": "Productivity",
28
+ "capabilities": [
29
+ "Interactive",
30
+ "Read",
31
+ "Write"
32
+ ],
33
+ "brandColor": "#2563EB",
34
+ "defaultPrompt": [
35
+ "Use Cool Workflow to plan this as phases and agents.",
36
+ "Run the architecture review workflow with CW.",
37
+ "Create a reusable CW workflow for this task."
38
+ ]
39
+ }
40
+ }
package/README.md CHANGED
@@ -12,7 +12,7 @@
12
12
  [![release](https://img.shields.io/github/v/tag/coo1white/cool-workflow?style=flat-square&label=release&color=brightgreen&sort=semver)](https://github.com/coo1white/cool-workflow/tags)
13
13
  [![license](https://img.shields.io/badge/license-BSD--2--Clause-blue?style=flat-square)](https://github.com/coo1white/cool-workflow/blob/main/LICENSE)
14
14
 
15
- ### Get a saved, cited report from your AI agent — not a chat message you lose.
15
+ ### Get a saved report from your AI agent, with every claim tied to a line of code — not a chat answer you lose.
16
16
 
17
17
  <br>
18
18
 
@@ -20,9 +20,25 @@
20
20
 
21
21
  </div>
22
22
 
23
- Point an AI coding agent at a repo (or any folder of docs) and Cool Workflow turns the run into a
24
- **durable, inspectable workflow**: it plans the work, delegates each task to *your* agent, records and
25
- verifies every result, then writes a report where every claim is cited to a `file.ts:42`.
23
+ ## What is this?
24
+
25
+ You may already use an AI coding agent a tool like `claude`, `codex`, or
26
+ `gemini` that reads your code and answers questions about it. The answer comes
27
+ back as a chat message. Chat is easy to lose, and hard to check.
28
+
29
+ Cool Workflow (`cw`) is a small command-line tool that fixes that. Point it at
30
+ a repo — or any folder of docs — and:
31
+
32
+ - **It plans the work.** Your question becomes a set of small tasks.
33
+ - **Your agent does the work.** CW never runs a model itself. Your own agent
34
+ does the reading and the thinking.
35
+ - **It keeps a record.** Every step is saved as plain JSON files on your own
36
+ disk, under `.cw/`. You can read them, compare them, and pick a run up again
37
+ later.
38
+ - **It checks the results.** A result with no evidence does not get through —
39
+ it stops in a clear `unexplained` state instead.
40
+ - **It writes a report.** Every claim points to a real place in your code,
41
+ like `file.ts:42`. Click it and see for yourself.
26
42
 
27
43
  > **The model is fuel. CW is the black-box recorder, the dashboard, and the gearbox — never the engine.**
28
44
  > It never calls a model API, never holds your keys, and never uploads your code. Your agent spends the
@@ -48,12 +64,16 @@ cw version
48
64
  Upgrade later with `brew update && brew upgrade cool-workflow`.
49
65
  </details>
50
66
 
51
- **You need:** Node.js v18+ and one agent CLI on your machine — `claude`, `codex`, `gemini`, or
52
- `opencode` (all auto-detected). No agent yet? `cw demo tamper` still works **CW never runs a model itself.**
67
+ **You need:** Node.js v18 or newer, and one agent CLI on your machine —
68
+ `claude`, `codex`, `gemini`, or `opencode`. CW finds them by itself. No agent
69
+ yet? Step 1 below still works — **CW never runs a model itself.**
70
+
71
+ Not sure what you have? `cw doctor` checks your setup and `cw fix` prints the
72
+ commands that put it right.
53
73
 
54
74
  ## Quick Start
55
75
 
56
- ### 1 · Prove it works — 30 seconds, no agent needed
76
+ ### 1 · See it work — 30 seconds, no agent needed
57
77
 
58
78
  ```bash
59
79
  cw demo tamper
@@ -61,25 +81,32 @@ cw demo tamper
61
81
  # → VERDICT: tamper-evidence holds ✓
62
82
  ```
63
83
 
84
+ This is CW's trust check working on itself: it makes a signed record, breaks
85
+ it on purpose in three ways, and catches all three breaks.
86
+
64
87
  ### 2 · Ask a question about your code — one command
65
88
 
89
+ Go to any project folder and run:
90
+
66
91
  ```bash
67
92
  cw -q "How does auth work end-to-end here?"
68
93
  ```
69
94
 
70
- Any question works, not only a risk audit — architecture questions, "is it safe to change X",
71
- "what would break if Y rotated" all get a direct, cited answer. CW auto-detects the current repo
72
- and the first agent on your `PATH`. Pin a specific one with a flag (`-claude`, `-codex`, `-gemini`,
73
- `-deepseek`). Point it anywhere no `cd` required or review a **remote repo by URL** and CW
74
- clones, snapshots, and reviews the checkout:
95
+ Any question works "how does X work", "is it safe to change Y", "what would
96
+ break if Z rotated". CW uses the current repo and the first agent it finds on
97
+ your `PATH`. Want a specific agent? Add a flag (`-claude`, `-codex`, `-gemini`,
98
+ `-opencode`, `-deepseek`). DeepSeek is the one with no auto-detectit runs
99
+ through `opencode` so `-deepseek` is the only way to get it. You can
100
+ point CW at any folder, or at a **repo on the web by
101
+ URL** — CW clones it and reviews the copy:
75
102
 
76
103
  ```bash
77
104
  cw -q "What are the security risks?" -dir /path/to/project
78
105
  cw -q "Is it safe to swap this queue for Redis?" --link https://github.com/owner/repo
79
106
  ```
80
107
 
81
- **Not just code.** Aim CW at a folder of docs, notes, or papers and it reads them as sources for the
82
- same saved, cited report:
108
+ **Not just code.** Point CW at a folder of docs, notes, or papers and it reads
109
+ them as sources for the same saved report:
83
110
 
84
111
  ```bash
85
112
  cw quickstart research-synthesis --repo /path/to/papers \
@@ -88,41 +115,47 @@ cw quickstart research-synthesis --repo /path/to/papers \
88
115
 
89
116
  ### 3 · Open the report
90
117
 
91
- The command prints the path. Every finding carries a clickable `file.ts:42` pointer:
118
+ The command prints the path when it is done. Every finding has a clickable
119
+ `file.ts:42` pointer:
92
120
 
93
121
  ```bash
94
122
  cat .cw/runs/<run-id>/report.md
95
123
  ```
96
124
 
97
- While it runs you get a calm, Claude-Code-style live view — a compact rolling window of tool calls
98
- that updates in place instead of an endless wall — and a clean findings table when it's done.
125
+ While it runs you get a calm live view — a small rolling window of tool calls
126
+ that updates in place, not an endless wall of text — and a clean findings
127
+ table at the end.
99
128
 
100
129
  ---
101
130
 
102
131
  ## Why Cool Workflow
103
132
 
104
- Most agent tooling runs a whole task as one long prompt, then hands you a chat message. When the work
105
- is long, parallel, or high-stakes, you can't tell what happened or trust the result. CW treats it as a
106
- **runtime problem** — and rests on four commitments:
133
+ Most agent tools run a whole task as one long prompt, then hand you a chat
134
+ message. When the work is long, parallel, or high-stakes, you cannot tell what
135
+ happened or trust the result. CW treats that as a **runtime problem** — like an
136
+ operating system keeping processes safe and visible — and rests on four
137
+ commitments:
107
138
 
108
139
  | Commitment | What it means for you |
109
140
  |---|---|
110
- | **Model as fuel, not engine** | CW never calls a model API. Execution is always delegated to your agent, so the backend is swappable and your credentials and code never leave your machine. |
111
- | **Evidence-gated decisions** | Every adopted result records its **basis, authority, rationale, and the alternative it beat.** Missing evidence doesn't slip through — it fails closed to a visible `unexplained` state. |
141
+ | **Model as fuel, not engine** | CW never calls a model API. Your agent does all the model work, so you can swap agents freely, and your keys and code never leave your machine. |
142
+ | **Evidence-gated decisions** | Every accepted result records its **basis, authority, rationale, and the option it beat.** Missing evidence does not slip through — the result stops in a visible `unexplained` state. |
112
143
  | **Deterministic, local replay** | Every step is plain JSON under `.cw/runs/<id>/` — read it, diff it, resume it, replay it. No hidden database; the runtime never *guesses* success. |
113
- | **Vendor-neutral by design** | One source-of-truth manifest generates every vendor adapter (Claude, Codex, …) over a shared CLI + MCP runtime, with a fail-closed drift check. No lock-in, no forked logic. |
144
+ | **Vendor-neutral by design** | One source-of-truth manifest generates every vendor adapter (Claude, Codex, …) over one shared CLI + MCP runtime, with a fail-closed drift check. No lock-in. |
114
145
 
115
- **What CW is not.** CW is not the model — it never calls a model API and never holds your keys;
116
- your agent does that work out of process. It is not a CI system or a build tool — it keeps and
117
- checks the record of agent work, it does not stand in for your tests or your release pipeline.
118
- And it is not a big framework to take up it is a small set of commands over plain `.cw/` files
119
- on your own disk, not a library your code has to be built around.
146
+ **What CW is not.** CW is not the model — it never calls a model API and never
147
+ holds your keys; your agent does that work in its own process. It is not a CI
148
+ system or a build tool it keeps and checks the record of agent work; it does
149
+ not take the place of your tests or your release pipeline. And it is not a big
150
+ framework to build on it is a small set of commands over plain `.cw/` files
151
+ on your own disk, not a library your code has to wrap itself around.
120
152
 
121
153
  ## How It Works
122
154
 
123
- CW is a small TypeScript tool with **zero runtime dependencies**. It drives your agent over a repo — or
124
- any folder — in saved, replayable stages, writing everything to disk as inspectable files. It never
125
- imports a model SDK or stores an API key.
155
+ CW is a small TypeScript tool with **zero runtime dependencies**. It drives
156
+ your agent over a repo — or any folder — in saved stages that you can replay,
157
+ writing everything to disk as files you can open and read. It never imports a
158
+ model SDK or stores an API key.
126
159
 
127
160
  <div align="center">
128
161
  <img src="https://raw.githubusercontent.com/coo1white/cool-workflow/main/docs/assets/cw-pipeline.png" alt="The CW pipeline: ask, plan, dispatch (delegated to your agent), verify (evidence gate, fails closed), commit verified state, and a saved, cited, signed report — every step recorded as durable .cw/ JSON." width="100%">
@@ -137,22 +170,24 @@ ask simple → run simple → verify simple → resume simple
137
170
  | Workflow | What it produces |
138
171
  |---|---|
139
172
  | `architecture-review` | Map a repo, rank risks, and back every claim with `file:line` evidence |
140
- | `pr-review-fix-ci` | Review a PR or branch, diagnose CI, and propose + verify fixes |
173
+ | `pr-review-fix-ci` | Review a PR or branch, work out why CI fails, and propose + verify fixes |
141
174
  | `research-synthesis` | Answer a question over a local folder of files — your docs, notes, or papers |
142
175
  | `release-cut` | Run a gated, reviewed release with dry-run evidence |
143
176
 
144
- Every app writes the same thing: a saved, cited report you can re-verify offline. These four are
145
- the main lanes; `cw app list` shows all eight installed apps.
177
+ Every app writes the same thing: a saved report you can check again offline,
178
+ with every claim tied to its source. These four are the main lanes;
179
+ `cw app list` shows all eight installed apps.
146
180
 
147
181
  ```bash
148
182
  cw app list # see everything installed
149
183
  cw doctor # check your setup → cw fix shows the fix commands
150
184
  ```
151
185
 
152
- **Multi-agent, when you need it.** Fan work out across agents with built-in topologies, compose flows
153
- (a task can run a whole child workflow with `subWorkflow`, or a `loop()` phase can iterate until a
154
- predicate or token budget says stop), and re-run fast `cw run <app> --drive --incremental` reuses
155
- every step whose inputs didn't change.
186
+ **Multi-agent, when you need it.** Fan work out across agents with built-in
187
+ topologies (ready-made team shapes), compose flows (a task can run a whole
188
+ child workflow with `subWorkflow`, or a `loop()` phase can go round until a
189
+ condition or a token budget says stop), and re-run fast — `cw run <app>
190
+ --drive --incremental` reuses every step whose inputs did not change.
156
191
 
157
192
  <div align="center">
158
193
  <img src="https://raw.githubusercontent.com/coo1white/cool-workflow/main/docs/assets/topologies.svg" alt="Built-in multi-agent topologies: map-reduce (fan out, fold in), debate (argue then draw a verdict), and judge-panel (N independent judges score one candidate)." width="92%">
@@ -160,10 +195,11 @@ every step whose inputs didn't change.
160
195
 
161
196
  ## Can You Trust the Report?
162
197
 
163
- CW doesn't run the model — it keeps the books. Your agent signs its findings (**ed25519**), and
164
- `cw report verify-bundle` checks — **offline, with nothing but the public key** — that every signed
165
- finding is in the report unaltered. Edit a finding, in the report or in the agent's own result, and the
166
- check fails. CW holds no private key: the agent signs, CW only verifies.
198
+ CW does not run the model — it keeps the books. Your agent signs its findings
199
+ (**ed25519**), and `cw report verify-bundle` checks — **offline, with nothing
200
+ but the public key** that every signed finding is in the report unaltered.
201
+ Edit a finding, in the report or in the agent's own result, and the check
202
+ fails. CW holds no private key: the agent signs, CW only verifies.
167
203
 
168
204
  ```bash
169
205
  cw demo tamper # proves it in 30s — edits a signed result, watch it fail
@@ -171,14 +207,104 @@ cw -q "…" --bundle # seal a run into one portable
171
207
  cw report verify-bundle report.cwrun.json # anyone can re-check it offline, with just the file
172
208
  ```
173
209
 
174
- This attests the agent's **signed findings** not that nothing else was added or that nothing was left
175
- out. For exactly what is and isn't proven, see the **[Trust Model](https://github.com/coo1white/cool-workflow/blob/main/plugins/cool-workflow/docs/trust-model.md)**.
210
+ This proves the agent's **signed findings** reached you unaltered not that
211
+ nothing else was added, and not that nothing was left out. For exactly what is
212
+ and is not proven, see the **[Trust Model](https://github.com/coo1white/cool-workflow/blob/main/plugins/cool-workflow/docs/trust-model.md)**.
176
213
 
177
214
  ## Use It From Your Editor
178
215
 
179
- CW exposes the same runtime over **MCP** — **Claude Desktop, Cursor, and VS Code call CW as a tool**, so
180
- your agent can plan a run, drive it, and verify a report without leaving the editor. CLI and MCP share
181
- one registry and are parity-checked. See the **[Wiki](https://github.com/coo1white/cool-workflow/wiki)**.
216
+ CW offers the same runtime over **MCP** — a standard way for editors to call
217
+ tools. **Claude Desktop, Cursor, and VS Code call CW as a tool**, so your
218
+ agent can plan a run, drive it, and verify a report without leaving the
219
+ editor. CLI and MCP share one registry and are parity-checked. See the
220
+ **[Wiki](https://github.com/coo1white/cool-workflow/wiki)**.
221
+
222
+ The MCP server is `scripts/mcp-server.js` inside the installed package. After
223
+ `npm install -g cool-workflow`, its full path is:
224
+
225
+ ```text
226
+ <output of `npm root -g`>/cool-workflow/scripts/mcp-server.js
227
+ ```
228
+
229
+ Put that path in the configs below where you see `/path/from/npm-root-g/…`.
230
+
231
+ <details>
232
+ <summary><b>Claude Code</b></summary>
233
+
234
+ The simple way — as a plugin (this wires MCP for you):
235
+
236
+ ```text
237
+ /plugin marketplace add coo1white/cool-workflow
238
+ /plugin install cool-workflow@cool-workflow
239
+ ```
240
+
241
+ Or add only the MCP server, one line in your terminal:
242
+
243
+ ```bash
244
+ claude mcp add cool-workflow -- node "$(npm root -g)/cool-workflow/scripts/mcp-server.js"
245
+ ```
246
+ </details>
247
+
248
+ <details>
249
+ <summary><b>Claude Desktop</b></summary>
250
+
251
+ Add this to `claude_desktop_config.json`
252
+ (macOS: `~/Library/Application Support/Claude/`,
253
+ Windows: `%APPDATA%\Claude\`), then restart Claude Desktop:
254
+
255
+ ```json
256
+ {
257
+ "mcpServers": {
258
+ "cool-workflow": {
259
+ "command": "node",
260
+ "args": ["/path/from/npm-root-g/cool-workflow/scripts/mcp-server.js"]
261
+ }
262
+ }
263
+ }
264
+ ```
265
+ </details>
266
+
267
+ <details>
268
+ <summary><b>Cursor</b></summary>
269
+
270
+ Add the same `mcpServers` block to `~/.cursor/mcp.json`
271
+ (or `.cursor/mcp.json` inside one project):
272
+
273
+ ```json
274
+ {
275
+ "mcpServers": {
276
+ "cool-workflow": {
277
+ "command": "node",
278
+ "args": ["/path/from/npm-root-g/cool-workflow/scripts/mcp-server.js"]
279
+ }
280
+ }
281
+ }
282
+ ```
283
+ </details>
284
+
285
+ <details>
286
+ <summary><b>VS Code</b></summary>
287
+
288
+ VS Code uses a `servers` key. Add this to `.vscode/mcp.json` in your project
289
+ (or run **MCP: Add Server** from the Command Palette):
290
+
291
+ ```json
292
+ {
293
+ "servers": {
294
+ "cool-workflow": {
295
+ "type": "stdio",
296
+ "command": "node",
297
+ "args": ["/path/from/npm-root-g/cool-workflow/scripts/mcp-server.js"]
298
+ }
299
+ }
300
+ }
301
+ ```
302
+ </details>
303
+
304
+ Once connected, your agent sees the `cw_*` tools — `cw_plan`, `cw_status`,
305
+ `cw_report`, and the rest — the same registry the CLI uses, parity-checked.
306
+ More on the MCP surface — parity, manifests, vendor targets — is on the wiki
307
+ page **[MCP And Manifests](https://github.com/coo1white/cool-workflow/wiki/MCP-And-Manifests)**.
182
308
 
183
309
  ## Troubleshooting
184
310
 
@@ -188,6 +314,33 @@ one registry and are parity-checked. See the **[Wiki](https://github.com/coo1whi
188
314
  | `status: blocked` | Set `CW_AGENT_COMMAND=builtin:claude` or pass `-claude` |
189
315
  | `claude: command not found` | Install Claude Code and run again |
190
316
  | Where is my report? | `<repo>/.cw/runs/<id>/report.md` |
317
+ | `Missing required input: question` | Add `-q "<question>"` — CW now prints this same `Try:` line for you |
318
+ | Run stopped before the end | `cw quickstart <app> --resume --run <id>` takes it to the end (`cw run resume <id> --drive` does the same) |
319
+ | What flags does a command take? | `cw help doctor`, `cw help quickstart`, `cw help ledger` now list a `Flags` block under the command |
320
+
321
+ ## Repo Map
322
+
323
+ What every top-level folder and file is for, one line each. Most of these
324
+ places are fixed by a tool, a test, or the release chain — they are where
325
+ they are for a reason.
326
+
327
+ | Place | What it is |
328
+ |---|---|
329
+ | [`plugins/cool-workflow/`](https://github.com/coo1white/cool-workflow/blob/main/plugins/cool-workflow/) | The product itself: TypeScript source (`src/`), committed build (`dist/`), tests, scripts, man-page docs, manifests |
330
+ | [`docs/`](https://github.com/coo1white/cool-workflow/blob/main/docs/) | Repo-level docs: wiki source, audits, benchmark notes, the v2 rebuild SPEC, architecture plans |
331
+ | [`v2/conformance/`](https://github.com/coo1white/cool-workflow/blob/main/v2/conformance/) | Black-box conformance suite — pins the shipping CLI's observable behavior byte for byte; CI runs it on every PR |
332
+ | [`eval/`](https://github.com/coo1white/cool-workflow/blob/main/eval/) | Eval cases for the four workflow skills (ci-triage, pr-review, design-qa, deploy-check) |
333
+ | [`examples/`](https://github.com/coo1white/cool-workflow/blob/main/examples/) | Worked examples, e.g. a real published self-audit with line-cited findings |
334
+ | [`scripts/bench/`](https://github.com/coo1white/cool-workflow/blob/main/scripts/bench/) | The benchmark runner (see [docs/benchmark.md](https://github.com/coo1white/cool-workflow/blob/main/docs/benchmark.md)) |
335
+ | [`Formula/`](https://github.com/coo1white/cool-workflow/blob/main/Formula/) | Homebrew formula — `brew` only finds it at this exact path |
336
+ | `.cw-release/` | Append-only release trust records: gate markers, signed reviewer verdicts. Never edit or delete by hand |
337
+ | `.github/` | CI workflows: build/test matrix, conformance, CodeQL, gitleaks, release gate, npm publish |
338
+ | `.claude-plugin/`, `.agents/plugins/` | Plugin/marketplace manifests so LLM clients can discover CW |
339
+ | [`AGENTS.md`](https://github.com/coo1white/cool-workflow/blob/main/AGENTS.md) / [`CLAUDE.md`](https://github.com/coo1white/cool-workflow/blob/main/CLAUDE.md) / [`Codex.md`](https://github.com/coo1white/cool-workflow/blob/main/Codex.md) | The binding rules for coding agents working ON this repo; the agents auto-load these from the root |
340
+ | [`DIRECTION.md`](https://github.com/coo1white/cool-workflow/blob/main/DIRECTION.md) | Where the project goes — and, on purpose, does not go |
341
+ | [`PROJECT_MEMORY.md`](https://github.com/coo1white/cool-workflow/blob/main/PROJECT_MEMORY.md) | Long-term project memory: lessons that must outlive any one session |
342
+ | [`ITERATION_LOG.md`](https://github.com/coo1white/cool-workflow/blob/main/ITERATION_LOG.md) | Append-only development cycle log; the release gate reads it for the cadence check |
343
+ | [`CHANGELOG.md`](https://github.com/coo1white/cool-workflow/blob/main/CHANGELOG.md) / [`RELEASE.md`](https://github.com/coo1white/cool-workflow/blob/main/RELEASE.md) | Release notes (each entry goes into the GitHub Release as-is) / the release runbook |
191
344
 
192
345
  ## Docs & Wiki
193
346
 
@@ -201,7 +354,8 @@ Building on CW? See the [Getting Started doc](https://github.com/coo1white/cool-
201
354
  [Project Index](https://github.com/coo1white/cool-workflow/blob/main/plugins/cool-workflow/docs/project-index.md), and
202
355
  [CLI ↔ MCP Parity](https://github.com/coo1white/cool-workflow/blob/main/plugins/cool-workflow/docs/cli-mcp-parity.7.md).
203
356
 
204
- CW dogfoods its own release process — every cut runs the `release-cut` workflow against this repo.
357
+ CW dogfoods its own release process — it runs its own tool on itself, and
358
+ every cut runs the `release-cut` workflow against this repo.
205
359
 
206
360
  ## License
207
361
 
@@ -3,7 +3,7 @@
3
3
  "id": "architecture-review",
4
4
  "title": "Architecture Review",
5
5
  "summary": "Map a repository architecture, assess risks, verify important findings, and synthesize an evidence-backed verdict.",
6
- "version": "0.2.4",
6
+ "version": "0.2.5",
7
7
  "author": "COOLWHITE LLC",
8
8
  "inputs": [
9
9
  {
@@ -3,7 +3,7 @@
3
3
  "id": "architecture-review-fast",
4
4
  "title": "Architecture Review Fast",
5
5
  "summary": "Run a shorter architecture review with parallel map and assess phases for faster first results.",
6
- "version": "0.2.4",
6
+ "version": "0.2.5",
7
7
  "author": "COOLWHITE LLC",
8
8
  "inputs": [
9
9
  {
@@ -3,7 +3,7 @@
3
3
  "id": "end-to-end-golden-path",
4
4
  "title": "End-to-End Golden Path",
5
5
  "summary": "Deterministic one-worker workflow app for proving the CW integration chain.",
6
- "version": "0.2.4",
6
+ "version": "0.2.5",
7
7
  "author": "COOLWHITE LLC",
8
8
  "inputs": [
9
9
  {
@@ -3,7 +3,7 @@
3
3
  "id": "pr-review-fix-ci",
4
4
  "title": "PR Review Fix CI",
5
5
  "summary": "Review a pull request or branch, inspect CI failures, diagnose actionable issues, optionally patch, verify, and summarize with evidence.",
6
- "version": "0.2.4",
6
+ "version": "0.2.5",
7
7
  "author": "COOLWHITE LLC",
8
8
  "inputs": [
9
9
  {
@@ -3,7 +3,7 @@
3
3
  "id": "release-cut",
4
4
  "title": "Release Cut",
5
5
  "summary": "Prepare a release with checklist discipline: version checks, changelog, tests, packaging, release notes, and final verification.",
6
- "version": "0.2.4",
6
+ "version": "0.2.5",
7
7
  "author": "COOLWHITE LLC",
8
8
  "inputs": [
9
9
  {
@@ -3,7 +3,7 @@
3
3
  "id": "research-synthesis",
4
4
  "title": "Research Synthesis",
5
5
  "summary": "Split a research question into claims, investigate sources, cross-check evidence, verify claims, and synthesize a concise answer.",
6
- "version": "0.2.4",
6
+ "version": "0.2.5",
7
7
  "author": "COOLWHITE LLC",
8
8
  "inputs": [
9
9
  {
@@ -21,6 +21,7 @@
21
21
  // one into a real capability-table row; nothing new is ever added here.
22
22
  Object.defineProperty(exports, "__esModule", { value: true });
23
23
  exports.KNOWN_COMMANDS = void 0;
24
+ exports.shouldRenderHuman = shouldRenderHuman;
24
25
  exports.dispatch = dispatch;
25
26
  const help_1 = require("../core/format/help");
26
27
  const capability_table_1 = require("../core/capability-table");
@@ -28,18 +29,41 @@ const parseargv_1 = require("./parseargv");
28
29
  Object.defineProperty(exports, "KNOWN_COMMANDS", { enumerable: true, get: function () { return parseargv_1.KNOWN_COMMANDS; } });
29
30
  const io_1 = require("./io");
30
31
  const cli_args_1 = require("../core/util/cli-args");
32
+ const global_flags_1 = require("./global-flags");
31
33
  function firstPositional(args, index = 0) {
32
34
  return args.positionals[index];
33
35
  }
36
+ /** The one rendering-mode decision for a `jsonMode: "default"` row's
37
+ * OPTIONAL human projection (CliBinding.humanRender): true ONLY when the
38
+ * row is "default", the caller did NOT ask for JSON (`--json`/`--format
39
+ * json`), the row declares a humanRender, AND stdout is a real TTY.
40
+ * Every other combination — every pipe, every script, every conformance
41
+ * run — stays byte-identical JSON. Deliberately does NOT read
42
+ * FORCE_COLOR/NO_COLOR: color env vars style output, they never pick
43
+ * the output mode (cli-color-env pipes with FORCE_COLOR=1 and must stay
44
+ * JSON). Pure of the injectable `stream` (default process.stdout),
45
+ * following shell/workbench-host.ts's printServeHint pattern. */
46
+ function shouldRenderHuman(jsonMode, options, hasHumanRender, stream = process.stdout) {
47
+ return jsonMode === "default" && !(0, cli_args_1.wantsJson)(options) && hasHumanRender && Boolean(stream.isTTY);
48
+ }
34
49
  /** Writes a `CliHandlerResult` to stdout and applies its exit code, per
35
50
  * the row's `jsonMode`:
36
51
  * - `"default"` — always prints `result.json` as JSON (falls back to
37
- * `result.text` when a row has no canonical JSON shape).
52
+ * `result.text` when a row has no canonical JSON shape). On a real
53
+ * TTY, a row that declares `humanRender` prints that human text
54
+ * instead (see shouldRenderHuman above — piped bytes never change).
38
55
  * - `"flag"` — prints `result.text` normally, `result.json` under
39
56
  * `--json`/`--format json`.
40
57
  * - `"human"` — always prints `result.text`; there is no JSON form. */
41
- function renderCliResult(result, jsonMode, options) {
42
- const useJson = jsonMode === "default" || (jsonMode === "flag" && (0, cli_args_1.wantsJson)(options));
58
+ function renderCliResult(result, cli, options) {
59
+ if (shouldRenderHuman(cli.jsonMode, options, Boolean(cli.humanRender)) && result.json !== undefined) {
60
+ const human = cli.humanRender(result.json);
61
+ process.stdout.write(human.endsWith("\n") ? human : `${human}\n`);
62
+ if (result.exitCode !== undefined)
63
+ process.exitCode = result.exitCode;
64
+ return;
65
+ }
66
+ const useJson = cli.jsonMode === "default" || (cli.jsonMode === "flag" && (0, cli_args_1.wantsJson)(options));
43
67
  if (useJson && result.json !== undefined) {
44
68
  (0, io_1.printJson)(result.json);
45
69
  }
@@ -75,8 +99,12 @@ async function dispatchTable(args) {
75
99
  positionals: args.positionals.slice(consumed),
76
100
  options: args.options,
77
101
  };
102
+ // Rows that declare a complete flag list get the TTY-only unknown-flag
103
+ // warning (one stderr line; stdout and the exit code never change —
104
+ // see cli/global-flags.ts).
105
+ (0, global_flags_1.warnUnknownFlags)(row.cli, args.options);
78
106
  const result = await row.cli.handler(cliArgs);
79
- renderCliResult(result, row.cli.jsonMode, args.options);
107
+ renderCliResult(result, row.cli, args.options);
80
108
  return true;
81
109
  }
82
110
  return false;