CLI Reference
The lithos-loom binary is one Typer app. Every command accepts --config / -c <path> to bypass config discovery; commands that emit data accept --format / -f text|json. Exit codes follow one convention: 0 success, 1 operational failure (Lithos unreachable, config failed to load, slug collision, partial import), 2 input validation failure (bad flag combination, unknown project, malformed input). Every command has --help.
This page is the map. The commands marked → reference have a full per-command page pulled from the Loom repo's docs/cli/ at build time, so it cannot lag the code.
Daemon
| Command |
What it does |
lithos-loom run [--dry-run] |
Start the daemon: pidfile lock, task-graph boot gate, orphan-container reap, then the supervisor and its children. --dry-run is shorthand for validate-config --dry-run. |
lithos-loom drain [--timeout S] |
Signal the running daemon to finish in-flight runs and exit — the restart that spends nothing. Exit 0 daemon gone, 1 nothing to signal, 2 timed out still draining. |
lithos-loom doctor |
PASS / FAIL probes: vault writability, the Lithos task-graph extension (the same probe run gates on), and TOML projects vs Lithos project-context docs. |
lithos-loom validate-config [--dry-run] |
Parse and typecheck the TOML; list projects, routes and subscriptions. --dry-run polls Lithos and shows, per open task, which route would claim it, which are deferred (<reason>), plus orphan tasks and dead config. |
lithos-loom config --show |
Print the merged effective config (confirms which file discovery picked). |
lithos-loom gates [--shadow] |
Read-only inventory of every open gate: type, PR or escalation reason, waiting story, and health (ok / orphan / malformed / waiter-gone / waiter-resolved). --shadow reports the shadow auto-merge record instead. |
task
| Command |
What it does |
lithos-loom task create --project S --title T [--brief] [--scheduled YYYY-MM-DD] [--priority] [--tags a,b] [--target-file P \| --no-insert] |
Create a Lithos task and print its projected Tasks-plugin line (default), append it to a file, or print only the id (--no-insert, what the capture macro uses). |
project
| Command |
What it does |
lithos-loom project list [--source lithos\|toml] |
Projects with status overlay: slug, active / archived, repo path. -f json emits the slug array the capture macro consumes. |
lithos-loom project create --title T [--slug S] [--tags] [--body \| --body-file] |
Create a project-context doc at projects/<slug>/<slug>-project-context.md. |
lithos-loom project import <file> [--slug] [--tasks-only] [--no-tasks] [--force-tasks] [--dry-run] [--yes] |
Adopt an existing Markdown file as a project and extract its - [ ] lines as a task graph. → reference: project import |
lithos-loom project regenerate-done --slug S [--dry-run] [--yes] |
Rebuild <slug>-done.md from every resolved task in Lithos. → reference: project regenerate-done |
lithos-loom project add-github-repo S owner/name / remove-github-repo |
Map / unmap a repo for the issue watcher (a project may map several). → reference: project GitHub subcommands |
lithos-loom project enable-github S / disable-github S |
Toggle github_watch_enabled; disabling keeps the repo list. → reference: same page |
lithos-loom project migrate-github-tags [--dry-run] |
One-shot migration of legacy github-* tags to metadata. → reference: same page |
obsidian-sync
| Command |
What it does |
lithos-loom obsidian-sync show |
Print the resolved [obsidian_sync] block. The macros call it with -f json to find tasks_file and projects_dir. |
develop
Observability and on-demand entry points for story-develop runs. Everything below prune needs docker, the agent CLIs and gh on the host.
| Command |
What it does |
lithos-loom develop list |
Table of inspectable runs under work_dir: run id, task, current round, active agent, PR, last activity. |
lithos-loom develop attach <run\|task> [--once\|--wait\|--stream] |
Follow a live run, printing each handoff as it lands, through PR delivery to a one-line outcome. |
lithos-loom develop dump <run\|task> |
Print the assembled conversation log. |
lithos-loom develop prune [--dry-run] |
Delete the run dirs and on-demand worktrees of finished runs; anything it cannot classify is kept and named. |
lithos-loom develop review <pr\|range\|branch> |
Review-only mode: panel + gate on an existing change, no coder. → reference: develop review |
lithos-loom develop converge <pr> [--from-github] [--resolve-conflicts] |
Converge an existing PR to review-green with a coder fix loop, then push. → reference: develop converge |
lithos-loom develop merge-gate <pr> |
Trial-merge the base's current tip and run the current check-set; zero agent tokens. → reference: develop merge-gate |
lithos-loom develop deliver <run\|task> [--converge] [--no-gate] [--dry-run] |
Push a stopped run's branch, open or adopt its PR, raise the pr gate, retire the needs-human gate. → reference: develop deliver |
lithos-loom develop converge-push <run\|pr> [--yes] [--complete-gate] |
Report an exhausted converge run's rounds and, on --yes, push them. → reference: develop converge-push |
lithos-loom develop resume <run\|task> [--dry-run] |
Continue a run whose host died mid-loop from its checkpoint. → reference: develop resume |
lithos-loom develop brief-review <story> [--delta-from REF] |
Draft a story's brief-review addendum with one read-only agent turn. → reference: develop brief-review |
eval
Benchmarks for the review and remediation machinery, all host-only and on demand. Cases live under evals/ in the repo; see docs/SPECIFICATION.md §4.16–§4.19 and ADR 0005.
| Command |
What it does |
lithos-loom eval review [--case ID] [-k N] [--bar F] |
Seeded-defect benchmark of the reviewer panel: catch rate, severity correctness and false-positive rate over K runs, each with a Wilson 95% CI. |
lithos-loom eval rescore <report-dir> [--judge-repeats N] |
Re-score a retained report dir offline (judge calls only, no reviewer runs); measures judge variance. |
lithos-loom eval triage [--case ID] [-k N] |
Benchmark the external-review triage step on known verdicts. |
lithos-loom eval resolve [--case ID] [-k N] |
Benchmark converge --resolve-conflicts on real conflicting merges against an executable oracle. |
Plugin entry points
Not lithos-loom subcommands, but the modules a route's command invokes:
| Module |
Status |
python -m lithos_loom.plugins.story_develop |
Shipped. Daemon mode with --task-json; standalone with --repo … --task-id <uuid>. |
python -m lithos_loom.plugins.echo |
Shipped smoke test: writes status="succeeded" and exits. |
python -m lithos_loom.plugins.prd_decompose |
Stub — raises NotImplementedError. |