plan-to-beads
Decompose an approved implementation plan into self-contained beads issues with zero guesswork. Use when breaking down a plan file into actionable beads tasks.
Best use case
plan-to-beads is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Decompose an approved implementation plan into self-contained beads issues with zero guesswork. Use when breaking down a plan file into actionable beads tasks.
Teams using plan-to-beads should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/plan-to-beads/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How plan-to-beads Compares
| Feature / Agent | plan-to-beads | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Decompose an approved implementation plan into self-contained beads issues with zero guesswork. Use when breaking down a plan file into actionable beads tasks.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# Plan to Beads
You are taking an approved implementation plan and decomposing it into beads
(bd) issues. Each bead must be **100% self-contained** so that any agent
picking it up has zero questions and needs zero assumptions. However it should
also reference the plan file(s) and other relevant resources it was based on.
## Workflow
### 1. Find the plan
If the user provided a specific file as an argument, use that. Otherwise use
the most recently referenced plan in the existing conversation. If no such
plan exists, ask the user to provide one.
Read the plan thoroughly before proceeding.
### 2. Explore the codebase if needed
Before proposing beads, check how detailed the plan is in terms of:
- The files that will be modified
- Existing patterns, functions, and utilities that should be reused
- The current state of code related to the plan
- Test patterns used in similar features
If these are already established in the plan, then they should be used directly.
Otherwise, explore the codebase to discover them. This detail is critical —
beads need concrete file paths and function references, not vague
descriptions.
### 3. Propose Beads
Break the plan into granular implementation tasks. For each proposed bead, show:
```
[1] <title>
Depends on: (none | bead numbers)
Files: <file paths>
Summary: <2-3 sentences>
[2] <title>
Depends on: [1]
Files: <file paths>
Summary: <2-3 sentences>
```
### 4. Refine with User
Present the proposed beads and ask for feedback if anything is not clear:
- Should any beads be split further?
- Should any be merged?
- Are dependencies correct?
- Missing anything?
Iterate until the user approves.
### 5. Choose a Feature Label
Before creating beads, choose a short, kebab-case label (e.g., `fiscal-host`,
`project-collections`) that will be applied to every bead in this set.
**The label MUST be new.** Verify it doesn't already exist:
```bash
bd list --label <feature-slug>
```
If any results are returned, choose a different label (e.g., append a version:
`fiscal-host-v2`). Reusing an existing label would mix unrelated beads
together.
### 6. Create Beads
For each approved bead, create it using `--body-file -` to pipe the multi-line
description. **Every bead must** carry the feature label.
**Do NOT heredoc into `bd create` directly — it does not read stdin without `--body-file -`.**
```bash
cat << 'BEAD_EOF' | bd create "Bead title" --type task --priority 2 --labels <feature-slug> --body-file -
## Context
...
## Task
...
## Files
...
## Acceptance Criteria
...
BEAD_EOF
```
Then set dependencies with `bd dep add`.
## Bead Quality Standard
**Every bead MUST follow these rules. No exceptions.**
### 100% Self-contained
A bead includes ALL context an agent needs to complete the work without
reading the plan, without asking questions, and without exploring the codebase
to figure out what to do. The bead IS the spec for that task.
### References relevant context
The bead should reference the plan file(s) and other relevant resources it was
based on or needs.
### No assumptions
Bad: "Update the service to handle the new field"
Good: "In `src/services/user/UserService.ts`, add a `displayName` parameter
(type: `string`, max 50 chars) to the `updateProfile` method.""
### No guesswork
Bad: "Add validation for the input"
Good: "In `src/routes/api/user.ts`, add validation to the request body using
the existing `userUpdateSchema` from `src/lib/schemas/user.ts`. On validation
failure, return HTTP 400 with a structured error response using the project's
error helper. Test: send a request with `displayName` exceeding 50 chars and
verify 400 response."
### Clear dependencies
Bad: "This needs the database migration to be done first"
Good: "Depends on bead `proj-abc123` (Add display_name column to users
table). This bead expects the `display_name` column (type: `varchar(50)`,
nullable, default null) to exist on the `users` table."
### Acceptance criteria
Bad: "Implement the feature"
Good: "Done when: (1) POST /api/user with `{ displayName: 'Test' }` updates
the `display_name` column in the database, (2) GET /api/user returns the
`displayName` field in the response, (3) Sending `displayName` longer than 50
chars returns HTTP 400, (4) Unit test covers all three cases and passes,
(5) All changes committed to git as logically grouped commit(s)."
### Scoped to one concern
If a bead touches multiple files for different reasons, split it. A schema
migration is one bead. The service change is another. The API route change
is another. The tests are another (or colocated with the service bead if
tightly coupled).
## Bead Description Template
Every bead description MUST follow this structure:
```
## Context
[Why this task exists. Reference the broader goal and any relevant issue IDs and resources.]
## Task
[Exactly what to do. Specific files, functions, line numbers where known, exact changes.]
## Files
[Every file path that will be read or modified, with what happens to each:]
- `src/path/to/file.ts` — modify: add X method
- `src/path/to/other.ts` — read: reference existing Y pattern
- `test/path/to/file.test.ts` — create: tests for X
## Dependencies
[What must be complete before this. What this produces for downstream beads:]
- Depends on: <bead-id> (<title>) — needs <specific thing>
- Produces: <what downstream beads will consume>
## Acceptance Criteria
[Concrete, testable conditions. Not "implement X" but "when Y happens, Z results":]
1. <specific testable condition>
2. <specific testable condition>
3. <specific testable condition>
4. All changes committed to git as logically grouped commit(s)
```
## Rules
- **NEVER create vague beads** — if you can't fill in the template with specifics, you haven't explored the codebase enough
- **ALWAYS include relevant issue references** in each bead's Context section when available
- **ALWAYS include the plan file path** in each bead's Context section for traceability
- Use `bd create --type task --priority 2 --labels <feature-slug>` as the default. Adjust priority based on dependency order (earlier = higher priority)
- **NEVER use `--parent` or create epic parent beads** — use labels for grouping and `bd dep add` for ordering
- **ALWAYS apply a consistent, unique label** (short kebab-case feature name) to every bead in the set
- **Every bead MUST have at least one label** — beads without labels are rejected
- After creating all beads, show a summary with bead IDs, titles, labels, and dependency graphRelated Skills
plan-to-linear
Decompose an approved implementation plan into self-contained Linear issues with zero guesswork. Use when breaking down a plan into actionable Linear tasks via the MCP server.
xlsx-to-csv
Convert XLSX spreadsheets (single or multi-sheet) to CSV files you can read and grep. Use whenever you need to process an .xlsx report from Xero, Cryptio, bank exports, or any tool that delivers spreadsheet output.
xero-mcp
Use the Xero MCP server — obtain/refresh OAuth2 bearer tokens, troubleshoot authentication, and pick up other operational notes for working with Xero MCP tools. Use when Xero MCP tools fail with authentication errors, when the bearer token has expired (tokens last ~30 min), before starting any Xero workflow, or for general guidance on Xero MCP usage.
xero-browser
General Xero browser automation notes. Use when automating any Xero page with agent-browser — covers non-standard UI patterns, waiting, and dropdown menus.
test-running
Run tests according to repository guidelines. Use after linting passes, before staging changes.
task-orchestration
Orchestrate the complete development workflow for implementing sub-tasks from a task list. Use for end-to-end feature implementation with quality controls.
task-implementation
Implement a single sub-task from a task list. Use when working on feature development with existing task lists.
task-generation
Generate a detailed task list from a PRP. Use after a PRP is created and ready for implementation planning.
subagent-authoring
Create subagent definitions for Claude Code and OpenCode that delegate to skills. Use when creating new subagents or refactoring existing ones to follow the delegation pattern.
slow-command-running
Pipe long running commands through tee(1) to allow watching output and repeated analyses without rerunning
skill-authoring
Create and maintain Claude Code skills following Anthropic best practices. Use when building new skills, refactoring existing ones, or ensuring skills follow official guidelines for structure, naming, progressive disclosure, and testing.
safe-rm
Safely delete files / directories without asking for permission