copilotkit 4.13.1 → 4.15.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 (80) hide show
  1. package/README.md +150 -12
  2. package/cli-build-info.json +8 -8
  3. package/index.js +76560 -73271
  4. package/onboarding/index.json +1 -1
  5. package/onboarding/prompts/authenticate/start.md +48 -28
  6. package/onboarding/prompts/conversion/plan.md +3 -3
  7. package/onboarding/prompts/credentials/finalize-plan.md +13 -12
  8. package/onboarding/prompts/credentials/plan.md +21 -21
  9. package/onboarding/prompts/credentials/settle-credentials.md +19 -12
  10. package/onboarding/prompts/credentials/write-plan.md +20 -13
  11. package/onboarding/prompts/fallback/best-effort.md +10 -10
  12. package/onboarding/prompts/feature/a2ui/implement.md +6 -6
  13. package/onboarding/prompts/feature/a2ui/proof.md +6 -6
  14. package/onboarding/prompts/feature/a2ui/start.md +7 -7
  15. package/onboarding/prompts/feature/channels/implement.md +33 -15
  16. package/onboarding/prompts/feature/channels/proof.md +12 -10
  17. package/onboarding/prompts/feature/channels/start.md +13 -12
  18. package/onboarding/prompts/feature/chat-suggestions/implement.md +6 -6
  19. package/onboarding/prompts/feature/chat-suggestions/proof.md +6 -6
  20. package/onboarding/prompts/feature/chat-suggestions/start.md +7 -7
  21. package/onboarding/prompts/feature/complete.md +19 -1
  22. package/onboarding/prompts/feature/learning/implement.md +17 -17
  23. package/onboarding/prompts/feature/learning/proof.md +7 -7
  24. package/onboarding/prompts/feature/learning/start.md +9 -9
  25. package/onboarding/prompts/feature/open-generative-ui/implement.md +6 -6
  26. package/onboarding/prompts/feature/open-generative-ui/proof.md +6 -6
  27. package/onboarding/prompts/feature/open-generative-ui/start.md +7 -7
  28. package/onboarding/prompts/feature/realtime-sync/implement.md +7 -7
  29. package/onboarding/prompts/feature/realtime-sync/proof.md +6 -6
  30. package/onboarding/prompts/feature/realtime-sync/start.md +6 -6
  31. package/onboarding/prompts/feature/rich-threads/implement.md +10 -10
  32. package/onboarding/prompts/feature/rich-threads/proof.md +6 -6
  33. package/onboarding/prompts/feature/rich-threads/start.md +6 -6
  34. package/onboarding/prompts/feature/stop.md +37 -3
  35. package/onboarding/prompts/feature/voice/implement.md +7 -7
  36. package/onboarding/prompts/feature/voice/proof.md +6 -6
  37. package/onboarding/prompts/feature/voice/start.md +8 -8
  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 +2 -2
  52. package/onboarding/prompts/framework/ms-agent-harness-dotnet.md +2 -2
  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 +5 -2
  61. package/onboarding/prompts/frontend/react-spa.md +5 -2
  62. package/onboarding/prompts/frontend/vue.md +5 -2
  63. package/onboarding/prompts/implementation/build-and-validate.md +25 -24
  64. package/onboarding/prompts/proof/complete.md +9 -9
  65. package/onboarding/prompts/proof/oss-baseline.md +5 -5
  66. package/onboarding/prompts/proof/round-trip.md +12 -12
  67. package/onboarding/prompts/research/gather.md +36 -7
  68. package/onboarding/prompts/research/merge.md +3 -3
  69. package/onboarding/prompts/research/preflight.md +4 -4
  70. package/onboarding/prompts/research/route.md +8 -6
  71. package/onboarding/prompts/starter/clone.md +97 -26
  72. package/onboarding/prompts/stopped/run-failed.md +4 -4
  73. package/onboarding/prompts/subagent/create-plan.md +4 -4
  74. package/onboarding/prompts/subagent/implement-and-validate.md +19 -6
  75. package/onboarding/prompts/subagent/inspect-repository.md +2 -2
  76. package/onboarding/prompts/subagent/prove-oss-baseline.md +9 -2
  77. package/onboarding/prompts/subagent/prove-round-trip.md +21 -19
  78. package/onboarding/prompts/unsupported/no-validated-path.md +3 -3
  79. package/package.json +5 -1
  80. package/release/release-tool.js +230 -72
@@ -84,7 +84,7 @@ Name the debugging surface this journey's frontend can reach, rather than the on
84
84
  of the documentation leads with. For a web frontend it is the CopilotKit Inspector. For
85
85
  React Native there is no Inspector: it is a browser overlay built on a DOM custom element,
86
86
  and `@copilotkit/react-native` does not ship it. Give a mobile developer
87
- `npx --yes copilotkit@4.13.1 verify --round-trip`, the runtime's own log, the AG-UI
87
+ `npx --prefer-offline --yes copilotkit@4.15.0 verify --round-trip`, the runtime's own log, the AG-UI
88
88
  Event Inspector in the CopilotKit VS Code extension, and the CopilotKit Intelligence
89
89
  thread view
90
90
  instead. Naming the Inspector to a developer who cannot open it costs them the time it
@@ -114,10 +114,10 @@ the friction commands without another developer question. Do not ask the develop
114
114
  telemetry: the command applies the setting they already have.
115
115
 
116
116
  ```text
117
- npx --yes copilotkit@4.13.1 onboard friction --category <slug> --cost-seconds <seconds>
117
+ npx --prefer-offline --yes copilotkit@4.15.0 onboard friction --category <slug> --cost-seconds <seconds> --message "<sentences>"
118
118
  ```
119
119
 
120
- Write one or two sentences on the command's standard input. Pick one category from
120
+ Put one or two sentences in `--message`. Pick one category from
121
121
  docs-missing, docs-wrong, docs-sequential, cli-gap, sdk-gap, environment,
122
122
  port-collision, credential, validation-loop, and other. For the seconds, give your
123
123
  own estimate of what that one papercut cost this run.
@@ -126,7 +126,7 @@ Pass --docs-path only for a docs-missing or docs-wrong report, naming the page t
126
126
  is about:
127
127
 
128
128
  ```text
129
- npx --yes copilotkit@4.13.1 onboard friction --category docs-wrong --cost-seconds 300 --docs-path /docs/threads/drawer
129
+ npx --prefer-offline --yes copilotkit@4.15.0 onboard friction --category docs-wrong --cost-seconds 300 --docs-path /docs/threads/drawer --message "<sentences>"
130
130
  ```
131
131
 
132
132
  Give the page's site-relative path or its full URL, with no spaces, query string, or
@@ -143,14 +143,14 @@ Tell the developer when you send a friction report. Do not quote or summarize th
143
143
  unless the developer asks. If the CLI says the report was not sent,
144
144
  state what it said and continue without another question.
145
145
 
146
- When the evidence is gathered, run `npx --yes copilotkit@4.13.1 onboard complete`, carrying
146
+ When the evidence is gathered, run `npx --prefer-offline --yes copilotkit@4.15.0 onboard complete`, carrying
147
147
  the surface-check outcome the proof subagent returned. Pass exactly one flag, and pass the
148
148
  one that matches this journey's surface.
149
149
 
150
150
  For a web frontend -- React SPA, Next.js, Angular, Vue:
151
151
 
152
152
  ```text
153
- npx --yes copilotkit@4.13.1 onboard complete --visual-check <outcome>
153
+ npx --prefer-offline --yes copilotkit@4.15.0 onboard complete --visual-check <outcome>
154
154
  ```
155
155
 
156
156
  The outcome is one of `performed`, `skipped-no-browser-tool`, `skipped-cloned-starter`, or
@@ -160,7 +160,7 @@ open no browser. It is the one skip that does not block.
160
160
  For React Native:
161
161
 
162
162
  ```text
163
- npx --yes copilotkit@4.13.1 onboard complete --device-check <outcome>
163
+ npx --prefer-offline --yes copilotkit@4.15.0 onboard complete --device-check <outcome>
164
164
  ```
165
165
 
166
166
  The outcome is one of `performed`, `skipped-no-device`, `skipped-cloned-starter`, or
@@ -173,7 +173,7 @@ browser-origin CORS, so the flag you pass is how this run states which surface i
173
173
  For a web frontend, also pass the URL the browser opened:
174
174
 
175
175
  ```text
176
- npx --yes copilotkit@4.13.1 onboard complete --visual-check <outcome> \
176
+ npx --prefer-offline --yes copilotkit@4.15.0 onboard complete --visual-check <outcome> \
177
177
  --frontend-url <the url you opened>
178
178
  ```
179
179
 
@@ -192,7 +192,7 @@ If the round trip proved and something after it still blocked this run, add `--b
192
192
  to the same command:
193
193
 
194
194
  ```text
195
- npx --yes copilotkit@4.13.1 onboard complete --visual-check performed --blocked-by <cause>
195
+ npx --prefer-offline --yes copilotkit@4.15.0 onboard complete --visual-check performed --blocked-by <cause>
196
196
  ```
197
197
 
198
198
  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 --yes copilotkit@4.13.1 onboard read subagent/prove-oss-baseline` first and follow the
4
+ `npx --prefer-offline --yes copilotkit@4.15.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 --yes copilotkit@4.13.1 onboard proof --step oss-baseline --outcome <passed|failed|skipped> [--predicate <1-6>]
20
+ npx --prefer-offline --yes copilotkit@4.15.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. Pass `passed` when the subagent proved a predicate,
@@ -35,12 +35,12 @@ Do not change project files before this proof ends. Starting existing developmen
35
35
  processes and their ignored runtime files is allowed.
36
36
 
37
37
  If the subagent proves the `both-oss` predicate, keep its evidence with the plan and run
38
- `npx --yes copilotkit@4.13.1 onboard read conversion/plan`. That project already works.
38
+ `npx --prefer-offline --yes copilotkit@4.15.0 onboard read conversion/plan`. That project already works.
39
39
  What it needs is the conversion, not a build.
40
40
 
41
41
  If the proof does not establish the baseline, record the starting state
42
42
  `both-copilotkit-unproved` and run
43
- `npx --yes copilotkit@4.13.1 onboard read credentials/plan`. This prompt is served
43
+ `npx --prefer-offline --yes copilotkit@4.15.0 onboard read credentials/plan`. This prompt is served
44
44
  whenever a project looks like an OSS integration, so a baseline that did not prove is an
45
45
  ordinary starting state rather than a failure. Keep the failing predicate with the plan.
46
46
 
@@ -54,5 +54,5 @@ and the plan preserves it rather than repeating it.
54
54
 
55
55
  If it cannot identify the running process safely, exposes a secret, or finds a baseline
56
56
  failure that cannot be classified, run
57
- `npx --yes copilotkit@4.13.1 onboard read stopped/run-failed`. None of those mean the
57
+ `npx --prefer-offline --yes copilotkit@4.15.0 onboard read stopped/run-failed`. None of those mean the
58
58
  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 --yes copilotkit@4.13.1 onboard read subagent/prove-round-trip` first and follow the
4
+ `npx --prefer-offline --yes copilotkit@4.15.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,7 +14,7 @@ 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 stop after
17
+ A run that cloned a starter is the exception. Tell that subagent to finish after
18
18
  `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
@@ -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 --yes copilotkit@4.13.1 onboard checkpoint --phase journey-attempted --attempt 1
36
+ npx --prefer-offline --yes copilotkit@4.15.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 --yes copilotkit@4.13.1 onboard proof --step round-trip --outcome <passed|failed|skipped>
42
+ npx --prefer-offline --yes copilotkit@4.15.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 --yes copilotkit@4.13.1 onboard audit` from the target app directory. If its result
50
+ `npx --prefer-offline --yes copilotkit@4.15.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 --yes copilotkit@4.13.1 onboard protect --accept-external --path <path>`. Then run
59
+ `npx --prefer-offline --yes copilotkit@4.15.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,12 +64,12 @@ 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 --yes copilotkit@4.13.1 onboard protect --authorize --unplanned --path <path> --reason "<what the developer said>"`,
67
+ `npx --prefer-offline --yes copilotkit@4.15.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 --yes copilotkit@4.13.1 onboard read proof/complete`. A performed surface outcome with
72
+ `npx --prefer-offline --yes copilotkit@4.15.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
74
  surface outcome still enters `proof/complete` so the CLI records the blocked result. Do not
75
75
  describe a skipped surface as proved. Keep the Skills and MCP results separate from the proof
@@ -136,7 +136,7 @@ Restart each project-owned process changed by the repair. Report the cycle, coun
136
136
  one:
137
137
 
138
138
  ```text
139
- npx --yes copilotkit@4.13.1 onboard checkpoint --phase repair-attempted --attempt 1
139
+ npx --prefer-offline --yes copilotkit@4.15.0 onboard checkpoint --phase repair-attempted --attempt 1
140
140
  ```
141
141
 
142
142
  Then spawn a fresh proof subagent
@@ -154,7 +154,7 @@ and proof cycles.
154
154
 
155
155
  Route out only when the failure is not yours to fix, when the same proof still fails after
156
156
  three attempts, or when no evidence of the round trip can be produced. In those cases run
157
- `npx --yes copilotkit@4.13.1 onboard read stopped/run-failed`. The stack is supported:
157
+ `npx --prefer-offline --yes copilotkit@4.15.0 onboard read stopped/run-failed`. The stack is supported:
158
158
  this run did not finish, which is a different ending and a different report. All three are
159
159
  about the round trip itself. A round trip that proved is not one of them, whatever failed
160
160
  after it.
@@ -165,10 +165,10 @@ friction command without another developer question: it applies the telemetry se
165
165
  developer already set.
166
166
 
167
167
  ```text
168
- npx --yes copilotkit@4.13.1 onboard friction --phase stop --category <slug>
168
+ npx --prefer-offline --yes copilotkit@4.15.0 onboard friction --phase stop --category <slug> --message "<sentences>"
169
169
  ```
170
170
 
171
- Write one or two sentences to standard input: the step you stopped at and what stopped it.
171
+ `--message` takes one or two sentences: the step you stopped at and what stopped it.
172
172
  Pick the category that fits from docs-missing, docs-wrong, docs-sequential, cli-gap,
173
173
  sdk-gap, environment, port-collision, credential, validation-loop, and other. Leave
174
174
  --cost-seconds off. A run that stopped cannot separate one papercut's cost from the cost
@@ -14,13 +14,42 @@ notification. Where your own harness hands you the report from the dispatch itse
14
14
  you already hold the result. Either way there is nothing to poll.
15
15
 
16
16
  After you dispatch, do the work that does not depend on the result -- dispatch the other
17
- subagent, run the preflight the next prompt gives you -- and then stop and wait. Wherever a
18
- prompt in this graph says to wait for a subagent to finish, that is what it means.
17
+ subagent, run the preflight the next prompt gives you -- and then end your turn and wait for
18
+ the result. Wherever a prompt in this graph says to wait for a subagent to finish, that is
19
+ what it means. It is a pause, as "Pausing vs stopping" below describes, and not a stop.
19
20
 
20
21
  Do not sleep to pass the time. Not `sleep`, not `/bin/sleep`, not a timer under another
21
22
  name, and not a loop that re-checks whether a result has arrived. Sleeping tells you nothing
22
23
  that waiting for the result does not, and it spends wall clock.
23
24
 
25
+ ## Pausing vs stopping
26
+
27
+ This rule covers the whole run, here and in every later prompt.
28
+
29
+ In this graph, stop means one thing: end the run through a named terminal. You send the
30
+ stop report `authenticate/start` describes, then read the terminal that the rule names.
31
+ Nothing else is a stop.
32
+
33
+ A pause keeps the run open. "End your turn and wait for" something means: end this turn,
34
+ and continue when that thing arrives. A pause waits for one of two things:
35
+
36
+ 1. A subagent result. The section above says how to wait for one.
37
+ 2. The developer. Ask the question, then end your turn and wait for the reply. The reply
38
+ is the answer. A developer who replies without choosing, such as "go ahead" or "you
39
+ pick", gives no answer, and the default that the prompt states applies. Where the
40
+ prompt states no default, ask once more.
41
+
42
+ Before you end your turn to wait for the developer where the prompt states no default,
43
+ report the pause:
44
+
45
+ ```text
46
+ npx --prefer-offline --yes copilotkit@4.15.0 onboard checkpoint --phase awaiting-developer
47
+ ```
48
+
49
+ When the answer or the result arrives, continue from the step that paused. Do not read an
50
+ earlier prompt again, send the welcome again, or start a new run: the run id you hold still
51
+ names this run. A pause is not a stop. It sends no stop report and takes no stop route.
52
+
24
53
  ## When a subagent cannot work
25
54
 
26
55
  This rule also covers every subagent this run spawns, here and in every later prompt.
@@ -34,7 +63,7 @@ Both research subagents failing means this harness has no working subagent at al
34
63
  is worth recording once:
35
64
 
36
65
  ```text
37
- npx --yes copilotkit@4.13.1 onboard checkpoint --phase delegation-unavailable
66
+ npx --prefer-offline --yes copilotkit@4.15.0 onboard checkpoint --phase delegation-unavailable
38
67
  ```
39
68
 
40
69
  Then say once, in your own words, that this environment has no working subagents, so you
@@ -47,7 +76,7 @@ Before you ask the developer any setup question, finish every read-only investig
47
76
  preflight check in this section.
48
77
 
49
78
  Prepare two research assignments. Give each research subagent one assignment. Tell it to run
50
- `npx --yes copilotkit@4.13.1 onboard read subagent/inspect-repository` first and follow the
79
+ `npx --prefer-offline --yes copilotkit@4.15.0 onboard read subagent/inspect-repository` first and follow the
51
80
  prompt it returns. If that read fails because the subagent cannot use the shell, stop that
52
81
  subagent. Run the same command yourself, then spawn a fresh subagent with the returned prompt
53
82
  and the same handoff. Require only its assigned packet.
@@ -61,7 +90,7 @@ Start both research subagents in parallel:
61
90
  Report that both subagents started:
62
91
 
63
92
  ```text
64
- npx --yes copilotkit@4.13.1 onboard checkpoint --phase research-dispatched
93
+ npx --prefer-offline --yes copilotkit@4.15.0 onboard checkpoint --phase research-dispatched
65
94
  ```
66
95
 
67
96
  A refused checkpoint prints its reason and leaves onboarding unaffected. It is not a
@@ -70,8 +99,8 @@ failed step.
70
99
  The research is under way. Continue to the surface-control preflight while it runs:
71
100
 
72
101
  ```text
73
- npx --yes copilotkit@4.13.1 onboard read research/preflight
102
+ npx --prefer-offline --yes copilotkit@4.15.0 onboard read research/preflight
74
103
  ```
75
104
 
76
105
  If inspection stops onboarding, run
77
- `npx --yes copilotkit@4.13.1 onboard read stopped/run-failed`.
106
+ `npx --prefer-offline --yes copilotkit@4.15.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 --yes copilotkit@4.13.1 onboard checkpoint --phase research-returned
24
+ npx --prefer-offline --yes copilotkit@4.15.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 --yes copilotkit@4.13.1 onboard read research/route`.
57
+ `npx --prefer-offline --yes copilotkit@4.15.0 onboard read research/route`.
58
58
 
59
59
  If inspection stops onboarding, run
60
- `npx --yes copilotkit@4.13.1 onboard read stopped/run-failed`.
60
+ `npx --prefer-offline --yes copilotkit@4.15.0 onboard read stopped/run-failed`.
@@ -45,7 +45,7 @@ mechanism a later step uses for the CopilotKit documentation server.
45
45
 
46
46
  Some coding agents, Claude Code among them, load a newly registered MCP server only at the
47
47
  next session start. Tell the developer in one line to expect one restart, then restart and
48
- re-bind with `npx --yes copilotkit@4.13.1 onboard start --run <onboarding_run_id>`. That
48
+ re-bind with `npx --prefer-offline --yes copilotkit@4.15.0 onboard start --run <onboarding_run_id>`. That
49
49
  restart is a step here, not an error.
50
50
 
51
51
  Do not add a browser or device driver to the project. A driver added there is a
@@ -62,14 +62,14 @@ whole finding.
62
62
  Report that the probe settled, whichever way it came out:
63
63
 
64
64
  ```text
65
- npx --yes copilotkit@4.13.1 onboard checkpoint --phase surface-probed
65
+ npx --prefer-offline --yes copilotkit@4.15.0 onboard checkpoint --phase surface-probed
66
66
  ```
67
67
 
68
68
  Then merge the research:
69
69
 
70
70
  ```text
71
- npx --yes copilotkit@4.13.1 onboard read research/merge
71
+ npx --prefer-offline --yes copilotkit@4.15.0 onboard read research/merge
72
72
  ```
73
73
 
74
74
  If inspection stops onboarding, run
75
- `npx --yes copilotkit@4.13.1 onboard read stopped/run-failed`.
75
+ `npx --prefer-offline --yes copilotkit@4.15.0 onboard read stopped/run-failed`.
@@ -9,7 +9,7 @@ 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 --yes copilotkit@4.13.1 onboard protect
12
+ npx --prefer-offline --yes copilotkit@4.15.0 onboard protect
13
13
  ```
14
14
 
15
15
  It reads the working tree itself, records every changed or untracked path with a digest,
@@ -41,7 +41,7 @@ On either, run this before you read the three findings below, and without asking
41
41
  purpose question:
42
42
 
43
43
  ```text
44
- npx --yes copilotkit@4.13.1 onboard read feature/channels/start
44
+ npx --prefer-offline --yes copilotkit@4.15.0 onboard read feature/channels/start
45
45
  ```
46
46
 
47
47
  Name the provider to that node so it does not ask again. A Slack page names Slack. A Teams
@@ -96,7 +96,7 @@ settle these three from your own reading of the project. Each one comes from the
96
96
  packets or it is not proved.
97
97
 
98
98
  If all three are proved, prove the live starting state before any project file changes. Run
99
- `npx --yes copilotkit@4.13.1 onboard read proof/oss-baseline`.
99
+ `npx --prefer-offline --yes copilotkit@4.15.0 onboard read proof/oss-baseline`.
100
100
 
101
101
  Route there before you ask the developer anything else. The questions after this prompt
102
102
  select a framework and a frontend that the findings already name, so a developer who
@@ -109,17 +109,19 @@ developer nor the repository findings prove what the project is for, ask one gui
109
109
  question about the user outcome. This asks what the developer wants to build before you
110
110
  select a framework. Give two or three short examples. Record the answer and give it to
111
111
  each later subagent. Then run
112
- `npx --yes copilotkit@4.13.1 onboard read credentials/plan`.
112
+ `npx --prefer-offline --yes copilotkit@4.15.0 onboard read credentials/plan`.
113
113
 
114
114
  Do not ask that question on the route above. A project carrying all three states its
115
115
  purpose in the application it already serves.
116
116
 
117
117
  Do not ask it when the target directory holds no project either.
118
- The frontend they pick next decides the starter.
118
+ The frontend they pick next decides whether a starter exists.
119
+ Next.js and Angular have starters for some agent frameworks.
120
+ React SPA, Vue 3 and React Native have no starter, so the project is built from their documentation.
119
121
  Slack and Microsoft Teams are choices at that step.
120
122
  A purpose question here names a domain before that choice.
121
123
  Take the same read named above without asking.
122
124
 
123
125
  If authentication or inspection stops onboarding, run
124
- `npx --yes copilotkit@4.13.1 onboard read stopped/run-failed`. Neither says anything
126
+ `npx --prefer-offline --yes copilotkit@4.15.0 onboard read stopped/run-failed`. Neither says anything
125
127
  about whether this project's stack is supported, which is not yet known at this point.
@@ -7,25 +7,31 @@ A directory that holds only a Git repository, a coding agent's own configuration
7
7
  settings or scratch notes still qualifies. Those are not a project, and `git init` is the
8
8
  marker this CLI anchors a run on, so it cannot also be the thing that disqualifies one.
9
9
 
10
+ The home folder and system folders never qualify. Neither does a directory with no Git
11
+ repository of its own whose folders, one or two levels down, hold a Git repository or a
12
+ dependency manifest: those folders are the developer's projects. `init` refuses all
13
+ three. If the target is one of them, stop the shortcut and ask the developer which
14
+ project to use, or to open the coding agent in a new empty folder.
15
+
10
16
  Match the selected agent framework and frontend to this table:
11
17
 
12
- | Agent framework | Frontend | Framework ID |
13
- | -------------------------------- | -------- | ---------------------------------- |
14
- | Agno | Next.js | `agno` |
15
- | Claude Agent SDK Python | Next.js | `claude-sdk-python` |
16
- | Claude Agent SDK TypeScript | Next.js | `claude-sdk-typescript` |
17
- | CrewAI Flows | Next.js | `flows` |
18
- | LangGraph Python | Next.js | `langgraph-py` |
19
- | LangGraph TypeScript | Next.js | `langgraph-js` |
20
- | LlamaIndex | Next.js | `llamaindex` |
21
- | ADK | Next.js | `adk` |
22
- | ADK | Angular | `adk-angular` |
23
- | Microsoft Agent Framework Python | Next.js | `microsoft-agent-framework-py` |
24
- | Microsoft Agent Framework .NET | Next.js | `microsoft-agent-framework-dotnet` |
25
- | Mastra | Next.js | `mastra` |
26
- | Pydantic AI | Next.js | `pydantic-ai` |
27
- | Strands Agents Python | Next.js | `aws-strands-py` |
28
- | Strands Agents TypeScript | Next.js | `aws-strands-ts` |
18
+ | Agent framework | Frontend | Framework ID | Model key |
19
+ | -------------------------------- | -------- | ---------------------------------- | ----------------------------------------- |
20
+ | Agno | Next.js | `agno` | `OPENAI_API_KEY` |
21
+ | Claude Agent SDK Python | Next.js | `claude-sdk-python` | `ANTHROPIC_API_KEY` |
22
+ | Claude Agent SDK TypeScript | Next.js | `claude-sdk-typescript` | `ANTHROPIC_API_KEY` |
23
+ | CrewAI Flows | Next.js | `flows` | `OPENAI_API_KEY` |
24
+ | LangGraph Python | Next.js | `langgraph-py` | `OPENAI_API_KEY` |
25
+ | LangGraph TypeScript | Next.js | `langgraph-js` | `OPENAI_API_KEY` |
26
+ | LlamaIndex | Next.js | `llamaindex` | `OPENAI_API_KEY` |
27
+ | ADK | Next.js | `adk` | `GOOGLE_API_KEY` |
28
+ | ADK | Angular | `adk-angular` | `GOOGLE_API_KEY` |
29
+ | Microsoft Agent Framework Python | Next.js | `microsoft-agent-framework-py` | `OPENAI_API_KEY` in `agent/.env` |
30
+ | Microsoft Agent Framework .NET | Next.js | `microsoft-agent-framework-dotnet` | `OPENAI_API_KEY` in `dotnet user-secrets` |
31
+ | Mastra | Next.js | `mastra` | `OPENAI_API_KEY` |
32
+ | Pydantic AI | Next.js | `pydantic-ai` | `OPENAI_API_KEY` |
33
+ | Strands Agents Python | Next.js | `aws-strands-py` | `OPENAI_API_KEY` |
34
+ | Strands Agents TypeScript | Next.js | `aws-strands-ts` | `OPENAI_API_KEY` |
29
35
 
30
36
  Each Framework ID selects a starter that the CLI ships with Intelligence. Do not infer a
31
37
  different pair from a similar name. AG2 does not use this shortcut because its starter does
@@ -46,24 +52,44 @@ the derived name.
46
52
  Only if the developer asks for an existing project, or asks to see the projects they have,
47
53
  read the choices:
48
54
 
49
- `npx --yes copilotkit@4.13.1 project list --json`
55
+ `npx --prefer-offline --yes copilotkit@4.15.0 project list --json`
50
56
 
51
57
  Then ask which one to use. Do not order the projects by creation time. If the developer
52
58
  already gave this answer, do not ask again. Do not read a secret value. Do not show or
53
59
  store a secret value.
54
60
 
61
+ ## Ask where the model credential lives
62
+
63
+ The starter reads a model credential, and the `init` command below does not ask for one.
64
+ Ask for it now, while the developer is still here, and not after the clone. The variable
65
+ is the Model key column of the row you matched. Do not guess it from the framework name.
66
+
67
+ Ask the developer one question: which file holds that key, or whether they will add it
68
+ themselves after the clone. Asking where a credential lives is not requesting a secret
69
+ value. Never ask for the value itself. If no answer comes, clone anyway. The step after
70
+ the clone pauses for the key.
71
+
72
+ A path the developer names is theirs to give, including one outside the project. A path
73
+ this run finds is not. Never read a key file the developer did not name. A key found that
74
+ way bills a project nobody chose.
75
+
76
+ ## Clone the starter
77
+
55
78
  Run the command from the parent directory. Do not inspect another entry in the parent
56
79
  directory. Replace each placeholder with the recorded value. Do not run a placeholder as
57
80
  a shell argument.
58
81
 
59
- `npx --yes copilotkit@4.13.1 init --name <project-name> --framework <framework-id> --channel none --no-banner --create <name> --install`
82
+ `npx --prefer-offline --yes copilotkit@4.15.0 init --name <directory-name> --framework <framework-id> --channel none --no-banner --no-key-prompt --create <name> --install`
60
83
 
61
- Pass the confirmed name to both `--name` and `--create`: the app directory and its
62
- Intelligence project take the same name here. If the developer names an existing project,
84
+ `--name` is always the target directory name derived above, because `init` creates the
85
+ app at `<parent>/<name>`. Any other value puts the app in a new folder beside the target,
86
+ outside the directory this run is bound to. Pass the confirmed project name to `--create`
87
+ only. If the developer names an existing project,
63
88
  use `--project <slug-or-id>` instead of `--create <name>`. If the developer asked to skip
64
89
  the dependency install, use
65
90
  `--no-install` instead of `--install`. Do not wait for an interactive prompt. Pass every
66
- answer as a flag.
91
+ answer as a flag. `--no-key-prompt` stops `init` from asking for a model key. The `init`
92
+ output still names each missing key as `Set <VARIABLE> in .env`.
67
93
 
68
94
  The command clones the starter into the empty target directory. It also connects the
69
95
  starter to the developer's Intelligence project. The earlier login phase supplies the
@@ -72,7 +98,7 @@ account. The command does not need terminal input.
72
98
  Report the clone before you inspect anything:
73
99
 
74
100
  ```text
75
- npx --yes copilotkit@4.13.1 onboard checkpoint --phase starter-cloned
101
+ npx --prefer-offline --yes copilotkit@4.15.0 onboard checkpoint --phase starter-cloned
76
102
  ```
77
103
 
78
104
  This is its own step, not an aside. A run that clones and then goes quiet is
@@ -81,11 +107,56 @@ separates them.
81
107
 
82
108
  Do not rebuild the starter by hand. Then inspect only the generated
83
109
  paths inside the target directory. Record the files, install result, project connection,
84
- and validation commands. Then run
85
- `npx --yes copilotkit@4.13.1 onboard read proof/round-trip`.
110
+ and validation commands.
111
+
112
+ ## Settle the model credential
113
+
114
+ The `init` output names each missing credential as `Set <VARIABLE> in .env`. For each
115
+ one, check the starter's own `.env` without reading the value:
116
+
117
+ ```text
118
+ grep -c '^<VARIABLE>=.' <target>/.env
119
+ ```
120
+
121
+ `1` means the variable holds a value. `0` means it is empty or absent. The command prints
122
+ a count and never the value.
123
+
124
+ If the developer named a key file, copy that one variable from it into `<target>/.env`,
125
+ in place of the empty line. Do not print either file, and do not print the value. Then
126
+ run the check again.
127
+
128
+ If a variable is still empty, ask the developer to add it to `<target>/.env` themselves.
129
+
130
+ The two Microsoft Agent Framework starters keep their key outside `<target>/.env`, so
131
+ `init` prints no `Set` line for them. Settle the key from the Model key column instead:
132
+
133
+ - For the Python starter, run the same check for `OPENAI_API_KEY` against
134
+ `<target>/agent/.env`. A missing file counts as `0`. If the developer named a key file,
135
+ copy the variable into `<target>/agent/.env` the same way. If it is still empty, ask the
136
+ developer to add it there themselves.
137
+ - For the .NET starter, the key lives in `dotnet user-secrets`, and no check can read it
138
+ without printing the value. Ask the developer to run
139
+ `cd <target>/agent && dotnet user-secrets set OPENAI_API_KEY "<key>"` themselves, even
140
+ if they named a key file.
141
+
142
+ Then report the pause and end your turn:
143
+
144
+ ```text
145
+ npx --prefer-offline --yes copilotkit@4.15.0 onboard checkpoint --phase awaiting-developer
146
+ ```
147
+
148
+ This is a pause, not a stop. Do not send a stop report, and do not take a stop route.
149
+ When the developer says the credential is in place, run the check again, and continue
150
+ when every variable holds a value. For the .NET starter, continue on the developer's word. Do not write a placeholder or an empty value to get
151
+ past this step. A starter with a dummy key looks finished and fails at the first model
152
+ call.
153
+
154
+ If no credential is missing, report no pause and continue.
155
+
156
+ Then run `npx --prefer-offline --yes copilotkit@4.15.0 onboard read proof/round-trip`.
86
157
 
87
158
  If the command fails, report its exact error and do not claim that the starter is ready.
88
159
  Then run
89
- `npx --yes copilotkit@4.13.1 onboard read stopped/run-failed`. The starter is one this
160
+ `npx --prefer-offline --yes copilotkit@4.15.0 onboard read stopped/run-failed`. The starter is one this
90
161
  graph ships and the stack was chosen from its own supported list, so a command that
91
162
  returned an error is a run that broke, not a setup this release does not support.
@@ -35,10 +35,10 @@ put to them, stop here and send the report below.
35
35
  If they approve it, make that one fix and nothing else. Then come back into this run:
36
36
 
37
37
  ```text
38
- npx --yes copilotkit@4.13.1 onboard resume
38
+ npx --prefer-offline --yes copilotkit@4.15.0 onboard resume --message "<approval>"
39
39
  ```
40
40
 
41
- Write the developer's approval to standard input, in one or two sentences: the fix they
41
+ Put the developer's approval in `--message`, in one or two sentences: the fix they
42
42
  approved and what it touches. Send no secrets, source code, logs, or command output. The
43
43
  command refuses an approval that carries any of those, prints the reason, exits zero, and
44
44
  serves nothing. Reword it and send it again.
@@ -58,10 +58,10 @@ Send one short report. Run the friction command without another developer questi
58
58
  ask the developer about telemetry: the command applies the setting they already have.
59
59
 
60
60
  ```text
61
- npx --yes copilotkit@4.13.1 onboard friction --phase stop --category <slug>
61
+ npx --prefer-offline --yes copilotkit@4.15.0 onboard friction --phase stop --category <slug> --message "<sentences>"
62
62
  ```
63
63
 
64
- Write one or two sentences to standard input: the step you stopped at and what stopped
64
+ `--message` takes one or two sentences: the step you stopped at and what stopped
65
65
  it. Pick the category that fits from docs-missing, docs-wrong, docs-sequential, cli-gap,
66
66
  sdk-gap, environment, port-collision, credential, validation-loop, and other. Leave
67
67
  --cost-seconds off. A run that stopped cannot separate one papercut's cost from the cost
@@ -119,8 +119,8 @@ different spelling, and it breaks again as soon as CopilotKit moves to `0.0.60`.
119
119
 
120
120
  Plan the upgrade as its own step before the Intelligence runtime wiring, and plan to
121
121
  re-run the recorded baseline checks immediately after it. Name the revert: restore the
122
- manifest and lockfile to their recorded state and stop, rather than wiring Intelligence
123
- onto a baseline the upgrade broke.
122
+ manifest and lockfile to their recorded state and report the break, rather than wiring
123
+ Intelligence onto a baseline the upgrade broke.
124
124
 
125
125
  Where the SDK requires an application-level value that the repository cannot supply, such
126
126
  as an end-user identity for threads, use one clearly marked local placeholder and name what
@@ -170,7 +170,7 @@ here is work the developer did not ask for.
170
170
  Plan the threads drawer itself: add it from the selected drawer page, where this frontend
171
171
  does not already render one. Where this journey's frontend framework ships no threads
172
172
  drawer -- React Native --, plan that the thread is proved by
173
- `npx --yes copilotkit@4.13.1 verify --round-trip`, which needs no browser. Do not plan a
173
+ `npx --prefer-offline --yes copilotkit@4.15.0 verify --round-trip`, which needs no browser. Do not plan a
174
174
  step that opens the managed Intelligence dashboard.
175
175
 
176
176
  ## Order the plan into steps
@@ -223,5 +223,5 @@ command rather than running them one at a time. Split a command only when its re
223
223
  what you run next.
224
224
 
225
225
  Start with `Status: passed`, `Status: failed`, or `Status: blocked`.
226
- Return the plan, the URLs that you read, and each documentation gap. Stop after you return
226
+ Return the plan, the URLs that you read, and each documentation gap. End your turn after you return
227
227
  the findings to the main coding agent.