copilotkit 4.28.0 → 4.30.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 (97) hide show
  1. package/README.md +317 -36
  2. package/cli-build-info.json +7 -7
  3. package/exporters/claude-sdk/README.md +93 -0
  4. package/exporters/claude-sdk/export_session_store.py +39 -0
  5. package/exporters/claude-sdk/store-export.ts +61 -0
  6. package/index.js +212799 -109146
  7. package/onboarding/index.json +51 -5
  8. package/onboarding/prompts/authenticate/start.md +66 -52
  9. package/onboarding/prompts/conversion/plan.md +3 -3
  10. package/onboarding/prompts/credentials/finalize-plan.md +15 -15
  11. package/onboarding/prompts/credentials/plan.md +25 -29
  12. package/onboarding/prompts/credentials/settle-credentials.md +13 -8
  13. package/onboarding/prompts/credentials/write-plan.md +40 -30
  14. package/onboarding/prompts/deployment/choose-local.md +13 -12
  15. package/onboarding/prompts/deployment/local-evaluation.md +12 -12
  16. package/onboarding/prompts/fallback/best-effort.md +10 -11
  17. package/onboarding/prompts/feature/a2ui/implement.md +7 -5
  18. package/onboarding/prompts/feature/a2ui/plan.md +7 -3
  19. package/onboarding/prompts/feature/a2ui/proof.md +8 -6
  20. package/onboarding/prompts/feature/a2ui/start.md +18 -9
  21. package/onboarding/prompts/feature/channels/implement.md +10 -8
  22. package/onboarding/prompts/feature/channels/plan.md +9 -5
  23. package/onboarding/prompts/feature/channels/proof.md +8 -6
  24. package/onboarding/prompts/feature/channels/start.md +25 -12
  25. package/onboarding/prompts/feature/chat-suggestions/implement.md +7 -5
  26. package/onboarding/prompts/feature/chat-suggestions/plan.md +7 -3
  27. package/onboarding/prompts/feature/chat-suggestions/proof.md +8 -6
  28. package/onboarding/prompts/feature/chat-suggestions/start.md +18 -9
  29. package/onboarding/prompts/feature/complete.md +3 -3
  30. package/onboarding/prompts/feature/learning/implement.md +15 -13
  31. package/onboarding/prompts/feature/learning/plan.md +8 -4
  32. package/onboarding/prompts/feature/learning/proof.md +16 -14
  33. package/onboarding/prompts/feature/learning/start.md +18 -9
  34. package/onboarding/prompts/feature/open-generative-ui/implement.md +7 -5
  35. package/onboarding/prompts/feature/open-generative-ui/plan.md +7 -3
  36. package/onboarding/prompts/feature/open-generative-ui/proof.md +8 -6
  37. package/onboarding/prompts/feature/open-generative-ui/start.md +18 -9
  38. package/onboarding/prompts/feature/realtime-sync/implement.md +8 -6
  39. package/onboarding/prompts/feature/realtime-sync/plan.md +7 -3
  40. package/onboarding/prompts/feature/realtime-sync/proof.md +8 -6
  41. package/onboarding/prompts/feature/realtime-sync/start.md +17 -8
  42. package/onboarding/prompts/feature/rich-threads/implement.md +9 -7
  43. package/onboarding/prompts/feature/rich-threads/plan.md +7 -3
  44. package/onboarding/prompts/feature/rich-threads/proof.md +8 -6
  45. package/onboarding/prompts/feature/rich-threads/start.md +17 -8
  46. package/onboarding/prompts/feature/stop.md +4 -4
  47. package/onboarding/prompts/feature/voice/implement.md +7 -5
  48. package/onboarding/prompts/feature/voice/plan.md +8 -4
  49. package/onboarding/prompts/feature/voice/proof.md +8 -6
  50. package/onboarding/prompts/feature/voice/start.md +18 -9
  51. package/onboarding/prompts/framework/ag2.md +4 -11
  52. package/onboarding/prompts/framework/agno.md +4 -11
  53. package/onboarding/prompts/framework/built-in.md +3 -3
  54. package/onboarding/prompts/framework/claude-sdk-python.md +3 -3
  55. package/onboarding/prompts/framework/claude-sdk-typescript.md +3 -3
  56. package/onboarding/prompts/framework/crewai-flows.md +6 -12
  57. package/onboarding/prompts/framework/custom-ag-ui.md +5 -11
  58. package/onboarding/prompts/framework/deep-agents.md +5 -11
  59. package/onboarding/prompts/framework/google-adk.md +4 -8
  60. package/onboarding/prompts/framework/langgraph-fastapi.md +4 -10
  61. package/onboarding/prompts/framework/langgraph-python.md +4 -10
  62. package/onboarding/prompts/framework/langgraph-typescript.md +5 -11
  63. package/onboarding/prompts/framework/llamaindex.md +4 -10
  64. package/onboarding/prompts/framework/mastra.md +4 -10
  65. package/onboarding/prompts/framework/ms-agent-dotnet.md +6 -13
  66. package/onboarding/prompts/framework/ms-agent-harness-dotnet.md +7 -13
  67. package/onboarding/prompts/framework/ms-agent-python.md +5 -11
  68. package/onboarding/prompts/framework/pydantic-ai.md +4 -10
  69. package/onboarding/prompts/framework/strands-python.md +4 -10
  70. package/onboarding/prompts/framework/strands-typescript.md +4 -10
  71. package/onboarding/prompts/frontend/angular.md +4 -4
  72. package/onboarding/prompts/frontend/nextjs.md +4 -4
  73. package/onboarding/prompts/frontend/plan.md +10 -10
  74. package/onboarding/prompts/frontend/react-native.md +3 -3
  75. package/onboarding/prompts/frontend/react-spa.md +3 -3
  76. package/onboarding/prompts/frontend/vue.md +3 -3
  77. package/onboarding/prompts/implementation/build-and-validate.md +48 -15
  78. package/onboarding/prompts/proof/complete.md +22 -19
  79. package/onboarding/prompts/proof/oss-baseline.md +21 -5
  80. package/onboarding/prompts/proof/round-trip.md +55 -13
  81. package/onboarding/prompts/research/gather.md +60 -43
  82. package/onboarding/prompts/research/merge.md +6 -5
  83. package/onboarding/prompts/research/preflight.md +2 -2
  84. package/onboarding/prompts/research/route.md +5 -5
  85. package/onboarding/prompts/setup/questions.md +11 -9
  86. package/onboarding/prompts/starter/clone.md +78 -76
  87. package/onboarding/prompts/starter/setup.md +111 -0
  88. package/onboarding/prompts/stopped/declined.md +44 -0
  89. package/onboarding/prompts/stopped/run-failed.md +6 -6
  90. package/onboarding/prompts/subagent/create-plan.md +29 -4
  91. package/onboarding/prompts/subagent/implement-and-validate.md +31 -3
  92. package/onboarding/prompts/subagent/inspect-repository.md +17 -4
  93. package/onboarding/prompts/subagent/prove-oss-baseline.md +24 -1
  94. package/onboarding/prompts/subagent/prove-round-trip.md +43 -7
  95. package/onboarding/prompts/unsupported/no-validated-path.md +6 -6
  96. package/package.json +4 -1
  97. package/release/release-tool.js +383 -112
@@ -15,18 +15,18 @@ Every rule below is for a run that named neither.
15
15
 
16
16
  ## Use the recorded frontend
17
17
 
18
- Run `npx --prefer-offline --yes copilotkit@4.28.0 onboard setup-answers` and use its `frontend`. It holds
18
+ Run `npx --prefer-offline --yes copilotkit@4.30.0 onboard setup-answers` and use its `frontend`. It holds
19
19
  the answer that `setup/questions` recorded, even after this conversation lost it. If the
20
20
  project has a frontend, preserve it and use the matching route below. Do not change
21
21
  application code in this phase. If neither settles it, ask one line as the options view
22
22
  of `onboard setup-message` does: the recommendation first, in bold, and the alternatives on one `Other:` line, from
23
23
  React SPA, Next.js, Angular, Vue 3, React Native, Slack, and Microsoft Teams. Record the answer with
24
- `npx --prefer-offline --yes copilotkit@4.28.0 onboard setup-answers --frontend <name>`.
24
+ `npx --prefer-offline --yes copilotkit@4.30.0 onboard setup-answers --frontend <name>`.
25
25
 
26
26
  Before you end your turn to wait for the developer, report the pause:
27
27
 
28
28
  ```text
29
- npx --prefer-offline --yes copilotkit@4.28.0 onboard checkpoint --phase awaiting-developer
29
+ npx --prefer-offline --yes copilotkit@4.30.0 onboard checkpoint --phase awaiting-developer --about stack-choice
30
30
  ```
31
31
 
32
32
  When the recorded frontend is not Next.js, tell the developer in one sentence where it runs
@@ -38,15 +38,15 @@ words instead.
38
38
 
39
39
  Use exactly one matching internal route:
40
40
 
41
- 1. React SPA: `npx --prefer-offline --yes copilotkit@4.28.0 onboard read frontend/react-spa`
42
- 2. Next.js: `npx --prefer-offline --yes copilotkit@4.28.0 onboard read frontend/nextjs`
43
- 3. Angular: `npx --prefer-offline --yes copilotkit@4.28.0 onboard read frontend/angular`
44
- 4. Vue 3: `npx --prefer-offline --yes copilotkit@4.28.0 onboard read frontend/vue`
45
- 5. React Native: `npx --prefer-offline --yes copilotkit@4.28.0 onboard read frontend/react-native`
46
- 6. Slack or Microsoft Teams: `npx --prefer-offline --yes copilotkit@4.28.0 onboard read feature/channels/start`
41
+ 1. React SPA: `npx --prefer-offline --yes copilotkit@4.30.0 onboard read frontend/react-spa`
42
+ 2. Next.js: `npx --prefer-offline --yes copilotkit@4.30.0 onboard read frontend/nextjs`
43
+ 3. Angular: `npx --prefer-offline --yes copilotkit@4.30.0 onboard read frontend/angular`
44
+ 4. Vue 3: `npx --prefer-offline --yes copilotkit@4.30.0 onboard read frontend/vue`
45
+ 5. React Native: `npx --prefer-offline --yes copilotkit@4.30.0 onboard read frontend/react-native`
46
+ 6. Slack or Microsoft Teams: `npx --prefer-offline --yes copilotkit@4.30.0 onboard read feature/channels/start`
47
47
 
48
48
  If they chose Slack or Microsoft Teams, tell that node which one they chose so it
49
49
  does not ask again.
50
50
 
51
51
  If no listed frontend fits, run
52
- `npx --prefer-offline --yes copilotkit@4.28.0 onboard read unsupported/no-validated-path`.
52
+ `npx --prefer-offline --yes copilotkit@4.30.0 onboard read unsupported/no-validated-path`.
@@ -6,7 +6,7 @@ This step asks the developer nothing. If the run must wait for the developer any
6
6
  the pause first:
7
7
 
8
8
  ```text
9
- npx --prefer-offline --yes copilotkit@4.28.0 onboard checkpoint --phase awaiting-developer
9
+ npx --prefer-offline --yes copilotkit@4.30.0 onboard checkpoint --phase awaiting-developer --about other
10
10
  ```
11
11
 
12
12
  React Native has no starter. For a target directory that holds no project, build the new
@@ -25,7 +25,7 @@ documents `useRenderTool`, which is React Native's own hook for drawing a tool t
25
25
  already has. That is a different job and needs a tool in the agent.
26
26
 
27
27
  If the pages support the selection, record React Native and these URLs. Then run
28
- `npx --prefer-offline --yes copilotkit@4.28.0 onboard read credentials/finalize-plan`.
28
+ `npx --prefer-offline --yes copilotkit@4.30.0 onboard read credentials/finalize-plan`.
29
29
 
30
30
  If the documentation does not support the selection, run
31
- `npx --prefer-offline --yes copilotkit@4.28.0 onboard read unsupported/no-validated-path`.
31
+ `npx --prefer-offline --yes copilotkit@4.30.0 onboard read unsupported/no-validated-path`.
@@ -6,7 +6,7 @@ This step asks the developer nothing. If the run must wait for the developer any
6
6
  the pause first:
7
7
 
8
8
  ```text
9
- npx --prefer-offline --yes copilotkit@4.28.0 onboard checkpoint --phase awaiting-developer
9
+ npx --prefer-offline --yes copilotkit@4.30.0 onboard checkpoint --phase awaiting-developer --about other
10
10
  ```
11
11
 
12
12
  React SPA has no starter. For a target directory that holds no project, build the new
@@ -26,7 +26,7 @@ that import when Vite leaves the package external.
26
26
  - https://docs.copilotkit.ai/react-spa.md
27
27
 
28
28
  If the page supports the selection, record React SPA and this URL. Then run
29
- `npx --prefer-offline --yes copilotkit@4.28.0 onboard read credentials/finalize-plan`.
29
+ `npx --prefer-offline --yes copilotkit@4.30.0 onboard read credentials/finalize-plan`.
30
30
 
31
31
  If the documentation does not support the selection, run
32
- `npx --prefer-offline --yes copilotkit@4.28.0 onboard read unsupported/no-validated-path`.
32
+ `npx --prefer-offline --yes copilotkit@4.30.0 onboard read unsupported/no-validated-path`.
@@ -6,7 +6,7 @@ This step asks the developer nothing. If the run must wait for the developer any
6
6
  the pause first:
7
7
 
8
8
  ```text
9
- npx --prefer-offline --yes copilotkit@4.28.0 onboard checkpoint --phase awaiting-developer
9
+ npx --prefer-offline --yes copilotkit@4.30.0 onboard checkpoint --phase awaiting-developer --about other
10
10
  ```
11
11
 
12
12
  Vue 3 has no starter. For a target directory that holds no project, build the new
@@ -26,7 +26,7 @@ page above. Vue has its own `useComponent`, which is not the React package. Take
26
26
  that reference page rather than from a Vue generative-UI guide, which is not published.
27
27
 
28
28
  If the pages support the selection, record Vue 3 and these URLs. Then run
29
- `npx --prefer-offline --yes copilotkit@4.28.0 onboard read credentials/finalize-plan`.
29
+ `npx --prefer-offline --yes copilotkit@4.30.0 onboard read credentials/finalize-plan`.
30
30
 
31
31
  If the documentation does not support the selection, run
32
- `npx --prefer-offline --yes copilotkit@4.28.0 onboard read unsupported/no-validated-path`.
32
+ `npx --prefer-offline --yes copilotkit@4.30.0 onboard read unsupported/no-validated-path`.
@@ -13,7 +13,7 @@ acted on. Send one short report before you stop. The friction command follows th
13
13
  setting the developer already chose, so it needs no separate question.
14
14
 
15
15
  ```text
16
- npx --prefer-offline --yes copilotkit@4.28.0 onboard friction --phase stop --category <slug> --message "<sentences>"
16
+ npx --prefer-offline --yes copilotkit@4.30.0 onboard friction --phase stop --category <slug> --message "<sentences>"
17
17
  ```
18
18
 
19
19
  `--message` takes one or two sentences: the step you stopped at and what stopped it.
@@ -50,14 +50,14 @@ Any other file the plan does not name comes back as a result that starts with
50
50
  developer, not a run that broke. Pause: name the file and why the
51
51
  work needs it, then end your turn and wait for the developer's answer. If they allow it,
52
52
  spawn a fresh implementation subagent with the same handoff. Add that file to the handoff
53
- as a path the developer approved, and record it as a departure. If you cannot ask, or the
54
- developer declines, the failure ending in the route-out rules below applies.
53
+ as a path the developer approved, and record it as a departure. If the developer declines,
54
+ run `npx --prefer-offline --yes copilotkit@4.30.0 onboard read stopped/declined --message "<their reason>"`. If you cannot ask, the failure ending in the route-out rules below applies.
55
55
 
56
56
  This prompt pauses for the developer in several places. Before you end your turn to wait
57
57
  for the developer, report the pause:
58
58
 
59
59
  ```text
60
- npx --prefer-offline --yes copilotkit@4.28.0 onboard checkpoint --phase awaiting-developer
60
+ npx --prefer-offline --yes copilotkit@4.30.0 onboard checkpoint --phase awaiting-developer --about uncommitted-file
61
61
  ```
62
62
 
63
63
  The existing agent's behavior is never a departure to record and carry on from. It is four
@@ -74,7 +74,7 @@ declines, use the route-out rules below.
74
74
  Before you end your turn to wait for the developer, report the pause:
75
75
 
76
76
  ```text
77
- npx --prefer-offline --yes copilotkit@4.28.0 onboard checkpoint --phase awaiting-developer
77
+ npx --prefer-offline --yes copilotkit@4.30.0 onboard checkpoint --phase awaiting-developer --about agent-change
78
78
  ```
79
79
 
80
80
  ## The developer's uncommitted files
@@ -97,12 +97,12 @@ or from an environment variable.
97
97
  If the CLI prints `## Stop: this run deleted or moved the developer's work` instead of a
98
98
  step, show the developer the list it printed, and run what they choose:
99
99
  the `onboard restore` command the tripwire stop prints, which names each deleted file, or
100
- `npx --prefer-offline --yes copilotkit@4.28.0 onboard tripwire --continue`. Then read the step again. If
100
+ `npx --prefer-offline --yes copilotkit@4.30.0 onboard tripwire --continue`. Then read the step again. If
101
101
  you cannot ask, use the route-out rules below. Before you end your turn to wait for the
102
102
  developer, report the pause:
103
103
 
104
104
  ```text
105
- npx --prefer-offline --yes copilotkit@4.28.0 onboard checkpoint --phase awaiting-developer
105
+ npx --prefer-offline --yes copilotkit@4.30.0 onboard checkpoint --phase awaiting-developer --about restore-files
106
106
  ```
107
107
 
108
108
  ## Implement the plan
@@ -116,7 +116,7 @@ Run this from the target app directory. The developer saw the id in the plan, so
116
116
  the first point at which it can be created:
117
117
 
118
118
  ```text
119
- npx --prefer-offline --yes copilotkit@4.28.0 learning containers create --id <id> --name <name> --json
119
+ npx --prefer-offline --yes copilotkit@4.30.0 learning containers create --id <id> --name <name> --json
120
120
  ```
121
121
 
122
122
  Pass the id the plan names. Take the name from the selected project's own display name, so
@@ -133,7 +133,7 @@ When you start a subagent in the background, tell the developer in one sentence
133
133
  does. Then send nothing more until it returns.
134
134
 
135
135
  Spawn one implementation subagent. Tell it to run
136
- `npx --prefer-offline --yes copilotkit@4.28.0 onboard read subagent/implement-and-validate` first and
136
+ `npx --prefer-offline --yes copilotkit@4.30.0 onboard read subagent/implement-and-validate` first and
137
137
  follow the prompt it returns. Tell it to return at once, and say so, if that read is refused
138
138
  or fails, and not to wait for an approval. If it returns that way, stop that subagent. Run
139
139
  the same command yourself, then spawn a fresh subagent with the returned prompt and the same
@@ -144,6 +144,22 @@ conversion, also give it the frozen criterion. Give it the paths that had uncomm
144
144
  changes when the run started. Require it to implement every step in plan order
145
145
  and run the full validation list. Wait for it.
146
146
 
147
+ If only its closing `subagent-returned` checkpoint was refused, the subagent finished.
148
+ Record no `refused` return and spawn nothing: run that checkpoint yourself, with the result
149
+ the subagent returned.
150
+
151
+ If the subagent returns because its harness refused any other command, record that return:
152
+
153
+ ```text
154
+ npx --prefer-offline --yes copilotkit@4.30.0 onboard checkpoint --phase subagent-returned --brief implement-and-validate --result refused
155
+ ```
156
+
157
+ Then run that command yourself, from the directory the subagent named. Spawn at most one
158
+ fresh subagent for each refused command, with the same handoff and that command's result.
159
+ If the fresh subagent is refused a command too, spawn no other. Follow the
160
+ `subagent/implement-and-validate` brief yourself, as "When a subagent cannot work" in
161
+ `research/gather` says.
162
+
147
163
  One subagent implements the whole plan. Do not divide the work across concurrent subagents,
148
164
  and do not spawn a second subagent to reconcile a split.
149
165
 
@@ -167,7 +183,7 @@ Report it and take the failure ending.
167
183
  If the implementation result does not start with `Status: passed`, do not continue to proof.
168
184
 
169
185
  Then run
170
- `npx --prefer-offline --yes copilotkit@4.28.0 onboard read proof/round-trip`.
186
+ `npx --prefer-offline --yes copilotkit@4.30.0 onboard read proof/round-trip`.
171
187
 
172
188
  ## Repair rules
173
189
 
@@ -191,13 +207,30 @@ A run that broke takes the failure ending: the failure is in code this run did n
191
207
  the same command still fails after three repair attempts, a result starts with
192
208
  `Status: blocked` for a reason other than a file the plan does not name or a missing Learning
193
209
  Container before the one restart, a missing Learning Container after the one restart, or the
194
- developer
195
- declined a file the plan does not name, or the run cannot ask them about it. A defect in a
210
+ run cannot ask the developer about a file the plan does not name. A defect in a
196
211
  package this run installed is not a stack CopilotKit does not serve, and a command this run
197
- cannot get to pass is not one either. In those cases run
198
- `npx --prefer-offline --yes copilotkit@4.28.0 onboard read stopped/run-failed`.
212
+ cannot get to pass is not one either. In those cases run:
213
+
214
+ ```text
215
+ npx --prefer-offline --yes copilotkit@4.30.0 onboard read stopped/run-failed --reason <reason> --message "<one line>"
216
+ ```
217
+
218
+ The read refuses to serve the ending without `--reason`, because the command that failed
219
+ is usually your own, such as `next build`, `tsc` or `pytest`, and the CLI cannot see it.
220
+ Pick the one reason that fits what stopped the run:
221
+
222
+ - `build`: the app's build or dev server failed.
223
+ - `typecheck`: the type checker failed, such as `tsc` or `mypy`.
224
+ - `dependency-install`: a package install or resolve failed.
225
+ - `model-call`: a call to the model provider failed or was refused.
226
+ - `docs-gap`: the documentation did not cover a step the plan needs.
227
+ - `other`: none of these.
228
+
229
+ `--message` is one line: the command that failed and what it printed, in your own words.
230
+ Send no secrets, source code, logs, or command output. A developer who said no is not a
231
+ failure: that run reads `stopped/declined`, as above.
199
232
 
200
233
  A plan with no path to follow takes the unsupported ending: the fix requires changing the
201
234
  developer's existing agent or frontend, or the documentation does not support the plan. In
202
235
  those cases run
203
- `npx --prefer-offline --yes copilotkit@4.28.0 onboard read unsupported/no-validated-path`.
236
+ `npx --prefer-offline --yes copilotkit@4.30.0 onboard read unsupported/no-validated-path`.
@@ -24,7 +24,7 @@ friction commands follow the telemetry setting the developer already chose, so t
24
24
  separate question.
25
25
 
26
26
  ```text
27
- npx --prefer-offline --yes copilotkit@4.28.0 onboard friction --category <slug> --cost-seconds <seconds> --message "<sentences>"
27
+ npx --prefer-offline --yes copilotkit@4.30.0 onboard friction --category <slug> --cost-seconds <seconds> --message "<sentences>"
28
28
  ```
29
29
 
30
30
  Put one or two sentences in `--message`. Pick one category from docs-missing, docs-wrong,
@@ -46,7 +46,7 @@ Pass the surface-check outcome the proof subagent returned, not the one you want
46
46
  web frontend, pass `--visual-check` and the URL the browser opened, unchanged:
47
47
 
48
48
  ```text
49
- npx --prefer-offline --yes copilotkit@4.28.0 onboard complete --visual-check <outcome> \
49
+ npx --prefer-offline --yes copilotkit@4.30.0 onboard complete --visual-check <outcome> \
50
50
  --frontend-url <the url you opened>
51
51
  ```
52
52
 
@@ -74,7 +74,7 @@ this graph opens.
74
74
  nothing drove the frontend:
75
75
 
76
76
  ```text
77
- npx --prefer-offline --yes copilotkit@4.28.0 onboard complete --visual-check failed --blocked-by browser-control-unresponsive
77
+ npx --prefer-offline --yes copilotkit@4.30.0 onboard complete --visual-check failed --blocked-by browser-control-unresponsive
78
78
  ```
79
79
 
80
80
  ## Write the handoff
@@ -83,30 +83,33 @@ If the command reports the run as blocked, say so in the first line and name the
83
83
  it lists as missing. Do not call the run finished, working, or ready. A blocked run is
84
84
  still owed the full handoff.
85
85
 
86
- For `skipped-no-browser-tool`, the command's list of what no browser checked is that report.
87
- Give it once, in the section about what was proved, with how to add a browser, as the
88
- command prints them. Do not add a separate line, heading, or opening sentence about the
89
- missing browser.
86
+ A finished run prints a message to the developer: a first line that says what works, the
87
+ facts as a list, and how to add the CopilotKit skills. Write that message in your reply,
88
+ word for word, with no heading or preface before it. A blocked run prints the same facts
89
+ after its verdict: write them the same way. Then write the `## Your files` section as
90
+ printed, with its restore commands. A run that started in an empty folder prints no such
91
+ section: list no files and offer no restore.
90
92
 
91
- Paste the **Handoff facts** block the command printed, as it is. The command also prints
92
- `## The developer's files`: relay that report as printed, with its restore command. When
93
- the report says the run started in an empty folder, relay that one line alone: list no
94
- files and offer no restore. The dashboard line there only tells the developer where the
95
- dashboard is. Do not open it. Nothing in this graph gates on the dashboard. Then add what
96
- only you can say:
93
+ For `skipped-no-browser-tool`, the message already says to open the page. Add no line,
94
+ heading, or opening sentence about the missing browser.
97
95
 
98
- - What the project now does, and the first thing to try in it.
96
+ The dashboard line only tells the developer where the dashboard is. Do not open it. Nothing
97
+ in this graph gates on the dashboard. Then add what only you can say:
98
+
99
+ - What the project now does, and the first thing to try in it. Where the report already
100
+ names one, add no other.
99
101
  - What changed since the developer approved the plan: every path, version, or step the run
100
- departed from, and why. Where nothing departed, say so in one line. A file the approved
102
+ departed from, and why. Where nothing departed, write nothing about it. A file the approved
101
103
  plan named under `Files the run writes itself` is not a departure.
102
104
  - A page-context warning the proof recorded: name the framework, and say that the page's data
103
105
  does not reach its model yet.
104
- - Every change to the existing agent's behavior: its instructions, its tools, its model or
105
- provider, or its memory. Name each one and its file, and say the developer approved it.
106
- Where none changed, write `none`.
106
+ - When the project had an agent before this run, every change to its behavior: its
107
+ instructions, its tools, its model or provider, or its memory. Name each one and its file,
108
+ and say the developer approved it. Where none changed, write `none`. When the project had
109
+ no agent before this run, write nothing about it.
107
110
  - On a conversion, the criterion this run was judged against, in the words the run was
108
111
  given.
109
- - Where this run proved Rich Threads: they keep messages, generative UI, tool interactions,
112
+ - Where this run proved AG-UI Streams: they keep messages, generative UI, tool interactions,
110
113
  and application state, so users can return to earlier work. The same conversations give
111
114
  Automatic Learning its evidence.
112
115
  - Where the facts name a Learning Container: new conversations go to it. Automatic
@@ -1,7 +1,7 @@
1
1
  # Prove the existing OSS baseline
2
2
 
3
3
  Do not prove the baseline yourself. Spawn one proof subagent. Tell it to run
4
- `npx --prefer-offline --yes copilotkit@4.28.0 onboard read subagent/prove-oss-baseline` first and follow
4
+ `npx --prefer-offline --yes copilotkit@4.30.0 onboard read subagent/prove-oss-baseline` first and follow
5
5
  the prompt it returns. Tell it to return at once, and say so, if that read is refused or
6
6
  fails, and not to wait for an approval. If it returns that way, stop that subagent. Run the
7
7
  same command yourself, then spawn a fresh subagent with the returned prompt and the same
@@ -18,10 +18,26 @@ for a substitute.
18
18
 
19
19
  Wait for the subagent to finish.
20
20
 
21
+ If only its closing `subagent-returned` checkpoint was refused, the subagent finished.
22
+ Record no `refused` return and spawn nothing: run that checkpoint yourself, with the result
23
+ the subagent returned.
24
+
25
+ If the subagent returns because its harness refused any other command, record that return:
26
+
27
+ ```text
28
+ npx --prefer-offline --yes copilotkit@4.30.0 onboard checkpoint --phase subagent-returned --brief prove-oss-baseline --result refused
29
+ ```
30
+
31
+ Then run that command yourself, from the directory the subagent named. Spawn at most one
32
+ fresh subagent for each refused command, with the same handoff and that command's result.
33
+ If the fresh subagent is refused a command too, spawn no other. Follow the
34
+ `subagent/prove-oss-baseline` brief yourself, as "When a subagent cannot work" in
35
+ `research/gather` says.
36
+
21
37
  Record what that proof returned before you route on it:
22
38
 
23
39
  ```text
24
- npx --prefer-offline --yes copilotkit@4.28.0 onboard proof --step oss-baseline --outcome <passed|failed|skipped> [--predicate <1-6>]
40
+ npx --prefer-offline --yes copilotkit@4.30.0 onboard proof --step oss-baseline --outcome <passed|failed|skipped> [--predicate <1-6>]
25
41
  ```
26
42
 
27
43
  Report the gate whatever it returned. Use the list below. A proof that never ran is `skipped`, not failed. The command prints one line and sends
@@ -43,7 +59,7 @@ Do not change project files before this proof ends. Starting existing developmen
43
59
  processes and their ignored runtime files is allowed.
44
60
 
45
61
  If the subagent proves the `both-oss` predicate, keep its evidence with the plan and run
46
- `npx --prefer-offline --yes copilotkit@4.28.0 onboard read conversion/plan`. That project already works.
62
+ `npx --prefer-offline --yes copilotkit@4.30.0 onboard read conversion/plan`. That project already works.
47
63
  What it needs is the conversion, not a build.
48
64
 
49
65
  A failed baseline does not end the run, and this step does not repair it. Decide which
@@ -58,7 +74,7 @@ pass. This proof only reads.
58
74
  A failed baseline whose cause is in the project is the starting state of this project. So
59
75
  is an operational failure still there after the third attempt. Record the starting state
60
76
  `both-copilotkit-unproved` and run
61
- `npx --prefer-offline --yes copilotkit@4.28.0 onboard read credentials/plan`. This prompt is served
77
+ `npx --prefer-offline --yes copilotkit@4.30.0 onboard read credentials/plan`. This prompt is served
62
78
  whenever a project looks like an OSS integration, so a baseline that did not prove is an
63
79
  ordinary starting state rather than a failure. The build that follows fixes the
64
80
  integration, and `proof/round-trip` proves the result, with its own bounded repair cycle.
@@ -78,5 +94,5 @@ operational. Run the proof again, three times in total, then record the starting
78
94
  above and go on. Both causes lead to the same plan.
79
95
 
80
96
  If the proof cannot identify the running process safely, or it exposes a secret, run
81
- `npx --prefer-offline --yes copilotkit@4.28.0 onboard read stopped/run-failed`. Neither means the
97
+ `npx --prefer-offline --yes copilotkit@4.30.0 onboard read stopped/run-failed --reason other`. Neither means the
82
98
  project is unsupported: each means this run did not establish what it needed to.
@@ -1,7 +1,24 @@
1
1
  # Prove the user journey
2
2
 
3
- Do not do the proof work yourself. Spawn one proof subagent. Tell it to run
4
- `npx --prefer-offline --yes copilotkit@4.28.0 onboard read subagent/prove-round-trip` first and follow the
3
+ Run the proof checks once yourself first, from the target app directory:
4
+
5
+ ```text
6
+ npx --prefer-offline --yes copilotkit@4.30.0 onboard proof-check --json
7
+ ```
8
+
9
+ Add `--server <directory>=<command>` for an agent that the approved plan starts outside the
10
+ app. When the runtime declares more than one agent, add `--agent <id>` with the agent id
11
+ from the approved plan.
12
+ <!-- sandboxed-harness -->
13
+ If your harness runs commands in a sandbox, request escalation for this command.
14
+ <!-- /sandboxed-harness -->
15
+ If it prints an `earlyReport`, show that text to the developer as it is, and go on. Do not
16
+ repair anything on this result. Give its result to the first proof subagent only, not to
17
+ one spawned after a repair. If your harness refuses the command, go on without it.
18
+
19
+ Apart from that one command, do not do the proof work yourself. Spawn one proof
20
+ subagent. Tell it to run
21
+ `npx --prefer-offline --yes copilotkit@4.30.0 onboard read subagent/prove-round-trip` first and follow the
5
22
  prompt it returns. Tell it to return at once, and say so, if that read is refused or fails,
6
23
  and not to wait for an approval. If it returns that way, stop that subagent. Run the same
7
24
  command yourself, then spawn a fresh subagent with the returned prompt and the same handoff.
@@ -37,10 +54,26 @@ the run.
37
54
  Wait for the subagent to finish. Its result arrives as a notification. Do not sleep to
38
55
  pass the time.
39
56
 
57
+ If only its closing `subagent-returned` checkpoint was refused, the subagent finished.
58
+ Record no `refused` return and spawn nothing: run that checkpoint yourself, with the result
59
+ the subagent returned.
60
+
61
+ If the subagent returns because its harness refused any other command, record that return:
62
+
63
+ ```text
64
+ npx --prefer-offline --yes copilotkit@4.30.0 onboard checkpoint --phase subagent-returned --brief prove-round-trip --result refused
65
+ ```
66
+
67
+ Then run that command yourself, from the directory the subagent named. Spawn at most one
68
+ fresh subagent for each refused command, with the same handoff and that command's result.
69
+ If the fresh subagent is refused a command too, spawn no other. Follow the
70
+ `subagent/prove-round-trip` brief yourself, as "When a subagent cannot work" in
71
+ `research/gather` says.
72
+
40
73
  Record what that proof returned before you route on it:
41
74
 
42
75
  ```text
43
- npx --prefer-offline --yes copilotkit@4.28.0 onboard proof --step round-trip --outcome <passed|failed|skipped>
76
+ npx --prefer-offline --yes copilotkit@4.30.0 onboard proof --step round-trip --outcome <passed|failed|skipped>
44
77
  ```
45
78
 
46
79
  Report the gate whatever it returned. A proof that never ran is `skipped`, not failed. A
@@ -52,7 +85,7 @@ the next one starts. Until then, `onboard proof-check` counts the next failure a
52
85
  If the CLI prints `## Stop: this run deleted or moved the developer's work` instead of a
53
86
  step, show the developer the list it printed, and run what they choose:
54
87
  the `onboard restore` command the tripwire stop prints, which names each deleted file, or
55
- `npx --prefer-offline --yes copilotkit@4.28.0 onboard tripwire --continue`. Then read the step again. If
88
+ `npx --prefer-offline --yes copilotkit@4.30.0 onboard tripwire --continue`. Then read the step again. If
56
89
  you cannot ask, use the route-out rules below.
57
90
 
58
91
  Never repair, reset, or revert a file the developer changed outside this run. That holds for
@@ -62,14 +95,20 @@ developer's, however right the diagnosis is and however small the fix. Ask the d
62
95
  allow the change, or route out. Never send it to a repair worker without their answer.
63
96
 
64
97
  This prompt pauses for the developer in several places. Before you end your turn to wait
65
- for the developer, report the pause:
98
+ for the developer, report the pause. For the tripwire choice:
99
+
100
+ ```text
101
+ npx --prefer-offline --yes copilotkit@4.30.0 onboard checkpoint --phase awaiting-developer --about restore-files
102
+ ```
103
+
104
+ For a file the plan does not name:
66
105
 
67
106
  ```text
68
- npx --prefer-offline --yes copilotkit@4.28.0 onboard checkpoint --phase awaiting-developer
107
+ npx --prefer-offline --yes copilotkit@4.30.0 onboard checkpoint --phase awaiting-developer --about uncommitted-file
69
108
  ```
70
109
 
71
110
  If the proof result starts with `Status: passed`, run
72
- `npx --prefer-offline --yes copilotkit@4.28.0 onboard read proof/complete`. A skipped
111
+ `npx --prefer-offline --yes copilotkit@4.30.0 onboard read proof/complete`. A skipped
73
112
  surface outcome still enters `proof/complete`. The CLI records `skipped-cloned-starter` and
74
113
  `skipped-no-browser-tool` after a passed round trip as complete, and `skipped-no-device` as
75
114
  blocked. Do not describe a
@@ -95,7 +134,7 @@ credentials step found the model key missing, or the vendor refused it, and the
95
134
  started nothing. Do not send it to a repair worker. Run the `onboard credentials` command
96
135
  that its detail names, and act on its answer as `credentials/settle-credentials` says. Ask
97
136
  the developer its question, report the pause with
98
- `npx --prefer-offline --yes copilotkit@4.28.0 onboard checkpoint --phase awaiting-model-credential`, and
137
+ `npx --prefer-offline --yes copilotkit@4.30.0 onboard checkpoint --phase awaiting-model-credential`, and
99
138
  end your turn. When the key settles, run the proof subagent again. If you have not recorded
100
139
  this attempt yet, record it first, with the outcome it ended with. This attempt does not
101
140
  count toward the three.
@@ -122,7 +161,7 @@ fault, so this is not a route-out. Ask the developer to send one message in the
122
161
  thread, and to give you that thread's id. Give them the app URL and the request words from
123
162
  the result. Tell them where the id is: in the browser's network tools, the request the page
124
163
  sends to the runtime URL carries `threadId` in its body. Report the pause with
125
- `npx --prefer-offline --yes copilotkit@4.28.0 onboard checkpoint --phase awaiting-developer` and end your
164
+ `npx --prefer-offline --yes copilotkit@4.30.0 onboard checkpoint --phase awaiting-developer --about thread-id` and end your
126
165
  turn. When the developer gives the id, start a new proof subagent with
127
166
  the full original proof handoff, the pinned Step 1 record, and the thread id. Tell it to run
128
167
  the proof checks with `--thread <id>`. This attempt does not count toward the three. Use the
@@ -171,7 +210,7 @@ the files the developer allowed.
171
210
  Before you end your turn to wait for the developer, report the pause:
172
211
 
173
212
  ```text
174
- npx --prefer-offline --yes copilotkit@4.28.0 onboard checkpoint --phase awaiting-developer
213
+ npx --prefer-offline --yes copilotkit@4.30.0 onboard checkpoint --phase awaiting-developer --about uncommitted-file
175
214
  ```
176
215
 
177
216
  Restart each project-owned process changed by the repair. Then spawn a fresh proof subagent
@@ -189,10 +228,13 @@ takes the developer path above instead.
189
228
 
190
229
  Route out only when the failure is not yours to fix, when the same proof still fails after
191
230
  three attempts, or when no evidence of the round trip can be produced. In those cases run
192
- `npx --prefer-offline --yes copilotkit@4.28.0 onboard read stopped/run-failed`. The stack is supported:
231
+ `npx --prefer-offline --yes copilotkit@4.30.0 onboard read stopped/run-failed --reason <reason>`. The stack is supported:
193
232
  this run did not finish, which is a different ending and a different report. All three are
194
233
  about the round trip itself. A round trip that proved is not one of them, whatever failed
195
- after it.
234
+ after it. For `<reason>`, pick the one of `model-call`, `build`, `typecheck`,
235
+ `dependency-install`, `docs-gap`, or `other` that names what stopped the round trip.
236
+ When the developer declined what the proof needs, the run did not break: run
237
+ `npx --prefer-offline --yes copilotkit@4.30.0 onboard read stopped/declined --message "<their reason>"` instead.
196
238
 
197
239
  If you stop here without taking that route -- a repair cycle you cannot finish, a limit in
198
240
  your own harness, a run that has run out -- send one short report before you stop. The
@@ -200,7 +242,7 @@ friction command follows the telemetry setting the developer already chose, so i
200
242
  separate question.
201
243
 
202
244
  ```text
203
- npx --prefer-offline --yes copilotkit@4.28.0 onboard friction --phase stop --category <slug> --message "<sentences>"
245
+ npx --prefer-offline --yes copilotkit@4.30.0 onboard friction --phase stop --category <slug> --message "<sentences>"
204
246
  ```
205
247
 
206
248
  `--message` takes one or two sentences: the step you stopped at and what stopped it.