Detailed engineering design templates and worked examples — the layer between
plan.mdandtasks.mdthat spec-kit doesn't ship.
engdesign-kit is a complement to github/spec-kit, not a replacement. spec-kit's /specify → /plan → /tasks flow handles user stories and high-level architecture well, but stops short of the contract-level detail a real subsystem needs before code review or production. This repo fills that gap.
| Layer | spec-kit | engdesign-kit |
|---|---|---|
| Governing principles | constitution.md |
— |
| User stories / acceptance | spec.md |
— |
| Tech stack / high-level architecture | plan.md |
— |
| Data model | data-model.md |
— |
| Interface signatures | contracts/ |
— |
| State machines | — | ✅ template + example |
| Error code contracts | — | ✅ template + example |
| Cross-cutting execution order + invariants (RBAC, audit, rate-limit) | — | ✅ template + example |
| Guardrails / trust labels / prompt-injection | — | ✅ template + example |
| Observability schema (span names, metric names, alert thresholds, audit JSON) | — | ✅ template + example |
| Alternatives considered (decisions rejected, with reasons) | — | ✅ template + example |
| Rollout / grayscale / rollback RTO | — | ✅ template + example |
| Risk register with owner + trigger condition | — | ✅ template + example |
Phased tasks with [P] parallel markers |
tasks.md |
— |
We position these as a single-file Google-style engineering design document (engineering-design.md) that sits between plan.md and tasks.md in the spec-kit flow. See INTEGRATION.md for the integrated pipeline.
- Decide if you need this layer. Most features don't. Run the needs-detailed-design checklist first.
- Copy the template. Start from
templates/engineering-design.md. - Read a worked example.
examples/llm-tool-dispatcher/is a battle-tested ~700-line design doc for an LLM agent tool dispatcher (state machine, error codes, RBAC, guardrails, observability, rollout — the works). - Wire it into spec-kit. Follow
playbooks/spec-kit-integration.md.
Skip detailed engineering design when:
- Pure CRUD or UI-only changes
- Single-file bug fixes
- One-shot scripts or POCs
- Features with no cross-cutting concerns (auth, rate-limit, audit, observability)
The decision checklist gives the full rule.
engdesign-kit/
├── README.md # this file
├── INTEGRATION.md # how to wire into spec-kit (Mode B)
├── LICENSE # Apache 2.0
├── CONTRIBUTING.md
├── CODE_OF_CONDUCT.md
├── CHANGELOG.md
│
├── templates/
│ └── engineering-design.md # single-file template, ~14 sections
│
├── examples/
│ └── llm-tool-dispatcher/ # worked example: LLM tool dispatcher
│ ├── README.md
│ └── design.md
│
├── checklists/
│ └── needs-detailed-design.md # decision tree: do we need this layer?
│
├── playbooks/
│ └── spec-kit-integration.md # Mode B: design.md between plan and tasks
│
└── docs/
└── why.md # the 14 categories of non-functional concerns
that spec-kit leaves to the implementor
- v0.1 (current): single-file template + one worked example + spec-kit integration playbook
- v0.2: component-level templates (state-machine.md, observability.md, etc.) for users who prefer multi-file
- v0.3: 2–3 more worked examples in different domains (REST CRUD with auth, async job pipeline)
- v0.4: AI-agent prompts for drafting individual sections from
spec.md+plan.md
See CHANGELOG.md.
We welcome PRs that add templates, refine checklists, or contribute new worked examples. See CONTRIBUTING.md. The bar for new templates is: does it solve a non-functional concern that spec-kit has no standard home for? If yes, propose via an issue first.
Apache 2.0 — same as spec-kit, to make integration friction-free.