Simple SDD
Spec Driven Development

Write the spec before the code.

A tool-agnostic workflow that turns your AI assistant into a disciplined collaborator. Answer a few focused questions, generate a project constitution, then ship features one task at a time — each in a fresh session, each committed on its own.

Claude Code GitHub Copilot OpenCode any AI env
§ 01  /  WHY

Five small disciplines that make any AI pairing work better.

01

Clarity before code

Writing a spec forces you to articulate what you're building and why — ambiguity surfaces while it's still cheap.

02

Shared context, in the repo

Specs live next to the code. Any collaborator — human or AI — can pick up exactly where the last one stopped.

03

Feature-by-feature discipline

Every feature gets its own directory: requirements, task plan, validation. You always know what "done" looks like.

04

New and existing projects

Green fields scaffold from a blank slate. Existing codebases get analyzed and pre-filled — you only correct.

+ FIFTH RULE
Fresh context, better results.  Every command ends with a prompt to run /clear — so each task starts with a focused session and context never bleeds across work.
§ 02  /  LIFECYCLE

Eight slash commands. One opinionated loop.

01
/simple-sdd-setup
once per project
02
/simple-sdd-feature-new
once per feature
03
/simple-sdd-feature-implement
repeat per task
04
/simple-sdd-feature-update
when reqs change
05
/simple-sdd-feature-status
any time
06
/simple-sdd-feature-complete
all boxes ticked
07
/simple-sdd-constitution-sync
after shipping
08
/simple-sdd-help
reference

A commit after every task.
A clear head before the next.

Setup writes a constitution — mission and tech stack — that every future command reads first. Each new feature gets its own branch and its own specs/YYYY-MM-DD-name/ directory with three files: requirements, plan, validation.

The implement command does one task group at a time, ticks its checkboxes, commits with a structured message, and stops. You /clear, then run it again.

Resuming after a break? It reconstructs context from git log and git diff before picking up the first unchecked task.
§ 03  /  ARTIFACTS

Everything it writes is plain, readable markdown.

On disk, after one feature
specs/
  mission.md   # product, problem, success
  tech-stack.md # langs, infra, constraints
  2026-04-16-user-authentication/
    requirements.md # scope, context
    plan.md       # task groups ☑
    validation.md   # acceptance, DoD
  completed/
    2026-04-10-previous-feature/
      ...

Three living documents.

requirements.md defines scope — what's in, what's out, and the constraints that shaped the decision. plan.md is a numbered set of task groups with checkboxes and mandatory test steps. validation.md holds acceptance criteria and manual checks you tick before closing.

Updates mid-flight are marked: added tasks, ⚠️ blockers. Nothing gets silently rewritten.

Claude Code
commands.claude/commands/
templates.claude/templates/
config.claude/CLAUDE.md
GitHub Copilot
commands.github/prompts/
templates.github/prompts/
configcopilot-instructions.md
OpenCode
commands.opencode/commands/
templates.opencode/templates/
configRULES.md
§ 04  /  INSTALL

One script. Auto-detects your tool. Idempotent.

Run once, from the root of your project.

Re-run with a --tool flag to switch or update. Commands are overwritten with the latest; config injection only happens once.

# default — auto-detect
curl -sSL https://github.com/hackmajoris/simple-sdd/releases/latest/download/install.sh | bash
# pin a tool explicitly
curl -sSL …/install.sh | bash -s -- --tool claude | copilot | opencode