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