Skip to content

13 · The add command reference

← 12 The .add/ bundle — ABF-1 format · Contents · Next: 14 The foundation and the five living specs →


Every command is add <verb>. The engine records; it never runs the method or spawns an agent — it stamps what happened and points at the next step. A global --root (default .add) selects the bundle. Every verb's output ends with a next: line naming the exact next command, so the loop is discoverable from the tool itself.

This is the complete, shipped verb set — nothing here is aspirational, and there is nothing beyond it.

Orient

Where you start, and where you return every session — never re-read the whole repo.

verb what it does example
status resume: the standing picture — active nodes, the current beat, what is next. --all for the full report, --check for conformance findings add status --check
init create a .add/ bundle: the eight starter files plus the vendored engine and seed corpus. --profile code \| doc add init my-service --profile code
upgrade move a 2.x project to 3.0: the whole 2.x bundle is renamed into .add-2x-archive/ (byte-identical, nothing deleted), a fresh 3.0 bundle is initialised beside it, and the archive gains a MIGRATION.md walking the re-authoring. 2.x state is deliberately not translated add upgrade

Author

Create a node and take it through Direction to the one approval.

verb what it does example
new scaffold a typed node — Task \| Milestone \| Persona \| …. Flags: --title --depth --sensitivity --kind --milestone --scope add new Task reject-overlap --depth standard --sensitivity data --scope src/bookings/**
interview put a node's open decisions — every non-n/a assumption and every Reject — to a human before the approval. Bare, it reads the questions; --answer <id>=<verdict> (confirm · correct · defer) with --by records them. At a human floor freeze refuses until each is answered (R:UNINTERVIEWED) add interview reject-overlap --answer A1=confirm --by "tindang"
freeze the one human approval — closes Direction, opens Build. --by, --authority add freeze reject-overlap --by "tindang" --authority human
brief compile the sealed direction into the working XML prompt — and, on a frozen task, record an act: brief stamp: the entry into Build. The gate refuses a PASS whose receipts predate that entry. --phase, --for-subagent, --by add brief reject-overlap
replan record a steering amendment on a frozen task — one additive act: replan stamp carrying the note; the seal, the checks and the gate are untouched. A frozen gives:/check change stays a change-request (refreeze), never a replan. --note, --by add replan reject-overlap --note "pivoting to sorted-merge"

The loop

Build to green, verify on evidence, record one outcome. gate PASS auto-closes the task.

verb what it does example
run execute the checks and write a fresh, scope-bound Run receipt. --junitxml parses test IDs; --timeout <s> raises the 900 s ceiling for a build-heavy command; the command follows -- — keep it the narrowest run that reports every bound check add run reject-overlap --junitxml "${TMPDIR:-/tmp}/add-run.xml" -- pytest tests/test_overlap.py
gate record the verdict: PASS \| RISK-ACCEPTED \| HARD-STOP. --by, --authority, --reason add gate reject-overlap PASS --by "tindang"
done close a gated task (the normal path closes automatically at gate PASS) add done reject-overlap
reopen return a done task to a beat with a reset gate. --to direction\|build\|verify and --reason both required add reopen reject-overlap --to build --reason "missed a race"
drop withdraw a task from the plan — writes status: dropped with the reason on the record. Refuses a done task (that verdict was gated; use reopen) add drop cli-bounded-memory --reason "the API it wrapped was withdrawn"
learn file a lesson into a living spec — ddd\|sdd\|udd\|tdd\|add. --evidence is the receipt or decision that caused it add learn ddd "overlap is half-open [start,end)" --evidence runs/2.md

A RISK-ACCEPTED needs its reason: add gate <slug> RISK-ACCEPTED --by "tindang" --reason "owner · ticket · expiry". Security is never batched — a security finding is always HARD-STOP.

Milestone

Group tasks into one user-request scope; close it on met exit criteria.

verb what it does example
milestone-done close a milestone — refuses while any ## EXIT box is unchecked add milestone-done auth-layer
check mark (or --off unmark) a checklist box by 1-based index, and record who did it. --section narrows to one ## SECTION; --all takes every box add check auth-layer 2 --by "Ada"
milestone-archive retire a done milestone — refuses one that is not done add milestone-archive auth-layer
deltas list open deltas across the specs — the carried inventory. --status open\|folded\|rejected add deltas --status open
fold retag a named open delta folded (human consolidation) into a spec domain\|system\|experience\|quality\|method add fold domain "half-open"

Parallel

Fan a milestone's DAG out across git worktrees, then fold the streams back.

verb what it does example
wave plan a parallel wave from the task DAG (independent levels). --streams records one wave as active add wave auth-layer --streams add-auth-token,reject-overlap
join fold worktree stream bundles back — PASS-only, union the deltas, regenerate the graph add join ../wt-a/.add ../wt-b/.add

Personas

Apply a reasoning lens to a beat. A persona advises; it never lowers a gate.

verb what it does example
advise record a persona lens on a sequential beat (NO-EXEC; feeds the coverage floor). --persona required add advise reject-overlap --persona concurrency-hawk
refute record that someone tried to refute a green — who tried to break it, against which receipt, what they found (NO-EXEC; no verdict). --by required; one of --held or --found "<input>"; --probes N, --note; --tier T1\|T2\|T3 (who read it — a claim the record can count) and --changed "<what>" (what a probe moved while the outcome held) are recorded when given, never defaulted add refute reject-overlap --by "advisor:method-steward" --held --probes 3 --tier T2

Personas also drive the parallel verbs above — wave/join assign personas to the streams they fan out.

Query

Read-only lookups over the bundle.

verb what it does example
doctor conformance findings; --sync recomputes compiled artifacts and re-vendors a stale engine add doctor --sync
locate reverse lookup — which node's scope: owns a path; done owners are counted, --all lists them add locate src/bookings/service.py --all
todo the open worklist — active tasks grouped by beat. --milestone restricts to one add todo --milestone auth-layer
show read ONE node whole — its frontmatter, its entire body, and its neighbourhood walked to --expand levels (default 3, max 5) across both edge families and both directions. A ref that names no node, or names several, REFUSES and never falls back to a search; an --expand above the cap refuses rather than clamping --json emits the pinned machine payload (FORMAT.md §11) alone on stdout, byte-stable across runs; a refusal is a payload too and keeps its exit code. add show okf-graph-lookup --expand 2
search find a concept anywhere in the bundle — a spec delta answers with its own address (/specs/method.md#M28), not with the file that holds thirty of them. --as-of YYYY-MM-DD reports each delta under the status it HELD THEN. Also selects by field: --type (a type outside the taxonomy REFUSES rather than answering zero hits), --status (a node carrying no status: matches none), --milestone (a bare slug or a cid). Filters AND together and the query becomes optional, but an ask naming NOTHING still refuses. A node-scoped filter cannot judge a delta, so delta hits are excluded with the count reported --json emits the pinned machine payload (FORMAT.md §11) alone on stdout, byte-stable across runs; a refusal is a payload too and keeps its exit code. add search --type Task --status direction --milestone okf-graph-lookup