copilotkit 4.18.0 → 4.19.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 (79) hide show
  1. package/README.md +8 -3
  2. package/cli-build-info.json +7 -7
  3. package/index.js +4050 -3186
  4. package/onboarding/index.json +1 -1
  5. package/onboarding/prompts/authenticate/start.md +21 -12
  6. package/onboarding/prompts/conversion/plan.md +3 -3
  7. package/onboarding/prompts/credentials/finalize-plan.md +7 -7
  8. package/onboarding/prompts/credentials/plan.md +47 -21
  9. package/onboarding/prompts/credentials/settle-credentials.md +24 -12
  10. package/onboarding/prompts/credentials/write-plan.md +5 -5
  11. package/onboarding/prompts/fallback/best-effort.md +31 -19
  12. package/onboarding/prompts/feature/a2ui/implement.md +7 -7
  13. package/onboarding/prompts/feature/a2ui/proof.md +8 -8
  14. package/onboarding/prompts/feature/a2ui/start.md +10 -10
  15. package/onboarding/prompts/feature/channels/implement.md +8 -8
  16. package/onboarding/prompts/feature/channels/proof.md +7 -7
  17. package/onboarding/prompts/feature/channels/start.md +10 -10
  18. package/onboarding/prompts/feature/chat-suggestions/implement.md +7 -7
  19. package/onboarding/prompts/feature/chat-suggestions/proof.md +7 -7
  20. package/onboarding/prompts/feature/chat-suggestions/start.md +10 -10
  21. package/onboarding/prompts/feature/complete.md +2 -2
  22. package/onboarding/prompts/feature/learning/implement.md +16 -16
  23. package/onboarding/prompts/feature/learning/proof.md +8 -8
  24. package/onboarding/prompts/feature/learning/start.md +10 -10
  25. package/onboarding/prompts/feature/open-generative-ui/implement.md +7 -7
  26. package/onboarding/prompts/feature/open-generative-ui/proof.md +7 -7
  27. package/onboarding/prompts/feature/open-generative-ui/start.md +10 -10
  28. package/onboarding/prompts/feature/realtime-sync/implement.md +8 -8
  29. package/onboarding/prompts/feature/realtime-sync/proof.md +7 -7
  30. package/onboarding/prompts/feature/realtime-sync/start.md +9 -9
  31. package/onboarding/prompts/feature/rich-threads/implement.md +9 -9
  32. package/onboarding/prompts/feature/rich-threads/proof.md +7 -7
  33. package/onboarding/prompts/feature/rich-threads/start.md +9 -9
  34. package/onboarding/prompts/feature/stop.md +3 -3
  35. package/onboarding/prompts/feature/voice/implement.md +7 -7
  36. package/onboarding/prompts/feature/voice/proof.md +7 -7
  37. package/onboarding/prompts/feature/voice/start.md +10 -10
  38. package/onboarding/prompts/framework/ag2.md +2 -2
  39. package/onboarding/prompts/framework/agno.md +2 -2
  40. package/onboarding/prompts/framework/built-in.md +2 -2
  41. package/onboarding/prompts/framework/claude-sdk-python.md +2 -2
  42. package/onboarding/prompts/framework/claude-sdk-typescript.md +2 -2
  43. package/onboarding/prompts/framework/crewai-flows.md +2 -2
  44. package/onboarding/prompts/framework/deep-agents.md +2 -2
  45. package/onboarding/prompts/framework/google-adk.md +2 -2
  46. package/onboarding/prompts/framework/langgraph-fastapi.md +2 -2
  47. package/onboarding/prompts/framework/langgraph-python.md +2 -2
  48. package/onboarding/prompts/framework/langgraph-typescript.md +2 -2
  49. package/onboarding/prompts/framework/llamaindex.md +2 -2
  50. package/onboarding/prompts/framework/mastra.md +2 -2
  51. package/onboarding/prompts/framework/ms-agent-dotnet.md +8 -3
  52. package/onboarding/prompts/framework/ms-agent-harness-dotnet.md +8 -3
  53. package/onboarding/prompts/framework/ms-agent-python.md +2 -2
  54. package/onboarding/prompts/framework/pydantic-ai.md +2 -2
  55. package/onboarding/prompts/framework/strands-python.md +2 -2
  56. package/onboarding/prompts/framework/strands-typescript.md +2 -2
  57. package/onboarding/prompts/frontend/angular.md +3 -3
  58. package/onboarding/prompts/frontend/nextjs.md +3 -3
  59. package/onboarding/prompts/frontend/plan.md +7 -7
  60. package/onboarding/prompts/frontend/react-native.md +2 -2
  61. package/onboarding/prompts/frontend/react-spa.md +2 -2
  62. package/onboarding/prompts/frontend/vue.md +2 -2
  63. package/onboarding/prompts/implementation/build-and-validate.md +23 -15
  64. package/onboarding/prompts/proof/complete.md +32 -16
  65. package/onboarding/prompts/proof/oss-baseline.md +5 -5
  66. package/onboarding/prompts/proof/round-trip.md +23 -15
  67. package/onboarding/prompts/research/gather.md +6 -6
  68. package/onboarding/prompts/research/merge.md +5 -4
  69. package/onboarding/prompts/research/preflight.md +15 -50
  70. package/onboarding/prompts/research/route.md +7 -6
  71. package/onboarding/prompts/starter/clone.md +6 -6
  72. package/onboarding/prompts/stopped/run-failed.md +2 -2
  73. package/onboarding/prompts/subagent/create-plan.md +10 -1
  74. package/onboarding/prompts/subagent/inspect-repository.md +10 -2
  75. package/onboarding/prompts/subagent/prove-oss-baseline.md +1 -1
  76. package/onboarding/prompts/subagent/prove-round-trip.md +70 -56
  77. package/onboarding/prompts/unsupported/no-validated-path.md +2 -2
  78. package/package.json +1 -1
  79. package/release/release-tool.js +11 -2
@@ -12,7 +12,7 @@ acted on. Send one short report before you stop. The friction command follows th
12
12
  setting the developer already chose, so it needs no separate question.
13
13
 
14
14
  ```text
15
- npx --prefer-offline --yes copilotkit@4.18.0 onboard friction --phase stop --category <slug> --message "<sentences>"
15
+ npx --prefer-offline --yes copilotkit@4.19.0 onboard friction --phase stop --category <slug> --message "<sentences>"
16
16
  ```
17
17
 
18
18
  `--message` takes one or two sentences: the step you stopped at and what stopped it.
@@ -67,7 +67,7 @@ Approving the plan is the developer agreeing to every path it listed under
67
67
  app directory:
68
68
 
69
69
  ```text
70
- npx --prefer-offline --yes copilotkit@4.18.0 onboard protect --authorize --path <path> --reason "<the plan's sentence>"
70
+ npx --prefer-offline --yes copilotkit@4.19.0 onboard protect --authorize --path <path> --reason "<the plan's sentence>"
71
71
  ```
72
72
 
73
73
  Consent has to be on the record before the file moves, so a call made after the change is
@@ -95,7 +95,7 @@ No implementation step has run yet, so the change is theirs rather than this run
95
95
  consent over it by adding one flag:
96
96
 
97
97
  ```text
98
- npx --prefer-offline --yes copilotkit@4.18.0 onboard protect --authorize --path <path> --reason "<the plan's sentence>" --with-prior-change
98
+ npx --prefer-offline --yes copilotkit@4.19.0 onboard protect --authorize --path <path> --reason "<the plan's sentence>" --with-prior-change
99
99
  ```
100
100
 
101
101
  The flag records their change as drift beside the consent, so the closing report names both
@@ -115,7 +115,7 @@ audit below describes, rather than use this section.
115
115
  Run the audit from the target app directory:
116
116
 
117
117
  ```text
118
- npx --prefer-offline --yes copilotkit@4.18.0 onboard audit
118
+ npx --prefer-offline --yes copilotkit@4.19.0 onboard audit
119
119
  ```
120
120
 
121
121
  It compares every protected path with the digest the CLI captured for it. Its result starts
@@ -150,14 +150,14 @@ A path that no Files changed section names changed outside the run, and it is th
150
150
  developer's own file. Accept it by name:
151
151
 
152
152
  ```text
153
- npx --prefer-offline --yes copilotkit@4.18.0 onboard protect --accept-external --path <path>
153
+ npx --prefer-offline --yes copilotkit@4.19.0 onboard protect --accept-external --path <path>
154
154
  ```
155
155
 
156
156
  A changed env file is its own case. This run asked the developer to place a credential
157
157
  there, so it takes the credential route rather than this one:
158
158
 
159
159
  ```text
160
- npx --prefer-offline --yes copilotkit@4.18.0 onboard protect --accept-credential --path <path>
160
+ npx --prefer-offline --yes copilotkit@4.19.0 onboard protect --accept-credential --path <path>
161
161
  ```
162
162
 
163
163
  That route proves no recorded credential was lost, instead of taking the run's word that it
@@ -176,7 +176,7 @@ neither does a one-line fix. Never repair, reset, or revert it. Ask the develope
176
176
  the change, and record the answer they give:
177
177
 
178
178
  ```text
179
- npx --prefer-offline --yes copilotkit@4.18.0 onboard protect --authorize --unplanned --path <path> --reason "<what the developer said>"
179
+ npx --prefer-offline --yes copilotkit@4.19.0 onboard protect --authorize --unplanned --path <path> --reason "<what the developer said>"
180
180
  ```
181
181
 
182
182
  Use it only for an answer a developer actually gave. It records the consent as taken
@@ -188,6 +188,14 @@ and spawn a fresh implementation subagent with the same handoff and that list. I
188
188
  audit starts with `Status: blocked`, use the route-out rules instead. A subagent
189
189
  that already returned cannot pick up consent recorded after it was spawned.
190
190
 
191
+ A failed audit can also list project files that name a credential file outside the
192
+ repository. Such a file is not a protected path, and no route accepts it. It ties the commit
193
+ to a folder in the developer's home directory, so the app has no model key on any other
194
+ machine. Spawn a fresh implementation subagent with the same handoff and this one change:
195
+ remove the outside path, and load the key the way the approved plan says, from the app's
196
+ env file or from an environment variable. Then run the audit again. If the file is a
197
+ protected path, or the plan names no other way to load the key, use the route-out rules.
198
+
191
199
  `Status: blocked` means the audit has no baseline to read. A blocked audit compared
192
200
  nothing and proved nothing changed. It is not a preservation failure: do not report a
193
201
  protected path as changed. Report the printed reason and use the route-out rules.
@@ -203,7 +211,7 @@ create it now, from the target app directory. The developer approved the id befo
203
211
  made, so this is the first point at which it can be created:
204
212
 
205
213
  ```text
206
- npx --prefer-offline --yes copilotkit@4.18.0 learning containers create --id <id> --name <name> --json
214
+ npx --prefer-offline --yes copilotkit@4.19.0 learning containers create --id <id> --name <name> --json
207
215
  ```
208
216
 
209
217
  Pass the id the plan names. Take the name from the selected project's own display name, so
@@ -219,7 +227,7 @@ hold.
219
227
  Then report that the container is settled, before any edit:
220
228
 
221
229
  ```text
222
- npx --prefer-offline --yes copilotkit@4.18.0 onboard checkpoint --phase container-settled
230
+ npx --prefer-offline --yes copilotkit@4.19.0 onboard checkpoint --phase container-settled
223
231
  ```
224
232
 
225
233
  Where the plan names a container the platform already held, report the same checkpoint and
@@ -230,11 +238,11 @@ create nothing. Where the plan names no container, skip this section.
230
238
  Report the plan this run is about to implement:
231
239
 
232
240
  ```text
233
- npx --prefer-offline --yes copilotkit@4.18.0 onboard checkpoint --phase plan-written
241
+ npx --prefer-offline --yes copilotkit@4.19.0 onboard checkpoint --phase plan-written
234
242
  ```
235
243
 
236
244
  Spawn one implementation subagent. Tell it to run
237
- `npx --prefer-offline --yes copilotkit@4.18.0 onboard read subagent/implement-and-validate` first and follow
245
+ `npx --prefer-offline --yes copilotkit@4.19.0 onboard read subagent/implement-and-validate` first and follow
238
246
  the prompt it returns. If that read fails because the subagent cannot use the shell, stop that
239
247
  subagent. Run the same command yourself, then spawn a fresh subagent with the returned prompt
240
248
  and the same handoff. Give it the plan, selected framework, frontend, model, exact target app
@@ -263,11 +271,11 @@ returned. Continue to proof only when that audit passes.
263
271
  After the selected implementation path passes, report it:
264
272
 
265
273
  ```text
266
- npx --prefer-offline --yes copilotkit@4.18.0 onboard checkpoint --phase build-validated
274
+ npx --prefer-offline --yes copilotkit@4.19.0 onboard checkpoint --phase build-validated
267
275
  ```
268
276
 
269
277
  Then run
270
- `npx --prefer-offline --yes copilotkit@4.18.0 onboard read proof/round-trip`.
278
+ `npx --prefer-offline --yes copilotkit@4.19.0 onboard read proof/round-trip`.
271
279
 
272
280
  ## Repair rules
273
281
 
@@ -293,9 +301,9 @@ the same command still fails after three repair attempts, a result starts with
293
301
  declined a file the plan does not name, or the run cannot ask them about it. A defect in a
294
302
  package this run installed is not a stack CopilotKit does not serve, a command this run cannot get to pass is not one either, and a blocked audit
295
303
  proved nothing about the stack. In those cases run
296
- `npx --prefer-offline --yes copilotkit@4.18.0 onboard read stopped/run-failed`.
304
+ `npx --prefer-offline --yes copilotkit@4.19.0 onboard read stopped/run-failed`.
297
305
 
298
306
  A plan with no path to follow takes the unsupported ending: the fix requires changing the
299
307
  developer's existing agent or frontend, or the documentation does not support the plan. In
300
308
  those cases run
301
- `npx --prefer-offline --yes copilotkit@4.18.0 onboard read unsupported/no-validated-path`.
309
+ `npx --prefer-offline --yes copilotkit@4.19.0 onboard read unsupported/no-validated-path`.
@@ -8,12 +8,16 @@ Do not complete onboarding without this evidence.
8
8
  Report whether the real UI was driven on this journey's own surface -- in a browser for a
9
9
  web frontend, on a device for React Native -- using the outcome the proof subagent
10
10
  returned. Do not soften it and do not leave it out: a run that never drove the UI proved
11
- the agent, not the surface, and the developer needs to know which they have.
11
+ the agent, not the surface, and the developer needs to know which they have. For
12
+ `skipped-no-browser-tool`, the command's list of what no browser checked is that report. Give
13
+ it once, in the section about what was proved. Do not add a separate line, heading, or
14
+ opening sentence about the missing browser.
12
15
 
13
16
  **Whether this run is complete is decided by the command at the end of this prompt, not
14
17
  here.** Run it before you write the summary, and let its output decide which summary you
15
18
  write. A run whose surface was never driven is blocked, not complete, unless it cloned a
16
- starter and records `skipped-cloned-starter`. For a blocked run, say so in the first
19
+ starter and records `skipped-cloned-starter`, or had no browser tool loaded, records
20
+ `skipped-no-browser-tool`, and recorded a passed round trip. For a blocked run, say so in the first
17
21
  line, name the evidence the command lists as missing, and do not describe the run as
18
22
  finished, working, or ready. Everything else below applies to either outcome.
19
23
 
@@ -85,7 +89,7 @@ Name the debugging surface this journey's frontend can reach, rather than the on
85
89
  of the documentation leads with. For a web frontend it is the CopilotKit Inspector. For
86
90
  React Native there is no Inspector: it is a browser overlay built on a DOM custom element,
87
91
  and `@copilotkit/react-native` does not ship it. Give a mobile developer
88
- `npx --prefer-offline --yes copilotkit@4.18.0 verify --round-trip`, the runtime's own log, the AG-UI
92
+ `npx --prefer-offline --yes copilotkit@4.19.0 verify --round-trip`, the runtime's own log, the AG-UI
89
93
  Event Inspector in the CopilotKit VS Code extension, and the CopilotKit Intelligence
90
94
  thread view
91
95
  instead. Naming the Inspector to a developer who cannot open it costs them the time it
@@ -120,7 +124,7 @@ friction commands follow the telemetry setting the developer already chose, so t
120
124
  separate question.
121
125
 
122
126
  ```text
123
- npx --prefer-offline --yes copilotkit@4.18.0 onboard friction --category <slug> --cost-seconds <seconds> --message "<sentences>"
127
+ npx --prefer-offline --yes copilotkit@4.19.0 onboard friction --category <slug> --cost-seconds <seconds> --message "<sentences>"
124
128
  ```
125
129
 
126
130
  Put one or two sentences in `--message`. Pick one category from
@@ -132,7 +136,7 @@ Pass --docs-path only for a docs-missing or docs-wrong report, naming the page t
132
136
  is about:
133
137
 
134
138
  ```text
135
- npx --prefer-offline --yes copilotkit@4.18.0 onboard friction --category docs-wrong --cost-seconds 300 --docs-path /docs/threads/drawer --message "<sentences>"
139
+ npx --prefer-offline --yes copilotkit@4.19.0 onboard friction --category docs-wrong --cost-seconds 300 --docs-path /docs/threads/drawer --message "<sentences>"
136
140
  ```
137
141
 
138
142
  Give the page's site-relative path or its full URL, with no spaces, query string, or
@@ -149,24 +153,28 @@ Tell the developer when you send a friction report. Do not quote or summarize th
149
153
  unless the developer asks. If the CLI says the report was not sent,
150
154
  state what it said and continue without another question.
151
155
 
152
- When the evidence is gathered, run `npx --prefer-offline --yes copilotkit@4.18.0 onboard complete`, carrying
156
+ When the evidence is gathered, run `npx --prefer-offline --yes copilotkit@4.19.0 onboard complete`, carrying
153
157
  the surface-check outcome the proof subagent returned. Pass exactly one of `--visual-check`
154
158
  or `--device-check`, and pass the one that matches this journey's surface.
155
159
 
156
160
  For a web frontend -- React SPA, Next.js, Angular, Vue:
157
161
 
158
162
  ```text
159
- npx --prefer-offline --yes copilotkit@4.18.0 onboard complete --visual-check <outcome>
163
+ npx --prefer-offline --yes copilotkit@4.19.0 onboard complete --visual-check <outcome>
160
164
  ```
161
165
 
162
166
  The outcome is one of `performed`, `skipped-no-browser-tool`, `skipped-cloned-starter`, or
163
167
  `failed`. Use `skipped-cloned-starter` only for a run that cloned a starter and was told to
164
- open no browser. It is the one skip that does not block.
168
+ open no browser. Use `skipped-no-browser-tool` for a run with no browser tool loaded in this
169
+ session. `skipped-cloned-starter` does not block. `skipped-no-browser-tool` does not block
170
+ when this run recorded a passed round trip with `onboard proof`. The command then prints
171
+ what no browser checked and how to add a browser for the next session. Put each in the
172
+ summary once, as the command prints it.
165
173
 
166
174
  For React Native:
167
175
 
168
176
  ```text
169
- npx --prefer-offline --yes copilotkit@4.18.0 onboard complete --device-check <outcome>
177
+ npx --prefer-offline --yes copilotkit@4.19.0 onboard complete --device-check <outcome>
170
178
  ```
171
179
 
172
180
  The outcome is one of `performed`, `skipped-no-device`, `skipped-cloned-starter`, or
@@ -179,7 +187,7 @@ browser-origin CORS, so the flag you pass is how this run states which surface i
179
187
  For a web frontend, also pass the URL the browser opened:
180
188
 
181
189
  ```text
182
- npx --prefer-offline --yes copilotkit@4.18.0 onboard complete --visual-check <outcome> \
190
+ npx --prefer-offline --yes copilotkit@4.19.0 onboard complete --visual-check <outcome> \
183
191
  --frontend-url <the url you opened>
184
192
  ```
185
193
 
@@ -189,9 +197,9 @@ name -- and never the host itself. A run that opened the loopback IP literal los
189
197
  static chunk to a refusal, and the field is how that stops being invisible. Leave the flag
190
198
  off for React Native, which opens no URL.
191
199
 
192
- Pass the outcome you were given rather than the one you wanted. Anything but `performed` or
193
- `skipped-cloned-starter` prints what the missing check leaves unverified and ends this run
194
- as blocked. That output
200
+ Pass the outcome you were given rather than the one you wanted. `failed` and
201
+ `skipped-no-device` print what the missing check leaves unverified and end this run as
202
+ blocked. That output
195
203
  is the developer's finding, so carry it into the summary rather than restating it as a
196
204
  smaller caveat.
197
205
 
@@ -199,13 +207,21 @@ If the round trip proved and something after it still blocked this run, add `--b
199
207
  to the same command:
200
208
 
201
209
  ```text
202
- npx --prefer-offline --yes copilotkit@4.18.0 onboard complete --visual-check performed --blocked-by <cause>
210
+ npx --prefer-offline --yes copilotkit@4.19.0 onboard complete --visual-check performed --blocked-by <cause>
203
211
  ```
204
212
 
205
213
  The cause is one of `inspector` for a debugging surface that did not open,
206
214
  `plan-excluded-capability` for a capability the approved plan had already excluded for this
207
- framework, and `other` for anything else. Pick `other` rather than leaving the flag off.
208
- The command ends the run as blocked and prints what the blocker leaves unverified.
215
+ framework, `browser-control-unresponsive` for a browser tool that stopped answering during
216
+ the surface check, and `other` for anything else. Pick `other` rather than leaving the flag
217
+ off. The command ends the run as blocked and prints what the blocker leaves unverified.
218
+
219
+ `browser-control-unresponsive` is the one cause that goes with the failed check, because
220
+ nothing drove the frontend:
221
+
222
+ ```text
223
+ npx --prefer-offline --yes copilotkit@4.19.0 onboard complete --visual-check failed --blocked-by browser-control-unresponsive
224
+ ```
209
225
 
210
226
  The managed Intelligence dashboard is not among these, because nothing in this graph asks a
211
227
  run to open it. A run that records a blocker for a surface it was never sent to looks worse
@@ -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.18.0 onboard read subagent/prove-oss-baseline` first and follow the
4
+ `npx --prefer-offline --yes copilotkit@4.19.0 onboard read subagent/prove-oss-baseline` first and follow the
5
5
  prompt it returns. If that read fails because the subagent cannot use the shell, stop that
6
6
  subagent. Run the same command yourself, then spawn a fresh subagent with the returned prompt
7
7
  and the same handoff. Give it the repository findings and exact CLI package spec.
@@ -17,7 +17,7 @@ Wait for the subagent to finish.
17
17
  Record what that proof returned before you route on it:
18
18
 
19
19
  ```text
20
- npx --prefer-offline --yes copilotkit@4.18.0 onboard proof --step oss-baseline --outcome <passed|failed|skipped> [--predicate <1-6>]
20
+ npx --prefer-offline --yes copilotkit@4.19.0 onboard proof --step oss-baseline --outcome <passed|failed|skipped> [--predicate <1-6>]
21
21
  ```
22
22
 
23
23
  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
@@ -39,12 +39,12 @@ Do not change project files before this proof ends. Starting existing developmen
39
39
  processes and their ignored runtime files is allowed.
40
40
 
41
41
  If the subagent proves the `both-oss` predicate, keep its evidence with the plan and run
42
- `npx --prefer-offline --yes copilotkit@4.18.0 onboard read conversion/plan`. That project already works.
42
+ `npx --prefer-offline --yes copilotkit@4.19.0 onboard read conversion/plan`. That project already works.
43
43
  What it needs is the conversion, not a build.
44
44
 
45
45
  If the proof does not establish the baseline, record the starting state
46
46
  `both-copilotkit-unproved` and run
47
- `npx --prefer-offline --yes copilotkit@4.18.0 onboard read credentials/plan`. This prompt is served
47
+ `npx --prefer-offline --yes copilotkit@4.19.0 onboard read credentials/plan`. This prompt is served
48
48
  whenever a project looks like an OSS integration, so a baseline that did not prove is an
49
49
  ordinary starting state rather than a failure. Keep the failing predicate with the plan.
50
50
 
@@ -58,5 +58,5 @@ and the plan preserves it rather than repeating it.
58
58
 
59
59
  If it cannot identify the running process safely, exposes a secret, or finds a baseline
60
60
  failure that cannot be classified, run
61
- `npx --prefer-offline --yes copilotkit@4.18.0 onboard read stopped/run-failed`. None of those mean the
61
+ `npx --prefer-offline --yes copilotkit@4.19.0 onboard read stopped/run-failed`. None of those mean the
62
62
  project is unsupported: they mean this run did not establish what it needed to.
@@ -1,7 +1,7 @@
1
1
  # Prove the user journey
2
2
 
3
3
  Do not do the proof work yourself. Spawn one proof subagent. Tell it to run
4
- `npx --prefer-offline --yes copilotkit@4.18.0 onboard read subagent/prove-round-trip` first and follow the
4
+ `npx --prefer-offline --yes copilotkit@4.19.0 onboard read subagent/prove-round-trip` first and follow the
5
5
  prompt it returns. If that read fails because the subagent cannot use the shell, stop that
6
6
  subagent. Run the same command yourself, then spawn a fresh subagent with the returned prompt
7
7
  and the same handoff. Give it the selected framework, frontend, model, approved plan, selected
@@ -13,6 +13,8 @@ Give it the browser or device control you recorded in the preflight as well. The
13
13
  drives the surface and cannot see your environment, so without that finding it spends the
14
14
  step discovering what you already know. A subagent told it has no control for the surface
15
15
  this frontend needs reports the skip outcome rather than looking for a way around it.
16
+ A web run with no browser tool reports `skipped-no-browser-tool`. That outcome completes the
17
+ run once the round trip is recorded as `passed`.
16
18
 
17
19
  A run that cloned a starter is the exception. Tell that subagent that this run cloned a
18
20
  starter, to finish after `verify --round-trip`, and to open no browser. The cloned code is what this repository's
@@ -22,7 +24,7 @@ expensive step in this setup. `verify --round-trip` reads the answer back off th
22
24
  so it holds for every runtime mount and needs no browser. Give that subagent no browser or
23
25
  device control, and have it report `skipped-cloned-starter` rather than a missing
24
26
  capability: nothing was unavailable, the run declined to spend it. That outcome completes
25
- the run. Every other skip says nothing drove the surface, and blocks it.
27
+ the run.
26
28
 
27
29
  Give the subagent this guide for continued-development tools:
28
30
  https://docs.copilotkit.ai/build-with-agents.md
@@ -33,13 +35,13 @@ pass the time.
33
35
  Report each attempt at the journey as it ends, counting from one:
34
36
 
35
37
  ```text
36
- npx --prefer-offline --yes copilotkit@4.18.0 onboard checkpoint --phase journey-attempted --attempt 1
38
+ npx --prefer-offline --yes copilotkit@4.19.0 onboard checkpoint --phase journey-attempted --attempt 1
37
39
  ```
38
40
 
39
41
  Record what that proof returned before you route on it:
40
42
 
41
43
  ```text
42
- npx --prefer-offline --yes copilotkit@4.18.0 onboard proof --step round-trip --outcome <passed|failed|skipped>
44
+ npx --prefer-offline --yes copilotkit@4.19.0 onboard proof --step round-trip --outcome <passed|failed|skipped>
43
45
  ```
44
46
 
45
47
  Report the gate whatever it returned. A proof that never ran is `skipped`, not failed. A
@@ -48,7 +50,7 @@ to record it as `skipped`. The command prints one line and sends nothing else. W
48
50
  record each attempt as it ends.
49
51
 
50
52
  For every protected-path audit in this prompt, run
51
- `npx --prefer-offline --yes copilotkit@4.18.0 onboard audit` from the target app directory. If its result
53
+ `npx --prefer-offline --yes copilotkit@4.19.0 onboard audit` from the target app directory. If its result
52
54
  starts with `Status: blocked`, report the printed reason and use the route-out rules below.
53
55
  A blocked audit proved nothing changed and is not a preservation failure. If a
54
56
  protected-path audit reports a changed path, decide it the way the implementation prompt
@@ -57,7 +59,7 @@ returns none, so a finding with no Files changed section to test against routes
57
59
  path one of those sections names is this run's own change and routes out too. Accept a
58
60
  path only when a section this run collected covers the step that wrote it and does not
59
61
  name it:
60
- `npx --prefer-offline --yes copilotkit@4.18.0 onboard protect --accept-external --path <path>`. Then run
62
+ `npx --prefer-offline --yes copilotkit@4.19.0 onboard protect --accept-external --path <path>`. Then run
61
63
  the audit again and name the path in the closing summary. Never repair, reset, or revert a
62
64
  protected path.
63
65
 
@@ -65,17 +67,23 @@ That holds for a repair cycle too. When the fix for a failing check lands on a p
65
67
  path, the path is still the developer's, however right the diagnosis is and however small
66
68
  the fix. Reading the file never settles who wrote it. Ask the developer to allow the
67
69
  change, and record their answer with
68
- `npx --prefer-offline --yes copilotkit@4.18.0 onboard protect --authorize --unplanned --path <path> --reason "<what the developer said>"`,
70
+ `npx --prefer-offline --yes copilotkit@4.19.0 onboard protect --authorize --unplanned --path <path> --reason "<what the developer said>"`,
69
71
  or route out. Never repair it, and never send it to a repair worker.
70
72
 
71
73
  If the proof result starts with `Status: passed`, run the protected-path audit. Continue to
72
74
  `proof/complete` only if that audit passes. After the audit passes, run
73
- `npx --prefer-offline --yes copilotkit@4.18.0 onboard read proof/complete`. A performed surface outcome with
75
+ `npx --prefer-offline --yes copilotkit@4.19.0 onboard read proof/complete`. A performed surface outcome with
74
76
  the full round trip is core success even if a continued-development tool fails. A skipped
75
- surface outcome still enters `proof/complete` so the CLI records the blocked result.
76
- `skipped-cloned-starter` is the exception: the CLI records that run as complete. Do not
77
- describe a skipped surface as proved. Keep the Skills and MCP results separate from the proof
78
- result.
77
+ surface outcome still enters `proof/complete`. The CLI records `skipped-cloned-starter` and
78
+ `skipped-no-browser-tool` after a passed round trip as complete, and `skipped-no-device` as
79
+ blocked. Do not describe a
80
+ skipped surface as proved. Keep the Skills result separate from the proof result.
81
+
82
+ A passed result can carry the surface-check outcome `failed` with the cause
83
+ `browser-control-unresponsive`. It means that the browser tool stopped answering, not that
84
+ the journey failed. Record the round trip as `passed`, and carry the cause to
85
+ `proof/complete`. Do not send it to a repair worker, and do not run the proof again. No
86
+ repair to the project reaches the tool, and a second attempt waits on the same hang.
79
87
 
80
88
  If the round trip proves and something after it blocks this run anyway -- the debugging
81
89
  surface, or a capability the approved plan already excluded for this framework -- read
@@ -148,7 +156,7 @@ Restart each project-owned process changed by the repair. Report the cycle, coun
148
156
  one:
149
157
 
150
158
  ```text
151
- npx --prefer-offline --yes copilotkit@4.18.0 onboard checkpoint --phase repair-attempted --attempt 1
159
+ npx --prefer-offline --yes copilotkit@4.19.0 onboard checkpoint --phase repair-attempted --attempt 1
152
160
  ```
153
161
 
154
162
  Then spawn a fresh proof subagent
@@ -166,7 +174,7 @@ proof cycles, use the route-out rules below.
166
174
 
167
175
  Route out only when the failure is not yours to fix, when the same proof still fails after
168
176
  three attempts, or when no evidence of the round trip can be produced. In those cases run
169
- `npx --prefer-offline --yes copilotkit@4.18.0 onboard read stopped/run-failed`. The stack is supported:
177
+ `npx --prefer-offline --yes copilotkit@4.19.0 onboard read stopped/run-failed`. The stack is supported:
170
178
  this run did not finish, which is a different ending and a different report. All three are
171
179
  about the round trip itself. A round trip that proved is not one of them, whatever failed
172
180
  after it.
@@ -177,7 +185,7 @@ friction command follows the telemetry setting the developer already chose, so i
177
185
  separate question.
178
186
 
179
187
  ```text
180
- npx --prefer-offline --yes copilotkit@4.18.0 onboard friction --phase stop --category <slug> --message "<sentences>"
188
+ npx --prefer-offline --yes copilotkit@4.19.0 onboard friction --phase stop --category <slug> --message "<sentences>"
181
189
  ```
182
190
 
183
191
  `--message` takes one or two sentences: the step you stopped at and what stopped it.
@@ -44,7 +44,7 @@ Before you end your turn to wait for the developer where the prompt states no de
44
44
  report the pause:
45
45
 
46
46
  ```text
47
- npx --prefer-offline --yes copilotkit@4.18.0 onboard checkpoint --phase awaiting-developer
47
+ npx --prefer-offline --yes copilotkit@4.19.0 onboard checkpoint --phase awaiting-developer
48
48
  ```
49
49
 
50
50
  When the answer or the result arrives, continue from the step that paused. Do not read an
@@ -64,7 +64,7 @@ Both research subagents failing means this harness has no working subagent at al
64
64
  is worth recording once:
65
65
 
66
66
  ```text
67
- npx --prefer-offline --yes copilotkit@4.18.0 onboard checkpoint --phase delegation-unavailable
67
+ npx --prefer-offline --yes copilotkit@4.19.0 onboard checkpoint --phase delegation-unavailable
68
68
  ```
69
69
 
70
70
  Then say once, in your own words, that this environment has no working subagents, so you
@@ -77,7 +77,7 @@ Before you ask the developer any setup question, finish every read-only investig
77
77
  preflight check in this section.
78
78
 
79
79
  Prepare two research assignments. Give each research subagent one assignment. Tell it to run
80
- `npx --prefer-offline --yes copilotkit@4.18.0 onboard read subagent/inspect-repository` first and follow the
80
+ `npx --prefer-offline --yes copilotkit@4.19.0 onboard read subagent/inspect-repository` first and follow the
81
81
  prompt it returns. If that read fails because the subagent cannot use the shell, stop that
82
82
  subagent. Run the same command yourself, then spawn a fresh subagent with the returned prompt
83
83
  and the same handoff. Require only its assigned packet.
@@ -91,7 +91,7 @@ Start both research subagents in parallel:
91
91
  Report that both subagents started:
92
92
 
93
93
  ```text
94
- npx --prefer-offline --yes copilotkit@4.18.0 onboard checkpoint --phase research-dispatched
94
+ npx --prefer-offline --yes copilotkit@4.19.0 onboard checkpoint --phase research-dispatched
95
95
  ```
96
96
 
97
97
  A refused checkpoint prints its reason and leaves onboarding unaffected. It is not a
@@ -100,8 +100,8 @@ failed step.
100
100
  The research is under way. Continue to the surface-control preflight while it runs:
101
101
 
102
102
  ```text
103
- npx --prefer-offline --yes copilotkit@4.18.0 onboard read research/preflight
103
+ npx --prefer-offline --yes copilotkit@4.19.0 onboard read research/preflight
104
104
  ```
105
105
 
106
106
  If inspection stops onboarding, run
107
- `npx --prefer-offline --yes copilotkit@4.18.0 onboard read stopped/run-failed`.
107
+ `npx --prefer-offline --yes copilotkit@4.19.0 onboard read stopped/run-failed`.
@@ -21,7 +21,7 @@ Project selection is where the settled port is written down, through `--runtime-
21
21
  Then report that the research came back:
22
22
 
23
23
  ```text
24
- npx --prefer-offline --yes copilotkit@4.18.0 onboard checkpoint --phase research-returned
24
+ npx --prefer-offline --yes copilotkit@4.19.0 onboard checkpoint --phase research-returned
25
25
  ```
26
26
 
27
27
  A refused checkpoint prints its reason and leaves onboarding unaffected. It is not a
@@ -39,7 +39,8 @@ verifier result.
39
39
 
40
40
  A target project directory that holds no project has no app directory to key on, and
41
41
  that is a merged result rather than a failed merge. Record that this run has no target app
42
- directory and no environment row, then take the read below. Do not send a focused directory
42
+ directory and no environment row. Keep the toolchain reading: it is about this machine, not
43
+ a directory, and the framework question reads it. Then take the read below. Do not send a focused directory
43
44
  check, and do not use the stop route: neither worker can find a directory a developer has
44
45
  not created yet, and the route below is where such a project picks its starter.
45
46
 
@@ -54,7 +55,7 @@ worker a focused directory check. Continue only when both workers return the sam
54
55
  app directory. Both results must start with `Status: passed`. Otherwise, use the stop route.
55
56
 
56
57
  When both research results are merged, run
57
- `npx --prefer-offline --yes copilotkit@4.18.0 onboard read research/route`.
58
+ `npx --prefer-offline --yes copilotkit@4.19.0 onboard read research/route`.
58
59
 
59
60
  If inspection stops onboarding, run
60
- `npx --prefer-offline --yes copilotkit@4.18.0 onboard read stopped/run-failed`.
61
+ `npx --prefer-offline --yes copilotkit@4.19.0 onboard read stopped/run-failed`.
@@ -5,71 +5,36 @@ every later step reads one recorded answer instead of guessing. Do not change ap
5
5
  code here, and do not wait for the research packets yet.
6
6
 
7
7
  Prove whether your coding-agent environment has browser or device control. Do not assume it
8
- either way, and do not report what you expect to be true. Use a browser or device tool already
9
- configured for the coding agent you are running as, the same way a later step uses the
10
- CopilotKit documentation server. With a browser tool, open one inert page such as
8
+ either way, and do not report what you expect to be true. Use a browser or device tool that
9
+ is already loaded in this session. With a browser tool, open one inert page such as
11
10
  `about:blank` and read its title. With a device tool and no browser, list the booted devices
12
11
  in one command: `adb devices -l`. Record the outcome of that attempt: `available` when the
13
- tool answered, `unavailable` when there was none to call or the page did not open. Use
14
- the control that matches the selected surface later.
12
+ tool answered, `unavailable` when there was none to call or the page did not open. Use the
13
+ control that matches the selected surface later.
15
14
 
16
- Where the browser probe answered, register nothing. The harness came equipped.
17
-
18
- Where no browser tool answered, register one for the coding agent you are running as, then
19
- run the same probe again and record what the second attempt did.
20
-
21
- Tell the developer in one line what you are about to register, that it lives in this coding
22
- agent's configuration rather than in their repository, and that they can remove it again.
23
- Say that before you run the command. The run does not ask again.
24
-
25
- Register this server:
26
-
27
- ```text
28
- npx --yes @playwright/mcp@latest --browser chrome --isolated --output-dir <project>/.copilotkit/proof/browser
29
- ```
30
-
31
- Replace `<project>` with the absolute path of the target project directory. The server is
32
- registered against the coding agent rather than against a directory, so a relative path here
33
- resolves wherever that server happens to start.
34
-
35
- `--browser chrome` drives an installed Google Chrome. Where this machine has none, use
36
- `--browser chromium` instead and expect Playwright to download a browser build. Tell the
37
- developer before that download starts. If the server then reports no build, run
38
- `npx playwright install chromium`, and if it still cannot find one, run
39
- `npx @playwright/mcp install-browser chrome-for-testing`. `--isolated` keeps the profile in
40
- memory, so it never touches their own Chrome profile. `--output-dir` keeps the snapshots and
41
- screenshots out of the developer's repository root: without it this server writes them to
42
- `.playwright-mcp/` beside their code, which a project that never asked for a browser has no
43
- reason to carry. Register it the way your own harness registers a server, which is the
44
- mechanism a later step uses for the CopilotKit documentation server.
45
-
46
- Some coding agents, Claude Code among them, load a newly registered MCP server only at the
47
- next session start. Tell the developer in one line to expect one restart, then restart and
48
- re-bind with `npx --prefer-offline --yes copilotkit@4.18.0 onboard start --run <onboarding_run_id>`. That
49
- restart is a step here, not an error.
15
+ Register nothing. Do not add a browser MCP server to this coding agent, and do not install a
16
+ browser. A server registered during a run loads only in the next session, so it cannot help
17
+ this one. Where no tool answered, the run still completes: the proof step reports
18
+ `skipped-no-browser-tool`, and the closing report tells the developer how to add a browser
19
+ for their next session. Say in one line that the live UI check will be skipped and that the
20
+ run can still complete.
50
21
 
51
22
  Do not add a browser or device driver to the project. A driver added there is a
52
- devDependency and a browser download in the diff of a repository that never asked for one,
53
- which is a different thing from a server registered against the coding agent.
54
-
55
- Where the second probe still does not answer -- no browser to drive, no network, or a
56
- harness that cannot register a server -- record `unavailable` and carry it. Do not keep
57
- trying. Say so in one line. Nothing here is for the developer to decide.
23
+ devDependency and a browser download in the diff of a repository that never asked for one.
58
24
 
59
- Registering a server does not boot a device. Where the device probe found none, that is the
60
- whole finding.
25
+ Where the device probe found no booted device, that is the whole finding.
61
26
 
62
27
  Report that the probe settled, whichever way it came out:
63
28
 
64
29
  ```text
65
- npx --prefer-offline --yes copilotkit@4.18.0 onboard checkpoint --phase surface-probed
30
+ npx --prefer-offline --yes copilotkit@4.19.0 onboard checkpoint --phase surface-probed
66
31
  ```
67
32
 
68
33
  Then merge the research:
69
34
 
70
35
  ```text
71
- npx --prefer-offline --yes copilotkit@4.18.0 onboard read research/merge
36
+ npx --prefer-offline --yes copilotkit@4.19.0 onboard read research/merge
72
37
  ```
73
38
 
74
39
  If inspection stops onboarding, run
75
- `npx --prefer-offline --yes copilotkit@4.18.0 onboard read stopped/run-failed`.
40
+ `npx --prefer-offline --yes copilotkit@4.19.0 onboard read stopped/run-failed`.
@@ -9,11 +9,12 @@ sends the run down one path.
9
9
  Before you route on, run this from the target app directory:
10
10
 
11
11
  ```text
12
- npx --prefer-offline --yes copilotkit@4.18.0 onboard protect
12
+ npx --prefer-offline --yes copilotkit@4.19.0 onboard protect
13
13
  ```
14
14
 
15
15
  It reads the working tree itself, records every changed or untracked path with a digest,
16
- and prints the list. Require its result to start with `Status: passed`.
16
+ and prints the list. Require its result to start with `Status: passed`. On a restart of the
17
+ same run, it prints the baseline the run already holds and re-reads nothing.
17
18
 
18
19
  Use the printed list as the protected path list for the rest of the run. Do not assemble
19
20
  that list yourself, and do not ask a subagent to hold it: every later audit reads the
@@ -41,7 +42,7 @@ On either, run this before you read the three findings below, and without asking
41
42
  purpose question:
42
43
 
43
44
  ```text
44
- npx --prefer-offline --yes copilotkit@4.18.0 onboard read feature/channels/start
45
+ npx --prefer-offline --yes copilotkit@4.19.0 onboard read feature/channels/start
45
46
  ```
46
47
 
47
48
  Name the provider to that node so it does not ask again. A Slack page names Slack. A Teams
@@ -96,7 +97,7 @@ settle these three from your own reading of the project. Each one comes from the
96
97
  packets or it is not proved.
97
98
 
98
99
  If all three are proved, prove the live starting state before any project file changes. Run
99
- `npx --prefer-offline --yes copilotkit@4.18.0 onboard read proof/oss-baseline`.
100
+ `npx --prefer-offline --yes copilotkit@4.19.0 onboard read proof/oss-baseline`.
100
101
 
101
102
  Route there before you ask the developer anything else. The questions after this prompt
102
103
  select a framework and a frontend that the findings already name, so a developer who
@@ -109,7 +110,7 @@ developer nor the repository findings prove what the project is for, ask one gui
109
110
  question about the user outcome. This asks what the developer wants to build before you
110
111
  select a framework. Give two or three short examples. Record the answer and give it to
111
112
  each later subagent. Then run
112
- `npx --prefer-offline --yes copilotkit@4.18.0 onboard read credentials/plan`.
113
+ `npx --prefer-offline --yes copilotkit@4.19.0 onboard read credentials/plan`.
113
114
 
114
115
  Do not ask that question on the route above. A project carrying all three states its
115
116
  purpose in the application it already serves.
@@ -123,5 +124,5 @@ A purpose question here names a domain before that choice.
123
124
  Take the same read named above without asking.
124
125
 
125
126
  If authentication, inspection, or the baseline capture stops onboarding, run
126
- `npx --prefer-offline --yes copilotkit@4.18.0 onboard read stopped/run-failed`. None of them says anything
127
+ `npx --prefer-offline --yes copilotkit@4.19.0 onboard read stopped/run-failed`. None of them says anything
127
128
  about whether this project's stack is supported, which is not yet known at this point.