Repository navigation
Conversation
Drive Meta's Muse CLI through its MSP session-host protocol (`muse serve`, JSON-RPC 2.0 over stdio), the same way Codex uses its app-server: persistent host per session, `session/start`/`session/resume`, `turn/start`/`turn/steer`/`turn/interrupt`, streamed transcript items normalized into AgentEvents, and approval/user-input server requests round-tripped through Zeron's question panel. Unattended sessions start with approvalMode allowAll; model changes ride `session/setModel` on the live host; a leading /skill invocation becomes a native MSP skill part; Zeron's MCP server is injected via session config. Registers HarnessId::Muse (wire: "muse") in the engine's default registry, harness-update/account naming, install and skill-discovery tables, and the UI picker/settings surfaces with a Muse brand mark. Titles stay on the existing title-capable harnesses (Muse has no tools-off title mode), and account sign-in stays with `muse login`. Tests: MSP normalize/catalog units, a fake-`muse serve` integration suite (echo, tools, failure, skill parts, user input, resume fallback, live catalog), plus ignored live smokes against the real binary.
The engine injects Zeron's MCP server into every real run, and the host rejects session/start with capabilityRequired unless the sessionMcp capability was requested at initialize — the handshake sent none, so every real run failed during setup. Worse, the runner only emitted an error Done for an already-active turn, so setup failures closed the stream silently and the engine reported 'harness stream ended without Done'. - Request sessionMcp in the initialize capabilities. - If a host still refuses the MCP config, retry session/start without it and note the degraded session in the transcript. - Track done_pending from run start (not from turn start) so any failure before the first turn still terminates with an error Done; parked sessions that end between turns stay silent. - The fake host now enforces the capability, and both the fake and live suites run with an injected MCP server like the engine. - Replace the placeholder spark icon with the Meta mark, tinted Meta blue like Claude's brand-orange treatment.
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Adds Muse (Meta's
museCLI) as a ninth native harness in Zeron, driven through its own wire — the MSP session-host protocol (muse serve, JSON-RPC 2.0 over stdio) — the same way Codex is driven through its app-server. No ACP adapter in between.HarnessId::Muse(wire name"muse") inzeron-proto.zeron-harness::MuseHarness(crates/harness/src/muse/):muse servehost per session:initializehandshake,session/start/session/resume(with fresh-start fallback + notice when a session is gone),turn/startper prompt.item/delta/item/completed,session/todoListChanged,session/tokenUsage,session/contextUsagenormalized intoAgentEvents; completed text is reconciled against streamed deltas so nothing duplicates.turn/completedis the authoritative turn end (deterministic_turn_end).turn/steermid-turn (a steer that loses the race with turn end becomes the nextturn/start),turn/interrupton stop, model changes viasession/setModelon the live host.approval/requestanduserInput/requestare receipted immediately, then decided viaapproval/decide/userInput/answerafter round-tripping Zeron's question panel. Unattended sessions (auto-approve / danger sandbox) start withapprovalMode: allowAllso no approval ever blocks the queue;DangerFullAccessalso launches the host with--disable-sandbox(sandbox posture is fixed at host start on this wire)./skillinvocation the host advertises becomes a native MSPskillinput part; image attachments are inlined as base64 parts; Zeron's MCP server is injected viasession/startconfig. Command ids are UUIDv7, as the host requires.model/listandskill/listprobed over short-lived hosts; skills also surface as slash commands.default_registry(lazy slot mirroring the harness descriptor), harness-update provider table, agent-account slugs/CLI names, install tables (no script installer is known for Muse, so it is manual-only), skill discovery (.agents/skills), UI picker brand mark (newmuse-mark.svg), Providers/settings rows, and the README agent list. The workspaceuuiddependency gains thev7feature for MSP command ids.Deliberate v1 limits
supports_titles; title generation keeps falling back to the existing title-capable harnesses.muse login; Muse is not added to the Accounts providers until the engine can detect/swap its credentials.Testing
crates/harness/tests/muse.rs, fakemuse serveintests/fixtures/fake-muse.py): echo turn, typed tool calls, failed turn error, native skill part, user-input round-trip, resume fallback notice, live catalog/skills, wire-name round-trip — 8 passed.model/listcatalog and a full echo-provider turn end-to-end throughMuseHarness.cargo check --workspace --all-targetsclean; clippy clean in the new module; proto (76), engine registry (18), harness lib, and UI settings/pickers suites pass. Two timing tests in unrelated subsystems (executableversion probe, harness-update installer) flake under full parallel load on this machine and pass in isolation.Need help on this PR? Tag
@codesmith-botwith what you need.