sdd-engineering
Spec-driven workflow: spec-creator, implementation-planner, implementer and plan-verifier agents, run-plan and workflow-retro skills.
Tags
Compatibility
- Claude Code ≥ 2.1.318
- Windows
- macOS
- verified on 2.1.318
Install
In a Claude Code session
User
Run in a Claude Code session:
/plugin install sdd-engineering --marketplace lindigo-design/devdigest-marketplaceThe first time, Claude Code asks before it adds the marketplace. Then the plugin's details open; nothing is installed yet.
Choose Install for you (user scope)
Project
Run in a Claude Code session:
/plugin install sdd-engineering --marketplace lindigo-design/devdigest-marketplaceThe first time, Claude Code asks before it adds the marketplace. Then the plugin's details open; nothing is installed yet.
Choose Install for all collaborators on this repository (project scope)
Then, in your terminal, record the marketplace in the repository for collaborators (running it again is harmless):
claude plugin marketplace add lindigo-design/devdigest-marketplace --scope project
The commands write this .claude/settings.json:
{
"enabledPlugins": {
"sdd-engineering@lindigo-devdigest": true,
"engineering-paved-path@lindigo-devdigest": true,
"research-tools@lindigo-devdigest": true,
"architecture-review@lindigo-devdigest": true
},
"extraKnownMarketplaces": {
"lindigo-devdigest": {
"source": {
"source": "github",
"repo": "lindigo-design/devdigest-marketplace"
}
}
}
}Commit it:
git add .claude/settings.jsonCollaborators who trust the folder get the marketplace and the plugin. These plugins come from the marketplace repository itself, so they load without a separate install. Each collaborator needs Claude Code ≥ 2.1.318. Hooks need Node.js on PATH.
If Claude Code reports the plugin as enabled but not installed, run this once:
claude plugin install sdd-engineering@lindigo-devdigest --scope projectLocal
Run in a Claude Code session:
/plugin install sdd-engineering --marketplace lindigo-design/devdigest-marketplaceThe first time, Claude Code asks before it adds the marketplace. Then the plugin's details open; nothing is installed yet.
Choose Install for you, in this repo only (local scope)
.claude/settings.local.json is personal and is not committed.
In your terminal
User
Run in your terminal:
claude plugin install sdd-engineering --marketplace lindigo-design/devdigest-marketplaceRestart Claude Code, or run /reload-plugins in an open session, to load it.
Project
Run in your terminal:
claude plugin marketplace add lindigo-design/devdigest-marketplace --scope projectclaude plugin install sdd-engineering@lindigo-devdigest --scope projectRestart Claude Code, or run /reload-plugins in an open session, to load it.
The commands write this .claude/settings.json:
{
"enabledPlugins": {
"sdd-engineering@lindigo-devdigest": true,
"engineering-paved-path@lindigo-devdigest": true,
"research-tools@lindigo-devdigest": true,
"architecture-review@lindigo-devdigest": true
},
"extraKnownMarketplaces": {
"lindigo-devdigest": {
"source": {
"source": "github",
"repo": "lindigo-design/devdigest-marketplace"
}
}
}
}Commit it:
git add .claude/settings.jsonCollaborators who trust the folder get the marketplace and the plugin. These plugins come from the marketplace repository itself, so they load without a separate install. Each collaborator needs Claude Code ≥ 2.1.318. Hooks need Node.js on PATH.
If Claude Code reports the plugin as enabled but not installed, run this once:
claude plugin install sdd-engineering@lindigo-devdigest --scope projectLocal
Run in your terminal:
claude plugin install sdd-engineering --marketplace lindigo-design/devdigest-marketplace --scope localRestart Claude Code, or run /reload-plugins in an open session, to load it.
.claude/settings.local.json is personal and is not committed.
Also installs, at the same scope: engineering-paved-path ^1.0, research-tools ^1.0, architecture-review ^1.0
Adds ~1,492 tokens to every session. With its dependencies: ~2,153 tokens.
Components
Skills · 3
- fastify-best-practices
Guides development of Fastify Node.js backend servers and REST APIs using TypeScript or JavaScript. Use when building, configuring, or debugging a Fastify application — including defining routes, implementing plugins, setting up JSON Schema validation, handling errors, optimising performance, managing authentication, configuring CORS and security headers, integrating databases, working with WebSockets, and deploying to production. Covers the full Fastify request lifecycle (hooks, serialization, logging with Pino) and TypeScript integration via strip types. Trigger terms: Fastify, Node.js server, REST API, API routes, backend framework, fastify.config, server.ts, app.ts.
/sdd-engineering:fastify-best-practicesyou can start it; Claude also loads it when relevantPreloaded by: implementation-planner
- run-plan
Runs an approved implementation plan (plans/<feature-id>.md) task by task in the main session, sending each task to the implementer agent and then to plan-verifier, with one retry on failure. Use when the user asks to "run the plan", "execute plans/<feature-id>.md", "implement the approved plan" or "start the implementers", or types /sdd-engineering:run-plan <plan> [--task T<n>]. It refuses a plan whose Status is not approved, stops after a second failed verification, ends with an architecture review of the full diff, keeps task statuses in the plan up to date, offers a retro and never commits or pushes. Not for writing the plan (use sdd-engineering:implementation-planner) or checking work by hand (use sdd-engineering:plan-verifier).
/sdd-engineering:run-plan <path to plans/<feature-id>.md> [--task T<n>]you start it; Claude does not load it on its own - workflow-retro
Produces a retrospective of a finished multi-agent session, such as a run-plan run, with the agent sequence, tokens, cache hit rate, parallelism and cost taken from the session transcripts. Use when a spec-driven run has finished or when the user asks for a "workflow retro", "agent retro", "session retrospective", "how did the workflow go" or "what agents ran", or types /sdd-engineering:workflow-retro [plan path]. It finds duplicated context, round-trips, scope drift, failed steps and missing workflow steps, and ends with at most five concrete action items, each naming a file. The retro is shown in chat first; it is saved under a retros/ folder only after the user confirms. It never edits agents, skills or plans. Not for checking code against a plan (use sdd-engineering:plan-verifier).
/sdd-engineering:workflow-retro [plan path or run name]you can start it; Claude also loads it when relevant
Agents · 4
- implementation-planner
Turns an approved spec into an implementation plan (how and in what order), saved as plans/<feature-id>.md with Status draft. Delegate to it after the user has set the spec to approved: pass the spec path and any technical answers. It researches the repository and writes contracts first, disjoint file ownership, ordered tasks with files, steps, Covers SPEC-NN/AC-n and verify commands discovered from the repo, plus an AC → task map, ready for /sdd-engineering:run-plan to execute. Refuses with CANNOT PLAN when the spec is missing, not approved, has open [NEEDS CLARIFICATION] points, contradicts the code or is infeasible. Asks only "how" questions. Writes only under a plans/ path segment (enforced by a hook); never writes specs or code; never commits. Not for writing specs (use sdd-engineering:spec-creator) or for small changes in 1–2 files.
@agent-sdd-engineering:implementation-plannermention it, or Claude delegates to it when relevantPreloads: onion-architecture (engineering-paved-path), frontend-ui-architecture (engineering-paved-path), fastify-best-practices
- implementer
Implements exactly one task of an approved plan (plans/<feature-id>.md), backend or frontend, writing only the files that task owns. Delegate to it from /sdd-engineering:run-plan, one task at a time; the prompt gives the plan path and the task ID, plus the verifier's findings on a retry. It follows the plan's contracts, the task's insights and the project's conventions, runs the task's verify commands once, and returns a report with status (DONE, DONE_WITH_CONCERNS or BLOCKED), files changed, test results, deviations and the smallest plan change that would unblock it. Writes project code and tests only; no plans, specs or insights files; no package installs; never runs git commands that change state, never commits or pushes. Not for planning (use sdd-engineering:implementation-planner) or checking finished work (use sdd-engineering:plan-verifier).
@agent-sdd-engineering:implementermention it, or Claude delegates to it when relevant - plan-verifier
Read-only check of finished code against every item of a plan (plans/<feature-id>.md) and the EARS acceptance criteria of the spec it links, one task or the whole plan. Delegate to it from /sdd-engineering:run-plan after each implementer task and once at the end, or by hand with a plan path. It builds a requirement inventory with IDs, maps each item to code evidence (path:line), an asserting test and fresh command output, checks changed files against the ownership map, and returns a verdict (COMPLIANT, NOT COMPLIANT or INCOMPLETE EVIDENCE) with a traceability matrix SPEC-NN/AC-n → task → test → commit and a GAPS list. Never trusts task statuses or implementer reports; gives no generic code advice. Strictly read-only: no Write/Edit, Bash limited by a hook to read-only git, runs no tests or builds (lists them for the caller); never commits. Not a code-quality or architecture review (use architecture-review:architecture-reviewer).
@agent-sdd-engineering:plan-verifiermention it, or Claude delegates to it when relevant - spec-creator
Writes a feature spec (what to build and why) with a unique Spec ID, EARS acceptance criteria AC-n, edge cases and a design review, saved as specs/<feature-id>.md with Status draft. Delegate to it as the first step of spec-driven development, after optional research: pass the feature request, any research-tools:researcher reports and the user's answers. It reviews the design sources the user gives and the repository, asks only blocking questions (at most 4 per round, 3 rounds) and leaves smaller gaps inline as [NEEDS CLARIFICATION]. Returns the spec path, open points and the next step; returns a QUESTIONS block and writes nothing when it cannot ask the user directly. Writes only under a specs/ path segment (enforced by a hook); no code, plans or tests; never commits. Not for implementation plans (use sdd-engineering:implementation-planner) or for answering a codebase question (use research-tools:researcher).
@agent-sdd-engineering:spec-creatormention it, or Claude delegates to it when relevant
Hooks · 2
- bash-guard
Scope guards for SDD agents: spec-creator writes only Markdown under specs/, implementation-planner only under plans/, and plan-verifier's Bash is limited to read-only git.
PreToolUse · Bashruns automatically - write-scope
Scope guards for SDD agents: spec-creator writes only Markdown under specs/, implementation-planner only under plans/, and plan-verifier's Bash is limited to read-only git.
PreToolUse · Write|Edit|MultiEdit|NotebookEditruns automatically
Try it after install
Check that it loaded
In a session, type / and look for
/sdd-engineering:List installed plugins with their version, scope and status:
claude plugin listSee its components and what it adds to every session:
claude plugin details sdd-engineering
Call it
Skills: type
/sdd-engineering:fastify-best-practices,/sdd-engineering:run-plan,/sdd-engineering:workflow-retroAgents: mention
@agent-sdd-engineering:implementation-planner,@agent-sdd-engineering:implementer,@agent-sdd-engineering:plan-verifier,@agent-sdd-engineering:spec-creatorYou can also name the agent in plain words, or let Claude delegate when a request matches its description. To run a whole session as the agent:
claude --agent sdd-engineering:implementation-plannerHooks run automatically; there is nothing to call.
Examples from the README
@agent-research-tools:researcher How are invoices numbered today, and where?A research report with
path:lineevidence, to feed into the spec.@agent-sdd-engineering:spec-creator Customers need to download invoices as PDF. Research: <report>specs/invoice-pdf.mdwith a Spec ID, EARS acceptance criteria (AC-1…), edge cases and open points; or up to three rounds of blocking questions first.
Manage
Update this plugin
In a Claude Code session
/plugin → Installed → sdd-engineering → Update now
In your terminal
User
claude plugin update sdd-engineering@lindigo-devdigestProject
claude plugin update sdd-engineering@lindigo-devdigest --scope projectLocal
claude plugin update sdd-engineering@lindigo-devdigest --scope localFrom the terminal, restart Claude Code after the update.
Update every plugin from this marketplace
In a Claude Code session
/plugin → Marketplaces → lindigo-devdigest → Update marketplace
In your terminal
Use a Claude Code session.
claude plugin marketplace update without a name only refreshes the listings; it installs no new versions.
Turn on auto-update
In a Claude Code session
/plugin → Marketplaces → lindigo-devdigest → Enable auto-update
In your terminal
Or add autoUpdate to the marketplace entry in your settings file:
{
"extraKnownMarketplaces": {
"lindigo-devdigest": {
"source": {
"source": "github",
"repo": "lindigo-design/devdigest-marketplace"
},
"autoUpdate": true
}
}
}Auto-update is off by default for this marketplace.
Disable
In a Claude Code session
/plugin disable sdd-engineering@lindigo-devdigestIn your terminal
User
claude plugin disable sdd-engineering@lindigo-devdigestProject
claude plugin disable sdd-engineering@lindigo-devdigest --scope projectLocal
claude plugin disable sdd-engineering@lindigo-devdigest --scope localEnable
In a Claude Code session
/plugin enable sdd-engineering@lindigo-devdigestIn your terminal
User
claude plugin enable sdd-engineering@lindigo-devdigestProject
claude plugin enable sdd-engineering@lindigo-devdigest --scope projectLocal
claude plugin enable sdd-engineering@lindigo-devdigest --scope localUninstall
In a Claude Code session
/plugin uninstall sdd-engineering@lindigo-devdigestIn your terminal
User
claude plugin uninstall sdd-engineering@lindigo-devdigest --pruneProject
claude plugin uninstall sdd-engineering@lindigo-devdigest --scope project --pruneLocal
claude plugin uninstall sdd-engineering@lindigo-devdigest --scope local --prune--prune also removes the dependencies that were installed with it and that no other plugin needs.
For a plugin the project enables, Claude Code asks: disable it for you only, or uninstall it for everyone.
Pin this release
In a Claude Code session
Use the terminal.
In your terminal
User
claude plugin marketplace remove lindigo-devdigestclaude plugin marketplace add lindigo-design/devdigest-marketplace#sdd-engineering--v1.1.0claude plugin install sdd-engineering@lindigo-devdigestProject
claude plugin marketplace remove lindigo-devdigestclaude plugin marketplace add lindigo-design/devdigest-marketplace#sdd-engineering--v1.1.0claude plugin install sdd-engineering@lindigo-devdigest --scope projectLocal
claude plugin marketplace remove lindigo-devdigestclaude plugin marketplace add lindigo-design/devdigest-marketplace#sdd-engineering--v1.1.0claude plugin install sdd-engineering@lindigo-devdigest --scope localA pin applies to the whole catalog, not only to this plugin. Removing the marketplace uninstalls every plugin installed from it and deletes their saved data, so reinstall the others afterwards. To unpin, run the same commands without #sdd-engineering--v1.1.0.
Latest change
1.1.02026-11-11
Added
workflow-retroshipsscripts/transcript-metrics.mjs, called through${CLAUDE_SKILL_DIR}so it works wherever the plugin is installed. It reads the session and subagent transcripts and returns tokens (counted once permessage.id), cache hit rate, tool calls, spans, parallelism, the critical path, files read by several agents and, with--prices, cost. It never prints transcript text. Self-test:scripts/transcript-metrics.self-test.mjs.- Eval suite
evals/:spec-creatorstarts on a spec request,workflow-retroandfastify-best-practicesload on their requests,run-plannever starts on its own (it hasdisable-model-invocation), and an unrelated request starts no skill or agent of this plugin.
Changed
workflow-retrostep 1c uses the bundled script instead of adding up transcript usage by hand; prices are passed inline, so the skill still writes nothing before the user confirms.
sdd-engineering
Spec-driven development in Claude Code: write a spec, plan it, implement it task by task, verify every task against the spec, review the architecture, then learn from the run. You approve the spec and the plan; nothing is committed for you.
Install
/plugin marketplace add lindigo-design/devdigest-marketplace
/plugin install sdd-engineering@lindigo-devdigest
Installing it also installs and enables its three dependencies (see Dependencies).
How the plugins work together
graph LR
U["Your request"] --> R["researcher<br/>(research-tools)"]
R --> S["spec-creator"]
S -->|"you approve the spec"| P["implementation-planner"]
P -->|"you approve the plan"| RP["/run-plan"]
RP --> I["implementer<br/>(one task)"]
I --> V["plan-verifier"]
V -->|"fails: one retry"| I
V -->|"all tasks pass"| A["architecture-reviewer<br/>(architecture-review)"]
A --> RT["/workflow-retro"]
Subagents cannot start other subagents, so your main session does the orchestration: it passes research reports on, and run-plan (a skill that runs in the main session) dispatches each agent in turn.
| Step | Who | Writes | You do |
|---|---|---|---|
| 1. Research (optional) | research-tools:researcher |
nothing | ask a concrete question |
| 2. Spec | spec-creator |
specs/<feature-id>.md, Status: draft |
answer blocking questions, then set Status: approved |
| 3. Plan | implementation-planner |
plans/<feature-id>.md, Status: draft |
answer "how" questions, then set Status: approved |
| 4. Run | /sdd-engineering:run-plan → implementer → plan-verifier per task |
project code and tests; task statuses in the plan | watch; decide when a task is blocked |
| 5. Finish | architecture-review:architecture-reviewer on the full diff |
nothing | fix or accept blocking findings |
| 6. Retro | /sdd-engineering:workflow-retro |
retros/… only after you say yes |
pick action items |
specs/, plans/ and retros/ may sit anywhere in the repository (docs/specs/ works too).
How to use
| You type | You get |
|---|---|
@agent-research-tools:researcher How are invoices numbered today, and where? |
A research report with path:line evidence, to feed into the spec. |
@agent-sdd-engineering:spec-creator Customers need to download invoices as PDF. Research: <report> |
specs/invoice-pdf.md with a Spec ID, EARS acceptance criteria (AC-1 …), edge cases and open points; or up to three rounds of blocking questions first. |
@agent-sdd-engineering:implementation-planner specs/invoice-pdf.md |
plans/invoice-pdf.md: contracts first, ordered tasks with files, steps, verify commands discovered from your repository, file ownership, and a map from every acceptance criterion to its tasks. Refuses with CANNOT PLAN if the spec is not approved or has open points. |
/sdd-engineering:run-plan plans/invoice-pdf.md |
Task-by-task progress; per task the implementer's report and the verifier's verdict; at the end a traceability matrix (criterion → task → test) and the architecture verdict. Stops at the first task that fails twice and tells you what changed. |
/sdd-engineering:run-plan plans/invoice-pdf.md --task T3 |
Re-runs one task after you fixed something. |
/sdd-engineering:workflow-retro plans/invoice-pdf.md |
A retro of the run: agent sequence, tokens, cost, round-trips, failed steps, and at most five action items, each naming a file. Saved only if you confirm. |
run-plan refuses a plan whose status is not approved. Nothing in this plugin runs git commit or git push; you review the diff and commit yourself.
Components
| Type | Name | Purpose |
|---|---|---|
| agent | spec-creator |
Writes the spec: why, goals, non-goals, EARS acceptance criteria, edge cases, open points. |
| agent | implementation-planner |
Turns an approved spec into an ordered plan with verify commands and an AC → task map. |
| agent | implementer |
Implements exactly one plan task (backend or frontend), runs its verify commands, reports. |
| agent | plan-verifier |
Read-only: checks one task or the whole plan against the plan and the spec's criteria, with evidence. |
| skill | run-plan |
Runs an approved plan in the main session (you start it; Claude does not start it on its own). |
| skill | workflow-retro |
Retrospective of a finished run; its bundled script scripts/transcript-metrics.mjs measures tokens, cache, spans and cost from the transcripts. |
| skill | fastify-best-practices |
Fastify routes, plugins, validation, errors, performance (third-party, MIT). |
| hook | write-scope |
spec-creator writes only Markdown under specs/, implementation-planner only under plans/. |
| hook | bash-guard |
plan-verifier's Bash: read-only git only. |
Agents and skills are namespaced: @agent-sdd-engineering:<agent>, /sdd-engineering:<skill>.
The planner preloads engineering-paved-path:onion-architecture, engineering-paved-path:frontend-ui-architecture and fastify-best-practices; the implementer loads them when a task needs them.
Permissions
implementercanWrite,Edit, runBashand load skills; it is told to touch only the files its task owns and never to install packages or change git state. This is an instruction, not a hook: keep your normal permission prompts on.spec-creatorandimplementation-plannercan write, but thewrite-scopehook blocks anything outside their folder.plan-verifieris strictly read-only: noWrite/Edit, and thebash-guardhook allows only read-only git. It runs no tests, type checks or builds, since they execute project code; it lists every verify command underNOT CHECKEDandrun-planruns them in your session, under your normal permissions.- Hooks are session-wide. Both hooks run on every matching tool call once the plugin is enabled, read the caller's
agent_type, and do nothing unless it is one of the agents above. Your own edits and commands are not affected. - Hooks need
nodeonPATHand run from${CLAUDE_PLUGIN_ROOT}/hooks/. Self-tests:node hooks/self-test.mjsandnode hooks/write-scope.self-test.mjs. spec-creatormay useWebFetchfor design sources you give it.workflow-retroreads session transcripts and may fetch current model prices; it caches nothing.
Dependencies
| Plugin | Range | Why |
|---|---|---|
engineering-paved-path |
^1.0 |
architecture skills for the planner and implementer |
research-tools |
^1.0 |
researcher before the spec |
architecture-review |
^1.0 |
architecture-reviewer when the run finishes |
Prerequisites (optional)
Stack skills that this plugin does not ship yet. The agents work without them and follow your repository's own conventions; install them yourself if you want them:
- Next.js App Router practices: not bundled because its upstream has no licence file yet.
- React and React Testing Library practices: not bundled until their source and licence are confirmed.
Evals
evals/ checks behaviour, not only the manifest: a spec request starts spec-creator, a retro request loads workflow-retro, a Fastify question loads fastify-best-practices, run-plan never starts on its own, and an unrelated request starts nothing. The graders are deterministic (tool_used); the agent runs call the model, so a run is paid and CI does not run it.
claude plugin eval ./plugins/sdd-engineering --runs 1 --ablation none
Later
react-best-practices,next-best-practices,testingskills (as minor releases once licensed).test-writeranddoc-writeragents.- Evals for
implementation-planner,implementerandplan-verifier(they need a sample spec and plan to run against).
Licence
MIT, see LICENSE. Agents, run-plan, workflow-retro and the hooks are adapted from an MIT-licensed course project (© 2026 Ivan Lapa); fastify-best-practices is © 2026 Matteo Collina, MIT, see THIRD_PARTY_NOTICES.md. sources.json records the origin of each component.
See CHANGELOG.md and COMPATIBILITY.md.
Compatibility notes
- Claude Code
- ≥ 2.1.318 (declared minimum; verified on 2.1.318, the CI pin)
- OS
- Windows 10/11, macOS