spec
codewithmukesh/dotnet-claude-kit
Turn vague ideas into agreed, persisted specifications through relentless structured questioning.
What is spec?
A specification workflow that converts product ideas into written, versioned specs by systematically questioning across nine dimensions (problem, scope, domain, API, auth, edge cases, non-functionals, integrations, acceptance criteria). Use before planning any feature too large to describe in one sentence, ensuring explicit developer agreement before implementation begins.
- Captures raw ideas and restates them for confirmation before questioning begins
- Conducts structured questioning rounds across nine dimensions: problem & users, scope, domain & data, API contract, authorization, edge cases, non-functionals, integrations, and acceptance criteria
- Records all answers directly into a draft specification file (docs/specs/<NNN>-<slug>.md) with status lifecycle (Draft → In Review → Approved)
- Challenges contradictions on the spot and converts "I don't know" answers into explicit deferred decisions with chosen fallbacks
- Produces final specs with acceptance criteria (Given/When/Then format) that /plan, /tdd, and /scaffold consume
How to install spec
npx skills add https://github.com/codewithmukesh/dotnet-claude-kit --skill specHow to use spec
- 1.Invoke with /spec followed by your raw idea or feature description
- 2.Confirm Claude's restatement of the idea before questioning begins
- 3.Answer structured questions across nine dimensions in focused rounds (3–5 questions per round)
- 4.Review the draft spec file (docs/specs/<NNN>-<slug>.md) end-to-end when prompted
- 5.Approve the spec explicitly; approval requires reading the final document and confirming no open questions remain
- 6.Pass the approved spec to /plan, /tdd, or /scaffold for implementation
Use cases
- Defining a new product feature or module before implementation begins (e.g., 'I want to add team workspaces')
- Clarifying fuzzy requirements mid-implementation by stopping, re-speccing, and re-planning
- Writing acceptance criteria and user stories for complex features that span multiple endpoints or workflows
- Establishing explicit agreement between developer and Claude on scope, data model, and API contract before coding
- Creating a persisted specification document that survives the session and is referenced in commits and future work
- Product managers and developers planning non-trivial features
- Teams building new modules or products where requirements are vague or incomplete
- Developers mid-implementation who realize requirements are unclear and need to reset
- Anyone preparing a feature for /plan, /tdd, or /scaffold workflows
spec FAQ
Use /spec for any feature too big to describe in one sentence, new product ideas, or when requirements feel fuzzy. Skip it for bug fixes, refactors, and obvious single-endpoint CRUD operations.
'I don't know' is a legal answer. Claude moves it to Deferred Decisions with an explicit fallback you choose now (e.g., 'default to soft-delete until decided'). Silent deferral is forbidden.
No. Open questions must be empty before approval. Every gap must be resolved or explicitly deferred with a chosen fallback.
Stop, set the spec status back to In Review, fix it with the developer, then resume. Code never silently diverges from an approved spec.
/plan reads the approved spec and maps acceptance criteria to implementation steps; /tdd turns acceptance criteria into the first failing tests; /scaffold generates the code slices the plan calls for.
Full instructions (SKILL.md)
Source of truth, from codewithmukesh/dotnet-claude-kit.
name: spec description: > Turn a vague feature or product idea into an agreed, persisted specification through relentless structured questioning. Never assumes — every gap, ambiguity, or "probably" becomes a question to the developer, and the spec cannot be approved while open questions remain. Produces docs/specs/<NNN>-<slug>.md with acceptance criteria that /plan, /scaffold, and /tdd consume. Use when: "spec", "write a spec", "spec this out", "requirements", "PRD", "acceptance criteria", "define the feature", "user stories", "what should we build", or before planning any feature too big to describe in one sentence.
/spec — Relentless Specification Workflow
What
Converts an idea into a written, versioned specification that both the developer and Claude explicitly agree on — before any planning or code. The contract:
- Never assume. Every gap in the idea becomes a question. If Claude catches itself thinking "probably", "presumably", or "the usual way" — that thought is a question to ask, not a decision to make.
- Relentless, but structured. Questions come in focused rounds (3–5 at a time) across nine dimensions — not one overwhelming dump, and not a single polite round that stops early.
- Agreement is explicit. Specs have a status lifecycle: Draft → In Review → Approved. Implementation never starts from a Draft. Approval requires the developer to read the final document and say so.
- Specs are files, not chat. Output persists to
docs/specs/<NNN>-<slug>.mdand survives the session. Plans, tests, and commits reference it.
When
- Any feature too big to describe completely in one sentence
- New product or module ideas ("I want to add team workspaces")
- Before
/planfor non-trivial features — plan consumes the approved spec - When requirements feel fuzzy mid-implementation: stop,
/spec, re-plan - Trigger phrases: "spec", "requirements", "PRD", "define the feature", "acceptance criteria"
Skip for: bug fixes, refactors, single-endpoint CRUD where the entity is obvious.
How
Step 1: Capture and Restate
Take the raw idea and restate it in one paragraph: what Claude understood, in its own words. End with: "Is this the idea? What did I get wrong?" Do not begin questioning until the developer confirms the restatement — questioning the wrong idea wastes everyone's time.
Step 2: Questioning Rounds
Work through the nine dimensions in order. Each round: pick the 3–5 most load-bearing unanswered questions (answers that reshape later questions come first). Where the harness supports selectable options, present choices with trade-offs — and a recommendation — but the developer chooses; a recommendation is never silently applied.
| # | Dimension | What to pin down |
|---|---|---|
| 1 | Problem & users | Who hurts today, how they work around it, what success looks like |
| 2 | Scope | What is IN this iteration, what is explicitly OUT, where the MVP line sits |
| 3 | Domain & data | Entities, relationships, lifecycle (create→archive→delete?), retention |
| 4 | API contract | Resources, endpoints, request/response shapes, pagination, versioning |
| 5 | Authorization | Who can do what, role/claim model, tenant boundaries |
| 6 | Edge cases & failure modes | Concurrency, duplicates, idempotency, partial failure, limits |
| 7 | Non-functionals | Expected volume, latency budget, growth assumptions |
| 8 | Integrations | External services, published events, webhooks, side effects |
| 9 | Acceptance criteria | Testable Given/When/Then for every behavior in scope |
Rules of relentless questioning:
- Record every answer in the draft spec immediately — answers are requirements, not conversation.
- Challenge contradictions on the spot: "In round 1 you said X; this answer implies not-X. Which wins?"
- "I don't know" is a legal answer → moves to Deferred Decisions with an explicit fallback the developer chooses now ("default to soft-delete until decided"). Silent deferral is forbidden.
- A dimension is done when a follow-up round generates zero new questions for it.
- The questioning phase is done when ALL nine dimensions are done. Do not stop because the conversation feels long — stopping early is how assumptions sneak in.
Step 3: Draft the Spec File
Determine the next number from existing files in docs/specs/ (create the
directory if missing). Write docs/specs/<NNN>-<slug>.md:
# Spec NNN: <Title>
**Status:** Draft
**Date:** <today>
## Problem <!-- who hurts, why now -->
## Scope <!-- ### In / ### Out — both explicit -->
## Domain Model <!-- entities, relationships, lifecycle -->
## API Contract <!-- endpoints table: verb, route, request, response, errors -->
## Authorization <!-- who can do what -->
## Edge Cases & Failure Modes
## Non-Functional Requirements
## Integrations
## Acceptance Criteria <!-- Given/When/Then, numbered AC-1, AC-2, ... -->
## Deferred Decisions <!-- decision, chosen fallback, revisit trigger -->
## Open Questions <!-- MUST be empty before approval -->
Step 4: Review Loop
Set status to In Review. Present the complete spec and ask: "Read this end-to-end. What is wrong, missing, or over-engineered?" Fold corrections in and re-present. Repeat until the developer has no further changes. New answers may spawn new questions — that is the process working, not a failure to converge.
Step 5: The Agreement Gate
Approval is a deliberate act, never inferred from silence or "looks good" in
passing. Ask explicitly: "Do you approve this spec? After approval, code follows
the spec — changes go through the spec first." On approval, set
**Status:** Approved (<date>).
- Open Questions must be empty. If any remain, the spec cannot be approved — resolve or defer each one explicitly.
- If implementation later reveals a wrong assumption: stop, set status back to In Review, fix the spec with the developer, then resume. Code never silently diverges from an approved spec.
Step 6: Handoff
/planreads the approved spec and maps acceptance criteria to implementation steps/tddturns acceptance criteria into the first failing tests (AC-n → test name)- Commits for the feature reference the spec:
feat: team workspaces (spec 004)
Example
User: /spec users should be able to invite teammates
Claude: Here's what I understood: an existing user can invite another person
to join their... workspace? account? That's already my first gap.
Is this the idea? What did I get wrong?
User: yes, invite to their organization
Claude: Round 1 — Scope & Users:
1. Can invitees be people without an existing account, or only registered users?
2. Who can invite — any member, or only admins/owners?
3. Is there a limit on pending invites (per org, per plan)?
4. Out of scope check: bulk invites and SSO-provisioned members — both OUT for now?
User: 1: both. 2: admins only. 3: no limit. 4: correct, both out.
Claude: Round 2 — Edge cases (your "both" in Q1 raises these):
1. Inviting an email that already has a pending invite — error, or resend?
2. Invite expiry — 7 days, 30 days, never?
3. Invitee already belongs to another org — multi-org membership or rejection?
...
[…rounds continue until all nine dimensions are exhausted…]
Claude: Spec written to docs/specs/004-team-invitations.md (In Review).
Read it end-to-end. What is wrong, missing, or over-engineered?
User: looks right. approved.
Claude: Status: Approved (2026-06-12). Next: /plan to map AC-1..AC-9
to implementation steps.
Related
/plan— Consumes the approved spec; never plan a spec-worthy feature without one/tdd— Acceptance criteria become the first failing tests/scaffold— Generates the slices the plan calls forarchitecture-advisor— Load during Step 2 if the feature forces architectural decisions
Related skills
More from codewithmukesh/dotnet-claude-kit and the wider catalog.

tdd
Guided red-green-refactor test-driven development for .NET 10 with xUnit, WebApplicationFactory, and Testcontainers.

testing
xUnit v3, WebApplicationFactory, and Testcontainers testing patterns for .NET 10 applications.

verify
7-phase verification pipeline for .NET projects: build, diagnostics, antipatterns, tests, security, formatting, and diff review.

vertical-slice
Vertical Slice Architecture for .NET — organize features as self-contained slices, not layers.

workflow-mastery
Master Claude Code workflows for .NET: parallel sessions, plan mode, verification loops, and context optimization.

wrap-up
Capture session work, pending tasks, and learnings into a handoff file for continuity across sessions.