copilotkit 4.16.0 → 4.17.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 (81) hide show
  1. package/README.md +69 -4
  2. package/cli-build-info.json +7 -7
  3. package/index.js +3993 -2742
  4. package/onboarding/index.json +1 -1
  5. package/onboarding/prompts/authenticate/start.md +17 -15
  6. package/onboarding/prompts/conversion/plan.md +3 -3
  7. package/onboarding/prompts/credentials/finalize-plan.md +20 -20
  8. package/onboarding/prompts/credentials/plan.md +21 -21
  9. package/onboarding/prompts/credentials/settle-credentials.md +46 -10
  10. package/onboarding/prompts/credentials/write-plan.md +35 -20
  11. package/onboarding/prompts/fallback/best-effort.md +23 -15
  12. package/onboarding/prompts/feature/a2ui/implement.md +40 -12
  13. package/onboarding/prompts/feature/a2ui/proof.md +29 -9
  14. package/onboarding/prompts/feature/a2ui/start.md +8 -10
  15. package/onboarding/prompts/feature/blocked-by-plan.md +4 -4
  16. package/onboarding/prompts/feature/channels/implement.md +41 -13
  17. package/onboarding/prompts/feature/channels/proof.md +30 -11
  18. package/onboarding/prompts/feature/channels/start.md +11 -9
  19. package/onboarding/prompts/feature/chat-suggestions/implement.md +40 -12
  20. package/onboarding/prompts/feature/chat-suggestions/proof.md +29 -9
  21. package/onboarding/prompts/feature/chat-suggestions/start.md +8 -10
  22. package/onboarding/prompts/feature/complete.md +2 -2
  23. package/onboarding/prompts/feature/learning/implement.md +58 -26
  24. package/onboarding/prompts/feature/learning/proof.md +30 -10
  25. package/onboarding/prompts/feature/learning/start.md +15 -12
  26. package/onboarding/prompts/feature/open-generative-ui/implement.md +41 -13
  27. package/onboarding/prompts/feature/open-generative-ui/proof.md +29 -9
  28. package/onboarding/prompts/feature/open-generative-ui/start.md +8 -10
  29. package/onboarding/prompts/feature/realtime-sync/implement.md +41 -13
  30. package/onboarding/prompts/feature/realtime-sync/proof.md +31 -10
  31. package/onboarding/prompts/feature/realtime-sync/start.md +8 -9
  32. package/onboarding/prompts/feature/rich-threads/implement.md +42 -14
  33. package/onboarding/prompts/feature/rich-threads/proof.md +31 -10
  34. package/onboarding/prompts/feature/rich-threads/start.md +8 -9
  35. package/onboarding/prompts/feature/stop.md +3 -3
  36. package/onboarding/prompts/feature/voice/implement.md +40 -12
  37. package/onboarding/prompts/feature/voice/proof.md +29 -9
  38. package/onboarding/prompts/feature/voice/start.md +8 -9
  39. package/onboarding/prompts/framework/ag2.md +2 -2
  40. package/onboarding/prompts/framework/agno.md +4 -4
  41. package/onboarding/prompts/framework/built-in.md +2 -2
  42. package/onboarding/prompts/framework/claude-sdk-python.md +8 -7
  43. package/onboarding/prompts/framework/claude-sdk-typescript.md +2 -2
  44. package/onboarding/prompts/framework/crewai-flows.md +15 -7
  45. package/onboarding/prompts/framework/deep-agents.md +4 -3
  46. package/onboarding/prompts/framework/google-adk.md +7 -7
  47. package/onboarding/prompts/framework/langgraph-fastapi.md +2 -2
  48. package/onboarding/prompts/framework/langgraph-python.md +2 -2
  49. package/onboarding/prompts/framework/langgraph-typescript.md +2 -2
  50. package/onboarding/prompts/framework/llamaindex.md +4 -4
  51. package/onboarding/prompts/framework/mastra.md +2 -2
  52. package/onboarding/prompts/framework/ms-agent-dotnet.md +2 -2
  53. package/onboarding/prompts/framework/ms-agent-harness-dotnet.md +2 -2
  54. package/onboarding/prompts/framework/ms-agent-python.md +6 -6
  55. package/onboarding/prompts/framework/pydantic-ai.md +2 -2
  56. package/onboarding/prompts/framework/strands-python.md +4 -4
  57. package/onboarding/prompts/framework/strands-typescript.md +4 -4
  58. package/onboarding/prompts/frontend/angular.md +3 -3
  59. package/onboarding/prompts/frontend/nextjs.md +16 -3
  60. package/onboarding/prompts/frontend/plan.md +7 -7
  61. package/onboarding/prompts/frontend/react-native.md +2 -2
  62. package/onboarding/prompts/frontend/react-spa.md +2 -2
  63. package/onboarding/prompts/frontend/vue.md +2 -2
  64. package/onboarding/prompts/implementation/build-and-validate.md +67 -28
  65. package/onboarding/prompts/proof/complete.md +21 -14
  66. package/onboarding/prompts/proof/oss-baseline.md +16 -12
  67. package/onboarding/prompts/proof/round-trip.md +33 -22
  68. package/onboarding/prompts/research/gather.md +8 -7
  69. package/onboarding/prompts/research/merge.md +3 -3
  70. package/onboarding/prompts/research/preflight.md +4 -4
  71. package/onboarding/prompts/research/route.md +6 -6
  72. package/onboarding/prompts/starter/clone.md +14 -11
  73. package/onboarding/prompts/stopped/run-failed.md +9 -9
  74. package/onboarding/prompts/subagent/create-plan.md +15 -10
  75. package/onboarding/prompts/subagent/implement-and-validate.md +25 -11
  76. package/onboarding/prompts/subagent/inspect-repository.md +14 -6
  77. package/onboarding/prompts/subagent/prove-oss-baseline.md +5 -4
  78. package/onboarding/prompts/subagent/prove-round-trip.md +38 -14
  79. package/onboarding/prompts/unsupported/no-validated-path.md +2 -2
  80. package/package.json +1 -5
  81. package/release/release-tool.js +171 -40
@@ -4,15 +4,16 @@ Do not implement the plan yourself. Use the step order in the approved plan.
4
4
 
5
5
  ## If you stop in this phase
6
6
 
7
- One rule below stops onboarding: a Learning Container create that fails for a reason other
8
- than the container already existing. It ends a run the developer has already approved a
9
- plan for. Name the exact command, id, and error code that stopped you: a report that names
10
- only the step cannot be acted on. Send one short report before you stop. Run the friction
7
+ Two rules below stop onboarding: a Learning Container create that fails for a reason other
8
+ than the container already existing, and a `--accept-credential` refusal that names a lost
9
+ variable. Each one ends a run the developer has already approved a plan for. Name the
10
+ exact command, id, and error code that stopped you: a report that names only the step
11
+ cannot be acted on. Send one short report before you stop. Run the friction
11
12
  command without another developer question. Do not ask the developer about telemetry: the
12
13
  command applies the setting they already have.
13
14
 
14
15
  ```text
15
- npx --prefer-offline --yes copilotkit@4.16.0 onboard friction --phase stop --category <slug> --message "<sentences>"
16
+ npx --prefer-offline --yes copilotkit@4.17.0 onboard friction --phase stop --category <slug> --message "<sentences>"
16
17
  ```
17
18
 
18
19
  `--message` takes one or two sentences: the step you stopped at and what stopped it.
@@ -36,6 +37,19 @@ plan said, what you did instead, and why. Carry that record into the closing sum
36
37
  which has an item for it. Do not stop for a departure that is the right call, and do not
37
38
  leave it unrecorded either.
38
39
 
40
+ The implementation subagent marks its own departures in its Files changed section: a file
41
+ that has the same role as a planned file at a different path, and the documentation file
42
+ it writes. Carry each one into that record.
43
+
44
+ Any other file the plan does not name comes back as a result that starts with
45
+ `Status: blocked` and names the file under Blockers. That result is a question for the
46
+ developer, not a run that broke. Where that file is a protected path, the protected-path
47
+ rules in the audit section below apply instead. Otherwise, pause: name the file and why the
48
+ work needs it, then end your turn and wait for the developer's answer. If they allow it,
49
+ spawn a fresh implementation subagent with the same handoff. Add that file to the handoff
50
+ as a path the developer approved, and record it as a departure. If you cannot ask, or the
51
+ developer declines, the failure ending in the route-out rules below applies.
52
+
39
53
  The existing agent's behavior is never a departure to record and carry on from. It is four
40
54
  things: its system prompt and instructions, its tools and what those tools do, its model
41
55
  and provider configuration, and its memory or state handling. Repair a failing check on
@@ -54,13 +68,24 @@ Approving the plan is the developer agreeing to every path it listed under
54
68
  app directory:
55
69
 
56
70
  ```text
57
- npx --prefer-offline --yes copilotkit@4.16.0 onboard protect --authorize --path <path> --reason "<the plan's sentence>"
71
+ npx --prefer-offline --yes copilotkit@4.17.0 onboard protect --authorize --path <path> --reason "<the plan's sentence>"
58
72
  ```
59
73
 
60
74
  Consent has to be on the record before the file moves, so a call made after the change is
61
75
  refused. Continue only if every result starts with `Status: passed`. If the plan listed
62
76
  nothing there, skip this section.
63
77
 
78
+ The implementation subagent cannot change a protected path unless it has the authorized
79
+ list. Take that list from the CLI rather than from the plan: run `onboard audit` after the
80
+ last authorization, and copy the paths under `Authorized to modify:`. An audit that passes
81
+ or fails prints that block whenever an authorization exists, so a passed or failed audit
82
+ with no such block means nothing is authorized. A blocked audit prints no block at all:
83
+ if this audit starts with `Status: blocked`, the CLI cannot supply the list, so report the
84
+ printed reason and use the route-out rules below. A failed audit here is the one exception
85
+ to the rule that an audit that has not passed never continues the run: read only its
86
+ `Authorized to modify:` block now, and decide its findings with the audit rules below,
87
+ after implementation.
88
+
64
89
  What you record here covers changing the file. It does not cover removing it. Never delete,
65
90
  move, or rename a protected path, whatever the plan says: the audit fails a path that is
66
91
  gone even when consent was recorded for it, and no command clears that. If a step cannot
@@ -71,7 +96,7 @@ No implementation step has run yet, so the change is theirs rather than this run
71
96
  consent over it by adding one flag:
72
97
 
73
98
  ```text
74
- npx --prefer-offline --yes copilotkit@4.16.0 onboard protect --authorize --path <path> --reason "<the plan's sentence>" --with-prior-change
99
+ npx --prefer-offline --yes copilotkit@4.17.0 onboard protect --authorize --path <path> --reason "<the plan's sentence>" --with-prior-change
75
100
  ```
76
101
 
77
102
  The flag records their change as drift beside the consent, so the closing report names both
@@ -81,16 +106,17 @@ the route-out rules apply.
81
106
 
82
107
  This section is the only place the plan's own authorizations are recorded. Once this run
83
108
  reports its plan, the CLI refuses `--authorize` for every path the plan did not name. The
84
- developer approved a plan, not a permission to reach further, so there is no consent to
85
- record for a path that comes up later. If you find such a path mid-run, use the route below
86
- rather than this section.
109
+ developer approved a plan, not a permission to reach further, so there is no plan consent
110
+ to record for a path that comes up later. If you find such a path mid-run, ask the
111
+ developer and record their answer with `--authorize --unplanned`, as the protected-path
112
+ audit below describes, rather than use this section.
87
113
 
88
114
  ## Protected-path audit
89
115
 
90
116
  Run the audit from the target app directory:
91
117
 
92
118
  ```text
93
- npx --prefer-offline --yes copilotkit@4.16.0 onboard audit
119
+ npx --prefer-offline --yes copilotkit@4.17.0 onboard audit
94
120
  ```
95
121
 
96
122
  It compares every protected path with the digest the CLI captured for it. Its result starts
@@ -125,14 +151,14 @@ A path that no Files changed section names changed outside the run, and it is th
125
151
  developer's own file. Accept it by name:
126
152
 
127
153
  ```text
128
- npx --prefer-offline --yes copilotkit@4.16.0 onboard protect --accept-external --path <path>
154
+ npx --prefer-offline --yes copilotkit@4.17.0 onboard protect --accept-external --path <path>
129
155
  ```
130
156
 
131
157
  A changed env file is its own case. This run asked the developer to place a credential
132
158
  there, so it takes the credential route rather than this one:
133
159
 
134
160
  ```text
135
- npx --prefer-offline --yes copilotkit@4.16.0 onboard protect --accept-credential --path <path>
161
+ npx --prefer-offline --yes copilotkit@4.17.0 onboard protect --accept-credential --path <path>
136
162
  ```
137
163
 
138
164
  That route proves no recorded credential was lost, instead of taking the run's word that it
@@ -151,19 +177,25 @@ neither does a one-line fix. Never repair, reset, or revert it. Ask the develope
151
177
  the change, and record the answer they give:
152
178
 
153
179
  ```text
154
- npx --prefer-offline --yes copilotkit@4.16.0 onboard protect --authorize --unplanned --path <path> --reason "<what the developer said>"
180
+ npx --prefer-offline --yes copilotkit@4.17.0 onboard protect --authorize --unplanned --path <path> --reason "<what the developer said>"
155
181
  ```
156
182
 
157
183
  Use it only for an answer a developer actually gave. It records the consent as taken
158
184
  outside the approved plan, and every later audit and the closing report say so, which is
159
185
  what tells the developer they were asked mid-run. If you cannot ask, route out.
160
186
 
187
+ Then run the audit again, take the authorized list from its `Authorized to modify:` block,
188
+ and spawn a fresh implementation subagent with the same handoff and that list. If that
189
+ audit starts with `Status: blocked`, use the route-out rules instead. A subagent
190
+ that already returned cannot pick up consent recorded after it was spawned.
191
+
161
192
  `Status: blocked` means the audit has no baseline to read. A blocked audit compared
162
193
  nothing and proved nothing changed. It is not a preservation failure: do not report a
163
194
  protected path as changed. Report the printed reason and use the route-out rules.
164
195
 
165
- An audit that has not passed never continues the run by itself. Continue only after an
166
- acceptance clears it, or route out. Do not send an audit result to a repair worker.
196
+ An audit that has not passed never continues the run by itself. The failed audit before
197
+ implementation that supplies the authorized list is the one exception. Continue only after
198
+ an acceptance clears it, or route out. Do not send an audit result to a repair worker.
167
199
 
168
200
  ## Create the approved Learning Container
169
201
 
@@ -172,7 +204,7 @@ create it now, from the target app directory. The developer approved the id befo
172
204
  made, so this is the first point at which it can be created:
173
205
 
174
206
  ```text
175
- npx --prefer-offline --yes copilotkit@4.16.0 learning containers create --id <id> --name <name> --json
207
+ npx --prefer-offline --yes copilotkit@4.17.0 learning containers create --id <id> --name <name> --json
176
208
  ```
177
209
 
178
210
  Pass the id the plan names. Take the name from the selected project's own display name, so
@@ -188,26 +220,29 @@ hold.
188
220
  Then report that the container is settled, before any edit:
189
221
 
190
222
  ```text
191
- npx --prefer-offline --yes copilotkit@4.16.0 onboard checkpoint --phase container-settled
223
+ npx --prefer-offline --yes copilotkit@4.17.0 onboard checkpoint --phase container-settled
192
224
  ```
193
225
 
194
226
  Where the plan names a container the platform already held, report the same checkpoint and
195
227
  create nothing. Where the plan names no container, skip this section.
196
228
 
229
+ ## Implement the plan
230
+
197
231
  Report the plan this run is about to implement:
198
232
 
199
233
  ```text
200
- npx --prefer-offline --yes copilotkit@4.16.0 onboard checkpoint --phase plan-written
234
+ npx --prefer-offline --yes copilotkit@4.17.0 onboard checkpoint --phase plan-written
201
235
  ```
202
236
 
203
237
  Spawn one implementation subagent. Tell it to run
204
- `npx --prefer-offline --yes copilotkit@4.16.0 onboard read subagent/implement-and-validate` first and follow
238
+ `npx --prefer-offline --yes copilotkit@4.17.0 onboard read subagent/implement-and-validate` first and follow
205
239
  the prompt it returns. If that read fails because the subagent cannot use the shell, stop that
206
240
  subagent. Run the same command yourself, then spawn a fresh subagent with the returned prompt
207
241
  and the same handoff. Give it the plan, selected framework, frontend, model, exact target app
208
242
  directory, selected documentation URLs, and the
209
243
  documentation policy recorded during framework selection or conversion planning. On a
210
- conversion, also give it the frozen criterion. Give it the protected path list. Require it
244
+ conversion, also give it the frozen criterion. Give it the protected path list and the
245
+ authorized list. Require it
211
246
  to implement every step in plan order and run the full validation list. Wait for it.
212
247
 
213
248
  One subagent implements the whole plan. Do not divide the work across concurrent subagents,
@@ -229,11 +264,11 @@ returned. Continue to proof only when that audit passes.
229
264
  After the selected implementation path passes, report it:
230
265
 
231
266
  ```text
232
- npx --prefer-offline --yes copilotkit@4.16.0 onboard checkpoint --phase build-validated
267
+ npx --prefer-offline --yes copilotkit@4.17.0 onboard checkpoint --phase build-validated
233
268
  ```
234
269
 
235
270
  Then run
236
- `npx --prefer-offline --yes copilotkit@4.16.0 onboard read proof/round-trip`.
271
+ `npx --prefer-offline --yes copilotkit@4.17.0 onboard read proof/round-trip`.
237
272
 
238
273
  ## Repair rules
239
274
 
@@ -250,14 +285,18 @@ implementation path.
250
285
  Route out only when the failure is not yours to fix. Two endings are open from here, and
251
286
  what failed decides which one this run takes.
252
287
 
288
+ A fix that requires changing the developer's existing agent or frontend always takes the
289
+ unsupported ending below, whatever else it matches.
290
+
253
291
  A run that broke takes the failure ending: the failure is in code this run did not write,
254
- the same command still fails after three repair attempts, or a result starts with
255
- `Status: blocked`. A defect in a package this run installed is not a stack CopilotKit does
256
- not serve, a command this run cannot get to pass is not one either, and a blocked audit
292
+ the same command still fails after three repair attempts, a result starts with
293
+ `Status: blocked` for a reason other than a file the plan does not name, or the developer
294
+ declined a file the plan does not name, or the run cannot ask them about it. A defect in a
295
+ 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
257
296
  proved nothing about the stack. In those cases run
258
- `npx --prefer-offline --yes copilotkit@4.16.0 onboard read stopped/run-failed`.
297
+ `npx --prefer-offline --yes copilotkit@4.17.0 onboard read stopped/run-failed`.
259
298
 
260
299
  A plan with no path to follow takes the unsupported ending: the fix requires changing the
261
300
  developer's existing agent or frontend, or the documentation does not support the plan. In
262
301
  those cases run
263
- `npx --prefer-offline --yes copilotkit@4.16.0 onboard read unsupported/no-validated-path`.
302
+ `npx --prefer-offline --yes copilotkit@4.17.0 onboard read unsupported/no-validated-path`.
@@ -12,7 +12,8 @@ the agent, not the surface, and the developer needs to know which they have.
12
12
 
13
13
  **Whether this run is complete is decided by the command at the end of this prompt, not
14
14
  here.** Run it before you write the summary, and let its output decide which summary you
15
- write. A run whose surface was never driven is blocked, not complete: say so in the first
15
+ 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
16
17
  line, name the evidence the command lists as missing, and do not describe the run as
17
18
  finished, working, or ready. Everything else below applies to either outcome.
18
19
 
@@ -84,7 +85,7 @@ Name the debugging surface this journey's frontend can reach, rather than the on
84
85
  of the documentation leads with. For a web frontend it is the CopilotKit Inspector. For
85
86
  React Native there is no Inspector: it is a browser overlay built on a DOM custom element,
86
87
  and `@copilotkit/react-native` does not ship it. Give a mobile developer
87
- `npx --prefer-offline --yes copilotkit@4.16.0 verify --round-trip`, the runtime's own log, the AG-UI
88
+ `npx --prefer-offline --yes copilotkit@4.17.0 verify --round-trip`, the runtime's own log, the AG-UI
88
89
  Event Inspector in the CopilotKit VS Code extension, and the CopilotKit Intelligence
89
90
  thread view
90
91
  instead. Naming the Inspector to a developer who cannot open it costs them the time it
@@ -107,14 +108,19 @@ Where the Learning step was skipped because this organization cannot use Learnin
107
108
  one line and name what was not created. A skip nobody names reads as a container that
108
109
  exists, and the developer then waits for insights from a container this run never made.
109
110
 
110
- State that the servers remain running after proof.
111
+ State that the servers remain running after proof, unless the command at the end of this
112
+ prompt prints `environment_kind: container` or `environment_kind: sandbox`. That run is on
113
+ an isolated host, such as a Docker container or a cloud agent session, which is not a
114
+ Learning Container. The servers end when that host ends, and a `localhost` URL opens on the
115
+ developer's machine only through a forwarded port. Write the items that output lists in
116
+ place of this sentence.
111
117
 
112
118
  Report each thing that slowed this run down. Send at most four reports, worst first. Run
113
119
  the friction commands without another developer question. Do not ask the developer about
114
120
  telemetry: the command applies the setting they already have.
115
121
 
116
122
  ```text
117
- npx --prefer-offline --yes copilotkit@4.16.0 onboard friction --category <slug> --cost-seconds <seconds> --message "<sentences>"
123
+ npx --prefer-offline --yes copilotkit@4.17.0 onboard friction --category <slug> --cost-seconds <seconds> --message "<sentences>"
118
124
  ```
119
125
 
120
126
  Put one or two sentences in `--message`. Pick one category from
@@ -126,7 +132,7 @@ Pass --docs-path only for a docs-missing or docs-wrong report, naming the page t
126
132
  is about:
127
133
 
128
134
  ```text
129
- npx --prefer-offline --yes copilotkit@4.16.0 onboard friction --category docs-wrong --cost-seconds 300 --docs-path /docs/threads/drawer --message "<sentences>"
135
+ npx --prefer-offline --yes copilotkit@4.17.0 onboard friction --category docs-wrong --cost-seconds 300 --docs-path /docs/threads/drawer --message "<sentences>"
130
136
  ```
131
137
 
132
138
  Give the page's site-relative path or its full URL, with no spaces, query string, or
@@ -143,14 +149,14 @@ Tell the developer when you send a friction report. Do not quote or summarize th
143
149
  unless the developer asks. If the CLI says the report was not sent,
144
150
  state what it said and continue without another question.
145
151
 
146
- When the evidence is gathered, run `npx --prefer-offline --yes copilotkit@4.16.0 onboard complete`, carrying
147
- the surface-check outcome the proof subagent returned. Pass exactly one flag, and pass the
148
- one that matches this journey's surface.
152
+ When the evidence is gathered, run `npx --prefer-offline --yes copilotkit@4.17.0 onboard complete`, carrying
153
+ the surface-check outcome the proof subagent returned. Pass exactly one of `--visual-check`
154
+ or `--device-check`, and pass the one that matches this journey's surface.
149
155
 
150
156
  For a web frontend -- React SPA, Next.js, Angular, Vue:
151
157
 
152
158
  ```text
153
- npx --prefer-offline --yes copilotkit@4.16.0 onboard complete --visual-check <outcome>
159
+ npx --prefer-offline --yes copilotkit@4.17.0 onboard complete --visual-check <outcome>
154
160
  ```
155
161
 
156
162
  The outcome is one of `performed`, `skipped-no-browser-tool`, `skipped-cloned-starter`, or
@@ -160,7 +166,7 @@ open no browser. It is the one skip that does not block.
160
166
  For React Native:
161
167
 
162
168
  ```text
163
- npx --prefer-offline --yes copilotkit@4.16.0 onboard complete --device-check <outcome>
169
+ npx --prefer-offline --yes copilotkit@4.17.0 onboard complete --device-check <outcome>
164
170
  ```
165
171
 
166
172
  The outcome is one of `performed`, `skipped-no-device`, `skipped-cloned-starter`, or
@@ -173,7 +179,7 @@ browser-origin CORS, so the flag you pass is how this run states which surface i
173
179
  For a web frontend, also pass the URL the browser opened:
174
180
 
175
181
  ```text
176
- npx --prefer-offline --yes copilotkit@4.16.0 onboard complete --visual-check <outcome> \
182
+ npx --prefer-offline --yes copilotkit@4.17.0 onboard complete --visual-check <outcome> \
177
183
  --frontend-url <the url you opened>
178
184
  ```
179
185
 
@@ -183,8 +189,9 @@ name -- and never the host itself. A run that opened the loopback IP literal los
183
189
  static chunk to a refusal, and the field is how that stops being invisible. Leave the flag
184
190
  off for React Native, which opens no URL.
185
191
 
186
- Pass the outcome you were given rather than the one you wanted. Anything but `performed`
187
- prints what the missing check leaves unverified and ends this run as blocked. That output
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
188
195
  is the developer's finding, so carry it into the summary rather than restating it as a
189
196
  smaller caveat.
190
197
 
@@ -192,7 +199,7 @@ If the round trip proved and something after it still blocked this run, add `--b
192
199
  to the same command:
193
200
 
194
201
  ```text
195
- npx --prefer-offline --yes copilotkit@4.16.0 onboard complete --visual-check performed --blocked-by <cause>
202
+ npx --prefer-offline --yes copilotkit@4.17.0 onboard complete --visual-check performed --blocked-by <cause>
196
203
  ```
197
204
 
198
205
  The cause is one of `inspector` for a debugging surface that did not open,
@@ -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.16.0 onboard read subagent/prove-oss-baseline` first and follow the
4
+ `npx --prefer-offline --yes copilotkit@4.17.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,30 +17,34 @@ 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.16.0 onboard proof --step oss-baseline --outcome <passed|failed|skipped> [--predicate <1-6>]
20
+ npx --prefer-offline --yes copilotkit@4.17.0 onboard proof --step oss-baseline --outcome <passed|failed|skipped> [--predicate <1-6>]
21
21
  ```
22
22
 
23
- Report the gate whatever it returned. Pass `passed` when the subagent proved a predicate,
24
- and `failed` when it cannot classify the baseline.
25
- A proof that never ran is `skipped`, not failed. The command prints one line and sends
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
26
24
  nothing else.
27
25
 
28
- Add `--predicate` with the number the subagent returned, for a failure or a skip. The
29
- subagent returns all six results, and the number is the only part of them this command
30
- carries. Pass it on a failure with the predicate that failed, and on a skip with the
31
- predicate that was skipped, which is `6` where the preflight recorded no surface control.
26
+ The subagent returns all six results. Report the gate from them this way:
27
+
28
+ - Predicates 1 to 5 true, and predicate 6 passed: `--outcome passed`.
29
+ - Predicates 1 to 5 true, and predicate 6 skipped because the preflight recorded no surface
30
+ control: `--outcome passed`. A skipped predicate 6 does not withhold `both-oss`.
31
+ - Predicates 1 to 5 true, and predicate 6 failed on an available surface:
32
+ `--outcome failed --predicate 6`. That is a baseline failure, not a skip.
33
+ - Any of predicates 1 to 5 failed: `--outcome failed --predicate <the first that failed>`.
34
+ - The proof never ran: `--outcome skipped`.
35
+
32
36
  A passed gate takes no predicate.
33
37
 
34
38
  Do not change project files before this proof ends. Starting existing development
35
39
  processes and their ignored runtime files is allowed.
36
40
 
37
41
  If the subagent proves the `both-oss` predicate, keep its evidence with the plan and run
38
- `npx --prefer-offline --yes copilotkit@4.16.0 onboard read conversion/plan`. That project already works.
42
+ `npx --prefer-offline --yes copilotkit@4.17.0 onboard read conversion/plan`. That project already works.
39
43
  What it needs is the conversion, not a build.
40
44
 
41
45
  If the proof does not establish the baseline, record the starting state
42
46
  `both-copilotkit-unproved` and run
43
- `npx --prefer-offline --yes copilotkit@4.16.0 onboard read credentials/plan`. This prompt is served
47
+ `npx --prefer-offline --yes copilotkit@4.17.0 onboard read credentials/plan`. This prompt is served
44
48
  whenever a project looks like an OSS integration, so a baseline that did not prove is an
45
49
  ordinary starting state rather than a failure. Keep the failing predicate with the plan.
46
50
 
@@ -54,5 +58,5 @@ and the plan preserves it rather than repeating it.
54
58
 
55
59
  If it cannot identify the running process safely, exposes a secret, or finds a baseline
56
60
  failure that cannot be classified, run
57
- `npx --prefer-offline --yes copilotkit@4.16.0 onboard read stopped/run-failed`. None of those mean the
61
+ `npx --prefer-offline --yes copilotkit@4.17.0 onboard read stopped/run-failed`. None of those mean the
58
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.16.0 onboard read subagent/prove-round-trip` first and follow the
4
+ `npx --prefer-offline --yes copilotkit@4.17.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
@@ -14,8 +14,8 @@ drives the surface and cannot see your environment, so without that finding it s
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
16
 
17
- A run that cloned a starter is the exception. Tell that subagent to finish after
18
- `verify --round-trip` and to open no browser. The cloned code is what this repository's
17
+ A run that cloned a starter is the exception. Tell that subagent that this run cloned a
18
+ starter, to finish after `verify --round-trip`, and to open no browser. The cloned code is what this repository's
19
19
  starter smoke jobs already drive on every change, so opening a browser re-proves in the
20
20
  developer's run what those jobs prove before the starter ships, and it is the most
21
21
  expensive step in this setup. `verify --round-trip` reads the answer back off the thread,
@@ -33,13 +33,13 @@ pass the time.
33
33
  Report each attempt at the journey as it ends, counting from one:
34
34
 
35
35
  ```text
36
- npx --prefer-offline --yes copilotkit@4.16.0 onboard checkpoint --phase journey-attempted --attempt 1
36
+ npx --prefer-offline --yes copilotkit@4.17.0 onboard checkpoint --phase journey-attempted --attempt 1
37
37
  ```
38
38
 
39
39
  Record what that proof returned before you route on it:
40
40
 
41
41
  ```text
42
- npx --prefer-offline --yes copilotkit@4.16.0 onboard proof --step round-trip --outcome <passed|failed|skipped>
42
+ npx --prefer-offline --yes copilotkit@4.17.0 onboard proof --step round-trip --outcome <passed|failed|skipped>
43
43
  ```
44
44
 
45
45
  Report the gate whatever it returned. A proof that never ran is `skipped`, not failed. The
@@ -47,7 +47,7 @@ command prints one line and sends nothing else. Where a repair cycle runs the pr
47
47
  record each attempt as it ends.
48
48
 
49
49
  For every protected-path audit in this prompt, run
50
- `npx --prefer-offline --yes copilotkit@4.16.0 onboard audit` from the target app directory. If its result
50
+ `npx --prefer-offline --yes copilotkit@4.17.0 onboard audit` from the target app directory. If its result
51
51
  starts with `Status: blocked`, report the printed reason and use the route-out rules below.
52
52
  A blocked audit proved nothing changed and is not a preservation failure. If a
53
53
  protected-path audit reports a changed path, decide it the way the implementation prompt
@@ -56,7 +56,7 @@ returns none, so a finding with no Files changed section to test against routes
56
56
  path one of those sections names is this run's own change and routes out too. Accept a
57
57
  path only when a section this run collected covers the step that wrote it and does not
58
58
  name it:
59
- `npx --prefer-offline --yes copilotkit@4.16.0 onboard protect --accept-external --path <path>`. Then run
59
+ `npx --prefer-offline --yes copilotkit@4.17.0 onboard protect --accept-external --path <path>`. Then run
60
60
  the audit again and name the path in the closing summary. Never repair, reset, or revert a
61
61
  protected path.
62
62
 
@@ -64,14 +64,15 @@ That holds for a repair cycle too. When the fix for a failing check lands on a p
64
64
  path, the path is still the developer's, however right the diagnosis is and however small
65
65
  the fix. Reading the file never settles who wrote it. Ask the developer to allow the
66
66
  change, and record their answer with
67
- `npx --prefer-offline --yes copilotkit@4.16.0 onboard protect --authorize --unplanned --path <path> --reason "<what the developer said>"`,
67
+ `npx --prefer-offline --yes copilotkit@4.17.0 onboard protect --authorize --unplanned --path <path> --reason "<what the developer said>"`,
68
68
  or route out. Never repair it, and never send it to a repair worker.
69
69
 
70
70
  If the proof result starts with `Status: passed`, run the protected-path audit. Continue to
71
71
  `proof/complete` only if that audit passes. After the audit passes, run
72
- `npx --prefer-offline --yes copilotkit@4.16.0 onboard read proof/complete`. A performed surface outcome with
72
+ `npx --prefer-offline --yes copilotkit@4.17.0 onboard read proof/complete`. A performed surface outcome with
73
73
  the full round trip is core success even if a continued-development tool fails. A skipped
74
- surface outcome still enters `proof/complete` so the CLI records the blocked result. Do not
74
+ surface outcome still enters `proof/complete` so the CLI records the blocked result.
75
+ `skipped-cloned-starter` is the exception: the CLI records that run as complete. Do not
75
76
  describe a skipped surface as proved. Keep the Skills and MCP results separate from the proof
76
77
  result.
77
78
 
@@ -85,14 +86,16 @@ developer that a framework and frontend that just worked are unsupported, and ha
85
86
  stop report instead of the application they now have.
86
87
 
87
88
  If the round trip fails, decide which kind of failure it is before you route. The proof
88
- subagent can repair only project-owned processes, ports, and request options. A failure caused
89
+ subagent can repair only project-owned processes, ports, and request options, and it can
90
+ make the credential write that its Step 4 names for `api_key_loadable_by_app`. A failure caused
89
91
  by a source, configuration, dependency, or tracked-file change is a defect in the new work.
90
92
 
91
- Retry the proof subagent only for a project-owned process, port, or request-option failure.
93
+ Retry the proof subagent only for a project-owned process, port, request-option, or
94
+ `api_key_loadable_by_app` failure.
92
95
  Give it the failure evidence and the failed attempt's pinned Step 1 record. Wait for the
93
96
  proof subagent after each operational repair.
94
- If the result passes, use the passed-result route above. Retry a failed result at most three
95
- times. Use the route-out rules below for a blocked or third failed result.
97
+ If the result passes, use the passed-result route above. Run the proof at most three times
98
+ in total. Use the route-out rules below for a blocked or third failed result.
96
99
 
97
100
  Enter the code-repair branch only for a source, configuration, dependency, or tracked-file
98
101
  defect.
@@ -116,8 +119,9 @@ secret values. Require its result to start with `Status: passed`, `Status: faile
116
119
  `Status: blocked`, followed by Files changed, Validation, and Blockers. Otherwise, send the
117
120
  defect to the implementation subagent that validated the planned implementation path. Give it
118
121
  the approved plan and proof evidence. Treat the worker that gets the defect as the repair worker.
119
- Give the repair worker the protected path list. Do not let a generated or repaired path
120
- overlap a protected path.
122
+ Give the repair worker the protected path list and the authorized list from the
123
+ `Authorized to modify:` block of the latest audit. Do not let a generated or repaired path overlap a
124
+ protected path, other than an authorized path itself.
121
125
 
122
126
  Require the full validation list to pass again. Wait for the repair worker to finish.
123
127
  Continue only if its result starts with `Status: passed`. If the repair worker returns
@@ -127,7 +131,14 @@ implementation worker for a planned implementation path. Use the repair worker f
127
131
  path. Wait for the validator to finish. If its result starts with `Status: passed`, continue.
128
132
  If the validator returns `Status: failed`, return its evidence to the repair
129
133
  worker. Repeat repair and validation at most three times. If either worker returns
130
- `Status: blocked`, use the route-out rules below.
134
+ `Status: blocked`, use the route-out rules below. The exception is an implementation worker
135
+ that returns blocked because the repair needs a file the plan does not name. Handle it the
136
+ way `implementation/build-and-validate` does: pause and ask the developer, add the file to
137
+ the handoff if they allow it, and use the route-out rules below if they decline. For a
138
+ protected file, record their answer with `--authorize --unplanned` and run the audit again
139
+ first. Then spawn a fresh repair worker with this repair handoff, not the whole-plan
140
+ implementation handoff: the plan, the proof evidence, the protected path list, and the
141
+ authorized list from that audit.
131
142
 
132
143
  Run the protected-path audit again after validation passes. Continue only if its result
133
144
  starts with `Status: passed`.
@@ -136,7 +147,7 @@ Restart each project-owned process changed by the repair. Report the cycle, coun
136
147
  one:
137
148
 
138
149
  ```text
139
- npx --prefer-offline --yes copilotkit@4.16.0 onboard checkpoint --phase repair-attempted --attempt 1
150
+ npx --prefer-offline --yes copilotkit@4.17.0 onboard checkpoint --phase repair-attempted --attempt 1
140
151
  ```
141
152
 
142
153
  Then spawn a fresh proof subagent
@@ -149,12 +160,12 @@ its grounding check then speaks about a question the failed attempt never asked.
149
160
  Wait for the fresh proof subagent to finish.
150
161
  If the fresh proof result starts with `Status: passed`, run the protected-path audit and use
151
162
  the passed-result route above. If it starts with `Status: failed`, begin the next bounded
152
- repair cycle. Use the route-out rules below for `Status: blocked`. Stop after three repair
153
- and proof cycles.
163
+ repair cycle. Use the route-out rules below for `Status: blocked`. After three repair and
164
+ proof cycles, use the route-out rules below.
154
165
 
155
166
  Route out only when the failure is not yours to fix, when the same proof still fails after
156
167
  three attempts, or when no evidence of the round trip can be produced. In those cases run
157
- `npx --prefer-offline --yes copilotkit@4.16.0 onboard read stopped/run-failed`. The stack is supported:
168
+ `npx --prefer-offline --yes copilotkit@4.17.0 onboard read stopped/run-failed`. The stack is supported:
158
169
  this run did not finish, which is a different ending and a different report. All three are
159
170
  about the round trip itself. A round trip that proved is not one of them, whatever failed
160
171
  after it.
@@ -165,7 +176,7 @@ friction command without another developer question: it applies the telemetry se
165
176
  developer already set.
166
177
 
167
178
  ```text
168
- npx --prefer-offline --yes copilotkit@4.16.0 onboard friction --phase stop --category <slug> --message "<sentences>"
179
+ npx --prefer-offline --yes copilotkit@4.17.0 onboard friction --phase stop --category <slug> --message "<sentences>"
169
180
  ```
170
181
 
171
182
  `--message` takes one or two sentences: the step you stopped at and what stopped it.
@@ -28,7 +28,8 @@ This rule covers the whole run, here and in every later prompt.
28
28
 
29
29
  In this graph, stop means one thing: end the run through a named terminal. You send the
30
30
  stop report `authenticate/start` describes, then read the terminal that the rule names.
31
- Nothing else is a stop.
31
+ Where a rule names a terminal, read that terminal first: if it sends the report itself or
32
+ says to file none, follow it, so the run sends one report at most. Nothing else is a stop.
32
33
 
33
34
  A pause keeps the run open. "End your turn and wait for" something means: end this turn,
34
35
  and continue when that thing arrives. A pause waits for one of two things:
@@ -43,7 +44,7 @@ Before you end your turn to wait for the developer where the prompt states no de
43
44
  report the pause:
44
45
 
45
46
  ```text
46
- npx --prefer-offline --yes copilotkit@4.16.0 onboard checkpoint --phase awaiting-developer
47
+ npx --prefer-offline --yes copilotkit@4.17.0 onboard checkpoint --phase awaiting-developer
47
48
  ```
48
49
 
49
50
  When the answer or the result arrives, continue from the step that paused. Do not read an
@@ -63,7 +64,7 @@ Both research subagents failing means this harness has no working subagent at al
63
64
  is worth recording once:
64
65
 
65
66
  ```text
66
- npx --prefer-offline --yes copilotkit@4.16.0 onboard checkpoint --phase delegation-unavailable
67
+ npx --prefer-offline --yes copilotkit@4.17.0 onboard checkpoint --phase delegation-unavailable
67
68
  ```
68
69
 
69
70
  Then say once, in your own words, that this environment has no working subagents, so you
@@ -76,7 +77,7 @@ Before you ask the developer any setup question, finish every read-only investig
76
77
  preflight check in this section.
77
78
 
78
79
  Prepare two research assignments. Give each research subagent one assignment. Tell it to run
79
- `npx --prefer-offline --yes copilotkit@4.16.0 onboard read subagent/inspect-repository` first and follow the
80
+ `npx --prefer-offline --yes copilotkit@4.17.0 onboard read subagent/inspect-repository` first and follow the
80
81
  prompt it returns. If that read fails because the subagent cannot use the shell, stop that
81
82
  subagent. Run the same command yourself, then spawn a fresh subagent with the returned prompt
82
83
  and the same handoff. Require only its assigned packet.
@@ -90,7 +91,7 @@ Start both research subagents in parallel:
90
91
  Report that both subagents started:
91
92
 
92
93
  ```text
93
- npx --prefer-offline --yes copilotkit@4.16.0 onboard checkpoint --phase research-dispatched
94
+ npx --prefer-offline --yes copilotkit@4.17.0 onboard checkpoint --phase research-dispatched
94
95
  ```
95
96
 
96
97
  A refused checkpoint prints its reason and leaves onboarding unaffected. It is not a
@@ -99,8 +100,8 @@ failed step.
99
100
  The research is under way. Continue to the surface-control preflight while it runs:
100
101
 
101
102
  ```text
102
- npx --prefer-offline --yes copilotkit@4.16.0 onboard read research/preflight
103
+ npx --prefer-offline --yes copilotkit@4.17.0 onboard read research/preflight
103
104
  ```
104
105
 
105
106
  If inspection stops onboarding, run
106
- `npx --prefer-offline --yes copilotkit@4.16.0 onboard read stopped/run-failed`.
107
+ `npx --prefer-offline --yes copilotkit@4.17.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.16.0 onboard checkpoint --phase research-returned
24
+ npx --prefer-offline --yes copilotkit@4.17.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
@@ -54,7 +54,7 @@ worker a focused directory check. Continue only when both workers return the sam
54
54
  app directory. Both results must start with `Status: passed`. Otherwise, use the stop route.
55
55
 
56
56
  When both research results are merged, run
57
- `npx --prefer-offline --yes copilotkit@4.16.0 onboard read research/route`.
57
+ `npx --prefer-offline --yes copilotkit@4.17.0 onboard read research/route`.
58
58
 
59
59
  If inspection stops onboarding, run
60
- `npx --prefer-offline --yes copilotkit@4.16.0 onboard read stopped/run-failed`.
60
+ `npx --prefer-offline --yes copilotkit@4.17.0 onboard read stopped/run-failed`.