The muse worker (Muse Code, Meta)
muse is a build-fleet CLI worker driving Meta's Muse Code agent. It is flat-rate against the
CLI subscription (costModel: 'subscription', every catalog row reports cost: null), carries a
~1M-token context, and brings its own agent loop, OS sandbox, worktrees and 27-tool surface --
including four families no other worker here has: subagents, cron, durable memory, and goals with
progress reporting.
Prerequisite: muse on PATH and authenticated (muse login, or META_API_KEY in the
environment -- the CLI's own help states the key always wins over the account login).
The worker always sets MUSE_NO_AUTO_UPDATE=1 in the child's environment (k1akh, 2026-09-12): muse
on PATH is a bash launcher that stamps ~/.local/bin/.muse-update-checked-at and may swap the real
binary before exec, and under the host sandbox that write is denied, so the worker died before
reading its task. The opt-out skips both the stamp and the swap; upgrade muse by hand
(MUSE_LAUNCHER_INSTALL=1 muse) when you mean to.
cyberine doctor # shows muse install/login state
CYBERINE_BUILD_FLEET=muse cyberine run "explain what src/engine does"
# as an implementer in an isolated worktree, judged by DiffJudge
CYBERINE_TASK="add a --dry-run flag to the reap command" \
CYBERINE_BUILD_FLEET=muse npm run wf -- src/engine/implementTaskWorkflow.ts
# alongside the other subscription workers
CYBERINE_BUILD_FLEET="muse,claude,codex" cyberine run "<task>"Environment knobs (all optional):
| Var | Default | Notes |
|---|---|---|
CYBERINE_MUSE_MODEL | the catalog's is_current non-contributor row, else muse-spark-1.3 | Selects a GENERATION and a data policy, never a capability tier -- every catalog row is identical on context (1,007,997), output (128,000) and cost (null). |
CYBERINE_MUSE_REASONING_EFFORT | high | none|minimal|low|medium|high|xhigh|ultra, or inherit to fall back to the operator's ~/.config/muse/settings.json. |
CYBERINE_MUSE_MAX_MODEL_STEPS | unset | Passed as --max-model-steps; muse applies its own cap when omitted. |
META_API_KEY | unset | The CLI credential. Read by muse, never by Cyberine -- only passed through by the env allowlist. Not to be confused with MODEL_API_KEY, which belongs to the separate raw Meta Model API. |
Timeout reuses CYBERINE_CLI_TIMEOUT_MS (deprecated alias OPENCODE_TIMEOUT_MS, 30 min) rather
than adding a knob that means the same thing.
Why effort is pinned rather than inherited: omitting --reasoning-effort makes muse fall back to
reasoning_effort in the operator's settings.json, a TUI preference this repo does not control
(it reads xhigh on this machine), so inheriting would silently put every dispatch on a slower
tier. Effort costs nothing against the subscription, which meters prompts -- a minimal job and
an xhigh job each spend one -- so the only thing a higher tier buys is wall-clock time, and
across ten measured runs on two executably-verifiable tasks every level got the right answer.
The full provider reference -- auth model, the NDJSON event contract, the four parse rules, the
sandbox measurements -- is docs/providers/muse-cli.md, and the
cyberine-project-provider-docs skill makes reading it mandatory before touching this adapter again.
Known Limitations and Deferred Work
Not in the auto-routing pool until fleet.json says so. When a ~/.cyberine/fleet.json
exists, availableBuildWorkerIds() intersects the usable workers with the ids that file enables,
and muse has no entry there by default -- so it will not be auto-selected by the router even
though it is installed, logged in and registered. An explicit CYBERINE_BUILD_FLEET=muse bypasses
that gate by design. Add a provider entry to fleet.json to make it routable. Note the warning
only fires the other way (enabled-but-unusable), so a usable-but-not-enabled worker is silently
absent rather than explained.
The opencode2 worker (OpenCode 2.0 preview)
opencode2-deepseek is a build-fleet worker driving the OpenCode 2.0 preview binary. It is a SIBLING of opencode-deepseek, not a replacement — v1 and v2 are separate binaries, and the v1 one is...
Muse via the raw Meta Model API (loop-muse-build)
A SECOND, unrelated way to reach the same models: a key-only LoopAgentAdapter against Meta's OpenAI-compatible endpoint, with no muse binary and no CLI login. It is registered but ships retired,...