| type | Phoenix Skill |
| name | phoenix-plan |
| description | Decompose a clear intent into small, individually-verifiable steps before writing code — each step a slice you can prove pass/fail with phoenix_sense, ordered so the build stays green between them. Use after phoenix-think, when you have an Intent Contract and need an executable plan, or when the user says /phoenix-plan, "break this down", or "make a plan". |
| license | MIT |
phoenix-plan — small atomic steps, each with an objective finish line
Overview
A plan is only useful if you can prove each step is done. Phoenix plans in slices the self-heal
loop can verify one at a time — every step carries its own phoenix_sense check, the steps compose
up to the Intent Contract's acceptance gate, and the build stays green between them so any step is
independently revertible. A plan whose steps you can't check is a wish list.
When to use
- After
phoenix-think produced an Intent Contract with an acceptance check.
- Any multi-step change, refactor, or feature where order and blast radius matter.
- When a task "feels big" — planning is how you find the seams.
When NOT to use: a one-line change with an obvious check — just phoenix-build it directly.
The planning flow
Intent Contract (acceptance check)
│
▼
Decompose into ordered slices
│
▼ for each slice:
┌─────────────────────────────┐
│ goal (one line) │
│ check (a phoenix_sense) │ ← must be runnable & able to fail
│ risky? → snapshot first │
└─────────────────────────────┘
│
▼
Slices compose up to the acceptance check
Produce a step list like this
STEP 1 Add the failing test for the new behavior
check: {"kind":"command_exit","target":["pytest","-q","tests/test_x.py::test_new"],"expect":0}
(expected RED until step 2 — that's correct)
STEP 2 Implement the minimal code to pass step 1 risky? no
check: same as step 1, now expected GREEN
STEP 3 Wire it into the caller risky? YES → snapshot caller.py first
check: {"kind":"command_exit","target":["pytest","-q"],"expect":0} (full suite green)
ACCEPTANCE = step 3's full-suite check (from the Intent Contract)
Rules
- One check per step. If you can't attach a single objective check to a step, it's too big — split it.
- Green between steps. Order so the suite is green after each step; that makes every step revertible
and turns "it broke" into "roll back the last step", not "debug the whole change".
- Name the risky steps. Steps likely to break a passing check get a
phoenix_snapshot before editing
so phoenix_heal can roll back instantly.
- Use the graph to scope. Before planning a change to
X, ask phoenix-context "what breaks if I
change X?" — plan the real blast radius, not a guessed one. (Cheaper and more accurate than grepping.)
- The last step's check = the acceptance gate. The plan is wrong if the steps don't compose up to it.
Sizing heuristic
A good step is one you could implement and verify in a single focused pass. If a step needs "and then
also…", that's two steps. Smaller steps = tighter heal granularity = less wasted work on a failure.
Common Rationalizations
| Rationalization | Reality |
|---|
| "I'll plan it in my head and just build." | Unwritten plans have no verifiable steps; the first surprise becomes a debugging spiral. Write the checks down. |
| "This step is too small to need its own check." | A step without a check can't be healed in isolation — when it breaks you bisect the whole change. |
| "I'll figure out the blast radius as I go." | "As you go" means re-reading files every turn. Ask the graph once, plan the real scope. |
| "I'll snapshot later if I need to." | You need the snapshot after you've already overwritten the good state. Snapshot before the risky edit. |
Red Flags
- A step has no runnable check. → Split or rewrite it until it does.
- The suite would be red between two steps. → Reorder so green is the resting state.
- You're guessing what a change affects. →
phoenix-context the blast radius first.
- The plan has one giant "implement the feature" step. → That's not a plan; decompose it.
Next
Hand each step to phoenix-build (snapshot→edit→sense→heal). For "prove this behavior" steps, route
to phoenix-test.