A feature is one deliverable inside a PRD, and its file is where tasks live.
Created with:
tiny-brain work add feature --prd my-initiative my-feature "My Feature"
tiny-brain work add task --feature my-feature "Add the behaviour"
The frontmatter (CLI-owned) carries id, uuid, prd_id, number
(positional, assigned automatically), title, status, and dates.
Task blocks
work add task appends each task to the ## Tasks section as a numbered
heading with its own UUID:
## Tasks
### 1. Add the behaviour
id: 019f56ae-32c7-7a1e-b715-54cc7e379d32
status: not_started
As the task moves through the TDD loop, the lifecycle
fields are updated in place:
### 1. Add the behaviour
id: 019f56ae-32c7-7a1e-b715-54cc7e379d32
status: completed
commitSha: ec07a74
- One commit that closes several tasks uses the same
commitSha on each.
- A task that became unnecessary is marked
status: superseded with
commitSha: null — never deleted.
- After editing, re-sync:
tiny-brain task sync docs/prd/my-initiative/features/my-feature.md
The sync parser treats any ### N. Title heading as a task definition —
only use numbered ### headings inside ## Tasks. Elsewhere in the
document, use bold text or unnumbered headings.
Writing good tasks
A task describes what to build, not how — the full TDD cycle (failing
test, implementation, review-driven refactor) happens inside one task.
Two shapes to reject:
- The TDD split — “Write failing tests for X” + “Implement X” is one
task (“Add X”), not two. Each half is half a cycle.
- The verification-only task — “Run the test suite”, “Verify in
staging”. These produce no commit and always end up superseded.
Verification is part of every cycle, not a task.
The task description is load-bearing: it’s the Task: value in commit
headers, matched by equality (whitespace trimmed). Write it as you want to
type it in a commit message.
Body sections
Beyond ## Description and ## Tasks, features commonly carry Acceptance
Criteria (testable checkboxes), per-task file lists, Dependencies, a Testing
Strategy, and Implementation Notes. As with PRDs, prose is yours; the
frontmatter and task id: lines are not.