copilotkit 4.28.0 → 4.30.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/README.md +317 -36
  2. package/cli-build-info.json +7 -7
  3. package/exporters/claude-sdk/README.md +93 -0
  4. package/exporters/claude-sdk/export_session_store.py +39 -0
  5. package/exporters/claude-sdk/store-export.ts +61 -0
  6. package/index.js +212799 -109146
  7. package/onboarding/index.json +51 -5
  8. package/onboarding/prompts/authenticate/start.md +66 -52
  9. package/onboarding/prompts/conversion/plan.md +3 -3
  10. package/onboarding/prompts/credentials/finalize-plan.md +15 -15
  11. package/onboarding/prompts/credentials/plan.md +25 -29
  12. package/onboarding/prompts/credentials/settle-credentials.md +13 -8
  13. package/onboarding/prompts/credentials/write-plan.md +40 -30
  14. package/onboarding/prompts/deployment/choose-local.md +13 -12
  15. package/onboarding/prompts/deployment/local-evaluation.md +12 -12
  16. package/onboarding/prompts/fallback/best-effort.md +10 -11
  17. package/onboarding/prompts/feature/a2ui/implement.md +7 -5
  18. package/onboarding/prompts/feature/a2ui/plan.md +7 -3
  19. package/onboarding/prompts/feature/a2ui/proof.md +8 -6
  20. package/onboarding/prompts/feature/a2ui/start.md +18 -9
  21. package/onboarding/prompts/feature/channels/implement.md +10 -8
  22. package/onboarding/prompts/feature/channels/plan.md +9 -5
  23. package/onboarding/prompts/feature/channels/proof.md +8 -6
  24. package/onboarding/prompts/feature/channels/start.md +25 -12
  25. package/onboarding/prompts/feature/chat-suggestions/implement.md +7 -5
  26. package/onboarding/prompts/feature/chat-suggestions/plan.md +7 -3
  27. package/onboarding/prompts/feature/chat-suggestions/proof.md +8 -6
  28. package/onboarding/prompts/feature/chat-suggestions/start.md +18 -9
  29. package/onboarding/prompts/feature/complete.md +3 -3
  30. package/onboarding/prompts/feature/learning/implement.md +15 -13
  31. package/onboarding/prompts/feature/learning/plan.md +8 -4
  32. package/onboarding/prompts/feature/learning/proof.md +16 -14
  33. package/onboarding/prompts/feature/learning/start.md +18 -9
  34. package/onboarding/prompts/feature/open-generative-ui/implement.md +7 -5
  35. package/onboarding/prompts/feature/open-generative-ui/plan.md +7 -3
  36. package/onboarding/prompts/feature/open-generative-ui/proof.md +8 -6
  37. package/onboarding/prompts/feature/open-generative-ui/start.md +18 -9
  38. package/onboarding/prompts/feature/realtime-sync/implement.md +8 -6
  39. package/onboarding/prompts/feature/realtime-sync/plan.md +7 -3
  40. package/onboarding/prompts/feature/realtime-sync/proof.md +8 -6
  41. package/onboarding/prompts/feature/realtime-sync/start.md +17 -8
  42. package/onboarding/prompts/feature/rich-threads/implement.md +9 -7
  43. package/onboarding/prompts/feature/rich-threads/plan.md +7 -3
  44. package/onboarding/prompts/feature/rich-threads/proof.md +8 -6
  45. package/onboarding/prompts/feature/rich-threads/start.md +17 -8
  46. package/onboarding/prompts/feature/stop.md +4 -4
  47. package/onboarding/prompts/feature/voice/implement.md +7 -5
  48. package/onboarding/prompts/feature/voice/plan.md +8 -4
  49. package/onboarding/prompts/feature/voice/proof.md +8 -6
  50. package/onboarding/prompts/feature/voice/start.md +18 -9
  51. package/onboarding/prompts/framework/ag2.md +4 -11
  52. package/onboarding/prompts/framework/agno.md +4 -11
  53. package/onboarding/prompts/framework/built-in.md +3 -3
  54. package/onboarding/prompts/framework/claude-sdk-python.md +3 -3
  55. package/onboarding/prompts/framework/claude-sdk-typescript.md +3 -3
  56. package/onboarding/prompts/framework/crewai-flows.md +6 -12
  57. package/onboarding/prompts/framework/custom-ag-ui.md +5 -11
  58. package/onboarding/prompts/framework/deep-agents.md +5 -11
  59. package/onboarding/prompts/framework/google-adk.md +4 -8
  60. package/onboarding/prompts/framework/langgraph-fastapi.md +4 -10
  61. package/onboarding/prompts/framework/langgraph-python.md +4 -10
  62. package/onboarding/prompts/framework/langgraph-typescript.md +5 -11
  63. package/onboarding/prompts/framework/llamaindex.md +4 -10
  64. package/onboarding/prompts/framework/mastra.md +4 -10
  65. package/onboarding/prompts/framework/ms-agent-dotnet.md +6 -13
  66. package/onboarding/prompts/framework/ms-agent-harness-dotnet.md +7 -13
  67. package/onboarding/prompts/framework/ms-agent-python.md +5 -11
  68. package/onboarding/prompts/framework/pydantic-ai.md +4 -10
  69. package/onboarding/prompts/framework/strands-python.md +4 -10
  70. package/onboarding/prompts/framework/strands-typescript.md +4 -10
  71. package/onboarding/prompts/frontend/angular.md +4 -4
  72. package/onboarding/prompts/frontend/nextjs.md +4 -4
  73. package/onboarding/prompts/frontend/plan.md +10 -10
  74. package/onboarding/prompts/frontend/react-native.md +3 -3
  75. package/onboarding/prompts/frontend/react-spa.md +3 -3
  76. package/onboarding/prompts/frontend/vue.md +3 -3
  77. package/onboarding/prompts/implementation/build-and-validate.md +48 -15
  78. package/onboarding/prompts/proof/complete.md +22 -19
  79. package/onboarding/prompts/proof/oss-baseline.md +21 -5
  80. package/onboarding/prompts/proof/round-trip.md +55 -13
  81. package/onboarding/prompts/research/gather.md +60 -43
  82. package/onboarding/prompts/research/merge.md +6 -5
  83. package/onboarding/prompts/research/preflight.md +2 -2
  84. package/onboarding/prompts/research/route.md +5 -5
  85. package/onboarding/prompts/setup/questions.md +11 -9
  86. package/onboarding/prompts/starter/clone.md +78 -76
  87. package/onboarding/prompts/starter/setup.md +111 -0
  88. package/onboarding/prompts/stopped/declined.md +44 -0
  89. package/onboarding/prompts/stopped/run-failed.md +6 -6
  90. package/onboarding/prompts/subagent/create-plan.md +29 -4
  91. package/onboarding/prompts/subagent/implement-and-validate.md +31 -3
  92. package/onboarding/prompts/subagent/inspect-repository.md +17 -4
  93. package/onboarding/prompts/subagent/prove-oss-baseline.md +24 -1
  94. package/onboarding/prompts/subagent/prove-round-trip.md +43 -7
  95. package/onboarding/prompts/unsupported/no-validated-path.md +6 -6
  96. package/package.json +4 -1
  97. package/release/release-tool.js +383 -112
@@ -1,6 +1,6 @@
1
1
  # Clone a starter
2
2
 
3
- First run `npx --prefer-offline --yes copilotkit@4.28.0 onboard setup-answers`. It prints the answers that
3
+ First run `npx --prefer-offline --yes copilotkit@4.30.0 onboard setup-answers`. It prints the answers that
4
4
  `setup/questions` recorded, even after this conversation lost them: `framework`, `frontend`,
5
5
  `vendor`, `project`, `key`, and on the local route `learning`. Take every "recorded" answer
6
6
  below from the record, or this conversation when the record lacks it. Do not ask a question
@@ -22,28 +22,28 @@ project to use, or to open the coding agent in a new empty folder.
22
22
  Before you end your turn to wait for the developer, report the pause:
23
23
 
24
24
  ```text
25
- npx --prefer-offline --yes copilotkit@4.28.0 onboard checkpoint --phase awaiting-developer
25
+ npx --prefer-offline --yes copilotkit@4.30.0 onboard checkpoint --phase awaiting-developer --about existing-folder
26
26
  ```
27
27
 
28
28
  Match the selected agent framework and frontend to this table:
29
29
 
30
- | Agent framework | Frontend | Framework ID | Model key |
31
- | -------------------------------- | -------- | ---------------------------------- | ----------------------------------------- |
32
- | Agno | Next.js | `agno` | `OPENAI_API_KEY` |
33
- | Claude Agent SDK Python | Next.js | `claude-sdk-python` | `ANTHROPIC_API_KEY` |
34
- | Claude Agent SDK TypeScript | Next.js | `claude-sdk-typescript` | `ANTHROPIC_API_KEY` |
35
- | CrewAI Flows | Next.js | `flows` | `OPENAI_API_KEY` |
36
- | LangGraph Python | Next.js | `langgraph-py` | `OPENAI_API_KEY` |
37
- | LangGraph TypeScript | Next.js | `langgraph-js` | `OPENAI_API_KEY` |
38
- | LlamaIndex | Next.js | `llamaindex` | `OPENAI_API_KEY` |
39
- | ADK | Next.js | `adk` | `GOOGLE_API_KEY` |
40
- | ADK | Angular | `adk-angular` | `GOOGLE_API_KEY` |
41
- | Microsoft Agent Framework Python | Next.js | `microsoft-agent-framework-py` | `OPENAI_API_KEY` in `agent/.env` |
42
- | Microsoft Agent Framework .NET | Next.js | `microsoft-agent-framework-dotnet` | `OPENAI_API_KEY` in `dotnet user-secrets` |
43
- | Mastra | Next.js | `mastra` | `OPENAI_API_KEY` |
44
- | Pydantic AI | Next.js | `pydantic-ai` | `OPENAI_API_KEY` |
45
- | Strands Agents Python | Next.js | `aws-strands-py` | `OPENAI_API_KEY` |
46
- | Strands Agents TypeScript | Next.js | `aws-strands-ts` | `OPENAI_API_KEY` |
30
+ | Agent framework | Frontend | Framework ID | Model key | Other vendors |
31
+ | -------------------------------- | -------- | ---------------------------------- | ----------------------------------------- | ------------------------------------------------ |
32
+ | Agno | Next.js | `agno` | `OPENAI_API_KEY` | an OpenAI-compatible provider, Anthropic, Google |
33
+ | Claude Agent SDK Python | Next.js | `claude-sdk-python` | `ANTHROPIC_API_KEY` | none |
34
+ | Claude Agent SDK TypeScript | Next.js | `claude-sdk-typescript` | `ANTHROPIC_API_KEY` | none |
35
+ | CrewAI Flows | Next.js | `flows` | `OPENAI_API_KEY` | an OpenAI-compatible provider |
36
+ | LangGraph Python | Next.js | `langgraph-py` | `OPENAI_API_KEY` | an OpenAI-compatible provider, Anthropic, Google |
37
+ | LangGraph TypeScript | Next.js | `langgraph-js` | `OPENAI_API_KEY` | an OpenAI-compatible provider, Anthropic, Google |
38
+ | LlamaIndex | Next.js | `llamaindex` | `OPENAI_API_KEY` | an OpenAI-compatible provider |
39
+ | ADK | Next.js | `adk` | `GOOGLE_API_KEY` | OpenAI, an OpenAI-compatible provider, Anthropic |
40
+ | ADK | Angular | `adk-angular` | `GOOGLE_API_KEY` | OpenAI, an OpenAI-compatible provider, Anthropic |
41
+ | Microsoft Agent Framework Python | Next.js | `microsoft-agent-framework-py` | `OPENAI_API_KEY` in `agent/.env` | an OpenAI-compatible provider, Anthropic |
42
+ | Microsoft Agent Framework .NET | Next.js | `microsoft-agent-framework-dotnet` | `OPENAI_API_KEY` in `dotnet user-secrets` | an OpenAI-compatible provider |
43
+ | Mastra | Next.js | `mastra` | `OPENAI_API_KEY` | an OpenAI-compatible provider, Anthropic, Google |
44
+ | Pydantic AI | Next.js | `pydantic-ai` | `OPENAI_API_KEY` | an OpenAI-compatible provider, Anthropic, Google |
45
+ | Strands Agents Python | Next.js | `aws-strands-py` | `OPENAI_API_KEY` | an OpenAI-compatible provider, Anthropic |
46
+ | Strands Agents TypeScript | Next.js | `aws-strands-ts` | `OPENAI_API_KEY` | an OpenAI-compatible provider, Anthropic |
47
47
 
48
48
  Each Framework ID selects a starter that the CLI ships with Intelligence. Do not infer a
49
49
  different pair from a similar name. AG2 does not use this shortcut because its starter does
@@ -76,7 +76,7 @@ the derived name.
76
76
  Only if the developer asks for an existing project, or asks to see the projects they have,
77
77
  read the choices:
78
78
 
79
- `npx --prefer-offline --yes copilotkit@4.28.0 project list --json`
79
+ `npx --prefer-offline --yes copilotkit@4.30.0 project list --json`
80
80
 
81
81
  Then ask which one to use. Do not order the projects by creation time. If the developer
82
82
  already gave this answer, do not ask again. Do not read a secret value. Do not show or
@@ -85,7 +85,7 @@ store a secret value.
85
85
  Before you end your turn to wait for the developer, report the pause:
86
86
 
87
87
  ```text
88
- npx --prefer-offline --yes copilotkit@4.28.0 onboard checkpoint --phase awaiting-developer
88
+ npx --prefer-offline --yes copilotkit@4.30.0 onboard checkpoint --phase awaiting-developer --about project-name
89
89
  ```
90
90
 
91
91
  ## Ask where the model credential lives
@@ -95,10 +95,9 @@ Use the recorded `key` answer. A named file (`key.file`) goes to
95
95
  `--model-key-file`. An answer of "later" (`key.later`) clones without one: the step after the clone pauses
96
96
  for the key. Do not ask again.
97
97
 
98
- When the recorded vendor is not the vendor of the Model key column, `init` copies the
99
- wrong variable from a key file. An OpenAI-compatible provider counts as another vendor,
100
- although its key is `OPENAI_API_KEY`. So clone without `--model-key-file` in that case, and
101
- follow `## Switch the starter to the recorded vendor` after the clone.
98
+ When the recorded vendor is not the vendor of the Model key column, `init` takes the
99
+ vendor as a flag, below, and then copies that vendor's key from the key file. An
100
+ OpenAI-compatible provider counts as another vendor, although its key is `OPENAI_API_KEY`.
102
101
 
103
102
  If neither the record nor this conversation holds a key answer, ask for it now, while the developer is still
104
103
  here, and not after the clone. The variable is the Model key column of the row you
@@ -119,7 +118,7 @@ stops the clone. Pass the new file with `--model-key-file`, as for any other key
119
118
  Before you end your turn to wait for the developer, report the pause:
120
119
 
121
120
  ```text
122
- npx --prefer-offline --yes copilotkit@4.28.0 onboard checkpoint --phase awaiting-model-credential
121
+ npx --prefer-offline --yes copilotkit@4.30.0 onboard checkpoint --phase awaiting-model-credential
123
122
  ```
124
123
 
125
124
  A path the developer names is theirs to give, including one outside the project. A path
@@ -132,7 +131,7 @@ This route skips the plan step that records the path, so record it here, once, b
132
131
  the clone:
133
132
 
134
133
  ```text
135
- npx --prefer-offline --yes copilotkit@4.28.0 onboard classify --starting-state <starting-state> --agent-framework <agent-framework> --frontend <frontend> --model-vendor <model-vendor> --model-vendor-choice <model-vendor-choice>
134
+ npx --prefer-offline --yes copilotkit@4.30.0 onboard classify --starting-state <starting-state> --agent-framework <agent-framework> --frontend <frontend> --model-vendor <model-vendor> --model-vendor-choice <model-vendor-choice>
136
135
  ```
137
136
 
138
137
  - `<starting-state>`: the starting state the research recorded, usually `empty`.
@@ -155,7 +154,7 @@ Do not inspect another entry in the parent directory. Replace each placeholder w
155
154
  recorded value. Do not run a placeholder as a shell argument. If the path holds a space,
156
155
  put it in double quotes.
157
156
 
158
- `npx --prefer-offline --yes copilotkit@4.28.0 init --dir <absolute-target-directory> --framework <framework-id> --channel none --no-banner --no-key-prompt --create <name> --install`
157
+ `npx --prefer-offline --yes copilotkit@4.30.0 init --dir <absolute-target-directory> --framework <framework-id> --channel none --no-banner --no-key-prompt --create <name> --install`
159
158
 
160
159
  `--dir` is always the absolute path of the target directory. `init` builds the app in that
161
160
  directory and gives the app the directory's name. Do not add `--name`: `init` refuses
@@ -175,26 +174,37 @@ variable name and never the value. Do not read or copy the key file yourself. If
175
174
  reports that it cannot read the model key file, it stopped before it cloned anything. Ask
176
175
  the developer for the right path, or run the command again without the flag.
177
176
 
177
+ When the recorded `vendor.vendor` is not the vendor of the Model key column, also add
178
+ `--model-vendor <vendor.vendor>`. For an OpenAI-compatible provider, add
179
+ `--model-vendor openai-compatible --model-id <vendor.modelId> --base-url <vendor.baseUrl>`.
180
+ `init` writes `COPILOTKIT_AGENT_MODEL` into the starter's env file, with a model the vendor
181
+ serves to a new key today, and `OPENAI_BASE_URL` for an OpenAI-compatible provider. It then
182
+ names that vendor's key in its output, and `--model-key-file` copies that key. The .NET starter
183
+ takes no `--model-vendor`. A refusal stops `init` before it clones anything. If it says that the
184
+ starter does not run the vendor, follow `## Switch the starter to the recorded vendor`. If it
185
+ refuses `--model-id` or `--base-url`, ask the developer for the model id or base URL again, and
186
+ run the command again.
187
+
178
188
  Before you end your turn to wait for the developer, report the pause:
179
189
 
180
190
  ```text
181
- npx --prefer-offline --yes copilotkit@4.28.0 onboard checkpoint --phase awaiting-model-credential
191
+ npx --prefer-offline --yes copilotkit@4.30.0 onboard checkpoint --phase awaiting-model-credential
182
192
  ```
183
193
 
184
194
  If you cannot pass the key file to `init`, for example because a sandbox refuses the path,
185
195
  clone without `--model-key-file`. Then copy the key from `<target>` with one command:
186
- `cd <target> && npx --prefer-offline --yes copilotkit@4.28.0 onboard credentials --model-key <VARIABLE> --env-path <key-file> --copy-to <env file> --json`.
196
+ `cd <target> && npx --prefer-offline --yes copilotkit@4.30.0 onboard credentials --model-key <VARIABLE> --env-path <key-file> --copy-to <env file> --json`.
187
197
  `<env file>` is `.env`, or `agent/.env` for the Microsoft Agent Framework Python starter.
188
198
  The command writes the key into that file without printing it. If the
189
199
  command is refused too, ask the developer to run it. Give them exactly this one line:
190
- `! cd <target> && npx --prefer-offline --yes copilotkit@4.28.0 onboard credentials --model-key <VARIABLE> --env-path <key-file> --copy-to <env file>`.
200
+ `! cd <target> && npx --prefer-offline --yes copilotkit@4.30.0 onboard credentials --model-key <VARIABLE> --env-path <key-file> --copy-to <env file>`.
191
201
  The command needs no input. Without `!`, they run the same command in a terminal.
192
202
  Do not write a `sed`, `grep`, or `cat` command to copy the key.
193
203
 
194
204
  Before you end your turn to wait for the developer, report the pause:
195
205
 
196
206
  ```text
197
- npx --prefer-offline --yes copilotkit@4.28.0 onboard checkpoint --phase awaiting-model-credential
207
+ npx --prefer-offline --yes copilotkit@4.30.0 onboard checkpoint --phase awaiting-model-credential
198
208
  ```
199
209
 
200
210
  ### For a recorded local choice
@@ -204,7 +214,7 @@ command instead of the hosted command above. Do not ask the project questions ab
204
214
  Local evaluation creates its own empty project, and `init --local` refuses `--create` and
205
215
  `--project`.
206
216
 
207
- `npx --prefer-offline --yes copilotkit@4.28.0 init --dir <absolute-target-directory> --framework <framework-id> --channel none --no-banner --no-key-prompt --local --defer-model --install`
217
+ `npx --prefer-offline --yes copilotkit@4.30.0 init --dir <absolute-target-directory> --framework <framework-id> --channel none --no-banner --no-key-prompt --local --defer-model --install`
208
218
 
209
219
  Use the `learning` answer from the record, or this conversation. Use the default only when
210
220
  neither holds one.
@@ -212,14 +222,15 @@ For `learning.later`, keep `--defer-model`. For `learning.file`, replace
212
222
  `--defer-model` with `--model-config <learning.file>`. Do not read or print that
213
223
  file. The CLI selects the latest stable release. If the developer gave a candidate
214
224
  manifest for release testing, add `--candidate <manifest.json>`. Otherwise, do not add it.
215
- The `--dir`, `--no-install` and `--model-key-file` rules above apply here too.
225
+ The `--dir`, `--no-install`, `--model-key-file` and `--model-vendor` rules above apply here
226
+ too.
216
227
 
217
- Before `init`, run `npx --prefer-offline --yes copilotkit@4.28.0 onboard local-terms --json`. If `accepted`
228
+ Before `init`, run `npx --prefer-offline --yes copilotkit@4.30.0 onboard local-terms --json`. If `accepted`
218
229
  is false, pause here. Give the developer this exact command to run in their own terminal:
219
- `npx --prefer-offline --yes copilotkit@4.28.0 local accept-terms`. Never accept the agreement yourself.
230
+ `npx --prefer-offline --yes copilotkit@4.30.0 local accept-terms`. Never accept the agreement yourself.
220
231
  Report the pause with
221
- `npx --prefer-offline --yes copilotkit@4.28.0 onboard checkpoint --phase awaiting-developer`, end your turn,
222
- and wait for "done". Then run `local-terms` again, and continue only when `accepted` is
232
+ `npx --prefer-offline --yes copilotkit@4.30.0 onboard checkpoint --phase awaiting-developer --about local-terms`, end your
233
+ turn, and wait for "done". Then run `local-terms` again, and continue only when `accepted` is
223
234
  true. A local command that fails with `eula_acceptance_required` comes back to this step.
224
235
 
225
236
  For `learning.guided`, keep `--defer-model`.
@@ -228,7 +239,7 @@ After `init` reports the stack ready:
228
239
  Ask the developer to run this command in their own terminal window, in `<target>`:
229
240
 
230
241
  ```text
231
- npx --prefer-offline --yes copilotkit@4.28.0 local setup
242
+ npx --prefer-offline --yes copilotkit@4.30.0 local setup
232
243
  ```
233
244
 
234
245
  Do not give it as a `!` line, and do not run it yourself. Its guided model prompt needs a
@@ -237,9 +248,9 @@ changes nothing. The prompt asks for the model and its key, and it saves them pr
237
248
  On a running stack, it restarts only Learning. Do not ask for a model file.
238
249
 
239
250
  Say that the run continues when they reply or resume this session. Report the pause with
240
- `npx --prefer-offline --yes copilotkit@4.28.0 onboard checkpoint --phase awaiting-model-credential`, end your
251
+ `npx --prefer-offline --yes copilotkit@4.30.0 onboard checkpoint --phase awaiting-model-credential`, end your
241
252
  turn, and wait. When the developer replies, run
242
- `npx --prefer-offline --yes copilotkit@4.28.0 local status --json` from `<target>` and read `learning.configuration`.
253
+ `npx --prefer-offline --yes copilotkit@4.30.0 local status --json` from `<target>` and read `learning.configuration`.
243
254
 
244
255
  The command installs the local stack, then connects the starter to it. It writes the
245
256
  gitignored `.copilotkit/local.json` stack reference and `.copilotkit/project.json` with the
@@ -261,29 +272,17 @@ and validation commands.
261
272
 
262
273
  ## Switch the starter to the recorded vendor
263
274
 
264
- Each starter reads its model from `COPILOTKIT_AGENT_MODEL`, and `init` sets it to the
265
- starter's default in the starter's env file. When the recorded `vendor.vendor` is another
266
- vendor, the clone ran without `--model-key-file`. Switch the starter before you settle its
267
- key. The Claude Agent SDK starters run only Anthropic, so never switch them. Switch an ADK
268
- starter only to OpenAI or an OpenAI-compatible provider, and every other starter only to an
269
- OpenAI-compatible provider: this release does not run them on Anthropic or Google. If the
270
- recorded vendor is Anthropic or Google on such a starter, do not switch: say that this
271
- release supports the row's vendors on that framework, that Anthropic and Google come in a
272
- later release, and offer the Built-in CopilotKit agent if they need them now.
273
-
274
- 1. Set `COPILOTKIT_AGENT_MODEL` in the starter's env file to the recorded vendor and a
275
- model that the vendor serves to a new key today: `openai:<model>` on an ADK starter.
276
- Do not change the starter's code.
277
- 2. For an OpenAI-compatible provider, set `COPILOTKIT_AGENT_MODEL` to
278
- `openai:<vendor.modelId>`, and `OPENAI_BASE_URL` to `vendor.baseUrl`.
279
- 3. If the developer named a key file, copy the key with the `onboard credentials
280
- --model-key <VARIABLE> --env-path <key-file> --copy-to <env file> --json` command above,
281
- with the recorded vendor's variable. Otherwise the next section pauses for it.
282
-
283
- For the Microsoft Agent Framework .NET starter, set these values with
284
- `dotnet user-secrets set` from the agent directory, because .NET does not read the env
285
- file. In the next section, check the recorded vendor's variable in place of the Model key
286
- column's.
275
+ Each starter reads its model from `COPILOTKIT_AGENT_MODEL`. With `--model-vendor`, `init`
276
+ already switched it to the recorded vendor, and set `OPENAI_BASE_URL` for an
277
+ OpenAI-compatible provider. Do not change the starter's code.
278
+
279
+ Switch a starter only to a vendor in the Other vendors column of its row. A row with none, such as the Claude Agent SDK rows, runs only its own vendor: never switch it. This release does not run Anthropic or Google on a starter whose row leaves them out. If `init` refused the recorded vendor, say that this release supports the row's vendors on that framework, that Anthropic and Google come in a later release, and offer the Built-in CopilotKit agent if they need them now.
280
+
281
+ For the Microsoft Agent Framework .NET starter, set `COPILOTKIT_AGENT_MODEL`, and
282
+ `OPENAI_BASE_URL` for an OpenAI-compatible provider, with `dotnet user-secrets set` from the
283
+ agent directory, because .NET does not read the env file. Use the recorded vendor and a model
284
+ that the vendor serves to a new key today. In the next section, check the recorded vendor's
285
+ variable in place of the Model key column's.
287
286
 
288
287
  ## Settle the model credential
289
288
 
@@ -302,10 +301,10 @@ grep -c '^<VARIABLE>=.' <target>/.env
302
301
  a count and never the value.
303
302
 
304
303
  If a variable is empty, run
305
- `npx --prefer-offline --yes copilotkit@4.28.0 onboard credentials --model-key <VARIABLE> --json` from
304
+ `npx --prefer-offline --yes copilotkit@4.30.0 onboard credentials --model-key <VARIABLE> --json` from
306
305
  `<target>`, and show the developer `question.ask` word for word. It names the file by its
307
306
  full path and the line to add. If they reply with the path of a file that holds the key, run
308
- `npx --prefer-offline --yes copilotkit@4.28.0 onboard credentials --model-key <VARIABLE> --env-path <file> --copy-to <question.envFile> --json`
307
+ `npx --prefer-offline --yes copilotkit@4.30.0 onboard credentials --model-key <VARIABLE> --env-path <file> --copy-to <question.envFile> --json`
309
308
  from `<target>`. Ask nothing else first. Quote a path that holds a space. The command copies
310
309
  the key without printing it. When it reports `ready`, the key is in `question.envFile`. Run
311
310
  the check above again, and continue. Follow this paragraph, not the packet's `next`, which is
@@ -333,7 +332,7 @@ The two Microsoft Agent Framework starters keep their key outside `<target>/.env
333
332
  When you ask, say that the run continues when they reply or resume this session. Then report the pause and end your turn:
334
333
 
335
334
  ```text
336
- npx --prefer-offline --yes copilotkit@4.28.0 onboard checkpoint --phase awaiting-model-credential
335
+ npx --prefer-offline --yes copilotkit@4.30.0 onboard checkpoint --phase awaiting-model-credential
337
336
  ```
338
337
 
339
338
  This is a pause, not a stop. Do not send a stop report, and do not take a stop route.
@@ -349,20 +348,21 @@ Run this from `<target>`, with one `--model-key` for each variable. For the Micr
349
348
  Framework Python starter, add `--env-path agent/.env`. Skip it for the .NET starter.
350
349
 
351
350
  ```text
352
- npx --prefer-offline --yes copilotkit@4.28.0 onboard credentials --model-key <VARIABLE> --json
351
+ npx --prefer-offline --yes copilotkit@4.30.0 onboard credentials --model-key <VARIABLE> --json
353
352
  ```
354
353
 
355
354
  The command never prints a value. If `status` is `ready`, continue. Otherwise do what
356
355
  `next` says. When it says to ask `question.ask`, end your turn. The command already
357
356
  reported the pause. When the developer replies, run the command again. If they choose
358
- another provider that the framework can use, set `COPILOTKIT_AGENT_MODEL` to it, as the
359
- previous section describes, and check that provider's variable instead. With the cause `model_unavailable`, the key
357
+ another provider that the framework can use, set `COPILOTKIT_AGENT_MODEL` in the starter's
358
+ env file to `<provider>:<model>`, and `OPENAI_BASE_URL` for an OpenAI-compatible provider,
359
+ as `init --model-vendor` does. Then check that provider's variable instead. With the cause `model_unavailable`, the key
360
360
  works and the app's model does not: the vendor does not serve the model that
361
361
  `COPILOTKIT_AGENT_MODEL` names. When the developer agrees to the model that `question.ask`
362
362
  names, or names another, change `COPILOTKIT_AGENT_MODEL` where `question.ask` says, and
363
363
  run the command again.
364
364
 
365
- Then run `npx --prefer-offline --yes copilotkit@4.28.0 onboard read proof/round-trip`.
365
+ Then run `npx --prefer-offline --yes copilotkit@4.30.0 onboard read proof/round-trip`.
366
366
 
367
367
  If the local command fails, `init` keeps the cloned starter in `<target>`, and its error
368
368
  says whether it installed the starter's dependencies, or names the command that does. Do
@@ -375,14 +375,14 @@ available memory, or 40 GiB storage. Tell the developer what to change in Docker
375
375
  memory, pass on the amount the message names. Then report the pause and end your turn:
376
376
 
377
377
  ```text
378
- npx --prefer-offline --yes copilotkit@4.28.0 onboard checkpoint --phase awaiting-developer
378
+ npx --prefer-offline --yes copilotkit@4.30.0 onboard checkpoint --phase awaiting-developer --about environment-fix
379
379
  ```
380
380
 
381
381
  When the developer says that Docker is ready, resume from `<target>` with the same model
382
382
  choice. If the run used a `--candidate`, add the same one:
383
383
 
384
384
  ```text
385
- npx --prefer-offline --yes copilotkit@4.28.0 local setup --defer-model --json
385
+ npx --prefer-offline --yes copilotkit@4.30.0 local setup --defer-model --json
386
386
  ```
387
387
 
388
388
  If the run used model settings, replace `--defer-model` with `--model-config <private-file>`.
@@ -390,7 +390,7 @@ Read blockers and the recorded failed step. Do not delete or recreate a failed s
390
390
  setup reports the stack ready, connect the starter from `<target>`:
391
391
 
392
392
  ```text
393
- npx --prefer-offline --yes copilotkit@4.28.0 local connect --approve-connection --json
393
+ npx --prefer-offline --yes copilotkit@4.30.0 local connect --approve-connection --json
394
394
  ```
395
395
 
396
396
  The connection writes `.copilotkit/local.json`, `.copilotkit/project.json`, and the local
@@ -400,6 +400,8 @@ take the route below.
400
400
 
401
401
  If the command fails, report its exact error and do not claim that the starter is ready.
402
402
  Then run
403
- `npx --prefer-offline --yes copilotkit@4.28.0 onboard read stopped/run-failed`. The starter is one this
403
+ `npx --prefer-offline --yes copilotkit@4.30.0 onboard read stopped/run-failed --reason <reason>`. The starter is one this
404
404
  graph ships and the stack was chosen from its own supported list, so a command that
405
- returned an error is a run that broke, not a setup this release does not support.
405
+ returned an error is a run that broke, not a setup this release does not support. For
406
+ `<reason>`, pick `dependency-install` for an install that failed, `build` for a build that
407
+ failed, and `other` for anything else.
@@ -0,0 +1,111 @@
1
+ # Set up the starter
2
+
3
+ This folder is empty, so this run builds a CopilotKit starter app here. The CLI clones the
4
+ starter, creates the project, copies the model key, installs the dependencies, starts the
5
+ app and proves it, in two commands. You show the developer two messages and run a few
6
+ commands.
7
+
8
+ Do not research this folder, read other prompts, change code, or start subagents on this
9
+ route. Never read, show, store, or request a secret value. Ask only for the file that holds
10
+ the model key.
11
+
12
+ ## Stay on this route
13
+
14
+ If the developer asks for a Slack, Microsoft Teams, or other Channel app, run
15
+ `npx --prefer-offline --yes copilotkit@4.30.0 onboard read feature/channels/start` instead, and follow it.
16
+
17
+ To stop onboarding, tell the developer what failed in one sentence, with any log path the
18
+ CLI named. Send the stop report:
19
+
20
+ ```text
21
+ npx --prefer-offline --yes copilotkit@4.30.0 onboard friction --phase stop --category <slug> --message "<sentences>"
22
+ ```
23
+
24
+ `--message` takes one or two sentences: the step you stopped at and what stopped it. Pick
25
+ the category from docs-missing, docs-wrong, docs-sequential, cli-gap, sdk-gap, environment,
26
+ port-collision, credential, validation-loop, or other. Leave --cost-seconds off: a stop
27
+ report needs no estimate. Send no secrets, source code, logs, or command output.
28
+
29
+ Then run `npx --prefer-offline --yes copilotkit@4.30.0 onboard read stopped/run-failed --reason <reason>`.
30
+ For `<reason>`, pick `dependency-install` for an install that failed, `model-call` for a
31
+ model key or a chat round trip that failed, `build` for a build that failed, and `other`
32
+ for anything else. Do this when sign-in stops onboarding, and when a step below says to
33
+ stop onboarding.
34
+
35
+ ## Ask the setup questions
36
+
37
+ When `onboard begin` printed a setup message after this prompt, that is the first setup
38
+ message: do what its `next` says, and skip to the last paragraph of this section.
39
+
40
+ If this folder's README names the agent framework to build on, record it first, with the
41
+ name the README gives, such as `Agno` or `LangGraph Python`:
42
+
43
+ ```text
44
+ npx --prefer-offline --yes copilotkit@4.30.0 onboard setup-answers --framework <name> --framework-choice developer
45
+ ```
46
+
47
+ On the local route, first run `npx --prefer-offline --yes copilotkit@4.30.0 onboard local-terms --json`.
48
+ If it reports `signed-out` or `unavailable`, follow its `next`. The setup message carries
49
+ the agreement line, so do not add it yourself.
50
+
51
+ Run this from this folder. Add `--vendor <vendor>` only for a model vendor the developer
52
+ named, as `openai`, `anthropic`, `google`, or `openai-compatible`:
53
+
54
+ ```text
55
+ npx --prefer-offline --yes copilotkit@4.30.0 onboard setup-message --target empty
56
+ ```
57
+
58
+ Do what its `next` says. It tells you how to show the message, how to report the pause,
59
+ and how to record each reply. Repeat until it prints `status: settled`. If the developer
60
+ declines, such as **no**, run
61
+ `npx --prefer-offline --yes copilotkit@4.30.0 onboard read stopped/declined --message "<their reason>"`.
62
+
63
+ ## Build the starter
64
+
65
+ If a sign-in process runs, wait until it emits `type: completed`. Then write this line in
66
+ your reply, word for word:
67
+
68
+ > Creating your app now. This takes about a minute: I copy the starter, install its
69
+ > packages, and send one chat message through your agent to prove that it works.
70
+
71
+ Then run:
72
+
73
+ ```text
74
+ npx --prefer-offline --yes copilotkit@4.30.0 onboard starter create
75
+ ```
76
+
77
+ It builds from the recorded answers and waits up to 90 seconds. While it prints
78
+ `running`, run `npx --prefer-offline --yes copilotkit@4.30.0 onboard starter status --wait` again.
79
+ While you wait, write nothing about the command, its process, or its output. If you write
80
+ anything, write only the `Still working` line it prints.
81
+
82
+ - If it names a framework and frontend with no starter, run
83
+ `npx --prefer-offline --yes copilotkit@4.30.0 onboard read research/gather` and follow that route.
84
+ - If it failed on an answer, such as a project name the account already has, ask the
85
+ developer for a new answer. Report the pause with
86
+ `npx --prefer-offline --yes copilotkit@4.30.0 onboard checkpoint --phase awaiting-developer --about project-name`,
87
+ and end your turn. Record their answer with `onboard setup-answers`, then run
88
+ `onboard starter create` again.
89
+ - If it says the step did not reach the network, ask the developer to approve network
90
+ access for the command, or to let it run outside the sandbox. Report the pause with
91
+ `npx --prefer-offline --yes copilotkit@4.30.0 onboard checkpoint --phase awaiting-developer --about harness-permission`,
92
+ and end your turn. When they reply, run `onboard starter create` again.
93
+ - For any other failure, stop onboarding.
94
+
95
+ ## Prove it
96
+
97
+ When `create` prints `done`, run:
98
+
99
+ ```text
100
+ npx --prefer-offline --yes copilotkit@4.30.0 onboard starter prove
101
+ ```
102
+
103
+ It checks the model key, starts the app, and runs a chat round trip. Wait for it as for
104
+ `create`.
105
+
106
+ - If it prints a message for the developer, write it in your reply word for word. Report the
107
+ pause with `npx --prefer-offline --yes copilotkit@4.30.0 onboard checkpoint --phase awaiting-model-credential`,
108
+ and end your turn. When the developer replies, run `onboard starter prove` again. If the
109
+ reply names a file that holds the key, add `--key-file <path>`.
110
+ - If it failed, stop onboarding.
111
+ - When it prints `done`, write its report in your reply word for word. The run is complete.
@@ -0,0 +1,44 @@
1
+ # Stop because the developer said no
2
+
3
+ This is the ending for a developer who decided not to go on: a reply such as **no**,
4
+ **not now**, **do not install it**, or **do not add it**. Nothing broke. Do not report
5
+ this run as a failure, and do not tell the developer their setup is unsupported.
6
+
7
+ It is the same ending for an onboarding run and for a run that adds one feature. A
8
+ feature run that reads this step does not also read `feature/stop`.
9
+
10
+ The read that served this step recorded the developer's reason, from
11
+ `onboard read stopped/declined --message "<the developer's reason, in one line>"`. Do not
12
+ read this step again to add a reason.
13
+
14
+ This run ends here. Make no more repository changes, and do not try to change the
15
+ developer's mind.
16
+
17
+ ## What to tell the developer
18
+
19
+ Write a short reply:
20
+
21
+ 1. Thank them for trying CopilotKit.
22
+ 2. Say that this run stopped and nothing else will change in their project.
23
+ 3. Say what this run left behind. This step prints `## Your files` below: relay that
24
+ report as printed. When it names a restore command, offer it as the way to put their
25
+ files back. A run that started in an empty folder prints no such section: list no
26
+ files and offer no restore.
27
+ 4. Name any process this run started that is still running, and offer to stop it.
28
+ 5. Say they can start again at any time with the same prompt they used for this run.
29
+
30
+ ## If the developer asks you to clean up
31
+
32
+ Run the restore command the report printed, for example:
33
+
34
+ ```text
35
+ npx --prefer-offline --yes copilotkit@4.30.0 onboard restore --run <onboarding_run_id>
36
+ ```
37
+
38
+ It puts back each file this run changed, from the backup taken when the run started. It
39
+ keeps files this run added. If the developer also wants those removed, list each one and
40
+ delete only the files they confirm. Stop any process this run started. Do not delete
41
+ anything this run did not create.
42
+
43
+ The CLI keeps the run's own record outside the project, so there is nothing else to clean
44
+ up in the project folder.
@@ -20,9 +20,9 @@ files changed cannot be acted on: nobody reading it can tell which file moved.
20
20
  Say what the developer has now. Name the processes still running and the files this run
21
21
  changed, so they can carry on by hand or start again from a known state. A run that stops
22
22
  without saying what it left behind leaves the developer to discover it. This step prints
23
- `## The developer's files` below: relay that report as printed, with its restore command.
24
- When the report says the run started in an empty folder, relay that one line alone in
25
- place of the files: list no files and offer no restore.
23
+ `## Your files` below: relay that report as printed, with its restore command. A run
24
+ that started in an empty folder prints no such section: list no files and offer no
25
+ restore.
26
26
 
27
27
  A step can fail on a network error: `EAI_AGAIN`, `ECONNRESET`, `ETIMEDOUT`, a timeout,
28
28
  or a message that names a proxy. The CLI has already tried that step again. Ask the
@@ -42,13 +42,13 @@ put to them, stop here and send the report below.
42
42
  Before you end your turn to wait for the developer, report the pause:
43
43
 
44
44
  ```text
45
- npx --prefer-offline --yes copilotkit@4.28.0 onboard checkpoint --phase awaiting-developer
45
+ npx --prefer-offline --yes copilotkit@4.30.0 onboard checkpoint --phase awaiting-developer --about scoped-fix
46
46
  ```
47
47
 
48
48
  If they approve it, make that one fix and nothing else. Then come back into this run:
49
49
 
50
50
  ```text
51
- npx --prefer-offline --yes copilotkit@4.28.0 onboard resume --message "<approval>"
51
+ npx --prefer-offline --yes copilotkit@4.30.0 onboard resume --message "<approval>"
52
52
  ```
53
53
 
54
54
  Put the developer's approval in `--message`, in one or two sentences: the fix they
@@ -71,7 +71,7 @@ Send one short report. The friction command follows the telemetry setting the de
71
71
  already chose, so it needs no separate question.
72
72
 
73
73
  ```text
74
- npx --prefer-offline --yes copilotkit@4.28.0 onboard friction --phase stop --category <slug> --message "<sentences>"
74
+ npx --prefer-offline --yes copilotkit@4.30.0 onboard friction --phase stop --category <slug> --message "<sentences>"
75
75
  ```
76
76
 
77
77
  `--message` takes one or two sentences: the step you stopped at and what stopped
@@ -22,6 +22,19 @@ override copies.
22
22
  List the required credential variable names. Do not read or return credential values.
23
23
  Preserve each agent or frontend that already exists.
24
24
 
25
+ ## When a command is refused
26
+
27
+ If you are a subagent and your harness refuses a command, return at once. Name the
28
+ command, the directory you ran it from, and the refusal, and run nothing else. Do not wait
29
+ for an approval: nobody sees it. The main coding agent runs the command itself and passes
30
+ the result on. The one wait allowed is a harness escalation request that this brief tells
31
+ you to make for a command. Make that request and wait for its answer.
32
+
33
+ If your handoff holds a command's result, use it and do not run that command again.
34
+
35
+ If you are the main coding agent and follow this brief yourself, this section is not for
36
+ you. Do not return: handle a refused command as the run's other prompts say.
37
+
25
38
  ## What the existing agent's behavior is
26
39
 
27
40
  The existing agent's behavior is four things: its system prompt and instructions, its
@@ -79,8 +92,8 @@ plan one container per end user: a project holds at most 500, the first automati
79
92
  run needs threads from 15 distinct conversations in one container, and a container per
80
93
  person needs those 15 conversations from that one person.
81
94
 
82
- Where the Learning step was skipped, plan no container and no selector, and say in the plan
83
- that Learning is not available to this organization.
95
+ Where the Learning step was skipped, plan no container and no selector, and name the skip
96
+ reason in the plan.
84
97
 
85
98
  When the starting state is `both-oss`, use its recorded live baseline evidence. Preserve
86
99
  the working agent, frontend, CopilotKit integration, and OSS behavior. Plan the project
@@ -97,7 +110,7 @@ against a dead host, and the failure arrives as an empty-body 404 with no cause
97
110
  Ask the CLI for the dependency upgrade, from the target directory:
98
111
 
99
112
  ```text
100
- npx --prefer-offline --yes copilotkit@4.28.0 onboard upgrade-plan --json
113
+ npx --prefer-offline --yes copilotkit@4.30.0 onboard upgrade-plan --json
101
114
  ```
102
115
 
103
116
  It reads the installed tree and the registry. Read `status`:
@@ -185,7 +198,7 @@ here is work the developer did not ask for.
185
198
  Plan the threads drawer itself: add it from the selected drawer page, where this frontend
186
199
  does not already render one. Where this journey's frontend framework ships no threads
187
200
  drawer -- React Native --, plan that the thread is proved by
188
- `npx --prefer-offline --yes copilotkit@4.28.0 verify --round-trip`, which needs no browser. Do not plan a
201
+ `npx --prefer-offline --yes copilotkit@4.30.0 verify --round-trip`, which needs no browser. Do not plan a
189
202
  step that opens the managed Intelligence dashboard.
190
203
 
191
204
  ## Name the files the run writes itself
@@ -325,10 +338,22 @@ change. Say that in the plan.
325
338
 
326
339
  Do not leave a change that needs approval out of the list to keep the run moving.
327
340
 
341
+ ## Return the result
342
+
328
343
  Gather what you need in as few commands as possible. Combine independent reads into one
329
344
  command rather than running them one at a time. Split a command only when its result decides
330
345
  what you run next.
331
346
 
347
+ Before you return, record that you are returning:
348
+
349
+ ```text
350
+ npx --prefer-offline --yes copilotkit@4.30.0 onboard checkpoint --phase subagent-returned --brief create-plan --result <ok|failed>
351
+ ```
352
+
353
+ The Status line of your result decides the value. Pass `ok` only for `Status: passed`.
354
+ Pass `failed` for `Status: failed` or `Status: blocked`. If your harness refuses this command, say so in your result and return
355
+ anyway: the main coding agent records it.
356
+
332
357
  Start with `Status: passed`, `Status: failed`, or `Status: blocked`.
333
358
  Return the plan, the URLs that you read, and each documentation gap. End your turn after you return
334
359
  the findings to the main coding agent.