---
name: "spectre-create_tasks"
description: "👻 | Transform requirements into executable tasks - primary agent"
user-invocable: true
---
# create_tasks
## Input Handling
Treat the current command arguments as this workflow's input. When invoked from a slash command, use the forwarded `$ARGUMENTS` value.
# create_tasks: Unified Task Breakdown
## Description
- Transform requirements into detailed, actionable task lists with dependency analysis and execution options.
- Adapts to available context: uses existing research when sufficient, conducts research when needed.
- Outputs both sequential and parallel execution strategies.
- Scales naturally: generates as many phases and tasks as the scope requires.
## ARGUMENTS Input
$ARGUMENTS
---
## Step 1 - Establish Context
### 1z. Determine Depth
- Read `--depth` from ARGUMENTS. Default: `standard`.
- **LIGHT**: compact execution list; 1-3 parent tasks; Phase 0 only for new deps; RED tasks only for risky behavior changes; dependency waves only if useful.
- **STANDARD**: normal task list; RED tasks for behavior changes; concise sequencing; adversarial-review ready.
- **COMPREHENSIVE**: full task artifact; Phase 0, context payloads, RED pairing, coverage matrix, and parallel waves required.
### 1a. Determine Output Location
- `branch_name=$(git rev-parse --abbrev-ref HEAD 2>/dev/null || echo unknown)`
- **If** user specifies path → `TASK_DIR={that value}`
- **Else** → `TASK_DIR=docs/tasks/{branch_name}`
- Ensure dirs exist: `mkdir -p "${TASK_DIR}/specs" "${TASK_DIR}/research" "${TASK_DIR}/clarifications"`
### 1b. Scan Available Artifacts
Inventory what exists in `TASK_DIR/`:
- [ ] `task_summary.md` — scope/objectives
- [ ] `prd.md` — detailed requirements
- [ ] `ux.md` — user experience specs
- [ ] `plan.md` — technical approach
- [ ] `task_context.md` — technical research
- [ ] `research/*.md` — analysis docs
Also note: thread context, user-provided docs, ARGUMENTS content.
### 1c. Assess Complexity
**Simple task** (research likely unnecessary):
- MICRO/LIGHT depth or single file/component change
- Clear pattern already exists in codebase
- Scope explicitly stated, no ambiguity
**Complex task** (research likely needed):
- Multi-component or cross-cutting
- New patterns or integrations
- Unclear technical approach
---
## Step 2 - Research Decision
### 2a. Do We NEED Research?
Based on complexity assessment from 1c:
- **If** depth is `light` and `plan.md`/`task_context.md` names target files → `NEED_RESEARCH=false`
- **If** simple task with clear scope → `NEED_RESEARCH=false`
- **If** complex task or unclear approach → `NEED_RESEARCH=true`
### 2b. Do We HAVE Research? (if NEED_RESEARCH=true)
Assess existing artifacts with judgment:
| Artifact | Check For |
|----------|-----------|
| `task_context.md` | "## Technical Research" section with relevant analysis |
| `research/*.md` | Docs covering codebase patterns, integration points |
| `plan.md` | Technical approach, file locations, architecture decisions |
**Judgment call**: Do existing artifacts sufficiently cover:
- Codebase patterns relevant to this scope?
- Integration points and dependencies?
- Technical approach and target files?
- **If** sufficient coverage → `HAVE_RESEARCH=true`
- **If** gaps exist → `HAVE_RESEARCH=false` (note specific gaps)
### 2c. Action
- **If** `NEED_RESEARCH=false` → proceed to Step 3
- **If** `NEED_RESEARCH=true` AND `HAVE_RESEARCH=true` → read existing, proceed to Step 3
- **If** `NEED_RESEARCH=true` AND `HAVE_RESEARCH=false` → conduct research (Step 2d)
### 2d. Conduct Research (conditional)
- Spawn parallel agents: @codebase-locator, @codebase-analyzer, @codebase-pattern-finder
- Review: `CLAUDE.md`, `README.md`, architecture docs
- Identify: patterns, integration points, technical constraints
- Save to `${TASK_DIR}/task_context.md` under "## Technical Research"
---
## Step 3 - Extract Requirements
### 3a. Gather From All Sources
Read completely (no limits):
- Planning docs: `task_summary.md`, `prd.md`, `plan.md`, `ux.md`
- Thread context: discussed requirements, user goals
- ARGUMENTS: any provided scope
### 3b. Synthesize Requirements
- Extract: what must be built, who uses it, success criteria
- Extract: out of scope, constraints, boundaries
- Number each: REQ-001, REQ-002, etc.
- Categorize: Core functionality, UX, Technical constraints
### 3c. Requirements Boundary Check
- [ ] Clear on what IS explicitly requested?
- [ ] Clear on what is NOT mentioned (exclude)?
- [ ] **Scope Litmus Test**: Would user recognize this as exactly what they asked?
**STRICT COMPLIANCE**: Tasks deliver ONLY what's explicitly stated. No performance optimizations, extra features, future-proofing, or "best practices" unless requested.
---
## Step 4 - Generate Tasks
### 4a. Synthesize Architecture Context
- **Action** — SynthesizeArchitectureContext: Based on research findings, document where this work fits and how we'll approach it.
- **Where This Fits**: Which system/component this extends, how it connects to existing architecture (with file references)
- **Technical Approach**: Key pattern we're following, why this approach vs alternatives, what existing code we're leveraging
- **Key Decisions**: Important technical decisions made and their rationale
- This section helps the user understand how the work integrates with the product before diving into tasks
### Task Hierarchy (4 Levels)
- **Phase**: Organizational header (no checkbox) — groups related parent tasks
- **Parent Task**: Cohesive deliverable (small-medium scope) — one component/file
- **Sub-task**: Atomic work (single focused change) — single action, 2-3 acceptance criteria
- **Acceptance Criteria**: Executable, verifiable outcomes (see Acceptance Criteria Types below)
**Numbering**: Phase 1 → Parent 1.1, 1.2 → Sub-tasks 1.1.1, 1.1.2 → Criteria
### Right-Sized for AI Execution
Published data on AI agent execution (Cognition's Devin reviews, Anthropic's Claude Code guidance) converges on a bounded sweet spot: each sub-task should be completable in roughly the time a junior would take in a 4–8 hour window — not a multi-day epic, not a 10-line tweak.
**Hard size cap — split a sub-task if ANY of these is true:**
- Touches more than 3 files
- Has more than 5 acceptance criteria
- Would require more than ~200 lines of diff
- Requires a mid-execution judgment call about scope (split the judgment into its own predecessor task)
- Spans more than one concern (e.g., schema + UI in one sub-task)
When splitting, keep the integration-aware principle intact: each split task still names its Producer / Consumer / Replaces.
### Acceptance Criteria Types
Every acceptance criterion MUST be one of three executable types. Prose criteria like "feature works correctly" or "behavior is consistent" are forbidden — an executor cannot self-check them.
1. **Test passes** — `Test \`\` passes` (or `tests in pass`)
2. **Observable behavior** — A specific, checkable runtime signal: `GET /api/x returns 200 with field \`y\``, `Console logs \`event=loaded params={...}\``, `Button click triggers within 100ms`
3. **State / file condition** — `File \`\` exists and contains `, `Migration \`\` applied`, `Env var \`X\` is read at startup`
Mixing types within a sub-task is fine. What's not fine: criteria the agent cannot verify without asking the user.
### Test-First Task Pairing
For STANDARD/COMPREHENSIVE sub-tasks that change observable behavior (not pure refactors or cleanup), pair with a preceding RED task. For LIGHT, add a RED task only when the behavior is risky, ambiguous, or regression-prone. Pattern:
- **N.M.k RED**: Write failing test `` asserting ``. Acceptance: test exists and fails for the documented reason.
- **N.M.(k+1) Build**: Implement ``. Acceptance: the RED test passes; no other tests regress.
This is the TDAD pattern (test-driven agentic development): the failing test is the executor's self-correction signal. Without it, the executor is guessing whether the implementation is right.
Pure refactors, cleanups, and config-only tasks don't require RED pairing — but if behavior changes, the RED comes first.
### Integration-Aware Task Principle
> **"A feature isn't done when pieces exist. It's done when data flows from user action to rendered pixels."**
Every task that creates something must specify:
1. **What it produces** — exact output (variable, return value, prop, event)
2. **What consumes it** — exact consumer (component, hook, handler) that uses the output
3. **What it replaces** — old code path being deprecated (if any)
Tasks without consumers are incomplete. Tasks that don't address old code paths leave dead/duplicate logic.
**Task Types**:
- **Build tasks**: Create a component/hook/utility/function
- **Integration tasks**: Wire producer output to consumer input (MANDATORY for every build task)
- **Cleanup tasks**: Remove/redirect old code paths (MANDATORY when replacing patterns)
### 4b. Create Parent Tasks
- **Action** — CreateParentTasks: Draft as many phases as needed to logically organize work, each with as many parent tasks as required to cover complete scope.
- Each parent task = single cohesive deliverable (small-medium scope)
- Cover ALL extracted requirements with no gaps
- Group related work into phases for clarity
- Align with technical approach (from research or existing docs)
- LIGHT cap: 1-3 parent tasks unless tier reassessment is required.
- Every parent task carries explicit sequencing in its body:
- **Predecessor**: parent task IDs that must complete first (or "none")
- **Unblocks**: parent task IDs this unblocks (or "terminal")
- Phase 0 rules are depth-aware (see below). Other phases start at Phase 1.
### 4a-Phase0. Phase 0 — Dependency Verification
Generate Phase 0 only when the plan introduces external dependencies, except COMPREHENSIVE where Phase 0 is always present. Each dependency sub-task verifies the package exists at the named version and exposes the API the plan assumed.
- Acceptance type: state condition (`npm view @` returns valid metadata) and/or test passes (a minimal import-and-call smoke test).
- If COMPREHENSIVE and `plan.md` declared "no new packages," Phase 0 is a single sub-task that confirms no new dependencies were silently introduced during implementation (cross-check `package.json` diff at end). For LIGHT/STANDARD, put that check in the final implementation task instead.
- Phase 0 unblocks Phase 1; it cannot be skipped or run in parallel with Phase 1.
### 4c. Break Down Sub-tasks
- **Action** — BreakdownSubTasks: For each parent, generate as many detailed sub-tasks as needed to complete the parent.
- **Sub-task structure**:
- Start with action verb (Create, Implement, Add, Update, Configure, Enable)
- Use technical language freely (components, endpoints, middleware, hooks, schemas)
- Specify technical patterns and architecture decisions
- Name specific files, components, or modules when helpful
- Describe technical behavior and integration points
- Be specific enough for junior dev to know where to start
- Completable as a single focused change
- **What to INCLUDE in sub-tasks:**
- Technical terms (JWT, REST, WebSocket, React hooks, SQL queries)
- Architecture patterns (middleware, pub/sub, observer, factory)
- Integration points (which components connect, API contracts)
- File/component names (UserProfileComponent, authMiddleware.ts)
- Technical constraints (max file size, timeout duration, data format)
- **Produces**: What output this creates (variable name, return value, prop)
- **Consumed by**: What uses this output (component, hook, render path)
- **Replaces**: What old code path this supersedes (if any)
- **Context**: a self-contained payload an executor can use without re-reading the full plan. LIGHT may use 1-2 refs and a plan anchor; STANDARD/COMPREHENSIVE include:
- 2–4 file:line refs pulled from research (the exact code being modified or extended)
- 1 canonical reference pointer (a file:line from `@patterns` research that shows the shape to follow)
- 1 link/anchor into `plan.md` for the relevant section
- **Predecessor** (sub-task level, optional): a sub-task ID this depends on. Only when intra-parent ordering is non-obvious.
- **What to AVOID in sub-tasks:**
- ❌ Code snippets or pseudo-code
- ❌ Exact function signatures or variable names
- ❌ Line-by-line implementation steps
- ❌ Specific library API calls (unless architecturally significant)
- **Acceptance criteria**:
- Every criterion MUST be one of the three executable types (see "Acceptance Criteria Types" above): test passes / observable behavior / state condition.
- 2–3 criteria per sub-task. If a sub-task needs more than 3 to be checkable, split it.
- Prose criteria ("works correctly", "is consistent", "user-friendly") are forbidden — they're not self-checkable.
- **Decomposition (hard size cap)**: Split if ANY of: >3 files touched, >5 criteria, >~200 LOC, mid-task scope judgment required, or more than one concern.
### 4d. Validate Task Structure
- **Action** — VerifyCoverage: Cross-reference tasks against extracted requirements.
- Map each requirement from Step 3 to at least one task
- Flag any uncovered requirements → add missing tasks
- Flag any tasks without requirement justification → remove or justify
- **Action** — ValidateTasks: Validate complete task structure.
- **Coverage Validation**:
- [ ] All extracted requirements from Step 3 addressed by tasks?
- [ ] No gaps in requirement coverage?
- [ ] Every "Verification" entry from `plan.md` mapped to at least one acceptance criterion?
- **Exclusion Validation**:
- [ ] No additions beyond explicit requests?
- [ ] `plan.md`'s "Out-of-Bounds — DO NOT add" list carried forward verbatim into tasks.md banner?
- [ ] No task implements anything in the Out-of-Bounds list?
- **Structure Validation**:
- [ ] Parent tasks are small-medium scope, sub-tasks are atomic?
- [ ] Each sub-task has 2-3 acceptance criteria, each one of the three executable types?
- [ ] No sub-task exceeds the size cap (>3 files / >5 criteria / >~200 LOC / multi-concern / mid-task scope judgment)?
- [ ] RED pairing follows the selected depth contract?
- [ ] Context payloads follow the selected depth contract?
- [ ] Every parent task has Predecessor and Unblocks declared?
- [ ] Phase 0 follows the selected depth contract?
- **Action** — ValidateIntegration: Verify every build task is wired to consumers.
- **Consumer Specified**:
- [ ] Does every "create X" task specify what consumes X?
- [ ] No orphaned computations (values produced but never used)?
- **Integration Explicit**:
- [ ] Is there a task for wiring producer output → consumer input?
- [ ] For UI features: is there a task verifying data reaches the render path?
- **Old Paths Addressed**:
- [ ] If replacing old code, is removal/redirect a task?
- [ ] No duplicate data sources for the same concern?
- **Last Mile Covered**:
- [ ] For every feature affecting what users SEE: task exists to wire to JSX render?
---
## Step 5 - Dependency Analysis & Execution Strategies
### 5a. Map Dependencies
- Review parent tasks (📋 level) for dependencies
- Identify which parent tasks can be completed in parallel vs sequential
- Dependency rules:
- Parent tasks requiring output from other parents must be sequenced
- Tasks modifying same files need sequencing or coordination
- Testing tasks run after implementation tasks
- Setup/configuration tasks complete before dependent work
### 5b. Generate Sequential Execution Order
Define step-by-step execution order based on dependencies. For LIGHT, keep this to one compact ordered list:
```markdown
## Sequential Execution
1. 1.1 - [Name] (no dependencies)
2. 1.2 - [Name] (depends on 1.1)
3. 2.1 - [Name] (depends on 1.1)
4. 2.2 - [Name] (depends on 1.2, 2.1)
...
```
### 5c. Generate Parallel Execution Waves
Group independent parent tasks into waves for parallel execution. Skip this section for LIGHT unless two or more parent tasks can truly run concurrently:
```markdown
## Parallel Execution
### Wave 1 (concurrent)
- 1.1, 2.1 — no dependencies, can start immediately
- Rationale: {why these can run concurrently}
### Wave 2 (after Wave 1)
- 1.2, 2.2 — depend on Wave 1 outputs
- Rationale: {why these depend on Wave 1}
### Wave 3 (after Wave 2)
- 3.1 — integration, needs prior waves complete
- Rationale: {why this needs prior waves}
```
**Note**: Phases (📦) are organizational; execution planning happens at parent task (📋) level.
---
## Step 6 - Document & Output
### 6a. Write tasks.md
- Determine `TASKS_FILE` (default `${TASK_DIR}/specs/tasks.md`; if it already exists, create a scoped name like `${TASK_DIR}/specs/{task_name}_tasks.md` or `tasks_{timestamp}.md` to avoid overwriting).
Save to `${TASKS_FILE}`:
For LIGHT, keep the template compact: Objective, Scope, Out-of-Bounds, Architecture Context, Tasks, and a short Execution Order. Omit Requirements Traced, Coverage Summary, and Parallel Execution unless needed. STANDARD/COMPREHENSIVE use the fuller structure below.
```markdown
# Tasks — {feature name}
*Generated by create_tasks on {timestamp}*
## Objective
{single sentence describing outcome}
## Scope
- **In Scope**: {bullet list}
- **Out of Scope**: {bullet list}
## Out-of-Bounds — DO NOT add
*Carried forward verbatim from plan.md. Executors: if a task tempts you to add any of these, stop and ask.*
- {Forbidden addition 1, e.g. "rate limiting"}
- {Forbidden addition 2, e.g. "retry/backoff"}
- {Forbidden addition 3, e.g. "telemetry events"}
- {Forbidden addition 4, e.g. "admin UI"}
## Requirements Traced
| ID | Description | Source | Tasks |
|----|-------------|--------|-------|
| REQ-001 | ... | prd.md | 1.1, 1.2 |
| REQ-002 | ... | task_summary.md | 2.1 |
---
## Architecture Context
### Where This Fits
- {Which system/component this work extends or modifies}
- {How it connects to existing architecture — with file references}
### Technical Approach
- {Key pattern/approach we're following — reference existing code if applicable}
- {Why this approach vs alternatives}
- {What existing code we're leveraging}
### Key Decisions
- {Decision 1 and rationale}
- {Decision 2 and rationale}
---
## Tasks
### Phase 0: Dependency Verification
*Confirms every external dependency in plan.md exists at the declared version before any implementation begins.*
#### [0.1] Verify external dependencies
- **Predecessor**: none
- **Unblocks**: 1.1
- [ ] **0.1.1** Verify each package@version from plan.md "External Dependencies" section exists
- **Produces**: confirmation log of resolved package metadata
- **Consumed by**: Phase 1 implementation tasks
- **Context**:
- plan.md anchor: `## External Dependencies — Verify Before Implementation`
- check commands listed in plan section
- [ ] State condition: `npm view @` returns valid metadata for every package
- [ ] State condition: no package in the list is flagged as deprecated or security-advised
- [ ] Test passes: minimal import-and-call smoke for each new package
### Phase 1: {Phase Name}
#### [1.1] {Parent Task Title}
- **Predecessor**: 0.1
- **Unblocks**: 1.2
- [ ] **1.1.1 RED** Write failing test `{test_name}` asserting `{behavior}`
- **Produces**: a failing test that pins the desired behavior
- **Consumed by**: 1.1.2 (turns this red to green)
- **Replaces**: N/A
- **Context**:
- `path/to/existing/code.ts:42` — current behavior being changed
- `path/to/similar/test.ts:18` — canonical test shape to follow
- plan.md anchor: `### Verification — How We Know This Works`
- [ ] State condition: file `path/to/test.ts` exists and contains test `{test_name}`
- [ ] Test passes: the new test fails, with failure message referencing the unimplemented behavior
- [ ] **1.1.2 Build** {Implement the change}
- **Produces**: {output variable/value/prop}
- **Consumed by**: {component/hook that uses this}
- **Replaces**: {old code path, or "N/A" if new}
- **Context**:
- `path/to/file.ts:120` — code to modify
- `path/to/file.ts:180` — adjacent code that must not regress
- `path/to/canonical/example.ts:55` — pattern to follow (from @patterns research)
- plan.md anchor: `## Technical Approach`
- [ ] Test passes: `{test_name}` (from 1.1.1) now passes
- [ ] Test passes: existing tests in `path/to/related.test.ts` still pass
- [ ] Observable behavior: `{specific runtime signal, e.g. log line, HTTP response shape}`
#### [1.2] {Parent Task Title} — Integration
- **Predecessor**: 1.1
- **Unblocks**: {next parent or "terminal"}
- [ ] **1.2.1** Wire {1.1.2 output} to {consumer}
- **Wires**: {1.1.2 output} → {consumer component/render}
- **Removes**: {old code path being replaced}
- **Context**:
- `path/to/consumer.tsx:30` — where the wire lands
- `path/to/old/path.ts:12` — old code path to remove
- plan.md anchor: `### Technical Approach`
- [ ] Test passes: integration test asserting consumer renders new data source
- [ ] State condition: old code path file `path/to/old/path.ts` deleted or import removed
- [ ] Observable behavior: data flows from producer to rendered output (with `{specific assertion}`)
### Phase 2: {Phase Name}
...
---
## Execution Strategies
### Sequential Execution
1. Task 1.1 - [Name] (no dependencies)
2. Task 1.2 - [Name] (depends on 1.1)
3. Task 2.1 - [Name] (depends on 1.1)
...
### Parallel Execution
**Wave 1 (concurrent)**: 1.1, 2.1
- Rationale: {why concurrent}
**Wave 2 (after Wave 1)**: 1.2, 2.2
- Rationale: {why sequenced}
**Wave 3 (after Wave 2)**: 3.1
- Rationale: {why sequenced}
---
## Coverage Summary
- Total Requirements Extracted: [X]
- Requirements with Task Coverage: [X] (100%)
- Phases: [N]
- Parent Tasks: [Y]
- Sub-tasks: [Z]
```
### 6b. Present Summary
- **Action** — SummarizeStructure: "Task Breakdown Complete. Structure: {X} phases, {Y} parents, {Z} sub-tasks. \[List phases with parent titles\]. Execution: Sequential ({N} steps) | Parallel ({M} waves). Saved to: {path}"
### 6c. Next Steps Footer
Action — RenderFooter: Use Skill(spectre-guide) skill for Next Steps footer