Briefs are the heart of Shape. They're documents that drive work — the "why" behind your tasks.
A brief is a human-readable document stored as markdown with YAML frontmatter. It can represent any document type that spawns work:
- Epics — Large features broken into tasks
- PRDs — Product requirements with deliverables
- RFCs — Technical proposals with action items
- ADRs — Architecture decisions with implementation tasks
- User Stories — Agile stories with acceptance criteria
- Pitches — ShapeUp-style problem/solution documents
┌─────────────────────────────────────┐
│ Brief (Markdown) │
│ "The Why" │
│ │
│ - Problem statement │
│ - Proposed solution │
│ - Scope and constraints │
└───────────────┬─────────────────────┘
│ spawns
▼
┌─────────────────────────────────────┐
│ Tasks (JSONL) │
│ "The What" │
│ │
│ - Discrete units of work │
│ - Dependencies between tasks │
│ - Status tracking │
└─────────────────────────────────────┘
shape brief new "Add user authentication"
# → Created brief b-7f2a3b1This creates .shape/briefs/b-7f2a3b1.md:
---
id: b-7f2a3b1
title: Add user authentication
status: proposed
type: minimal
created: 2025-01-16T10:30:00Z
---
# Add user authentication
Describe your brief here.shape brief new "Search Redesign" --type shapeupCreates a full ShapeUp pitch template:
---
id: b-8c3d2e1
title: Search Redesign
status: proposed
type: shapeup
appetite: 6-weeks
created: 2025-01-16T10:30:00Z
---
# Search Redesign
## Problem
What problem are we solving? Who has it? What's the current workaround?
## Appetite
**6 weeks** — This is a big batch.
## Solution
Describe the solution at the right level of abstraction. Include:
- Key user flows
- Important edge cases
- Fat marker sketches (if applicable)
## Rabbit Holes
What could derail this project? What should we explicitly avoid?
-
## No-Gos
What are we explicitly NOT doing?
-Briefs move through statuses:
proposed → betting → in_progress → shipped
↘ ↗
archived
| Status | Meaning |
|---|---|
proposed |
Draft, not yet approved |
betting |
Under consideration for a cycle |
in_progress |
Actively being worked on |
shipped |
Completed and delivered |
archived |
Abandoned or indefinitely deferred |
Update status:
shape brief status b-7f2a3b1 in_progress
shape brief status b-7f2a3b1 shippedBriefs are just markdown files. Edit them directly:
# Open in your editor
$EDITOR .shape/briefs/b-7f2a3b1.md
# Or use any text editor
code .shape/briefs/b-7f2a3b1.md
vim .shape/briefs/b-7f2a3b1.mdThe YAML frontmatter is managed by Shape. Edit the markdown body freely.
Basic brief with title and status. Good for:
- Quick features
- Bug fixes
- Chores
Full ShapeUp pitch template with:
- Problem — What we're solving
- Appetite — Time budget (1-week, 2-weeks, 6-weeks)
- Solution — How we'll solve it
- Rabbit Holes — What to avoid
- No-Gos — What we're explicitly not doing
Good for:
- Major features
- Product initiatives
- Cross-team projects
You can create custom brief types via plugins. See Plugins.
Tasks belong to briefs:
# Create brief
shape brief new "User Authentication"
# → b-7f2a3b1
# Add tasks
shape task add b-7f2a3b1 "Research OAuth providers"
shape task add b-7f2a3b1 "Implement login flow"
shape task add b-7f2a3b1 "Add session management"
# List tasks for brief
shape task list b-7f2a3b1Task IDs include the brief ID:
b-7f2a3b1.1— First taskb-7f2a3b1.2— Second taskb-7f2a3b1.3— Third task
Not everything needs a brief. Create standalone tasks for:
- Quick fixes
- Chores
- Ad-hoc work
shape task add "Fix typo in README"
# → standalone.1# List all briefs
shape brief list
# Filter by status
shape brief list --status in_progress
# Show details
shape brief show b-7f2a3b1
# Interactive TUI
shape tui --brief b-7f2a3b1Briefs are stored in .shape/briefs/:
.shape/
├── briefs/
│ ├── b-7f2a3b1.md # Markdown with YAML frontmatter
│ ├── b-8c3d2e1.md
│ └── index.jsonl # Auto-generated index (git-ignored)
├── tasks.jsonl
└── config.toml
- Markdown files — Human-editable, version-controlled
- Index — Auto-regenerated for fast queries, not committed
-
One brief per initiative — Don't overload briefs with unrelated work
-
Write for humans first — Briefs are documentation, not just task containers
-
Keep tasks atomic — Each task should be completable in one sitting
-
Use dependencies — Let Shape track what's blocked vs. ready
-
Update status — Move briefs through the lifecycle as work progresses
-
Commit regularly — Briefs are git-backed; commit as you update them