loop-plan
loop-plan turns a large request into a phased plan file. Each phase names the files, symbols, tests and commands it depends on, and each acceptance criterion can be checked by a command or a real run. The skill plans only. It does not change application code.
When to use it
Section titled “When to use it”Use it for large work:
- several features, or one feature that touches many files or components
- work that spans sessions and needs phase boundaries you can resume from
Do not use it for a small fix or a single-feature change. Make the change directly with tests, then run /review-impl (Claude Code) or $review-impl (Codex) if you want a review. The skill tells you this when the request is small, and plans it only if you still ask.
Invoke it
Section titled “Invoke it”/loop-plan move the tag storage in atlas-notes from one column to a join table$loop-plan move the tag storage in atlas-notes from one column to a join tableName the target and anything that must not change. You do not need a full specification: the skill asks for corrections at three points (see Talking with the skill).
What it works out by itself
Section titled “What it works out by itself”- The repository instructions (
CLAUDE.mdorAGENTS.md),git status, recent history, and the files, symbols, callers and tests the change touches. - Whether a library or platform behavior has been seen to work in this repository. When it has not, it runs a small spike under
.cross-review/spikes/<plan-name>/and records the result inFeasibility evidence. - The design that fits the existing patterns, reusing helpers by name. When the existing pattern is itself the problem, it gives you two options (patch within the pattern, or move to the standard) and waits for your choice.
- Where the plan goes. It runs the
planscommand, which creates.cross-review/plans/and prints the folder, then writes<kebab-case-summary>-plan.mdthere. The name describes the work, for examplemigrate-tags-plan.md, never a genericplan.md.
It asks you only for material decisions: product behavior, API, schema, dependencies, compatibility, or operations. Hard stops in a plan are reserved for data loss, security, and irreversible actions. Anything else that cannot be verified becomes a recorded assumption with a default and a fallback.
What the plan contains
Section titled “What the plan contains”The plan has these sections, in this order:
| Section | What it holds |
|---|---|
| Target, Scope, Invariants, Fixed decisions | What the work achieves, what it leaves out, and choices the implementation must not change on its own |
| Baseline | Completed work, and the real duration of each gate command |
| Design and project patterns | The pattern each change follows, with its path or symbol |
| Feasibility evidence | Assumption, spike or source, result, date |
| Capacity | Limits the plan sets, or N/A |
| Global Gates | Commands run once on the final commit |
| Review checkpoints | Which phases end with a review, and a final review of the whole diff |
| Plan Review | pending until a review or you approve the plan |
| Phase 1 to N | The phase blocks described below |
| Completion Criteria | The whole-plan outcome, with at least one end-to-end scenario and its expected output |
| Progress Log | Written during implementation: one line per phase, dated Decision: and Discovery: lines |
Each phase has: Goal, Current behavior and gap, Evidence, Pattern, Dependencies, Files and symbols, Behavioral contract, Documentation, Tests first, Anti-shortcut coverage, Implementation obligations, Acceptance criteria, Focused verification, Phase gates, Review, and Commit. Acceptance criteria are checkboxes that must be binary, each with the proof that shows it (a test, a real run, or an inspection):
- [ ] AC-1: a tag added to a note is returned with that note — proven by a test in the notes store suiteTalking with the skill
Section titled “Talking with the skill”The skill stops three times so you can correct it:
- After discovery. It restates the target, what is out of scope, and its assumptions.
- After the spikes. It shows the main design decisions, especially a patch versus a standard, and any breaking change.
- At handoff. It gives the plan path, whether git keeps the plan, the dashboard link when one is open, the phase count, and the review status. You then choose whether to run
/review-planor approve the plan yourself.
Each decision comes on its own, in five parts: context, problem, options with cost and risk, recommendation, and what happens next if you agree. A generic “ok” approves nothing that was not presented.
After the plan
Section titled “After the plan”- Run
/review-plan(or$review-plan) on the plan file. See review-plan. - When the reviewer approves,
Plan ReviewreadsAPPROVE (review-plan <session id>, <date>). If you approve directly, it readsAPPROVE (user, <date>). - Run
/loop-implement(or$loop-implement). It starts only from an approved plan. See loop-implement.
What you can say in chat
Section titled “What you can say in chat”| You say | What happens |
|---|---|
| A correction to the target or scope | The skill updates the plan and continues |
| “Use option 2” (or any named option) | The skill records the decision and changes the affected sections |
| “Approve it” | The skill writes APPROVE (user, <date>) after showing what it is approving |
| “Run the review first” | The skill hands over to /review-plan |
Example
Section titled “Example”Project: atlas-notes. Tags are stored as one comma-separated column on the notes table.
Request: /loop-plan move the tag storage in atlas-notes from one column to a join table
The skill writes .cross-review/plans/move-tags-to-join-table-plan.md with three phases:
- Schema and migration. It includes a retry path for a partial run and says that rerunning is safe.
- Read path: notes return their tags from the join table.
- Write path and removal of the old column.
Review checkpoints are after phase 1 (the migration changes state) and a final review of the cumulative diff. The plan review is still pending until it is approved.
See Plans for where plans live, how git treats them, and how the dashboard shows them.
