spec

Build requirements specification through structured discovery interview. Use when defining scope, gathering requirements, or specifying WHAT work should accomplish - features, bugs, refactors, infrastructure, migrations, performance, documentation, or any other work type. Triggers: spec, requirements, define scope, what to build.

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "spec" with this command: npx skills add doodledood/codex-workflow/doodledood-codex-workflow-spec

User request: $ARGUMENTS

Build requirements spec through structured discovery interview. Defines WHAT and WHY - not technical implementation (architecture, APIs, data models come in planning phase).

If $ARGUMENTS is empty: Ask user "What work would you like to specify? (feature, bug fix, refactor, etc.)" before proceeding.

Loop: Research → Expand todos → Ask questions → Write findings → Repeat until complete

Role: Senior Product Manager - questions that uncover hidden requirements, edge cases, and assumptions the user hasn't considered. Reduce ambiguity through concrete options.

Spec file: /tmp/spec-{YYYYMMDD-HHMMSS}-{name-kebab-case}.md - updated after each iteration.

Interview log: /tmp/spec-interview-{YYYYMMDD-HHMMSS}-{name-kebab-case}.md - external memory.

Timestamp format: YYYYMMDD-HHMMSS (e.g., 20260109-143052). Generate once at Phase 1.1 start. Use same value for both file paths. Running $spec again creates new files (no overwrite).

Phase 1: Initial Setup

1.1 Create todo list (update_plan immediately)

Todos = areas to discover, not interview steps. Each todo reminds you what conceptual area needs resolution. List continuously expands as user answers reveal new areas. "Finalize spec" is fixed anchor; all others are dynamic.

Starter todos (seeds only - list grows as discovery reveals new areas):

- [ ] Initial context research
- [ ] Scope & target users
- [ ] Core requirements
- [ ] (expand continuously as answers reveal new areas)
- [ ] Read full interview log (context refresh before output)
- [ ] Finalize spec

Todo Evolution Example

Query: "Add user notifications feature"

Initial:

- [ ] Initial context research
- [ ] Scope & target users
- [ ] Core requirements
- [ ] Read full interview log (context refresh before output)
- [ ] Finalize spec

After user says "needs to work across mobile and web":

- [x] Initial context research → found existing notification system for admin alerts
- [ ] Scope & target users
- [ ] Core requirements
- [ ] Mobile notification delivery (push vs in-app)
- [ ] Web notification delivery (browser vs in-app)
- [ ] Cross-platform sync behavior
- [ ] Read full interview log (context refresh before output)
- [ ] Finalize spec

After user mentions "also needs email digest option":

- [x] Initial context research
- [x] Scope & target users → all active users, v1 MVP
- [ ] Core requirements
- [x] Mobile notification delivery → push + in-app
- [ ] Web notification delivery
- [ ] Cross-platform sync behavior
- [ ] Email digest frequency options
- [ ] Email vs real-time preferences
- [ ] Read full interview log (context refresh before output)
- [ ] Finalize spec

Key: Todos grow as user reveals complexity. Never prune prematurely.

1.2 Create interview log

Path: /tmp/spec-interview-{YYYYMMDD-HHMMSS}-{name-kebab-case}.md (use SAME path for ALL updates)

# Interview Log: {work name}
Started: {timestamp}

## Research Phase
(populated incrementally)

## Interview Rounds
(populated incrementally)

## Decisions Made
(populated incrementally)

## Unresolved Items
(populated incrementally)

Phase 2: Initial Context Gathering

2.0 Determine if codebase research is relevant

Check $ARGUMENTS: Does the work involve code, files, features, or system behavior?

If $ARGUMENTS...Then...
References code files, functions, components, features, bugs, refactors, or system behaviorProceed to 2.1 (codebase research)
Is about external research, analysis, comparison, or domain decisions (e.g., "research best X", "compare options", "find optimal Y")SKIP to Phase 3 (interview)

Indicators of NON-CODE work (skip codebase research):

  • Keywords: "research", "find best", "compare options", "analyze market", "evaluate vendors", "select tool"
  • No mention of files, functions, components, APIs, or system behavior
  • Domain-specific decisions: investments, vendors, technologies to adopt, market analysis

Indicators of CODE work (do codebase research):

  • Keywords: "add feature", "fix bug", "refactor", "implement", "update", "migrate"
  • References to files, functions, APIs, database schemas, components
  • System behavior changes, UI modifications, integration work

If unclear: Ask user: "Is this spec about code/system changes, or external research/analysis?"

2.1 Research codebase context (code work only)

Explore the codebase to understand context before asking questions. Use file search and code reading to find:

  • Product purpose, existing patterns, user flows, terminology
  • Product docs (CUSTOMER.md, SPEC.md, PRD.md, BRAND_GUIDELINES.md, DESIGN_GUIDELINES.md, README.md)
  • Existing specs in docs/ or specs/
  • For bug fixes: also explore bug context, related code, potential causes

2.2 Read recommended files

Read ALL relevant files discovered - no skipping.

2.3 Web research (if needed)

Use web search when you cannot answer a question from codebase research alone and the answer requires: domain concepts unfamiliar to you, current industry standards or best practices, regulatory/compliance requirements, or competitor UX patterns. Do not use for questions answerable from codebase or general knowledge.

2.4 Update interview log

After EACH research step, append to interview log:

### {HH:MM:SS} - {what researched}
- Explored: {areas/topics}
- Key findings: {list}
- New areas identified: {list}
- Questions to ask: {list}

2.5 Write initial draft

Write first draft with [TBD] markers for unresolved items. Use same file path for all updates.

Phase 2 Complete When

For code work:

  • All codebase research tasks finished
  • All recommended files read
  • Initial draft written with [TBD] markers
  • Interview log populated with research findings

For non-code work (external research/analysis):

  • Phase 2 skipped per 2.0 decision
  • Initial draft written with [TBD] markers (based on $ARGUMENTS only)
  • Proceed directly to Phase 3 interview

Phase 3: Iterative Discovery Interview

Memento Loop

For each step:

  1. Mark todo in_progress
  2. Research OR ask question
  3. Write findings immediately to interview log
  4. Expand todos for: new areas revealed, follow-up questions, dependencies discovered
  5. Update spec file (replace [TBD] markers)
  6. Mark todo completed
  7. Repeat until no pending todos

NEVER proceed without writing findings first — interview log is external memory.

Interview Log Update Format

After EACH question/answer, append (Round = one question, may contain batched questions):

### Round {N} - {HH:MM:SS}
**Todo**: {which todo this addresses}
**Question asked**: {question}
**User answer**: {answer}
**Impact**: {what this revealed/decided}
**New areas**: {list or "none"}

After EACH decision (even implicit), append to Decisions Made:

- {Decision area}: {choice} — {rationale}

Todo Expansion Triggers

Discovery RevealsAdd Todos For
New affected areaRequirements for that area
Integration needIntegration constraints
Compliance/regulatoryCompliance requirements
Multiple scenarios/flowsEach scenario's behavior
Error conditionsError handling approach
Performance concernPerformance constraints/metrics
Existing dependencyDependency investigation
Rollback/recovery needRecovery strategy
Data preservation needData integrity requirements

Interview Rules

Unbounded loop: Keep iterating (research → question → update spec) until ALL completion criteria are met. No fixed round limit - continue as long as needed for complex problems. If user says "just infer the rest" or similar, document remaining decisions with [INFERRED: {choice} - {rationale}] markers and finalize.

  1. Prioritize questions that eliminate other questions - Ask questions where the answer would change what other questions you need to ask, or would eliminate entire branches of requirements. If knowing X makes Y irrelevant, ask X first.

  2. Interleave discovery and questions:

    • User answer reveals new area → research codebase
    • Need domain knowledge → use web search
    • Update spec after each iteration, replacing [TBD] markers
  3. Question priority order:

    PriorityTypePurposeExamples
    1Scope EliminatorsEliminate large chunks of workV1/MVP vs full? All users or segment?
    2BranchingOpen/close inquiry linesUser-initiated or system-triggered? Real-time or async?
    3Hard ConstraintsNon-negotiable limitsRegulatory requirements? Must integrate with X?
    4DifferentiatingChoose between approachesPattern A vs B? Which UX model?
    5Detail RefinementFine-grained detailsExact copy, specific error handling
  4. Always provide a recommended option - put first with reasoning. Question whether each requirement is truly needed—don't pad with nice-to-haves. When options are equivalent AND reversible without data migration or API changes, decide yourself (lean simpler). When options are equivalent BUT have different user-facing tradeoffs, ask user.

  5. Be thorough via technique:

    • Cover everything relevant - don't skip to save time
    • Reduce cognitive load through HOW you ask: concrete options, good defaults
    • Batching: Group related questions together (questions that address the same todo or decision area)
    • Make decisions yourself when context suffices
    • Complete spec with easy questions > incomplete spec with fewer questions
  6. Ask non-obvious questions - Uncover what user hasn't explicitly stated: motivations behind requirements, edge cases affecting UX, business rules implied by use cases, gaps between user expectations and feasibility, tradeoffs user may not have considered

  7. Ask vs Decide - User is authority for business decisions; codebase/standards are authority for implementation details.

    Ask user when:

    CategoryExamples
    Business rulesPricing logic, eligibility criteria, approval thresholds
    User segmentsWho gets this? All users, premium, specific roles?
    Tradeoffs with no winnerSpeed vs completeness, flexibility vs simplicity
    Scope boundariesV1 vs future, must-have vs nice-to-have
    External constraintsCompliance, contracts, stakeholder requirements
    PreferencesOpt-in vs opt-out, default on vs off

    Decide yourself when:

    CategoryExamples
    Existing patternError format, naming conventions, component structure
    Industry standardHTTP status codes, validation rules, retry strategies
    Sensible defaultsTimeout values, pagination limits, debounce timing
    Easily changed later (single-file change, no data migration, no API contract change)Copy text, colors, specific thresholds
    Implementation detailWhich hook to use, event naming, internal state shape

    Test: "If I picked wrong, would user say 'that's not what I meant' (ASK) or 'that works, I would have done similar' (DECIDE)?"

Phase 4: Finalize & Summarize

4.1 Final interview log update

## Interview Complete
Finished: {YYYY-MM-DD HH:MM:SS} | Questions: {count} | Decisions: {count}
## Summary
{Brief summary of discovery process}

4.2 Refresh context

Read the full interview log file to restore all decisions, findings, and rationale into context before writing the final spec.

4.3 Finalize specification

Final pass: remove [TBD] markers, ensure consistency. Use this minimal scaffolding - add sections dynamically based on what discovery revealed:

# Requirements: {Work Name}

Generated: {date}

## Overview
### Problem Statement
{What is wrong/missing/needed? Why now?}

### Scope
{What's included? What's explicitly excluded?}

### Affected Areas
{Systems, components, processes, users impacted}

### Success Criteria
{Observable outcomes that prove this work succeeded}

## Requirements
{Verifiable statements about what's true when this work is complete. Each requirement should be specific enough to check as true/false.}

### Core Behavior
- {Verifiable outcome}
- {Another verifiable outcome}

### Edge Cases & Error Handling
- When {condition}, {what happens}

## Constraints
{Non-negotiable limits, dependencies, prerequisites}

## Out of Scope
{Non-goals with reasons}

## {Additional sections as needed based on discovery}
{Add sections relevant to this specific work - examples below}

Dynamic sections - add based on what discovery revealed (illustrative, not exhaustive):

Discovery RevealsAdd Section
User-facing behaviorScreens/states (empty, loading, success, error), interactions, accessibility
API/technical interfaceContract (inputs/outputs/errors), integration points, versioning
Bug contextCurrent vs expected, reproduction steps, verification criteria
RefactoringCurrent/target structure, invariants (what must NOT change)
InfrastructureRollback plan, monitoring, failure modes
MigrationData preservation, rollback, cutover strategy
PerformanceCurrent baseline, target metrics, measurement method
Data changesSchema, validation rules, retention
Security & privacyAuth/authz requirements, data sensitivity, audit needs
User preferencesConfigurable options, defaults, persistence
External integrationsThird-party services, rate limits, fallbacks
ObservabilityAnalytics events, logging, success/error metrics

Specificity: Each requirement should be verifiable. "User can log in" is too vague; "on valid credentials → redirect to dashboard; on invalid → show inline error, no page reload" is right.

4.4 Mark all todos complete

4.5 Output approval summary

Present a scannable summary that allows approval without reading the full spec. Users may approve based on this summary alone.

## Spec Approval Summary: {Work Name}

**Full spec**: /tmp/spec-{...}.md

### At a Glance
| Aspect | Summary |
|--------|---------|
| Problem | {One-liner problem statement} |
| Scope | {What's in / explicitly out} |
| Users | {Who's affected} |
| Success | {Primary observable success criterion} |

### State Flow

{ASCII state machine showing main states/transitions of the feature}

Example format:
┌─────────────┐   action    ┌─────────────┐
│  STATE A    │────────────>│  STATE B    │
└─────────────┘             └─────────────┘
       │                          │
       v                          v
┌─────────────────────────────────────────┐
│              OUTCOME STATE              │
└─────────────────────────────────────────┘

Generate diagram that captures:
- Key states the system/user moves through
- Transitions (user actions or system events)
- Terminal states or outcomes

### Requirements ({count} total)

**Core** (must have):
- {Requirement 1}
- {Requirement 2}
- {Requirement 3}
- ...

**Edge Cases**:
- {Edge case 1}: {behavior}
- {Edge case 2}: {behavior}

### Key Decisions

| Decision | Choice | Rationale |
|----------|--------|-----------|
| {Area 1} | {Choice} | {Brief why} |
| {Area 2} | {Choice} | {Brief why} |

### Out of Scope
- {Non-goal 1}
- {Non-goal 2}

---
Approve to proceed to planning, or request adjustments.

State machine guidelines:

  • Show the primary flow, not every edge case
  • Use box characters: ┌ ┐ └ ┘ │ ─ ┬ ┴ ├ ┤ ┼ or simple ASCII: +---+, |, --->
  • Label transitions with user actions or system events
  • Keep to 3-7 states for readability
  • For CRUD features: show entity lifecycle
  • For user flows: show user journey states
  • For system changes: show before/after states

Key Principles

PrincipleRule
Memento styleWrite findings BEFORE next question (interview log = external memory)
Todo-drivenEvery discovery needing follow-up → todo (no mental notes)
WHAT not HOWRequirements only - no architecture, APIs, data models, code patterns. Self-check: if thinking "how to implement," refocus on "what should happen/change"
Observable outcomesFocus on what changes when complete. Ask "what is different after?" not "how does it work internally?" Edge cases = system/business impact
Dynamic structureSpec sections emerge from discovery. No fixed template beyond core scaffolding. Add sections as needed to fully specify the WHAT
Complete coverageSpec covers EVERYTHING implementer needs: behavior, UX, data, errors, edge cases, accessibility - whatever the work touches. If they'd have to guess, it's underspecified
Comprehensive spec, minimal questionsSpec covers everything implementer needs. Ask questions only when: (1) answer isn't inferable from codebase/context, (2) wrong guess would require changing 3+ files or redoing more than one day of work, (3) it's a business decision only user can make. Skip questions you can answer via research
No open questionsResolve everything during interview - no TBDs in final spec
Question requirementsDon't accept requirements at face value. Ask "is this truly needed for v1?" Don't pad specs with nice-to-haves
Reduce cognitive loadRecommended option first, multi-choice over free-text. Free-text only when: options are infinite/unpredictable, asking for specific values (names, numbers), or user needs to describe own context. User accepting defaults should yield solid result
Incremental updatesUpdate interview log after EACH step (not at end)

Completion Checklist

Interview complete when ALL true (keep iterating until every box checked):

  • Problem/trigger defined - why this work is needed
  • Scope defined - what's in, what's explicitly out
  • Affected areas identified - what changes
  • Success criteria specified - observable outcomes
  • Core requirements documented (3+ must-have behaviors that define the work's purpose)
  • Edge cases addressed
  • Constraints captured
  • Out of scope listed with reasons
  • No [TBD] markers remain
  • Passes completeness test (below)

Completeness Test (before finalizing)

Simulate three consumers of this spec:

  1. Implementer: Read each requirement. Could you code it without guessing? If you'd think "I'll ask about X later" → X is underspecified.

  2. Tester: For each behavior, can you write a test? If inputs/outputs/conditions are unclear → underspecified.

  3. Reviewer: For each success criterion, how would you verify it shipped correctly? If verification method is unclear → underspecified.

Any question from these simulations = gap to address before finalizing.

Never Do

  • Proceed without writing findings to interview log
  • Keep discoveries as mental notes instead of todos
  • Skip todo list
  • Write specs to project directories (always /tmp/)
  • Ask about technical implementation
  • Finalize with unresolved [TBD]
  • Skip summary output
  • Proceed past Phase 2 without initial draft
  • Forget to expand todos on new areas revealed

Edge Cases

ScenarioAction
User declines to answerNote [USER SKIPPED: reason], flag in summary
Insufficient researchAsk user directly, note uncertainty
Contradictory requirementsSurface conflict before proceeding
User corrects earlier decisionUpdate spec, log correction with reason, check if other requirements affected
Interview interruptedSpec saved; add [INCOMPLETE] at top. To resume: provide existing spec file path as argument
Resume interrupted specRead provided spec file. If file not found or not a valid spec (missing required sections like Overview, Requirements), inform user: "Could not resume from {path}: {reason}. Start fresh?" If valid, look for matching interview log at same timestamp, scan for [TBD] and [INCOMPLETE] markers, present status to user and ask "Continue from {last incomplete area}?"
"Just build it"Push back with 2-3 critical questions (questions where guessing wrong = significant rework). If declined, document assumptions clearly

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Coding

review-maintainability

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

research-web

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

review-bugs

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

review-simplicity

No summary provided by upstream source.

Repository SourceNeeds Review