Install
openclaw skills install @anderskev/quick-planUse when you need a bite-sized, TDD-driven implementation plan but do NOT have a brainstorm-beagle spec to plan against. quick-plan reconstructs intent from the current conversation, fans out domain-expert exploration subagents across the codebase, and synthesizes the same plan format write-plan produces — without requiring .beagle/concepts/<slug>/spec.md. Triggers on: "quick plan", "plan this out", "plan what we just discussed", "turn this into an implementation plan", "plan this without a spec", "I don't have a spec, just plan it", "write-plan but no spec". Make sure to use this skill whenever the user wants an implementation or TDD plan and there is no spec to plan against — even if they just say "plan it" after discussing a feature. Writes to .beagle/plans/<slug>/plan.md. If a finalized spec already exists at .beagle/concepts/<slug>/spec.md, prefer write-plan. Does NOT brainstorm specs, write code, or execute the plan — produces the plan document (and an optional handoff prompt) only.
openclaw skills install @anderskev/quick-planTurn the work already discussed in this session into the same comprehensive, TDD-driven implementation plan write-plan produces — but without a spec. An engineer (or downstream agent) can execute it task-by-task without re-deriving intent.
The output is a single markdown plan at .beagle/plans/<slug>/plan.md. The plan captures HOW — file structure, task decomposition, exact tests, exact commands. Because there is no spec, quick-plan also captures the WHAT and WHY inside the plan, in an Intent header it synthesizes from the conversation and verifies before locking.
write-plan leans on a reviewed spec for three things. quick-plan reconstructs each, because skipping them is how plans bake in unexamined assumptions:
| The spec gives write-plan… | quick-plan reconstructs it from… |
|---|---|
| WHAT / WHY (requirements, core value, out-of-scope) | The conversation — what the user has been asking for, correcting, and ruling out this session — distilled into an Intent Brief. |
| Key Decisions (vetted architectural choices) | Fanout domain-expert subagents that recommend an approach grounded in this codebase's real patterns and the stack's idioms. |
| Reference Points (analogous existing code) | The same fanout subagents, returning file:line analogs the plan mirrors. |
| A human-reviewed gate | A gap check: proceed silently when the conversation is unambiguous; ask the user targeted questions only where intent has real holes. |
The spec is a contract written before planning. quick-plan writes that contract during planning, from cheaper signals, and confirms only the load-bearing parts with the user. Everything downstream of the Intent Brief — task decomposition, TDD discipline, the recoverability test, the self-review gates — is identical to write-plan. Same output, different front-half.
Complete these steps in order:
file:line reference points, and idiom/pitfall guidance. See Fanout Exploration.AGENTS.md/CLAUDE.md (root and nested) for testing tiers, comment policy, commit format, forbidden patterns the plan must respect..beagle/plans/<slug>/plan.md only after explicit approval, then offer the execution handoff.Reconstruct Intent Brief from conversation
↓
Gap check ── real holes? ── Yes → ask targeted questions → fill Brief
└──────────────── No → proceed silently
↓
Fan out exploration + expert subagents (parallel) ─┐
Read project conventions (AGENTS.md / CLAUDE.md) ─┘→ merge findings into Brief
↓
Design file structure → Decompose into TDD tasks
↓
Self-review → fix inline
↓
Present draft → User review
├─ Changes? → Revise
└─ Approved? → Write to .beagle/plans/<slug>/plan.md
The terminal state is a written plan. quick-plan does not execute the plan, run tests, or modify production code. After writing it asks whether to generate an execution handoff prompt via the subagent-prompt skill (../../../beagle-core/skills/subagent-prompt/SKILL.md).
The conversation is the raw material the spec would otherwise be. Mine it before doing anything else, and write the result down — the Intent Brief is the contract the plan plans against, so it must be explicit, not held in your head.
Pull from the whole session, not just the last message: the feature asked for, behaviors described, corrections the user made ("no, it should…"), examples or error logs pasted, things explicitly ruled out, and any tech/library named. A correction the user made three messages ago is a requirement; treat it like one.
Draft the Intent Brief with these fields. This becomes the plan's Intent header verbatim:
If the conversation is too thin to fill Goal, Must-haves, and Out of scope at all, quick-plan is premature — the work hasn't been thought through enough to plan. Say so and offer brainstorm-beagle to shape it first, rather than inventing requirements to fill the gaps.
You have no reviewed spec, so you are the only check on whether the reconstructed intent is real or invented. After drafting the Brief, look at it with fresh eyes and ask: would two reasonable engineers build materially different things from this?
Proceed silently when the conversation already pins the answer — don't re-ask what the user just told you. Re-litigating settled intent is the fastest way to make a "quick" plan feel slow.
Ask targeted questions only for holes that would change the plan's shape:
Ask these as a short batch, not a drip. Anything you can answer yourself by reading the code, resolve in fanout — don't spend a user question on it. Record what you assumed (not asked) in the plan's Assumptions block so a future reader sees the decision.
This is what lets quick-plan match write-plan's rigor without a spec: instead of one sequential read of "relevant code," dispatch parallel subagents that are both explorers and domain experts for the area they own. They reconstruct the spec's Reference Points and Key Decisions from the actual codebase.
Scope the fanout to the regions the plan will plausibly touch — one subagent per cohesive area (a subsystem, a layer, a directory, an integration point). Two or three is typical; don't shard so finely that agents trip over each other or so coarsely that one agent owns the whole repo. If the task is a one-file change, skip the fanout and explore inline — the dispatch overhead isn't worth it.
Each subagent is briefed as a senior expert in that area's stack and returns a compact structured report: file map, conventions, exact test command(s), file:line reference points to mirror, idioms, pitfalls, and a recommended approach with risks. The full dispatch template is in references/fanout-brief.md — read it before dispatching.
If the agent environment supports subagents, dispatch them in parallel (one message, multiple tool calls) and pass paths, not file contents. If it does not, run the same briefs inline and sequentially — identical questions, identical structured output, just slower. Either way, fold every report into the Brief: reference points become the analogs your behavior contracts point at, recommended approaches become Approach signals, and surfaced pitfalls become spike candidates or named bug-class tests.
Reconcile, don't rubber-stamp. Experts disagree and codebases contradict their own conventions. When two reports conflict, or an expert's recommendation fights an existing pattern, surface it — as a gap-check question if it changes the plan's shape, or as a recorded Assumption if you can resolve it. An expert recommendation that contradicts a load-bearing comment in the code is an assumption-audit item, not a given.
The plan document — header, file structure, task blocks, TDD steps, self-review outcome — uses write-plan's template exactly: ../write-plan/references/plan-template.md. Read it; it is the single source of truth for the output shape, so the two skills never drift apart.
One override: quick-plan has no spec to link, so replace the template's > **Source spec:** … header line with the synthesized Intent block:
# [Feature Name] Implementation Plan
> **Source:** Reconstructed from conversation via quick-plan (no spec). Intent captured below.
> **For downstream agents:** Execute task-by-task. Each task uses `- [ ]` checkboxes. Do not skip the test-first steps — they catch wiring bugs that pure-logic tests miss.
**Goal:** [Intent Brief → Goal]
**Architecture:** [2-3 sentences — the approach, informed by the fanout experts' recommendation]
**Tech Stack:** [from Intent Brief → Constraints]
## Intent
- **Must-haves:** [bulleted, each testable]
- **Out of scope:** [bulleted boundaries]
- **Approach decisions:** [the chosen HOW + one-line rationale, citing the expert reasoning — this is the Key-Decisions equivalent]
---
The Intent block is load-bearing, not decoration: it is the contract this plan was built against. A future reader (or executor agent) has no spec to fall back on — the plan must stand completely alone.
Everything else — the ## Assumptions, ## Patterns, ## File Structure, ## Task N blocks, and ## Self-Review Outcome — follows the template unchanged.
quick-plan produces the same plans, so the same discipline applies. These are the load-bearing rules; write-plan's SKILL.md carries the full rationale for each:
file:line Reference to the closest analog the fanout found. Do NOT pre-write implementation code; the executor writes it against the test under real signatures.file.ext:line-line), they never paste..unwrap_or(<plausible fallback>) without explicit rationale is a bug class.Patterns section; each task still owns its files, test, and commit. Patterns applied across N sites get a final Audit task.These two gates from write-plan matter more without a spec, because no reviewed Key Decision stands behind the plan's assumptions:
Task 0: Spike <claim> — run the canonical command against this repo, capture real output, confirm or revise before other tasks run. Reconstructed intent has more unverified claims than a vetted spec, so scan hard for them.After drafting the plan, look at the Intent Brief with fresh eyes and check the plan against it. Same checklist as write-plan, with intent coverage standing in for spec coverage:
| Dimension | What to check |
|---|---|
| Intent coverage | Every must-have in the Intent Brief maps to a task. Every task traces back to a must-have or a fanout finding — nothing invented. List any gap. |
| Scope discipline | No task drifts into something the Brief marks out of scope. Without a spec, this is the easiest line to cross — cut creep. |
| Placeholder scan | No TBD/TODO/"handle errors"/vague verbs. Fix inline. |
| Type consistency | Names, signatures, and types match across tasks (clearLayers() vs clearFullLayers() is a bug). |
| Test discipline | Every behavior-changing task has a failing-test step before its implementation step. |
| Discriminating assertion | For each test, name a plausible broken/no-op impl that still passes it. If one exists, the assertion is on the wrong target — move it to the region the bug corrupts. |
| Consumer check | Every new public surface (trait method, exported fn, endpoint, CLI flag) has a named production consumer in this plan — a test is not a consumer. Cut dead surface. |
| Spike candidates | Every unverified "tool X does Y" / input-shape claim has a Task 0 spike, or the Brief is revised. |
| Parallel-implementation gate | Second backend/adapter behind an interface → final contract-equivalence task present. |
| Failure-propagation | Every new fallible op's contract names its error policy. |
| Project conventions | Plan respects AGENTS.md/CLAUDE.md — test tiers, comment policy, commit format. |
| Open questions closed | Every Intent Brief open question is resolved — answered by the user, by fanout, or recorded as an Assumption. None left dangling. |
Fix issues inline. Advance only when every item is honestly yes.
Before writing to disk, present the draft in chat:
If the user requests changes, revise inline and present again. Do not write to disk during this loop.
Pass before creating or overwriting plan.md: Do not write until both are true.
.beagle/plans/<slug>/plan.md..beagle/plans/<slug>/plan.md (note: plans/, a sibling to concepts/ — quick-plan output is not spec-derived).docs: add <slug> implementation plan."Plan written to
.beagle/plans/<slug>/plan.md. Review it on disk and let me know if you want changes."
plan.md as the source material so its task-decomposition gates resolve from the plan without re-interrogating the user.beagle-core not installed): instruct the user to invoke it themselves.Do not start executing. quick-plan produces the plan (and optionally the handoff prompt); execution is a separate decision and a separate skill.
.beagle/concepts/<slug>/spec.md → use write-plan; it plans against the vetted contract directly.