/ardd-plan¶
Tier: core
Draft a phased plan from artifacts, feedback, and backlogged features, pause at an approval checkpoint, then generate its ordered task list; --from
re-tasks an approved plan without re-planning.
Usage¶
/ardd-plan # bare run: pick from plannable inputs, else plan from artifacts + feedback
/ardd-plan <slug> [<slug> ...] # additionally target backlogged features
/ardd-plan feedback-<slug>-<hex>.md # scope to named feedback file(s) only
/ardd-plan defect:<id> [...] | defects # scope the defect check; re-offers declined entries
/ardd-plan --from <plan-file> # re-task mode: skip planning, regenerate tasks for an existing plan
/ardd-plan --list # print backlogged features and stop (read-only, no pick flow)
/ardd-plan --slate # advisory defrag grouping over backlogged features + open feedback, then stop (read-only)
--list is a pure side door: it runs feature-list.sh (default filter —
backlogged), prints its output, and stops before step 1 — no branch
check, no artifact discovery, no feedback load, no interactive pick, and
no writes of any kind.
--slate is also read-only and ephemeral — like --list, it skips
straight past the normal flow (steps 1–15) and runs a separate procedure
instead. Where --list prints a bare backlog, --slate computes an
advisory "defrag" grouping over the full plannable surface — both
backlogged features and open feedback files (each feedback file is one
slate item). For each item it grades a footprint confidence
(high/medium/low) grounded in real codebase greps — a feedback
file's footprint is the union of its items' [artifacts: ...] tags and
code refs, and it usually grades high — then for every pair it
determines file-set overlap and ordering dependency as two separate axes
(one mixed-slate heuristic: a ## Reconsidered feedback item tagged with
an artifact a slated feature also modifies is a dependency edge, so they
bundle). It classifies every item into exactly one of Bundle (sequential —
one multi-item /ardd-plan <item1> <item2> ... call), Parallel set (safe
to fan out — separate /ardd-plan <item> calls), or Solo-deferred
(low/speculative or gated on a non-code decision — its own single-item
call; low confidence wins over any edge or overlap, then edge/overlap forces Bundle, else Parallel — first match wins), where each <item> is a feature slug or a feedback-*.md
filename. N=0 or N=1 items is a degenerate case (report "nothing to
defrag" and stop; N=1 recommends that single item directly, in its
matching slug-or-filename form) rather than a fabricated slate. It only
reads open feedback to grade and group it — it never marks or flips a
feedback file, so the read-only guarantee is intact. The full grading/relation/classification shape is in the plan's
Technical Approach (.project/plans/plan-plan-time-defrag-slate-analysi-2026-07-17-1a95.md)
and the skill's own "Slate mode" section. It writes nothing — no plan, no
register mutation — and recomputes fresh on every invocation.
A truly bare /ardd-plan — no slug, no feedback or defect scope, and no
side-door flag — starts with a target pick (step 1a): it enumerates
the plannable inputs deterministically (feature-list.sh for backlogged
slugs, the status: open feedback files, defects-unsurfaced.sh for
never-surfaced defect entries) and offers them in one multi-select
question. Whatever is selected scopes the run exactly as if those
arguments had been passed; selecting nothing keeps today's
artifacts/feedback-only drafting. Any scoped invocation skips the picker.
When nothing plannable exists at all, the run reports that in prose —
suggesting /ardd-backlog <idea> or /ardd-feedback <observation> to
create something plannable, and /ardd-implement when a ready or
in-progress tasks file exists — and stops without drafting a plan and
without prompting.
Argument disambiguation: a plain kebab-case argument is always a feature
slug; feedback-*.md is always a feedback scope; defect:<id> (the 8-char
identifiers from DEFECTS.md) or the literal defects is always a defect
scope. Argument types can be mixed in one invocation.
Shape of a run¶
The run has two halves separated by a real gate:
- Planning — design targeted features' artifact changes, load
feedback and defects, draft the plan, write it
status: draft, then pause at an approve / revise / stop checkpoint. Approval is a decision, not a default. - Tasking — only on explicit approval (or
--from, which is that decision): flip the planapproved, flip its featuresbacklogged→planned, generate the ordered task list, flip featuresplanned→tasked.
Stopping at the checkpoint is a legitimate outcome — the draft plan is
durable, and /ardd-plan --from <plan> tasks it later.
Just before that checkpoint, the run normally asks whether to preview the
plan in the browser first (publishing it via Artifact). The
constitution's plan_preview frontmatter field
(always-browser|always-console|ask, absent = ask) controls that:
always-browser skips the question and always publishes+opens the
preview; always-console skips it and never publishes; ask (or absent)
keeps asking each time, as before.
A separate, independently-configurable plan_preview_editor field names
an open-in-editor checkpoint: when set, its {path} template has the
plan file's absolute path substituted in and is run, opening the plan in
an editor rather than a browser. It composes with plan_preview — the
two are offered alongside each other, never one replacing the other —
so a run can open the plan in an editor, in the browser, both, or
neither, depending on which fields are configured.
Reads¶
- Every
.project/artifacts/*.md(warns before planning overdraftones) .project/feedback/feedback-*.mdwithstatus: open(or the scoped set).project/features/<slug>.mdfor targeted slugs (must bebacklogged).project/DEFECTS.md, viadefects-unsurfaced.sh— entries no prior plan has surfaced (or the explicitly scoped ones)- Existing
.project/plans/plan-*.md— asks whether the new plan supersedes anapprovedone
Writes¶
.project/plans/plan-<slug>-<date>-<hex>.md— frontmatter:status(draft → approved → superseded),branch,created,features,surfaced-defects.project/tasks/tasks-<slug>-<hex>.md— writtenstatus: generatingfirst (so an interrupted generation is visibly incomplete), flipped toreadywhen all tasks are in; the same first write stampscomplexity: simple|moderate|complex(plan-time judgment of how much implementation judgment the file's tasks need — the routing signal/ardd-implement'sdelegate_modelmap resolves against; absent stays legal on pre-field files, and the approval checkpoint shows the grade so Revise can correct it viaardd-state.sh stamp <tasks-file> complexity <value>)- Targeted artifacts — the confirmed design changes for targeted feature
slugs (this is where a backlogged idea's artifact design work actually
happens;
/ardd-backlogonly logs) - Feedback bookkeeping —
[x]/[-]marks per item and theopen → plannedflip, at negotiation time (not at approval — declined items would otherwise be lost) - Register flips:
backlogged → planned → taskedfor targeted features
All status mutations are script-performed via ardd-state.sh
(plan-flip, feature-flip, feature-field, tasks-flip,
feedback-mark, feedback-planned).
Behavior notes¶
- Run
/ardd-statusfirst — don't plan over unresolved conflicts. - Browser preview at the approval checkpoint: before the approve /
revise / stop question, a one-time preliminary question offers to view
the plan in the browser — on yes, the plan file is published via the
Artifacttool and its URL is shown, then the checkpoint proceeds as normal; on no, straight to the checkpoint. This re-fires every time a Revise loop returns to the checkpoint, and a later redeploy of the same plan file (same path) targets the same artifact URL, so the preview always reflects the latest draft. - Reconsidered feedback items are confirmed, never assumed: each one tagged with an artifact gets an explicit confirm-the-reversal prompt, showing what the artifact says vs. what the feedback says.
- Defects are surfaced once: presented entries (accepted or declined)
are recorded in the plan's
surfaced-defects:list, which is what stops re-prompting; thedefect:/defectsscope arguments deliberately bypass that to pull a declined defect back in. - Branching: in solo mode there is no branch gate at all — plan and
tasks commit to the current branch (normally the default branch); a
readytasks file on the default branch is planned truth. In collaborative mode it offers a plain branch (never a worktree). The plan'sbranch:frontmatter records the branch inline implementation would use; that ref may never be created, which is fine. - Never delegates to a worktree — the plan and tasks files it writes are exactly the state the next steps need to see; a worktree would trap them until a manual merge.
- Collaborative-mode visibility: a delegated
/ardd-implementworktree branches fromorigin/<default>, so the plan and tasks files must reach the remote before delegated implementation can see them. Solo mode needs nothing —worktree-align.shcarries unpushed local commits in. Any collaborative push carrying the run's terminal state happens only after the terminal/ardd-statusrefresh is committed on the feature branch — in collaborative mode, no ArDD skill pushes a feature branch whose STATUS.md predates the state the push carries. - Re-tasking a plan that already has tasks files asks before generating a
new one (a deliberate fork, never an overwrite) and offers to mark
superseded non-completed siblings
abandoned. - Task format: unique
T00NIDs,[artifacts: ...]tags (omitted when none apply),[parallel]markers, test requirements per whatever paradigm the constitution declares. Tasks must be executable without reading the plan. - Ends by running
/ardd-status; withnext_step_prompt: truethe recommended next step (usually/ardd-implement) may be offered as a one-keypress prompt — but only when this run ends the turn itself. Withauto, a runnable recommendation is invoked directly (stated in the report first, no prompt); a denied/unavailable prompt reads as "no — stop here".
Related¶
/ardd-implement— executes the tasks file/ardd-backlog//ardd-feedback//ardd-defects— the three intake streams this skill consumes/ardd-research— vet substantial ideas before planning them