copilotkit 4.10.1 → 4.12.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/LICENSE +11 -0
  2. package/README.md +153 -17
  3. package/cli-build-info.json +8 -8
  4. package/index.js +5104 -4673
  5. package/onboarding/index.json +9 -2
  6. package/onboarding/prompts/authenticate/start.md +35 -19
  7. package/onboarding/prompts/conversion/plan.md +3 -3
  8. package/onboarding/prompts/credentials/finalize-plan.md +37 -27
  9. package/onboarding/prompts/credentials/plan.md +20 -20
  10. package/onboarding/prompts/credentials/settle-credentials.md +57 -25
  11. package/onboarding/prompts/credentials/write-plan.md +7 -7
  12. package/onboarding/prompts/fallback/best-effort.md +9 -8
  13. package/onboarding/prompts/feature/a2ui/implement.md +7 -7
  14. package/onboarding/prompts/feature/a2ui/proof.md +6 -6
  15. package/onboarding/prompts/feature/a2ui/start.md +10 -8
  16. package/onboarding/prompts/feature/blocked-by-plan.md +32 -0
  17. package/onboarding/prompts/feature/channels/implement.md +9 -9
  18. package/onboarding/prompts/feature/channels/proof.md +6 -6
  19. package/onboarding/prompts/feature/channels/start.md +20 -15
  20. package/onboarding/prompts/feature/chat-suggestions/implement.md +7 -7
  21. package/onboarding/prompts/feature/chat-suggestions/proof.md +6 -6
  22. package/onboarding/prompts/feature/chat-suggestions/start.md +10 -8
  23. package/onboarding/prompts/feature/complete.md +1 -1
  24. package/onboarding/prompts/feature/learning/implement.md +73 -14
  25. package/onboarding/prompts/feature/learning/proof.md +10 -9
  26. package/onboarding/prompts/feature/learning/start.md +61 -7
  27. package/onboarding/prompts/feature/open-generative-ui/implement.md +7 -7
  28. package/onboarding/prompts/feature/open-generative-ui/proof.md +6 -6
  29. package/onboarding/prompts/feature/open-generative-ui/start.md +10 -8
  30. package/onboarding/prompts/feature/realtime-sync/implement.md +8 -8
  31. package/onboarding/prompts/feature/realtime-sync/proof.md +6 -6
  32. package/onboarding/prompts/feature/realtime-sync/start.md +9 -7
  33. package/onboarding/prompts/feature/rich-threads/implement.md +9 -9
  34. package/onboarding/prompts/feature/rich-threads/proof.md +6 -6
  35. package/onboarding/prompts/feature/rich-threads/start.md +9 -7
  36. package/onboarding/prompts/feature/stop.md +6 -6
  37. package/onboarding/prompts/feature/voice/implement.md +7 -7
  38. package/onboarding/prompts/feature/voice/proof.md +6 -6
  39. package/onboarding/prompts/feature/voice/start.md +10 -8
  40. package/onboarding/prompts/framework/ag2.md +2 -2
  41. package/onboarding/prompts/framework/agno.md +2 -2
  42. package/onboarding/prompts/framework/built-in.md +2 -2
  43. package/onboarding/prompts/framework/claude-sdk-python.md +2 -2
  44. package/onboarding/prompts/framework/claude-sdk-typescript.md +2 -2
  45. package/onboarding/prompts/framework/crewai-flows.md +2 -2
  46. package/onboarding/prompts/framework/deep-agents.md +2 -2
  47. package/onboarding/prompts/framework/google-adk.md +2 -2
  48. package/onboarding/prompts/framework/langgraph-fastapi.md +2 -2
  49. package/onboarding/prompts/framework/langgraph-python.md +2 -2
  50. package/onboarding/prompts/framework/langgraph-typescript.md +2 -2
  51. package/onboarding/prompts/framework/llamaindex.md +2 -2
  52. package/onboarding/prompts/framework/mastra.md +2 -2
  53. package/onboarding/prompts/framework/ms-agent-dotnet.md +2 -2
  54. package/onboarding/prompts/framework/ms-agent-harness-dotnet.md +2 -2
  55. package/onboarding/prompts/framework/ms-agent-python.md +2 -2
  56. package/onboarding/prompts/framework/pydantic-ai.md +2 -2
  57. package/onboarding/prompts/framework/strands-python.md +2 -2
  58. package/onboarding/prompts/framework/strands-typescript.md +2 -2
  59. package/onboarding/prompts/frontend/angular.md +5 -5
  60. package/onboarding/prompts/frontend/nextjs.md +4 -4
  61. package/onboarding/prompts/frontend/plan.md +17 -12
  62. package/onboarding/prompts/frontend/react-native.md +2 -2
  63. package/onboarding/prompts/frontend/react-spa.md +2 -2
  64. package/onboarding/prompts/frontend/vue.md +2 -2
  65. package/onboarding/prompts/implementation/build-and-validate.md +35 -18
  66. package/onboarding/prompts/proof/complete.md +26 -17
  67. package/onboarding/prompts/proof/oss-baseline.md +5 -5
  68. package/onboarding/prompts/proof/round-trip.md +16 -15
  69. package/onboarding/prompts/research/gather.md +55 -9
  70. package/onboarding/prompts/research/route.md +30 -10
  71. package/onboarding/prompts/starter/clone.md +6 -6
  72. package/onboarding/prompts/stopped/run-failed.md +32 -3
  73. package/onboarding/prompts/subagent/create-plan.md +7 -1
  74. package/onboarding/prompts/subagent/implement-and-validate.md +2 -1
  75. package/onboarding/prompts/subagent/inspect-repository.md +43 -16
  76. package/onboarding/prompts/subagent/prove-oss-baseline.md +1 -1
  77. package/onboarding/prompts/subagent/prove-round-trip.md +52 -18
  78. package/onboarding/prompts/unsupported/no-validated-path.md +4 -4
  79. package/package.json +4 -3
  80. package/release/release-tool.js +1 -1
@@ -1,8 +1,7 @@
1
1
  {
2
- "graphTree": "6b3586ba65cfeed7befa35d0c8794713198ac438",
2
+ "graphTree": "aca3eeff60c7fed03d24e93e166829ff405da63d",
3
3
  "intentRoots": {
4
4
  "add-a2ui": "feature/a2ui/start",
5
- "add-channels": "feature/channels/start",
6
5
  "add-chat-suggestions": "feature/chat-suggestions/start",
7
6
  "add-learning": "feature/learning/start",
8
7
  "add-open-generative-ui": "feature/open-generative-ui/start",
@@ -107,6 +106,11 @@
107
106
  "milestone": "feature",
108
107
  "name": "feature/a2ui/start"
109
108
  },
109
+ {
110
+ "edges": [],
111
+ "milestone": "feature",
112
+ "name": "feature/blocked-by-plan"
113
+ },
110
114
  {
111
115
  "edges": [
112
116
  "feature/stop",
@@ -162,6 +166,7 @@
162
166
  },
163
167
  {
164
168
  "edges": [
169
+ "feature/blocked-by-plan",
165
170
  "feature/stop",
166
171
  "feature/learning/proof"
167
172
  ],
@@ -178,6 +183,7 @@
178
183
  },
179
184
  {
180
185
  "edges": [
186
+ "feature/blocked-by-plan",
181
187
  "feature/stop",
182
188
  "feature/learning/implement"
183
189
  ],
@@ -462,6 +468,7 @@
462
468
  "frontend/angular",
463
469
  "frontend/vue",
464
470
  "frontend/react-native",
471
+ "feature/channels/start",
465
472
  "unsupported/no-validated-path"
466
473
  ],
467
474
  "milestone": "frontend",
@@ -5,7 +5,7 @@
5
5
  Run this before anything else in this prompt, including the welcome message below:
6
6
 
7
7
  ```text
8
- npx --yes copilotkit@4.10.1 onboard identify --coding-agent <coding-agent-slug>
8
+ npx --yes copilotkit@4.12.0 onboard identify --coding-agent <coding-agent-slug>
9
9
  ```
10
10
 
11
11
  Report your own product with one short slug, such as `codex` or `claude-code`.
@@ -34,13 +34,15 @@ id. Keep that id for the whole run. Every later command reports against it, and
34
34
  printed once.
35
35
 
36
36
  Every later command must run from the directory this run started in. A command run
37
- somewhere else, such as a sibling of that directory, is refused rather than answered,
38
- because the run it belongs to cannot be found from there. That refusal is a step to take,
39
- not a stop to report: run
40
- `npx --yes copilotkit@4.10.1 onboard start --run <onboarding_run_id>` in the directory
41
- you are now in, which binds it to the same run, then run the refused command again. Do not
42
- start a run without that id. A run started without it is a second run, and the work already
43
- done stops counting toward the first.
37
+ somewhere else is refused, because the run it belongs to cannot be found from there. That
38
+ refusal is a step, not a stop to report: run
39
+ `npx --yes copilotkit@4.12.0 onboard start --run <onboarding_run_id>` where you are
40
+ standing, then run the refused command again.
41
+
42
+ If you no longer hold the id, run `npx --yes copilotkit@4.12.0 onboard start` in the
43
+ directory this run started in, with no `--run` and no `--intent`. It reprints the id of the
44
+ run under way and starts nothing. An id this project does not already hold starts a second
45
+ run, and the work already done stops counting toward the first.
44
46
 
45
47
  Read only inside the target project directory. Every subagent you spawn inherits that
46
48
  limit, including one this graph does not name. Answer a CopilotKit API or configuration
@@ -48,12 +50,18 @@ question from the documentation this graph gives you. Another checkout on this m
48
50
  not a source. The developer running this has none, so an answer taken from one is an
49
51
  answer they cannot get, and it hides the documentation gap that blocks them.
50
52
 
53
+ Say `CopilotKit Intelligence` in full the first time you name the platform, and never the
54
+ bare word `Intelligence`: it names nothing a developer has met yet. In a question, leave
55
+ the product name out and say what they get. This governs what you say, not the flags you
56
+ pass.
57
+
51
58
  Send this exact message once, as your first message in this onboarding run, before
52
59
  anything else:
53
60
 
54
61
  Welcome to CopilotKit. By the end of this run your own application talks to an AI agent,
55
62
  and its chat history stays. A user can close the tab, come back, and reopen any past
56
- conversation in full. The managed Intelligence platform is what keeps them. I prove that
63
+ conversation in full. The managed CopilotKit Intelligence platform is what keeps them. I
64
+ prove that
57
65
  round trip in the running app before I call it done. You finish with working software and
58
66
  the evidence that it works.
59
67
 
@@ -74,15 +82,27 @@ first send, and a developer who reads it repeatedly learns to skim the region it
74
82
  Do not ask for separate feedback consent. The feedback commands enforce the developer's
75
83
  CLI telemetry setting when a later step tries to send a report.
76
84
 
85
+ ## Where commands run
86
+
87
+ Run every command from the directory this run started in. That directory is the run root,
88
+ and every `--path` argument is read against it rather than against wherever you are
89
+ standing, so one path names one file from anywhere in the project.
90
+
91
+ One command is deliberately different. `project select` writes the credential into the
92
+ `.env` beside the directory it runs in, because that is the file the application process
93
+ loads. Run it from the directory whose application reads that file. It hoists the project
94
+ record to the repository root by itself and prints where it put it.
95
+
77
96
  ## Report a stop, wherever it happens
78
97
 
79
98
  This run reports its own stops. If you stop this run at any point, send one short report
80
99
  before you stop. That covers a stop this prompt names, a stop a later prompt names, and a
81
- stop no prompt anticipated, including one your own harness causes. Run the friction command without another developer question. The CLI telemetry gate decides whether the report is
82
- sent.
100
+ stop no prompt anticipated, including one your own harness causes. Run the friction
101
+ command without another developer question. Do not ask the developer about telemetry: the
102
+ command applies the setting they already have.
83
103
 
84
104
  ```text
85
- npx --yes copilotkit@4.10.1 onboard friction --phase stop --category <slug>
105
+ npx --yes copilotkit@4.12.0 onboard friction --phase stop --category <slug>
86
106
  ```
87
107
 
88
108
  Write one or two sentences to standard input: the step you stopped at and what stopped it.
@@ -97,13 +117,9 @@ Reporting a stop is not a route change. It does not resume the run, it is not a
97
117
  for the developer, and it does not replace whatever the rule that stopped you says to do
98
118
  next: send the report, then stop.
99
119
 
100
- Until now the route out of an unsupported path was the only place that asked for a report,
101
- so a stop anywhere else left no trace at all. A stop nobody hears about is a stop this
102
- graph cannot fix.
103
-
104
120
  ## Check sign-in
105
121
 
106
- Run `npx --yes copilotkit@4.10.1 login --json` before any project work. This command
122
+ Run `npx --yes copilotkit@4.12.0 login --json` before any project work. This command
107
123
  checks the current session. It starts sign-in only as needed. Treat this as a long-lived
108
124
  streaming process. Do not wait for the command to exit before you read its standard output.
109
125
 
@@ -139,8 +155,8 @@ Do not use `whoami` for this check. It has no JSON output and some failures exit
139
155
  zero. Do not put account tokens or credentials in the conversation.
140
156
 
141
157
  When sign-in is settled, run
142
- `npx --yes copilotkit@4.10.1 onboard read research/gather`.
158
+ `npx --yes copilotkit@4.12.0 onboard read research/gather`.
143
159
 
144
160
  If sign-in stops onboarding, run
145
- `npx --yes copilotkit@4.10.1 onboard read stopped/run-failed`. It says nothing about
161
+ `npx --yes copilotkit@4.12.0 onboard read stopped/run-failed`. It says nothing about
146
162
  whether this project's stack is supported, which is not yet known at this point.
@@ -100,7 +100,7 @@ of this journey, and a drawer that lists nothing is not a reason to mint one. Li
100
100
  tokens stay a self-hosted concern.
101
101
 
102
102
  Where this journey's frontend framework ships no threads drawer -- React Native --, the
103
- fifth item is proved by `npx --yes copilotkit@4.10.1 verify --round-trip`, which sends a
103
+ fifth item is proved by `npx --yes copilotkit@4.12.0 verify --round-trip`, which sends a
104
104
  real request and reads the answer back off the thread it landed on. The run says which of
105
105
  the two it proved. Do not send a run to the managed Intelligence dashboard to prove this.
106
106
  An authenticated browser session at a hosted dashboard is the one thing an agent-driven run
@@ -116,7 +116,7 @@ and passed -- so a run scored on either one was scored on the same fact. Every r
116
116
  resolves that condition from, while `licenseStatus` is a compatibility projection of it
117
117
  for older thread surfaces and outlives them only until those surfaces go.
118
118
 
119
- Then run `npx --yes copilotkit@4.10.1 onboard read credentials/finalize-plan`.
119
+ Then run `npx --yes copilotkit@4.12.0 onboard read credentials/finalize-plan`.
120
120
 
121
121
  If a selected page does not load after the second method, run
122
- `npx --yes copilotkit@4.10.1 onboard read unsupported/no-validated-path`.
122
+ `npx --yes copilotkit@4.12.0 onboard read unsupported/no-validated-path`.
@@ -9,21 +9,21 @@ a secret value.
9
9
 
10
10
  Use a gentle wizard. Ask one short question at a time. Do not combine separate choices in
11
11
  one question. Put the recommendation first, give its evidence in one sentence, and keep
12
- the alternatives short. When project selection is unknown, ask only which Intelligence
13
- project to use. Keep final plan approval as its own later question.
12
+ the alternatives short. When project selection is unknown, ask only which project to
13
+ use. Keep final plan approval as its own later question.
14
14
 
15
15
  ## If you stop in this phase
16
16
 
17
17
  Several rules below stop onboarding: a refused classification value, a project selection
18
18
  that reports a false field, a failed credential check, a model credential nobody can
19
- place. Each one ends a run that reached project selection and never got a plan, and more
20
- runs stop here than anywhere else. Name the exact file, value, or check that stopped you:
21
- a report that names only the step cannot be acted on. Send one short report before you
22
- stop. Run the friction command without another developer question. The CLI telemetry gate
23
- decides whether the report is sent.
19
+ place. Each one ends a run that reached project selection and never got a plan. Name the
20
+ exact file, value, or check that stopped you: a report that names only the step cannot be
21
+ acted on. Send one short report before you stop. Run the friction command without another
22
+ developer question. Do not ask the developer about telemetry: the command applies the
23
+ setting they already have.
24
24
 
25
25
  ```text
26
- npx --yes copilotkit@4.10.1 onboard friction --phase stop --category <slug>
26
+ npx --yes copilotkit@4.12.0 onboard friction --phase stop --category <slug>
27
27
  ```
28
28
 
29
29
  Write one or two sentences to standard input: the step you stopped at and what stopped it.
@@ -58,7 +58,7 @@ the command refuses one of them from a run that was served that node.
58
58
  Run this command with the exact selected slugs:
59
59
 
60
60
  ```text
61
- npx --yes copilotkit@4.10.1 onboard classify --starting-state <starting-state> --agent-framework <agent-framework> --frontend <frontend>
61
+ npx --yes copilotkit@4.12.0 onboard classify --starting-state <starting-state> --agent-framework <agent-framework> --frontend <frontend>
62
62
  ```
63
63
 
64
64
  Do not continue if a value is refused. Fix the value from the choices that the earlier
@@ -71,8 +71,8 @@ the runtime `.env` file, do not default to the repository root.
71
71
  Set the environment path to `<target>/.env`.
72
72
 
73
73
  Every credential this run writes goes to the environment path. That covers the project
74
- key, the model credential, and a license token. Do not write a credential to `.env.local`,
75
- or to any second env file beside it. A project ignore file usually covers `.env` and not
74
+ key and the model credential. Do not write a credential to `.env.local`, or to any second
75
+ env file beside it. A project ignore file usually covers `.env` and not
76
76
  `.env.local`, so a credential written there is untracked, visible, and added by the first
77
77
  `git add -A`. And a second env file beside `.env` outranks it when a key is read back, so
78
78
  the value the run depends on is the one it did not write.
@@ -131,11 +131,14 @@ way to finish.
131
131
  ### Create a project for this directory
132
132
 
133
133
  No project is bound to this directory, so creating a project for this directory is the
134
- default. Take the name from the directory that holds the expected project-record path. If
135
- that directory name is generic -- `project`, `app`, `apps`, `src`, `web`, `frontend`,
136
- `backend`, `server`, `packages`, `repo` -- use the nearest enclosing directory whose name
137
- is not. A generic name tells the developer nothing later, and every run that derives it
138
- collides on it.
134
+ default. Take the name from the directory that holds the expected project-record path.
135
+
136
+ The CLI refuses a name that says nothing: a layer word from `project`, `app`, `apps`,
137
+ `src`, `web`, `frontend`, `backend`, `server`, `packages`, `repo`, a scratch name such as
138
+ `run-a`, `test-2`, or `tmp`, and anything under three characters. When the directory name
139
+ is one of those, use the nearest enclosing directory whose name is not. Ask when no
140
+ enclosing directory passes either: the parent of a scratch directory is usually another
141
+ one, and a second derived guess collides with the first.
139
142
 
140
143
  Ask one question: confirm that name, give another, or ask to use a project they already
141
144
  have. Name that third answer, so a developer who has one is not asked to guess
@@ -149,12 +152,16 @@ a project from a listing without an answer that names it. A project another run
149
152
  minutes ago reads exactly like this directory's own, and every check after the selection
150
153
  passes against the wrong one.
151
154
 
152
- Create it, from the target directory:
155
+ Create it, from the target directory, passing the port research settled:
153
156
 
154
157
  ```text
155
- npx --yes copilotkit@4.10.1 project select --create <name> --json
158
+ npx --yes copilotkit@4.12.0 project select --create <name> \
159
+ --runtime-url http://localhost:<port>/api/copilotkit --json
156
160
  ```
157
161
 
162
+ `--runtime-url` is the only place the settled port is written down. Give the URL the
163
+ application serves on, mount path included.
164
+
158
165
  If the command fails as a duplicate, the organization already holds that display name and
159
166
  the refusal names the colliding slug. Do not select the colliding project. Ask whether that
160
167
  project is this app's. If no developer answers, run the command again with the next free
@@ -166,13 +173,13 @@ Take this branch only when the developer asks for an existing project, or asks t
166
173
  projects they have. Read the choices:
167
174
 
168
175
  ```text
169
- npx --yes copilotkit@4.10.1 project list --json
176
+ npx --yes copilotkit@4.12.0 project list --json
170
177
  ```
171
178
 
172
179
  Narrow them:
173
180
 
174
181
  ```text
175
- npx --yes copilotkit@4.10.1 project list --search <query> --json
182
+ npx --yes copilotkit@4.12.0 project list --search <query> --json
176
183
  ```
177
184
 
178
185
  With `--json` the payload is the only thing on standard output, so it is safe to parse. Do
@@ -181,20 +188,23 @@ more. Do not order the projects by creation time: the newest project in the orga
181
188
  the one another run created while this one was working, and it is the least likely to be
182
189
  this directory's.
183
190
 
184
- Then record the project they name, from the target directory:
191
+ Then record the project they name, from the target directory, with the same
192
+ `--runtime-url`:
185
193
 
186
194
  ```text
187
- npx --yes copilotkit@4.10.1 project select --project <slug-or-id> --json
195
+ npx --yes copilotkit@4.12.0 project select --project <slug-or-id> \
196
+ --runtime-url http://localhost:<port>/api/copilotkit --json
188
197
  ```
189
198
 
190
199
  The two flags cannot be combined. A slug that does not exist fails and lists the real ones,
191
200
  so a typo cannot record a selection that points at nothing.
192
201
 
193
202
  Read the JSON result. It reports `selected_project_slug`, `config_path`,
194
- `api_key_provisioned`, `project_file_written`, and `environment_file_written` at the top
195
- level. The result does not contain a secret. Report `selected_project_slug` as the project
196
- slug that the server selected or created. Require `api_key_provisioned`,
197
- `project_file_written`, and `environment_file_written` to be true.
203
+ `api_key_provisioned`, `project_file_written`, `environment_file_written`, and
204
+ `environment_file` at the top level. The result does not contain a secret. Report
205
+ `selected_project_slug` as the project slug that the server selected or created.
206
+ Require `api_key_provisioned`, `project_file_written`, and `environment_file_written`
207
+ to be true.
198
208
 
199
209
  A run that wrote the project record without a key exits 75 and reports `"type": "partial"`
200
210
  with a `retry_command`. That is the recoverable half: the record is kept, and the failure
@@ -226,4 +236,4 @@ project-record path and environment path as the credential setup path list. Do n
226
236
  to the baseline yet.
227
237
 
228
238
  When project selection is settled, run
229
- `npx --yes copilotkit@4.10.1 onboard read credentials/settle-credentials`.
239
+ `npx --yes copilotkit@4.12.0 onboard read credentials/settle-credentials`.
@@ -68,26 +68,26 @@ another framework. Do not show the internal route.
68
68
 
69
69
  Use exactly one matching internal route:
70
70
 
71
- 1. AG2: `npx --yes copilotkit@4.10.1 onboard read framework/ag2`
72
- 2. Agno: `npx --yes copilotkit@4.10.1 onboard read framework/agno`
73
- 3. Built-in CopilotKit agent: `npx --yes copilotkit@4.10.1 onboard read framework/built-in`
74
- 4. Claude Agent SDK Python: `npx --yes copilotkit@4.10.1 onboard read framework/claude-sdk-python`
75
- 5. Claude Agent SDK TypeScript: `npx --yes copilotkit@4.10.1 onboard read framework/claude-sdk-typescript`
76
- 6. CrewAI Flows: `npx --yes copilotkit@4.10.1 onboard read framework/crewai-flows`
77
- 7. Deep Agents: `npx --yes copilotkit@4.10.1 onboard read framework/deep-agents`
78
- 8. LangGraph Python: `npx --yes copilotkit@4.10.1 onboard read framework/langgraph-python`
79
- 9. LangGraph FastAPI: `npx --yes copilotkit@4.10.1 onboard read framework/langgraph-fastapi`
80
- 10. LangGraph TypeScript: `npx --yes copilotkit@4.10.1 onboard read framework/langgraph-typescript`
81
- 11. LlamaIndex: `npx --yes copilotkit@4.10.1 onboard read framework/llamaindex`
82
- 12. ADK: `npx --yes copilotkit@4.10.1 onboard read framework/google-adk`
83
- 13. Microsoft Agent Framework Python: `npx --yes copilotkit@4.10.1 onboard read framework/ms-agent-python`
84
- 14. Microsoft Agent Framework .NET: `npx --yes copilotkit@4.10.1 onboard read framework/ms-agent-dotnet`
85
- 15. Mastra: `npx --yes copilotkit@4.10.1 onboard read framework/mastra`
86
- 16. MS Agent Harness .NET: `npx --yes copilotkit@4.10.1 onboard read framework/ms-agent-harness-dotnet`
87
- 17. Pydantic AI: `npx --yes copilotkit@4.10.1 onboard read framework/pydantic-ai`
88
- 18. Strands Agents Python: `npx --yes copilotkit@4.10.1 onboard read framework/strands-python`
89
- 19. Strands Agents TypeScript: `npx --yes copilotkit@4.10.1 onboard read framework/strands-typescript`
71
+ 1. AG2: `npx --yes copilotkit@4.12.0 onboard read framework/ag2`
72
+ 2. Agno: `npx --yes copilotkit@4.12.0 onboard read framework/agno`
73
+ 3. Built-in CopilotKit agent: `npx --yes copilotkit@4.12.0 onboard read framework/built-in`
74
+ 4. Claude Agent SDK Python: `npx --yes copilotkit@4.12.0 onboard read framework/claude-sdk-python`
75
+ 5. Claude Agent SDK TypeScript: `npx --yes copilotkit@4.12.0 onboard read framework/claude-sdk-typescript`
76
+ 6. CrewAI Flows: `npx --yes copilotkit@4.12.0 onboard read framework/crewai-flows`
77
+ 7. Deep Agents: `npx --yes copilotkit@4.12.0 onboard read framework/deep-agents`
78
+ 8. LangGraph Python: `npx --yes copilotkit@4.12.0 onboard read framework/langgraph-python`
79
+ 9. LangGraph FastAPI: `npx --yes copilotkit@4.12.0 onboard read framework/langgraph-fastapi`
80
+ 10. LangGraph TypeScript: `npx --yes copilotkit@4.12.0 onboard read framework/langgraph-typescript`
81
+ 11. LlamaIndex: `npx --yes copilotkit@4.12.0 onboard read framework/llamaindex`
82
+ 12. ADK: `npx --yes copilotkit@4.12.0 onboard read framework/google-adk`
83
+ 13. Microsoft Agent Framework Python: `npx --yes copilotkit@4.12.0 onboard read framework/ms-agent-python`
84
+ 14. Microsoft Agent Framework .NET: `npx --yes copilotkit@4.12.0 onboard read framework/ms-agent-dotnet`
85
+ 15. Mastra: `npx --yes copilotkit@4.12.0 onboard read framework/mastra`
86
+ 16. MS Agent Harness .NET: `npx --yes copilotkit@4.12.0 onboard read framework/ms-agent-harness-dotnet`
87
+ 17. Pydantic AI: `npx --yes copilotkit@4.12.0 onboard read framework/pydantic-ai`
88
+ 18. Strands Agents Python: `npx --yes copilotkit@4.12.0 onboard read framework/strands-python`
89
+ 19. Strands Agents TypeScript: `npx --yes copilotkit@4.12.0 onboard read framework/strands-typescript`
90
90
 
91
91
  If the project has an agent in another framework, or no listed framework fits, keep the
92
92
  developer's current agent and run
93
- `npx --yes copilotkit@4.10.1 onboard read unsupported/no-validated-path`.
93
+ `npx --yes copilotkit@4.12.0 onboard read unsupported/no-validated-path`.
@@ -7,11 +7,11 @@ not read, show, store, or request a secret value.
7
7
  ## If you stop in this phase
8
8
 
9
9
  Name the exact file, value, or check that stopped you, then send one short report. Run the
10
- friction command without another developer question. The CLI telemetry gate decides whether
11
- the report is sent.
10
+ friction command without another developer question. Do not ask the developer about
11
+ telemetry: the command applies the setting they already have.
12
12
 
13
13
  ```text
14
- npx --yes copilotkit@4.10.1 onboard friction --phase stop --category <slug>
14
+ npx --yes copilotkit@4.12.0 onboard friction --phase stop --category <slug>
15
15
  ```
16
16
 
17
17
  Write one or two sentences to standard input: the step you stopped at and what stopped it.
@@ -22,32 +22,64 @@ the whole run, so the estimate is optional on a stop report and only there. Send
22
22
  source code, logs, or command output. A refused report is not a failed step: reword it and
23
23
  send it again, or stop without a report.
24
24
 
25
+ ## Check that the key landed where the application reads it
26
+
27
+ Do this first, before the Learning Container, and only on a run that selected a project.
28
+ A run that reused one wrote no key and has nothing to read.
29
+
30
+ `environment_file_written` in the selection result says a file was written. It does not say
31
+ which file, and it does not say whether the application reads it. `environment_file` says
32
+ both: `path` is the file, and `loadable_by_app` is whether an application loads env files
33
+ from that directory. Project selection is the only step that can answer the second one.
34
+
35
+ - `pass`: the key is where the application's own process reads it. Continue.
36
+ - `fail`: it is not. `environment_file.apps` names the directories that do load env files.
37
+ Run the selection again from one of them, with `--project <selected slug>` and the same
38
+ `--runtime-url`, then read the new result.
39
+ - `undetermined`: no application package was found, so the question has no answer. Record
40
+ that and continue.
41
+
42
+ Do not repair a `fail` by copying the file, linking it, or writing the key a second time.
43
+ One key in two files is a secret in a place nobody tracks, and the copy goes stale as soon
44
+ as the original is rotated.
45
+
46
+ A key the application cannot load stops nothing here. It fails the round-trip proof
47
+ instead, which is the most expensive step in the run.
48
+
25
49
  ## Settle the Learning Container for this project
26
50
 
27
51
  Do this now, directly after project selection reports `selected_project_slug`, and before
28
52
  the plan. On a run that reused a project rather than selecting one, take the slug from the
29
53
  `projectSlug` field in the project record, which the follow-up check above already proved
30
- is non-empty. Both paths reach this step. Learning assigns real threads to a Learning Container, and a thread takes its
31
- container before its first agent run. A thread whose agent already ran can never receive a
32
- first assignment later, so every thread the developer creates between this run and some
33
- later `add-learning` run is lost to Learning for good. Setting it up here is not a
34
- convenience. It is the only point at which this project's first threads can be reached.
35
-
36
- Derive the id from the selected project slug: lowercase it, replace each run of characters
37
- outside `a-z0-9` with one hyphen, drop a leading or trailing hyphen, cut the result to 64
38
- characters, and drop a trailing hyphen the cut leaves behind. The container id contract is
39
- 1-64 lowercase letters, numbers, and single hyphens, so an id that skips the last step
40
- fails the create call on the developer's behalf. Derive it this exact way: the
41
- `add-learning` intent derives the same id from the same slug, and two spellings of one
42
- project's id give it two containers, each below the 15-conversation line on its own.
43
-
44
- One container for this project is the default scope. If the slug leaves nothing usable,
45
- skip this step and name the skip, rather than inventing a name.
54
+ is non-empty. Both paths reach this step. Learning assigns real threads to a Learning Container once.
55
+ New and existing threads can receive their first assignment, including after agent runs.
56
+ Set up the container here so new conversations contribute from the start. Existing threads
57
+ can join later, and Learning can collect only history whose source events still survive.
58
+
59
+ One container for this project is the default scope, so the id comes from the selected
60
+ project slug. Ask the CLI for it, from the target directory:
61
+
62
+ ```text
63
+ npx --yes copilotkit@4.12.0 learning containers default-id --json
64
+ ```
65
+
66
+ The command reads the local project record. It needs no credential and makes no network
67
+ call, so it answers before the run asks the platform anything. Read `status` from the
68
+ payload:
69
+
70
+ - `"status": "success"` carries the id in `containerId`. Use that exact string.
71
+ - `"status": "skipped"` means there is no id to use. `slug-unusable` means the slug leaves
72
+ nothing the id contract accepts. `no-project-record` means no project is selected in
73
+ this directory. Skip this step and name the skip, rather than inventing a name.
74
+
75
+ Never spell the id yourself. Two spellings of one project's id give it two containers,
76
+ each below the 15-conversation line on its own, and nothing reports that the split
77
+ happened.
46
78
 
47
79
  Then ask the platform about that id, from the target directory:
48
80
 
49
81
  ```text
50
- npx --yes copilotkit@4.10.1 learning containers get <id> --json
82
+ npx --yes copilotkit@4.12.0 learning containers get <id> --json
51
83
  ```
52
84
 
53
85
  The read carries the same availability gate as the create, so it answers the entitlement
@@ -72,7 +104,7 @@ Never invent an id, scrape a dashboard, or treat an arbitrary string as a contai
72
104
  Report what the read found, before anything is planned:
73
105
 
74
106
  ```text
75
- npx --yes copilotkit@4.10.1 onboard checkpoint --phase container-surveyed
107
+ npx --yes copilotkit@4.12.0 onboard checkpoint --phase container-surveyed
76
108
  ```
77
109
 
78
110
  Carry the derived id into the planning subagent's handoff, with whether the platform
@@ -102,7 +134,7 @@ protected path list. Also add each project file that the developer changed for m
102
134
  credentials. Record them in the baseline from the target app directory:
103
135
 
104
136
  ```text
105
- npx --yes copilotkit@4.10.1 onboard protect --path <path>
137
+ npx --yes copilotkit@4.12.0 onboard protect --path <path>
106
138
  ```
107
139
 
108
140
  Pass one `--path` for each. The command captures a digest for each path and never re-reads
@@ -116,7 +148,7 @@ Then re-capture the files this graph wrote itself. For each path the first captu
116
148
  as `deferred` that this run has now written, run:
117
149
 
118
150
  ```text
119
- npx --yes copilotkit@4.10.1 onboard protect --rebaseline --path <path>
151
+ npx --yes copilotkit@4.12.0 onboard protect --rebaseline --path <path>
120
152
  ```
121
153
 
122
154
  From that point they are protected like any other path, so a later step that rewrites
@@ -135,7 +167,7 @@ environment path. The command below is what to run at that point, from the targe
135
167
  directory:
136
168
 
137
169
  ```text
138
- npx --yes copilotkit@4.10.1 onboard protect --accept-credential --path <environment path>
170
+ npx --yes copilotkit@4.12.0 onboard protect --accept-credential --path <environment path>
139
171
  ```
140
172
 
141
173
  The command compares the variable names the baseline recorded with the names the file holds
@@ -150,4 +182,4 @@ now. Read its result:
150
182
  is not a failed step. It answers the question and the run carries on.
151
183
 
152
184
  When the credential question is answered, run
153
- `npx --yes copilotkit@4.10.1 onboard read credentials/write-plan`.
185
+ `npx --yes copilotkit@4.12.0 onboard read credentials/write-plan`.
@@ -7,11 +7,11 @@ the run needs from them.
7
7
  ## If you stop in this phase
8
8
 
9
9
  Name the exact file, value, or check that stopped you, then send one short report. Run the
10
- friction command without another developer question. The CLI telemetry gate decides whether
11
- the report is sent.
10
+ friction command without another developer question. Do not ask the developer about
11
+ telemetry: the command applies the setting they already have.
12
12
 
13
13
  ```text
14
- npx --yes copilotkit@4.10.1 onboard friction --phase stop --category <slug>
14
+ npx --yes copilotkit@4.12.0 onboard friction --phase stop --category <slug>
15
15
  ```
16
16
 
17
17
  Write one or two sentences to standard input: the step you stopped at and what stopped it.
@@ -52,7 +52,7 @@ proof subagents:
52
52
  Fetch them together with the pages already selected rather than on their own.
53
53
 
54
54
  Spawn one planning subagent. Tell it to run
55
- `npx --yes copilotkit@4.10.1 onboard read subagent/create-plan` first and follow the prompt
55
+ `npx --yes copilotkit@4.12.0 onboard read subagent/create-plan` first and follow the prompt
56
56
  it returns. If that read fails because the subagent cannot use the shell, stop that subagent.
57
57
  Run the same command yourself, then spawn a fresh subagent with the returned prompt and the
58
58
  same handoff. Give it the repository findings, selected framework, frontend, model, credential
@@ -63,7 +63,7 @@ Wait for the subagent to finish.
63
63
  Continue only if the planning result starts with `Status: passed`. For `Status: failed`,
64
64
  send the result back to the planning subagent for repair, up to three attempts. For
65
65
  `Status: blocked`, or a third failed result, run
66
- `npx --yes copilotkit@4.10.1 onboard read stopped/run-failed`. A plan this run cannot
66
+ `npx --yes copilotkit@4.12.0 onboard read stopped/run-failed`. A plan this run cannot
67
67
  write is a run that broke, not a stack the documentation does not cover. Do not show or
68
68
  ask for approval of a non-pass plan.
69
69
 
@@ -87,7 +87,7 @@ that waits at the terminal through all of them for a question that never comes.
87
87
  the same message as the plan, and do not turn it into a second question.
88
88
 
89
89
  If the developer approves the plan, run
90
- `npx --yes copilotkit@4.10.1 onboard read implementation/build-and-validate`.
90
+ `npx --yes copilotkit@4.12.0 onboard read implementation/build-and-validate`.
91
91
 
92
92
  If no exact supported path or documentation URL exists, run
93
- `npx --yes copilotkit@4.10.1 onboard read unsupported/no-validated-path`.
93
+ `npx --yes copilotkit@4.12.0 onboard read unsupported/no-validated-path`.
@@ -9,11 +9,12 @@ This fallback contains unproved steps. Use the approved plan in step order.
9
9
 
10
10
  Several rules below stop onboarding: a blocked or third failed implementation result, a
11
11
  changed protected path, a blocked or third failed proof, a fix that needs changes to the
12
- existing agent or frontend. Send one short report before you stop. Run the friction command without another developer question. The CLI telemetry gate decides whether the
13
- report is sent.
12
+ existing agent or frontend. Send one short report before you stop. Run the friction
13
+ command without another developer question. Do not ask the developer about telemetry: the
14
+ command applies the setting they already have.
14
15
 
15
16
  ```text
16
- npx --yes copilotkit@4.10.1 onboard friction --phase stop --category <slug>
17
+ npx --yes copilotkit@4.12.0 onboard friction --phase stop --category <slug>
17
18
  ```
18
19
 
19
20
  Write one or two sentences to standard input: the step you stopped at and what stopped it.
@@ -59,13 +60,13 @@ stop.
59
60
 
60
61
  Use these rules for every protected-path check in this fallback:
61
62
 
62
- - Run `npx --yes copilotkit@4.10.1 onboard audit` from the target app directory.
63
+ - Run `npx --yes copilotkit@4.12.0 onboard audit` from the target app directory.
63
64
  - If a result starts with `Status: blocked`, stop onboarding and report the printed reason.
64
65
  It proved nothing changed, so do not report a preservation failure.
65
66
  - If a result reports a changed protected path this run wrote, stop onboarding.
66
67
  - If a result reports a changed path that no Files changed section from this run names,
67
68
  the change came from outside the run. Accept it by name with
68
- `npx --yes copilotkit@4.10.1 onboard protect --accept-external --path <path>`, run the
69
+ `npx --yes copilotkit@4.12.0 onboard protect --accept-external --path <path>`, run the
69
70
  audit again, and name it in the closing report.
70
71
  - If no Files changed section from this run covers the step that wrote it, stop
71
72
  onboarding. The proof subagent here returns no such section, so a finding it raises is
@@ -118,13 +119,13 @@ application passes proof. Report each tool result separately from the proof resu
118
119
  Report the documentation gap and each assumption with the proof evidence. Do not claim
119
120
  that the selected documentation proved an inferred step.
120
121
 
121
- When the proof is complete, run `npx --yes copilotkit@4.10.1 onboard complete`, carrying the
122
+ When the proof is complete, run `npx --yes copilotkit@4.12.0 onboard complete`, carrying the
122
123
  surface-check result the proof subagent returned. Pass exactly one flag, matching this
123
124
  journey's surface:
124
125
 
125
126
  ```text
126
- npx --yes copilotkit@4.10.1 onboard complete --visual-check <outcome>
127
- npx --yes copilotkit@4.10.1 onboard complete --device-check <outcome>
127
+ npx --yes copilotkit@4.12.0 onboard complete --visual-check <outcome>
128
+ npx --yes copilotkit@4.12.0 onboard complete --device-check <outcome>
128
129
  ```
129
130
 
130
131
  `--visual-check` is for a web frontend and takes `performed`, `skipped-no-browser-tool`, or