Skip to content

Glossary

Short definitions for the vocabulary anvil's docs use without re-explaining it every time. Each entry links to the doc that covers the term in depth.

claim

An exclusive lease on one task plus (when git is available) a branch to do the work on, recorded atomically in SQLite via a claim.created event. Claiming moves a task from ready to claimed, runs a pre-claim conflict check against the expected_files of every other actor's active claim, and records the claiming actor for the audit trail. See Claiming and shipping a task.

evidence buffer

<resolved-state-dir>/.evidence-buffer/ is a transient directory that the shell-free hook dispatch capture-evidence path appends to whenever a recognized verification command (pytest, ruff check, mypy, npm test, cargo test, bun test) runs while a claim is active. anvil submit reads the buffer file for the active claim and folds matching records into the durable evidence.submitted event, but it never deletes, truncates, or rotates the buffer file itself. See Evidence buffer.

evidence gate

The check anvil apply (and the summary anvil submit prints immediately after submitting) runs against a task's verification.required_evidence, matching each required item — test output, PR link, screenshots, files changed — to a structured field on the submitted Evidence row by substring rule. A task with an unmet item reports Evidence gate: INCOMPLETE and apply --approve --strict refuses to accept it. See Claiming and shipping a task — how the evidence gate matches.

harness

Any coding-agent runtime or IDE integration that drives anvil through the CLI or the MCP server — Claude Code, Codex, Cursor, OpenClaw, and others. anvil install <harness> wires up the natively-supported ones end-to-end (codex, openclaw, and pi — the last via its package system); every other harness gets MCP-only best-effort configuration via anvil mcp-config <harness>. See Using Anvil on any coding harness.

lease

The time-boxed exclusivity window on a claim (lease_expires_at), renewed with anvil renew before it lapses. It defaults to 240 minutes unless overridden by --lease on claim/renew, default_lease_minutes in project or global config.yaml, or the built-in default (in that order of precedence). When a lease passes its expiry, the next mutating CLI or MCP call by any actor reaps it — the claim flips to stale and the task returns to ready. See Claiming and shipping a task — renew the lease.

loop (the anvil loop)

The pattern of repeatedly running anvil next -q to pick the next claimable task, then driving the same governed body — claimpacket → do the work → submitapply — for it, until the queue empties (exit code 3). Any runtime can drive the loop — a POSIX shell while, a Claude Code /loop, a scheduled Codex automation, or anvil run-workflow for declarative, non-PRD-derived flows — because the leasing and state live in anvil, not the runtime. See Drive the anvil loop.

packet

The complete context one agent needs to execute one task, and nothing else — goal, acceptance criteria, scope (likely files), dependencies, constraints, verification commands, and (when held) the active claim's lease and branch. anvil packet <task-id> renders it from canonical state to .anvil/packets/<task-id>.md (or .json with --format json). See Claiming and shipping a task — get the work packet.

PRD

The markdown source of truth — prd.md for the default PRD, or a portable source under prds/ for a named release — that anvil prd parse reads deterministically (no LLM) into Requirement, Feature, and Task rows. A project can hold one default PRD plus multiple named release PRDs, all persisted in the same state.db / events.jsonl. See PRD template.

requirement / feature / task hierarchy

anvil's three-level plan structure: a requirement (RNNN) states what the system must do; a feature (FNNN) groups requirements into a shippable unit via its **Requirements:** field; a task (TNNN, or TNNN.M for a subtask created by anvil expand) is the concrete unit of work a claim executes, linked to its feature via **Feature:**. See PRD template — ID conventions.

supersede (PRD revision lineage)

What happens when anvil prd parse re-parses an already-parsed PRD: instead of deleting rows, it emits a non-destructive prd.revised event that marks changed or removed requirements' revision_superseded column, keeping the prior rows for lineage (include_superseded=True returns the full history). anvil plan then fails loudly rather than pruning a claimed or in_progress task that referenced a superseded requirement. See PRD template — parser behavior at a glance.

workspace

The directory holding one project's canonical state — state.db, events.jsonl, config.yaml, packets/, and the evidence buffer. By default this is a per-project HOME workspace at ~/.anvil/workspaces/<key>/.anvil/, keyed by the repo's main git worktree so every worktree of a repo shares one state.db. Set ANVIL_STATE_LAYOUT=local to opt back into the legacy in-repo .anvil/ layout, or ANVIL_ROOT=<dir> to pin state to an exact path. See Where anvil stores its state.