Reference

Configuration & env vars

Every runtime tunable in one place — cycle timing, concurrency, evaluation, delegation, hiring, and budget — with defaults and where to set them.

This is the single reference for every runtime knob. Most have a sensible default, so a bare org needs none of them. Precedence throughout is CLI flag → environment variable → file (QUORUM.md) → built-in default.

Runtime tunables

OptionEnvDefaultMeaning
tickMsTICK_MS10000cycle interval in ms
concurrencyTASK_CONCURRENCY4max tasks run in parallel per cycle
evaluateEVAL=offtruerun the quality gate at all
evalThresholdEVAL_THRESHOLD60minimum passing score (0–100)
maxAttempts2total executions per task (initial + reworks); 2 = one rework
maxDelegations3subtasks one task may hand to reports
maxDelegationDepth2delegate → integrate chain depth cap
maxAgents16headcount ceiling for self-hiring (auto + explicit)
idleMeetingEvery30cycles between idle standing check-ins
failOpenOnUnparsedEvalfalseauto-pass an unparseable verdict (echo/no-judge only)

The ones with a flag or env var are also settable there; the rest are runtime constructor options.

Budget

Set as budget in QUORUM.md, by env var, or with --budget (which maps to totalUsd). An omitted field means no cap.

FieldEnvBehavior when hit
totalUsdBUDGET_TOTAL_USDorg halts for good (lifetime)
dailyUsdBUDGET_DAILY_USDskip cycles until the day rolls over
monthlyUsdBUDGET_MONTHLY_USDskip cycles until the month rolls over
perCycleUsdBUDGET_PER_CYCLE_USDwarn + halt new dispatch mid-cycle

See Cost & budget for the full behavior.

Server

OptionEnvFlagDefault
portPORT--port3000
hostHOST--host127.0.0.1
enabled--headless disableson
webhook secretQUORUM_TRIGGER_SECRETunset (webhooks off)

0.0.0.0 exposes an unauthenticated control plane — only bind it publicly when you mean to. The one exception is inbound webhook triggers: POST /api/trigger/<name> is fail-closed — it does nothing unless QUORUM_TRIGGER_SECRET is set, and every call must present that secret.

Brain / provider

Set per agent (or as defaults.provider). Full detail in The brain.

FieldDefaultMeaning
typeclaudeclaude, codex, opencode, cline, copilot, hermes, kimi, droid, gemini, llm, fake
modelprovider defaultmodel id
effortlow | medium | high | xhigh | max (claude)
maxBudgetUsdper-session spend ceiling (claude)
bin$CLAUDE_BIN / $CODEX_BIN / binary namepath to the binary
timeoutMs600000per-call timeout (10 min)
retries3retry count on pre-effect failure
argsextra raw CLI args per call
launchlauncher prefix, e.g. ollama launch claude (claude)
ossfalserun against a local open-source model (codex)
localProviderollama | lmstudio — target of oss (codex)
sandboxderivedread-only | workspace-write | danger-full-access (codex)
mcporg-owned MCP config path(s); null disables (claude)
strictMcptrueisolate from the operator’s own MCP servers (claude)
settingSources--setting-sources value (claude)
pricingoverride the cost-per-token table

Capabilities

allow / ask / deny, resolved per-agent → org default → base. Base defaults: allow for everything except crm (ask). See Tools & permissions.

Example: a tuned run

TASK_CONCURRENCY=6 \
EVAL_THRESHOLD=70 \
BUDGET_DAILY_USD=5 \
BUDGET_MONTHLY_USD=100 \
quorum --tick 15000 --budget 200
# ...or persist it in QUORUM.md
- budget: { "totalUsd": 200, "dailyUsd": 5, "monthlyUsd": 100 }
- defaults: { "provider": { "type": "claude", "model": "claude-opus-4-8", "effort": "medium" } }

A note on .env

For source runs you can keep configuration in a .env file and load it with Node’s built-in flag (node --env-file=.env ...). The fake brain used by tests needs none of these variables.