tasks.md is the implementation plan of a spec bundle: an ordered checklist of small, independently completable tasks - each with acceptance criteria, dependencies, the requirement IDs it satisfies, and a complexity band - grouped into milestones and closed by a dependency graph. It is a plan for humans and AI coding agents, never applied code.
Foundations before framing, framing before roofing, plumbing rough-in before drywall. A site manager does not hand the crew the blueprint and say "build it"; they hand out a sequenced schedule where each job is small enough to finish in a day or two, names its prerequisite, and has an inspection at the end. tasks.md is that schedule, and the QA Verification milestone is the inspector's walk-through.
Why tasks are sized for an agent's attention span
A coding agent is excellent at one bounded change with a clear "done" and poor at "implement the billing module". tasks.md converts the solution into bounded changes: each task cites the modules and data models the solution named, lists the requirement IDs it satisfies, and carries its own testable acceptance criteria - so an agent can pick up task 7 cold, do it, verify it, and stop.
Three workflows, three shapes
| Workflow | Path | Grouping | Traceability |
|---|---|---|---|
| MySpec greenfield | specs/<bundle>/tasks.md | Milestones named after the outcome they ship | FR-/NFR- IDs |
| MySpec brownfield | specs/<change>/tasks.md (optional) | Foundation → core → supporting → integration → testing → docs | AR-/BR-/CR- codes |
| Spec Kit | specs/NNN-feature/tasks.md | Setup → Foundational → one phase per user story → Polish | [US1] tags + file paths |
| OpenSpec | openspec/changes/<id>/tasks.md | One numbered group per capability | Capability names from the proposal |
In MySpec the greenfield tasks stage has a collect substage that asks about your team structure, which feeds the delivery plan (section 04). The brownfield tasks stage is optional: after the requirements delta is approved the workflow asks whether you want a plan or would rather hand the delta straight to your coding agent.
The MySpec task format
# Implementation Tasks: [Project Name]
## Overview
Approach, total task count, total man-days, elapsed duration.
## Milestone 1: <the outcome this milestone ships>
- [ ] 1\. Create Postgres migration for usage_ledger
- Add uq_tenant_idempotency (tenant_id, idempotency_key) unique constraint
- Acceptance Criteria:
- Migration applies and rolls back cleanly on an empty database
- Duplicate (tenant_id, idempotency_key) insert is rejected
- _Dependencies: none_
- _Requirements: FR-001, NFR-002_
- _Complexity: Small_
- _Estimate: 0.5 man-days_
- [ ] 2\. Implement idempotency middleware
- ...
- _Dependencies: 1_
- _Requirements: FR-001_
- _Complexity: Medium_
- _Estimate: 1.5 man-days_
## Milestone 2: ...
## Milestone N: QA Verification
- [ ] 14\. Verify FR-001 - Idempotent usage ingestion (actor: Tenant admin)
- Scenario per acceptance criterion, negative IF…THEN paths included
- _Requirements: FR-001_
## Delivery Timeline (Mermaid gantt: milestones × team)
## Dependency Graph
Critical path and parallelization opportunities, in prose, consistent with the chart. - Task line -
- [ ] N\. Title; the escaped period keeps the number literal instead of starting a Markdown ordered list. - Sizing bands - Small ≤ 4 hours, Medium 1–2 days, Large > 2 days; anything that would exceed 5 days is split first, so every task lands in exactly one band.
- Milestone order - Infrastructure → Core Features → Supporting Features → Integration → Testing → Documentation → Deployment, but each milestone is named after the deliverable it ships, not the activity.
- Every requirement covered - each FR has at least one task; NFRs are addressed by the tasks that touch them.
Delivery plan and QA verification
Two additions turn a checklist into a plan a team can commit to:
- Project-Manager delivery plan. Every task gets an
_Estimate: N man-days_line consistent with its complexity band (Small 0.5, Medium 1–2, Large 2–5), the Overview states total man-days and elapsed duration, and a Mermaid Gantt timeline sits just before the Dependency Graph, laid out against the team you described in the collect substage. - QA-Engineer verification milestone. A final milestone with one verification task per functional requirement: the actor comes from the requirement's User Role, the scenarios from its EARS+ acceptance criteria, and every
IF … THENunwanted-behaviour criterion must have its negative path covered. NFRs fold into the FR they constrain rather than getting a task of their own.
The Spec Kit task format
The Spec Kit workflow mirrors GitHub Spec Kit's tasks-template.md: sequential T001 numbering across the whole file, [P] for tasks that touch different files and can run in parallel, [US1] tags on user-story tasks, a concrete (file: path) on every task, and a checkpoint at the end of each phase.
# Tasks: [FEATURE NAME]
**Input**: Design documents from `specs/<FEAT_DIR>/`
**Prerequisites**: spec.md, plan.md
## Format: `[ID] [P?] [Story] Description`
- **[P]**: can run in parallel (different files, no dependencies)
- **[Story]**: which user story the task belongs to (US1, US2, …)
## Phase 1: Setup (Shared Infrastructure)
- [ ] T001 Create project structure per plan.md (file: repo root)
- [ ] T003 [P] Configure linting and formatting tools (file: .eslintrc.json)
## Phase 2: Foundational (Blocking Prerequisites)
- [ ] T004 Set up database schema + migrations (file: drizzle/schema.ts)
**Checkpoint**: Foundation ready - user-story phases can begin.
## Phase 3: User Story 1 - [Title] (Priority: P1) 🎯 MVP
**Goal**: … **Independent Test**: …
- [ ] T007 [P] [US1] Create [Entity1] model (file: src/models/entity1.ts)
- [ ] T009 [US1] Implement [Service] (file: src/services/foo.ts)
**Checkpoint**: User Story 1 fully functional and testable independently.
## Phase N: Polish & Cross-Cutting Concerns
- [ ] T0XX Run the validation steps from plan.md's Testing Strategy
## Dependencies & Execution Order The OpenSpec task format
The OpenSpec workflow keeps tasks at planning level and groups them by the capabilities the proposal named - one ## N. <capability> group with - [ ] N.M checkboxes each, all unchecked, so the OpenSpec CLI can track them.
## 1. webapp
- [ ] 1.1 Add the session-rename action to the session list menu
- [ ] 1.2 Wire the rename dialog to PATCH /sessions/:id
## 2. platform
- [ ] 2.1 Add rename endpoint with 500-char summary validation
- [ ] 2.2 Emit session.renamed realtime event Authoring and review rules
- Every task is independently completable and includes its unit tests; dependencies are explicit; parallel opportunities are noted.
- Tasks align with the solution - same components, APIs, and data models - and every requirement ID has at least one task.
- Estimates agree with complexity bands; the Gantt and the Dependency Graph describe the same schedule.
- A task larger than five days, a task with no acceptance criteria, or an FR nobody implements.
- Source code in the plan -
tasks.mdnever implements anything. - Milestones named after activities ("Setup", "Docs") that ship no outcome of their own.
How coding agents use it
- One task per prompt. "Implement task 3 from
.specs/billing/tasks.mdstrictly according to solution.md and constitution.md" beats any free-form request. - Tick the box, cite the IDs. The agent marks
- [x]and the PR description lists the requirement IDs from the task's_Requirements:_line. - Keep the file live. With the MCP server the agent can
update_spec_filethe checklist as a new revision (passingexpected_versionso a teammate's edit is never overwritten). - Run the QA milestone last. The verification tasks are the acceptance test of the whole bundle.
Related spec files
Project vision, core principles, and the MUST / MUST NOT constraints every later file has to obey.
User roles, FR-/NFR- requirements with EARS+ acceptance criteria; a coded AR-/BR-/CR- delta for brownfield changes.
Architecture, modules, data model, and API design with Mermaid flowchart, ER and sequence diagrams - plus C4 diagrams when your organisation enables them.
Ordered, sized implementation tasks grouped into milestones, traced back to requirement IDs.
Why a brownfield change is needed, what changes, the technical solution, and its impact on existing code.
Spec Kit's prioritised user stories and success criteria, or OpenSpec's ADDED / MODIFIED / REMOVED / RENAMED requirement deltas.
Spec Kit's technical plan: technical context, constitution gates, architecture, data model, and key decisions.
OpenSpec's optional context, goals / non-goals, decisions, and risks for a change.
Workflows that write it
The default four-file bundle: interview → constitution → requirements → solution → tasks.
GitHub Spec Kit's feature-scoped flow: interview → constitution → specify → plan → tasks.
OpenSpec's change-proposal flow: explore → proposal → delta specs → design → tasks.
Let the AI Architect write it for you
MySpec interviews you, then drafts every spec file with collect → generate → review gates. Free during Open Beta.