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.
Five small disciplines that make any AI pairing work better.
Clarity before code
Writing a spec forces you to articulate what you're building and why — ambiguity surfaces while it's still cheap.
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.
Feature-by-feature discipline
Every feature gets its own directory: requirements, task plan, validation. You always know what "done" looks like.
New and existing projects
Green fields scaffold from a blank slate. Existing codebases get analyzed and pre-filled — you only correct.
Eight slash commands. One opinionated loop.
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.
Everything it writes is plain, readable markdown.
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.
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.
curl -sSL https://github.com/hackmajoris/simple-sdd/releases/latest/download/install.sh | bash
curl -sSL …/install.sh | bash -s -- --tool claude | copilot | opencode