@benjaminthomas/spec-driven-dev 1.7.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.
Files changed (35) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +169 -70
  3. package/bin/cli.mjs +97 -22
  4. package/package.json +3 -3
  5. package/{skills → plugin/skills}/spec-checkpoint/SKILL.md +23 -0
  6. package/{skills → plugin/skills}/spec-create/SKILL.md +18 -1
  7. package/plugin/skills/spec-create/references/log-template.md +27 -0
  8. package/{skills → plugin/skills}/spec-create/references/readme-template.md +12 -0
  9. package/{skills → plugin/skills}/spec-create/references/requirements-template.md +12 -4
  10. package/{skills → plugin/skills}/spec-create/references/task-template.md +12 -0
  11. package/{skills → plugin/skills}/spec-implement/SKILL.md +40 -16
  12. package/{skills → plugin/skills}/spec-investigate/SKILL.md +29 -5
  13. package/{skills → plugin/skills}/spec-investigate/references/report-template.md +8 -1
  14. package/plugin/skills/spec-review/SKILL.md +131 -0
  15. package/plugin/skills/spec-review/references/report-template.md +44 -0
  16. package/{skills → plugin/skills}/spec-setup/SKILL.md +34 -9
  17. package/plugin/skills/spec-setup/references/audit.md +71 -0
  18. package/{skills → plugin/skills}/spec-setup/references/config-template.yml +25 -9
  19. package/plugin/skills/spec-setup/references/context-template.md +83 -0
  20. package/{skills → plugin/skills}/spec-ship/SKILL.md +10 -0
  21. package/{skills → plugin/skills}/spec-verify/SKILL.md +10 -2
  22. /package/{skills → plugin/skills}/generative-seo/SKILL.md +0 -0
  23. /package/{skills → plugin/skills}/generative-seo/assets/citation-log-template.md +0 -0
  24. /package/{skills → plugin/skills}/generative-seo/assets/competitor-analysis-template.md +0 -0
  25. /package/{skills → plugin/skills}/generative-seo/assets/content-plan-template.md +0 -0
  26. /package/{skills → plugin/skills}/generative-seo/assets/geo-config-template.md +0 -0
  27. /package/{skills → plugin/skills}/generative-seo/assets/geo-playbook-template.md +0 -0
  28. /package/{skills → plugin/skills}/generative-seo/assets/social-queue-template.md +0 -0
  29. /package/{skills → plugin/skills}/generative-seo/references/geo-methodology.md +0 -0
  30. /package/{skills → plugin/skills}/spec-create/references/action-required-template.md +0 -0
  31. /package/{skills → plugin/skills}/spec-create/references/complexity-rubric.md +0 -0
  32. /package/{skills → plugin/skills}/spec-implement/references/coder-prompt-template.md +0 -0
  33. /package/{skills → plugin/skills}/spec-implement/references/fix-prompt-template.md +0 -0
  34. /package/{skills → plugin/skills}/spec-implement/references/review-prompt-template.md +0 -0
  35. /package/{skills → plugin/skills}/spec-verify/references/report-template.md +0 -0
package/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2026 benjaminbarnabas
3
+ Copyright (c) 2026 Benjamin Thomas
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
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 eight [Agent Skills](https://agentskills.io), plain Markdown instruction files that
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
  ```
@@ -97,23 +100,35 @@ words in quotes.
97
100
  **deep**, based on how much it touches and how risky it is (data, security, concurrency, public
98
101
  contracts, unclear requirements). `spec-implement` then runs each task on the model for its tier:
99
102
 
100
- | Tier | Typical task | Claude Code default |
101
- |---|---|---|
102
- | light | copy change, config value, small UI tweak following an existing pattern | `haiku` |
103
- | standard | a normal feature slice: route + service + tests | `sonnet` |
104
- | deep | migrations with backfills, auth/permissions, concurrency, cross-repo contracts | `opus` |
103
+ | Tier | Typical task | Claude Code | Codex CLI | Effort |
104
+ |---|---|---|---|---|
105
+ | light | copy change, config value, small UI tweak following an existing pattern | `haiku` | `gpt-6-luna` | low |
106
+ | standard | a normal feature slice: route + service + tests | `sonnet` | `gpt-6.1-sol` | medium |
107
+ | deep | migrations with backfills, auth/permissions, concurrency, cross-repo contracts | `opus` | `gpt-6.1-sol` | high |
108
+ | escalate | a deep task that still fails after a fix round | `fable` (asks first, as it may use usage credits) | (session model) | xhigh |
105
109
 
106
110
  - **Reviews:** each batch's review runs on at least `standard`, and on the batch's highest tier.
107
- - **Escalation:** a task that still fails after a fix round is retried one tier up.
111
+ - **Escalation:** a task that still fails after a fix round is retried one tier up. A deep task
112
+ that still fails goes to the `escalate` model.
113
+ - **Fallback:** if a model isn't available on your plan or provider, that task runs on your current
114
+ model and the report says so.
115
+ - **Where the defaults come from:** they were checked on 2026-11-06 against
116
+ [Claude Code's model docs](https://code.claude.com/docs/en/model-config) (on Bedrock, Google Cloud,
117
+ and Foundry, `sonnet`/`haiku` point to older versions),
118
+ [Anthropic's model overview](https://platform.claude.com/docs/en/about-claude/models/overview),
119
+ [Codex's config docs](https://developers.openai.com/codex/config-basic), and
120
+ [Cursor's model list](https://cursor.com/help/models-and-usage/available-models). Claude Code
121
+ uses family aliases, which always point to the newest model. Cursor's models depend on your plan,
122
+ so it uses your current model until you fill in the models you can see in its picker.
108
123
  - **Tools that run one model per session** (Cursor, Codex) don't switch silently. Before a heavier
109
124
  batch, they pause and tell you which model to switch to.
110
125
  - **Changing the models:** edit the `models:` section of `.spec-driven.yml`, for example to use a
111
126
  newer model for `deep`.
112
127
 
113
128
  **Fewer stops:** after reviewing the spec, say **"approved, run it through"**. The workflow then
114
- implements, verifies, and commits in one go. It stops at the first failure, and it always asks
115
- before pushing or opening a PR. To make this the default after approval, choose `run-through` during
116
- 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`).
117
132
 
118
133
  That's the whole workflow. Every stage can be used on its own as well: use `/spec-create` straight
119
134
  from a planning chat, or `/spec-checkpoint` on any work in progress.
@@ -156,7 +171,7 @@ straight away, so you can fix it before moving on. Press Enter on an empty line
156
171
  | Lint / typecheck / test / build / dev commands | `package.json` scripts and lockfile (per repo or package) | `pnpm run lint` |
157
172
  | Where specs go | (you choose) | `specs/` |
158
173
  | After you approve a spec | (you choose) | `stop` (wait at each stage) or `run-through` |
159
- | Model per task tier | written with defaults: Claude Code `haiku`/`sonnet`/`opus`, others `default` | edit `models:` later |
174
+ | Model and effort per task tier | written with the defaults above | edit `models:` / `effort:` later |
160
175
 
161
176
  **Where the file lives, by layout:**
162
177
 
@@ -193,28 +208,63 @@ example, from inside `/Projects/frontend`:
193
208
  Every question also has a flag, for scripts and CI:
194
209
  `--layout=multi-repo --repos=~/Projects/frontend,~/Work/backend --workspace=~/Projects`,
195
210
  `--layout=monorepo --packages=apps/web,packages/ui`, `--after-approval=run-through`,
196
- `--tools=cursor,codex`, `--global`, `--yes` (accept everything detected), and `--version`.
211
+ `--project=new|existing`, `--tools=cursor,codex`, `--global`, `--yes` (accept everything detected), and `--version`.
197
212
 
198
213
  To change the rules later, edit the file or run setup again, then run `spec-driven-dev doctor`
199
214
  to confirm the file still matches your repos. Setup never overwrites the file without
200
- 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.
201
248
 
202
249
  ## How the workflow fits together
203
250
 
204
251
  ```
205
- ┌──────────────────┐ ┌─────────────┐ ┌──────────┐ ┌────────────────┐ ┌─────────────┐ ┌─────────────────┐ ┌───────────┐
206
- │ spec-investigate │ → │ spec-create │ → │ YOU │ → │ spec-implement │ → │ spec-verify │ → │ spec-checkpoint │ → │ spec-ship │
207
- │ understand │ │ plan │ │ approve │ │ build + test │ │ prove │ │ commit │ │ open PR │
208
- └──────────────────┘ └─────────────┘ └──────────┘ └────────────────┘ └─────────────┘ └─────────────────┘ └───────────┘
209
- investigation.md specs/<feature>/ code + tests, verification- local commit pushed branch
210
- + work branch task files one commit/batch report.md + GitHub PR
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
211
258
  ```
212
259
 
213
260
  - **The approval step is yours.** Nothing builds until you've read the spec and run `spec-implement`
214
261
  yourself. `spec-investigate` never moves on to the next stage by itself.
215
262
  - **Each stage reads the previous stage's files.** `spec-create` uses `investigation.md` as its
216
- evidence, `spec-implement` works through the task files, and `spec-verify` checks against their
217
- 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.
218
268
  - **Stages can be skipped.** For new projects with nothing to investigate, start at `spec-create`.
219
269
  For a quick fix, use only `spec-checkpoint` and `spec-ship`.
220
270
 
@@ -224,10 +274,13 @@ asking. See [`config-template.yml`](skills/spec-setup/references/config-template
224
274
 
225
275
  ### 0. `spec-setup`: learn the project's rules
226
276
 
227
- **Say:** "run spec-setup", "configure the pipeline", "change our branch rules"
277
+ **Say:** "run spec-setup", "configure the pipeline", "audit this repo", "refresh the project context"
228
278
 
229
- **What it does:** see [Project setup](#project-setup-your-teams-rules). It writes `.spec-driven.yml` and
230
- nothing else: no branches, commits, or code.
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.
231
284
 
232
285
  ### 1. `spec-investigate`: understand before planning
233
286
 
@@ -257,8 +310,13 @@ You can add `--context ./notes.md` to supply extra background, such as meeting n
257
310
  4. Sorts the work into **required / supporting / optional / out of scope**, and lists risks, security
258
311
  and performance concerns, and existing tests.
259
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
+
260
317
  **You get:** `specs/<feature>/investigation.md`, with every finding labelled **VERIFIED**,
261
- **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.
262
320
 
263
321
  **It won't:** write code, write tests, or start `spec-create` without being asked.
264
322
 
@@ -273,7 +331,9 @@ each other and don't touch the same files, so they can be built at the same time
273
331
 
274
332
  **You get:** a `specs/<feature>/` folder (see [What ends up in your repo](#what-ends-up-in-your-repo)).
275
333
  Each task file is complete on its own: description, files to change, implementation steps, **tests
276
- to write**, and acceptance criteria.
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.
277
337
 
278
338
  **Then:** read it, edit anything you disagree with, and only then run `spec-implement`.
279
339
 
@@ -290,10 +350,14 @@ to write**, and acceptance criteria.
290
350
  4. A **separate reviewer agent** runs lint, typecheck, and tests and checks every acceptance
291
351
  criterion. If anything fails, fix agents are sent in, for up to 3 rounds before it stops and
292
352
  asks you.
293
- 5. Commits the batch and ticks it off in the spec's README.
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.
294
355
 
295
- **It can resume:** if you stop halfway, run it again and it carries on from the first unfinished
296
- batch. If your tool can't run agents in parallel, it does the tasks one at a time instead.
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.
358
+
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.
297
361
 
298
362
  ### 4. `spec-verify`: prove it works
299
363
 
@@ -304,10 +368,24 @@ each one the way a user would: clicking through the UI, calling real API routes,
304
368
  database only to confirm the result.
305
369
 
306
370
  **You get:** `specs/<feature>/verification-report.md`, with pass or fail for each criterion and the
307
- 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
308
372
  checks that instead.
309
373
 
310
- ### 5. `spec-checkpoint`: commit safely
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
311
389
 
312
390
  **Say:** "checkpoint", "commit everything", "save my progress"
313
391
 
@@ -316,9 +394,13 @@ finds them in `package.json`, `Makefile`, `pyproject.toml`, CI config, and so on
316
394
  Then it stages everything and commits in your configured style (`feat: …` or `STP-123: …`). In a
317
395
  multi-repo setup, it makes one commit in each repo that changed.
318
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
+
319
401
  **It won't:** push. Committing is a local step.
320
402
 
321
- ### 6. `spec-ship`: open the PR
403
+ ### 7. `spec-ship`: open the PR
322
404
 
323
405
  **Say:** "ship it", "push this", "open a PR"
324
406
 
@@ -328,6 +410,9 @@ against your configured PR target, with a written description. In a multi-repo s
328
410
  PR per repo, each linking the others. If a PR already exists for the branch, it pushes the new commits to that PR
329
411
  instead of opening another one.
330
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
+
331
416
  **Needs:** the [GitHub CLI](https://cli.github.com) (`gh`), logged in.
332
417
 
333
418
  ### Bonus: `generative-seo`, a separate skill for SEO
@@ -336,7 +421,7 @@ This one isn't part of the workflow. It runs SEO and **GEO** (Generative Engine
336
421
  your content cited by ChatGPT, Perplexity, and Google AI Overviews) for any website codebase. It has
337
422
  seven modes: `audit`, `content`, `optimize`, `competitors`, `citations`, `report`, and `social`. The
338
423
  first time, it asks a few questions about your brand, domain, and framework, and remembers the
339
- answers. See `skills/generative-seo/SKILL.md`.
424
+ answers. See `plugin/skills/generative-seo/SKILL.md`.
340
425
 
341
426
  ---
342
427
 
@@ -348,12 +433,16 @@ specs/
348
433
  ├── investigation.md ← spec-investigate: what's true today, with evidence
349
434
  ├── requirements.md ← spec-create: what we're building and why
350
435
  ├── action-required.md ← spec-create: things only a human can do (API keys, DNS, accounts)
351
- ├── 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)
352
438
  ├── tasks/
353
439
  │ ├── task-01-fix-pagination.md
354
440
  │ ├── task-02-add-export-test-fixtures.md
355
441
  │ └── …
356
- └── verification-report.md ← spec-verify: pass/fail per acceptance criterion
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)
357
446
  ```
358
447
 
359
448
  These are plain Markdown files, so you can review them in a PR, edit them, or hand them to a
@@ -372,7 +461,13 @@ Built into the skills, not left to the agent's judgment:
372
461
  - **No guessing.** Gaps are marked UNKNOWN, and missing tickets are asked for rather than made up.
373
462
  - **Tests can't be cheated.** Coders may not delete, skip, or weaken a test to make it pass, and the
374
463
  reviewer checks for this.
375
- - **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.
376
471
  - **Investigation stays in scope.** Ideas that come up along the way go under "optional" or "out of
377
472
  scope" instead of being folded into the work.
378
473
 
@@ -396,8 +491,8 @@ config sits outside any repo, so it stays on your machine.
396
491
  Yes. No skill assumes a language or framework. Each one finds the repo's own commands.
397
492
 
398
493
  **Do I have to start every stage myself?**
399
- No. After you approve a spec, say "approved, run it through": implement, verify, and checkpoint then
400
- 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
401
496
  spec, and pushing or opening the PR. You don't need slash commands either. Saying "investigate
402
497
  STP-123" or "ship it" picks the right skill.
403
498
 
@@ -427,14 +522,14 @@ Yes. Progress is saved in the spec's `README.md` checkboxes and the commit for e
427
522
  **How do I update?**
428
523
  Run `npm install -g @benjaminthomas/spec-driven-dev@latest`, then `spec-driven-dev` in your project.
429
524
  Claude Code plugin users run
430
- `/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
431
526
  touched by an update.
432
527
 
433
528
  **Can I trust the npm package?**
434
529
  Releases are published by this repo's GitHub Actions workflow, not from anyone's laptop, through
435
530
  npm [trusted publishing](https://docs.npmjs.com/trusted-publishers). Each version's npm page shows
436
531
  a provenance badge linking it to the exact commit and workflow run that built it. The package has
437
- 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/`
438
533
  folder.
439
534
 
440
535
  **Something isn't working. Where do I start?**
@@ -468,7 +563,8 @@ spec-driven-dev --tools=cursor,codex # pick tools without being ask
468
563
  spec-driven-dev --skills=spec-create,spec-ship # install only some skills
469
564
  spec-driven-dev --yes # accept every detected default (CI-friendly)
470
565
  spec-driven-dev doctor # check .spec-driven.yml against the real repos
471
- spec-driven-dev status # list specs with unfinished work
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)
472
568
  spec-driven-dev --help # show all of the above
473
569
  ```
474
570
 
@@ -493,25 +589,26 @@ try an unreleased commit on `main`.
493
589
  installer has one small dependency, [`prompts`](https://www.npmjs.com/package/prompts), for its menus.
494
590
  CI tests it on Node 14, 16, 18, 20, 22, and 24, and on Windows and macOS.
495
591
 
496
- ### Claude Code (plugin, with automatic updates)
592
+ ### Claude Code (plugin `ticket-to-pr`, with automatic updates)
497
593
 
498
594
  ```
499
595
  /plugin marketplace add https://github.com/benjaminthomas/spec-driven-dev.git
500
- /plugin install spec-driven-dev@spec-driven-dev
596
+ /plugin install ticket-to-pr@spec-driven-dev
501
597
  ```
502
598
 
503
599
  To update, run `/plugin marketplace update spec-driven-dev`, then update the plugin from `/plugin`.
504
600
 
505
- The plugin also adds a **session-start reminder**. When you open Claude Code in a project with
506
- unfinished specs, Claude is told which ones and what the next step is (for example,
507
- `specs/stp-123: 3/5 tasks done → next: spec-implement`). It prints nothing when everything is
508
- finished. If
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
509
606
  you use the plugin, `spec-driven-dev` skips Claude Code so you don't get every skill twice. Run
510
607
  `spec-driven-dev setup` for the project config.
511
608
 
512
609
  ### By hand
513
610
 
514
- 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
515
612
  skills:
516
613
 
517
614
  | Tool | This project | All projects |
@@ -525,8 +622,8 @@ Codex CLI and Antigravity share the project path, so installing for one covers b
525
622
 
526
623
  ### Fallback: MCP server (for tools without Agent Skills support)
527
624
 
528
- If your tool supports MCP but not Agent Skills, `mcp-server/` serves the same eight skills as MCP
529
- 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.
530
627
 
531
628
  ```bash
532
629
  cd mcp-server && npm install
@@ -547,6 +644,7 @@ Each skill becomes a tool that returns its instructions, and supporting files ar
547
644
  | `spec-create` | ✅ | ✅ | ✅ | ✅ | Planning and writing files only |
548
645
  | `spec-implement` | ✅ | ✅ | ✅ | ✅ | Parallel agents and worktrees where the tool supports them; otherwise one task at a time |
549
646
  | `spec-verify` | ✅ | ⚠️ | ⚠️ | ⚠️ | UI checks need browser automation; API and database checks work everywhere |
647
+ | `spec-review` | ✅ | ✅ | ✅ | ✅ | git diff, or `gh` for pull requests |
550
648
  | `spec-checkpoint` | ✅ | ✅ | ✅ | ✅ | Plain git plus your repo's own check commands |
551
649
  | `spec-ship` | ✅ | ✅ | ✅ | ✅ | git plus the GitHub CLI (`gh`) |
552
650
  | `generative-seo` | ✅ | ✅ | ✅ | ✅ | Web search and writing files |
@@ -560,20 +658,21 @@ skips that step rather than failing.
560
658
 
561
659
  | Skill | Stage | SKILL.md lines | Words | Supporting files |
562
660
  |---|---|---:|---:|---:|
563
- | `spec-setup` | 0 · configure | 117 | 1,068 | 1 |
564
- | `spec-investigate` | 1 · understand | 330 | 2,794 | 1 |
565
- | `spec-create` | 2 · plan | 166 | 1,503 | 5 |
566
- | `spec-implement` | 3 · build | 298 | 2,375 | 3 |
567
- | `spec-verify` | 4 · prove | 155 | 1,492 | 1 |
568
- | `spec-checkpoint` | 5 · commit | 108 | 795 | 0 |
569
- | `spec-ship` | 6 · PR | 220 | 1,268 | 0 |
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 |
570
669
  | `generative-seo` | standalone | 255 | 2,209 | 7 |
571
- | **Total** | | **1,649** | **13,504** | **18** |
670
+ | **Total** | | **1,911** | **16,053** | **22** |
572
671
 
573
672
  - **8** skills: **1** setup + **6** workflow stages + **1** standalone
574
673
  - **4** tools supported natively (Claude Code, Codex CLI, Cursor, Antigravity), plus an MCP fallback
575
674
  - **3** layouts: single repo, monorepo, multi-repo
576
- - **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
577
676
  - **0** stack assumptions: lint, typecheck, test, build, and dev commands come from your repo
578
677
 
579
678
  _The table is generated by `python3 scripts/check.py --fix`; CI fails if it goes out of date._
@@ -583,29 +682,29 @@ _The table is generated by `python3 scripts/check.py --fix`; CI fails if it goes
583
682
  ## Working on this repo
584
683
 
585
684
  ```
586
- skills/<name>/SKILL.md the skill itself (frontmatter: name, description, license)
587
- skills/<name>/references/ templates and prompts the skill loads when needed
588
- .claude-plugin/ Claude Code plugin + marketplace manifests
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)
589
689
  .agents/skills/ symlinks so Codex/Antigravity pick the skills up inside this repo
590
690
  bin/spec-driven-dev.cjs launcher (runs on any Node, explains if it's too old)
591
- bin/cli.mjs the `spec-driven-dev` CLI: installer, setup menus, doctor, status
592
- 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/)
593
693
  mcp-server/ MCP fallback server
594
- hooks/hooks.json Claude Code session-start hook (runs `cli.mjs status`)
595
694
  CHANGELOG.md what changed in each version
596
695
  scripts/check.py consistency checks + metrics generator
597
696
  scripts/test-cli.mjs installer self-test (fake HOME, throwaway repos)
598
697
  .github/workflows/check.yml CI: consistency checks + installer self-test on every push and PR
599
698
  .github/workflows/publish.yml publishes to npm when a vX.Y.Z tag is pushed
600
- evals/ `claude plugin eval` cases
699
+ plugin/evals/ `claude plugin eval` cases
601
700
  ```
602
701
 
603
- - **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
604
703
  `scripts/check.py`, and this README. `python3 scripts/check.py` lists anything you missed.
605
704
  - **Before pushing:** run `python3 scripts/check.py --fix`, then `npm test` (which runs the checks
606
705
  and the installer self-test). CI (`.github/workflows/check.yml`) runs
607
706
  the same checks, the installer self-test, and a syntax check on the MCP server.
608
- - **Evals:** `claude plugin eval . --runs 1` checks that skills trigger on their phrases and stay
707
+ - **Evals:** `claude plugin eval plugin --runs 1` checks that skills trigger on their phrases and stay
609
708
  within their own stage. These runs use your Claude credentials, so they aren't part of CI.
610
709
  - **Skill rules** (from [Anthropic's skill authoring guide](https://platform.claude.com/docs/en/agents-and-tools/agent-skills/best-practices),
611
710
  enforced by `scripts/check.py`):
@@ -615,10 +714,10 @@ evals/ `claude plugin eval` cases
615
714
  - `SKILL.md` stays under 500 lines, with detail in `references/` one link deep.
616
715
  - Facts are read from the repo, not assumed.
617
716
  - **Releasing:**
618
- 1. Increase `version` in both `package.json` and `.claude-plugin/plugin.json` (the check fails if
717
+ 1. Increase `version` in both `package.json` and `plugin/.claude-plugin/plugin.json` (the check fails if
619
718
  they differ).
620
719
  2. Add a `CHANGELOG.md` entry, then commit and push.
621
- 3. Tag the release and push the tag: `git tag v1.4.1 && git push origin v1.4.1`.
720
+ 3. Tag the release and push the tag: `git tag v1.10.0 && git push origin v1.10.0`.
622
721
  4. Watch the **publish** run in the repo's Actions tab. When it's green, the new version is on
623
722
  npm. Claude Code plugin users get it from the marketplace once the commit is on `main`.
624
723