Skip to content

Configuration ​

Muster needs no config file. Every tunable is an environment variable, every one has a working default, and every one is read at the point of use — so exporting it in your shell, your settings.json env block, or a single command invocation all work the same way.

Integer variables are parsed strictly: a non-numeric or out-of-range value falls back to the default rather than failing the run. Boolean-shaped declarations (MUSTER_ENABLE_APEX, MUSTER_AGENT_TEAMS, MUSTER_COWORK_NATIVE_PLUGIN) accept 1/true to enable and 0/false to disable; anything else fails closed to the documented default.

Variables ​

VariableDefaultSemanticsRead by
MUSTER_INLINE_SCALE3Border-invitation threshold: the Nth distinct file edited inline across turns, with no muster run active, warns once per crossing. Never denies. Minimum 2.PreToolUse hook (plugin/hooks/inline-budget.js)
MUSTER_INVITE_COOLDOWN_MS900000 (15 min)Suppresses a repeat border invitation for this long after the last one actually fired, so a session is never nagged twice in quick succession.UserPromptSubmit + PreToolUse hooks
MUSTER_ACTION_GUARDdenyThe action-class fence, active only while a run is live and .muster/forbidden-actions lists a class: deny blocks a matching send/sign/submit/publish/purchase/delete-remote tool call, warn allows it with a reminder, off disables the fence. The only hard-deny surface in the stack.PreToolUse hook (plugin/hooks/pre-tool-use.js)
MUSTER_TASK_GATE(unset — gate on)Ties a native task board "completed" tick to a recorded review-gate PASS for muster-tracked tasks; a pending or escalated entry is denied. off allows unconditionally. Fail-open for any task muster did not create.TaskCompleted hook (plugin/hooks/task-completed-gate.js)
MUSTER_MAX_TIER(unset)Caps the conceptual model tier policy (prime excludes apex, core enables budget mode); unset means no cap. Static agent frontmatter pins are unaffected on direct invocation; in Muster runs the dispatch override honors the cap.CLI (src/model.js)
MUSTER_ENABLE_APEX(unset; off)Enables apex for peak-judgment roles (tournament judge, architecture-review, improve, advisor). Unset degrades apex to prime deterministically.CLI (src/model.js)
MUSTER_ADVISOR_MAX_CONSULTS3Maximum advisor consults per run — bounds the cost of workers escalating to the advisor role. 0 disables advisor consults.CLI (src/advisor.js)
MUSTER_FUSE_TOPK3Maximum tournament candidates passed to the fusion synthesizer. Minimum 1.CLI (src/fusion.js)
MUSTER_FUSE_MIN_DISAGREEMENT1Minimum disagreement score required to activate fusion synthesis; below it, muster fuse falls back to the single best candidate. 0 always fuses when at least two candidates pass.CLI (src/fusion.js)
MUSTER_REVIEW_DIFF_THRESHOLD200Changed-line threshold at which the review gate dispatches two reviewers instead of one. A batching lever only — the gate's pass bar and fix-loop cap are unchanged.CLI (gate-cadence, src/gate-cadence.js)
MUSTER_AGENT_TEAMS(unset — off)Declares that this session's tool list carries the native Workflow fan-out/barrier surface, selecting mode: "native" wave dispatch. Nothing declared means the prose wave loop, the floor on every harness. An explicit --agent-teams/--no-agent-teams flag always wins over the env var.CLI (wave-dispatch, src/wave-dispatch.js)
MUSTER_SPRINT_PARALLEL5Max concurrent item-runner subagents per wave in /muster:go-backlog wave mode. Hard ceiling 10 (higher values clamp; 0 is invalid). Read by go-backlog's orchestration protocol, not by library code.plugin/commands/go-backlog.md

Harness-scoped variables ​

These are read only on the harness they name, and mostly by its host rather than by you. The Cowork adapter is cowork/mcp-server.mjs; the neutral core receives its runtime identity explicitly rather than from a user-set host selector.

VariableDefaultSemanticsRead by
MUSTER_RUNTIME(unset)The neutral MCP core marks nested CLI invocations with the active host (cowork, codex, or work), so capability resolution uses that lane. Set on child CLI spawns by mcp/server.mjs.CLI (src/capabilities.js)
MUSTER_COWORK_NATIVE_PLUGIN(unset — off)Declares that Cowork's own plugin loader accepted muster's plugin/ tree. A declared capability check, never a probe: unset keeps resolution MCP-only.CLI (src/cli.js, src/capabilities.js)
MUSTER_COWORK_CONNECTORS(unset)Comma-separated remote-connector names (e.g. slack,drive) to treat as available. Remote connectors live in your cloud account, not on disk, so they cannot be auto-discovered.CLI (src/cli.js)
MUSTER_COWORK_MAX_INFLIGHT4Max concurrent MCP tool executions in the Cowork server. Hard ceiling 64.mcp/server.mjs (via cowork/mcp-server.mjs adapter)
MUSTER_COWORK_MAX_QUEUE16Max queued MCP tool executions before overload rejection. Hard ceiling 1024.mcp/server.mjs (via cowork/mcp-server.mjs adapter)

Kimi also reads host-owned settings rather than MUSTER_* settings. KIMI_CODE_HOME selects the Kimi data root. KIMI_SECONDARY_MODEL and KIMI_CODE_EXPERIMENTAL_FLAG enable the per-process secondary model lane used by Muster-launched Kimi processes. Kimi's own loop and background concurrency variables remain Kimi runtime controls, not Muster configuration. See the Kimi guide before changing them.

Where to set them ​

Every variable is read at the point of use, so all three of these work and none of them need a restart of anything but the process that reads the value:

sh
# one invocation
MUSTER_MAX_TIER=core npx -y @adnova-group/muster capabilities

# this shell, this session
export MUSTER_ENABLE_APEX=1

For the hook-side variables (MUSTER_INLINE_SCALE, MUSTER_INVITE_COOLDOWN_MS, MUSTER_ACTION_GUARD, MUSTER_TASK_GATE), set them where the harness can see them when it spawns a hook — the env block of your Claude Code settings.json, or the environment Codex itself was launched from. A variable exported inside a session after the hook has already fired does not retroactively change that firing.

To confirm a value is actually reaching the CLI, read it back off a command that reports it: muster capabilities shows the effective per-role model (proving MUSTER_MAX_TIER and MUSTER_ENABLE_APEX), and muster gate-cadence <manifest.json> --changed-lines N shows the resolved reviewerCount (proving MUSTER_REVIEW_DIFF_THRESHOLD).

Muster's conceptual ladder is scout, core, prime, and apex; harness adapters map those tiers to concrete models.

Compatibility only: legacy input aliases haiku, sonnet, opus, and fable normalize to scout, core, prime, and apex; they are not a second conceptual ladder. MUSTER_ENABLE_FABLE remains an alias for MUSTER_ENABLE_APEX.

Not user knobs ​

Three more MUSTER_* names appear in the tree and are deliberately absent from the tables above:

  • MUSTER_CLI is a run-local shell variable, not a setting. Each mode resolves the cheapest way to invoke the CLI once per run (a vendored plugin runtime, a local checkout, a muster bin, or an npx fallback) and reuses the answer, so a run never pays a cold npx -y start per call. Use muster resolve-cli to see what it would resolve to.
  • MUSTER_TEST_NOW_MS and MUSTER_COWORK_TEST_CLI are test-only injection points (a frozen clock for the hook cooldown tests; a CLI path override honored only under NODE_ENV=test). Neither affects a real run.

Next: Troubleshooting for what to do when a setting is not taking effect.

Harness setup and support boundaries are documented in Harness support, Codex, Kimi, and Cowork. Security-sensitive diagnostics and reporting use Security and reporting.

Released under the Apache-2.0 License.