squad-kit 1.2.1 → 1.3.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 (25) hide show
  1. package/README.md +9 -5
  2. package/SECURITY.md +51 -14
  3. package/dist/cli.js +1094 -46127
  4. package/dist/console-ui/assets/index-DqDPMvqu.css +1 -0
  5. package/dist/console-ui/assets/index-iFT5f2Y0.js +669 -0
  6. package/dist/console-ui/index.html +2 -2
  7. package/package.json +1 -2
  8. package/CHANGELOG.md +0 -1157
  9. package/dist/console-ui/assets/index-CzFTrbcF.js +0 -637
  10. package/dist/console-ui/assets/index-kEkCko25.css +0 -1
  11. package/dist/console-ui/assets/jetbrains-mono-cyrillic-400-normal-BEIGL1Tu.woff2 +0 -0
  12. package/dist/console-ui/assets/jetbrains-mono-cyrillic-500-normal-DmUKJPL_.woff2 +0 -0
  13. package/dist/console-ui/assets/jetbrains-mono-cyrillic-600-normal-EVf6-Yzo.woff2 +0 -0
  14. package/dist/console-ui/assets/jetbrains-mono-cyrillic-ext-400-normal-C_uLvvQ5.woff2 +0 -0
  15. package/dist/console-ui/assets/jetbrains-mono-cyrillic-ext-500-normal-C9ShMxGR.woff2 +0 -0
  16. package/dist/console-ui/assets/jetbrains-mono-cyrillic-ext-600-normal-Dj6eZy5f.woff2 +0 -0
  17. package/dist/console-ui/assets/jetbrains-mono-greek-400-normal-C190GLew.woff2 +0 -0
  18. package/dist/console-ui/assets/jetbrains-mono-greek-500-normal-JpySY46c.woff2 +0 -0
  19. package/dist/console-ui/assets/jetbrains-mono-greek-600-normal-H7WoG9Et.woff2 +0 -0
  20. package/dist/console-ui/assets/jetbrains-mono-latin-ext-400-normal-Bc8Ftmh3.woff2 +0 -0
  21. package/dist/console-ui/assets/jetbrains-mono-latin-ext-500-normal-Cut-4mMH.woff2 +0 -0
  22. package/dist/console-ui/assets/jetbrains-mono-latin-ext-600-normal-BfB_LPfz.woff2 +0 -0
  23. package/dist/console-ui/assets/jetbrains-mono-vietnamese-400-normal-ByoDsISC.woff2 +0 -0
  24. package/dist/console-ui/assets/jetbrains-mono-vietnamese-500-normal-BvH7FW2L.woff2 +0 -0
  25. package/dist/console-ui/assets/jetbrains-mono-vietnamese-600-normal-Dtizs43-.woff2 +0 -0
package/CHANGELOG.md DELETED
@@ -1,1157 +0,0 @@
1
- # Changelog
2
-
3
- All notable changes to this project are documented here.
4
-
5
- The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
- and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
-
8
- ## [Unreleased]
9
-
10
- ## [1.2.1] — 2026-11-05
11
-
12
- A patch about not losing work and never reaching a dead end. It also moves the project's commit hooks into the guard.
13
- Nothing changes in how you work with the squad.
14
-
15
- ### What you type stays
16
-
17
- - **Text you type survives** a reload, a closed tab or a dialog closed by mistake: answers, comments, new tickets, bugs
18
- and the BRD box are kept for each project, ticket and field, and cleared once sent.
19
- - **Skip** asks first. Dialogs with files in them ask before closing. Enter works in an **Other** answer.
20
-
21
- ### When something goes wrong
22
-
23
- - **The app going down shows at once.** Within 5 seconds a banner sits over every page, nothing pulses as if it were
24
- still working, and the banner goes by itself when the app is back. An update that does not come back gets it after 2
25
- minutes.
26
- - **One error no longer takes the app down.** Each squad turn is guarded, and an error in the screens shows a page with
27
- a way back. A full disk or a moved folder holds that project with one banner, and it carries on by itself.
28
- - **A network blip waits and tries again**, 4 times over about 15 minutes, and never lowers the model level. A merge cut
29
- off by a blip is tried again too.
30
- - **A moved folder is found.** The story copies' links are repaired when the squad starts, at **Looks right** and when a
31
- step opens a copy. Home follows a folder moved while the app runs.
32
- - **A refused release has a way out.** A teammate's push is merged and sent, never forced. A real clash gets the clash
33
- card, and a protected main gets plain words and an engineer's steps.
34
- - **It reached it another way**: a new button on the Releases page, for a release merged by hand. It needs a reason and
35
- looks on the remote first. If the release is not there, it warns and asks a second time. Terminal:
36
- `squad release --mark-sent --reason "…" [--anyway]`. `squad release` also takes the version with or without the `v`.
37
- - **Take it**: a new button on a ticket whose owner cannot work on it. Terminal: `squad take-back <ticket> --reason "…"`.
38
- - **A ticket is never overwritten** by another with the same id, and new ids skip the ones already pushed.
39
- - **The home folder is refused** by `squad init`, setup and the first commit, and a leftover `~/.squad` is ignored.
40
- - **The link lasts across tabs.** With no key in the link, the page says to run `squad`.
41
- - **Stop and closing the board** end a running hook, and closing takes seconds. `squad | tee` stops cleanly, and a run
42
- whose output goes to files keeps running when its terminal closes.
43
- - **An agent's tool calls** no longer fail with a dropped connection after 5 quiet seconds.
44
-
45
- ### The project's commit hooks
46
-
47
- - **They run once, when a change is saved, in the guard, on a stand-in branch.** A hook cannot move a real branch, plant
48
- a hook or change a git setting. The real commit is made after, outside the guard, with your signature if your git
49
- signs. A crash or a failed signature no longer moves a branch or leaves an unsigned commit.
50
- - **Every refusal gets a card**: **Let the Builder fix it**, **Fix it yourself**, **Try the save again**, or **Save
51
- without this check**. Saving without it needs a reason, which stays on the ticket, the pull request and the release
52
- notes. Builds by itself never skips a hook.
53
- - **Refused code cannot slip through.** Work saved past a refusal is checked whole at **Looks right**, and the branch
54
- goes back as it was if the hook still says no.
55
- - **The Builder cannot change the check to pass it.** Hook files, their settings and their `package.json` keys go back,
56
- with one plain line. What a hook calls, like lint rules and tests, stays the Builder's, and the Reviewer reads it.
57
- - **husky 9 now runs in a story's copy.** Before, its hooks silently never ran there.
58
- - **squad-kit runs no other hook**: no `pre-push`, `post-merge` or `post-checkout`, since the project's own checks have
59
- run by then. Your own terminal still runs them. Git LFS files still upload when squad-kit pushes.
60
- - **A hook folder with a common name** (`hooks`) no longer costs you work in `src/hooks`. `npx` works in a hook with no
61
- packages installed.
62
-
63
- ### Security
64
-
65
- - **`.git` and git's own folder are read only** for the project's commands and for agents.
66
- - **squad-kit's own git starts nothing a repo names by itself**: no file monitor, no diff program, and nothing from a
67
- nested repo, which also stays out of commits.
68
- - **The app answers only at its own address.** Host and Origin are checked on every route, a key in the link works for
69
- reads only, and HTML and SVG from a project download instead of opening at the board's address.
70
-
71
- ### Known limits
72
-
73
- - **A hook built to do harm could change a file in git's store of objects.** A project with no commit hooks is not
74
- affected. The next patch closes this by running hooks in a throwaway git folder. See [SECURITY.md](SECURITY.md).
75
- - A hook that reads the branch name sees the stand-in, `squad/saving/<branch>/now`. A strict one says no, and you get
76
- the card.
77
- - Setup in your own checkout no longer installs husky's hooks. On a fresh clone they stay off until you install them.
78
- - Stop in the middle of lint-staged leaves its backup in `git stash list`. Your work is safe.
79
-
80
- ## [1.2.0] — 2026-11-05
81
-
82
- squad-kit 1.2 is about trust: squad-kit shows that it understands your project, says what the work really cost, and
83
- makes the squad's work harder to fake. It also takes a whole requirements document and builds it, story by story.
84
- Windows is less protected and not fully tested yet (see What's safer).
85
-
86
- ### What's new
87
-
88
- #### From a BRD to a built product
89
-
90
- - **A new Requirements page** (after Overview). **Add a BRD**: a PDF, Word or Markdown file, or pasted text, with
91
- mockups if you have them. The Analyst reads it live and asks only about what is **missing in the BRD** or where
92
- **two parts clash**. Then it writes epics, features and stories, each with its checks (Given, When, Then), size,
93
- needs and its place in the document.
94
- - **Review it as a tree or a map.** Rename, rewrite, move, add or remove any part, or ask the Analyst to redo one.
95
- An estimate from this project's own tickets: "20 stories, about $140 and 6 hours, 2 at a time". Nothing is built
96
- or sent before **Approve breakdown**.
97
- - **Send to Azure DevOps**: epics, features and stories with parent and dependency links, into the backlog. **Send
98
- changes** updates only what changed. squad-kit never deletes there, and a cut-off send makes no doubles.
99
- - **Build continuously**: each story becomes a ticket on the new **Builds by itself** track, in the order its needs
100
- allow, within the parallel limit and the budgets. No questions, the plan is approved by itself, small choices are
101
- listed under **Decided for you** (press **Change** on any), and it merges by itself once the checks, the review
102
- and the screenshots pass. It stops only for a gap, a clash or a failed check, and then only that story and the
103
- ones that need it wait. Releases stay your button.
104
- - Terminal: `squad requirements add|show|answer|edit|move|approve|send|build|start|…`, `squad decided`. See
105
- [From a BRD to a built product](docs/requirements.md).
106
-
107
- #### Proof you can read
108
-
109
- - **squad-kit takes the screenshots itself, with its own browser.** The Tester says which pages, steps and sizes.
110
- squad-kit opens the story's own copy of the app, does the steps and takes the pictures.
111
- - **One or more pictures for each "done when"**: one per part or case, up to 6.
112
- - **Each "done when" gets a verdict**, from the Tester and squad-kit's own check of all its pictures together:
113
- **Met**, **Not working yet** (a picture shows it does not work), **Not shown yet** (the pictures do not show it
114
- clearly) or **Not on a screen** (it cannot be shown at all, like an email or what happens after a restart). Not
115
- working yet goes back to the Builder once, then it is a plain stop. Not shown yet goes back to the Tester up to 2
116
- more times, keeps the good pictures and never reaches the Builder. Not on a screen keeps its reason and does not
117
- stop the story, unless every "done when" ends that way.
118
- - **Also changed, not in the plan**: what the change touches beyond its plan, in the Reviewer's words. It never
119
- blocks. You see it at your check, on a stop, on the ticket and in the release notes.
120
-
121
- #### Your turn
122
-
123
- - **Where to look**: each page the proof names, with the "done when" it shows.
124
- - **Try it yourself**: runs the story's own copy of the app, with the change in it and nothing merged, so you can
125
- click through it before **Looks right**. It stops by itself when the story moves on. Terminal: `squad try <ticket>`.
126
- - **Ask a question** on every story, in every state: working, in the queue, waiting for another story, stopped, at
127
- review, taken over or released. Whoever knows the story best answers: the Analyst before the build, the Builder
128
- during and after it, the Tester once there are screenshots. It answers questions only, and the story stays exactly
129
- where it is. Terminal: `squad chat <ticket> --ask`.
130
-
131
- #### First run and Overview
132
-
133
- - **Add project says what it found** (code with or without git, an empty folder, several repos, an older
134
- squad-kit) and what happens next, before you confirm.
135
- - **A setup page with live steps**: project memory, the AI tool, the Architect reading the code, how to test and run
136
- it, trying the tests, opening the app once with a screenshot, and your overview. Each step has its time; a failure
137
- has a way out and never stops the setup. **Notify me when it is ready**. Quality is asked once here.
138
- - **The Overview page**, first in the sidebar: what the project is, who uses it, what it can do today, how its parts
139
- fit together, things worth knowing, the rules found, the proof, and three ideas for a first ticket. It stays up to
140
- date after every merged ticket.
141
- - **The rules the Architect found are proposals until you approve them** with **Looks right, start working**. They
142
- used to be saved as approved without being shown. **Something is wrong** opens a talk with the Architect.
143
- - **An empty project asks "What do you want to build?"**, in your own words, in English or Arabic. The Architect
144
- writes down what you want with first stories for it, and picks the technology itself when your first story is
145
- planned. Terminal: `squad overview --build "what you want"`.
146
- - **squad-kit finds the commands of a project that started empty.** After the first build it reads how to test and
147
- run the project from its files, and saves that. Nobody is asked.
148
- - Terminal: `squad setup`, `squad overview`, `squad demo --first-run`.
149
-
150
- #### Conversation and Cost
151
-
152
- - **Conversation opens on "What happened"**: one card per step with its time, a one-line summary and what it handed
153
- in, drawn as the real thing. **Full log** keeps the detail, in plain words, with **Open it in Claude Code**.
154
- - **Cost follows how you pay.** On a subscription: "Included in your Claude plan. No extra charge.", the size of the
155
- work and where it went, with the API-price figure shown as a value, not a bill. With an API key: real dollars, a
156
- budget per ticket and per month, a warning at 80% and a pause at 100%.
157
- - **Averages per Quality setting** (cost and squad time per accepted ticket) on the Squad and AI page.
158
- - Terminal: `squad cost`, `squad config set payment`, `squad config set budget`.
159
-
160
- #### Tickets that depend on each other
161
-
162
- - **The Analyst and the Architect see the other open tickets** and the files they change.
163
- - **A design can depend on another ticket.** The ticket then waits before building: **Build on its branch**, **Build
164
- anyway**, or **Wait** (it starts by itself when the other one merges). Terminal: `squad depends`, `squad build`.
165
- - **Bring in latest main** is a button on a ticket being built (`squad bring-in`).
166
-
167
- #### Releases
168
-
169
- - **Take a ticket out of the next release** before you release it (`squad release --without`).
170
- - **Released tickets' branches are cleaned up** on this computer, and on the remote when you ask (`squad branches`).
171
- A branch with unmerged work is never deleted.
172
- - **A release cut off by a restart finishes or rolls back** cleanly on the next start.
173
-
174
- #### Also
175
-
176
- - **The ticket can go full width** (the button next to Close; remembered in this browser). **Hand over** and
177
- **Propose a change** moved to the ⋯ menu, and Propose a change is also on the ticket's bottom bar, so the header is
178
- one row at any width.
179
- - **The Waiting for you banner is one slim, calm row**, and stays readable beside a docked chat.
180
- - **The update banner shows what is new in every release since your version**, and **Check for updates** reads the
181
- notes again.
182
- - **Free the port and try again** on a stuck Tester step, for programs squad-kit itself started.
183
-
184
- ### What's safer
185
-
186
- - **Agents get fixed tools, "the window"**: `take_screenshots`, `look_at_page`, `start_app`, `stop_app`, `app_status`,
187
- `run_checks` and `i_am_stuck`. An agent fills in the fields, squad-kit checks them, does the job itself and hands
188
- back the result. There is no free command: only this story's app on this computer, only the project's saved
189
- commands, only what squad-kit started. A request outside that is refused and written in the activity, and three
190
- refusals in one step stop the agent.
191
- - **`i_am_stuck`**: when something technical is in an agent's way, squad-kit tries its own fixes (its browser, a free
192
- port, starting the app again) and writes one plain line. It is never a question to you.
193
- - **Technical questions never reach you.** squad-kit reads each question an agent asks, with its choices and
194
- everything shown with it, and does not trust the agent's label. A question about ports, commands, files or settings
195
- goes back to the agent to decide. An agent that keeps asking stops in plain words. When another program holds a
196
- port and going around it did not work, you get one plain card with no port in it: **Stop it** (with a confirm) or
197
- **Skip the browser tests**.
198
- - **Some asks are refused and logged.** Asking you to change squad-kit's settings or protected files, to hand over a
199
- password or a key, or to change git history never reaches you. One plain line goes in the activity. A reply in a
200
- chat that asks for any of these is left out too.
201
- - **A second guard for the project's own commands.** The tests, lint, build, setup, the app's start and the release
202
- pipeline run in squad-kit's own guard on Mac and Linux. They work normally, browser tests too, and can reach the
203
- network, but they can't read your keys, sign-ins, browser profiles, squad-kit's own folder or the `.env` files in
204
- your project folder. If a project truly needs a file outside its copy, one plain sentence says so, and an engineer
205
- can allow it in Settings or with `squad config set allow-read <path>` and `squad config set allow-write <path>`.
206
- `squad doctor` shows whether the guard runs here.
207
- - **Windows is less protected and not fully tested yet.** There, the agents' own commands and the project's own
208
- commands have no guard, so they can reach other files on the computer. Use it on projects you trust. Settings and
209
- the Squad and AI page say "Windows: less protected".
210
- - **"Not checked" instead of a green pass** when a project has no tests. You are asked once per project, with the
211
- Architect's suggested test command. A project without tests also checks that the app starts.
212
- - **Weakened tests stop the ticket**: deleted tests, fewer tests, a changed test setup, or new skip/only markers, in
213
- the common languages. **Continue anyway** needs a reason that stays on the record.
214
- - **Proof is verified**: each screenshot must be a real image taken in this step, and "after" must differ from
215
- "before", unless the "done when" says the screen stays as it was.
216
- - **The Reviewer sees the whole change and the check results** in every round, not only the fix. In its review it can
217
- also look at a page of the app itself (`look_at_page`).
218
- - **A change to the test command is tried first.** squad-kit runs the new command and the current one in the ticket's
219
- copy, and keeps the new one only when it passes and runs at least as many tests. You choose only when it cannot
220
- tell. Terminal: `squad test-command <ticket> --use | --keep`.
221
- - **The Builder's and Tester's commands run in Claude Code's sandbox** where the computer allows it: they write only
222
- in the ticket's copy, its proof folder and a private package cache, can't read your keys, sign-ins or `.env`
223
- files, and reach only package registries and the websites you allow (Settings, `squad config set hosts`). A
224
- blocked command says what and why. `squad doctor` shows whether the sandbox runs here.
225
- - **Turn and spend caps per step** from the Quality setting. Reaching one keeps the work and offers **Give it more**
226
- or **Stop**.
227
- - **Every command squad-kit suggests you copy quotes your text safely**, on the board and in the terminal.
228
- - **zod 4, the AI SDK 5 and diff 8** for the 0.x planner commands. This closes the last high alert. The planner's
229
- file-read tool on the Claude Agent SDK path now works with ranged reads.
230
-
231
- ### What's fixed
232
-
233
- - **Plain stop messages.** A stop says what happened in squad-kit's own plain words, with **Try again**. A tool's raw
234
- error never reaches you: the exact words are in the ticket's Developer tab and the app log.
235
- - **A failed check runs once more** before anyone is sent to fix it, so a flaky test costs no Builder run. If it passes
236
- then, the activity and the Developer tab say "failed once, passed when run again". Not after a Stop, a command
237
- squad-kit had to end, or a file the guard blocked.
238
- - **The Builder is told about old failures**: the checks that already failed on the first run, before any story
239
- touched the code. It fixes what its story broke and leaves other screens alone. The checks must still pass.
240
- - **A clash no longer stops a story too soon on Builds by itself.** While main keeps moving, squad-kit brings it in
241
- again by itself, up to 3 times, with the checks, the review and the proof each time. If main has not moved, or after
242
- the third time, you get the clash card. Other tracks show the card at the first clash, as before.
243
- - **Apps move to a free port by themselves** when another program holds the usual one: Your apps, the story's own copy
244
- and Try it yourself. In Your apps this works when the start command or the app's code takes a port setting; if not,
245
- one plain sentence says what is in the way. `--next-port` on `squad app start` and `squad app restart` is still
246
- accepted, and now does nothing.
247
- - **squad-kit installs its own screenshot browser.** No `npx playwright`, and nothing to install by hand. The first
248
- time, one line says "Setting up squad-kit's screenshot browser. This happens only once."
249
- - **The step timer counts only running time.** It stands still while a ticket waits for you, for another story or for
250
- a free place, so "Taking longer than usual" no longer shows on a step that was only waiting.
251
- - **A restart is not a failure.** Restarting the board, Stop or the computer sleeping no longer counts as a failed
252
- try or raises the model's effort. The Builder carries on with the same step in the same conversation, instead of
253
- starting the work again, and the step's clock keeps its time ("resumed after a restart").
254
- - **Nothing is left behind.** When a step ends, on Stop, and when the board restarts or quits, squad-kit stops every
255
- program it started for the ticket, including test servers that left their process group. It finds them by where
256
- they run: inside squad-kit's own copy of the code, never your folders or Your apps.
257
- - **squad-kit clears its own leftovers before the checks** and says so in one activity line. If an agent asks about a
258
- busy port that squad-kit caused, squad-kit answers it and you never see the question.
259
- - **Desktop notices: Turn on always answers.** It says when the browser is asking, explains how to allow notices
260
- when the browser stays silent (for example in Arc), and sends one test notice.
261
- - **A ticket a teammate deleted** shows "Deleted by <owner>" with **Remove from my board**.
262
- - **A chat message sent during Claude's usage limit waits** and is answered when the squad carries on.
263
- - **On a phone**, the banners fold into one slim row while a ticket is open, and the website's docs pages fit.
264
-
265
- ## [1.1.1] — 2026-11-03
266
-
267
- A security update. Nothing changes in how squad-kit works.
268
-
269
- ### Security
270
-
271
- - **Packages with known security problems are updated.** The app's web server (hono 4.13, @hono/node-server 2), the
272
- parts of the MCP SDK's server it pulls in (proxy-addr, body-parser, qs, ip-address), @modelcontextprotocol/sdk
273
- 1.32, fast-uri and js-yaml; in the app's screens, seroval and js-yaml; and the test tools (vitest 4, vite 6).
274
- - **The website's build tools** move to Astro 7.
275
- - **Still open:** zod 3, used only by the 0.x planner commands (`squad new-plan` with an API key). Its fix needs
276
- zod 4, which those commands' AI library does not read yet. It is planned.
277
-
278
- ## [1.1.0] — 2026-11-03
279
-
280
- squad-kit 1.1 is about never wondering what the squad is doing, and always having a way out.
281
-
282
- ### Always know what is happening
283
-
284
- - **Every card says what is happening** in plain words: "Builder · step 3 of 6 · editing the booking page", how
285
- long it has run, and how long that step usually takes on this project. squad-kit learns the usual times from the
286
- project's own history. A ticket over the limit says "Next in line: starts when a slot is free".
287
- - **The Now tab** says in one sentence what happens now and what comes next. The stage tracker shows how long each
288
- stage took. Terminal: `squad status <ticket>`, and `squad show` prints the same.
289
- - **Ask about a ticket**: "is there a problem?", "when will it be ready?", "what is it doing?". Status questions are
290
- answered at once from the live record, in English or Arabic, at no AI cost. A question that would change the work
291
- offers Propose a change or a note, and says when the note will be read. Terminal: `squad ask <ticket> "..."`.
292
-
293
- ### Waiting for you, loud
294
-
295
- - **A banner on every page** when something needs you, with the button to press on each item.
296
- - **The browser tab shows the count**: "(2) roomflow".
297
- - **Desktop notices**, asked for once: one notice per new question, approval, proof or stop. No sound. Settings ›
298
- Desktop notices turns them on or off.
299
-
300
- ### Time limits you can see
301
-
302
- - **"Taking longer than usual"** past twice a step's usual time, with what it is doing, its last progress and when
303
- squad-kit stops it: **Give it 10 more minutes**, **Stop and try again**, **Stop**. Terminal:
304
- `squad wait <ticket> --more 10m`, `squad stop <ticket> --again`.
305
- - **"Looks stuck"** says what squad-kit checked, and keeps **End the stuck command**.
306
-
307
- ### Your apps
308
-
309
- - **Start, Open, Restart and Stop** your app from the sidebar. squad-kit runs it from its own copy of `main` (never
310
- your folder), brings the copy up to date first, copies your `.env` files into it, and says Running only when the
311
- address answers. **Show output**
312
- has the last lines.
313
- - **Run the new version** after Looks right.
314
- - **A busy port** gets a plain message, and the fix when there is one. No start command: **Ask the Architect to find
315
- it**, or **Type it**.
316
- - Terminal: `squad app start|stop|restart|status|set|find`.
317
-
318
- ### Delete and Archive
319
-
320
- - **Delete** a ticket that is not merged: squad-kit stops the squad on it, then removes its copy of the code, its
321
- branch, its files, its unmerged decisions, its chats and screenshots. The tracker item and the cost stay. A delete
322
- cut off half-way finishes with **Delete again**.
323
- - **Archive** a merged or released ticket to take it off the board; **Show archived** and **Unarchive** bring it
324
- back.
325
- - Terminal: `squad delete <ticket>`, `squad archive <ticket> [--undo]`, `squad board --archived`.
326
-
327
- ### When something goes wrong
328
-
329
- - **Every stop says what happened, what is safe, and the ways out** as buttons. The exact error is in the
330
- Developer tab and the app log.
331
- - **Claude's usage limit pauses the squad** for every project, shows when it resets, and carries on by itself from
332
- the same step, without counting a failed try. **Try now** carries on at once (`squad try-now`).
333
- - **Report a problem** saves one `.zip` to send for help: the ticket, its conversations, the last day of the app
334
- log and the versions. Never sign-ins, tokens or `.env` files. Terminal: `squad report [ticket]`.
335
- - **An app log** in `~/.squad-kit/logs/`, one file a day, kept 14 days. Terminal: `squad logs --tail`.
336
-
337
- ### Also
338
-
339
- - **On a phone**, the sidebar folds away behind a menu button, and the ticket drawer takes the whole screen.
340
- - **`squad inbox`** names a newer decision that changes a plan correctly (it said "Looks stuck").
341
- - **Copied terminal commands quote pasted text safely.** A note or answer with `$(…)`, backticks or a trailing `\`
342
- could run or break when the command beside its button was pasted into a terminal.
343
- - **Tracker text is decoded once.** A written `&amp;lt;` in a Jira or Azure DevOps item no longer turns into `<`.
344
- - **Security**: GitHub code scanning, secret scanning with push protection and Dependabot are on, the release
345
- workflow's Actions are pinned to exact versions, npm publishing runs only from release tags, and `SECURITY.md`
346
- describes 1.0. The issues code scanning found are fixed.
347
-
348
- ## [1.0.1] — 2026-11-03
349
-
350
- squad-kit 1.0.1 makes the squad steadier and easier to follow, from what we saw in the first trials. To get it
351
- from 1.0.0, run `squad upgrade` once. From now on the app updates itself with one button.
352
-
353
- ### Easier to follow
354
-
355
- - **"From an idea or message" works and shows its progress.** The dialog no longer disappears behind a blurred
356
- board. The Analyst works in the background with three steps and a clock, and you can press Cancel. You can
357
- close the window: the draft waits for you under New ticket.
358
- - **Errors stay on screen** until you close them.
359
- - **The Conversation tab reads in plain words.** "Handed in its answer" replaces the raw answer, and a command
360
- the step may not run shows in grey as skipped, not in red as a failure.
361
- - **A ticket waiting for a free place says so**: "Waiting for a free place", with the limit, instead of
362
- looking as if it runs.
363
- - **"Resumed after sleep"** shows when the computer slept in the middle of a step.
364
-
365
- ### The Update button
366
-
367
- - **The app looks for a new version** on start and once a day. When one is out, Home and every project show
368
- it with what is new. **Update now** waits until no agent is in the middle of a step, installs, and restarts
369
- the app on the same link. Every ticket carries on where it was.
370
- - **Settings › About squad-kit** shows your version, when it last checked, and a switch for the daily check.
371
- Terminal: `squad upgrade`.
372
-
373
- ### Quality
374
-
375
- - **A new Quality setting** on the Squad and AI page: **Best** (the default), **Balanced** or **Thrifty**.
376
- On Best, the strongest model builds and reviews at high effort. On Claude Code that is Opus. Terminal:
377
- `squad config set quality best`.
378
- - **A new "extra high" effort.** On Best, a Builder run that fails moves the next one up to extra high.
379
- - **The Reviewer is never weaker than the Builder** on Best and Balanced.
380
- - **Reading the project after a merge is cheaper.** The project map is only read again when files are added,
381
- moved or removed, and that read runs on a lighter model.
382
-
383
- ### No silent hangs
384
-
385
- - **Stop works at every moment**, also between two runs, and it ends the agent with everything it started. A
386
- step that runs out of time ends the same way.
387
- - **Git that talks to a remote has a time limit**, and never waits for a password prompt nobody sees.
388
- - **Starting an agent has a time limit.** If it cannot start, the step says why instead of waiting.
389
- - **The Builder no longer waits for the "before" screenshots.** They are taken beside it, with their own time
390
- limit.
391
- - **A test, lint or build command with no output for 5 minutes is stopped**, and the ticket says which one.
392
-
393
- ### Agents stay in their lane
394
-
395
- - **Every agent runs with the permissions of its step.** The Tester can run the app but cannot change the code;
396
- what it changes anyway, squad-kit puts back.
397
- - **No agent can change the instruction files** the next session would follow, such as `CLAUDE.md`, or
398
- squad-kit's own `.squad/` folder. Agents read copies of the project's rules, never your own folder.
399
- - **No agent can rewrite git history.** squad-kit checks after each Builder and Tester step.
400
- - **Every answer is checked.** An incomplete answer is asked for once more, then the step says so plainly.
401
- - **Text from outside**, such as a tracker item or a pasted message, reaches the agents as data, never as
402
- orders.
403
- - **Test, setup and release commands no longer get the AI and tracker keys.**
404
-
405
- ### No lost work
406
-
407
- - **A release and a "Looks right" at the same moment** no longer get in each other's way.
408
- - **Stop keeps the step the ticket was at.**
409
- - **"Bring in the latest main"** uses the remote's main, not an old local copy.
410
- - **Only a real clash counts as a clash.** Other git errors say what went wrong. `squad doctor` checks the git
411
- version.
412
- - **Tracker updates are kept until they are sent**, and retried when the tracker is down.
413
- - **A release whose push failed** says "not pushed yet", with **Push again** on the Releases page. Terminal:
414
- `squad release <version> --push-again`.
415
- - **Withdraw change** takes back an approved change the squad has not built yet, and puts the spec back to how
416
- it was. Terminal: `squad propose <ID> --withdraw`.
417
-
418
- ### Fixes
419
-
420
- - **The Architect writes the stack**, with each part's role, from the code it reads. `stack.md` was empty.
421
- - **The Reviewer is told the checks already ran**, so it does not run them again.
422
-
423
- ## [1.0.0] — 2026-11-02
424
-
425
- squad-kit 1.0 is an agent harness for the whole software cycle. You write a ticket in plain words. A squad of
426
- AI agents (Analyst, Architect, Builder, Tester and Reviewer) takes it from that ask to a release, and you stay
427
- in control through buttons and approvals. It needs Node.js 22 or newer, git, and an AI tool installed and
428
- signed in: Claude Code today. Moving an existing project: [Moving to 1.0](docs/migrating-to-1.0.md).
429
-
430
- ### The one app
431
-
432
- - **Plain `squad` opens one app for all your projects**, from any folder, in your browser at `127.0.0.1:4571`.
433
- It runs on your computer only, behind a private link.
434
- - **Home** lists your projects and one **Waiting for you** list across all of them.
435
- - **Add project** opens a folder browser inside the page. It says what kind of folder you picked, and can make
436
- a new one.
437
- - **`squad console`** in a folder adds that project to the app and opens its board, starting the app if needed.
438
- - Every project has its own board, at its own address. Every button has a terminal command, and commands take
439
- `--project <name>` from any folder. New: `squad projects`, and `squad inbox` across every project.
440
- - `squad --restart` and **Restart the board** start a fresh app on the same link. Running work picks up where it
441
- stopped.
442
-
443
- ### Projects and files
444
-
445
- - **Any folder can be a project**: an empty folder (a new repo), code with git (kept as it is), code without git
446
- (a new repo with your files in its first commit, without `node_modules`, `dist` or `.env`), or a folder with
447
- several code repos.
448
- - **The project keeps its own memory in `.squad/`**, as Markdown people can read and edit: `config.yaml`, and
449
- `tickets/<ID>/` with `ticket.md`, `spec.md`, `questions.md`, `design.md`, `notes.md`, `proof.md` and attached
450
- files, plus `decisions/`, `releases/`, `rules/` and `knowledge/`.
451
- - **This computer keeps its own part in `~/.squad-kit/projects/<id>/`**: live progress, agent chats,
452
- screenshots, voice notes, sign-ins and cost. Nothing secret, personal or big goes into the project folder.
453
- - **Git stays quiet.** `.squad/` goes in git's local ignore list, never in `.gitignore`. For a project whose
454
- `.squad/` sits in its one repo, squad-kit commits each ticket's documents on the ticket's branch, and the
455
- release commit carries the rest. `git log .squad/tickets/<ID>` shows each big moment of a ticket.
456
-
457
- ### Tickets and the squad
458
-
459
- - **Write a ticket on the board** in plain words, with criteria, business rules, edge cases and files. Or paste
460
- an idea or a chat message and the Analyst fills in the ticket for you to check. Bugs have their own form.
461
- - **Pull a ticket from your tracker.** Azure DevOps today: the backlog by sprint, comments, states, bugs, pull
462
- requests on Azure Repos, and items closed with the version on release. Tickets keep the tracker's name, like
463
- `AB-46`; a project without a tracker names its own (`LR-1`).
464
- - **The squad's loop**: questions, spec, design, build, checks, review, proof, release. You answer, approve the
465
- spec, approve the design (a developer can do this part), check the proof and release.
466
- - **Full and Express tracks.** Express is for small fixes: no questions and the plan approved on its own; the
467
- build, checks, review and your **Looks right** still run.
468
- - **squad-kit is the boss.** It runs the tests, lint and build itself, starts a fresh Reviewer, and does the git
469
- and tracker work. Agents never merge, push or grade their own work. The Builder works in its own copy of the
470
- code; your folder is never touched while it works.
471
- - **Decisions are saved and linked**, named by the ticket that made them (`AB-46.1`), or `STACK.1` for what the
472
- Architect found in the existing code. The Architecture page shows how they build on each other.
473
- - **Every stop has a way out**: try again, fix it yourself, continue anyway (only you can, with a reason that
474
- stays on the record), or go back to the plan. Nothing hangs silently.
475
- - **Model levels per role and step**: strongest, balanced or fast, with an effort. squad-kit sets the defaults;
476
- the team and each person can change them on the Squad and AI page.
477
- - **One limit of tickets at once** (2 by default, up to 5), shared by all projects, because they share your AI
478
- account.
479
- - AI tools plug in as modules. Claude Code runs every role today; Codex is found but cannot run yet.
480
-
481
- ### Chat
482
-
483
- - **Talk to any agent** on a ticket, with screenshots, files and voice notes.
484
- - **Asking never stops the work.** While the squad works, the chat runs beside it and changes nothing.
485
- - **A change goes through the spec.** **Propose a change**: the Analyst writes the old and new wording and says
486
- if it is small or big, and you approve. A small change reaches the Builder at the end of its current step. A
487
- big one pauses it, the Architect updates the design for your approval, and the Builder redoes only what
488
- changed. One change at a time per ticket. Terminal: `squad propose`.
489
- - **Released work is for questions only.** A change to it becomes a new linked ticket or a bug report.
490
- - A new chat window is coming in this release: a side panel with tabs, a full-screen page, a phone layout, and
491
- Arabic and English shown the right way.
492
-
493
- ### Teams
494
-
495
- - **An owner on each ticket**, kept in `ticket.md`, so two squads never build the same ticket.
496
- - **Hand over** (button and `squad hand-over`) pushes the ticket's branch with its code and documents, and names
497
- the new owner. Their squad carries on from the branch, with a fresh session from the spec, design and code.
498
- - **A fresh clone shows the same board**: every ticket with its spec, answers, design, stage and owner, and
499
- every decision. Live progress, chats and screenshots stay on the computer that made them.
500
- - Hand over and clones work for a project whose `.squad/` sits in its one repo.
501
-
502
- ### Cost
503
-
504
- - **What each ticket and each role used**: runs, tokens, and the cost at the AI company's API prices, per role
505
- and step. On the ticket's Cost tab, the Squad and AI page, the board's footer and in `squad show`.
506
- - Your own AI subscription pays for it. The numbers show where the cost goes, so the team can tune the levels.
507
-
508
- ### Moving from 0.x
509
-
510
- - **Open a 0.x project** with `squad console` or Add project. Its `stories/`, `plans/` and tracker settings in
511
- `config.yaml` stay as they are; `config.yaml` gains a `board:` section.
512
- - **Sign-ins move** from `.squad/secrets.yaml` to `~/.squad-kit/projects/<id>/secrets.yaml`. The 0.x commands
513
- find them there.
514
- - **A board from an early 1.0 build** (`.squad/board/`) moves to the new layout on its own, once, with a backup
515
- in `~/.squad-kit/backups/` and a field-by-field check. Tickets and decisions keep their names. It waits until
516
- no board runs.
517
- - The 0.x commands (`new-story`, `new-plan`, `auth`, `config`, `doctor` and others) still ship. The 0.x console
518
- pages are replaced by the 1.0 app.
519
-
520
- ## [0.12.4] — 2026-08-26
521
-
522
- ### Bug fixes
523
-
524
- - **"Open" on a freshly generated plan 404'd in the console.** After a run finished, the *Plan
525
- saved* callout's **Open** link — and the **Open plan** button on the run report — resolved to
526
- `/plans/<feature>/.squad%2Fplans%2F<feature>%2F<file>.md`, and the page rendered
527
- `404 Not Found: {"error":"not_found"}`. Reported as
528
- [#9](https://github.com/AzmSquad/Squad-Kit/issues/9).
529
-
530
- Run records and the `done` event carry `planFile` as a path relative to the workspace root
531
- (`.squad/plans/<feature>/<file>.md`) — that is the form shown to the user, and what both
532
- `squad new-plan` and the console runs API have always written. The `/plans/$feature/$planFile`
533
- route and `GET /api/plans/:feature/:planFile` want the **file name** only, because the API
534
- resolves it under `.squad/plans/<feature>/`. Both link sites now normalise the value.
535
-
536
- Normalising in the UI rather than at the writers also repairs every run record already on disk,
537
- which all store the long form — so the run report's link works for historical runs too, not just
538
- new ones.
539
-
540
- The existing test asserted the correct href but fed the component a bare file name the server
541
- never sends, so it passed while the real link was broken. The fixture now matches the actual
542
- payload, and reverting the fix makes it fail.
543
-
544
- ## [0.12.3] — 2026-08-25
545
-
546
- ### Bug fixes
547
-
548
- - **The console's Doctor page was unreachable.** `/doctor` was defined as a route but never added to
549
- the router's child list, so the sidebar link, the breadcrumb, and the Cmd+K entry all resolved to a
550
- bare "Not Found". Introduced in 0.11.0 (`46519fd`, the runs-pages work) and shipped in every
551
- release since. The CLI's `squad doctor` was unaffected throughout, which is why it went unnoticed.
552
-
553
- The route is registered again, and `console-ui/src/router.test.ts` now asserts that **every**
554
- sidebar destination resolves to a registered route. Neither the type checker nor the existing
555
- tests could catch this: a defined-but-unregistered route is valid unused code, and a link to a
556
- non-existent path is just a string.
557
-
558
- ## [0.12.2] — 2026-08-25
559
-
560
- ### Bug fixes
561
-
562
- - **The planner never read any project files, then hung.** On the Agent SDK runtime a run reported
563
- `reads 0/N`, the scout exhausted its turns without reaching `respond_with_scout_result`, the draft
564
- produced a plan with no repo context, and the session then stalled indefinitely — the plan file was
565
- written but the CLI and the console both kept spinning. Reported as
566
- [#8](https://github.com/AzmSquad/Squad-Kit/issues/8). Two causes, both fixed:
567
-
568
- 1. **Every tool call is gated on a permission decision**, and the runtime supplied no handler. The
569
- model emitted `tool_use` for `read_file` / `grep` / `list_dir` and nothing ever executed them.
570
- The runtime now grants its own `mcp__squad-kit-*` tools and denies everything else, so a tool
571
- the planner did not register can never run during planning.
572
- 2. **A claude.ai login carries the account's connectors into the session** as extra MCP servers
573
- (Google Drive and friends), crowding the tool namespace the planner depends on — measured at 12
574
- tools where the planner registers a handful. Planning now runs with `strictMcpConfig`, so it
575
- sees only the tools squad-kit registers.
576
-
577
- Verified on a real subscription run: `reads 0/25` and an indefinite hang before, `scout ✓` with
578
- `reads 8/8` and a clean exit after.
579
-
580
- **Scope.** Cause 2 needs a Claude subscription login and so only affects 0.12.x. Cause 1 is
581
- auth-independent and dates to the Agent SDK runtime landing in **0.10.0**, so API-key users on
582
- `planner.runtime.anthropic: agent-sdk` (the default for Anthropic) were most likely getting
583
- context-free plans too. That inference follows from the mechanism; it has not been reproduced
584
- against an API-key run.
585
-
586
- ### Internal
587
-
588
- - Pinned `packageManager` to `pnpm@9.15.9` and removed the duplicate pin from the CI workflow.
589
- Corepack had been resolving pnpm 11 locally, which re-added a `packageManager` field on every
590
- invocation, generated a stray `pnpm-workspace.yaml`, and failed `pnpm install` on unapproved
591
- esbuild build scripts — breaking `pnpm build`, `pnpm test`, and `npm publish` (whose
592
- `prepublishOnly` runs all three). The lockfile has always been `lockfileVersion 9.0`.
593
-
594
- ## [0.12.1] — 2026-08-24
595
-
596
- ### Bug fixes
597
-
598
- - `squad auth login` ended a **successful** browser login with
599
- `could not verify the login (unknown)` and a warning that the credential "may
600
- be invalid or expired". The token was fine. `accountInfo()` resolves from the
601
- Agent SDK's `initialize` response, and for `CLAUDE_CODE_OAUTH_TOKEN` auth that
602
- response carries `{tokenSource, apiProvider}` and **never** an account — for a
603
- valid token exactly as much as for a bogus one. 0.12.0 treated a missing
604
- account as a failed credential, which flagged every healthy login through the
605
- primary documented flow.
606
-
607
- The probe now separates three outcomes instead of two: an account came back
608
- (verified, shown); a credential *source* came back without an account
609
- (reported as resolved, with the honest caveat that token validity can only be
610
- confirmed by an actual planning run); or nothing came back at all (still
611
- treated as unverified). `squad auth login`'s summary and `squad doctor`'s
612
- planner credential row both reflect which applies, and neither claims a
613
- verification the SDK cannot perform.
614
-
615
- Workspaces that authenticate through the OS credential store are unaffected —
616
- those do report an account and are still verified as before.
617
-
618
- ## [0.12.0] — 2026-08-24
619
-
620
- ### What's new
621
-
622
- - **Plan on your Claude subscription.** The Anthropic planner can authenticate
623
- with the Claude login you already have (Pro, Max, or Team/Enterprise) instead
624
- of an API key. `squad new-plan --api` and the console Generate page both run
625
- on it. No per-token API bill. OpenAI and Google are unchanged and remain
626
- API-key only.
627
- - **`squad auth login | status | logout`.** `login` runs the Anthropic browser
628
- authorization flow and stores the resulting token in `.squad/secrets.yaml`;
629
- `--token <value>` consumes a `claude setup-token` value on a headless machine,
630
- and `--print-only` runs the flow, prints the token, and stores nothing.
631
- `status` reports the resolved mode, the credential behind it, and the
632
- signed-in account (`--json` for a stable scripting shape, `--offline` to skip
633
- the live check). `logout` removes only the token squad-kit stored.
634
- - **`planner.auth.anthropic`** in `.squad/config.yaml` — `subscription`,
635
- `api-key`, or `auto`. The merged default is **`auto`**: prefer a detected
636
- Claude login, fall back to a resolvable API key, otherwise fail naming both
637
- recovery paths. `squad init` offers the subscription as the first and default
638
- choice for new workspaces and writes it explicitly.
639
- - **`planner.anthropicOauthToken`** is a new secrets-only key. `.squad/config.yaml`
640
- rejects it by name at load time.
641
- - **Subscription runs withhold the API key.** In subscription mode
642
- `ANTHROPIC_API_KEY` and `ANTHROPIC_AUTH_TOKEN` are removed (case-insensitively)
643
- from the planner subprocess environment. Both outrank the login credential
644
- inside Claude Code, so an inherited one would silently bill API credits. The
645
- parent shell is untouched.
646
- - **No new runtime dependency.** `squad auth login` shells out to the `claude`
647
- binary that `@anthropic-ai/claude-agent-sdk` already ships through
648
- `optionalDependencies`. A separate Claude Code install is never required.
649
- - **Auth-aware `squad doctor`.** New `planner auth mode` (resolved mode, why,
650
- and the credential — naming any API key it is ignoring) and
651
- `planner auth vs. runtime` (subscription auth requires the Agent SDK runtime)
652
- checks. `planner model resolves at provider` and `planner tier vs. model` now
653
- **skip** on subscription auth: there is no API key to list models with and no
654
- API rate tier to warn about.
655
- - **Console auth surface.** An Authentication control on Config (with a
656
- hard-conflict callout that disables Save), a Claude Account card on Secrets
657
- with a live "Check again" probe and a masked stored token, an auth badge and
658
- branched billing copy on Generate, a dedicated recovery callout for
659
- `auth_unavailable` failures, and an Auth column on the runs index. The console
660
- guides the login and never performs it — it cannot complete an OAuth callback
661
- on your behalf.
662
- - **Run records carry `authMode`**, and the planner stream gained one additive
663
- `auth_info` event. Older clients ignore unknown event kinds.
664
- - **Cost copy branches on auth mode.** `printPlannerApiCostNotice()` and the
665
- limit explanations no longer describe per-token billing on a subscription run.
666
-
667
- ### Bug fixes
668
-
669
- - Planner model-list probe (`src/core/probes.ts`): a network-level `fetch`
670
- rejection (offline, DNS failure, proxy refusal) or a non-JSON response body
671
- threw out of `fetchProviderModelIds` instead of returning a failure result, so
672
- `squad doctor`'s `planner model resolves at provider` check surfaced an
673
- unexpected error rather than a clean diagnosis. Both are now caught and
674
- reported as `status: 0` with the message, and long error bodies are truncated.
675
- Shipped to GitHub after v0.11.0 (`d2d67a1`) and missed the 0.11.0 changelog.
676
-
677
- ### Upgrade notes
678
-
679
- Zero-config. A `config.yaml` with no `planner.auth` block merges to `auto` and
680
- keeps loading; every existing `planner.*` key, including `maxOutputTokens`, is
681
- unaffected. An untouched 0.11.0 API-key workspace resolves to `api-key` and
682
- behaves identically — **provided the machine has no Claude login**.
683
-
684
- Under `auto`, a detected Claude login **outranks** a stored API key. So on a
685
- machine that has both, an upgraded workspace switches to subscription billing.
686
- Nothing errors, and the change is announced rather than silent: `squad doctor`'s
687
- `planner auth mode` row reads `subscription (auto — Claude login detected) → …
688
- · ignoring the API key from .squad/secrets.yaml`. Set
689
- `planner.auth.anthropic: api-key` to pin the previous behaviour.
690
-
691
- `squad doctor --fix` deliberately does **not** pin an implicit `auto` to
692
- `api-key`. `auto` exists so that a Claude login takes over once one appears;
693
- pinning would silently prevent that forever.
694
-
695
- ### Notes / limitations
696
-
697
- - **Usage draws on your Claude plan's limits.** Per Anthropic's
698
- [Use the Claude Agent SDK with your Claude plan](https://support.claude.com/en/articles/15036540-use-the-claude-agent-sdk-with-your-claude-plan),
699
- Agent SDK, `claude -p`, and third-party usage consumes the subscription's
700
- usage limits, and the separately announced monthly SDK credit is not currently
701
- available. The claim this release makes is **"no per-token API bill"** — not
702
- free, and not unlimited. Opus planning against a **Pro** plan consumes a usage
703
- window noticeably faster than against **Max**. Hitting the ceiling means
704
- waiting for the reset window or switching to an API key.
705
- - **Enterprise managed-settings `apiKeyHelper` still wins.** squad-kit runs the
706
- Agent SDK with `settingSources: []`, so user, project, and local settings are
707
- not read and an ordinary user-level `apiKeyHelper` cannot hijack a
708
- subscription run. **Policy settings are always merged regardless**, so a
709
- managed-settings `apiKeyHelper` deployed by MDM is still honoured and still
710
- outranks the login credential — on a managed device, `auth: subscription` may
711
- resolve through the organization's helper. This was established by reading the
712
- credential resolver in the bundled `claude` binary, **not** on a live managed
713
- device. `squad auth status` reports the `apiKeySource` the SDK actually
714
- resolved.
715
- - **`auth: subscription` requires the Agent SDK runtime.** `@ai-sdk/anthropic`
716
- authenticates with `x-api-key`, and an OAuth credential is not an API key.
717
- `auth: subscription` with `planner.runtime.anthropic: vercel`, or with a
718
- non-Anthropic provider, is a hard failure before any network call — never a
719
- silent downgrade to API billing.
720
- - **Account details are never persisted.** Email, organization, and plan are
721
- fetched live for display in `squad auth status`, `squad doctor`, and the
722
- console. `.squad/runs/` records the resolved **mode** and `apiKeySource` only —
723
- no token, key, email, or organization. Asserted by a test.
724
- - **A successful SDK handshake does not prove the credential works.**
725
- `accountInfo()` resolves from the subprocess's `initialize` response, which
726
- succeeds whether or not the credential is valid. Subscription auth that
727
- reports no account **and** no `apiKeySource` is therefore treated as
728
- unverified rather than signed in.
729
- - `docs/auth.md` is not shipped inside the npm tarball. It is served at
730
- <https://squad-kit.com/docs/auth> and lives in the repo under `docs/`.
731
-
732
- ## [0.11.0] — 2026-05-04
733
-
734
- ### What's new
735
-
736
- - API `new-plan` can append planner events to `.squad/runs/<id>.events.jsonl`
737
- (thinking text redacted on disk; retention rotates old files).
738
- - Agent SDK runs emit richer events (tool lifecycle, thinking deltas, caps,
739
- runtime metadata) for the CLI and console.
740
- - API-mode `new-plan` prints stage pipeline, budget meters, and thinking
741
- activity; the plan summary cites the events file path.
742
- - `squad console` HTTP API lists persisted runs and serves stored event streams.
743
- - Console UI adds a runs index, run report page, and a reworked Generate view
744
- with live panels and navigation.
745
-
746
- ### Bug fixes
747
-
748
- - `squad doctor` skips live external probes when `CI` is set and surfaces
749
- planner probe errors cleanly.
750
- - Vitest timeouts increased for slow config loads and console API tests.
751
-
752
- ## [0.10.0] — 2026-05-04
753
-
754
- ### What's new
755
-
756
- - Anthropic planning defaults to the Claude Agent SDK so Opus 4.7 can use
757
- adaptive thinking and effort; OpenAI and Google stay on the Vercel AI SDK.
758
- - Planner YAML and CLI cover runtime choice, thinking mode, effort, and
759
- per-phase effort (`--anthropic-runtime`, `--effort`, `--scout-effort`,
760
- `--no-thinking`).
761
- - The planner summary shows which runtime ran; run JSON may record runtime and
762
- a provider-options snapshot for dashboards and tooling.
763
- - `squad doctor` checks runtime wiring, model vs runtime fit, and the Agent SDK
764
- binary.
765
- - Published CLI no longer bundles `cli.js.map`; set `SQUAD_TSUP_SOURCEMAP=1`
766
- when running `tsup` locally if you need a source map.
767
- - On the Agent SDK path, cache token counts are not surfaced in telemetry
768
- (caching still applies); live usage stays aggregate-only until the run ends;
769
- cancel may not stop the upstream HTTP request immediately.
770
-
771
- ## [0.9.1] — 2026-05-04
772
-
773
- ### Bug fixes
774
-
775
- - Anthropic scout and draft attach extended thinking so Opus 4.7+ avoids
776
- failed calls when the SDK would send incompatible temperature overrides.
777
-
778
- ## [0.9.0] — 2026-05-04
779
-
780
- ### What's new
781
-
782
- - Scout precedes the draft planner in API `new-plan` for a cheaper first pass.
783
- - Validation verifies citations offline and suggests typo fixes for paths.
784
- - New planner tools: `grep`, `list_dir`, and `read_file` with offset/limit.
785
- - Scout sees a bullet list of `.squad/plans/` markdown (caps at ~30 files).
786
- - Anthropic/OpenAI/Google run through Vercel AI SDK (`ai`, `@ai-sdk/*`).
787
- - Tool outputs keep `toolName`/`isError` metadata across turns where supported.
788
- - Scout snippets use separate user-role cache blocks for stabler prompts.
789
- - Generate-plan template adds edge-case, failure-mode, and test-plan sections.
790
- - Disable scout or validation via flags or YAML (`planner.stages.*`).
791
-
792
- ### Bug fixes
793
-
794
- - Jira Tracker broke on blank search (HTTP 400); bounded JQL restores results.
795
- - Atlassian JSON errors surface in tracker messages again (snippet capped).
796
-
797
- ### Breaking changes
798
-
799
- - Dropped `planner.budget.maxCostUsd` and `cost_cap` limits (never enforced).
800
- - Remove lingering keys from `config.yaml` if they are still declared.
801
-
802
- ## [0.8.0] — 2026-05-03
803
-
804
- ### What's new
805
-
806
- - Generate page shows provider rate limits: countdown, auto-retry banner,
807
- and rerun when the planner aborts over the wait cap.
808
- - Planner emits richer `rate_limit` stream events (`retrying` vs `aborted`,
809
- cap seconds, provider, short error snippet). CLI `new-plan` only shows the
810
- “waiting to retry” spinner for the retrying phase.
811
- - Run SSE ends a rate-limit abort with `done` (partial) only — no extra
812
- `error` line repeating the same message.
813
-
814
- ### Bug fixes
815
-
816
- - Jira issue search called deprecated `/rest/api/3/search` (Atlassian returns
817
- HTTP 410). Search now uses `/rest/api/3/search/jql` with clearer 410 errors
818
- if an old client hits removed endpoints.
819
-
820
- ## [0.7.2] — 2026-04-28
821
-
822
- ### Bug fixes
823
-
824
- - The console sidebar and dashboard still reported `v0.6.0` after 0.7.1
825
- because `/api/meta` and `/api/dashboard` had the version hardcoded.
826
- Both now read from `package.json` (matching the CLI and `/healthz`
827
- fix in 0.7.1).
828
- - `squad config set tracker --type github` was a no-op stub: it set
829
- `tracker.type = github` without prompting for owner/repo or PAT and
830
- skipped the connectivity probe. It now matches the Jira and Azure
831
- flows — interactive credential prompt, secrets written to
832
- `.squad/secrets.yaml`, post-config GitHub probe, and an updated
833
- next-steps hint with `--id <github-issue-number>`.
834
-
835
- ## [0.7.1] — 2026-04-28
836
-
837
- ### Bug fixes
838
-
839
- - `squad --version` printed `0.6.0` on 0.7.0 — the version string was
840
- hardcoded in the CLI and the console `/healthz` endpoint. Both now
841
- read from `package.json` and stay in sync with the installed package.
842
-
843
- ## [0.7.0] — 2026-04-28
844
-
845
- ### What's new
846
-
847
- - GitHub Issues works as the issue tracker: set owner/repo in config, PAT (or
848
- `GITHUB_TOKEN` / `GITHUB_HOST`) in secrets, search and import like Jira or
849
- Azure. Console Secrets page has GitHub host and token fields plus a
850
- connectivity test; `squad doctor` probes the GitHub REST API.
851
-
852
- ### Breaking changes
853
-
854
- - Linear is no longer a tracker type. Use GitHub Issues, Jira, or Azure, or
855
- set tracker to `none`. Update `.squad/config.yaml` if you had `linear`.
856
-
857
- ## [0.6.1] — 2026-04-26
858
-
859
- ### Bug fixes
860
-
861
- - Azure DevOps console tracker search was failing on first load and on text
862
- search with HTTP 400. WIQL queries now require the team project (`@project`)
863
- in the WHERE clause; HTTP 400 responses include a clearer hint about
864
- org/project or WIQL scoping.
865
-
866
- ## [0.6.0] — 2026-04-29
867
-
868
- ### Why this release
869
-
870
- squad-kit 0.5.0 shipped the console end-to-end. Real users found the visual layer hostile for an admin/console surface — too marketing-y, glow orbs everywhere, dialog positioning glitches under our overflow rules — so 0.6.0 is a redesign-only release. Zero CLI behaviour changes, zero API contract changes. The console adopts a Vercel/Geist-inspired palette: flat near-black surfaces, white text, accent green reserved for status (live planner dot, focus rings, active sidebar, success badges). Every dialog is now portal-rendered and centred reliably. The signature Vercel/Linear move — Cmd+K command palette — is in.
871
-
872
- ### Added
873
-
874
- - console-ui: Cmd+K command palette (powered by `cmdk`) — searches stories, plans, and actions; Linear-style chord shortcuts (`g s` for Stories, `g p` for Plans, `n s` for new story, `?` for the cheatsheet, etc.).
875
- - console-ui: portal-rendered Dialog primitive with focus trap, body scroll lock, ESC + backdrop close, focus restore. Replaces the native `<dialog>` element (and fixes its positioning bugs).
876
- - console-ui: Toast system (`useToast()`) with bottom-right stack, tone-coloured icons, auto-dismiss, manual dismiss, optional inline action.
877
- - console-ui: Confirm provider (`useConfirm()`) — promise-based ergonomics for destructive actions.
878
- - console-ui: Callout component for inline alerts (default / info / success / warning / danger). Replaces every ad-hoc tone block sprinkled through pages.
879
- - console-ui: Density toggle (Comfortable / Compact) in the topbar; persists to `localStorage`, applies via `[data-density]` on `<html>`.
880
- - console-ui: Breadcrumbs in the topbar, derived from the route match tree.
881
- - console-ui: New primitives — `Page`, `Spinner`, `IconButton`, `Tooltip`, `Kbd`, `Field`. All density-aware.
882
- - console-ui: Internal design playground at `/__design` for primitive sanity checks.
883
- - console-ui: `lucide-react` for icons; sidebar letter-icons (`D / S / P …`) replaced with proper Lucide icons.
884
-
885
- ### Changed
886
-
887
- - console-ui: complete design-token rewrite — Geist-inspired graphite scale (12 steps from `--gray-1` to `--gray-12`), accent green reserved for status only. The marketing-site palette stays on the marketing site; the console diverges. CSS variable names that pages already used (`--color-bg`, `--color-surface`, `--color-text`, `--color-accent`, etc.) keep working — their values changed.
888
- - console-ui: layout shell rewritten — sidebar is sectioned (Workspace / Run / Settings) with Lucide icons, project switcher moved into the sidebar header, topbar shows breadcrumbs + density toggle + Cmd+K hint. The decorative `grid-bg` and `glow-orb` divs were removed from the working surface.
889
- - console-ui: every page rewritten through the new `<Page>` wrapper. Inline tone classes (`bg-emerald-…`, `bg-red-…`, etc.) replaced with `<Badge>`, `<Callout>`, and `<Toast>`. Destructive actions go through `useConfirm()`.
890
- - console-ui: charts read CSS variables instead of hard-coded hex codes; near-monochrome palette with green only for the most-recent / success series.
891
- - console-ui: shimmer Skeleton replaces the static `animate-pulse` block.
892
- - console-ui: Markdown viewer adopts a near-monochrome prism theme matching the new tokens.
893
-
894
- ### Fixed
895
-
896
- - console-ui: dialog positioning bugs caused by the native `<dialog>` element interacting with our layout's overflow rules. Now portal-rendered and reliably centred.
897
-
898
- ### Migration
899
-
900
- No breaking changes for CLI users. The `.squad/` file formats, command flags, planner output, tracker integration, and config schema are byte-identical to 0.5.0. If you've installed `squad-kit@0.5.0` globally and run `squad console`, simply `npm i -g squad-kit@0.6.0` and your next `squad console` opens the new look. No `.squad/config.yaml` changes.
901
-
902
- ### Internal
903
-
904
- - console-ui: `cmdk`, `lucide-react` added to `console-ui/package.json` (consumed at build-time only; the CLI runtime dependency tree is unchanged).
905
- - console-ui: extensive primitive coverage with vitest — tests grew by ~25 cases across `Button`, `Badge`, `Spinner`, `Field`, `Page`, `Dialog`, `Toast`, `Callout`, `Confirm`, `Breadcrumbs`, `useDensity`, `CommandPalette`, `useGlobalShortcuts`.
906
-
907
- ## [0.5.0] — 2026-04-25
908
-
909
- ### Why this release
910
-
911
- squad-kit 0.4.0 made the planner reliable and the partial-plan recovery flow first-class. 0.5.0 makes the whole product **shareable**: a local-first, dark-modern web console that exposes every CLI capability with a UI a teammate can use without learning the commands.
912
-
913
- The console isn't a hosted dashboard. It binds to `127.0.0.1`, gates every API request behind a per-session token, and reads/writes the same `.squad/` files the CLI already uses. Open it with `squad console`, share a screenshot of a streaming planning run on Slack, close the tab, keep working in the terminal.
914
-
915
- ### Added
916
-
917
- - `squad console` — open `http://127.0.0.1:4571` (configurable) for a dashboard, stories CRUD, plans browser with diff, live planner streaming via SSE, visual editors for `config.yaml` and `secrets.yaml`, tracker issue search and import, graphical `squad doctor`. Token-gated and loopback-only.
918
- - Persistent run history in `.squad/runs/<runId>.json` (last 20 retained). Dashboard reads from it for cache-hit ratio, token spend sparkline, and run-duration bars.
919
- - `~/.squad/recent-projects.json` — per-user list of project roots you've opened the console against; surfaces in the topbar dropdown.
920
- - Internal: `PlannerEventBus` + `runPlanner({ events, runId, abort })` lets multiple consumers share one run; CLI rendering becomes a bus subscriber.
921
- - Internal: `core/story-mutations.ts` (`createStoryRecord`, `deleteStoryRecord`, `createStoryRecordFromIssue`) is now the single implementation behind the CLI new-story / rm-story commands and the console.
922
- - Internal: `commands/doctor-engine.ts` extracts `gatherContext` and `runAllChecks` so the doctor logic is reusable from the API.
923
- - Internal: `TrackerClient.searchIssues` for Jira (REST `/search`) and Azure (WIQL).
924
- - Build: `pnpm size:guard` — fails CI if the published tarball exceeds 2.5 MB unpacked. Wired into `prepublishOnly`.
925
-
926
- ### Changed
927
-
928
- - `pnpm build` now runs the SPA build (`pnpm -C console-ui build`) before the CLI build (`tsup`) and verifies `dist/console-ui/index.html` was emitted.
929
- - The npm tarball gains a `dist/console-ui/` tree (~700–900 KB gzipped).
930
-
931
- ### Migration
932
-
933
- No breaking changes. CLI commands behave byte-identically. The `.squad/runs/` directory and `~/.squad/recent-projects.json` are added on first console run; `.squad/runs/` is gitignored automatically (managed block).
934
-
935
- ## [0.4.0] — 2026-04-24
936
-
937
- ### Added
938
-
939
- - `planner.maxOutputTokens` in merged config (default **16384** tokens per model round).
940
- - Interactive `squad new-plan --api` prompt when a planner limit is hit: continue (extends read/context/time/round/output budgets for that run) or stop, with a short billing note up front.
941
- - Incomplete API plans save as `*.partial.md` plus YAML `squad-kit-plan-status: partial`; the CLI exits with code **2** when planning did not finish cleanly (no stack trace for that path).
942
-
943
- ### Changed
944
-
945
- - New plan files are named from the **story folder id** (`NN-story-<id-slug>.md`) instead of slugging the title hint, so paths stay short; `00-overview.md` still carries the human title.
946
- - Intake scaffolding fills more fields from fetched tracker issues (Azure / Jira) when `squad new-story` pulls work item data.
947
- - Agent `squad-plan` templates remind editors not to overwrite the first-line `<!-- squad-kit: … -->` plan metadata comment.
948
-
949
- ### Fixed
950
-
951
- - `squad list` reads `generated by` metadata from the first matching `<!-- squad-kit: … -->` line in the first lines of a plan file, not only line 1.
952
- - `findPlanFor` prefers a non-`.partial.md` plan when both exist for the same story id.
953
-
954
- ### Site
955
-
956
- - Added `robots.txt` and small head metadata tweaks on the Astro site.
957
-
958
- ## [0.3.0] — 2026-04-24
959
-
960
- ### Why this release
961
-
962
- squad-kit 0.2.2 stabilised rate-limit handling with retries and a softer `squad doctor` warning.
963
- That made failures loud but didn't reduce the underlying token spend: every planning turn
964
- re-sent the cumulative transcript, so costs scaled roughly quadratically with the number of
965
- tool calls. On Anthropic Tier 1 with Opus, that made non-trivial plans structurally infeasible.
966
-
967
- 0.3.0 adds **prompt caching end-to-end** across Anthropic, OpenAI, and Google. Expected savings
968
- on a typical 10-turn run: ~70% fewer billed input tokens, and — critically on Anthropic —
969
- cached reads don't count the same against your per-minute quota. Tier 1 Opus users should find
970
- moderate plans work where they previously hit 429 from turn 7 onward.
971
-
972
- ### Added
973
-
974
- - Anthropic explicit prompt caching via `cache_control: { type: 'ephemeral' }` on the system
975
- prompt and the most recent tool-result block each turn (cache TTL rolls forward).
976
- - OpenAI and Google implicit prefix caching (no config required; activated by the stable-prefix
977
- refactor below).
978
- - `planner.cache.enabled` config knob (default `true`). Configure via `squad config set planner`.
979
- - Run-summary line: `cache hit 68% (22.4k read / 32.9k total)` every `squad new-plan --api` run.
980
- - `squad doctor` now checks `planner cache effectiveness`, reading `.squad/.last-run.json`.
981
- - `.squad/.last-run.json` persistence of planner run stats (git-ignored, per-user).
982
- - `Usage.cacheCreationTokens` and `Usage.cacheReadTokens` on every provider response.
983
- - Deterministic request-body builders (`buildAnthropicBody`, `buildOpenAIBody`, `buildGoogleBody`)
984
- exposed for testing; dev-mode warning when a turn mutates the cacheable prefix.
985
- - Copy-paste mode (`squad new-plan --copy`) now writes the composed prompt to
986
- `.squad/.last-copy-prompt.md` and prints a compact summary (mode · story · file · size · est
987
- tokens · clipboard status) instead of dumping the full 5–10 KB prompt into the terminal.
988
- - Clipboard fallbacks for Linux (`xsel` in addition to `xclip`) and Termux
989
- (`termux-clipboard-set`). Headless Linux / SSH sessions now surface an actionable reason in
990
- the summary ("no display server detected — install xclip or xsel, or use the saved file")
991
- instead of silently skipping.
992
- - `squad config set planner` and `squad config set tracker` print a "▸ Next:" block so users
993
- know what to run next (`squad doctor` → `squad new-story` → `squad new-plan`).
994
- - `squad tracker link` and `squad migrate` also print "▸ Next:" guidance.
995
- - Managed `.gitignore` block now covers `.squad/.last-run.json` and `.squad/.last-copy-prompt.md`.
996
-
997
- ### Changed
998
-
999
- - System prompt no longer embeds timestamps, random IDs, or absolute host paths (these
1000
- cache-busted the prefix on every turn).
1001
- - `squad doctor` Anthropic Tier 1 Opus warning softened from "you will hit ITPM" to "tight but
1002
- viable with caching on."
1003
- - `squad config set planner` no longer prompts for `planner.modelOverride`. The interactive
1004
- flow is shorter and less intimidating; power users can still set the override directly in
1005
- `.squad/config.yaml` (documented in `docs/customization.md`).
1006
- - `copyToClipboard()` now returns a structured `{ ok, tool?, reason? }` result instead of a
1007
- bare boolean, so callers can explain failures to the user.
1008
-
1009
- ### Known limitations
1010
-
1011
- - Google `cachedContents` explicit API not implemented (implicit caching is sufficient for
1012
- single-run CLI use).
1013
- - No cross-run persistence of cache stats yet — doctor only reads the most recent run.
1014
- - No automatic context compression when transcripts exceed ~50 KB. Caching helps but doesn't
1015
- solve the long-horizon case. 0.4.0 candidate.
1016
- - Anthropic 1-hour cache TTL (`ttl: "1h"`) not used — default 5-minute TTL covers single-run.
1017
-
1018
- ### Migration
1019
-
1020
- See `docs/migrating-from-0.1.md` §9 "Upgrading from 0.2.x to 0.3.0" for the full path. Short
1021
- version: `squad upgrade` and you're done. Caching is on by default; no config edits required.
1022
-
1023
- ## [0.2.2] - 2026-04-22
1024
-
1025
- ### Fixed
1026
-
1027
- - **Rate-limit retry no longer burns a doomed request.** 0.2.1 capped the auto-retry wait at 30 s. When a provider asked for longer than that (common on Anthropic Tier 1, which regularly asks for 60–180 s), squad-kit would retry *inside the same throttle window* and fail a second time. 0.2.2:
1028
- - Raises the retry cap from 30 s to **90 s**, which comfortably covers the provider-suggested wait for most Tier 1 / free-tier 429s.
1029
- - **Skips the retry entirely** when `Retry-After` is longer than the 90 s cap, and surfaces a dedicated message explaining the decision (`squad-kit did not auto-retry: the provider's 132s wait is longer than our 90s cap, so retrying would just burn another request inside the same throttle window.`) instead of wasting a request and showing the "already retried" variant.
1030
-
1031
- ### Added
1032
-
1033
- - **`squad doctor` now reports planner tier vs. model awareness** (check id `planner-tier`). When `planner.provider === 'anthropic'` and the resolved plan model id contains `opus`, the check emits a **warn** with a fix hint suggesting `squad config set planner` to pick Sonnet or Haiku, which live in separate per-model rate-limit buckets on Anthropic Tier 1 (10 k input tokens / minute). For non-Anthropic providers and non-Opus models, the check is `skip` or `ok` — no noise for users who aren't affected.
1034
- - `rateLimitMessage` gained a `retrySkippedReason` + `maxRetrySec` field, so the error text can distinguish "we retried and got throttled again" (firm over-quota) from "we did not retry because your wait is longer than our cap" (retry would be pointless). Both cases still surface the same four recovery options.
1035
-
1036
- ## [0.2.1] - 2026-04-22
1037
-
1038
- ### Fixed
1039
-
1040
- - **`squad new-plan --api` now handles provider rate limits (HTTP 429) properly.** Previously a 429 surfaced the generic `Run \`squad doctor\` to verify models and credentials.` hint, which is misleading — the credentials are fine, the org is just over its per-minute quota. `runPlanner` now:
1041
- - Detects 429s across Anthropic, OpenAI, and Google (new `errorKind: 'rate_limit'` on `ProviderResponse`).
1042
- - Parses `Retry-After` (seconds or HTTP-date) and Google's body-level `retryDelay` field.
1043
- - Retries **once** automatically, waiting the provider-requested time capped at 30 seconds. A new `onRateLimit(waitSec)` callback lets the UI show a "retrying in Ns" notice.
1044
- - When the retry also fails, throws a dedicated error that names the provider, summarises the wait time, and lists four concrete recovery paths: wait and retry, switch planner model (`squad config set planner`), tighten `planner.budget`, or upgrade tier (with a deep-link to each provider's limits page).
1045
- - The generic (non-429) provider-error hint now reads `Run \`squad doctor\` to diagnose, or retry — most 5xx errors are transient.`, which is accurate for the actual 5xx / network cases it covers.
1046
-
1047
- ### Added
1048
-
1049
- - `detectRateLimit()` and `rateLimitMessage()` in `src/planner/provider-errors.ts`. Both cover all three supported providers and are unit-tested with real-shaped 429 fixtures.
1050
-
1051
- ## [0.2.0] - 2026-04-22
1052
-
1053
- ### tracker-intake-fetch
1054
-
1055
- **Added**
1056
-
1057
- - `squad new-story --id <ID>` auto-fetches title, description, labels, and attachments (≤ 10 MB each) from the configured tracker. Supported: Jira Cloud, Azure DevOps Services.
1058
- - `.squad/secrets.yaml` as a second credential source (after environment variables) for planner keys and tracker tokens. Created with mode `0600` on POSIX; auto-added to `.gitignore`.
1059
- - `squad init` now prompts for tracker credentials when a supported tracker is chosen, and offers to save the planner key inline as an alternative to exporting an env var.
1060
- - `squad status` shows tracker type, workspace, and credential source (`env` / `secrets.yaml` / `missing`).
1061
- - `squad new-story` flags: `--no-fetch`, `--no-attachments`, `--attachment-mb <n>`.
1062
- - `squad new-story --no-tracker` — skip tracker id and fetch for a single story in a workspace that normally requires tracker ids. Interactive mode now offers "skip tracker for this story" alongside "enter id" when required.
1063
-
1064
- **Changed**
1065
-
1066
- - `squad new-story` accepts the feature slug as an optional positional; prompts when it is omitted in a TTY (including a picker for existing feature folders). Passing `-y` / `--yes` keeps fail-fast behaviour when the slug is missing. `CI=1` forces non-interactive mode even in a TTY.
1067
- - `squad tracker link` accepts both the story path and the tracker id as optional positionals; prompts with a story picker and id input when omitted. `-y` / `--yes` and `CI=1` force non-interactive fail-fast.
1068
- - CLI-wide: commands treat missing required input as promptable in a TTY; `-y` / `--yes` and `CI=1` opt out.
1069
- - Credential resolution order documented: env var → `.squad/secrets.yaml` → prompt → fail. Applies to both planner and tracker credentials.
1070
-
1071
- **Security**
1072
-
1073
- - `.squad/config.yaml` continues to reject secret-shaped keys (`apiKey`, `token`, …). Secrets live in `.squad/secrets.yaml` only.
1074
- - Auto-managed `.gitignore` block covers `.squad/secrets.yaml`, `.squad/stories/**/attachments/`, and `.squad/.trash/`.
1075
-
1076
- ### Added
1077
-
1078
- - `squad config` command group with `show`, `set planner`, `set tracker`, `unset planner`, `unset tracker`, and `remove-credential <section>` subcommands. Every field in `.squad/config.yaml` and `.squad/secrets.yaml` can now be edited interactively without opening a text editor.
1079
- - `squad init` on an existing workspace now offers **Reconfigure planner / Reconfigure tracker / Overwrite / Cancel** instead of silently bailing. `--force` keeps the old overwrite behaviour for scripts.
1080
-
1081
- - `squad upgrade` self-update command. Detects the package manager used to install squad-kit, fetches the latest version from npm, and runs the appropriate global-install command after confirmation. Refuses dev installs and major version bumps (print-manual-guide instead).
1082
- - `squad migrate` command applies one-shot 0.1.x → 0.2.0 structural migrations (delete legacy prompts, gitignore, secrets perms, planner budget defaults, config normalisation). Idempotent; destructive by design; gated behind a confirmation prompt unless `--yes` is passed.
1083
- - `squad doctor` command: a full health check covering planner config, tracker credentials, model list probes (no completion calls), `.gitignore` managed block, `secrets.yaml` permissions, legacy `.squad/prompts/`, and `.squad/` layout. `--fix` applies non-destructive repairs only; destructive fixes belong in `squad migrate`.
1084
- - `planner.modelOverride` (per-provider) lets you pin a different plan-phase model id without editing squad-kit source.
1085
- - `pnpm verify:models` (`scripts/verify-models.ts`) probes provider model list APIs before publish so pinned ids cannot drift unnoticed.
1086
- - Clear, actionable error when the planner model returns 404 (upgrade, config override, or `squad doctor`).
1087
- - `squad status` marks the planner row with `(override)` when `modelOverride` is active for the current provider.
1088
- - Direct planner API (optional): Anthropic, OpenAI, Google. Squad calls the planner for you and writes the plan file.
1089
- - Demand-driven context: planner reads files on request via a bounded budget (file count, bytes, wall-clock).
1090
- - Interactive picker in `squad new-plan` over un-planned intakes.
1091
- - Already-planned guard with `--yes` override.
1092
- - `--api`, `--copy`, `--feature`, `--all` flags on `new-plan`.
1093
- - `squad init` asks about planner setup; `--planner <provider>` for non-interactive.
1094
- - `squad status` shows planner provider, model, and env-var presence.
1095
- - `squad list` shows which plans were generated by the API vs copy-paste.
1096
- - Visual identity: mint-green brand, custom spinner frames, banner, summary boxes, consistent prefixes across all commands.
1097
- - `squad rm` command group: `rm story`, `rm plan`, `rm feature`, each with `--dry-run`, `--trash`, `-y`, and interactive pickers. Deleting a story cascades to the matching plan file and overview row. `.squad/.trash/<timestamp>/` is now git-ignored automatically.
1098
-
1099
- ### Changed
1100
-
1101
- - Every user-facing error now ends with a recommended next command (for example, `Run \`squad doctor\` to diagnose`). Failures no longer dead-end users at an error string.
1102
- - `ensureGitignore` now includes `.squad/.trash/` in the managed block. Existing users will see the line appended on the next `squad doctor --fix` or any command that calls `ensureGitignore`.
1103
- - Anthropic plan model pinned to the versioned Claude API id `claude-opus-4-7` (replacing the prior alias default) and execute remains dated `claude-haiku-4-5-20251001`, per Anthropic’s model overview — run `pnpm verify:models` after changes.
1104
- - `new-plan <intake>` is now optional; omit to pick interactively.
1105
- - `--no-copy` renamed to `--no-clipboard` (old flag removed). `--copy` now forces copy-paste mode.
1106
- - Prompts (`generate-plan.md`, `intake.md`, `story-skeleton.md`) now ship entirely within the squad-kit package. Fresh installs no longer create a `.squad/prompts/` directory. Stale `.squad/prompts/` from 0.1.x installs is ignored at runtime and cleaned up by `squad migrate`.
1107
-
1108
- ### Breaking changes for 0.1.x users
1109
-
1110
- - 0.1.x users who upgrade should run `squad migrate` once per repo. A `.squad/prompts/` folder left from 0.1.x is deleted outright (prompts are now bundled in the squad-kit package).
1111
- - If you customised `.squad/prompts/*.md`, those customisations are no longer used. The canonical prompts are in the installed squad-kit package. To customise, fork squad-kit and patch `templates/prompts/`. (This is intentional: behaviour was inconsistent before — some commands ignored the user copy — and silent version drift was breaking workflows.)
1112
-
1113
- ### Security
1114
-
1115
- - Config loader rejects any YAML entry whose key looks like `apiKey`, `token`, `secret`, or `credential`.
1116
-
1117
- ### Known limitations
1118
-
1119
- - OpenAI and Google planner model ids in squad-kit remain provider “latest”-style names for 0.2.0; dated snapshots for those providers are planned for 0.2.1 once verified.
1120
-
1121
- ### Non-goals (still deferred)
1122
-
1123
- - OpenAI-compatible generic endpoint (OpenRouter, Ollama, local). Targeted for 0.3.
1124
- - `squad implement` command. Targeted for 0.3.
1125
- - MCP server, telemetry.
1126
-
1127
- ## [0.1.0] - 2026-04-21
1128
-
1129
- First public release.
1130
-
1131
- ### Added
1132
-
1133
- - `squad init` — scaffolds `.squad/` with `config.yaml`, prompt templates, and agent slash commands.
1134
- - `squad new-story <feature-slug>` — creates `.squad/stories/<feature>/<id>/intake.md` with `attachments/`.
1135
- - `squad new-plan <intake-path>` — composes the plan-generation meta-prompt inline with the intake, prints to stdout, and copies to clipboard.
1136
- - `squad status` — reports story / plan counts and next global `NN`.
1137
- - `squad list [--feature <slug>]` — table of stories and their plan state.
1138
- - `squad tracker link <story> <id>` — upserts a tracker id on an existing intake.
1139
- - Agent slash-command templates for **Claude Code**, **Cursor**, **GitHub Copilot**, and **Gemini CLI**.
1140
- - Tracker id validators for **GitHub**, **Linear**, **Jira**, and **Azure DevOps** (no API calls; format validation only).
1141
- - Plan-generation meta-prompt (`generate-plan.md`), intake template (`intake.md`), and plan skeleton reference (`story-skeleton.md`).
1142
- - Documentation: `docs/philosophy.md`, `docs/getting-started.md`, `docs/customization.md`, `docs/vs-spec-kit.md`.
1143
-
1144
- [Unreleased]: https://github.com/AzmSquad/squad-kit/compare/v1.2.1...HEAD
1145
- [1.2.1]: https://github.com/AzmSquad/squad-kit/releases/tag/v1.2.1
1146
- [1.2.0]: https://github.com/AzmSquad/squad-kit/releases/tag/v1.2.0
1147
- [1.1.1]: https://github.com/AzmSquad/squad-kit/releases/tag/v1.1.1
1148
- [1.1.0]: https://github.com/AzmSquad/squad-kit/releases/tag/v1.1.0
1149
- [1.0.1]: https://github.com/AzmSquad/squad-kit/releases/tag/v1.0.1
1150
- [1.0.0]: https://github.com/AzmSquad/squad-kit/releases/tag/v1.0.0
1151
- [0.6.0]: https://github.com/AzmSquad/squad-kit/releases/tag/v0.6.0
1152
- [0.5.0]: https://github.com/AzmSquad/squad-kit/releases/tag/v0.5.0
1153
- [0.3.0]: https://github.com/AzmSquad/Squad-Kit/releases/tag/v0.3.0
1154
- [0.2.2]: https://github.com/AzmSquad/squad-kit/compare/v0.2.1...v0.2.2
1155
- [0.2.1]: https://github.com/AzmSquad/squad-kit/compare/v0.2.0...v0.2.1
1156
- [0.2.0]: https://github.com/AzmSquad/squad-kit/compare/v0.1.0...v0.2.0
1157
- [0.1.0]: https://github.com/AzmSquad/squad-kit/releases/tag/v0.1.0