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 out hooks where
enabled is explicitly false. Treat hooks without an enabled field as enabled by default.
- 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
- When constructing slash commands from hook command names, replace dots (
.) with hyphens (-). For example, speckit.git.commit → /speckit-git-commit.
- 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 .specify/scripts/bash/setup-tasks.sh --json from repo root and parse FEATURE_DIR, TASKS_TEMPLATE, and AVAILABLE_DOCS list. FEATURE_DIR and TASKS_TEMPLATE must be absolute paths when provided. AVAILABLE_DOCS is a list of document names/relative paths available under FEATURE_DIR (for example research.md or contracts/). 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)
- IF EXISTS: Load
.specify/memory/constitution.md for project principles and governance constraints
- Note: Not all projects have all documents. Generate tasks based on what's available.
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: Read the tasks template from TASKS_TEMPLATE (from the JSON output above) and use it as structure. If TASKS_TEMPLATE is empty, fall back to .specify/templates/tasks-template.md. 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)
Mandatory Post-Execution Hooks
You MUST complete this section before reporting completion to the user.
Check if .specify/extensions.yml exists in the project root.
- If it does not exist, or no hooks are registered under
hooks.after_tasks, skip to the Completion Report.
- 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 to the Completion Report.
- Filter out hooks where
enabled is explicitly false. Treat hooks without an enabled field as enabled by default.
- 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
- When constructing slash commands from hook command names, replace dots (
.) with hyphens (-). For example, speckit.git.commit → /speckit-git-commit.
- For each executable hook, output the following based on its
optional flag:
- Mandatory hook (
optional: false) — You MUST emit EXECUTE_COMMAND: for each mandatory hook:## Extension Hooks
**Automatic Hook**: {extension}
Executing: `/{command}`
EXECUTE_COMMAND: {command}
- Optional hook (
optional: true):## Extension Hooks
**Optional Hook**: {extension}
Command: `/{command}`
Description: {description}
Prompt: {prompt}
To execute: `/{command}`
Completion 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)
Context for task generation: $ARGUMENTS
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 REQUIRED: Per the project constitution (Principle I, TDD — NON-NEGOTIABLE), include explicit test tasks and write failing tests before implementation. The only exception is the documented, human-confirmed manual-test path (Principle II).
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
Done When
1---2name: speckit-tasks3description: Generate an actionable, dependency-ordered tasks.md for the feature based on available design artifacts.4---567## User Input89```text10$ARGUMENTS11```1213You **MUST** consider the user input before proceeding (if not empty).1415## Pre-Execution Checks1617**Check for extension hooks (before tasks generation)**:18- Check if `.specify/extensions.yml` exists in the project root.19- If it exists, read it and look for entries under the `hooks.before_tasks` key20- If the YAML cannot be parsed or is invalid, skip hook checking silently and continue normally21- Filter out hooks where `enabled` is explicitly `false`. Treat hooks without an `enabled` field as enabled by default.22- For each remaining hook, do **not** attempt to interpret or evaluate hook `condition` expressions:23 - If the hook has no `condition` field, or it is null/empty, treat the hook as executable24 - If the hook defines a non-empty `condition`, skip the hook and leave condition evaluation to the HookExecutor implementation25- When constructing slash commands from hook command names, replace dots (`.`) with hyphens (`-`). For example, `speckit.git.commit` → `/speckit-git-commit`.26- For each executable hook, output the following based on its `optional` flag:27 - **Optional hook** (`optional: true`):28 ```29 ## Extension Hooks3031 **Optional Pre-Hook**: {extension}32 Command: `/{command}`33 Description: {description}3435 Prompt: {prompt}36 To execute: `/{command}`37 ```38 - **Mandatory hook** (`optional: false`):39 ```40 ## Extension Hooks4142 **Automatic Pre-Hook**: {extension}43 Executing: `/{command}`44 EXECUTE_COMMAND: {command}45 46 Wait for the result of the hook command before proceeding to the Outline.47 ```48- If no hooks are registered or `.specify/extensions.yml` does not exist, skip silently4950## Outline51521. **Setup**: Run `.specify/scripts/bash/setup-tasks.sh --json` from repo root and parse FEATURE_DIR, TASKS_TEMPLATE, and AVAILABLE_DOCS list. `FEATURE_DIR` and `TASKS_TEMPLATE` must be absolute paths when provided. `AVAILABLE_DOCS` is a list of document names/relative paths available under `FEATURE_DIR` (for example `research.md` or `contracts/`). 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").53542. **Load design documents**: Read from FEATURE_DIR:55 - **Required**: plan.md (tech stack, libraries, structure), spec.md (user stories with priorities)56 - **Optional**: data-model.md (entities), contracts/ (interface contracts), research.md (decisions), quickstart.md (test scenarios)57 - **IF EXISTS**: Load `.specify/memory/constitution.md` for project principles and governance constraints58 - Note: Not all projects have all documents. Generate tasks based on what's available.59603. **Execute task generation workflow**:61 - Load plan.md and extract tech stack, libraries, project structure62 - Load spec.md and extract user stories with their priorities (P1, P2, P3, etc.)63 - If data-model.md exists: Extract entities and map to user stories64 - If contracts/ exists: Map interface contracts to user stories65 - If research.md exists: Extract decisions for setup tasks66 - Generate tasks organized by user story (see Task Generation Rules below)67 - Generate dependency graph showing user story completion order68 - Create parallel execution examples per user story69 - Validate task completeness (each user story has all needed tasks, independently testable)70714. **Generate tasks.md**: Read the tasks template from TASKS_TEMPLATE (from the JSON output above) and use it as structure. If TASKS_TEMPLATE is empty, fall back to `.specify/templates/tasks-template.md`. Fill with:72 - Correct feature name from plan.md73 - Phase 1: Setup tasks (project initialization)74 - Phase 2: Foundational tasks (blocking prerequisites for all user stories)75 - Phase 3+: One phase per user story (in priority order from spec.md)76 - Each phase includes: story goal, independent test criteria, tests (if requested), implementation tasks77 - Final Phase: Polish & cross-cutting concerns78 - All tasks must follow the strict checklist format (see Task Generation Rules below)79 - Clear file paths for each task80 - Dependencies section showing story completion order81 - Parallel execution examples per story82 - Implementation strategy section (MVP first, incremental delivery)8384## Mandatory Post-Execution Hooks8586**You MUST complete this section before reporting completion to the user.**8788Check if `.specify/extensions.yml` exists in the project root.89- If it does not exist, or no hooks are registered under `hooks.after_tasks`, skip to the Completion Report.90- If it exists, read it and look for entries under the `hooks.after_tasks` key.91- If the YAML cannot be parsed or is invalid, skip hook checking silently and continue to the Completion Report.92- Filter out hooks where `enabled` is explicitly `false`. Treat hooks without an `enabled` field as enabled by default.93- For each remaining hook, do **not** attempt to interpret or evaluate hook `condition` expressions:94 - If the hook has no `condition` field, or it is null/empty, treat the hook as executable95 - If the hook defines a non-empty `condition`, skip the hook and leave condition evaluation to the HookExecutor implementation96- When constructing slash commands from hook command names, replace dots (`.`) with hyphens (`-`). For example, `speckit.git.commit` → `/speckit-git-commit`.97- For each executable hook, output the following based on its `optional` flag:98 - **Mandatory hook** (`optional: false`) — **You MUST emit `EXECUTE_COMMAND:` for each mandatory hook**:99 ```100 ## Extension Hooks101102 **Automatic Hook**: {extension}103 Executing: `/{command}`104 EXECUTE_COMMAND: {command}105 ```106 - **Optional hook** (`optional: true`):107 ```108 ## Extension Hooks109110 **Optional Hook**: {extension}111 Command: `/{command}`112 Description: {description}113114 Prompt: {prompt}115 To execute: `/{command}`116 ```117118## Completion Report119120Output path to generated tasks.md and summary:121- Total task count122- Task count per user story123- Parallel opportunities identified124- Independent test criteria for each story125- Suggested MVP scope (typically just User Story 1)126- Format validation: Confirm ALL tasks follow the checklist format (checkbox, ID, labels, file paths)127128Context for task generation: $ARGUMENTS129130The tasks.md should be immediately executable - each task must be specific enough that an LLM can complete it without additional context.131132## Task Generation Rules133134**CRITICAL**: Tasks MUST be organized by user story to enable independent implementation and testing.135136**Tests are REQUIRED**: Per the project constitution (Principle I, TDD — NON-NEGOTIABLE), include explicit test tasks and write failing tests before implementation. The only exception is the documented, human-confirmed manual-test path (Principle II).137138### Checklist Format (REQUIRED)139140Every task MUST strictly follow this format:141142```text143- [ ] [TaskID] [P?] [Story?] Description with file path144```145146**Format Components**:1471481. **Checkbox**: ALWAYS start with `- [ ]` (markdown checkbox)1492. **Task ID**: Sequential number (T001, T002, T003...) in execution order1503. **[P] marker**: Include ONLY if task is parallelizable (different files, no dependencies on incomplete tasks)1514. **[Story] label**: REQUIRED for user story phase tasks only152 - Format: [US1], [US2], [US3], etc. (maps to user stories from spec.md)153 - Setup phase: NO story label154 - Foundational phase: NO story label 155 - User Story phases: MUST have story label156 - Polish phase: NO story label1575. **Description**: Clear action with exact file path158159**Examples**:160161- ✅ CORRECT: `- [ ] T001 Create project structure per implementation plan`162- ✅ CORRECT: `- [ ] T005 [P] Implement authentication middleware in src/middleware/auth.py`163- ✅ CORRECT: `- [ ] T012 [P] [US1] Create User model in src/models/user.py`164- ✅ CORRECT: `- [ ] T014 [US1] Implement UserService in src/services/user_service.py`165- ❌ WRONG: `- [ ] Create User model` (missing ID and Story label)166- ❌ WRONG: `T001 [US1] Create model` (missing checkbox)167- ❌ WRONG: `- [ ] [US1] Create User model` (missing Task ID)168- ❌ WRONG: `- [ ] T001 [US1] Create model` (missing file path)169170### Task Organization1711721. **From User Stories (spec.md)** - PRIMARY ORGANIZATION:173 - Each user story (P1, P2, P3...) gets its own phase174 - Map all related components to their story:175 - Models needed for that story176 - Services needed for that story177 - Interfaces/UI needed for that story178 - If tests requested: Tests specific to that story179 - Mark story dependencies (most stories should be independent)1801812. **From Contracts**:182 - Map each interface contract → to the user story it serves183 - If tests requested: Each interface contract → contract test task [P] before implementation in that story's phase1841853. **From Data Model**:186 - Map each entity to the user story(ies) that need it187 - If entity serves multiple stories: Put in earliest story or Setup phase188 - Relationships → service layer tasks in appropriate story phase1891904. **From Setup/Infrastructure**:191 - Shared infrastructure → Setup phase (Phase 1)192 - Foundational/blocking tasks → Foundational phase (Phase 2)193 - Story-specific setup → within that story's phase194195### Phase Structure196197- **Phase 1**: Setup (project initialization)198- **Phase 2**: Foundational (blocking prerequisites - MUST complete before user stories)199- **Phase 3+**: User Stories in priority order (P1, P2, P3...)200 - Within each story: Tests (if requested) → Models → Services → Endpoints → Integration201 - Each phase should be a complete, independently testable increment202- **Final Phase**: Polish & Cross-Cutting Concerns203204## Done When205206- [ ] tasks.md generated with all phases, task IDs, and file paths207- [ ] Extension hooks dispatched or skipped according to the rules in Mandatory Post-Execution Hooks above208- [ ] Completion reported to user with task count, story breakdown, and MVP scope