From beads-superpowers
Use when you have a spec or requirements for a multi-step task, before touching code
How this skill is triggered — by the user, by Claude, or both
Slash command
/beads-superpowers:writing-plansThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Write comprehensive implementation plans assuming the engineer has zero context for our codebase and questionable taste. Document everything they need to know: which files to touch for each task, code, testing, docs they might need to check, how to test it. Give them the whole plan as bite-sized tasks. DRY. YAGNI. TDD. Frequent commits.
Write comprehensive implementation plans assuming the engineer has zero context for our codebase and questionable taste. Document everything they need to know: which files to touch for each task, code, testing, docs they might need to check, how to test it. Give them the whole plan as bite-sized tasks. DRY. YAGNI. TDD. Frequent commits.
Assume they are a skilled developer, but know almost nothing about our toolset or problem domain. Assume they don't know good test design very well.
Announce at start: "I'm using the writing-plans skill to create the implementation plan."
Production-Grade Doctrine: every spec requirement MUST map to a task — a deliberate cut is surfaced as a tracked decision, never a silent omission. Never weaken, bypass, or remove a security control — a security regression is never acceptable.
Context: This should be run in a dedicated worktree (created by brainstorming skill).
Save plans to: .internal/plans/YYYY-MM-DD-<feature-name>.md
If the spec covers multiple independent subsystems, it should have been broken into sub-project specs during brainstorming. If it wasn't, suggest breaking this into separate plans — one per subsystem. Each plan should produce working, testable software on its own.
Before defining tasks, map out which files will be created or modified and what each one is responsible for. This is where decomposition decisions get locked in.
This structure informs the task decomposition. Each task should produce self-contained changes that make sense independently.
A task is the smallest unit that carries its own test cycle and is worth a fresh reviewer's gate. When drawing task boundaries: fold setup, configuration, scaffolding, and documentation steps into the task whose deliverable needs them; split only where a reviewer could meaningfully reject one task while approving its neighbor. Each task ends with an independently testable deliverable.
In beads terms, a right-sized task is one bead (bd create -t task --parent <epic-id>): claimable, verifiable, and closeable on its own.
Each step is one action (2-5 minutes):
Every plan MUST start with this header:
# [Feature Name] Implementation Plan
> **For agentic workers:** REQUIRED SUB-SKILL: Use beads-superpowers:subagent-driven-development (recommended) or beads-superpowers:executing-plans to implement this plan task-by-task. Each Task becomes a bead (`bd create -t task --parent <epic-id>`). Steps within tasks use checkbox (`- [ ]`) syntax for human readability.
**Goal:** [One sentence describing what this builds]
**Architecture:** [2-3 sentences about approach]
**Tech Stack:** [Key technologies/libraries]
## Global Constraints
[The spec's project-wide requirements — version floors, dependency limits,
naming and copy rules, platform requirements — one line each, with exact
values copied verbatim from the spec. Every task's requirements implicitly
include this section.]
---
### Task N: [Component Name]
**Files:**
- Create: `exact/path/to/file.py`
- Modify: `exact/path/to/existing.py:123-145`
- Test: `tests/exact/path/to/test.py`
**Interfaces:**
- Consumes: [what this task uses from earlier tasks — exact signatures]
- Produces: [what later tasks rely on — exact function names, parameter
and return types. A task's implementer sees only their own task; this
block is how they learn the names and types neighboring tasks use.]
**Acceptance Criteria:**
- [Observable, testable outcomes — copied verbatim into the task bead's
`## Acceptance Criteria` section at creation]
- [ ] **Step 1: Write the failing test**
```python
def test_specific_behavior():
result = function(input)
assert result == expected
```
- [ ] **Step 2: Run test to verify it fails**
Run: `pytest tests/path/test.py::test_name -v`
Expected: FAIL with "function not defined"
- [ ] **Step 3: Write minimal implementation**
```python
def function(input):
return expected
```
- [ ] **Step 4: Run test to verify it passes**
Run: `pytest tests/path/test.py::test_name -v`
Expected: PASS
- [ ] **Step 5: Commit**
```bash
git add tests/path/test.py src/path/file.py
git commit -m "feat: add specific feature"
```
Beads integration: When executing this plan, the executing skill creates an epic bead for the plan and a child task bead for each Task N. The - [ ] checkboxes remain in the markdown for human readability, but task-level tracking uses beads (bd create, bd update --claim, bd close --reason). Dependencies between tasks should be declared with bd dep add.
Atomic creation: the executing skill creates the epic + tasks via bd import (JSONL) — bd create the epic, then bd import - the tasks (each with a parent-child dep to the epic and rich fields), then bd batch any inter-task blocks ordering. Not a sequential create-loop. The exact kernel lives in the executing skill (subagent-driven-development / executing-plans).
Required bead-body sections: bd lint (Self-Review step 0) requires ## Success Criteria in the epic bead's description and ## Acceptance Criteria in each task bead's description. Include them at creation time — embed them in each bead's description in the import JSONL (or use the acceptance_criteria field). The epic's Success Criteria derive from the plan's Goal; each task's copy from its Acceptance Criteria block.
Every step must contain the actual content an engineer needs. These are plan failures — never write them:
After writing the complete plan, look at the spec with fresh eyes and check the plan against it. This is a checklist you run yourself — not a subagent dispatch.
0. Deterministic checks: Run these commands and fix anything they flag before proceeding to the judgment checks below:
bd lint <epic-id> # required-section check on the epic
bd list --parent <epic-id> --json | jq -r '.[].id' | xargs -n1 bd lint # same check on each child task
bd ready --parent <epic-id> --explain # confirm dependency ordering
1. Spec coverage: Skim each requirement in the spec. Every one MUST map to a task — point to it. A requirement with no task is either added as a task or surfaced to the user as an explicit, acknowledged cut. Silent omission is a plan failure.
2. Placeholder scan: Search your plan for red flags — any of the patterns from the "No Placeholders" section above. Fix them.
3. Type consistency: Do the types, method signatures, and property names you used in later tasks match what you defined in earlier tasks? A function called clearLayers() in Task 3 but clearFullLayers() in Task 7 is a bug.
If you find issues, fix them inline. No need to re-review — just fix and move on. If you find a spec requirement with no task, add the task.
After self-review passes, open the plan file in the user's editor so they can review it, then gate progression with your structured question tool (content below; shape shown in Claude Code schema — adapt to your tool):
User's preferred editor: !echo ${VISUAL:-${EDITOR:-not-configured}}
⚠️ Run the open command as a standalone Bash call — never chain it after bd commands in the same invocation (e.g., bd close <id> && open file.md). The combination hangs.
# Open in user's preferred editor, with platform fallbacks
if [ -n "$VISUAL" ]; then
"$VISUAL" "<plan-file-path>"
elif [ -n "$EDITOR" ]; then
"$EDITOR" "<plan-file-path>"
elif command -v open >/dev/null 2>&1; then
open "<plan-file-path>"
else
xdg-open "<plan-file-path>" 2>/dev/null
fi
# If none available: just report the path
Then immediately ask via your structured question tool (content below; shape shown in Claude Code schema — adapt to your tool):
{
"questions": [{
"question": "Plan opened in your editor at `<path>`. Review it and let me know how to proceed.",
"header": "Plan review",
"options": [
{"label": "Approved + stress-test (Recommended)", "description": "Plan looks good — run an adversarial stress-test before execution"},
{"label": "Approved", "description": "Plan looks good — skip stress-test and proceed to choose execution method"},
{"label": "Needs changes", "description": "I want to revise the plan before proceeding"}
],
"multiSelect": false
}]
}
Route on the answer:
stress-test skill with the plan path (.internal/plans/YYYY-MM-DD-<feature-name>.md) as the Mode-A artifact; when it completes, proceed to Execution Handoff.When filing a bead for discovered/follow-up work, stamp it per Agent-Filed Bead Discipline (
verification-before-completion).
After the work is settled, present the Capture gate — mandatory every time; Skip is the default (most work leaves nothing worth keeping):
{
"questions": [{
"question": "Worth keeping anything from this?",
"header": "Capture",
"options": [
{"label": "Skip", "description": "Nothing here outlasts the work itself (usually the case)"},
{"label": "Record the decision", "description": "Pick this if the choice is hard to undo, non-obvious in hindsight, and had real trade-offs — so future-you knows why"},
{"label": "Remember the lesson", "description": "A specific, evidence-backed lesson worth reusing in later sessions"},
{"label": "Both", "description": "A lasting decision and a lesson worth reusing"}
],
"multiSelect": false
}]
}
Route on the answer. Record the decision / Both → this writes an ADR, so first confirm it clears the bar (hard-to-reverse AND surprising-without-context AND genuine trade-off); if it doesn't, say so and capture it as a memory instead (the lighter record) — unless the user confirms they want the full ADR. Write the ADR (docs/decisions/ADR-NNNN-<kebab>.md, sections Context/Decision/Rationale/Consequences, update docs/decisions/INDEX.md), then file a type=decision knowledge-bead so the decision stays retrievable: printf '%s' "<distilled 0.5-2.5KB decision summary — context, decision, consequences>" | bd create "<one-line summary>" -t decision -l kb,adr-process,<topic> --defer 2099-01-01 --metadata "$(jq -nc --arg d "<ADR-path>" '{doc:$d}')" --body-file - --silent (run the secret/PII scan on the summary first — flag for removal, never write a secret into a bead). Remember the lesson / Both → bd remember "<kind>: <durable, evidence-backed insight>". Skip → nothing.
After the plan is approved, use your structured question tool to offer the execution choice:
{
"questions": [{
"question": "Plan complete and saved. How would you like to execute it?",
"header": "Execution",
"options": [
{
"label": "Subagent-Driven (Recommended)",
"description": "Fresh subagent per task with a single task review between tasks — fast iteration, high quality"
},
{
"label": "Inline Execution",
"description": "Execute tasks in this session using executing-plans — batch execution with checkpoints"
}
],
"multiSelect": false
}]
}
If Subagent-Driven chosen:
If Inline Execution chosen:
Called by: brainstorming — this is brainstorming's terminal state. After design approval, brainstorming invokes writing-plans.
Invokes:
Pairs with: stress-test — offered at the plan-review gate every time (the "Approved + stress-test" option), before execution.
npx claudepluginhub dollardill/beads-superpowers --plugin beads-superpowersWrites detailed implementation plans from specs for multi-step tasks before coding, with file structure maps, TDD bite-sized steps, and markdown tracking format.
Creates detailed implementation plans from specs for multi-step tasks before coding, with file structure mapping, bite-sized TDD steps, architecture overview, and tech stack.
Creates structured, bite-sized implementation plans from specs or requirements before writing code. Useful for breaking down multi-step tasks into testable steps with file structure and task boundaries.