description: Generate task list from plan and spec
handoffs:
- label: Analyze For Consistency
agent: speckit.analyze
prompt: Run a project analysis for consistency
send: true
- label: Implement Project
agent: speckit.implement
prompt: Start the implementation in phases
send: true
scripts:
sh: scripts/bash/check-prerequisites.sh --json
ps: scripts/powershell/check-prerequisites.ps1 -Json
User Input
$ARGUMENTS
You MUST consider the user input before proceeding (if not empty).
Pre-Execution Checks
Check for extension hooks (before tasks generation):
- Check if
.specify/extensions.yml exists in the project root.
- If it exists, read it and look for entries under the
hooks.before_tasks key
- If the YAML cannot be parsed or is invalid, skip hook checking silently and continue normally
- Filter to only hooks where
enabled: true
- For each remaining hook, do not attempt to interpret or evaluate hook
condition expressions:
- If the hook has no
condition field, or it is null/empty, treat the hook as executable
- If the hook defines a non-empty
condition, skip the hook and leave condition evaluation to the HookExecutor implementation
- For each executable hook, output the following based on its
optional flag:
- Optional hook (
optional: true):## Extension Hooks
**Optional Pre-Hook**: {extension}
Command: `/{command}`
Description: {description}
Prompt: {prompt}
To execute: `/{command}`
- Mandatory hook (
optional: false):## Extension Hooks
**Automatic Pre-Hook**: {extension}
Executing: `/{command}`
EXECUTE_COMMAND: {command}
Wait for the result of the hook command before proceeding to the Outline.
- If no hooks are registered or
.specify/extensions.yml does not exist, skip silently
Outline
Setup: Run {SCRIPT} from repo root and parse FEATURE_DIR and AVAILABLE_DOCS list. All paths must be absolute. For single quotes in args like "I'm Groot", use escape syntax: e.g 'I'''m Groot' (or double-quote if possible: "I'm Groot").
Load design documents: Read from FEATURE_DIR:
- Required: plan.md (tech stack, libraries, structure), spec.md (user stories with priorities)
- Optional: data-model.md (entities), contracts/ (interface contracts), research.md (decisions), quickstart.md (test scenarios)
- Note: Not all projects have all documents. Generate tasks based on what's available.
Check for existing tasks.md (merge-aware): Read FEATURE_DIR/tasks.md if it exists.
- If the file exists, is non-empty, and contains completed tasks (lines matching
- [x]):
- MERGE MODE: Preserve all completed tasks verbatim.
- Keep completed phases at the top under a
# Part A: Completed heading.
- Generate new/updated tasks under a
# Part B: New / Updated heading.
- Where a new task overlaps with a completed task, mark it
[x] with a cross-reference note.
- Use distinct ID prefixes to avoid collisions (e.g.,
T-Annn for preserved, Tnnn for new).
- If the file exists but has NO completed tasks (all
- [ ] or only template sample content):
- REGENERATE MODE: Safe to replace. Proceed normally.
- If the file does not exist or is empty:
- CREATE MODE: Generate from scratch. Proceed normally.
Execute task generation workflow:
- Load plan.md and extract tech stack, libraries, project structure
- Load spec.md and extract user stories with their priorities (P1, P2, P3, etc.)
- If data-model.md exists: Extract entities and map to user stories
- If contracts/ exists: Map interface contracts to user stories
- If research.md exists: Extract decisions for setup tasks
- Generate tasks organized by user story (see Task Generation Rules below)
- Generate dependency graph showing user story completion order
- Create parallel execution examples per user story
- Validate task completeness (each user story has all needed tasks, independently testable)
Generate tasks.md: Use templates/tasks-template.md as structure, fill with:
- Correct feature name from plan.md
- Phase 1: Setup tasks (project initialization)
- Phase 2: Foundational tasks (blocking prerequisites for all user stories)
- Phase 3+: One phase per user story (in priority order from spec.md)
- Each phase includes: story goal, independent test criteria, tests (if requested), implementation tasks
- Final Phase: Polish & cross-cutting concerns
- All tasks must follow the strict checklist format (see Task Generation Rules below)
- Clear file paths for each task
- Dependencies section showing story completion order
- Parallel execution examples per story
- Implementation strategy section (MVP first, incremental delivery)
Report: Output path to generated tasks.md and summary:
- Total task count
- Task count per user story
- Parallel opportunities identified
- Independent test criteria for each story
- Suggested MVP scope (typically just User Story 1)
- Format validation: Confirm ALL tasks follow the checklist format (checkbox, ID, labels, file paths)
Check for extension hooks: After tasks.md is generated, check if .specify/extensions.yml exists in the project root.
- If it exists, read it and look for entries under the
hooks.after_tasks key
- If the YAML cannot be parsed or is invalid, skip hook checking silently and continue normally
- Filter to only hooks where
enabled: true
- For each remaining hook, do not attempt to interpret or evaluate hook
condition expressions:
- If the hook has no
condition field, or it is null/empty, treat the hook as executable
- If the hook defines a non-empty
condition, skip the hook and leave condition evaluation to the HookExecutor implementation
- For each executable hook, output the following based on its
optional flag:
- Optional hook (
optional: true):## Extension Hooks
**Optional Hook**: {extension}
Command: `/{command}`
Description: {description}
Prompt: {prompt}
To execute: `/{command}`
- Mandatory hook (
optional: false):## Extension Hooks
**Automatic Hook**: {extension}
Executing: `/{command}`
EXECUTE_COMMAND: {command}
- If no hooks are registered or
.specify/extensions.yml does not exist, skip silently
Context for task generation: {ARGS}
The tasks.md should be immediately executable - each task must be specific enough that an LLM can complete it without additional context.
Task Generation Rules
CRITICAL: Tasks MUST be organized by user story to enable independent implementation and testing.
Tests are OPTIONAL: Only generate test tasks if explicitly requested in the feature specification or if user requests TDD approach.
Checklist Format (REQUIRED)
Every task MUST strictly follow this format:
- [ ] [TaskID] [P?] [Story?] Description with file path
Format Components:
- Checkbox: ALWAYS start with
- [ ] (markdown checkbox)
- Task ID: Sequential number (T001, T002, T003...) in execution order
- [P] marker: Include ONLY if task is parallelizable (different files, no dependencies on incomplete tasks)
- [Story] label: REQUIRED for user story phase tasks only
- Format: [US1], [US2], [US3], etc. (maps to user stories from spec.md)
- Setup phase: NO story label
- Foundational phase: NO story label
- User Story phases: MUST have story label
- Polish phase: NO story label
- Description: Clear action with exact file path
Examples:
- ✅ CORRECT:
- [ ] T001 Create project structure per implementation plan
- ✅ CORRECT:
- [ ] T005 [P] Implement authentication middleware in src/middleware/auth.py
- ✅ CORRECT:
- [ ] T012 [P] [US1] Create User model in src/models/user.py
- ✅ CORRECT:
- [ ] T014 [US1] Implement UserService in src/services/user_service.py
- ❌ WRONG:
- [ ] Create User model (missing ID and Story label)
- ❌ WRONG:
T001 [US1] Create model (missing checkbox)
- ❌ WRONG:
- [ ] [US1] Create User model (missing Task ID)
- ❌ WRONG:
- [ ] T001 [US1] Create model (missing file path)
Task Organization
From User Stories (spec.md) - PRIMARY ORGANIZATION:
- Each user story (P1, P2, P3...) gets its own phase
- Map all related components to their story:
- Models needed for that story
- Services needed for that story
- Interfaces/UI needed for that story
- If tests requested: Tests specific to that story
- Mark story dependencies (most stories should be independent)
From Contracts:
- Map each interface contract → to the user story it serves
- If tests requested: Each interface contract → contract test task [P] before implementation in that story's phase
From Data Model:
- Map each entity to the user story(ies) that need it
- If entity serves multiple stories: Put in earliest story or Setup phase
- Relationships → service layer tasks in appropriate story phase
From Setup/Infrastructure:
- Shared infrastructure → Setup phase (Phase 1)
- Foundational/blocking tasks → Foundational phase (Phase 2)
- Story-specific setup → within that story's phase
Phase Structure
- Phase 1: Setup (project initialization)
- Phase 2: Foundational (blocking prerequisites - MUST complete before user stories)
- Phase 3+: User Stories in priority order (P1, P2, P3...)
- Within each story: Tests (if requested) → Models → Services → Endpoints → Integration
- Each phase should be a complete, independently testable increment
- Final Phase: Polish & Cross-Cutting Concerns
1---2name: speckit-tasks3description: <!-- Generate task list from plan and spec -->4---5<!-- Generate task list from plan and spec -->6<!-- AUTO-GENERATED — DO NOT EDIT -->7<!-- Source: .specify/templates/commands/tasks.md -->8<!-- Regenerate: make generate-agent-files -->910---11description: Generate task list from plan and spec12handoffs: 13 - label: Analyze For Consistency14 agent: speckit.analyze15 prompt: Run a project analysis for consistency16 send: true17 - label: Implement Project18 agent: speckit.implement19 prompt: Start the implementation in phases20 send: true21scripts:22 sh: scripts/bash/check-prerequisites.sh --json23 ps: scripts/powershell/check-prerequisites.ps1 -Json24---2526## User Input2728```text29$ARGUMENTS30```3132You **MUST** consider the user input before proceeding (if not empty).3334## Pre-Execution Checks3536**Check for extension hooks (before tasks generation)**:37- Check if `.specify/extensions.yml` exists in the project root.38- If it exists, read it and look for entries under the `hooks.before_tasks` key39- If the YAML cannot be parsed or is invalid, skip hook checking silently and continue normally40- Filter to only hooks where `enabled: true`41- For each remaining hook, do **not** attempt to interpret or evaluate hook `condition` expressions:42 - If the hook has no `condition` field, or it is null/empty, treat the hook as executable43 - If the hook defines a non-empty `condition`, skip the hook and leave condition evaluation to the HookExecutor implementation44- For each executable hook, output the following based on its `optional` flag:45 - **Optional hook** (`optional: true`):46 ```47 ## Extension Hooks4849 **Optional Pre-Hook**: {extension}50 Command: `/{command}`51 Description: {description}5253 Prompt: {prompt}54 To execute: `/{command}`55 ```56 - **Mandatory hook** (`optional: false`):57 ```58 ## Extension Hooks5960 **Automatic Pre-Hook**: {extension}61 Executing: `/{command}`62 EXECUTE_COMMAND: {command}63 64 Wait for the result of the hook command before proceeding to the Outline.65 ```66- If no hooks are registered or `.specify/extensions.yml` does not exist, skip silently6768## Outline69701. **Setup**: Run `{SCRIPT}` from repo root and parse FEATURE_DIR and AVAILABLE_DOCS list. All paths must be absolute. For single quotes in args like "I'm Groot", use escape syntax: e.g 'I'''m Groot' (or double-quote if possible: "I'm Groot").71722. **Load design documents**: Read from FEATURE_DIR:73 - **Required**: plan.md (tech stack, libraries, structure), spec.md (user stories with priorities)74 - **Optional**: data-model.md (entities), contracts/ (interface contracts), research.md (decisions), quickstart.md (test scenarios)75 - Note: Not all projects have all documents. Generate tasks based on what's available.76773. **Check for existing tasks.md** (merge-aware): Read `FEATURE_DIR/tasks.md` if it exists.78 - If the file exists, is non-empty, and contains completed tasks (lines matching `- [x]`):79 - **MERGE MODE**: Preserve all completed tasks verbatim.80 - Keep completed phases at the top under a `# Part A: Completed` heading.81 - Generate new/updated tasks under a `# Part B: New / Updated` heading.82 - Where a new task overlaps with a completed task, mark it `[x]` with a cross-reference note.83 - Use distinct ID prefixes to avoid collisions (e.g., `T-Annn` for preserved, `Tnnn` for new).84 - If the file exists but has NO completed tasks (all `- [ ]` or only template sample content):85 - **REGENERATE MODE**: Safe to replace. Proceed normally.86 - If the file does not exist or is empty:87 - **CREATE MODE**: Generate from scratch. Proceed normally.88894. **Execute task generation workflow**:90 - Load plan.md and extract tech stack, libraries, project structure91 - Load spec.md and extract user stories with their priorities (P1, P2, P3, etc.)92 - If data-model.md exists: Extract entities and map to user stories93 - If contracts/ exists: Map interface contracts to user stories94 - If research.md exists: Extract decisions for setup tasks95 - Generate tasks organized by user story (see Task Generation Rules below)96 - Generate dependency graph showing user story completion order97 - Create parallel execution examples per user story98 - Validate task completeness (each user story has all needed tasks, independently testable)991005. **Generate tasks.md**: Use `templates/tasks-template.md` as structure, fill with:101 - Correct feature name from plan.md102 - Phase 1: Setup tasks (project initialization)103 - Phase 2: Foundational tasks (blocking prerequisites for all user stories)104 - Phase 3+: One phase per user story (in priority order from spec.md)105 - Each phase includes: story goal, independent test criteria, tests (if requested), implementation tasks106 - Final Phase: Polish & cross-cutting concerns107 - All tasks must follow the strict checklist format (see Task Generation Rules below)108 - Clear file paths for each task109 - Dependencies section showing story completion order110 - Parallel execution examples per story111 - Implementation strategy section (MVP first, incremental delivery)1121136. **Report**: Output path to generated tasks.md and summary:114 - Total task count115 - Task count per user story116 - Parallel opportunities identified117 - Independent test criteria for each story118 - Suggested MVP scope (typically just User Story 1)119 - Format validation: Confirm ALL tasks follow the checklist format (checkbox, ID, labels, file paths)1201217. **Check for extension hooks**: After tasks.md is generated, check if `.specify/extensions.yml` exists in the project root.122 - If it exists, read it and look for entries under the `hooks.after_tasks` key123 - If the YAML cannot be parsed or is invalid, skip hook checking silently and continue normally124 - Filter to only hooks where `enabled: true`125 - For each remaining hook, do **not** attempt to interpret or evaluate hook `condition` expressions:126 - If the hook has no `condition` field, or it is null/empty, treat the hook as executable127 - If the hook defines a non-empty `condition`, skip the hook and leave condition evaluation to the HookExecutor implementation128 - For each executable hook, output the following based on its `optional` flag:129 - **Optional hook** (`optional: true`):130 ```131 ## Extension Hooks132133 **Optional Hook**: {extension}134 Command: `/{command}`135 Description: {description}136137 Prompt: {prompt}138 To execute: `/{command}`139 ```140 - **Mandatory hook** (`optional: false`):141 ```142 ## Extension Hooks143144 **Automatic Hook**: {extension}145 Executing: `/{command}`146 EXECUTE_COMMAND: {command}147 ```148 - If no hooks are registered or `.specify/extensions.yml` does not exist, skip silently149150Context for task generation: {ARGS}151152The tasks.md should be immediately executable - each task must be specific enough that an LLM can complete it without additional context.153154## Task Generation Rules155156**CRITICAL**: Tasks MUST be organized by user story to enable independent implementation and testing.157158**Tests are OPTIONAL**: Only generate test tasks if explicitly requested in the feature specification or if user requests TDD approach.159160### Checklist Format (REQUIRED)161162Every task MUST strictly follow this format:163164```text165- [ ] [TaskID] [P?] [Story?] Description with file path166```167168**Format Components**:1691701. **Checkbox**: ALWAYS start with `- [ ]` (markdown checkbox)1712. **Task ID**: Sequential number (T001, T002, T003...) in execution order1723. **[P] marker**: Include ONLY if task is parallelizable (different files, no dependencies on incomplete tasks)1734. **[Story] label**: REQUIRED for user story phase tasks only174 - Format: [US1], [US2], [US3], etc. (maps to user stories from spec.md)175 - Setup phase: NO story label176 - Foundational phase: NO story label 177 - User Story phases: MUST have story label178 - Polish phase: NO story label1795. **Description**: Clear action with exact file path180181**Examples**:182183- ✅ CORRECT: `- [ ] T001 Create project structure per implementation plan`184- ✅ CORRECT: `- [ ] T005 [P] Implement authentication middleware in src/middleware/auth.py`185- ✅ CORRECT: `- [ ] T012 [P] [US1] Create User model in src/models/user.py`186- ✅ CORRECT: `- [ ] T014 [US1] Implement UserService in src/services/user_service.py`187- ❌ WRONG: `- [ ] Create User model` (missing ID and Story label)188- ❌ WRONG: `T001 [US1] Create model` (missing checkbox)189- ❌ WRONG: `- [ ] [US1] Create User model` (missing Task ID)190- ❌ WRONG: `- [ ] T001 [US1] Create model` (missing file path)191192### Task Organization1931941. **From User Stories (spec.md)** - PRIMARY ORGANIZATION:195 - Each user story (P1, P2, P3...) gets its own phase196 - Map all related components to their story:197 - Models needed for that story198 - Services needed for that story199 - Interfaces/UI needed for that story200 - If tests requested: Tests specific to that story201 - Mark story dependencies (most stories should be independent)2022032. **From Contracts**:204 - Map each interface contract → to the user story it serves205 - If tests requested: Each interface contract → contract test task [P] before implementation in that story's phase2062073. **From Data Model**:208 - Map each entity to the user story(ies) that need it209 - If entity serves multiple stories: Put in earliest story or Setup phase210 - Relationships → service layer tasks in appropriate story phase2112124. **From Setup/Infrastructure**:213 - Shared infrastructure → Setup phase (Phase 1)214 - Foundational/blocking tasks → Foundational phase (Phase 2)215 - Story-specific setup → within that story's phase216217### Phase Structure218219- **Phase 1**: Setup (project initialization)220- **Phase 2**: Foundational (blocking prerequisites - MUST complete before user stories)221- **Phase 3+**: User Stories in priority order (P1, P2, P3...)222 - Within each story: Tests (if requested) → Models → Services → Endpoints → Integration223 - Each phase should be a complete, independently testable increment224- **Final Phase**: Polish & Cross-Cutting Concerns