skip to content
CLI

Every verb, every flag, every alias — grouped, exact, and built to copy straight into a shell.

The index of every command. You already know roughly what you want; find the row, read the one-line note that disambiguates it, and get back to your run. To actually launch a plan, see Quickstart.

Building a plan — the core commands
commandargswhat it does
loomfeature-plan.mdbuild the plan, with the live TUI monitor
loomfeature-plan.md --headlessbuild with plain line output (cron / remote / piped)
loomfeature-plan.md --detachlaunch in a new session that outlives your shell
loomfeature-plan.md --sprintsforce the flat sprint pipeline (skip milestone decomposition)
loomfeature-plan.md --milestonesforce the milestone driver — the default; explicit peer of --sprints
loomfeature-plan.md --cleanwipe a botched run (worktree, branch, .loom) then build fresh
loomfeature-plan.md --removewipe a botched run and exit (abandon the plan)
resume vs. clean
A plain re-run resumes — it reuses the worktree and ledger and skips done sprints. To truly start over, --clean first. Both --clean and --remove dry-run by default, printing what they would delete and asking; pass --yes (-y) to skip the confirmation.
designdesign mode

Additive (--design) builds the listed surfaces consistent with the app's existing pages; from-scratch (--redesign) designs each from a blank slate. Both take all the same flags as a build run.

Design mode
commandargswhat it does
loom--design pages.mddesign the listed pages to match the app's existing pages (additive)
loom--redesign pages.mddesign the listed pages from a blank slate (from-scratch)
loom--design-dir / --design-system / --app-factsoverride the artifact and discovery paths
runsmanaging runs — recognized only as a bare first argument
Managing runs
commandargswhat it does
loom listtable of every run: name, state, sprint progress, title (alias ls)
loom enter[<name>]open a shell in a run's worktree (no name ⇒ the lone active run)
loom status<name>a run's title, state, paths, branch, and raw ledger
loom logs<name> [-f]tail a run's activity journal (-f follows until no longer active)
loom remove<name>tear down a run by name — worktree, branch, .loom dir (alias rm)
loom resume<name>resume a run by name instead of re-passing its plan path
loom mcp<name>start a stdio MCP server scoped to one run (read tools for a brain)
bare first argument only
Run-management verbs are recognized only as a bare first argument. A quoted prose plan, or a path that starts with a verb word, still builds normally — give a plan genuinely named like a verb as a path, e.g. ./list.

Name resolution is forgiving: a <name> is matched against display name, friendly handle, full plan id, and plan-id label, trying exact → unique prefix → unique substring. An ambiguous query lists the candidates so you can lengthen it.

diagnosticdiagnostic / layout
Diagnostic and layout
commandargswhat it does
loom--demorun the scripted mock engine in the monitor (no agents)
loom--snapshotprint one rendered frame and exit (layout check)
loom--snapshot-sessionprint one frame with the session modal open (layout check)
harnessharness selection

Build with one harness, review with another — one line. A per-role flag wins over the job-wide one; use the separate (--harness opencode) or inline (--harness=opencode) form.

build on opencode, review on codex
loom --harness-build opencode --harness-review codex feature-plan.md
Harness selection flags
flagargswhat it does
--harness<id>set the harness for every role
--harness-<role><id>override one role — <role>plan · build · review · util

precedence — first-hit-wins per role, all defaulting to claude: --harness-<role>--harness.loom/<plan>/harness.tomlclaude. Unknown ids fail loudly at startup. For the full per-harness config, see Harnesses.