cyberine
UsageRun recipes

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):

VarDefaultNotes
CYBERINE_MUSE_MODELthe catalog's is_current non-contributor row, else muse-spark-1.3Selects 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_EFFORThighnone|minimal|low|medium|high|xhigh|ultra, or inherit to fall back to the operator's ~/.config/muse/settings.json.
CYBERINE_MUSE_MAX_MODEL_STEPSunsetPassed as --max-model-steps; muse applies its own cap when omitted.
META_API_KEYunsetThe 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.