From fw
Create read-only implementation plans. Use for requirements, bug reports, feature ideas, or rough tasks before execution.
How this skill is triggered — by the user, by Claude, or both
Slash command
/fw:planThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Use the actual current date from runtime context when dating plans and
Use the actual current date from runtime context when dating plans and searching for recent documentation.
$fw:brainstorm defines WHAT to build. $fw:plan defines HOW to build
it. $fw:work executes the plan only after the user explicitly approves
that next step. A prior brainstorm is useful context but not required —
planning can start from a requirements doc, a bug report, a feature idea, or a
rough description.
When directly invoked, always plan. Never classify a direct invocation as "not a planning task" and exit the workflow. If the input is unclear, ask clarifying questions or use the planning bootstrap to establish enough context, but stay in planning.
This workflow produces a durable implementation plan. It is a read-only,
collaborative stage. It does not implement code, run tests, or silently
transition into execution-time work. After the plan file exists and the
confidence check completes, it must run document-review on that plan and end
with a user choice that explicitly offers $fw:deepen, review-finding
follow-up, a pause, or starting $fw:work.
When planning starts from a requirements, spec, or design document whose review state is unknown, offer source document review before drafting the plan. Use that review to catch simplification, feasibility, scope, and supportability issues that should be resolved by questions or brainstorming before planning continues.
Follow ../references/host-interaction-contract.md.
Call the exact host question tool named in
../references/host-interaction-contract.md when that tool is available. Do
not ask for raw 1/2/3 replies when the host already offers a choice surface.
When the workflow spans multiple material steps, use the host task-tracking
tool named in ../references/host-interaction-contract.md to create and
maintain a short task list.
Ask one question at a time. Prefer concise single-select choices when natural options exist.
When multiple implementation or reliability postures are viable, present a short predicted choice list with the recommended label first and rely on the host's native freeform final path when it exists. When a planning question has a predictable answer space, prefer the same recommended-first portable option shape instead of a broad open-ended prompt.
Prefer to ask at least one targeted planning question when the answer would materially improve scope, sequencing, tradeoffs, or execution safety. Treat the user's answers and corrections as part of the planning record, not as throwaway chat.
Do not load every reference file by default. Load only what the current phase needs:
references/universal-planning.md only when the task is clearly a
non-software planning problem.references/visual-communication.md only when the plan structure would
materially benefit from a dependency graph, interaction diagram, or
comparison table.../references/research/research-brief-contract.md when deciding
whether a saved docs/research/ brief is fresh and in-scope enough to reuse.../references/research/activation-heuristics.md when deciding whether
to reuse a saved brief, skip external research, or run targeted follow-up
research.../references/research/source-ranking-and-synthesis.md when current
external guidance, standards, or best practices materially affect the plan.../decision/SKILL.md when planning reveals an unresolved durable
decision, existing decision-record conflict, or terminology conflict that
would change the plan.../decision/references/decision-record-format.md only when the plan
must review or cite a durable decision-record shape.../decision/references/context-format.md only when planning must read
or update project context, glossary, or bounded-context terminology.../references/architecture-code-quality/activation-heuristics.md when
deciding whether the work is architecture-bearing enough to need explicit
boundary or pattern decisions.../references/architecture-code-quality/pattern-families.md when the
plan must compare named patterns or architectural styles.../references/architecture-code-quality/output-contract.md when
drafting Architecture and Pattern Decisions or equivalent specialist
sections.references/unit-examples.md only when drafting implementation units,
choosing test posture, or repairing output that is drifting from the required
unit schema.references/issue-slice-export.md only when the user asks to create,
export, or prepare issue-ready vertical slices from the plan.references/deepening-workflow.md only when Phase 5.3 determines the
plan should be strengthened after the first draft is written.references/plan-handoff.md only after the plan file exists on disk and
the confidence check is complete.../references/workflow-gates.md after the plan file exists and before
presenting the final user choice.../observability/references/service-readiness-matrix.md only when the
work changes runtime behavior, contracts, retries, queues, migrations, or
other blast-radius-sensitive service boundaries.$fw:brainstorm produced a
requirements document, planning should build from it rather than re-inventing
behavior.work begins.tdd posture unless an explicit exception applies. Use
characterization for fragile existing behavior that must be pinned first,
and no-new-tests only for generated, configuration-only, documentation-
only, trivial mechanical, or otherwise disproportionate units. State the
exception and verification path whenever the unit is not tdd.$fw:work, not the plan. When
TDD fits, each material hypothesis should map to a concrete red signal and a
green completion signal.work must preserve.docs/research/ briefs first, then run only the narrow follow-up research
needed to close planning gaps. Fold the decision-changing findings and
recommendation into plan decisions instead of creating a side report by
default.decision; do not silently
overwrite settled project language or choices.Every plan should contain:
tdd,
characterization, or no-new-tests, with a brief reasonserial or
parallel-ready, with a brief reasonAGENTS.md, CLAUDE.md, and local testing references when
present, and assumes repo tooling exists even when command discovery is
deferredtdd units, 1-3 material hypotheses with explicit red and green proof
points grounded in existing or new testsArchitecture and Pattern Decisions section or equivalent that names current repo truth, candidate
options, the chosen direction, rejected lighter/heavier options, and clean-
code constraints for executionA plan is ready when an implementer can start confidently without needing the
plan to write the code for them, and when the user can review what execution
would do before deciding whether to $fw:deepen the plan or start
$fw:work. The handoff should also make it easy for the user to see what
changed during planning, what remains open, what the review pass found, and
what execution would start with.
<feature_description> #$ARGUMENTS </feature_description>
If the feature description above is empty, ask the user: "What would you like to plan? Describe the task, goal, or project you have in mind."
If the input is present but unclear or underspecified, do not abandon the workflow. Ask one or two clarifying questions, or use the planning bootstrap to establish enough structure.
IMPORTANT: All file references in the plan document must use repo-relative
paths such as src/models/user.rb, never absolute paths.
If the user references an existing plan file or there is an obvious recent
matching plan in docs/plans/:
Deepen intent: The word "deepen" in reference to a plan is the primary
trigger for the deepening fast path. When the user says "deepen the plan",
"deepen my plan", or "run a deepening pass", the target document is a plan in
docs/plans/, not a requirements document.
Words like "strengthen", "confidence", "gaps", and "rigor" are not enough on their own to trigger a holistic deepening pass. Prefer to confirm before entering the fast path unless the user clearly targeted the plan as a whole.
Once the plan is identified and appears complete:
references/universal-planning.md for editing or deepening instead of the
software deepening flowNormal editing requests should not trigger the fast path.
If the task involves building, modifying, or architecting software, continue.
If the task is a non-software multi-step goal worth planning, read
references/universal-planning.md and follow that workflow instead.
If the task is genuinely ambiguous, ask before routing.
For quick help, factual lookups, or single-step tasks, only skip the planning workflow when this skill was auto-selected rather than directly invoked.
Before asking planning questions, search docs/brainstorms/ for files matching
*-requirements.md.
Treat a requirements document as relevant when:
If multiple source documents match, ask which one to use.
If a relevant requirements document exists:
(see origin: <source-path>)If no relevant requirements document exists, planning may proceed from the user's request directly.
If no relevant requirements document exists, or the input needs more structure:
$fw:brainstorm as a suggestion — but still offer to
continue planning hereKeep the bootstrap brief.
If major product questions remain unresolved:
$fw:brainstorm againIf the request turns out to be a symptom without a known root cause, say so
clearly and do a brief investigation first rather than pretending planning can
start responsibly. If the issue is already understood and the fix is obvious,
suggest $fw:work as a faster alternative while still allowing planning.
If the origin document contains Resolve Before Planning or similar blockers:
If true product blockers remain:
$fw:brainstorm (Recommended) - resolve behavior, scope, or
success criteria before planningDo not continue planning while true blockers remain unresolved.
If the primary input is a requirements, spec, or design document and it was not just reviewed in the current session, ask:
Review the source document before planning?
Call the host question tool with a portable 2-3 option menu:
document-review on the source document
to find simplification, feasibility, scope, and supportability issues before
drafting the implementation planSkip the prompt only when the document was already reviewed in this session, the document contains clear recent review evidence, or the user explicitly asks to plan without another review.
If the user chooses review first, run document-review on the source document.
Use mode:headless in automated or pipeline contexts. After review:
$fw:brainstorm or explicit user questions before planningP0 or P1 findings remain, ask whether to resolve them first or
continue with explicit assumptions before drafting the planClassify the work into one of these depths:
If depth is unclear, ask one targeted question and then continue.
Build a concise planning context summary:
Always do local research:
AGENTS.md and CLAUDE.md guidance when present and when it materially
affects the plan, especially testing methodology, workflow expectations, and
project idiomsdocs/solutions/ or other
durable learnings when they exist; search solution frontmatter by
files_touched, module, tags, problem_type, component, and title
before reading full docs. Prefer doc_status: active and follow
superseded_by when presentdocs/research/, search that local store by
frontmatter and title before broad external research; match on topic,
keywords, reuse_targets, and title. Prefer matching fresh briefs whose
reuse_targets include plan, and use freshness_basis plus
reuse_targets to decide whether they still fitWhen the platform supports delegated or parallel bounded research and policy allows it, you may split local research into small focused passes, for example:
If such delegation is unavailable, do the equivalent work directly.
Slack context is opt-in. If Slack tools exist and the user asked for them, gather organizational context. If tools exist but the user did not ask, note that Slack context is available on request.
When the work is runtime-risky, read
../observability/references/service-readiness-matrix.md and capture only the
dimensions that materially apply to this change. Do not force a full matrix
when the change is local and low-blast-radius.
Decide whether the plan should carry a lightweight execution posture signal. Default to TDD for behavior-bearing units. Use another posture only when the change is generated, configuration-only, documentation-only, mechanical, styling/text-only with no unit-testable behavior, characterization-first, or not reasonably testable at planning time.
For each implementation unit, choose exactly one test posture:
tdd — use when the unit changes externally observable behavior, a public
contract, a bug fix, a regression-prone code path, or a behavior-preserving
refactor that is reasonably testable now. This posture requires explicit red
and green proof points and tells $fw:work to load the tdd skill before
implementation.characterization — use when the first planning need is to lock current
behavior in a fragile, legacy, or poorly understood area before changing it.
State what behavior must be pinned and why a test-first failing proof point is
not the right first move for that unit.no-new-tests — use only for configuration-only, mechanical, generated,
documentation-adjacent, or otherwise disproportionate work. State why new
tests are not warranted and how completion will still be verified.Look for:
When the signal is clear, carry it forward explicitly in relevant
implementation units and summarize the overall posture mix in
## Testing Strategy. Ask the user only if the posture would materially change
sequencing or risk and cannot be responsibly inferred.
Do not turn this into exact command choreography. If test or coverage tooling is
not already documented in repo instructions, assume it exists and let
$fw:work discover the concrete command path during execution.
When TDD fits, frame the work as a red -> green -> refactor loop at plan level:
A material hypothesis is one externally observable behavior, contract change, or regression risk worth proving. Do not explode this into line-by-line assertions or every branch-level detail.
Before deciding to browse broadly, check whether a matching saved research brief already covers the topic. Treat a fresh matching brief as the default external-context input for planning. If the brief is stale or only partially answers the question, keep it as context and decide whether targeted follow-up research is needed rather than restarting the topic from zero.
Based on the origin document, user signals, local findings, and any saved research brief, decide whether external research or targeted follow-up research adds value.
Lean toward external research or targeted follow-up research when:
Skip external research when:
Announce the decision briefly before continuing.
If external research is useful, gather only the smallest set of sources that materially improve the plan or close the unresolved gap from a saved brief. Prefer official docs and primary sources for technical questions. Parallelize independent research threads only when policy and tools allow it.
Summarize:
If the current classification is Lightweight and research shows that the work touches external contract surfaces, reclassify to Standard.
Examples:
For Standard or Deep plans, or when flow completeness is still unclear:
If the platform supports a specialist analysis pass and policy allows it, you may use one. Otherwise perform the analysis directly.
Build a planning question list from:
For each question, decide whether it should be:
Ask the user only when the answer materially affects architecture, scope, sequencing, or risk and cannot be responsibly inferred.
Do not run tests, build the app, or probe runtime behavior in this phase.
feat: Add user authenticationfeat, fix, or refactordocs/plans/YYYY-MM-DD-NNN-<type>-<descriptive-name>-plan.mddocs/plans/ if it does not existFor Standard or Deep plans, briefly consider who is affected — end
users, developers, operations, or other teams — and reflect that where useful
in System-Wide Impact.
Break the work into logical implementation units. Each unit should usually be a meaningful change an implementer could land as an atomic commit and track as one execution task.
Good units are:
parallel-ready only
when their write sets and reasoning truly do not collide- [ ] syntaxAvoid:
Before detailing units, decide whether an overview would help a reviewer validate the intended approach.
Use the medium that best fits the work:
| Work involves... | Best overview form |
|---|---|
| DSL or API surface design | Pseudo-code grammar or contract sketch |
| Multi-component integration | Mermaid sequence or component diagram |
| Data pipeline or transformation | Data flow sketch |
| State-heavy lifecycle | State diagram |
| Complex branching logic | Flowchart |
| Mode/flag combinations or multi-input behavior | Decision matrix |
| Single-component with non-obvious shape | Pseudo-code sketch |
Frame every sketch with:
This illustrates the intended approach and is directional guidance for review, not implementation specification.
Keep sketches concise.
For greenfield plans that create a new directory structure, include an
## Output Structure section when the layout itself is a meaningful design
decision.
Skip it when:
For each unit, include:
horizontal exception and explain why it cannot be a vertical sliceserial or parallel-ready, with a
brief reasontdd, characterization, or
no-new-tests, with a brief reasonFeature-bearing units and other materially testable code changes should include
test file paths in **Files:**.
Use Execution mode deliberately:
serial — keep the unit ordered or inline even if the file list looks small,
because it establishes shared decisions, touches cross-cutting seams, or is
otherwise not a good parallel batch candidateparallel-ready — the unit is intentionally bounded so $fw:work may
consider it for concurrent execution after dependencies are satisfied and a
fresh shared-write safety check passesDefault to serial unless the unit is genuinely independent enough that later
execution should not have to infer that posture from scattered hints.
For TDD-appropriate units, every meaningful hypothesis should be anchored to an existing or new test that can fail before the code change and pass after it. The goal is to give the worker a concrete truth source for completion, not just generic coverage intent.
Use the testing fields distinctly:
no-new-tests units with no behavioral surface, use n/a -- [reason]tdd, omitted or marked n/a otherwisetdd, omitted or marked n/a otherwisenone when the green signal is sufficientDo not copy the same sentence into all four fields.
Use vertical slices as the default unit boundary:
For TDD units, the vertical slice should map to the first observable behavior
or tracer bullet that $fw:work can take red, green, and then refactor before
moving to the next slice.
If the output starts drifting from this schema, stop and read
references/unit-examples.md before continuing.
When a unit changes a public contract, call that out explicitly in the
**Approach:**, **Test scenarios:**, or both. Public contracts include
user-facing behavior, request/response shapes, exported APIs, CLI flags,
event payloads, schema-visible behavior, and integration boundaries consumed by
other systems.
Use Execution note sparingly.
Use Execution mode precisely. parallel-ready is permission for bounded
concurrent execution later, not a vague hope that parallelism might work out.
Do not turn units into verbose process theater. When TDD fits, capture the red and green proof points without spelling out full coding choreography.
If something matters but is not knowable yet, record it explicitly under deferred implementation notes rather than pretending to resolve it now.
Use one planning philosophy across all depths. Change the amount of detail, not the boundary between planning and execution.
Lightweight
Standard
Deep
For sufficiently large, risky, or cross-cutting work, add only the sections that genuinely help:
Omit clearly inapplicable optional sections, especially for Lightweight plans.
---
title: [Plan Title]
type: [feat|fix|refactor]
status: active
date: YYYY-MM-DD
origin: docs/brainstorms/YYYY-MM-DD-<topic>-requirements.md # include when planning from a requirements doc
deepened: YYYY-MM-DD # optional, set when the confidence check substantively strengthens the plan
---
# [Plan Title]
## Overview
[What is changing and why]
## Problem Frame
[Summarize the user/business problem and context. Reference the origin doc when present.]
## Requirements Trace
- R1. [Requirement or success criterion this plan must satisfy]
- R2. [Requirement or success criterion this plan must satisfy]
## Scope Boundaries
- [Explicit non-goal or exclusion]
### Deferred to Separate Tasks
- [Work that will be done separately]: [Where or when]
## Context & Research
### Relevant Code and Patterns
- [Existing file, class, component, or pattern to follow]
### Institutional Learnings
- [Relevant active-repo `docs/solutions/` insight]
### Saved Research Briefs
- [Relevant `docs/research/` brief, freshness basis, and why it still applies]
### External References
- [Relevant external docs or best-practice source, if used]
## Key Technical Decisions
- [Decision]: [Rationale]
## Testing Strategy
- **Project testing idioms:** [What `AGENTS.md`, `CLAUDE.md`, local tests, or
durable refs say to follow]
- **Posture selection rule:** [Per unit choose exactly one of `tdd`,
`characterization`, or `no-new-tests`, and use repo context to justify it]
- **Plan-level posture mix:** [Briefly summarize which units are expected to use
`tdd`, `characterization`, and `no-new-tests`, and why that split fits this
plan]
- **Material hypotheses:** [For each `tdd` unit, identify 1-3 externally
observable behaviors, contract changes, or regression risks worth proving]
- **Red -> green proof points:** [For each TDD-appropriate unit, name the
existing or new failing test to start from and the passing condition that
proves the hypothesis]
- **Tooling assumption:** [Assume repo test and coverage tooling exists. Use
documented project instructions when present; otherwise let `$fw:work`
discover the concrete commands]
- **Public contracts to protect:** [User-facing flows, APIs, CLI flags, event
payloads, schema-visible behavior, integrations]
- **Primary test surfaces:** [Which suites, layers, or file clusters should
carry the coverage]
- **Test patterns to mirror:** [Existing tests, helpers, fixtures, factories,
or support utilities to extend]
## Dependencies And Parallelism
- **Critical path:** [Unit 1 -> Unit 3 -> Unit 4, or `straight-line`]
- **Parallel-ready sets:** [After Unit 1, Units 2 and 3 may run in parallel, or
`none`]
- **Serial-only units:** [Units that must stay ordered because they establish
shared seams, reconcile prior edits, or otherwise should not be batched]
## Open Questions
### Resolved During Planning
- [Question]: [Resolution]
### Deferred to Implementation
- [Question or unknown]: [Why it is intentionally deferred]
## Output Structure
[directory tree showing new directories and files]
## High-Level Technical Design
> *This illustrates the intended approach and is directional guidance for review, not implementation specification.*
[Pseudo-code grammar, Mermaid diagram, data flow sketch, or state diagram]
## Implementation Units
- [ ] **Unit 1: [Name]**
**Vertical slice:** [Behavior, workflow contract, API contract, or user outcome
delivered end to end; or `horizontal exception` with reason]
**Goal:** [What this unit accomplishes]
**Requirements:** [R1, R2]
**Dependencies:** [None / Unit 1 / external prerequisite]
**Execution mode:** [`serial` | `parallel-ready`] -- [one-sentence reason]
**Files:**
- Create: `path/to/new_file`
- Modify: `path/to/existing_file`
- Test: `path/to/test_file`
**Test posture:** [`tdd` | `characterization` | `no-new-tests`] -- [one-sentence reason]
**Approach:**
- [Key design or sequencing decision]
**Execution note:** [Optional sequencing or rollout note; do not repeat test posture]
**Technical design:** *(optional -- directional guidance, not implementation specification)*
**Patterns to follow:**
- [Existing file, class, or pattern]
**Test scenarios:**
- [Specific input/action -> expected outcome, or `n/a -- [reason]` for a true
`no-new-tests` unit]
**Red signal:** [Required for `tdd`: existing or new test/assertion expected to
fail before implementation. Otherwise `n/a -- [reason]`]
**Green signal:** [Required for `tdd`: that same test/assertion or contract
check passes when this unit is implemented correctly. Otherwise `n/a -- [reason]`]
**Verification:**
- [Additional evidence beyond the main proof point, or `none` when the green
signal is sufficient]
## System-Wide Impact
- **Interaction graph:** [What callbacks, middleware, observers, or entry points may be affected]
- **Error propagation:** [How failures should travel across layers]
- **State lifecycle risks:** [Partial-write, cache, duplicate, or cleanup concerns]
- **API surface parity:** [Other interfaces that may require the same change]
- **Integration coverage:** [Cross-layer scenarios unit tests alone will not prove]
- **Unchanged invariants:** [Existing behaviors this plan explicitly does not change]
## Risks & Dependencies
| Risk | Mitigation |
|------|------------|
| [Meaningful risk] | [How it is addressed or accepted] |
## Documentation / Operational Notes
- [Docs, rollout, monitoring, or support impacts when relevant]
## Sources & References
- **Origin document:** [docs/brainstorms/YYYY-MM-DD-<topic>-requirements.md](path)
- Saved research: [docs/research/YYYY-MM-DD-<topic>-research.md](path)
- Related code: [path or symbol]
- Related PRs/issues: #[number]
- External docs: [url]
- [ ]$fw:work can map them directly onto host task items
instead of inventing a second execution breakdownWhen the plan contains:
System-Wide ImpactOverview or Problem Frameread references/visual-communication.md.
Before finalizing, check:
$fw:brainstormAGENTS.md, CLAUDE.md, local test patterns,
and any durable testing references when presenttdd, characterization, or no-new-teststdd units define 1-3 material hypotheses rather than a vague or bloated
proof-point listExecution mode is explicit, justified, and consistent with its
dependencies and likely file overlapTest scenarios, Red signal, Green signal, and Verification are
distinct rather than duplicated$fw:workREQUIRED: Write the plan file to disk before presenting any options.
Save the complete plan to:
docs/plans/YYYY-MM-DD-NNN-<type>-<descriptive-name>-plan.md
Confirm:
Plan written to docs/plans/[filename]
In automated or pipeline contexts, skip interactive questions and make the needed choices automatically.
After writing the plan file, automatically evaluate whether the plan needs strengthening.
Two deepening modes exist:
The confidence check and document-review are different:
document-review checks coherence, feasibility, scope alignment,
simplification pressure, observability/supportability gaps, and role-specific
document qualityDetermine:
If the plan already appears sufficiently grounded, report:
Confidence check passed — no sections need strengthening.
and skip to document review.
When deepening is warranted, read references/deepening-workflow.md and execute
that flow.
After the confidence check, read references/plan-handoff.md and
../references/workflow-gates.md. Document review is mandatory — do not skip
it even if the confidence check already ran.
Apply the Plan-Ready gate before offering work. Close with the canonical
handoff card: Stage, Artifact, Ready, Open decisions, Evidence, and Next. The
Ready field is conditional until the user chooses whether to address review
findings, deepen the plan, or start $fw:work.
NEVER CODE. Research, decide, and write the plan.
npx claudepluginhub mopeyjellyfish/flywheel --plugin flywheelCreates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.