CLI reference

Every command and flag for the quorum CLI — start, init, clean, secret, analytics — plus the environment variables they respect.

Last updated

The quorum CLI treats the current directory as the org home, unless --dir says otherwise. Running with no subcommand starts the org defined by the directory’s QUORUM.md.

quorum [command] [options]

quorum start — the default command

Run the org defined by the directory’s QUORUM.md, preparing the org home’s runtime folders on the first run. This is what a bare quorum (or npx @meffecta/quorum) does. The QUORUM.md must already exist — without one, quorum refuses to start and points you at quorum init (or use --prompt to draft one and boot it in the same command).

quorum                                          # boot the org in this directory
quorum --mission "Launch a tiny SaaS" --budget 20  # seed a fresh org's mission + cap
quorum --prompt "a newsletter studio: an editor, a writer, a researcher"  # draft QUORUM.md, then boot
quorum --dir ~/orgs/acme --port 3001            # another org, on another port

Options

flag meaning
--dir <path> org home directory (default: current directory)
--env-file <file> env file to load (default: <org home>/.env if present); shell values win
--mission <text> the org’s mission — provide it here or in QUORUM.md’s ## Mission, not both; seeds a new org
--mission-file <file> file containing the mission text (mutually exclusive with --mission)
--prompt <text> draft a QUORUM.md from a plain-words brief (one claude call), then boot it — the empty-dir shortcut (conflicts with --mission/--mission-file)
--budget <usd> lifetime spend cap in USD — the org halts at the cap
--port <n> dashboard port (default 3000, walking up if taken; an explicit port is fixed; or $PORT)
--host <host> dashboard bind host (default 127.0.0.1; binding beyond loopback auto-generates a control secret for steering, but read-only endpoints stay open — see Dashboard)
--tick <ms> autonomous cycle interval in ms (default 10000)
--concurrency <n> max concurrent tasks per cycle
--no-eval don’t evaluate completed work
--eval-threshold <n> minimum evaluation score to accept work
--claude-bin <path> path to the claude binary (default: claude on PATH)
--headless run without the dashboard server
--keep-awake keep this machine awake while the org runs — like caffeinate (macOS & Linux; or QUORUM_KEEP_AWAKE)
--clean start fresh — delete the org’s runtime state first (board, logs, memory, jobs); keeps QUORUM.md, skills, and credentials. The flag is the consent — no extra prompt
--force scaffold even into a non-empty directory

--mission only seeds a new org. On a restart the org runs on its already-saved goal board, so a --mission passed to an existing org is ignored (with a warning). A brand-new org with no mission from any source prompts for one at the terminal, and is refused rather than started idle when there’s no TTY.

--prompt drafts the QUORUM.md and immediately boots it — the one-command path for an empty directory. It won’t overwrite an existing QUORUM.md (pass --force to draft over one). Use quorum init --prompt instead when you want to review and edit the drafted file before spending anything more.

--keep-awake stops the host machine idle-sleeping for as long as the org runs, so a run left to work unattended keeps going instead of stalling when the laptop dozes off. It holds the OS’s own inhibitor (caffeinate on macOS, systemd-inhibit on Linux), released the moment quorum stops — the display may still sleep; only system sleep is held off. On an unsupported OS it prints a note and starts anyway. Set QUORUM_KEEP_AWAKE=1 to make it the default for every run on this machine.

quorum init — scaffold without starting

Prepare an org home so you can review and edit its definition before spending a token. init never starts the org.

quorum init                                        # write a starter QUORUM.md
quorum init --prompt "a newsletter studio: an editor, a writer, a researcher"
quorum init --dir ~/orgs/acme --mission "Ship v1"

Options

flag meaning
--dir <path> org home directory (default: current directory)
--env-file <file> env file to load (default: <org home>/.env if present)
--mission <text> seed the starter file’s mission
--mission-file <file> file containing the mission text
--prompt <text> describe the org in plain words — Claude drafts its QUORUM.md for review (one call; conflicts with --mission/--mission-file)
--claude-bin <path> path to the claude binary
--force scaffold into a non-empty directory / draft over an existing QUORUM.md
  • Bare init writes a minimal starter QUORUM.md (a solo CEO with a budget) and prepares the runtime dirs — fully offline.
  • init --prompt spends one claude call to draft the file, validated against the real parser. Booting it never calls the LLM again. To draft and boot in a single command, pass the same --prompt to quorum (the start command).
  • An existing QUORUM.md is left untouched (pass --force to draft over it).

quorum clean — reset to the definition

Delete the org’s runtime state — the goal board, task board, logs, ledgers, agent memory, and scheduled jobs — so the next start begins fresh from QUORUM.md. Everything you authored stays: QUORUM.md, skills/, .env, and any file quorum doesn’t recognize. Credentials survive too — the secrets store and browser profiles (their logins) are kept unless --all.

quorum clean                 # lists what will go, then asks
quorum clean --dir orgs/acme --yes   # no prompt (required when there's no TTY)
quorum clean --all           # full reset: secrets and browser logins go too
quorum clean --teardown      # also remove the org's live Cloudflare resources
quorum --clean               # wipe runtime state, then boot — one command

Options

flag meaning
--dir <path> org home directory (default: current directory)
--all also delete stored secrets and browser profiles (their logins)
--teardown also tear down external resources the org provisioned (Cloudflare Workers, D1, KV, R2, queues) via wrangler
--yes skip the confirmation prompt

clean refuses a directory without a QUORUM.md, so a mistyped --dir can’t wipe an unrelated folder. It’s for a stopped org — don’t clean under a running one.

External resources

An org doesn’t only keep local state — it can provision things that live on Cloudflare: a Worker serving the product, a D1 database, KV namespaces, R2 buckets, queues. A plain clean resets the local home but leaves those running (and some cost money). So clean reads what the org built — every wrangler.toml under the workspace, plus the service registry — and, when it finds live resources, lists them with the exact wrangler commands to remove them before wiping. Nothing is silently orphaned.

Pass --teardown to have clean run those commands for you (best-effort: each resource is attempted, failures are reported, then the local clean proceeds). It needs wrangler on the path and a Cloudflare token with permission to delete. Registered services on other hosts can’t be driven by wrangler, so they’re listed for you to remove by hand.

quorum secret — the org’s credentials

Store the tokens the org needs to act in the world — a GitHub token, a Cloudflare API token — and grant them to specific agents. A granted secret is injected into that agent’s task sessions as an env var named after it (github-tokenGITHUB_TOKEN); values never appear in prompts, memory, logs, or the listing. See Secrets & credentials.

pbpaste | quorum secret set github-token --grant builder   # value via stdin
quorum secret set cloudflare-api-token <value> --grant '*' # or as an argument
quorum secret list          # names, env vars, grants — never values
quorum secret rm <name>

Options

flag meaning
--dir <path> org home directory (default: current directory)
--grant <ids> (set) agent ids to grant, comma-separated — or '*' for every agent

Prefer piping the value on stdin — an argument lands in your shell history.

quorum analytics — anonymous usage stats

Quorum reports anonymous, aggregate usage stats (on by default, off in CI) to guide development. It sends the shape of usage — never your mission, files, prompts, or any content. The choice is machine-global, covering every org you run.

quorum analytics status    # what's collected, whether it's on, and why
quorum analytics disable   # opt out (remembered across every org)
quorum analytics enable    # opt back in

DO_NOT_TRACK=1 or QUORUM_ANALYTICS_DISABLED=1 also turn it off for a run. See Analytics & privacy for exactly what is and isn’t collected.

Environment variables

Flags win over env vars, which win over file defaults. The variables the CLI and runtime read:

variable equivalent meaning
ANTHROPIC_API_KEY key the claude binary authenticates with
CLAUDE_BIN --claude-bin path to the claude binary
CODEX_BIN, OPENCODE_BIN, … path to another brain’s binary, one env var per brain
OPENAI_API_KEY default bearer token for the openai brain (rename per brain with apiKeyEnv)
PORT --port dashboard port
HOST --host dashboard bind host
TICK_MS --tick cycle interval in ms
TASK_CONCURRENCY --concurrency max concurrent tasks per cycle
QUORUM_KEEP_AWAKE --keep-awake keep the machine awake for the run
EVAL --no-eval (EVAL=off) disable the quality gate
EVAL_THRESHOLD --eval-threshold minimum passing score
BUDGET_TOTAL_USD --budget lifetime cap (halt for good)
BUDGET_DAILY_USD daily cap (skip cycles until rollover)
BUDGET_MONTHLY_USD monthly cap
BUDGET_PER_CYCLE_USD per-cycle warning/halt cap
BUDGET_WARN_AT fraction of any cap (default 0.8) that files a budget warning
QUORUM_TRIGGER_SECRET arms inbound webhook triggers; unset = webhooks off
QUORUM_DASHBOARD_SECRET pins the dashboard control secret for steering
DO_NOT_TRACK quorum analytics disable turn anonymous analytics off
QUORUM_ANALYTICS_DISABLED quorum analytics disable turn anonymous analytics off
TASK_CONCURRENCY=6 EVAL_THRESHOLD=70 quorum
BUDGET_DAILY_USD=5 BUDGET_MONTHLY_USD=100 quorum

Every other runtime tunable is in Configuration.

--version / --help

quorum --version    # prints the CLI version
quorum --help       # the command tree
quorum start --help # options for a specific command