Feature Planner
When to Use
- Starting a new product from a spec
- Adding a new feature area to an existing product
- Re-planning after scope changes or user feedback
- Triaging unlabeled GitHub Issues (user-created feature requests and bugs)
Workflow
Step 1: Read Context
- Read
AGENTS.md for tech stack and conventions.
- Read
docs/product-spec.md for the product vision, scope boundaries, and feature priority.
- Read
.agents/architecture.md for the data model and system design.
- List existing GitHub Issues:
gh issue list --state all --json number,title,state,labels
- Identify what's already planned, in progress, or done.
Step 2: Ensure Labels Exist
Create these labels if they don't exist:
gh label create "status:backlog" --color 0E8A16 --force
gh label create "status:in-progress" --color 1D76DB --force
gh label create "status:in-review" --color FBCA04 --force
gh label create "status:done" --color 6F42C1 --force
gh label create "priority:1" --color B60205 --force
gh label create "priority:2" --color FF9F1C --force
gh label create "priority:3" --color 0E8A16 --force
gh label create "feature" --color A2EEEF --force
gh label create "enhancement" --color A2EEEF --force
gh label create "chore" --color FEF2C0 --force
gh label create "bug" --color D73A4A --force
gh label create "performance" --color F9D0C4 --force
Step 3: Decompose into Issues
For each feature, create a GitHub Issue. Each issue must be:
- Single-concern: one independently implementable feature, resulting in one PR
- Ordered by dependency: foundational features first (auth, DB schema, layout)
- Sized for one session: an agent should be able to implement it in a single run
Issue Template
## Description
One paragraph: what this feature does and why a user cares.
## Acceptance Criteria
- [ ] Criterion 1 (user-visible behavior)
- [ ] Criterion 2
- [ ] Criterion 3
## Integration Requirements
How this feature connects to existing components and systems. Include:
- Which existing components this feature must use (not reimplement)
- Layout requirements relative to the page shell (e.g., full-width vs content-width)
- Interaction edge cases (rapid clicks, overlay dismissal, keyboard navigation)
- Data flow: where data comes from, how it's passed to the UI
## Dependencies
Depends on #N, #M (or "None")
## Technical Notes
- Implementation hints, relevant files, patterns to follow
- Reference .agents/conventions.md for component patterns
- Reference .agents/architecture.md for data model
Integration Requirements Guidance
The "Integration Requirements" section prevents a class of bugs where features are
implemented correctly in isolation but fail when integrated into the real app. When
writing this section, consider:
Component reuse: If a registry, factory, or shared component exists for this
domain, the issue must explicitly state "use X for Y" (e.g., "use the property
type registry for cell editing"). Without this, the implementer may reimplement
the behavior inline.
Layout context: If the feature renders inside a page layout, specify whether
it should respect or break out of the page's content width constraints. Database
tables, for example, need full available width — not the editor's max-w-3xl.
Interaction edge cases: For interactive UI, list the edge cases that must be
handled: rapid double-click (debounce), overlay dismissal before subsequent
interactions, keyboard navigation, focus management after dialog close.
Cross-component data flow: If the feature involves data flowing between
components (e.g., a type picker that configures a cell editor), specify the
interface explicitly. Don't assume the implementer will discover the connection.
Labels
Each issue gets exactly 3 labels:
- Status:
status:backlog
- Priority:
priority:1 (foundation), priority:2 (core features), priority:3 (polish/stretch)
- Type:
feature, enhancement, or chore
Priority Guidelines
| Priority |
What belongs here |
Examples |
priority:1 |
Foundation — nothing else works without this |
Auth, workspace CRUD, page CRUD, DB schema, app layout/navigation |
priority:2 |
Core features — the product's value |
Block editor, slash commands, nested pages, search, realtime |
priority:3 |
Polish and stretch goals |
Dark mode, responsive design, markdown import/export, member management |
Step 4: Present the Plan
After creating all issues, present a summary to the user:
## Feature Plan Summary
**Total issues created**: N
**By priority**: P1: X, P2: Y, P3: Z
### Suggested Implementation Order
1. #N — Title (P1, no deps)
2. #M — Title (P1, depends on #N)
3. ...
### Ambiguities / Questions for Human
- [Any unclear requirements from the spec]
- [Any scope decisions that need human input]
Wait for the user to review, reorder, or adjust before the Feature Builder starts picking up issues.
Continuous Improvement: Triaging Unlabeled Issues
After the initial product spec is implemented, the Feature Planner's primary role
shifts to triaging incoming issues. Users and automations create GitHub Issues that
need to be assessed and labeled before the Feature Builder or Bug Fixer can act.
Triage Workflow
- Find open issues with NO
status:* label and NO needs-human label.
- For each issue, assess quality:
- Sufficient detail (clear what/why, testable definition of done):
- Enrich the body if needed (add Acceptance Criteria, Technical Notes)
- Add 3 labels:
status:backlog + priority:* + type
- Insufficient detail:
- Add
needs-human label
- Post a comment with specific questions (what, why, context)
- Do NOT remove
needs-human from issues — the Needs-Human Requeue automation
handles that when the user responds.
The needs-human Feedback Loop
- Feature Planner adds
needs-human + questions to an insufficient issue
- User responds with the requested information
- Needs-Human Requeue automation (cron, every 30 min) detects the response
and removes
needs-human
- Feature Planner re-triages the issue on its next manual run
Issue Quality Checklist
Every issue entering the backlog must have:
Anti-patterns
- Do NOT create issues that bundle multiple unrelated changes
- Do NOT create issues for infrastructure that already exists (check the codebase)
- Do NOT create overly granular issues (e.g., "add import statement") — each should be a meaningful feature
- Do NOT create issues without acceptance criteria — the Feature Builder needs them to know when it's done
- Do NOT assign priority:1 to non-foundational features — P1 means "blocks other work"
- Do NOT triage issues that already have a
status:* label — they're already in the workflow
- Do NOT remove
needs-human — that's the re-queue automation's job
1---2name: feature-planner3description: Triage unlabeled GitHub Issues, decompose product specs into backlog items, and ensure issue quality for the automation loop. Reads the product spec, triages user-created issues, creates issues with acceptance criteria and dependency chains, and sets up labels for the autonomous Feature Builder. Use when starting a new product, adding a new feature area, re-planning after a scope change, or triaging incoming feature requests and bug reports. Triggers on "plan features", "create backlog", "decompose spec", "what should we build", "create issues", "plan the product", "triage issues", "review backlog".4---56# Feature Planner78## When to Use910- Starting a new product from a spec11- Adding a new feature area to an existing product12- Re-planning after scope changes or user feedback13- Triaging unlabeled GitHub Issues (user-created feature requests and bugs)1415## Workflow1617### Step 1: Read Context18191. Read `AGENTS.md` for tech stack and conventions.202. Read `docs/product-spec.md` for the product vision, scope boundaries, and feature priority.213. Read `.agents/architecture.md` for the data model and system design.224. List existing GitHub Issues: `gh issue list --state all --json number,title,state,labels`235. Identify what's already planned, in progress, or done.2425### Step 2: Ensure Labels Exist2627Create these labels if they don't exist:2829```bash30gh label create "status:backlog" --color 0E8A16 --force31gh label create "status:in-progress" --color 1D76DB --force32gh label create "status:in-review" --color FBCA04 --force33gh label create "status:done" --color 6F42C1 --force34gh label create "priority:1" --color B60205 --force35gh label create "priority:2" --color FF9F1C --force36gh label create "priority:3" --color 0E8A16 --force37gh label create "feature" --color A2EEEF --force38gh label create "enhancement" --color A2EEEF --force39gh label create "chore" --color FEF2C0 --force40gh label create "bug" --color D73A4A --force41gh label create "performance" --color F9D0C4 --force42```4344### Step 3: Decompose into Issues4546For each feature, create a GitHub Issue. Each issue must be:47- **Single-concern**: one independently implementable feature, resulting in one PR48- **Ordered by dependency**: foundational features first (auth, DB schema, layout)49- **Sized for one session**: an agent should be able to implement it in a single run5051#### Issue Template5253```markdown54## Description55One paragraph: what this feature does and why a user cares.5657## Acceptance Criteria58- [ ] Criterion 1 (user-visible behavior)59- [ ] Criterion 260- [ ] Criterion 36162## Integration Requirements63How this feature connects to existing components and systems. Include:64- Which existing components this feature must use (not reimplement)65- Layout requirements relative to the page shell (e.g., full-width vs content-width)66- Interaction edge cases (rapid clicks, overlay dismissal, keyboard navigation)67- Data flow: where data comes from, how it's passed to the UI6869## Dependencies70Depends on #N, #M (or "None")7172## Technical Notes73- Implementation hints, relevant files, patterns to follow74- Reference .agents/conventions.md for component patterns75- Reference .agents/architecture.md for data model76```7778#### Integration Requirements Guidance7980The "Integration Requirements" section prevents a class of bugs where features are81implemented correctly in isolation but fail when integrated into the real app. When82writing this section, consider:83841. **Component reuse**: If a registry, factory, or shared component exists for this85 domain, the issue must explicitly state "use X for Y" (e.g., "use the property86 type registry for cell editing"). Without this, the implementer may reimplement87 the behavior inline.88892. **Layout context**: If the feature renders inside a page layout, specify whether90 it should respect or break out of the page's content width constraints. Database91 tables, for example, need full available width — not the editor's `max-w-3xl`.92933. **Interaction edge cases**: For interactive UI, list the edge cases that must be94 handled: rapid double-click (debounce), overlay dismissal before subsequent95 interactions, keyboard navigation, focus management after dialog close.96974. **Cross-component data flow**: If the feature involves data flowing between98 components (e.g., a type picker that configures a cell editor), specify the99 interface explicitly. Don't assume the implementer will discover the connection.100101#### Labels102103Each issue gets exactly 3 labels:104- **Status**: `status:backlog`105- **Priority**: `priority:1` (foundation), `priority:2` (core features), `priority:3` (polish/stretch)106- **Type**: `feature`, `enhancement`, or `chore`107108#### Priority Guidelines109110| Priority | What belongs here | Examples |111|---|---|---|112| `priority:1` | Foundation — nothing else works without this | Auth, workspace CRUD, page CRUD, DB schema, app layout/navigation |113| `priority:2` | Core features — the product's value | Block editor, slash commands, nested pages, search, realtime |114| `priority:3` | Polish and stretch goals | Dark mode, responsive design, markdown import/export, member management |115116### Step 4: Present the Plan117118After creating all issues, present a summary to the user:119120```markdown121## Feature Plan Summary122123**Total issues created**: N124**By priority**: P1: X, P2: Y, P3: Z125126### Suggested Implementation Order1271. #N — Title (P1, no deps)1282. #M — Title (P1, depends on #N)1293. ...130131### Ambiguities / Questions for Human132- [Any unclear requirements from the spec]133- [Any scope decisions that need human input]134```135136Wait for the user to review, reorder, or adjust before the Feature Builder starts picking up issues.137138## Continuous Improvement: Triaging Unlabeled Issues139140After the initial product spec is implemented, the Feature Planner's primary role141shifts to triaging incoming issues. Users and automations create GitHub Issues that142need to be assessed and labeled before the Feature Builder or Bug Fixer can act.143144### Triage Workflow1451461. Find open issues with NO `status:*` label and NO `needs-human` label.1472. For each issue, assess quality:148 - **Sufficient detail** (clear what/why, testable definition of done):149 - Enrich the body if needed (add Acceptance Criteria, Technical Notes)150 - Add 3 labels: `status:backlog` + `priority:*` + type151 - **Insufficient detail:**152 - Add `needs-human` label153 - Post a comment with specific questions (what, why, context)1543. Do NOT remove `needs-human` from issues — the Needs-Human Requeue automation155 handles that when the user responds.156157### The `needs-human` Feedback Loop1581591. Feature Planner adds `needs-human` + questions to an insufficient issue1602. User responds with the requested information1613. Needs-Human Requeue automation (cron, every 30 min) detects the response162 and removes `needs-human`1634. Feature Planner re-triages the issue on its next manual run164165### Issue Quality Checklist166167Every issue entering the backlog must have:168- [ ] Description: what and why169- [ ] Acceptance Criteria: testable checkboxes170- [ ] Integration Requirements: component reuse, layout context, interaction edge cases, data flow (for UI features)171- [ ] Dependencies: explicit issue refs or "None"172- [ ] Technical Notes: relevant files, patterns, edge cases173- [ ] 3 labels: status + priority + type174175## Anti-patterns176177- Do NOT create issues that bundle multiple unrelated changes178- Do NOT create issues for infrastructure that already exists (check the codebase)179- Do NOT create overly granular issues (e.g., "add import statement") — each should be a meaningful feature180- Do NOT create issues without acceptance criteria — the Feature Builder needs them to know when it's done181- Do NOT assign priority:1 to non-foundational features — P1 means "blocks other work"182- Do NOT triage issues that already have a `status:*` label — they're already in the workflow183- Do NOT remove `needs-human` — that's the re-queue automation's job