squad-kit 0.1.0 → 0.2.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/CHANGELOG.md +105 -0
- package/README.md +145 -15
- package/SECURITY.md +57 -0
- package/dist/cli.js +4588 -411
- package/dist/cli.js.map +1 -1
- package/package.json +20 -10
- package/templates/agents/claude-code/squad-plan.md +3 -3
- package/templates/agents/copilot/squad-plan.prompt.md +1 -1
- package/templates/agents/cursor/squad-plan.md +3 -3
- package/templates/agents/gemini/squad-plan.toml +1 -1
- package/templates/prompts/generate-plan.md +1 -0
- package/templates/prompts/intake.md +1 -1
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
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
|
+
## [0.2.0] - 2026-04-22
|
|
11
|
+
|
|
12
|
+
### tracker-intake-fetch
|
|
13
|
+
|
|
14
|
+
**Added**
|
|
15
|
+
|
|
16
|
+
- `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.
|
|
17
|
+
- `.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`.
|
|
18
|
+
- `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.
|
|
19
|
+
- `squad status` shows tracker type, workspace, and credential source (`env` / `secrets.yaml` / `missing`).
|
|
20
|
+
- `squad new-story` flags: `--no-fetch`, `--no-attachments`, `--attachment-mb <n>`.
|
|
21
|
+
- `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.
|
|
22
|
+
|
|
23
|
+
**Changed**
|
|
24
|
+
|
|
25
|
+
- `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.
|
|
26
|
+
- `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.
|
|
27
|
+
- CLI-wide: commands treat missing required input as promptable in a TTY; `-y` / `--yes` and `CI=1` opt out.
|
|
28
|
+
- Credential resolution order documented: env var → `.squad/secrets.yaml` → prompt → fail. Applies to both planner and tracker credentials.
|
|
29
|
+
|
|
30
|
+
**Security**
|
|
31
|
+
|
|
32
|
+
- `.squad/config.yaml` continues to reject secret-shaped keys (`apiKey`, `token`, …). Secrets live in `.squad/secrets.yaml` only.
|
|
33
|
+
- Auto-managed `.gitignore` block covers `.squad/secrets.yaml`, `.squad/stories/**/attachments/`, and `.squad/.trash/`.
|
|
34
|
+
|
|
35
|
+
### Added
|
|
36
|
+
|
|
37
|
+
- `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.
|
|
38
|
+
- `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.
|
|
39
|
+
|
|
40
|
+
- `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).
|
|
41
|
+
- `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.
|
|
42
|
+
- `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`.
|
|
43
|
+
- `planner.modelOverride` (per-provider) lets you pin a different plan-phase model id without editing squad-kit source.
|
|
44
|
+
- `pnpm verify:models` (`scripts/verify-models.ts`) probes provider model list APIs before publish so pinned ids cannot drift unnoticed.
|
|
45
|
+
- Clear, actionable error when the planner model returns 404 (upgrade, config override, or `squad doctor`).
|
|
46
|
+
- `squad status` marks the planner row with `(override)` when `modelOverride` is active for the current provider.
|
|
47
|
+
- Direct planner API (optional): Anthropic, OpenAI, Google. Squad calls the planner for you and writes the plan file.
|
|
48
|
+
- Demand-driven context: planner reads files on request via a bounded budget (file count, bytes, wall-clock).
|
|
49
|
+
- Interactive picker in `squad new-plan` over un-planned intakes.
|
|
50
|
+
- Already-planned guard with `--yes` override.
|
|
51
|
+
- `--api`, `--copy`, `--feature`, `--all` flags on `new-plan`.
|
|
52
|
+
- `squad init` asks about planner setup; `--planner <provider>` for non-interactive.
|
|
53
|
+
- `squad status` shows planner provider, model, and env-var presence.
|
|
54
|
+
- `squad list` shows which plans were generated by the API vs copy-paste.
|
|
55
|
+
- Visual identity: mint-green brand, custom spinner frames, banner, summary boxes, consistent prefixes across all commands.
|
|
56
|
+
- `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.
|
|
57
|
+
|
|
58
|
+
### Changed
|
|
59
|
+
|
|
60
|
+
- 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.
|
|
61
|
+
- `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`.
|
|
62
|
+
- 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.
|
|
63
|
+
- `new-plan <intake>` is now optional; omit to pick interactively.
|
|
64
|
+
- `--no-copy` renamed to `--no-clipboard` (old flag removed). `--copy` now forces copy-paste mode.
|
|
65
|
+
- 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`.
|
|
66
|
+
|
|
67
|
+
### Breaking changes for 0.1.x users
|
|
68
|
+
|
|
69
|
+
- 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).
|
|
70
|
+
- 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.)
|
|
71
|
+
|
|
72
|
+
### Security
|
|
73
|
+
|
|
74
|
+
- Config loader rejects any YAML entry whose key looks like `apiKey`, `token`, `secret`, or `credential`.
|
|
75
|
+
|
|
76
|
+
### Known limitations
|
|
77
|
+
|
|
78
|
+
- 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.
|
|
79
|
+
|
|
80
|
+
### Non-goals (still deferred)
|
|
81
|
+
|
|
82
|
+
- OpenAI-compatible generic endpoint (OpenRouter, Ollama, local). Targeted for 0.3.
|
|
83
|
+
- `squad implement` command. Targeted for 0.3.
|
|
84
|
+
- MCP server, telemetry.
|
|
85
|
+
|
|
86
|
+
## [0.1.0] - 2026-04-21
|
|
87
|
+
|
|
88
|
+
First public release.
|
|
89
|
+
|
|
90
|
+
### Added
|
|
91
|
+
|
|
92
|
+
- `squad init` — scaffolds `.squad/` with `config.yaml`, prompt templates, and agent slash commands.
|
|
93
|
+
- `squad new-story <feature-slug>` — creates `.squad/stories/<feature>/<id>/intake.md` with `attachments/`.
|
|
94
|
+
- `squad new-plan <intake-path>` — composes the plan-generation meta-prompt inline with the intake, prints to stdout, and copies to clipboard.
|
|
95
|
+
- `squad status` — reports story / plan counts and next global `NN`.
|
|
96
|
+
- `squad list [--feature <slug>]` — table of stories and their plan state.
|
|
97
|
+
- `squad tracker link <story> <id>` — upserts a tracker id on an existing intake.
|
|
98
|
+
- Agent slash-command templates for **Claude Code**, **Cursor**, **GitHub Copilot**, and **Gemini CLI**.
|
|
99
|
+
- Tracker id validators for **GitHub**, **Linear**, **Jira**, and **Azure DevOps** (no API calls; format validation only).
|
|
100
|
+
- Plan-generation meta-prompt (`generate-plan.md`), intake template (`intake.md`), and plan skeleton reference (`story-skeleton.md`).
|
|
101
|
+
- Documentation: `docs/philosophy.md`, `docs/getting-started.md`, `docs/customization.md`, `docs/vs-spec-kit.md`.
|
|
102
|
+
|
|
103
|
+
[Unreleased]: https://github.com/AzmSquad/squad-kit/compare/v0.2.0...HEAD
|
|
104
|
+
[0.2.0]: https://github.com/AzmSquad/squad-kit/compare/v0.1.0...v0.2.0
|
|
105
|
+
[0.1.0]: https://github.com/AzmSquad/squad-kit/releases/tag/v0.1.0
|
package/README.md
CHANGED
|
@@ -1,16 +1,25 @@
|
|
|
1
1
|
# squad-kit
|
|
2
2
|
|
|
3
|
+
[](https://www.npmjs.com/package/squad-kit)
|
|
4
|
+
[](https://github.com/AzmSquad/Squad-Kit/actions/workflows/ci.yml)
|
|
5
|
+
[](LICENSE)
|
|
6
|
+
[](https://squad-kit.netlify.app)
|
|
7
|
+
|
|
3
8
|
**Plan once, execute cheap.** A 3-step SDD-style workflow CLI for AI-assisted coding: **raw story → good plan → implementation**.
|
|
4
9
|
|
|
10
|
+
Website & docs: **[squad-kit.netlify.app](https://squad-kit.netlify.app)**
|
|
11
|
+
|
|
12
|
+
|
|
5
13
|
Your expensive model plans once. A cheap model executes many times. Squad-kit owns the folder conventions, the plan meta-prompt, and the agent slash-commands so the token cost goes where it pays off.
|
|
6
14
|
|
|
7
15
|
```
|
|
8
16
|
.squad/
|
|
9
|
-
├── prompts/ # meta-prompts you can edit
|
|
10
17
|
├── stories/<feature>/<id>/ # intake + attachments (one per story)
|
|
11
18
|
└── plans/<feature>/ # NN-story-<slug>.md (one per executable plan)
|
|
12
19
|
```
|
|
13
20
|
|
|
21
|
+
Plan meta-prompts (`generate-plan.md`, `story-skeleton.md`, intake template) are **bundled inside the squad-kit npm package**, not copied into your repo. Upgrade the CLI to change them; to fork and customise, patch `templates/prompts/` in a fork of squad-kit.
|
|
22
|
+
|
|
14
23
|
---
|
|
15
24
|
|
|
16
25
|
## Why not Spec-Kit?
|
|
@@ -19,11 +28,11 @@ Both aim at spec-driven development. They make different bets.
|
|
|
19
28
|
|
|
20
29
|
| | squad-kit | Spec-Kit |
|
|
21
30
|
|---|---|---|
|
|
22
|
-
| Commands | `init`, `new-story`, `new-plan`, `status`, `list`, `tracker link` | `constitution`, `specify`, `clarify`, `plan`, `tasks`, `analyze`, `checklist`, `implement` |
|
|
31
|
+
| Commands | `init`, `new-story`, `new-plan`, `status`, `doctor`, `migrate`, `upgrade`, `list`, `rm`, `tracker link` | `constitution`, `specify`, `clarify`, `plan`, `tasks`, `analyze`, `checklist`, `implement` |
|
|
23
32
|
| `/implement` turn starts with | one plan file (~5–15 KB) | 5–7 command templates + cross-artifact reads (~15–25 KB) |
|
|
24
33
|
| Model-tier awareness | Built into the philosophy (planner ≠ executor) | Not prescribed |
|
|
25
34
|
| Generated artifacts per story | `intake.md`, `NN-story-<slug>.md`, overview row | `spec.md`, `plan.md`, `data-model.md`, `contracts/`, `research.md`, `quickstart.md`, `tasks.md` |
|
|
26
|
-
| Customization | Prompts
|
|
35
|
+
| Customization | Prompts ship with the CLI (fork squad-kit to change them). | Template override stack with presets/extensions |
|
|
27
36
|
| Runtime | Node + TypeScript, npm-distributable | Python + `uv` |
|
|
28
37
|
| Scope | Intentionally small | Broad, with safety nets (`clarify`, `analyze`) |
|
|
29
38
|
|
|
@@ -31,14 +40,24 @@ Spec-Kit ships safety rails. Squad-kit ships the cheap path and gets out of the
|
|
|
31
40
|
|
|
32
41
|
See [`docs/philosophy.md`](docs/philosophy.md) for the token math and [`docs/vs-spec-kit.md`](docs/vs-spec-kit.md) for the full comparison.
|
|
33
42
|
|
|
43
|
+
### Tracker auto-fetch (new in 0.2.0)
|
|
44
|
+
|
|
45
|
+
When a supported tracker is configured, `squad new-story <feature> --id <ID>` pulls the work item's title, description, labels, and attachments (≤ 10 MB each) directly into the intake. No more manual copy-paste.
|
|
46
|
+
|
|
47
|
+
Supported trackers in 0.2.0: **Jira Cloud**, **Azure DevOps Services**.
|
|
48
|
+
|
|
49
|
+
Credentials are prompted during `squad init` and stored in `.squad/secrets.yaml`, which squad-kit auto-adds to your `.gitignore`. Environment variables (`JIRA_API_TOKEN`, `AZURE_DEVOPS_PAT`, or the cross-provider `SQUAD_TRACKER_API_KEY`) also work if you prefer them.
|
|
50
|
+
|
|
51
|
+
Pass `--no-fetch` to skip the call and scaffold an empty intake; `--no-attachments` to fetch metadata only.
|
|
52
|
+
|
|
34
53
|
---
|
|
35
54
|
|
|
36
55
|
## Install
|
|
37
56
|
|
|
38
57
|
```bash
|
|
39
|
-
npm install -g squad-kit
|
|
58
|
+
npm install -g squad-kit@0.2.0
|
|
40
59
|
# or
|
|
41
|
-
pnpm add -g squad-kit
|
|
60
|
+
pnpm add -g squad-kit@0.2.0
|
|
42
61
|
```
|
|
43
62
|
|
|
44
63
|
Requires Node 18+.
|
|
@@ -54,6 +73,33 @@ squad init # interactive: tracker, agents, name
|
|
|
54
73
|
squad new-story auth --title "SSO support"
|
|
55
74
|
# → edit .squad/stories/auth/sso-support/intake.md (paste title, description, criteria)
|
|
56
75
|
|
|
76
|
+
# Write an intake without a tracker id (even when naming.includeTrackerId would normally require one):
|
|
77
|
+
squad new-story feature-slug --no-tracker --title "quick exploration"
|
|
78
|
+
# Per-invocation only — .squad/config.yaml is not modified.
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### Managing configuration
|
|
82
|
+
|
|
83
|
+
squad-kit stores settings in two files:
|
|
84
|
+
|
|
85
|
+
- `.squad/config.yaml` — project name, tracker type, naming rules, planner provider.
|
|
86
|
+
- `.squad/secrets.yaml` — API keys and tokens, `.gitignore`-d and chmod 0600.
|
|
87
|
+
|
|
88
|
+
Never edit these by hand. Use:
|
|
89
|
+
|
|
90
|
+
| Command | What it does |
|
|
91
|
+
| --- | --- |
|
|
92
|
+
| `squad config show` | Detailed view of both files (secrets masked). |
|
|
93
|
+
| `squad config set planner` | Interactively change provider, model, and key. |
|
|
94
|
+
| `squad config set tracker` | Interactively change tracker type, host, token. |
|
|
95
|
+
| `squad config unset planner` | Disable the direct planner; keeps credentials. |
|
|
96
|
+
| `squad config unset tracker` | Set tracker to `none`; keeps credentials. |
|
|
97
|
+
| `squad config remove-credential planner` | Delete planner keys without touching config. |
|
|
98
|
+
| `squad config remove-credential tracker` | Delete tracker keys without touching config. |
|
|
99
|
+
| `squad status` | Quick operational summary (stories, plans). |
|
|
100
|
+
| `squad doctor` | Full health check. |
|
|
101
|
+
|
|
102
|
+
```bash
|
|
57
103
|
# then, in your agent (Claude Code / Cursor / Copilot / Gemini):
|
|
58
104
|
/squad-plan .squad/stories/auth/sso-support/intake.md
|
|
59
105
|
|
|
@@ -75,12 +121,99 @@ squad new-plan .squad/stories/auth/sso-support/intake.md # prints to stdout, c
|
|
|
75
121
|
|
|
76
122
|
| Command | What it does |
|
|
77
123
|
|---|---|
|
|
78
|
-
| `squad init` | Bootstrap `.squad/` with
|
|
79
|
-
| `squad new-story
|
|
124
|
+
| `squad init` | Bootstrap `.squad/` with config and agent slash-commands (prompts are bundled in the package) |
|
|
125
|
+
| `squad new-story [feature] [--id ID] [--title ...]` | Scaffold a story intake folder (optional feature prompts in a TTY) |
|
|
80
126
|
| `squad new-plan <intake-path>` | Compose the plan-generation meta-prompt with the intake inlined; print to stdout + copy to clipboard |
|
|
81
|
-
| `squad status` | Count stories/plans, show next global `NN`, warn on duplicates |
|
|
127
|
+
| `squad status` | Count stories/plans, show next global `NN`, tracker/planner credential hints, warn on duplicates |
|
|
128
|
+
| `squad doctor` | Run a health check on your `.squad/` workspace |
|
|
129
|
+
| `squad doctor --fix` | Apply non-destructive repairs (`.gitignore` block, `secrets.yaml` mode `0600`, missing dirs) |
|
|
130
|
+
| `squad doctor --json` | Emit results as JSON on stdout (for scripting) |
|
|
82
131
|
| `squad list [--feature <slug>]` | Table of stories + their plan state |
|
|
83
|
-
| `squad
|
|
132
|
+
| `squad rm` | Delete stories, plans, or whole features (`rm story` / `rm plan` / `rm feature`) with `--dry-run`, `--trash`, `-y` |
|
|
133
|
+
| `squad tracker link [story] [id]` | Attach or update a tracker id on an intake (optional args prompt in a TTY) |
|
|
134
|
+
| `squad migrate` | One-shot structural migrations from 0.1.x to 0.2.0 |
|
|
135
|
+
| `squad migrate --dry-run` | Show what would change without applying |
|
|
136
|
+
| `squad migrate --yes` | Skip the confirmation prompt |
|
|
137
|
+
| `squad upgrade` | Check npm for a newer squad-kit release and install it |
|
|
138
|
+
| `squad upgrade --check` | Only check; do not install |
|
|
139
|
+
| `squad upgrade --yes` | Skip the confirmation prompt |
|
|
140
|
+
|
|
141
|
+
### Removing things safely
|
|
142
|
+
|
|
143
|
+
squad-kit never asks you to `rm -rf` by hand. Use:
|
|
144
|
+
|
|
145
|
+
| Command | What it does |
|
|
146
|
+
| --- | --- |
|
|
147
|
+
| `squad rm story` | Interactive picker; deletes intake + plan + overview row. |
|
|
148
|
+
| `squad rm story <path\|id>` | Same, targeted. |
|
|
149
|
+
| `squad rm plan` | Interactive picker; deletes the plan file only. |
|
|
150
|
+
| `squad rm feature` | Interactive picker; deletes every story + plan + overview. |
|
|
151
|
+
| `... --dry-run` | Preview without changing anything. |
|
|
152
|
+
| `... --trash` | Move into `.squad/.trash/<ts>/` instead of deleting. |
|
|
153
|
+
| `... -y` | Skip the confirmation prompt (non-interactive). |
|
|
154
|
+
|
|
155
|
+
`.squad/.trash/` is git-ignored automatically. Recover with `mv .squad/.trash/<ts>/<item> .squad/...`. Empty it when you are sure: `rm -rf .squad/.trash`.
|
|
156
|
+
|
|
157
|
+
### `squad upgrade`
|
|
158
|
+
|
|
159
|
+
`squad upgrade` queries `registry.npmjs.org` for the latest squad-kit release, detects your package manager (pnpm, npm, yarn, bun), and runs the appropriate global-install command with your confirmation. After upgrading, run `squad migrate` in each project to update the `.squad/` structure if needed.
|
|
160
|
+
|
|
161
|
+
### `squad doctor`
|
|
162
|
+
|
|
163
|
+
Use this when something feels misconfigured. By default it is read-only: it loads `.squad/config.yaml` and `.squad/secrets.yaml`, checks directory layout, warns if a legacy `.squad/prompts/` directory is still present (removed in 0.2.0), validates planner settings and API keys (including a lightweight `/v1/models` probe — never a paid completion), checks Jira/Azure tracker config and credentials, and optionally hits a small REST endpoint to verify connectivity.
|
|
164
|
+
|
|
165
|
+
`--fix` only performs safe, idempotent fixes: creating missing `.squad/stories` or `.squad/plans`, appending the managed `.gitignore` block (including `.squad/.trash/` when missing), and tightening `secrets.yaml` permissions on POSIX. It does not delete files or rewrite config; for legacy prompts cleanup and other migrations, use `squad migrate`.
|
|
166
|
+
|
|
167
|
+
### Upgrading from 0.1.x
|
|
168
|
+
|
|
169
|
+
After upgrading the squad-kit package (`pnpm add -g squad-kit@latest`), run `squad migrate` once in each repo that uses squad-kit. This deletes the now-unused `.squad/prompts/` directory, ensures your `.gitignore` has the squad-kit block, tightens permissions on `.squad/secrets.yaml`, and normalises `.squad/config.yaml` formatting. Comments inside `config.yaml` will be dropped.
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
## CLI conventions
|
|
174
|
+
|
|
175
|
+
### Interactive-first
|
|
176
|
+
|
|
177
|
+
Every squad-kit command prompts for missing required input when run in a TTY. Use `-y` or `--yes` to opt out — missing input then fails fast instead of prompting. Useful in scripts and CI, e.g. `CI=1 squad new-story user-auth --id ENG-42 --yes`.
|
|
178
|
+
|
|
179
|
+
Set `CI=1` to force non-interactive behaviour even in a TTY (matches how other tools behave in CI environments).
|
|
180
|
+
|
|
181
|
+
## Direct planner (optional)
|
|
182
|
+
|
|
183
|
+
Squad can call a strong planning model for you from the terminal so you do not have to paste the prompt into your agent. Off by default.
|
|
184
|
+
|
|
185
|
+
1. `squad init --force` and answer **yes** to *Enable automatic plan generation?* (or re-run `squad init -y --planner anthropic`). Use `--skip-secrets-prompt` (or `--no-prompt-secrets`) if you want to skip all secret prompts in a TTY session.
|
|
186
|
+
2. Export the provider's API key:
|
|
187
|
+
|
|
188
|
+
```bash
|
|
189
|
+
export ANTHROPIC_API_KEY=... # or OPENAI_API_KEY / GOOGLE_API_KEY
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
3. `squad new-plan` — pick an un-planned intake; squad reads only the files the planner asks for (bounded by `planner.budget`), writes the plan to `.squad/plans/<feature>/NN-story-<slug>.md`, and prints a summary.
|
|
193
|
+
|
|
194
|
+
Optional: override the default plan-phase model id (per provider) without changing squad-kit:
|
|
195
|
+
|
|
196
|
+
```yaml
|
|
197
|
+
planner:
|
|
198
|
+
enabled: true
|
|
199
|
+
provider: anthropic
|
|
200
|
+
# Optional: pin a specific model for the plan phase, overriding the squad-kit default.
|
|
201
|
+
# Useful when riding a newer provider release ahead of a squad-kit update, or when the
|
|
202
|
+
# default has been deprecated.
|
|
203
|
+
modelOverride:
|
|
204
|
+
anthropic: claude-opus-5-0
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
Slash commands inside your agent (`/squad-plan`) continue to work unchanged — the agent already has your repo in scope.
|
|
208
|
+
|
|
209
|
+
Squad-kit never reads API keys from `.squad/config.yaml`. You can set keys via environment variables, save them in `.squad/secrets.yaml` (prompted by `squad init` when the planner is enabled), or a mix. See [Secrets](#secrets) below.
|
|
210
|
+
|
|
211
|
+
#### Secrets
|
|
212
|
+
|
|
213
|
+
- `.squad/config.yaml` — shape and non-sensitive settings. Safe to commit.
|
|
214
|
+
- `.squad/secrets.yaml` — API tokens for the planner and tracker. **Always git-ignored** (managed by squad-kit).
|
|
215
|
+
- Environment variables override `.squad/secrets.yaml`.
|
|
216
|
+
- Priority: env var → `.squad/secrets.yaml` → prompt (interactive) → fail.
|
|
84
217
|
|
|
85
218
|
---
|
|
86
219
|
|
|
@@ -109,22 +242,19 @@ naming:
|
|
|
109
242
|
globalSequence: true
|
|
110
243
|
```
|
|
111
244
|
|
|
112
|
-
`--id` on `new-story` is validated against the tracker's id format
|
|
245
|
+
`--id` on `new-story` is validated against the tracker's id format. For **Jira** and **Azure DevOps**, with credentials configured, the CLI can [auto-fetch](#tracker-auto-fetch-new-in-020) issue metadata and attachments. Other trackers (GitHub, Linear) use id format validation only in v0.2.
|
|
113
246
|
|
|
114
247
|
---
|
|
115
248
|
|
|
116
|
-
## What's *not* in v0.
|
|
249
|
+
## What's *not* in v0.2
|
|
117
250
|
|
|
118
251
|
We ship lean on purpose. Current non-goals:
|
|
119
252
|
|
|
120
|
-
-
|
|
253
|
+
- OpenAI-compatible generic endpoint (local models, OpenRouter, etc.); [Direct planner (optional)](#direct-planner-optional) covers hosted Anthropic, OpenAI, and Google
|
|
121
254
|
- MCP server
|
|
122
255
|
- `/clarify`, `/analyze`, constitution-equivalent
|
|
123
|
-
- Tracker API calls (id validation only)
|
|
124
256
|
- Telemetry
|
|
125
257
|
|
|
126
|
-
Open to revisiting these for v0.2 based on usage.
|
|
127
|
-
|
|
128
258
|
---
|
|
129
259
|
|
|
130
260
|
## Tradeoffs to know
|
package/SECURITY.md
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# Security Policy
|
|
2
|
+
|
|
3
|
+
## Supported versions
|
|
4
|
+
|
|
5
|
+
Only the latest minor release of squad-kit receives security fixes.
|
|
6
|
+
|
|
7
|
+
| Version | Supported |
|
|
8
|
+
| ------- | --------- |
|
|
9
|
+
| 0.2.x | ✅ |
|
|
10
|
+
| 0.1.x | ❌ |
|
|
11
|
+
| < 0.1 | ❌ |
|
|
12
|
+
|
|
13
|
+
## Reporting a vulnerability
|
|
14
|
+
|
|
15
|
+
**Please do not open a public GitHub issue for security reports.**
|
|
16
|
+
|
|
17
|
+
Email the maintainer privately at **momenysr@gmail.com** with:
|
|
18
|
+
|
|
19
|
+
- A description of the issue and its impact.
|
|
20
|
+
- Steps to reproduce (proof-of-concept preferred).
|
|
21
|
+
- Affected version(s) and environment (OS, Node version).
|
|
22
|
+
- Any suggested mitigation, if you have one.
|
|
23
|
+
|
|
24
|
+
You can expect:
|
|
25
|
+
|
|
26
|
+
1. **Acknowledgement** within 72 hours.
|
|
27
|
+
2. **Initial assessment** within 7 days.
|
|
28
|
+
3. **Fix + coordinated disclosure** as quickly as the severity warrants — typically a patch release within 14 days for high-severity issues.
|
|
29
|
+
|
|
30
|
+
Credit will be given in the release notes unless you prefer to remain anonymous.
|
|
31
|
+
|
|
32
|
+
## Handling credentials
|
|
33
|
+
|
|
34
|
+
squad-kit reads API tokens from (in order):
|
|
35
|
+
|
|
36
|
+
1. **Environment variables** — `ANTHROPIC_API_KEY`, `OPENAI_API_KEY`, `GOOGLE_API_KEY`, `SQUAD_PLANNER_API_KEY` for planner; `JIRA_API_TOKEN`, `AZURE_DEVOPS_PAT`, `SQUAD_TRACKER_API_KEY` for trackers.
|
|
37
|
+
2. **`.squad/secrets.yaml`** — created with mode `0600` on POSIX; always included in `.gitignore` by `squad init`.
|
|
38
|
+
3. **Interactive prompt** — when the terminal is a TTY and the command needs a credential that is missing.
|
|
39
|
+
|
|
40
|
+
### Non-goals
|
|
41
|
+
|
|
42
|
+
- `.squad/config.yaml` must never contain secrets. Loading it with a key matching `apiKey`, `api_key`, `token`, `secret`, `credential`, or `credentials` raises a loud error.
|
|
43
|
+
- squad-kit does not integrate with OS keychains in 0.2.0. The secrets file model is intentional: it is inspectable, excluded by ignore rules, and portable.
|
|
44
|
+
- Credentials are never logged. Tracker error messages redact tokens; planner provider errors do the same.
|
|
45
|
+
|
|
46
|
+
## Scope
|
|
47
|
+
|
|
48
|
+
squad-kit is a local-only CLI. It can call **optional** network APIs (tracker fetch, direct planner) when the user enables those flows and provides credentials. It does not execute user code. Reports in scope include:
|
|
49
|
+
|
|
50
|
+
- Arbitrary file read/write outside the workspace caused by malformed input (e.g. path-traversal via feature slugs or intake paths).
|
|
51
|
+
- Command injection via clipboard helpers or spawned processes.
|
|
52
|
+
- Supply-chain concerns in shipped dependencies (`@inquirer/prompts`, `commander`, `fs-extra`, `js-yaml`, `kleur`).
|
|
53
|
+
|
|
54
|
+
Out of scope:
|
|
55
|
+
|
|
56
|
+
- Content of user-authored intakes and plans under `.squad/stories/` and `.squad/plans/` (treat as trusted project input to your agents).
|
|
57
|
+
- Vulnerabilities in the AI agents that consume squad-kit output (Claude Code, Cursor, Copilot, Gemini). Report those upstream.
|