copilotkit 4.26.0 → 4.28.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 +418 -40
  2. package/cli-build-info.json +7 -7
  3. package/index.js +15343 -9085
  4. package/onboarding/index.json +3 -2
  5. package/onboarding/prompts/authenticate/start.md +48 -56
  6. package/onboarding/prompts/conversion/plan.md +3 -3
  7. package/onboarding/prompts/credentials/finalize-plan.md +42 -29
  8. package/onboarding/prompts/credentials/plan.md +50 -34
  9. package/onboarding/prompts/credentials/settle-credentials.md +38 -14
  10. package/onboarding/prompts/credentials/write-plan.md +122 -47
  11. package/onboarding/prompts/deployment/choose-local.md +17 -20
  12. package/onboarding/prompts/deployment/local-evaluation.md +45 -21
  13. package/onboarding/prompts/fallback/best-effort.md +14 -16
  14. package/onboarding/prompts/feature/a2ui/implement.md +4 -4
  15. package/onboarding/prompts/feature/a2ui/plan.md +3 -3
  16. package/onboarding/prompts/feature/a2ui/proof.md +5 -5
  17. package/onboarding/prompts/feature/a2ui/start.md +10 -8
  18. package/onboarding/prompts/feature/channels/implement.md +11 -8
  19. package/onboarding/prompts/feature/channels/plan.md +15 -7
  20. package/onboarding/prompts/feature/channels/proof.md +8 -7
  21. package/onboarding/prompts/feature/channels/start.md +11 -10
  22. package/onboarding/prompts/feature/chat-suggestions/implement.md +4 -4
  23. package/onboarding/prompts/feature/chat-suggestions/plan.md +3 -3
  24. package/onboarding/prompts/feature/chat-suggestions/proof.md +5 -5
  25. package/onboarding/prompts/feature/chat-suggestions/start.md +10 -8
  26. package/onboarding/prompts/feature/complete.md +2 -2
  27. package/onboarding/prompts/feature/learning/implement.md +14 -12
  28. package/onboarding/prompts/feature/learning/plan.md +4 -4
  29. package/onboarding/prompts/feature/learning/proof.md +24 -14
  30. package/onboarding/prompts/feature/learning/start.md +8 -8
  31. package/onboarding/prompts/feature/open-generative-ui/implement.md +4 -4
  32. package/onboarding/prompts/feature/open-generative-ui/plan.md +3 -3
  33. package/onboarding/prompts/feature/open-generative-ui/proof.md +5 -5
  34. package/onboarding/prompts/feature/open-generative-ui/start.md +10 -8
  35. package/onboarding/prompts/feature/realtime-sync/implement.md +7 -5
  36. package/onboarding/prompts/feature/realtime-sync/plan.md +3 -3
  37. package/onboarding/prompts/feature/realtime-sync/proof.md +5 -5
  38. package/onboarding/prompts/feature/realtime-sync/start.md +7 -7
  39. package/onboarding/prompts/feature/rich-threads/implement.md +8 -6
  40. package/onboarding/prompts/feature/rich-threads/plan.md +3 -3
  41. package/onboarding/prompts/feature/rich-threads/proof.md +5 -5
  42. package/onboarding/prompts/feature/rich-threads/start.md +7 -7
  43. package/onboarding/prompts/feature/stop.md +4 -4
  44. package/onboarding/prompts/feature/voice/implement.md +4 -4
  45. package/onboarding/prompts/feature/voice/plan.md +4 -4
  46. package/onboarding/prompts/feature/voice/proof.md +5 -5
  47. package/onboarding/prompts/feature/voice/start.md +10 -8
  48. package/onboarding/prompts/framework/ag2.md +20 -5
  49. package/onboarding/prompts/framework/agno.md +25 -9
  50. package/onboarding/prompts/framework/built-in.md +21 -6
  51. package/onboarding/prompts/framework/claude-sdk-python.md +11 -5
  52. package/onboarding/prompts/framework/claude-sdk-typescript.md +13 -6
  53. package/onboarding/prompts/framework/crewai-flows.md +24 -10
  54. package/onboarding/prompts/framework/custom-ag-ui.md +62 -28
  55. package/onboarding/prompts/framework/deep-agents.md +26 -9
  56. package/onboarding/prompts/framework/google-adk.md +18 -5
  57. package/onboarding/prompts/framework/langgraph-fastapi.md +20 -5
  58. package/onboarding/prompts/framework/langgraph-python.md +20 -5
  59. package/onboarding/prompts/framework/langgraph-typescript.md +27 -7
  60. package/onboarding/prompts/framework/llamaindex.md +24 -8
  61. package/onboarding/prompts/framework/mastra.md +21 -8
  62. package/onboarding/prompts/framework/ms-agent-dotnet.md +24 -6
  63. package/onboarding/prompts/framework/ms-agent-harness-dotnet.md +24 -5
  64. package/onboarding/prompts/framework/ms-agent-python.md +21 -5
  65. package/onboarding/prompts/framework/pydantic-ai.md +20 -5
  66. package/onboarding/prompts/framework/strands-python.md +27 -12
  67. package/onboarding/prompts/framework/strands-typescript.md +27 -12
  68. package/onboarding/prompts/frontend/angular.md +4 -4
  69. package/onboarding/prompts/frontend/nextjs.md +4 -4
  70. package/onboarding/prompts/frontend/plan.md +21 -13
  71. package/onboarding/prompts/frontend/react-native.md +3 -3
  72. package/onboarding/prompts/frontend/react-spa.md +3 -3
  73. package/onboarding/prompts/frontend/vue.md +3 -3
  74. package/onboarding/prompts/implementation/build-and-validate.md +27 -20
  75. package/onboarding/prompts/proof/complete.md +9 -7
  76. package/onboarding/prompts/proof/oss-baseline.md +9 -6
  77. package/onboarding/prompts/proof/round-trip.md +18 -20
  78. package/onboarding/prompts/research/gather.md +38 -10
  79. package/onboarding/prompts/research/merge.md +3 -3
  80. package/onboarding/prompts/research/preflight.md +2 -2
  81. package/onboarding/prompts/research/route.md +10 -4
  82. package/onboarding/prompts/setup/questions.md +54 -202
  83. package/onboarding/prompts/starter/clone.md +141 -57
  84. package/onboarding/prompts/stopped/run-failed.md +5 -3
  85. package/onboarding/prompts/subagent/create-plan.md +73 -22
  86. package/onboarding/prompts/subagent/implement-and-validate.md +27 -34
  87. package/onboarding/prompts/subagent/inspect-repository.md +3 -2
  88. package/onboarding/prompts/subagent/prove-oss-baseline.md +10 -5
  89. package/onboarding/prompts/subagent/prove-round-trip.md +46 -54
  90. package/onboarding/prompts/unsupported/no-validated-path.md +5 -4
  91. package/package.json +1 -1
  92. package/release/release-tool.js +19 -2
@@ -1,5 +1,5 @@
1
1
  {
2
- "graphTree": "62f012b65ba17a579b853bdbbd55bc81dc4759ac",
2
+ "graphTree": "7638f7b001415b1dbd5bdd5204b9c296810439f7",
3
3
  "intentRoots": {
4
4
  "add-a2ui": "feature/a2ui/start",
5
5
  "add-chat-suggestions": "feature/chat-suggestions/start",
@@ -9,7 +9,7 @@
9
9
  "add-rich-threads": "feature/rich-threads/start",
10
10
  "add-voice": "feature/voice/start"
11
11
  },
12
- "packageSpec": "copilotkit@4.26.0",
12
+ "packageSpec": "copilotkit@4.28.0",
13
13
  "root": "authenticate/start",
14
14
  "prompts": [
15
15
  {
@@ -620,6 +620,7 @@
620
620
  {
621
621
  "edges": [
622
622
  "subagent/inspect-repository",
623
+ "setup/questions",
623
624
  "research/preflight",
624
625
  "stopped/run-failed"
625
626
  ],
@@ -6,34 +6,46 @@ This run executes the CopilotKit CLI through `npx`.
6
6
  It spawns read-only inspection subagents inside the target project. It sends checkpoints
7
7
  and optional friction reports to CopilotKit under the developer's telemetry setting. It
8
8
  reads nothing outside the project
9
- directory and changes files only after the developer approves a written plan. CopilotKit
9
+ directory. It changes files only after writing the plan, and asks before any change the
10
+ plan says needs the developer's approval. CopilotKit
10
11
  Intelligence has a free Developer plan, and this run needs no paid subscription.
11
12
 
12
13
  ## Command approvals
13
14
 
14
15
  Run each CLI call exactly as written, as its own command: no pipe, `tee`, `&&`, redirect,
15
16
  or variable prefix. Every CLI call in this run matches the prefix rule
16
- `["npx", "--prefer-offline", "--yes", "copilotkit@4.26.0"]`. If a command can request
17
- escalation with a prefix rule, request this one on the `onboard identify` call. If your
18
- harness asks the developer to approve commands, tell them one approval of that prefix covers
19
- every CLI call. Say then that the install, the dev servers, `curl` to the local app, and
17
+ `["npx", "--prefer-offline", "--yes", "copilotkit@4.28.0"]`.
18
+
19
+ <!-- sandboxed-harness -->
20
+
21
+ If a command can request escalation with a prefix rule, request this one on the
22
+ `onboard identify` call.
23
+
24
+ <!-- /sandboxed-harness -->
25
+
26
+ If your harness asks the developer to approve commands, tell them one approval of that
27
+ prefix covers every CLI call. Say then that the install, the dev servers, `curl` to the local app, and
20
28
  `ps`, `lsof`, and `kill` ask for approval later.
21
29
 
22
30
  Never add or edit a permission rule or a settings file yourself. That choice belongs to
23
31
  the developer.
24
32
 
25
33
  If your harness refuses a CLI call without asking the developer, do not retry it or run it
26
- another way. Report the pause: `npx --prefer-offline --yes copilotkit@4.26.0 onboard checkpoint --phase awaiting-developer`.
34
+ another way. Report the pause: `npx --prefer-offline --yes copilotkit@4.28.0 onboard checkpoint --phase awaiting-developer`.
27
35
  Name the refused command, ask the developer to approve it or to switch to a
28
36
  mode that asks them, and end your turn. When they answer, run it once more.
29
37
  That refusal is a pause, not a stop.
30
38
 
31
39
  ## First, say which coding agent you are
32
40
 
33
- Run this first, before the welcome message below:
41
+ Before you run any other command, write this one line in your own reply: "Setting up
42
+ CopilotKit: I check your sign-in and your project, then show you the setup." The developer
43
+ does not see your tool output, and the welcome comes later, with the setup message.
44
+
45
+ Then run this:
34
46
 
35
47
  ```text
36
- npx --prefer-offline --yes copilotkit@4.26.0 onboard identify --coding-agent <coding-agent-slug> --model <model-id> --model-family <model-family>
48
+ npx --prefer-offline --yes copilotkit@4.28.0 onboard identify --coding-agent <coding-agent-slug> --model <model-id> --model-family <model-family>
37
49
  ```
38
50
 
39
51
  Report your product slug, such as `codex` or `claude-code`.
@@ -58,36 +70,20 @@ the whole run. Every later command reports against it.
58
70
 
59
71
  `onboard read research/gather` gives the rules for the rest of the run.
60
72
 
61
- Send this exact message once, as your first message in this onboarding run, before
62
- anything else:
63
-
64
- Welcome to CopilotKit! By the end of this run, your application talks to an AI agent and
65
- keeps each conversation as Rich Threads. Users can return to earlier work. Where enabled,
66
- Automatic Learning then helps your agent improve from that history: it finds usage patterns
67
- and proposes reusable Skills, and you approve which Skills it gets.
68
-
69
- I will check sign-in, inspect your project, recommend a setup, and show you a plan before
70
- I change files. After you approve the plan, I will build the integration, prove the full
71
- round trip, and leave the app running with its URLs.
72
-
73
- Everything I need from you comes before that approval: sign-in, a few short setup questions,
74
- and the plan itself. If I need you to approve a command, or something blocks me, I will ask
75
- you here. Otherwise you hear from me next when the app is running and I hand you its URLs.
76
- To self-host on your machine with Docker, say so before you sign in.
77
-
78
- That message belongs to the run. Send it only once, including after a second read of this prompt.
79
- Then run `npx --prefer-offline --yes copilotkit@4.26.0 onboard checkpoint --phase welcome-sent`.
73
+ Do not write a welcome of your own. The CLI puts the run's welcome at the top of the setup
74
+ message, which says to write it in your own reply, because the developer does not see your
75
+ tool output.
80
76
 
81
77
  ## Report a stop, wherever it happens
82
78
 
83
79
  If you stop this run at any point, send one short report before you stop. This includes
84
80
  unexpected stops and stops caused by your harness.
85
81
  A turn that ends while the run waits is a pause, not a stop, even when your harness ends it.
86
- Report the pause: `npx --prefer-offline --yes copilotkit@4.26.0 onboard checkpoint --phase awaiting-developer`.
82
+ Report the pause: `npx --prefer-offline --yes copilotkit@4.28.0 onboard checkpoint --phase awaiting-developer`.
87
83
  A terminal that sends the report itself, or says to file none, overrides this.
88
84
 
89
85
  ```text
90
- npx --prefer-offline --yes copilotkit@4.26.0 onboard friction --phase stop --category <slug> --message "<sentences>"
86
+ npx --prefer-offline --yes copilotkit@4.28.0 onboard friction --phase stop --category <slug> --message "<sentences>"
91
87
  ```
92
88
 
93
89
  `--message` takes one or two sentences: the step you stopped at and what stopped it.
@@ -105,15 +101,15 @@ rule that stopped you says next: send the report, then stop.
105
101
  Take the local route only when the developer already asked to run CopilotKit locally,
106
102
  with Docker, or self-hosted: in their request, the copied prompt, or a later reply, or
107
103
  when this run already recorded local. Then run
108
- `npx --prefer-offline --yes copilotkit@4.26.0 onboard read deployment/choose-local` instead.
104
+ `npx --prefer-offline --yes copilotkit@4.28.0 onboard read deployment/choose-local` instead.
109
105
 
110
106
  Otherwise keep managed. Do not ask the developer to choose. Run
111
- `npx --prefer-offline --yes copilotkit@4.26.0 onboard deployment --choice managed`, then continue with
107
+ `npx --prefer-offline --yes copilotkit@4.28.0 onboard deployment --choice managed`, then continue with
112
108
  “Check sign-in”. If it refuses because of a local stack, take the local route.
113
109
 
114
110
  ## Check sign-in
115
111
 
116
- Run `npx --prefer-offline --yes copilotkit@4.26.0 login --json` before any project work. It checks the
112
+ Run `npx --prefer-offline --yes copilotkit@4.28.0 login --json --onboarding` before any project work. It checks the
117
113
  session and starts sign-in only as needed. Treat this as a long-lived
118
114
  streaming process. Do not wait for the command to exit before you read its standard output.
119
115
 
@@ -121,40 +117,36 @@ Read each JSON Lines record as it arrives:
121
117
 
122
118
  1. If the process emits `type: completed` without an `authentication_url`, continue: the
123
119
  existing session is valid.
124
- 2. If the process emits `authentication_url`, read the first `authentication_url` without
125
- changing it. The process is still running.
126
- When that first URL arrives, send this exact message once. Add no feature list or other
127
- explanation:
128
-
129
- I am opening a sign-in page. Signing in gives this project a managed CopilotKit project
130
- and its API key. That key is what lets your users reopen past conversations. You can
131
- remove it later to disconnect this workspace.
132
-
133
- If it carries `user_code`, add: `Check that the page shows this code: <user_code>`.
134
-
135
- 3. The CLI opens the page in the default browser itself when it can, and the
136
- `action_required` record says whether it did. With `"browser_opened": true`, do not open
137
- it again. With `"browser_opened": false`, show the clickable URL to the developer and ask
138
- them to finish sign-in there. Your own built-in browser
139
- does not carry the session the developer already signed in with, so do not use it.
120
+ 2. If the process emits `authentication_url`, the developer must sign in. The process is
121
+ still running.
122
+ 3. The CLI does not open the page. The first `action_required` record carries a `message`:
123
+ why to sign in, then the link and the code. Write that `message` in your own reply, word
124
+ for word, and add nothing else. The developer does not see your tool output. Do not open
125
+ the page yourself: the developer opens it from your message. Then report the pause with
126
+ `npx --prefer-offline --yes copilotkit@4.28.0 onboard checkpoint --phase awaiting-developer` and end your
127
+ turn. Until the developer says they signed in, send them nothing more. When the research or
128
+ another helper returns, record what it found and end your turn without a message. Your own
129
+ built-in browser does not carry the session the developer already signed in with,
130
+ so do not use it.
140
131
  A later `authentication_url` record with `"renewed": true` means the earlier code expired.
141
- Do not resend the sign-in message. Show only the new code, and the URL if
142
- `browser_opened` is false.
132
+ Write its `message` the same way.
143
133
  4. Keep monitoring the same login process. Do not start a second login command.
144
134
  5. Go past the research only after that same process emits `type: completed`.
145
135
  6. On `type: failed` with `reason: expired` or `reason: renewal_failed`, ask once whether to
146
- retry. If yes, start one new `login --json`. Use `--force` only when the developer asks.
136
+ retry. If yes, start one new `login --json --onboarding`. Use `--force` only when the
137
+ developer asks.
147
138
  7. If that process emits `type: failed`, report the error and stop onboarding. On
148
139
  `reason: repeated_expiry`, rerun `login` with `--force` only if the developer asks.
149
140
 
150
- On `type: completed`, run `npx --prefer-offline --yes copilotkit@4.26.0 onboard checkpoint --phase sign-in-settled`
141
+ On `type: completed`, run `npx --prefer-offline --yes copilotkit@4.28.0 onboard checkpoint --phase sign-in-settled`
151
142
  before you continue.
152
143
 
153
144
  If your harness ends the login process or your turn before the process emits
154
- `type: completed` or `type: failed`, that is a pause, not a failed sign-in. Report the pause: `npx --prefer-offline --yes copilotkit@4.26.0 onboard checkpoint --phase awaiting-developer`.
145
+ `type: completed` or `type: failed`, that is a pause, not a failed sign-in. Report the pause: `npx --prefer-offline --yes copilotkit@4.28.0 onboard checkpoint --phase awaiting-developer`.
155
146
  If the process
156
147
  still runs, end your turn and wait for the developer to say they signed in, then read the
157
- same process. If the process ended without emitting `type: failed`, run `login --json`
148
+ same process. If the process ended without emitting `type: failed`, run
149
+ `login --json --onboarding`
158
150
  again and handle a new `authentication_url` as above. Step 4 forbids a second login only while the first one runs.
159
151
 
160
152
  Do not use `whoami` for this check. Do not put account tokens or credentials in the
@@ -162,9 +154,9 @@ conversation.
162
154
 
163
155
  Research reads only this project and needs no account. Start it as soon as the session is
164
156
  valid or the developer has the sign-in page, and keep monitoring the login process while it
165
- runs: `npx --prefer-offline --yes copilotkit@4.26.0 onboard read research/gather`. If this run already
157
+ runs: `npx --prefer-offline --yes copilotkit@4.28.0 onboard read research/gather`. If this run already
166
158
  started the research, do not start it again.
167
159
 
168
160
  If sign-in stops onboarding, run
169
- `npx --prefer-offline --yes copilotkit@4.26.0 onboard read stopped/run-failed`. It does not judge
161
+ `npx --prefer-offline --yes copilotkit@4.28.0 onboard read stopped/run-failed`. It does not judge
170
162
  this project's stack.
@@ -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 --prefer-offline --yes copilotkit@4.26.0 verify --round-trip`, which sends a
103
+ fifth item is proved by `npx --prefer-offline --yes copilotkit@4.28.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 --prefer-offline --yes copilotkit@4.26.0 onboard read credentials/finalize-plan`.
119
+ Then run `npx --prefer-offline --yes copilotkit@4.28.0 onboard read credentials/finalize-plan`.
120
120
 
121
121
  If a selected page does not load after the second method, run
122
- `npx --prefer-offline --yes copilotkit@4.26.0 onboard read unsupported/no-validated-path`.
122
+ `npx --prefer-offline --yes copilotkit@4.28.0 onboard read unsupported/no-validated-path`.
@@ -1,23 +1,26 @@
1
1
  # Select the Intelligence project
2
2
 
3
3
  For a recorded local choice, run
4
- `npx --prefer-offline --yes copilotkit@4.26.0 onboard read deployment/local-evaluation`.
5
- That path obtains approval and connects the local project. Skip hosted selection.
4
+ `npx --prefer-offline --yes copilotkit@4.28.0 onboard read deployment/local-evaluation`.
5
+ That path connects the local project with the approval the setup message took.
6
+ Skip hosted selection.
6
7
  Keep the implementation and feature-proof requirements.
7
8
 
8
9
  Use the selected framework, frontend, model vendor, model, documentation URLs, and
9
- repository findings. On a conversion, use the values the conversion prompt recorded, and
10
+ repository findings. When the framework, frontend or vendor is not in your context, read it
11
+ from `npx --prefer-offline --yes copilotkit@4.28.0 onboard setup-answers`, and do not ask again. On a conversion, use the values the conversion prompt recorded, and
10
12
  ask no framework or frontend question. Do not change application code in this phase. Do
11
13
  not read, show, store, or request a secret value.
12
14
 
13
15
  Ask every choice that is still open at this point in one message, one numbered line per
14
- choice, and end your turn to wait for the answer. Put the recommendation first, with its
15
- evidence in one sentence. Keep plan approval a separate, later question.
16
+ choice, and end your turn to wait for the answer. Write each as the options view of `onboard setup-message`
17
+ does: the recommendation first, in bold, and the alternatives on one `Other:` line. Add a short
18
+ reason only when it names something in the developer's own project. Do not ask about the plan here.
16
19
 
17
20
  Before you end your turn to wait for the developer, report the pause:
18
21
 
19
22
  ```text
20
- npx --prefer-offline --yes copilotkit@4.26.0 onboard checkpoint --phase awaiting-developer
23
+ npx --prefer-offline --yes copilotkit@4.28.0 onboard checkpoint --phase awaiting-developer
21
24
  ```
22
25
 
23
26
  ## Record the audit cell
@@ -35,12 +38,12 @@ Choose the starting state from the repository findings:
35
38
  A run served `proof/oss-baseline` records one of the last two.
36
39
 
37
40
  ```text
38
- npx --prefer-offline --yes copilotkit@4.26.0 onboard classify --starting-state <starting-state> --agent-framework <agent-framework> --frontend <frontend> --model-vendor <model-vendor> --model-vendor-choice <model-vendor-choice>
41
+ 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>
39
42
  ```
40
43
 
41
- `<model-vendor>` is `openai`, `anthropic`, `google`, or `other`. `<model-vendor-choice>` is
42
- how the framework step chose it: `developer`, `default`, or `existing`. If the run
43
- recorded no vendor, leave out both flags.
44
+ `<model-vendor>` is `openai`, `anthropic`, `google`, `openai-compatible`, or `other`.
45
+ `<model-vendor-choice>` is how the framework step chose it: `developer`, `default`, or
46
+ `existing`. If the run recorded no vendor, leave out both flags.
44
47
 
45
48
  If a value is refused, fix it from the choices the earlier prompts gave, and run the
46
49
  command again.
@@ -52,7 +55,7 @@ runtime `.env` file, that directory is the target, not the repository root. Do n
52
55
  the developer to another terminal.
53
56
 
54
57
  ```text
55
- npx --prefer-offline --yes copilotkit@4.26.0 onboard credentials --json
58
+ npx --prefer-offline --yes copilotkit@4.28.0 onboard credentials --json
56
59
  ```
57
60
 
58
61
  Every credential this run writes goes to the environment path: the target's `.env`, or
@@ -71,11 +74,14 @@ Read `status`:
71
74
 
72
75
  ### Ask the question
73
76
 
74
- Use the project answer that `setup/questions` recorded. A new project runs `--create` with
75
- the name the developer accepted or gave. A new project with no recorded name takes
76
- `suggestedName`. A project they already have runs `--project`. Ask
77
- the developer only when `question.taken` or `question.notFound` is present, or when no
78
- answer was recorded.
77
+ The developer answered this in the setup message. `question.recorded` carries the answer
78
+ the CLI kept: run `--create` with `question.recorded.create`, or `--project` with
79
+ `question.recorded.project`, and do not ask again. Without `question.recorded`, use the
80
+ project answer `setup/questions` gave you. A new project with no recorded name takes
81
+ `suggestedName`. Ask the developer only when `question.taken` or `question.notFound` is
82
+ present, or when no answer was recorded. When they then give another project, record it
83
+ with `npx --prefer-offline --yes copilotkit@4.28.0 onboard setup-answers --create <name>` or
84
+ `--project <slug>`.
79
85
 
80
86
  `project-name` means that no project is bound here, so creating a project for this
81
87
  directory is the default. Ask one question: use `suggestedName`, give another name, or ask
@@ -87,7 +93,7 @@ unless the developer says that it is this app's.
87
93
  Before you end your turn to wait for the developer, report the pause:
88
94
 
89
95
  ```text
90
- npx --prefer-offline --yes copilotkit@4.26.0 onboard checkpoint --phase awaiting-developer
96
+ npx --prefer-offline --yes copilotkit@4.28.0 onboard checkpoint --phase awaiting-developer
91
97
  ```
92
98
 
93
99
  If no developer answers, create with the derived name in `suggestedName`. Never select a
@@ -96,9 +102,9 @@ project from a listing without an answer that names it.
96
102
  `--runtime-url` is the URL port research settled, mount path included:
97
103
 
98
104
  ```text
99
- npx --prefer-offline --yes copilotkit@4.26.0 onboard credentials --create <name> \
105
+ npx --prefer-offline --yes copilotkit@4.28.0 onboard credentials --create <name> \
100
106
  --runtime-url http://localhost:<port>/api/copilotkit --json
101
- npx --prefer-offline --yes copilotkit@4.26.0 onboard credentials --project <slug-or-id> \
107
+ npx --prefer-offline --yes copilotkit@4.28.0 onboard credentials --project <slug-or-id> \
102
108
  --runtime-url http://localhost:<port>/api/copilotkit --json
103
109
  ```
104
110
 
@@ -110,12 +116,12 @@ show only what they asked for, and do not order it by creation time:
110
116
  Before you end your turn to wait for the developer, report the pause:
111
117
 
112
118
  ```text
113
- npx --prefer-offline --yes copilotkit@4.26.0 onboard checkpoint --phase awaiting-developer
119
+ npx --prefer-offline --yes copilotkit@4.28.0 onboard checkpoint --phase awaiting-developer
114
120
  ```
115
121
 
116
122
  ```text
117
- npx --prefer-offline --yes copilotkit@4.26.0 project list --json
118
- npx --prefer-offline --yes copilotkit@4.26.0 project list --search <query> --json
123
+ npx --prefer-offline --yes copilotkit@4.28.0 project list --json
124
+ npx --prefer-offline --yes copilotkit@4.28.0 project list --search <query> --json
119
125
  ```
120
126
 
121
127
  `app-directory` means that the key landed where no app reads it. Pick the directory in
@@ -123,10 +129,14 @@ npx --prefer-offline --yes copilotkit@4.26.0 project list --search <query> --jso
123
129
  the `--project` command from there with `project.slug`. Do not copy or link the key file.
124
130
 
125
131
  `env-file-exposed` means that git tracks the env file the key goes into, or does not
126
- ignore it. So nothing was written. If the developer already approved that line in the setup
127
- message, apply it without asking again. An accepting reply to the setup message never
128
- approves a line with `question.untrack`. Ask it now as its own question, unless the
129
- developer answered that line itself. For a line that is still open, ask the developer
132
+ ignore it. So nothing was written. Read `envFile` from
133
+ `npx --prefer-offline --yes copilotkit@4.28.0 onboard setup-answers`, which keeps the developer's answer to
134
+ that line in the setup message: `approved` approves the change the line asks for,
135
+ `alternative` chose `question.alternative`, and `declined` declined both. Act on it without
136
+ asking again. An accepting reply to the setup message never approves a line with
137
+ `question.untrack`: it takes `question.alternative` when there is one. Without `envFile`,
138
+ ask it now as its own question, and record the answer with `onboard setup-answers
139
+ --env-line <approved|alternative|declined>`. For a line that is still open, ask the developer
130
140
  `question.ask` in those words. When `question.alternative` is present, the question offers
131
141
  two choices. If the developer chose `question.alternative`, here or in the setup message,
132
142
  run the same command again with `question.alternative.rerun` added. The CLI adds
@@ -134,7 +144,7 @@ run the same command again with `question.alternative.rerun` added. The CLI adds
134
144
  If they approve the untrack, add
135
145
  `question.ignoreLine` to `question.ignoreFile`. If `question.untrack` is present, run it
136
146
  too. Or the developer does both. Report the pause with
137
- `npx --prefer-offline --yes copilotkit@4.26.0 onboard checkpoint --phase awaiting-developer`, end your
147
+ `npx --prefer-offline --yes copilotkit@4.28.0 onboard checkpoint --phase awaiting-developer`, end your
138
148
  turn, and wait for the answer. Then run the same command again. Write the key only to
139
149
  `question.file`, or to `question.alternative.file` by rerunning with
140
150
  `question.alternative.rerun`.
@@ -142,9 +152,12 @@ turn, and wait for the answer. Then run the same command again. Write the key on
142
152
  ## Carry the result into the plan
143
153
 
144
154
  - `planChanges`: list each file in the plan. Mark each one that has uncommitted changes, so
145
- the developer sees it when they approve the plan. It does not end the run.
155
+ the developer sees it in the plan. It is a change that needs approval, so the plan asks
156
+ about it. It does not end the run.
157
+ - `backup`: give it to the planning subagent. A `partial` or `failed` backup needs
158
+ approval, because `onboard restore` cannot put back what the backup does not hold.
146
159
  - `project.slug` is the selected project. `"key": "unverified"` means the project was
147
160
  reused. The round-trip proof later runs the authenticated Intelligence checks, so record
148
161
  the reused project credentials as unverified in the plan until those checks pass.
149
162
 
150
- Then run `npx --prefer-offline --yes copilotkit@4.26.0 onboard read credentials/settle-credentials`.
163
+ Then run `npx --prefer-offline --yes copilotkit@4.28.0 onboard read credentials/settle-credentials`.
@@ -1,16 +1,31 @@
1
1
  # Select the agent framework
2
2
 
3
- Use the framework and the model vendor that `setup/questions` recorded. That node asked the
4
- developer, so ask nothing here. A run that proved its existing agent, frontend, and
3
+ First run `npx --prefer-offline --yes copilotkit@4.28.0 onboard setup-answers`. It prints the answers that
4
+ `setup/questions` recorded, even after this conversation lost them. Use its `framework` and
5
+ its `vendor`, with `vendor.choice`, `vendor.baseUrl` and `vendor.modelId`. That node asked
6
+ the developer, so ask nothing here. A run that proved its existing agent, frontend, and
5
7
  CopilotKit integration did not read that node: keep the agent's framework from the
6
- findings, with the vendor `existing`.
8
+ findings. Record it with
9
+ `onboard setup-answers --framework <name> --vendor <vendor> --vendor-choice existing`, or
10
+ with `--vendor other --vendor-choice existing` when the findings do not show its vendor.
11
+ `existing` is a choice, not a vendor.
7
12
 
8
- If no setup answers are in your context at all, as after a context reset or a resumed
9
- session, do not guess. Ask the framework and model provider lines in one message. Recommend
10
- the framework that the repository findings show, or, for an empty project, a documented
11
- default. For the provider, offer the vendors the framework's CopilotKit pages document.
13
+ Ask only for what the record lacks and no other path settles. When it holds no
14
+ framework and no vendor, ask the framework and model provider lines in one message.
15
+ Write each as the options view of `onboard setup-message` does: the recommendation first, in bold, and the
16
+ alternatives on one `Other:` line. When
17
+ it holds a framework and no vendor, ask the model provider line alone: without an answer, the
18
+ framework node uses OpenAI, which the developer never chose. Recommend the framework that
19
+ the repository findings show, or, for an empty project, a documented default. For the
20
+ provider, recommend the framework's default vendor, and offer only the other vendors it takes:
21
+ `onboard setup-answers` refuses any other and names the ones it takes. On most frameworks that is OpenAI or an
22
+ OpenAI-compatible provider: if the developer names Anthropic or Google for a new agent
23
+ there, say that this release supports the row's vendors on that framework, that Anthropic
24
+ and Google come in a later release, and offer the Built-in CopilotKit agent if they need
25
+ them now. Record the answers with
26
+ `onboard setup-answers --framework <name> --vendor <vendor> --vendor-choice <choice>`.
12
27
  Report the pause with
13
- `npx --prefer-offline --yes copilotkit@4.26.0 onboard checkpoint --phase awaiting-developer`, then end your
28
+ `npx --prefer-offline --yes copilotkit@4.28.0 onboard checkpoint --phase awaiting-developer`, then end your
14
29
  turn and wait for the answer. A route that records no framework or vendor on purpose is not
15
30
  this case: an empty project with Slack or Microsoft Teams, a "Project-defined" vendor, or
16
31
  "The agent's own" vendor.
@@ -34,36 +49,37 @@ Microsoft Teams docs page, do not ask the framework question. So does an empty p
34
49
  whose frontend `setup/questions` recorded as Slack or Microsoft Teams: it recorded no
35
50
  framework. The Channel starter brings its own agent, so an answer here decides nothing. Tell the developer that the Channel
36
51
  starter decides the agent, then run
37
- `npx --prefer-offline --yes copilotkit@4.26.0 onboard read frontend/plan`.
52
+ `npx --prefer-offline --yes copilotkit@4.28.0 onboard read frontend/plan`.
38
53
 
39
54
  ## Route on the recorded framework
40
55
 
41
- The framework and vendor come from `setup/questions`, with how the vendor was chosen:
42
- `developer`, `default`, or `existing`. The framework route uses this vendor.
56
+ The framework and vendor come from `onboard setup-answers`, with how the vendor was
57
+ chosen: `developer`, `default`, or `existing`. The framework route uses this vendor.
43
58
 
44
59
  Use exactly one matching internal route:
45
60
 
46
- 1. AG2: `npx --prefer-offline --yes copilotkit@4.26.0 onboard read framework/ag2`
47
- 2. Agno: `npx --prefer-offline --yes copilotkit@4.26.0 onboard read framework/agno`
48
- 3. Built-in CopilotKit agent: `npx --prefer-offline --yes copilotkit@4.26.0 onboard read framework/built-in`
49
- 4. Claude Agent SDK Python: `npx --prefer-offline --yes copilotkit@4.26.0 onboard read framework/claude-sdk-python`
50
- 5. Claude Agent SDK TypeScript: `npx --prefer-offline --yes copilotkit@4.26.0 onboard read framework/claude-sdk-typescript`
51
- 6. CrewAI Flows: `npx --prefer-offline --yes copilotkit@4.26.0 onboard read framework/crewai-flows`
52
- 7. Existing AG-UI agent: `npx --prefer-offline --yes copilotkit@4.26.0 onboard read framework/custom-ag-ui`
53
- 8. Deep Agents: `npx --prefer-offline --yes copilotkit@4.26.0 onboard read framework/deep-agents`
54
- 9. LangGraph Python: `npx --prefer-offline --yes copilotkit@4.26.0 onboard read framework/langgraph-python`
55
- 10. LangGraph FastAPI: `npx --prefer-offline --yes copilotkit@4.26.0 onboard read framework/langgraph-fastapi`
56
- 11. LangGraph TypeScript: `npx --prefer-offline --yes copilotkit@4.26.0 onboard read framework/langgraph-typescript`
57
- 12. LlamaIndex: `npx --prefer-offline --yes copilotkit@4.26.0 onboard read framework/llamaindex`
58
- 13. ADK: `npx --prefer-offline --yes copilotkit@4.26.0 onboard read framework/google-adk`
59
- 14. Microsoft Agent Framework Python: `npx --prefer-offline --yes copilotkit@4.26.0 onboard read framework/ms-agent-python`
60
- 15. Microsoft Agent Framework .NET: `npx --prefer-offline --yes copilotkit@4.26.0 onboard read framework/ms-agent-dotnet`
61
- 16. Mastra: `npx --prefer-offline --yes copilotkit@4.26.0 onboard read framework/mastra`
62
- 17. MS Agent Harness .NET: `npx --prefer-offline --yes copilotkit@4.26.0 onboard read framework/ms-agent-harness-dotnet`
63
- 18. Pydantic AI: `npx --prefer-offline --yes copilotkit@4.26.0 onboard read framework/pydantic-ai`
64
- 19. Strands Agents Python: `npx --prefer-offline --yes copilotkit@4.26.0 onboard read framework/strands-python`
65
- 20. Strands Agents TypeScript: `npx --prefer-offline --yes copilotkit@4.26.0 onboard read framework/strands-typescript`
61
+ 1. AG2: `npx --prefer-offline --yes copilotkit@4.28.0 onboard read framework/ag2`
62
+ 2. Agno: `npx --prefer-offline --yes copilotkit@4.28.0 onboard read framework/agno`
63
+ 3. Built-in CopilotKit agent: `npx --prefer-offline --yes copilotkit@4.28.0 onboard read framework/built-in`
64
+ 4. Claude Agent SDK Python: `npx --prefer-offline --yes copilotkit@4.28.0 onboard read framework/claude-sdk-python`
65
+ 5. Claude Agent SDK TypeScript: `npx --prefer-offline --yes copilotkit@4.28.0 onboard read framework/claude-sdk-typescript`
66
+ 6. CrewAI Flows: `npx --prefer-offline --yes copilotkit@4.28.0 onboard read framework/crewai-flows`
67
+ 7. Custom agent: `npx --prefer-offline --yes copilotkit@4.28.0 onboard read framework/custom-ag-ui`
68
+ 8. Deep Agents: `npx --prefer-offline --yes copilotkit@4.28.0 onboard read framework/deep-agents`
69
+ 9. LangGraph Python: `npx --prefer-offline --yes copilotkit@4.28.0 onboard read framework/langgraph-python`
70
+ 10. LangGraph FastAPI: `npx --prefer-offline --yes copilotkit@4.28.0 onboard read framework/langgraph-fastapi`
71
+ 11. LangGraph TypeScript: `npx --prefer-offline --yes copilotkit@4.28.0 onboard read framework/langgraph-typescript`
72
+ 12. LlamaIndex: `npx --prefer-offline --yes copilotkit@4.28.0 onboard read framework/llamaindex`
73
+ 13. ADK: `npx --prefer-offline --yes copilotkit@4.28.0 onboard read framework/google-adk`
74
+ 14. Microsoft Agent Framework Python: `npx --prefer-offline --yes copilotkit@4.28.0 onboard read framework/ms-agent-python`
75
+ 15. Microsoft Agent Framework .NET: `npx --prefer-offline --yes copilotkit@4.28.0 onboard read framework/ms-agent-dotnet`
76
+ 16. Mastra: `npx --prefer-offline --yes copilotkit@4.28.0 onboard read framework/mastra`
77
+ 17. MS Agent Harness .NET: `npx --prefer-offline --yes copilotkit@4.28.0 onboard read framework/ms-agent-harness-dotnet`
78
+ 18. Pydantic AI: `npx --prefer-offline --yes copilotkit@4.28.0 onboard read framework/pydantic-ai`
79
+ 19. Strands Agents Python: `npx --prefer-offline --yes copilotkit@4.28.0 onboard read framework/strands-python`
80
+ 20. Strands Agents TypeScript: `npx --prefer-offline --yes copilotkit@4.28.0 onboard read framework/strands-typescript`
66
81
 
67
- If the project has an agent in another framework that does not speak AG-UI, or no
68
- listed framework fits, keep the developer's current agent and run
69
- `npx --prefer-offline --yes copilotkit@4.26.0 onboard read unsupported/no-validated-path`.
82
+ An agent in any other framework takes route 7, whether or not it speaks AG-UI. So does a
83
+ new agent on a framework that is not listed. If the developer declines route 7 and every
84
+ listed framework, keep their current agent and run
85
+ `npx --prefer-offline --yes copilotkit@4.28.0 onboard read unsupported/no-validated-path`.
@@ -8,7 +8,7 @@ application code here. Do not read, show, store, or request a secret value.
8
8
  Read `learningContainer` from the `onboard credentials` result:
9
9
 
10
10
  - `exists`: reuse `id` and create nothing.
11
- - `plan-create`: plan `id`, and create it after the developer approves the plan.
11
+ - `plan-create`: plan `id`, and create it after the run shows the plan.
12
12
  - `skipped`: plan no container and no selector. Name `reason` in the plan and in the
13
13
  closing report. Do not stop.
14
14
 
@@ -21,10 +21,11 @@ The plan names the model credential variables. Run this from the directory that
21
21
  `environmentPath` in the project step's result, with one `--model-key` for each variable:
22
22
 
23
23
  ```text
24
- npx --prefer-offline --yes copilotkit@4.26.0 onboard credentials --model-key <variable> --json
24
+ npx --prefer-offline --yes copilotkit@4.28.0 onboard credentials --model-key <variable> --json
25
25
  ```
26
26
 
27
- If `setup/questions` recorded a key file, add `--env-path <file>` to the first check.
27
+ Run `npx --prefer-offline --yes copilotkit@4.28.0 onboard setup-answers` for the key answer the setup
28
+ message recorded. If it holds `key.file`, add `--env-path <key.file>` to the first check.
28
29
  When the framework node names another env file for the credential, add
29
30
  `--env-path <file>`. When the agent runs as its own service, such as a remote AG-UI agent,
30
31
  that service reads its own env file. Add `--copy-to <service>/.env` for it. The command
@@ -38,25 +39,43 @@ never prints a value. Read `status`:
38
39
  itself. By default, plan to copy the key into `environmentPath`, the app's env file that git ignores.
39
40
  The copy is a file the run writes itself, so list the copy under
40
41
  `Files the run writes itself`.
41
- The developer's approval of the plan is their consent to the copy. After the approval,
42
- copy the key with the command that `next` names. It has this form:
43
- `npx --prefer-offline --yes copilotkit@4.26.0 onboard credentials --model-key <variable> --env-path <file> --copy-to <env file> --json`.
42
+ The developer's answer to the key file line in the setup questions is their consent to
43
+ the copy. After the run shows the plan, copy the key with the command that `next` names. It has this form:
44
+ `npx --prefer-offline --yes copilotkit@4.28.0 onboard credentials --model-key <variable> --env-path <file> --copy-to <env file> --json`.
44
45
  `<env file>` is `environmentPath`, never the tracked `.env` of a run that chose
45
46
  `question.alternative.file`. It writes the key without printing it. Do not copy the key
46
47
  yourself, and do not write a `sed`, `grep`, or `cat` command for it. If you cannot run
47
48
  the command, for example because a sandbox refuses the path, ask the developer to run it.
48
49
  Give them exactly this one line, with `<app directory>` as the directory that holds
49
50
  `environmentPath`:
50
- `! cd <app directory> && npx --prefer-offline --yes copilotkit@4.26.0 onboard credentials --model-key <variable> --env-path <file> --copy-to <env file>`.
51
+ `! cd <app directory> && npx --prefer-offline --yes copilotkit@4.28.0 onboard credentials --model-key <variable> --env-path <file> --copy-to <env file>`.
51
52
  The command needs no input. Without `!`, they run the same command in a terminal.
52
53
  Report the pause with
53
- `npx --prefer-offline --yes copilotkit@4.26.0 onboard checkpoint --phase awaiting-model-credential`,
54
+ `npx --prefer-offline --yes copilotkit@4.28.0 onboard checkpoint --phase awaiting-model-credential`,
54
55
  end your turn, and wait. When they reply, run the same command with `--json` and read `copiedKeys`.
55
56
  If the developer declines the copy, the plan has the app read the key from an
56
57
  environment variable that the developer sets. The plan then says how to set it. Never
57
58
  write the outside path into a project file, not even in a config file such as
58
59
  `langgraph.json`. A committed file that names a folder in the developer's home directory
59
60
  gives every other machine no key. In the closing report, say where the app reads the key from.
61
+ The `reason` `keyless-local-endpoint` means that the base URL is a local server, such as
62
+ Ollama or LM Studio, that answered without a key. The key holds the stand-in
63
+ `not-needed`.
64
+ The `reason` `unread-base-url` means that the env file sets `OPENAI_API_BASE`. This app
65
+ reads only `OPENAI_BASE_URL`, so it sends the key to OpenAI. Rename the variable to
66
+ `OPENAI_BASE_URL` in that file, and run this step again.
67
+ The `reason` `base-url-query` means that the base URL has a query string, and
68
+ `base-url-redirect` means that it redirects. Name either one in the closing report.
69
+ The `reason` `compatible-base-url-missing` or `key-not-openai` means that the key belongs
70
+ to an OpenAI-compatible provider, but no file names its base URL, so nothing was sent.
71
+ Ask the developer for the provider's base URL, record it with
72
+ `npx --prefer-offline --yes copilotkit@4.28.0 onboard setup-answers --vendor openai-compatible --base-url <url> --model-id <id>`,
73
+ and run this step again.
74
+ - `needs-developer` with `question.reason` `local-endpoint-no-key`: the base URL is a local
75
+ server that needs no key, such as Ollama or LM Studio. The OpenAI SDKs refuse an empty
76
+ key. Do what `next` says: write `<variable>=not-needed` to `question.envFile`, the key's
77
+ own file, and run this step again. For the Microsoft Agent Framework Python starter,
78
+ that file is `agent/.env`.
60
79
  - `needs-developer` with `question.status` `missing`: if the developer said they will add the
61
80
  key later, do not ask or pause here. Carry the missing key into the plan: name the
62
81
  variable and `question.envFile`, then continue. Otherwise ask the developer `question.ask` in
@@ -65,10 +84,14 @@ never prints a value. Read `status`:
65
84
  with `--env-path <path>`. If they add the key, rerun it as it is. Do not replace the
66
85
  question with an instruction to paste the value into a file. The key can already be in a
67
86
  file that you can point the check at.
68
- - `needs-developer` with `question.status` `fail`: tell the developer `question.cause`.
69
- `model_quota` means that the key has no credits, and `model_auth` means that the vendor
70
- rejected it. Offer three choices: add credits, use another key, or switch the model
71
- provider.
87
+ - `needs-developer` with `question.status` `fail`: ask the developer `question.ask` in
88
+ those words. It says why the vendor refused the key and how to fix it. If they choose
89
+ another provider that the framework can use, record that vendor and its variable, and
90
+ run this step again with that variable. The plan changes the model code. With the cause
91
+ `model_unavailable`, the key works and the app's model does not: the vendor does not
92
+ serve the model that `COPILOTKIT_AGENT_MODEL` names. When the developer agrees to the
93
+ model that `question.ask` names, or names another, change `COPILOTKIT_AGENT_MODEL`
94
+ where `question.ask` says, and run this step again.
72
95
  - `needs-developer` with `question.kind` `env-file-exposed`: git tracks an env file the
73
96
  key goes into, or does not ignore it. So nothing was written. Ask the developer `question.ask` in those
74
97
  words. If they choose `question.alternative`, run the command again with the same flags
@@ -83,10 +106,11 @@ the run continues when they reply or resume this session. Under a harness that e
83
106
  session with your turn, such as `codex exec`, that message is the only thing the developer
84
107
  sees. This is a pause, not a stop. The command already reported it.
85
108
  End your turn. When the developer answers, run the command again. Do not write a
86
- placeholder or an empty value.
109
+ placeholder or an empty value. The one exception is `not-needed` for the reason
110
+ `local-endpoint-no-key` above.
87
111
 
88
112
  Never read a file outside the project directory to find a credential: a key found that way
89
113
  bills another project. Asking for a path is not requesting a secret. A path the developer
90
114
  names is theirs to give, including one outside the project. A path this run finds is not.
91
115
 
92
- Then run `npx --prefer-offline --yes copilotkit@4.26.0 onboard read credentials/write-plan`.
116
+ Then run `npx --prefer-offline --yes copilotkit@4.28.0 onboard read credentials/write-plan`.