@benjaminthomas/spec-driven-dev 1.8.0 → 1.10.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/LICENSE +1 -1
- package/README.md +150 -63
- package/bin/cli.mjs +76 -13
- package/package.json +3 -3
- package/{skills → plugin/skills}/spec-checkpoint/SKILL.md +23 -0
- package/{skills → plugin/skills}/spec-create/SKILL.md +18 -1
- package/plugin/skills/spec-create/references/log-template.md +27 -0
- package/{skills → plugin/skills}/spec-create/references/readme-template.md +12 -0
- package/{skills → plugin/skills}/spec-create/references/requirements-template.md +12 -4
- package/{skills → plugin/skills}/spec-create/references/task-template.md +12 -0
- package/{skills → plugin/skills}/spec-implement/SKILL.md +25 -6
- package/{skills → plugin/skills}/spec-investigate/SKILL.md +29 -5
- package/{skills → plugin/skills}/spec-investigate/references/report-template.md +7 -0
- package/plugin/skills/spec-review/SKILL.md +131 -0
- package/plugin/skills/spec-review/references/report-template.md +44 -0
- package/{skills → plugin/skills}/spec-setup/SKILL.md +34 -9
- package/plugin/skills/spec-setup/references/audit.md +71 -0
- package/{skills → plugin/skills}/spec-setup/references/config-template.yml +7 -2
- package/plugin/skills/spec-setup/references/context-template.md +83 -0
- package/{skills → plugin/skills}/spec-ship/SKILL.md +10 -0
- package/{skills → plugin/skills}/spec-verify/SKILL.md +10 -2
- /package/{skills → plugin/skills}/generative-seo/SKILL.md +0 -0
- /package/{skills → plugin/skills}/generative-seo/assets/citation-log-template.md +0 -0
- /package/{skills → plugin/skills}/generative-seo/assets/competitor-analysis-template.md +0 -0
- /package/{skills → plugin/skills}/generative-seo/assets/content-plan-template.md +0 -0
- /package/{skills → plugin/skills}/generative-seo/assets/geo-config-template.md +0 -0
- /package/{skills → plugin/skills}/generative-seo/assets/geo-playbook-template.md +0 -0
- /package/{skills → plugin/skills}/generative-seo/assets/social-queue-template.md +0 -0
- /package/{skills → plugin/skills}/generative-seo/references/geo-methodology.md +0 -0
- /package/{skills → plugin/skills}/spec-create/references/action-required-template.md +0 -0
- /package/{skills → plugin/skills}/spec-create/references/complexity-rubric.md +0 -0
- /package/{skills → plugin/skills}/spec-implement/references/coder-prompt-template.md +0 -0
- /package/{skills → plugin/skills}/spec-implement/references/fix-prompt-template.md +0 -0
- /package/{skills → plugin/skills}/spec-implement/references/review-prompt-template.md +0 -0
- /package/{skills → plugin/skills}/spec-verify/references/report-template.md +0 -0
package/LICENSE
CHANGED
package/README.md
CHANGED
|
@@ -9,7 +9,7 @@ without guessing.** It first investigates the problem, then writes a plan you ap
|
|
|
9
9
|
in parallel with tests and review, then checks the real running app, and finally commits and opens
|
|
10
10
|
the PR.
|
|
11
11
|
|
|
12
|
-
It's a set of
|
|
12
|
+
It's a set of nine [Agent Skills](https://agentskills.io), plain Markdown instruction files that
|
|
13
13
|
AI coding tools load on demand. It works with Claude Code, Codex CLI, Cursor, and Google Antigravity,
|
|
14
14
|
in any language or framework, and in a single repo, a monorepo, or several repos that change
|
|
15
15
|
together, even when those repos live in different folders. To set it up, run
|
|
@@ -45,6 +45,8 @@ Asking an AI agent to "just build it" tends to fail in predictable ways:
|
|
|
45
45
|
| A big plan won't fit in the agent's context, or is too vague to act on | **`spec-create`** splits the work into small, self-contained task files, so each agent reads only its own |
|
|
46
46
|
| One agent working alone is slow | **`spec-implement`** runs several coder agents in parallel, each in its own copy of the repo |
|
|
47
47
|
| "It compiles" gets treated as "it works" | **`spec-verify`** drives the real running app and checks every acceptance criterion, with evidence |
|
|
48
|
+
| Problems slip through because nobody reviews the whole change | **`spec-review`** checks the finished branch against the spec, your conventions, and the code, and blocks shipping on real problems |
|
|
49
|
+
| A new session forgets what was decided last time | **Project memory**: a small `specs/CONTEXT.md`, plus a "Resume here" block and a log in every spec, kept short so reloading them is cheap |
|
|
48
50
|
| Broken code gets committed, or a PR is pushed by accident | **`spec-checkpoint`** commits only once lint, types, tests, and build all pass. **`spec-ship`** asks before it pushes |
|
|
49
51
|
|
|
50
52
|
Each stage writes its result to a file, so you can stop at any point, hand over to a teammate, or
|
|
@@ -89,6 +91,7 @@ words in quotes.
|
|
|
89
91
|
|
|
90
92
|
/spec-implement "implement the spec"
|
|
91
93
|
/spec-verify "does it actually work?"
|
|
94
|
+
/spec-review "review this"
|
|
92
95
|
/spec-checkpoint "checkpoint"
|
|
93
96
|
/spec-ship "ship it"
|
|
94
97
|
```
|
|
@@ -123,9 +126,9 @@ contracts, unclear requirements). `spec-implement` then runs each task on the mo
|
|
|
123
126
|
newer model for `deep`.
|
|
124
127
|
|
|
125
128
|
**Fewer stops:** after reviewing the spec, say **"approved, run it through"**. The workflow then
|
|
126
|
-
implements, verifies, and commits in one go. It stops at the first failure
|
|
127
|
-
before pushing or opening a PR. To make this the default after approval,
|
|
128
|
-
setup (`pipeline.after_approval` in `.spec-driven.yml`).
|
|
129
|
+
implements, verifies, reviews, and commits in one go. It stops at the first failure or review
|
|
130
|
+
blocker, and always asks before pushing or opening a PR. To make this the default after approval,
|
|
131
|
+
choose `run-through` during setup (`pipeline.after_approval` in `.spec-driven.yml`).
|
|
129
132
|
|
|
130
133
|
That's the whole workflow. Every stage can be used on its own as well: use `/spec-create` straight
|
|
131
134
|
from a planning chat, or `/spec-checkpoint` on any work in progress.
|
|
@@ -205,28 +208,63 @@ example, from inside `/Projects/frontend`:
|
|
|
205
208
|
Every question also has a flag, for scripts and CI:
|
|
206
209
|
`--layout=multi-repo --repos=~/Projects/frontend,~/Work/backend --workspace=~/Projects`,
|
|
207
210
|
`--layout=monorepo --packages=apps/web,packages/ui`, `--after-approval=run-through`,
|
|
208
|
-
`--tools=cursor,codex`, `--global`, `--yes` (accept everything detected), and `--version`.
|
|
211
|
+
`--project=new|existing`, `--tools=cursor,codex`, `--global`, `--yes` (accept everything detected), and `--version`.
|
|
209
212
|
|
|
210
213
|
To change the rules later, edit the file or run setup again, then run `spec-driven-dev doctor`
|
|
211
214
|
to confirm the file still matches your repos. Setup never overwrites the file without
|
|
212
|
-
asking. See [`config-template.yml`](skills/spec-setup/references/config-template.yml) for every field.
|
|
215
|
+
asking. See [`config-template.yml`](plugin/skills/spec-setup/references/config-template.yml) for every field.
|
|
216
|
+
|
|
217
|
+
### Project memory: so context isn't lost between sessions and features
|
|
218
|
+
|
|
219
|
+
Setup asks whether this is a **new or existing project** and detects the likely answer from the
|
|
220
|
+
commit and file counts. Then "run spec-setup" in your AI tool builds the project's memory:
|
|
221
|
+
|
|
222
|
+
- **Existing project:** a shallow audit using cheap commands (folder sizes, manifests, CI, busy areas
|
|
223
|
+
from git log, your README/CLAUDE.md/ADRs), then one round of questions the code can't answer
|
|
224
|
+
(what the product does, off-limits areas, fragile spots, where it's heading, unwritten rules).
|
|
225
|
+
- **New project:** it asks about the stack and conventions you want and saves them as the first
|
|
226
|
+
decisions.
|
|
227
|
+
|
|
228
|
+
Everything is kept small on purpose, because loading context costs tokens:
|
|
229
|
+
|
|
230
|
+
| File | Size limit | Loaded when |
|
|
231
|
+
|---|---|---|
|
|
232
|
+
| `specs/CONTEXT.md`, the index: product, area map, top conventions, decisions | 60 lines | once per stage, only during spec work |
|
|
233
|
+
| `specs/context/<area>.md`, details for one area | 150 lines | only when a task touches that area |
|
|
234
|
+
| `specs/context/archive.md`, superseded entries | none | never by default |
|
|
235
|
+
| `specs/<feature>/README.md`, its **Resume here** block | ~10 lines | first thing in a new or compacted session |
|
|
236
|
+
| `specs/<feature>/log.md`, decisions, deviations, review findings | append-only | rarely; read in full only once, at checkpoint |
|
|
237
|
+
|
|
238
|
+
Each stage passes on a digest instead of the files: the investigation keeps 10–20 relevant lines,
|
|
239
|
+
and each task file gets only the 3–5 conventions it needs, so parallel coders never load the
|
|
240
|
+
context. When a feature is finished, `spec-checkpoint` adds its lasting lessons to the right area
|
|
241
|
+
file. Requirements are numbered (R1, R2…) and traced from investigation to tasks to verification.
|
|
242
|
+
|
|
243
|
+
`spec-driven-dev context` prints the index, and `spec-driven-dev context --areas=billing,api`
|
|
244
|
+
prints just those areas, with no model involved. `doctor` checks the size limits and flags context
|
|
245
|
+
lines that point to files that no longer exist. If you install
|
|
246
|
+
[graphify](https://github.com/Graphify-Labs/graphify), the skills use it for cheaper code
|
|
247
|
+
navigation. It's optional (`context.graph: off` turns it off), and nothing is installed for you.
|
|
213
248
|
|
|
214
249
|
## How the workflow fits together
|
|
215
250
|
|
|
216
251
|
```
|
|
217
|
-
┌──────────────────┐ ┌─────────────┐ ┌──────────┐ ┌────────────────┐ ┌─────────────┐ ┌─────────────────┐ ┌───────────┐
|
|
218
|
-
│ spec-investigate │ → │ spec-create │ → │ YOU │ → │ spec-implement │ → │ spec-verify │ → │ spec-checkpoint │ → │ spec-ship │
|
|
219
|
-
│ understand │ │ plan │ │ approve │ │ build + test │ │ prove │ │ commit │ │ open PR │
|
|
220
|
-
└──────────────────┘ └─────────────┘ └──────────┘ └────────────────┘ └─────────────┘ └─────────────────┘ └───────────┘
|
|
221
|
-
investigation.md specs/<feature>/ code + tests, verification-
|
|
222
|
-
+ work branch task files one commit/batch report.md
|
|
252
|
+
┌──────────────────┐ ┌─────────────┐ ┌──────────┐ ┌────────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────────┐ ┌───────────┐
|
|
253
|
+
│ spec-investigate │ → │ spec-create │ → │ YOU │ → │ spec-implement │ → │ spec-verify │ → │ spec-review │ → │ spec-checkpoint │ → │ spec-ship │
|
|
254
|
+
│ understand │ │ plan │ │ approve │ │ build + test │ │ prove │ │ review │ │ commit │ │ open PR │
|
|
255
|
+
└──────────────────┘ └─────────────┘ └──────────┘ └────────────────┘ └─────────────┘ └─────────────┘ └─────────────────┘ └───────────┘
|
|
256
|
+
investigation.md specs/<feature>/ code + tests, verification- review.md local commit pushed branch
|
|
257
|
+
+ work branch task files one commit/batch report.md (blockers stop) + GitHub PR
|
|
223
258
|
```
|
|
224
259
|
|
|
225
260
|
- **The approval step is yours.** Nothing builds until you've read the spec and run `spec-implement`
|
|
226
261
|
yourself. `spec-investigate` never moves on to the next stage by itself.
|
|
227
262
|
- **Each stage reads the previous stage's files.** `spec-create` uses `investigation.md` as its
|
|
228
|
-
evidence, `spec-implement` works through the task files,
|
|
229
|
-
acceptance criteria
|
|
263
|
+
evidence, `spec-implement` works through the task files, `spec-verify` checks against their
|
|
264
|
+
acceptance criteria, and `spec-review` checks the whole diff against the requirements before
|
|
265
|
+
anything is committed for shipping.
|
|
266
|
+
- **Every stage leaves a way back in.** Each one updates the spec's **Resume here** block and adds
|
|
267
|
+
to its `log.md`, so a new or compacted session continues from about 10 lines, not the chat history.
|
|
230
268
|
- **Stages can be skipped.** For new projects with nothing to investigate, start at `spec-create`.
|
|
231
269
|
For a quick fix, use only `spec-checkpoint` and `spec-ship`.
|
|
232
270
|
|
|
@@ -236,10 +274,13 @@ asking. See [`config-template.yml`](skills/spec-setup/references/config-template
|
|
|
236
274
|
|
|
237
275
|
### 0. `spec-setup`: learn the project's rules
|
|
238
276
|
|
|
239
|
-
**Say:** "run spec-setup", "configure the pipeline", "
|
|
277
|
+
**Say:** "run spec-setup", "configure the pipeline", "audit this repo", "refresh the project context"
|
|
240
278
|
|
|
241
|
-
**What it does:** see [Project setup](#project-setup-your-teams-rules). It writes `.spec-driven.yml
|
|
242
|
-
|
|
279
|
+
**What it does:** see [Project setup](#project-setup-your-teams-rules). It writes `.spec-driven.yml`, then
|
|
280
|
+
builds the [project memory](#project-memory-so-context-isnt-lost-between-sessions-and-features): a
|
|
281
|
+
shallow audit and one round of questions for an existing repo, or your intended stack and conventions
|
|
282
|
+
for a new one, saved to `specs/CONTEXT.md`. It adds a one-line pointer to `CLAUDE.md`/`AGENTS.md`
|
|
283
|
+
only if you say yes. No branches, commits, or code.
|
|
243
284
|
|
|
244
285
|
### 1. `spec-investigate`: understand before planning
|
|
245
286
|
|
|
@@ -269,8 +310,13 @@ You can add `--context ./notes.md` to supply extra background, such as meeting n
|
|
|
269
310
|
4. Sorts the work into **required / supporting / optional / out of scope**, and lists risks, security
|
|
270
311
|
and performance concerns, and existing tests.
|
|
271
312
|
|
|
313
|
+
It starts from the project memory (`specs/CONTEXT.md` and only the area files the ticket touches),
|
|
314
|
+
treats it as a lead rather than evidence, and notes where the code contradicts it. If graphify is
|
|
315
|
+
installed, it uses it to map the code more cheaply.
|
|
316
|
+
|
|
272
317
|
**You get:** `specs/<feature>/investigation.md`, with every finding labelled **VERIFIED**,
|
|
273
|
-
**INFERRED**, **ASSUMPTION**, or **UNKNOWN
|
|
318
|
+
**INFERRED**, **ASSUMPTION**, or **UNKNOWN**, a short **Relevant Context** digest for the next
|
|
319
|
+
stages, and requirements numbered R1, R2… so they can be traced through to verification and review.
|
|
274
320
|
|
|
275
321
|
**It won't:** write code, write tests, or start `spec-create` without being asked.
|
|
276
322
|
|
|
@@ -285,7 +331,9 @@ each other and don't touch the same files, so they can be built at the same time
|
|
|
285
331
|
|
|
286
332
|
**You get:** a `specs/<feature>/` folder (see [What ends up in your repo](#what-ends-up-in-your-repo)).
|
|
287
333
|
Each task file is complete on its own: description, files to change, implementation steps, **tests
|
|
288
|
-
to write**, and
|
|
334
|
+
to write**, acceptance criteria, the requirements it **covers**, and the few **project conventions**
|
|
335
|
+
that apply to it. Every requirement must map to a task, and the spec isn't finished until it does.
|
|
336
|
+
It also starts the spec's `log.md` and **Resume here** block.
|
|
289
337
|
|
|
290
338
|
**Then:** read it, edit anything you disagree with, and only then run `spec-implement`.
|
|
291
339
|
|
|
@@ -302,10 +350,14 @@ to write**, and acceptance criteria.
|
|
|
302
350
|
4. A **separate reviewer agent** runs lint, typecheck, and tests and checks every acceptance
|
|
303
351
|
criterion. If anything fails, fix agents are sent in, for up to 3 rounds before it stops and
|
|
304
352
|
asks you.
|
|
305
|
-
5.
|
|
353
|
+
5. Logs decisions and deviations to `log.md`, updates **Resume here**, then commits the batch and
|
|
354
|
+
ticks it off in the spec's README.
|
|
355
|
+
|
|
356
|
+
Each coder gets only its task file, which already carries the 3–5 project conventions that task
|
|
357
|
+
needs, so parallel coders don't each load the project memory.
|
|
306
358
|
|
|
307
|
-
**It can resume:** if you stop halfway,
|
|
308
|
-
batch. If your tool can't run agents in parallel, it does the tasks one at a time instead.
|
|
359
|
+
**It can resume:** if you stop halfway, or the conversation gets compacted, run it again. It reads
|
|
360
|
+
the spec's **Resume here** block and carries on from the first unfinished batch. If your tool can't run agents in parallel, it does the tasks one at a time instead.
|
|
309
361
|
|
|
310
362
|
### 4. `spec-verify`: prove it works
|
|
311
363
|
|
|
@@ -316,10 +368,24 @@ each one the way a user would: clicking through the UI, calling real API routes,
|
|
|
316
368
|
database only to confirm the result.
|
|
317
369
|
|
|
318
370
|
**You get:** `specs/<feature>/verification-report.md`, with pass or fail for each criterion and the
|
|
319
|
-
evidence (screenshots, responses, data). If there's no spec, it asks you what "working" means and
|
|
371
|
+
evidence (screenshots, responses, data), grouped by requirement number (R1…) where the spec has them. If there's no spec, it asks you what "working" means and
|
|
320
372
|
checks that instead.
|
|
321
373
|
|
|
322
|
-
### 5. `spec-
|
|
374
|
+
### 5. `spec-review`: review the whole change
|
|
375
|
+
|
|
376
|
+
**Say:** "review this", "code review", "review PR #42", "is this ready to merge?"
|
|
377
|
+
|
|
378
|
+
**What it does:** It reviews the finished branch against the spec (every requirement R1… delivered,
|
|
379
|
+
nothing out of scope), the project's recorded conventions, and the code itself: correctness,
|
|
380
|
+
security, error handling, tests, and hot-path performance. It checks each finding against the code
|
|
381
|
+
before reporting it, and reads the diff rather than the whole repo.
|
|
382
|
+
|
|
383
|
+
**You get:** `specs/<feature>/review.md`, with findings ranked blocker, should-fix, nit, or question,
|
|
384
|
+
each with `file:line` and a suggested fix. Blockers stop `spec-ship` and run-through. It then asks
|
|
385
|
+
whether to fix them, and fixes go through `spec-implement`'s fix loop only after you say yes. It also
|
|
386
|
+
reviews any branch or a teammate's PR, and posts PR comments only after you approve the text.
|
|
387
|
+
|
|
388
|
+
### 6. `spec-checkpoint`: commit safely
|
|
323
389
|
|
|
324
390
|
**Say:** "checkpoint", "commit everything", "save my progress"
|
|
325
391
|
|
|
@@ -328,9 +394,13 @@ finds them in `package.json`, `Makefile`, `pyproject.toml`, CI config, and so on
|
|
|
328
394
|
Then it stages everything and commits in your configured style (`feat: …` or `STP-123: …`). In a
|
|
329
395
|
multi-repo setup, it makes one commit in each repo that changed.
|
|
330
396
|
|
|
397
|
+
When a spec is finished, it also adds the feature's lasting lessons (decisions and why, conventions
|
|
398
|
+
found, pitfalls) to the right `specs/context/<area>.md`, and shows you those changes so you can
|
|
399
|
+
correct them. It follows any commit rules recorded in the project memory.
|
|
400
|
+
|
|
331
401
|
**It won't:** push. Committing is a local step.
|
|
332
402
|
|
|
333
|
-
###
|
|
403
|
+
### 7. `spec-ship`: open the PR
|
|
334
404
|
|
|
335
405
|
**Say:** "ship it", "push this", "open a PR"
|
|
336
406
|
|
|
@@ -340,6 +410,9 @@ against your configured PR target, with a written description. In a multi-repo s
|
|
|
340
410
|
PR per repo, each linking the others. If a PR already exists for the branch, it pushes the new commits to that PR
|
|
341
411
|
instead of opening another one.
|
|
342
412
|
|
|
413
|
+
It won't open a PR while `review.md` has an open blocker, unless you accept it. Any should-fix
|
|
414
|
+
items are listed in the PR description.
|
|
415
|
+
|
|
343
416
|
**Needs:** the [GitHub CLI](https://cli.github.com) (`gh`), logged in.
|
|
344
417
|
|
|
345
418
|
### Bonus: `generative-seo`, a separate skill for SEO
|
|
@@ -348,7 +421,7 @@ This one isn't part of the workflow. It runs SEO and **GEO** (Generative Engine
|
|
|
348
421
|
your content cited by ChatGPT, Perplexity, and Google AI Overviews) for any website codebase. It has
|
|
349
422
|
seven modes: `audit`, `content`, `optimize`, `competitors`, `citations`, `report`, and `social`. The
|
|
350
423
|
first time, it asks a few questions about your brand, domain, and framework, and remembers the
|
|
351
|
-
answers. See `skills/generative-seo/SKILL.md`.
|
|
424
|
+
answers. See `plugin/skills/generative-seo/SKILL.md`.
|
|
352
425
|
|
|
353
426
|
---
|
|
354
427
|
|
|
@@ -360,12 +433,16 @@ specs/
|
|
|
360
433
|
├── investigation.md ← spec-investigate: what's true today, with evidence
|
|
361
434
|
├── requirements.md ← spec-create: what we're building and why
|
|
362
435
|
├── action-required.md ← spec-create: things only a human can do (API keys, DNS, accounts)
|
|
363
|
-
├── README.md ← spec-create: batches, dependency graph, progress checkboxes
|
|
436
|
+
├── README.md ← spec-create: "Resume here", batches, dependency graph, progress checkboxes
|
|
437
|
+
├── log.md ← every stage: decisions, deviations, review findings (append-only)
|
|
364
438
|
├── tasks/
|
|
365
439
|
│ ├── task-01-fix-pagination.md
|
|
366
440
|
│ ├── task-02-add-export-test-fixtures.md
|
|
367
441
|
│ └── …
|
|
368
|
-
|
|
442
|
+
├── verification-report.md ← spec-verify: pass/fail per acceptance criterion
|
|
443
|
+
└── review.md ← spec-review: ranked findings; open blockers stop spec-ship
|
|
444
|
+
specs/CONTEXT.md ← spec-setup / spec-checkpoint: project memory index (≤60 lines)
|
|
445
|
+
specs/context/<area>.md ← details per area, loaded only when needed (≤150 lines)
|
|
369
446
|
```
|
|
370
447
|
|
|
371
448
|
These are plain Markdown files, so you can review them in a PR, edit them, or hand them to a
|
|
@@ -384,7 +461,13 @@ Built into the skills, not left to the agent's judgment:
|
|
|
384
461
|
- **No guessing.** Gaps are marked UNKNOWN, and missing tickets are asked for rather than made up.
|
|
385
462
|
- **Tests can't be cheated.** Coders may not delete, skip, or weaken a test to make it pass, and the
|
|
386
463
|
reviewer checks for this.
|
|
387
|
-
- **Pushing needs an explicit "yes".**
|
|
464
|
+
- **Pushing needs an explicit "yes".** `spec-ship` also refuses while `review.md` has an open
|
|
465
|
+
blocker, unless you accept it, and that is recorded.
|
|
466
|
+
- **Reviews are checked, not guessed.** `spec-review` confirms each finding against the code before
|
|
467
|
+
reporting it, never edits code without your yes, and never posts PR comments without your yes on
|
|
468
|
+
the exact text.
|
|
469
|
+
- **Context costs stay small.** Project memory has hard size limits, is loaded only for the areas a
|
|
470
|
+
task touches, and is passed between stages as short digests.
|
|
388
471
|
- **Investigation stays in scope.** Ideas that come up along the way go under "optional" or "out of
|
|
389
472
|
scope" instead of being folded into the work.
|
|
390
473
|
|
|
@@ -408,8 +491,8 @@ config sits outside any repo, so it stays on your machine.
|
|
|
408
491
|
Yes. No skill assumes a language or framework. Each one finds the repo's own commands.
|
|
409
492
|
|
|
410
493
|
**Do I have to start every stage myself?**
|
|
411
|
-
No. After you approve a spec, say "approved, run it through": implement, verify, and checkpoint then
|
|
412
|
-
run one after another, stopping at the first failure. Two steps always wait for you: approving the
|
|
494
|
+
No. After you approve a spec, say "approved, run it through": implement, verify, review, and checkpoint then
|
|
495
|
+
run one after another, stopping at the first failure or review blocker. Two steps always wait for you: approving the
|
|
413
496
|
spec, and pushing or opening the PR. You don't need slash commands either. Saying "investigate
|
|
414
497
|
STP-123" or "ship it" picks the right skill.
|
|
415
498
|
|
|
@@ -439,14 +522,14 @@ Yes. Progress is saved in the spec's `README.md` checkboxes and the commit for e
|
|
|
439
522
|
**How do I update?**
|
|
440
523
|
Run `npm install -g @benjaminthomas/spec-driven-dev@latest`, then `spec-driven-dev` in your project.
|
|
441
524
|
Claude Code plugin users run
|
|
442
|
-
`/plugin marketplace update spec-driven-dev` and then update the plugin. Your config is never
|
|
525
|
+
`/plugin marketplace update spec-driven-dev` and then update the `ticket-to-pr` plugin. Your config is never
|
|
443
526
|
touched by an update.
|
|
444
527
|
|
|
445
528
|
**Can I trust the npm package?**
|
|
446
529
|
Releases are published by this repo's GitHub Actions workflow, not from anyone's laptop, through
|
|
447
530
|
npm [trusted publishing](https://docs.npmjs.com/trusted-publishers). Each version's npm page shows
|
|
448
531
|
a provenance badge linking it to the exact commit and workflow run that built it. The package has
|
|
449
|
-
one small dependency (`prompts`, for the setup menus), and it contains only `bin/` and the `skills/`
|
|
532
|
+
one small dependency (`prompts`, for the setup menus), and it contains only `bin/` and the `plugin/skills/`
|
|
450
533
|
folder.
|
|
451
534
|
|
|
452
535
|
**Something isn't working. Where do I start?**
|
|
@@ -480,7 +563,8 @@ spec-driven-dev --tools=cursor,codex # pick tools without being ask
|
|
|
480
563
|
spec-driven-dev --skills=spec-create,spec-ship # install only some skills
|
|
481
564
|
spec-driven-dev --yes # accept every detected default (CI-friendly)
|
|
482
565
|
spec-driven-dev doctor # check .spec-driven.yml against the real repos
|
|
483
|
-
spec-driven-dev status # list specs
|
|
566
|
+
spec-driven-dev status # list unfinished specs and each one's next step
|
|
567
|
+
spec-driven-dev context --areas=billing # print the project memory (index, or chosen areas)
|
|
484
568
|
spec-driven-dev --help # show all of the above
|
|
485
569
|
```
|
|
486
570
|
|
|
@@ -505,25 +589,26 @@ try an unreleased commit on `main`.
|
|
|
505
589
|
installer has one small dependency, [`prompts`](https://www.npmjs.com/package/prompts), for its menus.
|
|
506
590
|
CI tests it on Node 14, 16, 18, 20, 22, and 24, and on Windows and macOS.
|
|
507
591
|
|
|
508
|
-
### Claude Code (plugin
|
|
592
|
+
### Claude Code (plugin `ticket-to-pr`, with automatic updates)
|
|
509
593
|
|
|
510
594
|
```
|
|
511
595
|
/plugin marketplace add https://github.com/benjaminthomas/spec-driven-dev.git
|
|
512
|
-
/plugin install
|
|
596
|
+
/plugin install ticket-to-pr@spec-driven-dev
|
|
513
597
|
```
|
|
514
598
|
|
|
515
599
|
To update, run `/plugin marketplace update spec-driven-dev`, then update the plugin from `/plugin`.
|
|
516
600
|
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
601
|
+
Installed it before 1.9.0? The plugin was called `spec-driven-dev` then. Uninstall that one and
|
|
602
|
+
install `ticket-to-pr@spec-driven-dev`; the old name no longer gets updates.
|
|
603
|
+
|
|
604
|
+
To see unfinished specs and their next step at any time, run `spec-driven-dev status`
|
|
605
|
+
(for example, `specs/stp-123: 3/5 tasks done → next: spec-implement`). If
|
|
521
606
|
you use the plugin, `spec-driven-dev` skips Claude Code so you don't get every skill twice. Run
|
|
522
607
|
`spec-driven-dev setup` for the project config.
|
|
523
608
|
|
|
524
609
|
### By hand
|
|
525
610
|
|
|
526
|
-
Copy the `skills/<name>/` folders you want. Each one is self-contained. Where each tool looks for
|
|
611
|
+
Copy the `plugin/skills/<name>/` folders you want. Each one is self-contained. Where each tool looks for
|
|
527
612
|
skills:
|
|
528
613
|
|
|
529
614
|
| Tool | This project | All projects |
|
|
@@ -537,8 +622,8 @@ Codex CLI and Antigravity share the project path, so installing for one covers b
|
|
|
537
622
|
|
|
538
623
|
### Fallback: MCP server (for tools without Agent Skills support)
|
|
539
624
|
|
|
540
|
-
If your tool supports MCP but not Agent Skills, `mcp-server/` serves the same
|
|
541
|
-
tools. It reads `skills/` directly, so there's nothing to keep in sync.
|
|
625
|
+
If your tool supports MCP but not Agent Skills, `mcp-server/` serves the same nine skills as MCP
|
|
626
|
+
tools. It reads `plugin/skills/` directly, so there's nothing to keep in sync.
|
|
542
627
|
|
|
543
628
|
```bash
|
|
544
629
|
cd mcp-server && npm install
|
|
@@ -559,6 +644,7 @@ Each skill becomes a tool that returns its instructions, and supporting files ar
|
|
|
559
644
|
| `spec-create` | ✅ | ✅ | ✅ | ✅ | Planning and writing files only |
|
|
560
645
|
| `spec-implement` | ✅ | ✅ | ✅ | ✅ | Parallel agents and worktrees where the tool supports them; otherwise one task at a time |
|
|
561
646
|
| `spec-verify` | ✅ | ⚠️ | ⚠️ | ⚠️ | UI checks need browser automation; API and database checks work everywhere |
|
|
647
|
+
| `spec-review` | ✅ | ✅ | ✅ | ✅ | git diff, or `gh` for pull requests |
|
|
562
648
|
| `spec-checkpoint` | ✅ | ✅ | ✅ | ✅ | Plain git plus your repo's own check commands |
|
|
563
649
|
| `spec-ship` | ✅ | ✅ | ✅ | ✅ | git plus the GitHub CLI (`gh`) |
|
|
564
650
|
| `generative-seo` | ✅ | ✅ | ✅ | ✅ | Web search and writing files |
|
|
@@ -572,20 +658,21 @@ skips that step rather than failing.
|
|
|
572
658
|
|
|
573
659
|
| Skill | Stage | SKILL.md lines | Words | Supporting files |
|
|
574
660
|
|---|---|---:|---:|---:|
|
|
575
|
-
| `spec-setup` | 0 · configure |
|
|
576
|
-
| `spec-investigate` | 1 · understand |
|
|
577
|
-
| `spec-create` | 2 · plan |
|
|
578
|
-
| `spec-implement` | 3 · build |
|
|
579
|
-
| `spec-verify` | 4 · prove |
|
|
580
|
-
| `spec-
|
|
581
|
-
| `spec-
|
|
661
|
+
| `spec-setup` | 0 · configure | 142 | 1,334 | 3 |
|
|
662
|
+
| `spec-investigate` | 1 · understand | 354 | 3,007 | 1 |
|
|
663
|
+
| `spec-create` | 2 · plan | 183 | 1,646 | 6 |
|
|
664
|
+
| `spec-implement` | 3 · build | 322 | 2,683 | 3 |
|
|
665
|
+
| `spec-verify` | 4 · prove | 163 | 1,557 | 1 |
|
|
666
|
+
| `spec-review` | 5 · review | 131 | 1,209 | 1 |
|
|
667
|
+
| `spec-checkpoint` | 6 · commit | 131 | 1,020 | 0 |
|
|
668
|
+
| `spec-ship` | 7 · PR | 230 | 1,388 | 0 |
|
|
582
669
|
| `generative-seo` | standalone | 255 | 2,209 | 7 |
|
|
583
|
-
| **Total** | | **1,
|
|
670
|
+
| **Total** | | **1,911** | **16,053** | **22** |
|
|
584
671
|
|
|
585
672
|
- **8** skills: **1** setup + **6** workflow stages + **1** standalone
|
|
586
673
|
- **4** tools supported natively (Claude Code, Codex CLI, Cursor, Antigravity), plus an MCP fallback
|
|
587
674
|
- **3** layouts: single repo, monorepo, multi-repo
|
|
588
|
-
- **1** npm package, `@benjaminthomas/spec-driven-dev`, plus the Claude Code plugin and an MCP fallback
|
|
675
|
+
- **1** npm package, `@benjaminthomas/spec-driven-dev`, plus the Claude Code plugin `ticket-to-pr` and an MCP fallback
|
|
589
676
|
- **0** stack assumptions: lint, typecheck, test, build, and dev commands come from your repo
|
|
590
677
|
|
|
591
678
|
_The table is generated by `python3 scripts/check.py --fix`; CI fails if it goes out of date._
|
|
@@ -595,29 +682,29 @@ _The table is generated by `python3 scripts/check.py --fix`; CI fails if it goes
|
|
|
595
682
|
## Working on this repo
|
|
596
683
|
|
|
597
684
|
```
|
|
598
|
-
skills/<name>/SKILL.md
|
|
599
|
-
skills/<name>/references/
|
|
600
|
-
.claude-plugin/ Claude Code
|
|
685
|
+
plugin/skills/<name>/SKILL.md the skill itself (frontmatter: name, description, license)
|
|
686
|
+
plugin/skills/<name>/references/ templates and prompts the skill loads when needed
|
|
687
|
+
.claude-plugin/ Claude Code marketplace manifest
|
|
688
|
+
plugin/ the Claude Code plugin (manifest + skills only, no scripts or hooks)
|
|
601
689
|
.agents/skills/ symlinks so Codex/Antigravity pick the skills up inside this repo
|
|
602
690
|
bin/spec-driven-dev.cjs launcher (runs on any Node, explains if it's too old)
|
|
603
|
-
bin/cli.mjs the `spec-driven-dev` CLI: installer, setup menus, doctor, status
|
|
604
|
-
package.json npm package (ships bin/ and skills/)
|
|
691
|
+
bin/cli.mjs the `spec-driven-dev` CLI: installer, setup menus, doctor, status, context
|
|
692
|
+
package.json npm package (ships bin/ and plugin/skills/)
|
|
605
693
|
mcp-server/ MCP fallback server
|
|
606
|
-
hooks/hooks.json Claude Code session-start hook (runs `cli.mjs status`)
|
|
607
694
|
CHANGELOG.md what changed in each version
|
|
608
695
|
scripts/check.py consistency checks + metrics generator
|
|
609
696
|
scripts/test-cli.mjs installer self-test (fake HOME, throwaway repos)
|
|
610
697
|
.github/workflows/check.yml CI: consistency checks + installer self-test on every push and PR
|
|
611
698
|
.github/workflows/publish.yml publishes to npm when a vX.Y.Z tag is pushed
|
|
612
|
-
evals/
|
|
699
|
+
plugin/evals/ `claude plugin eval` cases
|
|
613
700
|
```
|
|
614
701
|
|
|
615
|
-
- **Adding a skill:** create `skills/<name>/SKILL.md`, then add the name to the two manifests, a `.agents/skills/<name>` symlink, the `STAGES` map in
|
|
702
|
+
- **Adding a skill:** create `plugin/skills/<name>/SKILL.md`, then add the name to the two manifests, a `.agents/skills/<name>` symlink, the `STAGES` map in
|
|
616
703
|
`scripts/check.py`, and this README. `python3 scripts/check.py` lists anything you missed.
|
|
617
704
|
- **Before pushing:** run `python3 scripts/check.py --fix`, then `npm test` (which runs the checks
|
|
618
705
|
and the installer self-test). CI (`.github/workflows/check.yml`) runs
|
|
619
706
|
the same checks, the installer self-test, and a syntax check on the MCP server.
|
|
620
|
-
- **Evals:** `claude plugin eval
|
|
707
|
+
- **Evals:** `claude plugin eval plugin --runs 1` checks that skills trigger on their phrases and stay
|
|
621
708
|
within their own stage. These runs use your Claude credentials, so they aren't part of CI.
|
|
622
709
|
- **Skill rules** (from [Anthropic's skill authoring guide](https://platform.claude.com/docs/en/agents-and-tools/agent-skills/best-practices),
|
|
623
710
|
enforced by `scripts/check.py`):
|
|
@@ -627,10 +714,10 @@ evals/ `claude plugin eval` cases
|
|
|
627
714
|
- `SKILL.md` stays under 500 lines, with detail in `references/` one link deep.
|
|
628
715
|
- Facts are read from the repo, not assumed.
|
|
629
716
|
- **Releasing:**
|
|
630
|
-
1. Increase `version` in both `package.json` and
|
|
717
|
+
1. Increase `version` in both `package.json` and `plugin/.claude-plugin/plugin.json` (the check fails if
|
|
631
718
|
they differ).
|
|
632
719
|
2. Add a `CHANGELOG.md` entry, then commit and push.
|
|
633
|
-
3. Tag the release and push the tag: `git tag v1.
|
|
720
|
+
3. Tag the release and push the tag: `git tag v1.10.0 && git push origin v1.10.0`.
|
|
634
721
|
4. Watch the **publish** run in the repo's Actions tab. When it's green, the new version is on
|
|
635
722
|
npm. Claude Code plugin users get it from the marketplace once the commit is on `main`.
|
|
636
723
|
|