-
Notifications
You must be signed in to change notification settings - Fork 2
Commands
Both tools expose the same eight /sdd-* commands, because both execute the same body file
under .claude/commands/. Claude Code runs those files directly; GitHub Copilot reaches them
through a one-line loader in .github/prompts/.
| Command | Purpose |
|---|---|
/sdd-overview |
Workflow overview, current spec status, command list |
/sdd-setup |
Onboarding wizard: DocLanguage, Memory Bank, first architecture snapshot |
/sdd-specify |
Adaptive product-owner interview → lean spec with testable acceptance criteria |
/sdd-plan |
Spec → persisted baby-step plan file (research, resume, impact analysis) |
/sdd-compile |
Readiness check: tests, acceptance criteria, docs sync |
/sdd-architecture-update |
Detect drift, update snapshot + Memory Bank (confirmation gate) |
/sdd-lifecycle |
Spec status and moves between backlog/, active/, done/
|
/sdd-style-update |
Capture coding style preferences into AGENTS.md
|
Recommended flow: /sdd-specify → /sdd-plan → implement → /sdd-compile →
/sdd-lifecycle. Run /sdd-architecture-update whenever the structure changes.
It keeps the commands from shadowing Claude Code's built-in commands and groups them into one
autocomplete namespace: type /sdd and you see the whole workflow set.
Every body carries disable-model-invocation: true. A Claude Code command is otherwise
model-invocable, and these are workflows with side effects — they create files, move files and
delete files — so they run only when you invoke them. Copilot prompt files are user-invoked by
design, so the loaders need no equivalent flag.
Both tools append whatever you typed after the command to the invocation, so this works everywhere:
/sdd-plan .specs/active/0007-user-login.md
The bodies deliberately do not use $ARGUMENTS, $0/$1 or !`shell` injection —
Copilot supports none of them. Instead each body says something like "the user may name a spec
path after the command; if none is given, list the candidates and ask." See
Design Decisions.
Argument hint: (none)
Your "where am I" command. It greets you as the repository's SDD assistant and reports the current state:
- the
DocLanguagevalue fromAGENTS.md - which specs sit in
.specs/backlog/,.specs/active/and.specs/done/ - whether the working tree is clean (
git status --short)
If DocLanguage is still the default and the Memory Bank looks unseeded, it suggests
/sdd-setup. It then prints the operating protocol and the command list.
Run it at the start of a session, or whenever you have lost the thread.
Argument hint: [docLanguage] [projectName] [stack] — or just answer the wizard
One-time onboarding. On first invocation it gives a short introduction to Spec-Driven Development, then runs the wizard.
Step 0 is always the same question: "In which language should the project documentation
Markdown files be written?" If you do not answer, it infers the language from the conversation.
The answer is written to DocLanguage in AGENTS.md — the only place it lives.
Then, in order: project name and one-liner · primary users · tech stack · architecture style · repo entrypoints · quality gates · coding preferences.
What it writes:
-
.memory-bank/projectbrief.md— mission and success criteria -
.memory-bank/techContext.md— stack, build/run/test -
.memory-bank/activeContext.md— the compact dashboard structure (see Memory Bank) -
.memory-bank/systemPatterns.md— initial patterns and decisions - the
architecture:snapshot inAGENTS.md, inferred from the real folder layout -
Style & Output Preferences in
AGENTS.md, from what you stated
Anything it had to assume is written down and confirmed with you.
Argument hint: [idea or title] [area/module]
An adaptive interview, not a form. The assistant acts as product owner, requirements engineer and architect, and asks only the questions your particular idea actually needs.
The interview rules are non-negotiable:
- exactly one question per message — never a batch, never a checklist
- always shows progress:
Question 3 of 9 — Data - never asks what the conversation,
.specs/or the Memory Bank already answers - one short confirmation per answer, then the next question
- thin answers are accepted; gaps become assumptions or open points, never invented facts
- what you said is the scope — everything else goes to Out of Scope
Before asking anything it reads the ground it already stands on: existing spec filenames
(for the next number and to avoid duplicates), .memory-bank/techContext.md,
systemPatterns.md, and the architecture: snapshot. Stack and boundaries are known, so it
does not ask for them.
Question budget scales with complexity:
| Complexity | Questions |
|---|---|
| Small change | 5–7 |
| Normal feature | 8–12 |
| Complex feature | 12–16 |
| Critical enterprise / compliance / AI feature | 14–20 |
Additional blocks are triggered by what is in the idea — screens and forms pull in UI/UX and error states; login and personal data pull in security and privacy; payment, law or medicine pull in compliance and auditability; LLMs and agents pull in guardrails and human-in-the-loop.
Output: .specs/backlog/NNNN-slug.md, always in backlog/, with **Status:** Draft under
the H1 and acceptance criteria in the form
AC-001: Given <start>, when <action>, then <expected>.
Say "done", "that's enough" or "write the spec" at any point and it stops asking and writes with what it has. Full document structure: Specs and Plans.
Argument hint: [path to spec or plan]
Planning produces a file, not a chat answer. A plan that lives only in the chat is gone when the session ends.
It picks one of three modes automatically:
| Situation | Mode |
|---|---|
| The spec has no plan file yet | A — plan from scratch |
| A plan exists and work is unfinished | B — resume |
| A plan exists but the spec changed | C — re-plan the delta |
Mode A reads the spec, AGENTS.md and the Memory Bank; surveys the code the spec actually
touches (entrypoints, modules, the existing test setup); researches anything it would otherwise
guess; decomposes the work into baby steps; writes the plan file — then stops. Planning does
not change code.
Research is mandatory, not optional. Whenever the spec involves a library, framework or API
that cannot be verified from the repo, version-specific behaviour, a protocol or regulation, or
a pattern where the model's knowledge may be stale, it uses its web search or fetch capability
and records every source under ## Research with a link and a retrieval date. No link, no
claim. If no web access is available it says so plainly and marks the affected steps as
assumptions.
Baby steps have a fixed shape: one concern each, small enough to read in one diff, ordered
so the repo keeps working after every step, tied to the acceptance criteria they serve — and
every one carries a Verify: line. If a step has no verifiable outcome, it is too big and gets
split.
Mode B reads the plan first, checks Current step and Session handoff against
git status --short and the real code, and reports in three lines: what is done, what is next,
what blocks it. After each finished step it updates the plan in the same change set as the
code — tick the box, fill Notes, write real paths into the traceability table, move
Current step.
Mode C is the impact analysis. It reads the traceability table in reverse: for every changed acceptance criterion it lists the steps and the code paths already built from it, and reports that before editing anything. New steps are appended, existing IDs are never renumbered (they are references), obsolete steps are struck with a one-line reason rather than deleted.
Argument hint: [path-to-spec.md] [runTests:true|false]
The readiness brief. It gathers git status --short and git log --oneline -10, reads the spec,
its .plan.md sibling and AGENTS.md, then reports:
- Current goal — from the spec
-
Constraints — from
AGENTS.mdand the spec - Architecture snapshot highlights — the relevant parts
- Acceptance criteria — each one marked satisfied or pending, with evidence
-
Plan state — open vs. finished steps, whether the traceability table names real code
paths, any criterion no step covers, any step whose
Verify:was never run - Do / Don't — including your Style & Output Preferences
- Docs sync — is the Memory Bank current, do spec and plan statuses match reality
- Next 3 steps — concrete and actionable
Tests run as part of it when the project has a test command.
Argument hint: [focus: module|folder|area] (optional)
Reconciles the architecture: snapshot in AGENTS.md with the repository as it actually is.
It inspects the real directory tree (top two levels), compares it with the snapshot, and identifies what matters architecturally: new, moved or removed top-level folders; new entrypoints, apps, services, packages or modules; changed boundaries or shared components.
Then it presents a delta report — what changed, why it matters, what it proposes to update.
There is a confirmation gate. Before writing anything it asks "Is this the change you
expected?" and "Anything else I should include?". Only after you confirm does it update the
snapshot, .memory-bank/systemPatterns.md and .memory-bank/activeContext.md.
Obvious drift (a brand-new top-level folder) is picked up automatically by the constitution's drift rule during normal work. This command is for the cases that need interpretation.
Argument hint: [spec path] [newStatus: Draft|In Progress|Implemented|Deprecated]
Moves specs between backlog/, active/ and done/ and keeps their status honest.
The safety rules it enforces:
- No duplicates. A spec exists in exactly one lifecycle folder. Moving means writing to the destination and deleting the original.
- Duplicate check first. Before moving, all three folders are scanned for the same filename. Copies in less-advanced folders are deleted (done > active > backlog).
-
Plans travel with their spec. If
NNNN-slug.plan.mdsits next toNNNN-slug.md, both move and de-duplicate together. A plan must never end up in a different folder than its spec. -
Separate status vocabularies. A spec uses
Draft | In Progress | Implemented | Deprecated; a plan usesNot started | In Progress | Blocked | Done. One never overwrites the other. -
Before
done/: the plan is checked too — every step ticked, the traceability table filled with real code paths. If steps are still open, it says so and lets you decide.
It always updates .memory-bank/activeContext.md when a spec becomes active or is completed:
## Active Spec is set or cleared, Current phase and ## Next are refreshed.
These rules are deliberately restated inside the command body — see Design Decisions.
Argument hint: [preference] (or list several)
Captures coding-style preferences into the Style & Output Preferences section of AGENTS.md
— the only place they live. It normalises each preference into a short bullet, groups it by
category (Comments, Naming, Formatting, Framework Conventions, Testing, …), applies it
immediately, and shows you the updated bullets.
/sdd-style-update no comments in generated code, prefer file-scoped namespaces, avoid LINQ in hot paths
You rarely need to run this explicitly: the constitution already instructs the assistant to capture any style preference you state in passing — "no comments", "rewrite this without LINQ", "use expression-bodied members" — and append it here on its own. Use the command when you want to state several at once, or reorganise what is already there.
Start here
Reference
Design & interop
- Interop Matrix
- Design Decisions
- Specify Method
- Committing to One Tool
- Migrating from the predecessor
- Releasing
Help