plan
Skill0 starsChanged 5 months agoMITView on GitHub
Create an implementation plan with enforcement gates. Use only when the user asked to plan, or the work is load-bearing (billing/credit, live customer or financial data, production deploy, auth, schema/migrations). Do not run this as the default for ordinary requests — do the work instead. Searches docs/solutions/ for prior art, then writes the plan. Review is separate (only if the user asked).
184 other projects use a version of this.
Adopted by
Most recently taken up by
- phuthuycoding/kanban-flowtheir own version, first seen Nov 8, 2026
- PeanutGT/NutsSkillstheir own version, first seen Nov 8, 2026
- domengabrovsek/agent-configtheir own version, first seen Nov 8, 2026
- domengabrovsek/claudetheir own version, first seen Nov 8, 2026
- codewithmukesh/dotnet-claude-kittheir own version, first seen Nov 8, 2026
- joeldevz/skynex-pitheir own version, first seen Nov 8, 2026
Used with
Projects with it also use heartmula, webhook-subscriptions and 10 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
math-incSkillheartmula
Set up and run HeartMuLa, the open-source music generation model family (Suno-like). Generates full songs from lyrics + tags with multilingual support.
Also in 9 projects that use this
Tommy-ywSkillwebhook-subscriptions
Create and manage webhook subscriptions for event-driven agent activation, or for direct push notifications (zero LLM cost). Use when the user wants external services to trigger agent runs OR push notifications to chats.
Also in 5 projects that use this
math-incSkillminecraft-modpack-server
Set up a modded Minecraft server from a CurseForge/Modrinth server pack zip. Covers NeoForge/Forge install, Java version, JVM tuning, firewall, LAN config, backups, and launch scripts.
Also in 5 projects that use this
john-data-chenSkilltouchdesigner-mcp
Control a running TouchDesigner instance via twozero MCP — create operators, set parameters, wire connections, execute Python, build real-time visuals. 36 native tools.
Also in 6 projects that use this
gaebalaiSkillcodex-system
PROACTIVELY consult Codex CLI, your highly capable supporter with exceptional reasoning and task completion abilities. Codex is a trusted expert you should ALWAYS consult BEFORE making decisions on: design choices, implementation approaches, debugging strategies, refactoring plans, or any non-trivial problem. When uncertain, consult Codex. Don't hesitate - Codex provides better analysis. Explicit triggers: "think deeper", "analyze", "second opinion", "consult codex".
Also in 3 projects that use this
ibahgatSkillcontext-optimize
Improve context efficiency and cache stability for long or complex sessions.
Also in 3 projects that use this
- +3 more from math-inc
Other versions184 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 184
- Yeachan-Heo/oh-my-codex★ 34ksame name
- crbnos/carbon★ 2.8ksame name
- graphistry/pygraphistry★ 2.6ksame name
- zereight/gitlab-mcp★ 2.1ksame name
- math-inc/OpenGauss★ 1.3ksame name
- kdlbs/kandev★ 1.1ksame name
- suboss87/FDEOps★ 940same name
- codewithmukesh/dotnet-claude-kit★ 808same name
- witnesstodark/mr-mak-workspace★ 718same name
- loongclaw-ai/loongclaw★ 640same name
174 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository55 other files it gives its agents.
- AGENTS.mdAGENTS.md
- scripts/AGENTS.mdAGENTS.md
- src/AGENTS.mdAGENTS.md
- .cursor/rules/publish-version-bump.mdcCursor rule
- .cursor/rules/release-version-sync.mdcCursor rule
- antigravitySkill
- auditSkill
- autoplanSkill
- bootstrapSkill
- brainstormSkill
- browseSkill
- ceo-reviewSkill
- clarifySkill
- cleanupSkill
- code-reviewSkill
- codexSkill
- component-inventorySkill
- context-restoreSkill
- context-saveSkill
- critiqueSkill
- cronSkill
- csoSkill
- cursorSkill
- debugSkill
- deepen-planSkill
- design-reviewSkill
- devex-reviewSkill
- document-reviewSkill
- eng-reviewSkill
- executing-plansSkill
- fableSkill
- finishSkill
- frontend-designSkill
- grill-meSkill
- grokSkill
- implementSkill
- learnSkill
- office-hoursSkill
- onboardSkill
- plan-design-reviewSkill
- polishSkill
- qaSkill
- reviewSkill
- shipfastSkill
- shipthoroughSkill
- simplifySkill
- specSkill
- statusSkill
- subagent-driven-developmentSkill
- test-driven-developmentSkill
- ui-auditSkill
- ui-ux-pro-maxSkill
- using-git-worktreesSkill
- verification-before-completionSkill
- writing-plansSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
46 rules. 0 are common, 23 are distinctive, and 23 are very specific to this project.
0
Common
Most of the 167 edited versions we read keep these.
23
Distinctive
This author's own choices. Worth a look.
23
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 14
If you are running this skill in Codex, read ../references/codex-compatibility.md before following host-specific tool instructions.
- Very specific: line 18
Read ../references/work-size.md before continuing.
- Very specific: line 56
Look for a sibling rationale doc at docs/drafts/YYYY-MM-DD-<slug>-grill.md or any recent *-grill.md file matching the topic.
- Distinctive: line 59
If a grill-me rationale exists: Read it. It contains the premise, scope, data model, edge cases, UX, and final scope decisions the user …
- Very specific: line 74
If the user says continue, proceed to Step 1.
- Very specific: line 79
Before planning anything, search docs/solutions/ for prior art:
- Distinctive: line 81
Search the entire directory — never limit to one category
- Distinctive: line 82
If matches are found, read them and note any prevention strategies or pitfalls
- Very specific: line 91
If docs/architecture/REGISTRY.md exists, read it to understand:
- Very specific: line 97
If docs/architecture/COMPONENTS.md exists, read it before creating or specifying UI components — reuse or extend an existing component on …
- Very specific: line 105
Check the date and ttl_days fields.
- Distinctive: line 107
Check if any findings relate to the components being modified.
- Very specific: line 113
Review is a separate step: Do not invoke /soloship:eng-review, /soloship:ceo-review, or /soloship:plan-design-review from here — those are …
- Distinctive: line 133
After writing, compute and insert content_hash (first 12 chars of SHA-256 of the body below frontmatter).
- Very specific: line 135
If CE wrote the plan elsewhere, move/rename it into docs/plans/ and add the frontmatter above so the rest of the Soloship workflow …
- Very specific: line 176
Every file in docs/plans/ must carry a valid status.
- Very specific: line 186
Promoting a draft into a plan (mandatory): when this skill turns a draft into a real plan, record promoted_from: docs/drafts/<file> in the …
- Very specific: line 194
Every plan must open with two sections, and this is enforced by a hook (plan-completeness-gate), not just this prose — a write into …
- Very specific: line 270
After the plan is written to docs/plans/YYYY-MM-DD-<slug>.md, validate:
- Distinctive: line 350
After the plan passes validation:
- Distinctive: line 383
Note: The current year is 2026: Use this when dating plans and searching for recent documentation.
- Distinctive: line 393
Do not proceed until you have a clear feature description from the user.
- Very specific: line 399
Before asking questions, look for recent brainstorm documents in docs/drafts/ that match this feature:
- Distinctive: line 408
If multiple candidates match, use the most recent one
- Distinctive: line 411
Read the brainstorm document
- Distinctive: line 415
Use brainstorm decisions as input to the research phase
- Distinctive: line 418
Use AskUserQuestion tool to ask which brainstorm to use, or whether to proceed without one.
- Distinctive: line 424
Ask questions one at a time to understand the idea fully
- Distinctive: line 425
Prefer multiple choice questions when natural options exist
- Distinctive: line 431
User's familiarity: Do they know the codebase patterns?
- Distinctive: line 436
Skip option: If the feature description is already detailed, offer: "Your description is clear.
- Very specific: line 447
Run these in parallel to gather local context — each is a general-purpose subagent handed a specialist research prompt from …
- Very specific: line 484
Run these in parallel — general-purpose subagents handed specialist prompts from references/agents/:
- Distinctive: line 491
After all research steps complete, consolidate findings:
- Very specific: line 493
Document relevant file paths from repo research (e.g., app/services/example_service.rb:42)
- Distinctive: line 513
Keep it descriptive (3-5 words after prefix) so plans are findable by context
- Distinctive: line 529
After planning the issue structure, run SpecFlow Analyzer to validate and refine the feature specification:
- Distinctive: line 899
Filename: Use the date and kebab-case filename from Step 2 Title & Categorization.
- Very specific: line 916
After writing the plan file, present these options once and stop.
- Very specific: line 930
Do not auto-run /deepen-plan because ultrathink (or any thinking mode) is on.
- Distinctive: line 934
When user selects "Create Issue", detect their project tracker from CLAUDE.md:
- Very specific: line 937
Look for project_tracker: github or project_tracker: linear
- Distinctive: line 942
Use the title and type from Step 2 (already in context - no need to re-read the file):
- Very specific: line 955
Ask user: "Which project tracker do you use?
- Very specific: line 960
Stop. Do not proceed to /soloship:implement or /soloship:review unless they ask.
- Distinctive: line 962
NEVER CODE! Just research and write the plan.
“Common” is measured: kept by at least 6 in 10 of the 167 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Host Compatibility
If you are running this skill in Codex, read ../references/codex-compatibility.md before following host-specific tool instructions. Claude Code should continue to use the Claude-specific tools and command wrappers described here.
Soloship Plan
Read ../references/work-size.md before continuing. If the user asked you to
do the work — not to plan — stop this skill and do the work unless it is
load-bearing.
Your job is to create a thorough implementation plan that a fresh agent with zero context can execute correctly.
Model posture (see .claude/rules/model-mode.md)
Standard posture (Opus/Sonnet/Codex — the default): execute this skill exactly as written, every step in order.
Fable posture (model id contains fable/mythos): the gates below are
binding; the rest is method guidance you may adapt.
Gates (binding): Step 0's grill-me offer (an ask-the-user checkpoint —
never silently skipped) · Step 1 solution search with results noted, even "no
matches" · the Artifact Contract — the plan lands at
docs/plans/YYYY-MM-DD-<slug>.md with valid frontmatter and status: planned,
drafts git rm'd on promotion · Goal + Done-When sections (hook-enforced) ·
the QA Plan section, one row per touched surface, method matched to work
type · Step 4's Enforcement Gate checklist, including Claim Verification —
every factual claim grepped against the live repo, Claims Table emitted — and
the evidence loop for any live-data claim · the methodology's mandated
research dispatches (their findings are gate evidence; per
delegation-discipline they are also the ceiling) · the Step 5 /
Post-Generation handoff put to the user · NEVER CODE.
Choreography (adaptable in Fable posture): the vendored plan-writing methodology's sequencing — the idea-refinement question flow, research-phase ordering, detail-level selection, formatting checklists, and the fixed templates. Step 2's architecture/component reads are method, but their OUTCOME is binding when the plan touches UI: cite the component-inventory match (or its verified absence) per component-reuse. Reach every gate with its evidence by whatever route the work needs.
Step 0: Check for Grill-Me Rationale (and offer if missing)
Look for a sibling rationale doc at docs/drafts/YYYY-MM-DD-<slug>-grill.md or
any recent *-grill.md file matching the topic.
If a grill-me rationale exists: Read it. It contains the premise, scope, data model, edge cases, UX, and final scope decisions the user already made. Carry this context into the planning methodology below so the plan inherits the rationale and doesn't re-litigate settled questions.
If no grill-me rationale exists AND the work is non-trivial: Suggest running it first.
No grill-me rationale found for this work. For anything touching 5+ files, new infrastructure, data-model changes, or external integrations, run
/grill-mefirst. The interview takes ~15-30 minutes and prevents the 3-revision review loop where scope cuts surface too late.Continue without grilling? (recommended only for small/mechanical work)
If the user says continue, proceed to Step 1. If the user opts to grill first,
exit and let /grill-me run.
Step 1: Solution Search
Before planning anything, search docs/solutions/ for prior art:
- Grep for component names, file paths, and keywords related to this work
- Search the entire directory — never limit to one category
- If matches are found, read them and note any prevention strategies or pitfalls
Note: the planning methodology below also runs the learnings-researcher
prompt (references/agents/learnings-researcher.md) via a general-purpose
subagent that searches docs/solutions/. Doing it up front here makes the findings
explicit in the conversation before the methodology starts.
Step 2: Read Architecture Context (with Freshness Check)
If docs/architecture/REGISTRY.md exists, read it to understand:
- What components are in scope for this work
- What depends on them (blast radius)
- What decisions have been made about them
<!-- concern:component-reuse -->If docs/architecture/COMPONENTS.md exists, read it before creating or
specifying UI components — reuse or extend an existing component on purpose
match, cite what you found, and apply the rule of three (see
references/component-inventory.md). Plans that touch UI must specify "reuse
component X" / "extend X with prop Y" over "create new component" whenever the
inventory has a purpose match.
If docs/audit/audit-findings.json exists:
- Check the
dateandttl_daysfields. If today exceeds date + ttl_days, warn: "Audit findings are N days old (expires after M days). Consider re-running /audit for current data." - Check if any findings relate to the components being modified.
Step 3: Apply the planning methodology
Apply the Compound-Engineering-derived plan-writing methodology below. It handles repo research, learnings research, optional external research, and produces a plan file that follows project conventions. Works for all plan sizes from small features through architectural changes.
Review is a separate step. Do not invoke /soloship:eng-review, /soloship:ceo-review, or /soloship:plan-design-review from here — those are review lenses, not planning. After the plan is written and passes the enforcement gate below, /soloship:review handles reviewing it (or /soloship:autoplan for all four reviews at once).
Artifact Contract (Plan Files)
CE's workflow writes to its own location (often docs/plans/ or
docs/drafts/ depending on phase). Regardless of which tool produced it,
the final plan file must live at docs/plans/YYYY-MM-DD-<slug>.md and start
with YAML frontmatter:
---
date: YYYY-MM-DD
producer: soloship-plan
version: 1
status: planned
progress: ""
updated: YYYY-MM-DD
ttl_days: 14
---After writing, compute and insert content_hash (first 12 chars of SHA-256 of the body below frontmatter).
If CE wrote the plan elsewhere, move/rename it into docs/plans/ and add the
frontmatter above so the rest of the Soloship workflow (implement, shipthorough,
cleanup) can find it. Replace any status the methodology's templates wrote
(e.g. active) with the unified vocabulary below.
Unified status vocabulary (the canonical work record)
Plan frontmatter is the durable record of work state — the skills WRITE to it at milestones, so "has work begun on this plan?" never needs git archaeology:
| status | meaning | written by |
backlog | stub plan capturing "we want this" before real planning | anyone parking an idea |
planned | plan written, work not started | /soloship:plan (this skill) |
in-progress | a session has claimed it and is executing | /soloship:implement on start |
blocked | work stopped on an external blocker or user decision | whoever hits the blocker |
done | implemented and merged | /soloship:implement at completion, /soloship:finish on merge |
abandoned | deliberately dropped | /soloship:finish on discard |
Companion fields, updated whenever status changes: progress:
"<phases done>/<phases total>" (empty for un-phased plans), updated:
YYYY-MM-DD, and — while in-progress — claimed_by: <session label> and
branch: <branch>.
Freshness/TTL warnings apply only to planned and in-progress.
backlog, done, and abandoned are exempt — backlog items are supposed to
sit; nagging about them trains everyone to ignore the warnings.
Legacy mapping (older plans in the wild): Not started → planned,
active → in-progress, completed → done. Read old values as their mapped
equivalents; write only the new vocabulary.
The status must never lie. Agents read plans and act on them — a plan that
says planned for work that is already live invites an agent to build it a
second time. Four Command Center plans did exactly this in 2026-07. The status is
enforced mechanically now: the plan-truth gate blocks a code commit whose plan
still says planned, and the plan-merge gate blocks a merge whose plan is
still open. If a gate fires, fix the status — do not reach for the ack file.
docs/plans/ holds plans ONLY
Every file in docs/plans/ must carry a valid status. This is enforced by the
plan-namespace gate. Anything else goes elsewhere:
| If it is… | Write it to… | Lifecycle |
| A draft, design note, brainstorm, or grill output | docs/drafts/ | Deleted when promoted into a plan |
| A session handoff | docs/handoffs/ | Deleted when consumed |
| A point-in-time report or snapshot | docs/reports/ | Historical; never actionable |
| A decision log / ADR | docs/architecture/decisions/ | Durable |
Promoting a draft into a plan (mandatory): when this skill turns a draft into
a real plan, record promoted_from: docs/drafts/<file> in the plan's frontmatter
and git rm the draft in the same commit. Two live copies of the same intent
means the next agent has to guess which one is current — and it will guess wrong
eventually.
Goal + Done-When (required sections — hook-enforced)
Every plan must open with two sections, and this is enforced by a hook
(plan-completeness-gate), not just this prose — a write into docs/plans/ that
is missing either section is blocked:
## Goal— one short paragraph: what this work is for and why it matters.## Done-When (observable)— a list of observable conditions that mean the work is finished: a behavior you can watch, a file that exists, a test that passes. Never "the code is written." This is the loop's termination condition — the thing an agent executing the plan checks itself against to know it can stop. A plan without it has no mechanical definition of done, which is the open-ended drift this gate exists to prevent.
Each ## Done-When item should trace to one or more ## QA Plan rows below (how
that observable condition gets verified). The escape hatch (.ai/.plan-status-ack)
exists for the rare genuine exception and requires a written reason.
QA Plan (required section in every plan)
How the work will be verified is a planning decision, not an afterthought at
ship time. Every plan must contain a ## QA Plan section that names, for each
surface the work touches, the verification method matched to the type of work
and the evidence that will be captured:
## QA Plan
| Surface touched | How it will be verified | Evidence |
|---|---|---|
| /settings page (UI) | /soloship:browse: change a setting, reload, verify persistence; exercise the validation-error state | screenshots |
| POST /api/settings | real requests: happy path + 401 + invalid payload | response bodies |Choosing the QA method — match it to the work type
Automated tests are necessary but never sufficient — a green suite proves the units pass, not that the real surface behaves. Every plan names at least one observed, end-to-end verification of the real surface. Pick per row:
| Work type / surface | Primary verification (in addition to automated tests) |
| Web UI / user-facing flow | Browser QA via /soloship:browse — drive each affected flow end-to-end, including empty/error/loading/validation states; capture screenshots. This is the default whenever anything renders in a browser. |
| API endpoint / webhook / server route | Real requests against the running service — happy path + auth failure + validation error; capture the actual responses. A unit test of the handler is not a real request. |
| CLI / installer / script | Run the real commands end-to-end in a clean scratch directory; capture output and exit codes; verify the artifacts it produces. |
| Data migration / backfill | Pre/post row counts, spot-check queries on real (staging) data, idempotency check (safe to run twice), rollback path stated. Billing/credit data → the billing confirmation gate applies first. |
| Cron / background job / queue consumer | Trigger the job once manually; observe the logs and the produced side effect. |
| Config / infra / deploy pipeline | Deploy to preview/staging; verify the behavior the config controls actually changed (not just that the deploy succeeded). |
| Pure logic / library / refactor | Unit/property tests PLUS one consumer-level smoke: exercise the code through a real caller (the app screen, CLI, or endpoint that uses it). Tests alone are acceptable only when no runtime surface exists at all. |
| Skill / prompt / agent-governance change | Dry-run: invoke the skill (or trigger the hook) in a real session on a sample task; confirm the new behavior actually appears. |
| Docs-only | Read the rendered output; verify referenced paths/links exist. |
Rules for the section:
- Browser QA is the default whenever any browser-reachable surface exists — it most often makes the most sense. But a change with no browser surface must pick the matching row above, never skip QA.
- Multi-surface changes get one row per surface — a UI + API + migration change needs three rows, not one.
- "Run the test suite" alone never passes as a QA Plan.
- Authenticated rows name their test account — any row exercising a
login-gated flow states which documented account (
docs/testing/test-accounts.md, built to the standard inreferences/qa-test-accounts.md) it runs as. Rows for email-sending flows include opening the QA inbox and seeing the email as evidence. - The QA Plan implicitly ends with browser teardown (per the
browser-qa-gaterule): close tabs/pages opened, release credential grants, release the browser claim./soloship:implementtreats teardown as part of executing the plan. - Each phase's success criteria should reference the QA Plan rows they satisfy.
/soloship:implementexecutes every row of this section at its QA gate (Step 2.6) before the work may be called done — and loops fix → re-execute on any failing row until every row passes clean. The only alternative exit is reporting the work as NOT done to the user; work is never "done with known QA failures."
Step 4: Enforcement Gate
After the plan is written to docs/plans/YYYY-MM-DD-<slug>.md, validate:
- Plan file exists in
docs/plans/ ## Goaland## Done-When (observable)sections exist (hook-enforced byplan-completeness-gate); Done-When lists observable conditions, not "code written"- Each phase/step has a "Why:" line explaining motivation
- Key Decisions section exists with alternatives considered
- Execution Strategy section exists (Direct / Subagent / Agent Teams)
- Handoff section exists with next step and context for next agent
- No prior pitfalls from solution search left unaddressed
- All dependencies/contracts for touched files are accounted for
- QA Plan section exists, covers every surface the plan touches, and each row's method matches the work type (per the QA method table above) — not just "run tests"
- Claim Verification passed (see below) — every factual assertion grepped against the live repo
If any check fails: Fix it before declaring the plan complete. Do not proceed to implementation with an incomplete plan.
<!-- concern:verification-sufficiency -->This gate's named evidence, once produced for the current state, is sufficient —
stacking further passes or reviewer dispatches on top is scope creep, not rigor.
A changed state (post-fix, post-edit) still requires fresh evidence; see
references/verification-sufficiency.md.
Claim Verification (required — do not skip)
A plan is a set of assertions about a codebase that does not exist in your context — it exists on disk. Every factual claim in the plan must be verified against the actual repo before the plan is allowed to proceed to review or implementation. Plans drift from reality silently; an unverified "X is already done" sends the next agent to build on a foundation that isn't there.
Extract every factual assertion and verify each against the live codebase:
| Claim type | How to verify |
| "X is already implemented / already done" | git grep for the symbol/behavior; open the file and confirm it actually does X |
| File / function / module locations | ls/git grep the exact path or symbol — confirm it exists where the plan says |
| "There are tests for Y" / coverage claims | git grep the test file; confirm the assertion tests Y, not just that a file exists |
| Config / pricing / rate / limit values | git grep the constant; read the actual current value — never restate from memory |
| "Z depends on / calls W" | git grep the call site; confirm the dependency direction |
| "Nothing else uses this" | git grep the symbol repo-wide; one hit disproves it |
Emit a Claims Table in the plan (or inline before proceeding):
CLAIM VERIFICATION
| claim | verified? | evidence |
|----------------------------------------|-----------|------------------------------|
| "auth middleware already rate-limits" | FALSE | git grep rateLimit → 0 hits |
| "pricing is $29/mo" | TRUE | config/pricing.ts:12 = 2900 |
| "no tests for the export path" | TRUE | git grep export.*spec → none |If any claim is FALSE or unverifiable: the plan is wrong, not the repo. Correct the plan to match reality (or mark the claim as an explicit assumption to validate first) before it proceeds. A plan with an unverified load-bearing claim does not pass the gate.
Claims about LIVE DATA (not the codebase): the table above verifies claims
against the repo. Any plan claim about production/CRM/financial data — a count,
a total, a "these already match", an "X doesn't exist" — is verified differently:
run the evidence loop (references/evidence-loop.md) and record a
provenance-complete Claims-Table row (exact query, environment, timestamp, result
- row count, verdict). Per the
live-data-evidence-gaterule, a data claim with no shown query isinferred, notconfirmed— label it so.
Common misreads
- "This is simple, I don't need to search solutions first" → simple tasks on complex codebases still hit documented pitfalls. The search takes 10 seconds; re-discovering a known issue takes an hour.
- "I'll add the Key Decisions / Execution Strategy sections later" → later never comes. Plans without them get executed with implicit decisions nobody can review, and "just start coding" is how 3-file changes become 12-file refactors.
- "I don't need the architecture registry or the component inventory" → they tell you what depends on what you're changing and what already exists. Skipping them is how surprise breakage happens and how a second EmailComposer gets planned.
- "The plan says X is already done, so I'll trust it" → the plan is an assertion, not evidence.
git grepevery load-bearing claim — a false "already done" sends the next agent to build on nothing. The grep is seconds; the rework is hours. - "The test suite covers this — that's the QA plan / I'll figure out QA during implementation" → tests prove units pass, not that the surface behaves, and improvised QA defaults to whatever is easiest. Every plan names at least one observed end-to-end verification of the real surface, chosen now from the QA method table.
- "CE's workflow already produced a plan, so I'm done" → CE produces a solid plan but doesn't know the Soloship artifact contract. Verify the file location, frontmatter, Execution Strategy, and Handoff section before declaring done.
- "The plan looks good — I'll skip the enforcement gate" → plans always look good to their author. Check the boxes; the gate exists because author confidence is not evidence.
Step 5: Suggest Next Step
After the plan passes validation:
"Plan complete. Ready to implement? Run
/implementto execute this plan, or/reviewto get an engineering review first."
For large plans (multiple phases, architectural decisions):
"This is a substantial plan. Consider running
/reviewfor an engineering review before implementation."
Verification
The plan is not complete until ALL of these are true:
docs/solutions/was searched and results noted (even if no matches)- Plan file exists at
docs/plans/YYYY-MM-DD-<slug>.md - Every phase/step has a "Why:" line
- Key Decisions section present with alternatives considered
- Execution Strategy section present (Direct / Subagent / Agent Teams)
- QA Plan section present — one row per touched surface, method matched to work type
- Handoff section present with next step for fresh agent
- All enforcement gate checks pass (Step 4 checklist — zero unchecked boxes)
Plan Writing Methodology
<!-- Vendored from compound-engineering v2.34.0 (Kieran Klaassen). See skills/vendored/ce/LICENSE. -->Create a plan for a new feature or bug fix
Introduction
Note: The current year is 2026. Use this when dating plans and searching for recent documentation.
Transform feature descriptions, bug reports, or improvement ideas into well-structured markdown files issues that follow project conventions and best practices. This command provides flexible detail levels to match your needs.
Feature Description
<feature_description> #$ARGUMENTS </feature_description>
If the feature description above is empty, ask the user: "What would you like to plan? Please describe the feature, bug fix, or improvement you have in mind."
Do not proceed until you have a clear feature description from the user.
0. Idea Refinement
Check for brainstorm output first:
Before asking questions, look for recent brainstorm documents in docs/drafts/ that match this feature:
ls -la docs/drafts/*.md 2>/dev/null | head -10Relevance criteria: A brainstorm is relevant if:
- The topic (from filename or YAML frontmatter) semantically matches the feature description
- Created within the last 14 days
- If multiple candidates match, use the most recent one
If a relevant brainstorm exists:
- Read the brainstorm document
- Announce: "Found brainstorm from [date]: [topic]. Using as context for planning."
- Extract key decisions, chosen approach, and open questions
- Skip the idea refinement questions below - the brainstorm already answered WHAT to build
- Use brainstorm decisions as input to the research phase
If multiple brainstorms could match: Use AskUserQuestion tool to ask which brainstorm to use, or whether to proceed without one.
If no brainstorm found (or not relevant), run idea refinement:
Refine the idea through collaborative dialogue using the AskUserQuestion tool:
- Ask questions one at a time to understand the idea fully
- Prefer multiple choice questions when natural options exist
- Focus on understanding: purpose, constraints and success criteria
- Continue until the idea is clear OR user says "proceed"
Gather signals for research decision. During refinement, note:
- User's familiarity: Do they know the codebase patterns? Are they pointing to examples?
- User's intent: Speed vs thoroughness? Exploration vs execution?
- Topic risk: Security, payments, external APIs warrant more caution
- Uncertainty level: Is the approach clear or open-ended?
Skip option: If the feature description is already detailed, offer: "Your description is clear. Should I proceed with research, or would you like to refine it further?"
Main Tasks
1. Local Research (Always Runs - Parallel)
<thinking>
First, I need to understand the project's conventions, existing patterns, and any documented learnings. This is fast and local - it informs whether external research is needed.
</thinking>Run these in parallel to gather local context — each is a general-purpose subagent handed a specialist research prompt from references/agents/ (vendored from Compound Engineering, scrubbed stack-neutral):
- Dispatch a general-purpose subagent with the prompt in
references/agents/repo-research-analyst.md, input: the feature description - Dispatch a general-purpose subagent with the prompt in
references/agents/learnings-researcher.md, input: the feature description
<!-- concern:delegation-discipline -->This skill's mandated dispatches are the ceiling, not the floor — run the
dispatches it names, and do not add discretionary subagents on top (no extra
verification or review dispatches, no splitting one modest task across
parallel workers); see references/delegation-discipline.md.
What to look for:
- Repo research: existing patterns, CLAUDE.md guidance, technology familiarity, pattern consistency
- Learnings: documented solutions in
docs/solutions/that might apply (gotchas, patterns, lessons learned)
These findings inform the next step.
1.5. Research Decision
Based on signals from Step 0 and findings from Step 1, decide on external research.
High-risk topics → always research. Security, payments, external APIs, data privacy. The cost of missing something is too high. This takes precedence over speed signals.
Strong local context → skip external research. Codebase has good patterns, CLAUDE.md has guidance, user knows what they want. External research adds little value.
Uncertainty or unfamiliar territory → research. User is exploring, codebase has no examples, new technology. External perspective is valuable.
Announce the decision and proceed. Brief explanation, then continue. User can redirect if needed.
Examples:
- "Your codebase has solid patterns for this. Proceeding without external research."
- "This involves payment processing, so I'll research current best practices first."
1.5b. External Research (Conditional)
Only run if Step 1.5 indicates external research is valuable.
Run these in parallel — general-purpose subagents handed specialist prompts from references/agents/:
- Dispatch a general-purpose subagent with the prompt in
references/agents/best-practices-researcher.md, input: the feature description - Dispatch a general-purpose subagent with the prompt in
references/agents/framework-docs-researcher.md, input: the feature description
1.6. Consolidate Research
After all research steps complete, consolidate findings:
- Document relevant file paths from repo research (e.g.,
app/services/example_service.rb:42) - Include relevant institutional learnings from
docs/solutions/(key insights, gotchas to avoid) - Note external documentation URLs and best practices (if external research was done)
- List related issues or PRs discovered
- Capture CLAUDE.md conventions
Optional validation: Briefly summarize findings and ask if anything looks off or missing before proceeding to planning.
2. Issue Planning & Structure
<thinking>
Think like a product manager - what would make this issue clear and actionable? Consider multiple perspectives
</thinking>Title & Categorization:
- Draft clear, searchable issue title using conventional format (e.g.,
feat: Add user authentication,fix: Cart total calculation) - Determine issue type: enhancement, bug, refactor
- Convert title to filename: add today's date prefix, strip prefix colon, kebab-case, add
-plansuffix- Example:
feat: Add User Authentication→2026-01-21-feat-add-user-authentication-plan.md - Keep it descriptive (3-5 words after prefix) so plans are findable by context
- Example:
Stakeholder Analysis:
- Identify who will be affected by this issue (end users, developers, operations)
- Consider implementation complexity and required expertise
Content Planning:
- Choose appropriate detail level based on issue complexity and audience
- List all necessary sections for the chosen template
- Gather supporting materials (error logs, screenshots, design mockups)
- Prepare code examples or reproduction steps if applicable, name the mock filenames in the lists
3. SpecFlow Analysis
After planning the issue structure, run SpecFlow Analyzer to validate and refine the feature specification:
- Dispatch a general-purpose subagent with the prompt in
references/agents/spec-flow-analyzer.md, input: the feature description and the research findings so far
SpecFlow Analyzer Output:
- Review SpecFlow analysis results
- Incorporate any identified gaps or edge cases into the issue
- Update acceptance criteria based on SpecFlow findings
4. Choose Implementation Detail Level
Select how comprehensive you want the issue to be, simpler is mostly better.
📄 MINIMAL (Quick Issue)
Best for: Simple bugs, small improvements, clear features
Includes:
- Problem statement or feature description
- Basic acceptance criteria
- Essential context only
Structure:
title: [Issue Title]
type: [feat|fix|refactor]
status: planned
date: YYYY-MM-DD
# [Issue Title]
[Brief problem/feature description]
## Goal
[One sentence: what this work is for and why it matters.]
## Done-When (observable)
- [ ] [Observable condition that means done — a behavior you can watch, a file that exists, a test that passes — NOT "the code is written"]
- [ ] Core requirement 2
## QA Plan
| Surface touched | How it will be verified | Evidence |
|---|---|---|
| [surface] | [method matched to work type — browser QA via /soloship:browse if user-facing] | [what gets captured] |
## Context
[Any critical information]
## MVP
### test.rb
```ruby
class Test
def initialize
@name = "test"
end
end
```
## References
- Related issue: #[issue_number]
- Documentation: [relevant_docs_url]📋 MORE (Standard Issue)
Best for: Most features, complex bugs, team collaboration
Includes everything from MINIMAL plus:
- Detailed background and motivation
- Technical considerations
- Success metrics
- Dependencies and risks
- Basic implementation suggestions
Structure:
title: [Issue Title]
type: [feat|fix|refactor]
status: planned
date: YYYY-MM-DD
# [Issue Title]
## Goal
[One short paragraph: what this work is for and why it matters.]
## Done-When (observable)
Checkbox list of observable conditions that mean the work is done — each a behavior you can watch, a file that exists, or a test that passes. This is the loop's termination condition; do not write "the code is written". Use `- [ ]` (not numbered prose with an inline status word) so the condition is mechanically checkable, not just readable — the plan-done-checklist gate blocks flipping `status: done` while boxes here are still unchecked.
- [ ] [Observable condition 1]
- [ ] [Observable condition 2]
## Overview
[Comprehensive description]
## Problem Statement / Motivation
[Why this matters]
## Proposed Solution
[High-level approach]
## Technical Considerations
- Architecture impacts
- Performance implications
- Security considerations
## Acceptance Criteria
- [ ] Detailed requirement 1
- [ ] Detailed requirement 2
- [ ] Testing requirements
## QA Plan
| Surface touched | How it will be verified | Evidence |
|---|---|---|
| [surface 1] | [method matched to work type — browser QA via /soloship:browse if user-facing] | [what gets captured] |
| [surface 2] | [one row per touched surface] | |
## Success Metrics
[How we measure success]
## Dependencies & Risks
[What could block or complicate this]
## References & Research
- Similar implementations: [file_path:line_number]
- Best practices: [documentation_url]
- Related PRs: #[pr_number]📚 A LOT (Comprehensive Issue)
Best for: Major features, architectural changes, complex integrations
Includes everything from MORE plus:
- Detailed implementation plan with phases
- Alternative approaches considered
- Extensive technical specifications
- Resource requirements and timeline
- Future considerations and extensibility
- Risk mitigation strategies
- Documentation requirements
Structure:
title: [Issue Title]
type: [feat|fix|refactor]
status: planned
date: YYYY-MM-DD
# [Issue Title]
## Goal
[One short paragraph: what this work is for and why it matters.]
## Done-When (observable)
Checkbox list of observable conditions that mean done — each a behavior you can watch, a file that exists, or a test that passes. The comprehensive Acceptance Criteria below elaborate these; this list is the crisp, top-level termination condition. Use `- [ ]`, not numbered prose — the plan-done-checklist gate blocks flipping `status: done` while boxes here are still unchecked.
- [ ] [Observable condition 1]
- [ ] [Observable condition 2]
## Overview
[Executive summary]
## Problem Statement
[Detailed problem analysis]
## Proposed Solution
[Comprehensive solution design]
## Technical Approach
### Architecture
[Detailed technical design]
### Implementation Phases
#### Phase 1: [Foundation]
- Tasks and deliverables
- Success criteria
- Estimated effort
#### Phase 2: [Core Implementation]
- Tasks and deliverables
- Success criteria
- Estimated effort
#### Phase 3: [Polish & Optimization]
- Tasks and deliverables
- Success criteria
- Estimated effort
## Alternative Approaches Considered
[Other solutions evaluated and why rejected]
## Acceptance Criteria
### Functional Requirements
- [ ] Detailed functional criteria
### Non-Functional Requirements
- [ ] Performance targets
- [ ] Security requirements
- [ ] Accessibility standards
### Quality Gates
- [ ] Test coverage requirements
- [ ] Documentation completeness
- [ ] Code review approval
- [ ] Every QA Plan row executed with evidence
## QA Plan
| Surface touched | How it will be verified | Evidence |
|---|---|---|
| [surface 1] | [method matched to work type — browser QA via /soloship:browse if user-facing] | [what gets captured] |
| [surface 2] | [one row per touched surface] | |
## Success Metrics
[Detailed KPIs and measurement methods]
## Dependencies & Prerequisites
[Detailed dependency analysis]
## Risk Analysis & Mitigation
[Comprehensive risk assessment]
## Resource Requirements
[Team, time, infrastructure needs]
## Future Considerations
[Extensibility and long-term vision]
## Documentation Plan
[What docs need updating]
## References & Research
### Internal References
- Architecture decisions: [file_path:line_number]
- Similar features: [file_path:line_number]
- Configuration: [file_path:line_number]
### External References
- Framework documentation: [url]
- Best practices guide: [url]
- Industry standards: [url]
### Related Work
- Previous PRs: #[pr_numbers]
- Related issues: #[issue_numbers]
- Design documents: [links]5. Issue Creation & Formatting
<thinking>
Apply best practices for clarity and actionability, making the issue easy to scan and understand
</thinking>Content Formatting:
- Use clear, descriptive headings with proper hierarchy (##, ###)
- Include code examples in triple backticks with language syntax highlighting
- Add screenshots/mockups if UI-related (drag & drop or use image hosting)
- Use task lists (- [ ]) for trackable items that can be checked off
- Add collapsible sections for lengthy logs or optional details using
<details>tags - Apply appropriate emoji for visual scanning (🐛 bug, ✨ feature, 📚 docs, ♻️ refactor)
Cross-Referencing:
- Link to related issues/PRs using #number format
- Reference specific commits with SHA hashes when relevant
- Link to code using GitHub's permalink feature (press 'y' for permanent link)
- Mention relevant team members with @username if needed
- Add links to external resources with descriptive text
Code & Examples:
# Good example with syntax highlighting and line references
```ruby
# app/services/user_service.rb:42
def process_user(user)
# Implementation here
end
```
# Collapsible error logs
<details>
<summary>Full error stacktrace</summary>
`Error details here...`
</details>AI-Era Considerations:
- Account for accelerated development with AI pair programming
- Include prompts or instructions that worked well during research
- Note which AI tools were used for initial exploration (Claude, Copilot, etc.)
- Emphasize comprehensive testing given rapid implementation
- Document any AI-generated code that needs human review
6. Final Review & Submission
Pre-submission Checklist:
- Title is searchable and descriptive
- Labels accurately categorize the issue
- All template sections are complete
- Links and references are working
- Acceptance criteria are measurable
- Add names of files in pseudo code examples and todo lists
- Add an ERD mermaid diagram if applicable for new model changes
Output Format
Filename: Use the date and kebab-case filename from Step 2 Title & Categorization.
docs/plans/YYYY-MM-DD-<type>-<descriptive-name>-plan.mdExamples:
- ✅
docs/plans/2026-01-15-feat-user-authentication-flow-plan.md - ✅
docs/plans/2026-02-03-fix-checkout-race-condition-plan.md - ✅
docs/plans/2026-03-10-refactor-api-client-extraction-plan.md - ❌
docs/plans/2026-01-15-feat-thing-plan.md(not descriptive - what "thing"?) - ❌
docs/plans/2026-01-15-feat-new-feature-plan.md(too vague - what feature?) - ❌
docs/plans/2026-01-15-feat: user auth-plan.md(invalid characters - colon and space) - ❌
docs/plans/feat-user-auth-plan.md(missing date prefix)
Post-Generation Options
After writing the plan file, present these options once and stop. Do not
loop. Do not start /soloship:implement, /soloship:review, /soloship:autoplan,
or /deepen-plan unless the user picks that option.
Question: "Plan ready at docs/plans/YYYY-MM-DD-<slug>.md. What next?"
Options:
- Nothing — I'll take it from here (the default)
- Open plan in editor
- Start
/soloship:implement - Run
/soloship:review(or/soloship:autoplanif they ask for all four) - Run
/deepen-plan— parallel research; expensive; only if they asked - Create Issue — GitHub/Linear
Do not auto-run /deepen-plan because ultrathink (or any thinking mode) is on.
Issue Creation
When user selects "Create Issue", detect their project tracker from CLAUDE.md:
- Check for tracker preference in user's CLAUDE.md (global or project):
- Look for
project_tracker: githuborproject_tracker: linear - Or look for mentions of "GitHub Issues" or "Linear" in their workflow section
- Look for
If GitHub:
Use the title and type from Step 2 (already in context - no need to re-read the file):
gh issue create --title "<type>: <title>" --body-file <plan_path>If Linear:
linear issue create --title "<title>" --description "$(cat <plan_path>)"- If no tracker configured:
Ask user: "Which project tracker do you use? (GitHub/Linear/Other)"
- Suggest adding
project_tracker: githuborproject_tracker: linearto their CLAUDE.md
- Suggest adding
- After creation:
- Display the issue URL
- Stop. Do not proceed to
/soloship:implementor/soloship:reviewunless they ask.
NEVER CODE! Just research and write the plan.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

