copilotkit 4.21.0 → 4.23.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 (92) hide show
  1. package/README.md +419 -23
  2. package/cli-build-info.json +8 -8
  3. package/index.js +62600 -43650
  4. package/onboarding/index.json +92 -9
  5. package/onboarding/prompts/authenticate/start.md +47 -43
  6. package/onboarding/prompts/conversion/plan.md +3 -3
  7. package/onboarding/prompts/credentials/finalize-plan.md +12 -7
  8. package/onboarding/prompts/credentials/plan.md +36 -25
  9. package/onboarding/prompts/credentials/settle-credentials.md +10 -7
  10. package/onboarding/prompts/credentials/write-plan.md +22 -20
  11. package/onboarding/prompts/deployment/choose-local.md +46 -0
  12. package/onboarding/prompts/deployment/local-evaluation.md +71 -0
  13. package/onboarding/prompts/fallback/best-effort.md +8 -8
  14. package/onboarding/prompts/feature/a2ui/implement.md +6 -6
  15. package/onboarding/prompts/feature/a2ui/plan.md +72 -0
  16. package/onboarding/prompts/feature/a2ui/proof.md +5 -5
  17. package/onboarding/prompts/feature/a2ui/start.md +11 -32
  18. package/onboarding/prompts/feature/channels/implement.md +23 -16
  19. package/onboarding/prompts/feature/channels/plan.md +85 -0
  20. package/onboarding/prompts/feature/channels/proof.md +5 -5
  21. package/onboarding/prompts/feature/channels/start.md +14 -41
  22. package/onboarding/prompts/feature/chat-suggestions/implement.md +6 -6
  23. package/onboarding/prompts/feature/chat-suggestions/plan.md +71 -0
  24. package/onboarding/prompts/feature/chat-suggestions/proof.md +5 -5
  25. package/onboarding/prompts/feature/chat-suggestions/start.md +11 -30
  26. package/onboarding/prompts/feature/complete.md +2 -2
  27. package/onboarding/prompts/feature/learning/implement.md +13 -13
  28. package/onboarding/prompts/feature/learning/plan.md +82 -0
  29. package/onboarding/prompts/feature/learning/proof.md +6 -6
  30. package/onboarding/prompts/feature/learning/start.md +11 -40
  31. package/onboarding/prompts/feature/open-generative-ui/implement.md +6 -6
  32. package/onboarding/prompts/feature/open-generative-ui/plan.md +70 -0
  33. package/onboarding/prompts/feature/open-generative-ui/proof.md +5 -5
  34. package/onboarding/prompts/feature/open-generative-ui/start.md +11 -30
  35. package/onboarding/prompts/feature/realtime-sync/implement.md +7 -7
  36. package/onboarding/prompts/feature/realtime-sync/plan.md +75 -0
  37. package/onboarding/prompts/feature/realtime-sync/proof.md +5 -5
  38. package/onboarding/prompts/feature/realtime-sync/start.md +10 -33
  39. package/onboarding/prompts/feature/rich-threads/implement.md +8 -8
  40. package/onboarding/prompts/feature/rich-threads/plan.md +77 -0
  41. package/onboarding/prompts/feature/rich-threads/proof.md +5 -5
  42. package/onboarding/prompts/feature/rich-threads/start.md +10 -35
  43. package/onboarding/prompts/feature/stop.md +3 -3
  44. package/onboarding/prompts/feature/voice/implement.md +6 -6
  45. package/onboarding/prompts/feature/voice/plan.md +74 -0
  46. package/onboarding/prompts/feature/voice/proof.md +5 -5
  47. package/onboarding/prompts/feature/voice/start.md +11 -29
  48. package/onboarding/prompts/framework/ag2.md +2 -2
  49. package/onboarding/prompts/framework/agno.md +2 -2
  50. package/onboarding/prompts/framework/built-in.md +2 -2
  51. package/onboarding/prompts/framework/claude-sdk-python.md +2 -2
  52. package/onboarding/prompts/framework/claude-sdk-typescript.md +2 -2
  53. package/onboarding/prompts/framework/crewai-flows.md +2 -2
  54. package/onboarding/prompts/framework/custom-ag-ui.md +101 -0
  55. package/onboarding/prompts/framework/deep-agents.md +2 -2
  56. package/onboarding/prompts/framework/google-adk.md +2 -2
  57. package/onboarding/prompts/framework/langgraph-fastapi.md +2 -2
  58. package/onboarding/prompts/framework/langgraph-python.md +2 -2
  59. package/onboarding/prompts/framework/langgraph-typescript.md +2 -2
  60. package/onboarding/prompts/framework/llamaindex.md +2 -2
  61. package/onboarding/prompts/framework/mastra.md +2 -2
  62. package/onboarding/prompts/framework/ms-agent-dotnet.md +3 -3
  63. package/onboarding/prompts/framework/ms-agent-harness-dotnet.md +3 -3
  64. package/onboarding/prompts/framework/ms-agent-python.md +2 -2
  65. package/onboarding/prompts/framework/pydantic-ai.md +2 -2
  66. package/onboarding/prompts/framework/strands-python.md +2 -2
  67. package/onboarding/prompts/framework/strands-typescript.md +2 -2
  68. package/onboarding/prompts/frontend/angular.md +10 -21
  69. package/onboarding/prompts/frontend/nextjs.md +3 -3
  70. package/onboarding/prompts/frontend/plan.md +7 -7
  71. package/onboarding/prompts/frontend/react-native.md +2 -2
  72. package/onboarding/prompts/frontend/react-spa.md +2 -2
  73. package/onboarding/prompts/frontend/vue.md +2 -2
  74. package/onboarding/prompts/implementation/build-and-validate.md +14 -13
  75. package/onboarding/prompts/proof/complete.md +3 -3
  76. package/onboarding/prompts/proof/oss-baseline.md +5 -5
  77. package/onboarding/prompts/proof/round-trip.md +18 -13
  78. package/onboarding/prompts/research/gather.md +9 -8
  79. package/onboarding/prompts/research/merge.md +6 -3
  80. package/onboarding/prompts/research/preflight.md +2 -2
  81. package/onboarding/prompts/research/route.md +26 -18
  82. package/onboarding/prompts/starter/clone.md +15 -14
  83. package/onboarding/prompts/stopped/run-failed.md +2 -2
  84. package/onboarding/prompts/subagent/create-plan.md +33 -40
  85. package/onboarding/prompts/subagent/implement-and-validate.md +58 -38
  86. package/onboarding/prompts/subagent/inspect-repository.md +4 -1
  87. package/onboarding/prompts/subagent/prove-oss-baseline.md +1 -1
  88. package/onboarding/prompts/subagent/prove-round-trip.md +117 -257
  89. package/onboarding/prompts/unsupported/no-validated-path.md +2 -2
  90. package/package.json +4 -1
  91. package/release/release-tool.js +167 -18
  92. package/services/local-auth-worker.js +21465 -0
@@ -1,13 +1,18 @@
1
1
  # Prove the user journey
2
2
 
3
3
  Do not do the proof work yourself. Spawn one proof subagent. Tell it to run
4
- `npx --prefer-offline --yes copilotkit@4.21.0 onboard read subagent/prove-round-trip` first and follow the
4
+ `npx --prefer-offline --yes copilotkit@4.23.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
8
8
  documentation URLs, and validation evidence. Give it the documentation policy recorded during
9
9
  framework selection or conversion planning. On a conversion, also give it the frozen
10
- criterion. Give it the protected path list.
10
+ criterion. Give it the protected path list. Give it the developer's answer on the Skills
11
+ install and the Skills result the implementation returned.
12
+
13
+ Give it the frontend files that publish the page context and register the tools, by path,
14
+ from the Files changed sections the implementation returned. The subagent sends what those
15
+ files send, and without their paths it searches the project and its dependencies for them.
11
16
 
12
17
  Give it the browser or device control you recorded in the preflight as well. The subagent
13
18
  drives the surface and cannot see your environment, so without that finding it spends the
@@ -17,7 +22,7 @@ A web run with no browser tool reports `skipped-no-browser-tool`. That outcome c
17
22
  run once the round trip is recorded as `passed`.
18
23
 
19
24
  A run that cloned a starter is the exception. Tell that subagent that this run cloned a
20
- starter, to finish after `verify --round-trip`, and to open no browser. The cloned code is what this repository's
25
+ starter, to finish after `onboard proof-check`, and to open no browser. The cloned code is what this repository's
21
26
  starter smoke jobs already drive on every change, so opening a browser re-proves in the
22
27
  developer's run what those jobs prove before the starter ships, and it is the most
23
28
  expensive step in this setup. `verify --round-trip` reads the answer back off the thread,
@@ -35,7 +40,7 @@ pass the time.
35
40
  Record what that proof returned before you route on it:
36
41
 
37
42
  ```text
38
- npx --prefer-offline --yes copilotkit@4.21.0 onboard proof --step round-trip --outcome <passed|failed|skipped>
43
+ npx --prefer-offline --yes copilotkit@4.23.0 onboard proof --step round-trip --outcome <passed|failed|skipped>
39
44
  ```
40
45
 
41
46
  Report the gate whatever it returned. A proof that never ran is `skipped`, not failed. A
@@ -44,7 +49,7 @@ to record it as `skipped`. The command prints one line and sends nothing else. W
44
49
  record each attempt as it ends.
45
50
 
46
51
  For every protected-path audit in this prompt, run
47
- `npx --prefer-offline --yes copilotkit@4.21.0 onboard audit` from the target app directory. If its result
52
+ `npx --prefer-offline --yes copilotkit@4.23.0 onboard audit` from the target app directory. If its result
48
53
  starts with `Status: blocked`, report the printed reason and use the route-out rules below.
49
54
  A blocked audit proved nothing changed and is not a preservation failure. If a
50
55
  protected-path audit reports a changed path, decide it the way the implementation prompt
@@ -53,7 +58,7 @@ returns none, so a finding with no Files changed section to test against routes
53
58
  path one of those sections names is this run's own change and routes out too. Accept a
54
59
  path only when a section this run collected covers the step that wrote it and does not
55
60
  name it:
56
- `npx --prefer-offline --yes copilotkit@4.21.0 onboard protect --accept-external --path <path>`. Then run
61
+ `npx --prefer-offline --yes copilotkit@4.23.0 onboard protect --accept-external --path <path>`. Then run
57
62
  the audit again and name the path in the closing summary. Never repair, reset, or revert a
58
63
  protected path.
59
64
 
@@ -61,12 +66,12 @@ That holds for a repair cycle too. When the fix for a failing check lands on a p
61
66
  path, the path is still the developer's, however right the diagnosis is and however small
62
67
  the fix. Reading the file never settles who wrote it. Ask the developer to allow the
63
68
  change, and record their answer with
64
- `npx --prefer-offline --yes copilotkit@4.21.0 onboard protect --authorize --unplanned --path <path> --reason "<what the developer said>"`,
69
+ `npx --prefer-offline --yes copilotkit@4.23.0 onboard protect --authorize --unplanned --path <path> --reason "<what the developer said>"`,
65
70
  or route out. Never repair it, and never send it to a repair worker.
66
71
 
67
72
  If the proof result starts with `Status: passed`, run the protected-path audit. Continue to
68
73
  `proof/complete` only if that audit passes. After the audit passes, run
69
- `npx --prefer-offline --yes copilotkit@4.21.0 onboard read proof/complete`. A performed surface outcome with
74
+ `npx --prefer-offline --yes copilotkit@4.23.0 onboard read proof/complete`. A performed surface outcome with
70
75
  the full round trip is core success even if a continued-development tool fails. A skipped
71
76
  surface outcome still enters `proof/complete`. The CLI records `skipped-cloned-starter` and
72
77
  `skipped-no-browser-tool` after a passed round trip as complete, and `skipped-no-device` as
@@ -90,7 +95,7 @@ stop report instead of the application they now have.
90
95
 
91
96
  If the round trip fails, decide which kind of failure it is before you route. The proof
92
97
  subagent can repair only project-owned processes, ports, and request options, and it can
93
- make the credential write that its Step 4 names for `api_key_loadable_by_app`. A failure caused
98
+ run the credential command that `verify:api_key_loadable_by_app` names. A failure caused
94
99
  by a source, configuration, dependency, or tracked-file change is a defect in the new work.
95
100
 
96
101
  Retry the proof subagent only for a project-owned process, port, request-option, or
@@ -140,8 +145,8 @@ way `implementation/build-and-validate` does: pause and ask the developer, add t
140
145
  the handoff if they allow it, and use the route-out rules below if they decline. For a
141
146
  protected file, record their answer with `--authorize --unplanned` and run the audit again
142
147
  first. Then spawn a fresh repair worker with this repair handoff, not the whole-plan
143
- implementation handoff: the plan, the proof evidence, the protected path list, and the
144
- authorized list from that audit.
148
+ implementation handoff: the plan, the proof evidence, the protected path list, the
149
+ authorized list from that audit, and the developer's answer on the Skills install.
145
150
 
146
151
  Run the protected-path audit again after validation passes. Continue only if its result
147
152
  starts with `Status: passed`.
@@ -161,7 +166,7 @@ proof cycles, use the route-out rules below.
161
166
 
162
167
  Route out only when the failure is not yours to fix, when the same proof still fails after
163
168
  three attempts, or when no evidence of the round trip can be produced. In those cases run
164
- `npx --prefer-offline --yes copilotkit@4.21.0 onboard read stopped/run-failed`. The stack is supported:
169
+ `npx --prefer-offline --yes copilotkit@4.23.0 onboard read stopped/run-failed`. The stack is supported:
165
170
  this run did not finish, which is a different ending and a different report. All three are
166
171
  about the round trip itself. A round trip that proved is not one of them, whatever failed
167
172
  after it.
@@ -172,7 +177,7 @@ friction command follows the telemetry setting the developer already chose, so i
172
177
  separate question.
173
178
 
174
179
  ```text
175
- npx --prefer-offline --yes copilotkit@4.21.0 onboard friction --phase stop --category <slug> --message "<sentences>"
180
+ npx --prefer-offline --yes copilotkit@4.23.0 onboard friction --phase stop --category <slug> --message "<sentences>"
176
181
  ```
177
182
 
178
183
  `--message` takes one or two sentences: the step you stopped at and what stopped it.
@@ -1,8 +1,9 @@
1
1
  # Gather the evidence this run routes on
2
2
 
3
- Sign-in is settled. This phase inspects the project and proves what this environment can
4
- drive. Do not change application code here, and do not ask the developer a setup question
5
- yet: every read-only investigation finishes first.
3
+ The developer can still be signing in. Keep reading the login process as
4
+ `authenticate/start` says while this phase runs. This phase inspects the project and proves
5
+ what this environment can drive. Do not change application code here, and do not ask the
6
+ developer a setup question yet: every read-only investigation finishes first.
6
7
 
7
8
  ## How to wait for a subagent
8
9
 
@@ -44,7 +45,7 @@ Before you end your turn to wait for the developer where the prompt states no de
44
45
  report the pause:
45
46
 
46
47
  ```text
47
- npx --prefer-offline --yes copilotkit@4.21.0 onboard checkpoint --phase awaiting-developer
48
+ npx --prefer-offline --yes copilotkit@4.23.0 onboard checkpoint --phase awaiting-developer
48
49
  ```
49
50
 
50
51
  When the answer or the result arrives, continue from the step that paused. Do not read an
@@ -64,7 +65,7 @@ Both research subagents failing means this harness has no working subagent at al
64
65
  is worth recording once:
65
66
 
66
67
  ```text
67
- npx --prefer-offline --yes copilotkit@4.21.0 onboard checkpoint --phase delegation-unavailable
68
+ npx --prefer-offline --yes copilotkit@4.23.0 onboard checkpoint --phase delegation-unavailable
68
69
  ```
69
70
 
70
71
  Then say once, in your own words, that this environment has no working subagents, so you
@@ -77,7 +78,7 @@ Before you ask the developer any setup question, finish every read-only investig
77
78
  preflight check in this section.
78
79
 
79
80
  Prepare two research assignments. Give each research subagent one assignment. Tell it to run
80
- `npx --prefer-offline --yes copilotkit@4.21.0 onboard read subagent/inspect-repository` first and follow the
81
+ `npx --prefer-offline --yes copilotkit@4.23.0 onboard read subagent/inspect-repository` first and follow the
81
82
  prompt it returns. If that read fails because the subagent cannot use the shell, stop that
82
83
  subagent. Run the same command yourself, then spawn a fresh subagent with the returned prompt
83
84
  and the same handoff. Require only its assigned packet.
@@ -91,8 +92,8 @@ Start both research subagents in parallel:
91
92
  The research is under way. Continue to the surface-control preflight while it runs:
92
93
 
93
94
  ```text
94
- npx --prefer-offline --yes copilotkit@4.21.0 onboard read research/preflight
95
+ npx --prefer-offline --yes copilotkit@4.23.0 onboard read research/preflight
95
96
  ```
96
97
 
97
98
  If inspection stops onboarding, run
98
- `npx --prefer-offline --yes copilotkit@4.21.0 onboard read stopped/run-failed`.
99
+ `npx --prefer-offline --yes copilotkit@4.23.0 onboard read stopped/run-failed`.
@@ -45,8 +45,11 @@ environment row. If either packet gives no match or more than one match, send ea
45
45
  worker a focused directory check. Continue only when both workers return the same one target
46
46
  app directory. Both results must start with `Status: passed`. Otherwise, use the stop route.
47
47
 
48
- When both research results are merged, run
49
- `npx --prefer-offline --yes copilotkit@4.21.0 onboard read research/route`.
48
+ Read the next step only after `login --json` has emitted `type: completed`. If sign-in still
49
+ waits on the developer, end your turn and wait for it: that is a pause.
50
+
51
+ When both research results are merged and sign-in is done, run
52
+ `npx --prefer-offline --yes copilotkit@4.23.0 onboard read research/route`.
50
53
 
51
54
  If inspection stops onboarding, run
52
- `npx --prefer-offline --yes copilotkit@4.21.0 onboard read stopped/run-failed`.
55
+ `npx --prefer-offline --yes copilotkit@4.23.0 onboard read stopped/run-failed`.
@@ -27,8 +27,8 @@ Where the device probe found no booted device, that is the whole finding.
27
27
  Then merge the research:
28
28
 
29
29
  ```text
30
- npx --prefer-offline --yes copilotkit@4.21.0 onboard read research/merge
30
+ npx --prefer-offline --yes copilotkit@4.23.0 onboard read research/merge
31
31
  ```
32
32
 
33
33
  If inspection stops onboarding, run
34
- `npx --prefer-offline --yes copilotkit@4.21.0 onboard read stopped/run-failed`.
34
+ `npx --prefer-offline --yes copilotkit@4.23.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 --prefer-offline --yes copilotkit@4.21.0 onboard protect
12
+ npx --prefer-offline --yes copilotkit@4.23.0 onboard protect
13
13
  ```
14
14
 
15
15
  It reads the working tree itself, records every changed or untracked path with a digest,
@@ -31,28 +31,36 @@ route at the end of this prompt.
31
31
 
32
32
  ## Route a named Channel before the findings
33
33
 
34
- The prompt the developer copied names the docs page it came from. A Slack or Teams docs
35
- page names the surface this run is for. So does a developer who has already said Slack or
36
- Microsoft Teams. Either one settles the frontend.
34
+ The prompt the developer copied names the docs page it came from. A CopilotKit docs page
35
+ under `/channels`, `/slack`, or `/teams` names a Channel. So does a run that follows the
36
+ `channels-setup` skill, which `copilotkit channels setup` installs in the project. The
37
+ prompt that command prints names no page. So does a developer who asks for a Channel,
38
+ Slack, or Microsoft Teams in their own words. Any one of these settles the frontend.
37
39
 
38
- Record that docs page and give it to every later node and subagent. The copied prompt is
39
- the only carrier of the surface the developer wants, and no flag states it.
40
+ Record that page or request and give it to every later node and subagent. No flag states
41
+ the surface the developer wants, so this record is its only carrier.
40
42
 
41
- On either, run this before you read the three findings below, and without asking the
42
- purpose question:
43
+ On any one of them, run this before you read the three findings below, and without asking
44
+ the purpose question:
43
45
 
44
46
  ```text
45
- npx --prefer-offline --yes copilotkit@4.21.0 onboard read feature/channels/start
47
+ npx --prefer-offline --yes copilotkit@4.23.0 onboard read feature/channels/start
46
48
  ```
47
49
 
48
- Name the provider to that node so it does not ask again. A Slack page names Slack. A Teams
49
- page names Teams.
50
+ Name the provider to that node so it does not ask again. A `/slack` page names Slack. A
51
+ `/teams` page names Teams. A request that names no provider leaves that question to the
52
+ node.
50
53
 
51
54
  Take this route whatever the three findings prove. An agent, a frontend and a CopilotKit
52
55
  integration are a valid start for a Channel, not a reason to convert the application: the
53
56
  run keeps that code as it is and wires a managed Channel onto it. Do not send a Channel
54
57
  request to the conversion route.
55
58
 
59
+ Nothing else names a Channel. A project with its own channels, bots, or coworkers does not
60
+ ask for one. A repository the developer asked you to clone does not ask for one either.
61
+ Without one of the requests above, read the findings below. `frontend/plan` offers Slack
62
+ and Microsoft Teams when the project has no frontend.
63
+
56
64
  ## What the merged findings must contain
57
65
 
58
66
  If a repository file exists, each finding must cite it. For an empty project, the subagents
@@ -78,10 +86,10 @@ directory behind each answer. Read it as a proposal.
78
86
  - `unmatched` names the dependencies it did not place. Use them as evidence for what the
79
87
  project runs.
80
88
 
81
- Detection proposes and you dispose. Keep the documentation-gap exception exactly as it is:
82
- an agent framework outside this set that speaks AG-UI is still yours to recognize and
83
- route to best effort. Where your reading disagrees with the proposal, record your own
84
- answer and say that the two disagreed.
89
+ Detection proposes and you dispose. An agent outside this set that already speaks AG-UI
90
+ is still yours to recognize. The framework question has a route for it, so record in the
91
+ findings that the agent speaks AG-UI and cite the file that proves it. Where your reading
92
+ disagrees with the proposal, record your own answer and say that the two disagreed.
85
93
 
86
94
  ## Route on the merged findings
87
95
 
@@ -97,7 +105,7 @@ settle these three from your own reading of the project. Each one comes from the
97
105
  packets or it is not proved.
98
106
 
99
107
  If all three are proved, prove the live starting state before any project file changes. Run
100
- `npx --prefer-offline --yes copilotkit@4.21.0 onboard read proof/oss-baseline`.
108
+ `npx --prefer-offline --yes copilotkit@4.23.0 onboard read proof/oss-baseline`.
101
109
 
102
110
  Route there before you ask the developer anything else. The questions after this prompt
103
111
  select a framework and a frontend that the findings already name, so a developer who
@@ -110,7 +118,7 @@ developer nor the repository findings prove what the project is for, ask one gui
110
118
  question about the user outcome. This asks what the developer wants to build before you
111
119
  select a framework. Give two or three short examples. Record the answer and give it to
112
120
  each later subagent. Then run
113
- `npx --prefer-offline --yes copilotkit@4.21.0 onboard read credentials/plan`.
121
+ `npx --prefer-offline --yes copilotkit@4.23.0 onboard read credentials/plan`.
114
122
 
115
123
  Do not ask that question on the route above. A project carrying all three states its
116
124
  purpose in the application it already serves.
@@ -124,5 +132,5 @@ A purpose question here names a domain before that choice.
124
132
  Take the same read named above without asking.
125
133
 
126
134
  If authentication, inspection, or the baseline capture stops onboarding, run
127
- `npx --prefer-offline --yes copilotkit@4.21.0 onboard read stopped/run-failed`. None of them says anything
135
+ `npx --prefer-offline --yes copilotkit@4.23.0 onboard read stopped/run-failed`. None of them says anything
128
136
  about whether this project's stack is supported, which is not yet known at this point.
@@ -55,7 +55,7 @@ the derived name.
55
55
  Only if the developer asks for an existing project, or asks to see the projects they have,
56
56
  read the choices:
57
57
 
58
- `npx --prefer-offline --yes copilotkit@4.21.0 project list --json`
58
+ `npx --prefer-offline --yes copilotkit@4.23.0 project list --json`
59
59
 
60
60
  Then ask which one to use. Do not order the projects by creation time. If the developer
61
61
  already gave this answer, do not ask again. Do not read a secret value. Do not show or
@@ -78,18 +78,19 @@ way bills a project nobody chose.
78
78
 
79
79
  ## Clone the starter
80
80
 
81
- Run the command from the parent directory. Do not inspect another entry in the parent
82
- directory. Replace each placeholder with the recorded value. Do not run a placeholder as
83
- a shell argument. If the directory name holds a space, put it in double quotes.
81
+ Run the command in one step, from any directory. `--dir` names the target, so the app
82
+ lands there whatever directory the shell is in. Do not change directory before the command.
83
+ Do not inspect another entry in the parent directory. Replace each placeholder with the
84
+ recorded value. Do not run a placeholder as a shell argument. If the path holds a space,
85
+ put it in double quotes.
84
86
 
85
- `npx --prefer-offline --yes copilotkit@4.21.0 init --name <directory-name> --framework <framework-id> --channel none --no-banner --no-key-prompt --create <name> --install`
87
+ `npx --prefer-offline --yes copilotkit@4.23.0 init --dir <absolute-target-directory> --framework <framework-id> --channel none --no-banner --no-key-prompt --create <name> --install`
86
88
 
87
- `--name` is always the target directory name derived above, because `init` creates the
88
- app at `<parent>/<name>`. Any other value puts the app in a new folder beside the target,
89
- outside the directory this run is bound to. Pass the confirmed project name to `--create`
90
- only. If the developer names an existing project,
91
- use `--project <slug-or-id>` instead of `--create <name>`. If the developer asked to skip
92
- the dependency install, use
89
+ `--dir` is always the absolute path of the target directory. `init` builds the app in that
90
+ directory and gives the app the directory's name. Do not add `--name`: `init` refuses
91
+ `--name` together with `--dir`. Pass the confirmed project name to `--create` only. If the
92
+ developer names an existing project, use `--project <slug-or-id>` instead of
93
+ `--create <name>`. If the developer asked to skip the dependency install, use
93
94
  `--no-install` instead of `--install`. Do not wait for an interactive prompt. Pass every
94
95
  answer as a flag. `--no-key-prompt` stops `init` from asking for a model key. The `init`
95
96
  output still names each missing key as `Set <VARIABLE> in .env`.
@@ -143,7 +144,7 @@ When you ask, name each variable and the file it goes in, and say that the run c
143
144
  when they reply or resume this session. Then report the pause and end your turn:
144
145
 
145
146
  ```text
146
- npx --prefer-offline --yes copilotkit@4.21.0 onboard checkpoint --phase awaiting-model-credential
147
+ npx --prefer-offline --yes copilotkit@4.23.0 onboard checkpoint --phase awaiting-model-credential
147
148
  ```
148
149
 
149
150
  This is a pause, not a stop. Do not send a stop report, and do not take a stop route.
@@ -154,10 +155,10 @@ call.
154
155
 
155
156
  If no credential is missing, report no pause and continue.
156
157
 
157
- Then run `npx --prefer-offline --yes copilotkit@4.21.0 onboard read proof/round-trip`.
158
+ Then run `npx --prefer-offline --yes copilotkit@4.23.0 onboard read proof/round-trip`.
158
159
 
159
160
  If the command fails, report its exact error and do not claim that the starter is ready.
160
161
  Then run
161
- `npx --prefer-offline --yes copilotkit@4.21.0 onboard read stopped/run-failed`. The starter is one this
162
+ `npx --prefer-offline --yes copilotkit@4.23.0 onboard read stopped/run-failed`. The starter is one this
162
163
  graph ships and the stack was chosen from its own supported list, so a command that
163
164
  returned an error is a run that broke, not a setup this release does not support.
@@ -41,7 +41,7 @@ put to them, stop here and send the report below.
41
41
  If they approve it, make that one fix and nothing else. Then come back into this run:
42
42
 
43
43
  ```text
44
- npx --prefer-offline --yes copilotkit@4.21.0 onboard resume --message "<approval>"
44
+ npx --prefer-offline --yes copilotkit@4.23.0 onboard resume --message "<approval>"
45
45
  ```
46
46
 
47
47
  Put the developer's approval in `--message`, in one or two sentences: the fix they
@@ -64,7 +64,7 @@ Send one short report. The friction command follows the telemetry setting the de
64
64
  already chose, so it needs no separate question.
65
65
 
66
66
  ```text
67
- npx --prefer-offline --yes copilotkit@4.21.0 onboard friction --phase stop --category <slug> --message "<sentences>"
67
+ npx --prefer-offline --yes copilotkit@4.23.0 onboard friction --phase stop --category <slug> --message "<sentences>"
68
68
  ```
69
69
 
70
70
  `--message` takes one or two sentences: the step you stopped at and what stopped
@@ -12,6 +12,13 @@ the documentation example differs from that purpose, the project wins.
12
12
  Read only inside the project directory. Answer an API question from the documentation
13
13
  URLs you were given, not from another checkout on this machine.
14
14
 
15
+ The main coding agent also gives you the findings of the framework route, such as how the
16
+ agent connects or whether a subclass needs a `clone()` override. Some of those rules, such
17
+ as the `clone()` override, are on no documentation page. Use the findings of the framework
18
+ route as they are. Do not confirm them again from the source of an installed package. Read
19
+ the project's own code only to apply them, for example to find the fields that a `clone()`
20
+ override copies.
21
+
15
22
  List the required credential variable names. Do not read or return credential values.
16
23
  Preserve each agent or frontend that already exists.
17
24
 
@@ -84,24 +91,32 @@ reference naming hosts that route nothing, and it requires the platform URLs the
84
91
  documentation calls optional. A run that reads that reference configures the runtime
85
92
  against a dead host, and the failure arrives as an empty-body 404 with no cause named.
86
93
 
87
- If any `@copilotkit/*` dependency is below 1.70.0, plan to upgrade every `@copilotkit/*`
88
- dependency to its latest published version. Packages that share a version line must end
89
- on the same version. Never force a package onto a version line it does not publish on.
90
- Resolve each latest version at run time rather than from a remembered version number.
91
- Where every `@copilotkit/*` dependency already meets that floor, plan no dependency
92
- change.
94
+ Ask the CLI for the dependency upgrade, from the target directory:
93
95
 
94
- The floor is 1.70.0 because the runtime resolves managed Intelligence entitlement
95
- authority from that version. A runtime below it reports its license from a self-hosted
96
- token alone. A managed project holds no such token, so the threads drawer this conversion
97
- adds lists nothing even after every command-line check passes.
96
+ ```text
97
+ npx --prefer-offline --yes copilotkit@4.23.0 onboard upgrade-plan --json
98
+ ```
98
99
 
99
- The upgrade moves more than the `@copilotkit/*` namespace. Intersect the dependencies the
100
- app declares directly with what the target `@copilotkit/*` versions require, and name in the
101
- plan every one whose declared range excludes the version the target needs, with the version
102
- it moves to. The `@ag-ui/*` packages are the CopilotKit protocol layer, on their own version
103
- line, so they are the ones this meets most often, but the rule is the intersection rather
104
- than that namespace.
100
+ It reads the installed tree and the registry. Read `status`:
101
+
102
+ - `none-needed`: every `@copilotkit/*` package already meets the 1.70.0 floor. Plan no
103
+ dependency change.
104
+ - `upgrade`: plan `moves` as their own step, before the Intelligence runtime wiring. Each
105
+ move names the app, the declared range, and the exact version to declare. A
106
+ `required-by` move is a direct dependency the target CopilotKit version needs at a
107
+ version the app's range excludes. Plan to re-run the recorded baseline checks right
108
+ after the upgrade. The revert is `onboard upgrade-plan --revert`, which restores the
109
+ manifests and lockfiles the command snapshotted.
110
+ - `blocked`: `blockedBy` names a package whose own declaration excludes the target.
111
+ Return `Status: blocked` and name `unsupported/no-validated-path` as the outcome.
112
+ - `undetermined`: the CLI did not reach the registry. Return `Status: blocked` with the
113
+ `detail`.
114
+
115
+ The floor is 1.70.0 because the runtime resolves managed Intelligence entitlement
116
+ authority from that version. Below it, the Intelligence features stay dark with no error.
117
+ An exact pin is usually deliberate, so each move is a step the developer approves, not a
118
+ repair the run invents halfway through. Where the developer needs a pin held, return
119
+ `Status: blocked` and name `unsupported/no-validated-path` as the outcome.
105
120
 
106
121
  A package the plan adds that a `@copilotkit/*` or `@ag-ui/*` package also depends on, such
107
122
  as `zod`, takes the version that tree resolves, not the latest published one. A peer range
@@ -110,29 +125,7 @@ does not settle it. `@copilotkit/react-core@1.75.0` declares `zod >=3.25`, while
110
125
  Read the range with `npm view @ag-ui/core@<version> dependencies`, for the `@ag-ui/core`
111
126
  version the target `@copilotkit/*` release requires, and plan the latest version inside it.
112
127
  Where the project already depends on that package, keep its version if that tree accepts
113
- it. Otherwise name the move as above.
114
-
115
- The intersection includes what a `@copilotkit/*` package on its own version line declares
116
- about the `1.x` line. `@copilotkit/angular` is the one that has this, and its declaration
117
- is materialized at publish time rather than written in the repository, so read it from the
118
- registry rather than from any checkout. Where it cannot be satisfied by the version the
119
- floor requires, there is no upgrade to plan: return `Status: blocked` and name
120
- `unsupported/no-validated-path` as the outcome.
121
-
122
- An exact pin is usually deliberate. Naming the move here is what makes it a step the
123
- developer approved rather than a repair the run invents halfway through. Do not move a pin
124
- the developer did not approve moving. Where the developer needs one held, return
125
- `Status: blocked` and name `unsupported/no-validated-path` as the outcome. The upgrade
126
- step's revert is the way back.
127
-
128
- Name the exact version the target requires. A caret does not stand in for it below `0.1.0`:
129
- `^0.0.59` admits only `0.0.59`, so a pin rewritten that way is the same pin under a
130
- different spelling, and it breaks again as soon as CopilotKit moves to `0.0.60`.
131
-
132
- Plan the upgrade as its own step before the Intelligence runtime wiring, and plan to
133
- re-run the recorded baseline checks immediately after it. Name the revert: restore the
134
- manifest and lockfile to their recorded state and report the break, rather than wiring
135
- Intelligence onto a baseline the upgrade broke.
128
+ it. Otherwise name the move in the plan, with the version it moves to.
136
129
 
137
130
  Where the SDK requires an application-level value that the repository cannot supply, such
138
131
  as an end-user identity for threads, use one clearly marked local placeholder and name what
@@ -183,7 +176,7 @@ here is work the developer did not ask for.
183
176
  Plan the threads drawer itself: add it from the selected drawer page, where this frontend
184
177
  does not already render one. Where this journey's frontend framework ships no threads
185
178
  drawer -- React Native --, plan that the thread is proved by
186
- `npx --prefer-offline --yes copilotkit@4.21.0 verify --round-trip`, which needs no browser. Do not plan a
179
+ `npx --prefer-offline --yes copilotkit@4.23.0 verify --round-trip`, which needs no browser. Do not plan a
187
180
  step that opens the managed Intelligence dashboard.
188
181
 
189
182
  ## Name the files the run writes itself
@@ -110,44 +110,32 @@ upgrade, Intelligence runtime wiring, and the approved threads drawer: the drawe
110
110
  in that list because the approved plan already named it, not because this step invents a
111
111
  new one. After wiring, run the recorded baseline checks and report any regression.
112
112
 
113
- Where the plan names a CopilotKit dependency upgrade:
114
-
115
- 1. Apply the planned CopilotKit dependency upgrade before you wire Intelligence.
116
- 2. Report each `@copilotkit/*` version before and after the upgrade.
117
- 3. Prove that every dependency the app declares directly resolves to exactly one version in
118
- the installed tree.
119
- 4. Then re-run the recorded baseline checks.
120
-
121
- The package manager does not fail on this. Where the app pins a package exactly and the
122
- upgraded CopilotKit needs a different version of it, npm keeps the pin at the top of the
123
- tree and nests the other copy, so the install exits zero and `--dry-run` shows nothing.
124
- Two copies of a package that carries types fail the type check in some field that has
125
- nothing to do with either version, so the developer reads it as a bug in their own code.
126
- Read the installed tree, not the manifest: ask the package manager how many versions of
127
- each direct dependency it resolved, with `npm ls <name>`, `pnpm why <name>`, or the
128
- equivalent for the lockfile this project uses. Direct dependencies are a short list, and
129
- they are the ones whose duplicate breaks a build, so this catches `react`, `zod`,
130
- `graphql`, and the next protocol package as well as `@ag-ui/*`.
131
-
132
- `@copilotkit/*` counts here, not only third-party packages. `@copilotkit/angular`
133
- publishes on a version line of its own and declares a `@copilotkit/core` chosen when that
134
- Angular release was cut, so the upgrade can install one `@copilotkit/core` while the
135
- Angular package demands another. That is the case this catches most expensively, because
136
- it fails in the threads drawer rather than at the install.
137
-
138
- If one of them resolves to more than one version, restore the manifest and lockfile to
139
- their recorded state, leave Intelligence unwired, and report which package resolved to more
140
- than one version, which versions, and which declared range held the top of the tree. Then
141
- end your turn. Do not wire Intelligence onto a tree carrying two copies of a package.
142
-
143
- Never add an `overrides`, `resolutions`, or `pnpm.overrides` block to collapse the two
144
- copies. It forces a version the developer did not approve onto their whole tree, and it
145
- turns a reportable mismatch between two published packages into a local workaround nobody
146
- else can see.
147
-
148
- If the baseline regresses, restore the manifest and lockfile to their recorded state, leave
149
- Intelligence unwired, and report the regression with the failing check. Then end your
150
- turn. Where the plan names no dependency change, report that the installed versions met
113
+ Where the plan names a CopilotKit dependency upgrade, apply its moves before you wire
114
+ Intelligence: declare each exact version in its app's manifest, then install with the
115
+ project's package manager. Then check the installed tree:
116
+
117
+ ```text
118
+ npx --prefer-offline --yes copilotkit@4.23.0 onboard upgrade-plan --check --json
119
+ ```
120
+
121
+ `single` means every direct dependency resolved to one version. `duplicates` names each
122
+ package that resolved to more than one, and the versions. `no-tree` means the apps in
123
+ `unread` have no `node_modules` to read. Install first. Under Yarn Plug'n'Play, ask
124
+ `yarn why <name>` for each direct dependency. The install does not fail on this. npm
125
+ keeps a pin at the top of the tree and nests the copy the upgrade needs. Two copies of a
126
+ package that carries types then fail the type check in an unrelated field. Then re-run
127
+ the recorded baseline checks.
128
+
129
+ If the check finds duplicates or the baseline regresses, put the manifests and lockfiles
130
+ back, leave Intelligence unwired, and report what failed:
131
+
132
+ ```text
133
+ npx --prefer-offline --yes copilotkit@4.23.0 onboard upgrade-plan --revert --json
134
+ ```
135
+
136
+ Then end your turn. Never add an `overrides`, `resolutions`, or `pnpm.overrides` block to
137
+ collapse two copies. It forces a version the developer did not approve onto their whole
138
+ tree. Where the plan names no dependency change, report that the installed versions met
151
139
  the floor.
152
140
 
153
141
  When the documentation uses the framework's scaffolder,
@@ -181,6 +169,38 @@ constructor for it, and never write an id the plan does not name: a selector poi
181
169
  id the platform does not hold answers `LEARNING_CONTAINER_NOT_FOUND` on every thread create.
182
170
  Where the plan names no container, write no selector.
183
171
 
172
+ ## Install the CopilotKit Skills
173
+
174
+ The main coding agent gives you the developer's answer on the Skills install. Where the
175
+ whole-plan implementation handoff carries no answer, read the approved plan. Approving the
176
+ plan without a word on the Skills approves the install. A repair handoff that carries no
177
+ Skills answer never installs them.
178
+
179
+ Where `.agents/skills` already holds the CopilotKit skills, do not install them again.
180
+ Report that they are in place.
181
+
182
+ Install the Skills only when the developer approved them. Where the developer declined
183
+ them, do not install them, and do not call that a change from the plan. Report in the
184
+ Validation section that the developer declined them.
185
+
186
+ Install them after you run the full validation list. Tell the developer what the skills
187
+ install writes into this project before you run it: a `.agents/skills` directory holding
188
+ one folder per CopilotKit skill, linked into `.claude/skills`. Both sit in the working tree,
189
+ so the install shows up in `git status` and can land in a commit. You cannot know whether
190
+ this project keeps those directories in version control, so name them before you write them
191
+ rather than after.
192
+
193
+ Then run `npx skills add CopilotKit/CopilotKit/skills -y` in the target app directory.
194
+
195
+ The plan names both directories under `Files the run writes itself`, so they are not
196
+ departures. Name them under Files changed. Do not register an MCP server: the Skills read
197
+ the CopilotKit documentation without one.
198
+
199
+ Check whether the install succeeded, and record the command result in the Validation
200
+ section. A failed install does not change your status. Report it and continue.
201
+
202
+ ## Report the result
203
+
184
204
  Report the runtime constructor you wrote. Name whether it passes `intelligence` or
185
205
  `runner`, and whether it carries `getLearningContainerId`, with the id it returns.
186
206
  A runtime built with `runner` is the SSE runtime and never reads the credential,
@@ -7,7 +7,7 @@ Work only on the packet you were assigned. Inspect the repository without changi
7
7
  Run this first, from the target project directory:
8
8
 
9
9
  ```text
10
- npx --prefer-offline --yes copilotkit@4.21.0 onboard inspect --json
10
+ npx --prefer-offline --yes copilotkit@4.23.0 onboard inspect --json
11
11
  ```
12
12
 
13
13
  It answers the deterministic half of both packets exactly, from the same code
@@ -50,6 +50,9 @@ Find evidence for:
50
50
  - whether the target project directory contains any entries
51
51
  - any existing agent framework and frontend, confirming or contradicting the
52
52
  `detection` block the CLI proposed
53
+ - for an existing agent in no listed framework, whether it speaks AG-UI: a class that
54
+ extends `AbstractAgent` and implements `run`, or an endpoint that streams AG-UI events.
55
+ Cite the file
53
56
  - current CopilotKit integration and configuration
54
57
  - authentication boundaries
55
58
  - initial changed and untracked paths, without file contents
@@ -32,7 +32,7 @@ Prove the live runtime in this order:
32
32
  4. Confirm from project files that the runtime constructor passes a `runner` option rather
33
33
  than an `intelligence` option. A package, import, project file, or key is not use proof.
34
34
  5. Run
35
- `npx --prefer-offline --yes copilotkit@4.21.0 verify --expect-runtime oss --round-trip --agent <expected-agent-id> --json`,
35
+ `npx --prefer-offline --yes copilotkit@4.23.0 verify --expect-runtime oss --round-trip --agent <expected-agent-id> --json`,
36
36
  with the runtime URL or auth header options that this project needs. Require exit zero
37
37
  and the JSON `ok` field to be `true`.
38
38
  6. Drive one real request through the existing frontend, CopilotKit runtime, and expected