@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.
Files changed (35) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +150 -63
  3. package/bin/cli.mjs +76 -13
  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 +25 -6
  12. package/{skills → plugin/skills}/spec-investigate/SKILL.md +29 -5
  13. package/{skills → plugin/skills}/spec-investigate/references/report-template.md +7 -0
  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 +7 -2
  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
  ```
@@ -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, and it always asks
127
- before pushing or opening a PR. To make this the default after approval, choose `run-through` during
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- local commit pushed branch
222
- + 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
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, and `spec-verify` checks against their
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", "change our branch rules"
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` and
242
- 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.
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 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.
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. 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.
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, run it again and it carries on from the first unfinished
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-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
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
- ### 6. `spec-ship`: open the PR
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
- └── 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)
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 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)
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, with automatic updates)
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 spec-driven-dev@spec-driven-dev
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
- The plugin also adds a **session-start reminder**. When you open Claude Code in a project with
518
- unfinished specs, Claude is told which ones and what the next step is (for example,
519
- `specs/stp-123: 3/5 tasks done → next: spec-implement`). It prints nothing when everything is
520
- 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
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 eight skills as MCP
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 | 117 | 1,068 | 1 |
576
- | `spec-investigate` | 1 · understand | 330 | 2,794 | 1 |
577
- | `spec-create` | 2 · plan | 166 | 1,503 | 5 |
578
- | `spec-implement` | 3 · build | 303 | 2,458 | 3 |
579
- | `spec-verify` | 4 · prove | 155 | 1,492 | 1 |
580
- | `spec-checkpoint` | 5 · commit | 108 | 795 | 0 |
581
- | `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 |
582
669
  | `generative-seo` | standalone | 255 | 2,209 | 7 |
583
- | **Total** | | **1,654** | **13,587** | **18** |
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 the skill itself (frontmatter: name, description, license)
599
- skills/<name>/references/ templates and prompts the skill loads when needed
600
- .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)
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/ `claude plugin eval` cases
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 . --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
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 `.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
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.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`.
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