Skip to content

v0.106.0 - handoff, honest herd state, and a real mcp surface

Choose a tag to compare

@ralyodio ralyodio released this 25 Sep 08:19
98c0986

Three things moshcode could not do this morning.

moshcode handoff <from> <to>

Move a conversation between engines. Start in Claude Code, hit a wall, continue in Codex with the history intact.

moshcode handoff claude codex
· claude session c41b501f
  200 messages of 241, 105 files changed
· transcript ~/.moshcode/handoffs/claude-codex-075520.json
· fleet anthony@dev: claude-codex-075520 under claude-c41b501f

The target is told the files were already written and the working tree is the real state, so it reads before it edits rather than replaying 105 changes. The transcript format is documented in docs/portable-transcript.md, versioned, and honest about what it dropped.

Source and target: claude, codex, opencode and privacycode both ways. qwen, gemini and omp can receive. kimi, deepseek, mimocode and aider are headless one-shot only and are refused with the reason. A handoff also writes the fleet edge, so moshcode fleet tree shows which run came from which.

The herd stops guessing

moshcode ps decided whether an agent was working, blocked or gone by matching patterns against what that engine printed. Those are guesses about someone else's UI and they expire. When Claude Code 2.1 overwrote the pane title and dropped "? for shortcuts", detection broke.

Now every state carries a confidence. known means the run reported, the engine hook fired, or the process actually exited. inferred means a regex read a terminal, and the roster marks it with a trailing ?. Remote members are inferred too, because the protocol carries a state but not the confidence behind it.

This does not make a wedged engine detectable. It makes the difference visible instead of hiding it, which is the part that was costing time. Runs also get an immutable record with retention, so moshcode fleet gc keeps the newest 20 per directory and a 30 day cap.

moshcode mcp grew up

Ten new verbs: remove, enable, disable, test, reauth, unauth, reconnect, resources, prompts, notifications. Plus a wizard when add gets no arguments, and catalog search across the public directories.

enable and disable are honest about what moshcode is. No engine has such a verb and moshcode never edits an engine's config file, so disable deregisters everywhere and keeps the spec, and enable puts it back.

Scope got two flags rather than one overloaded one. --engine-scope user|project picks the config file, --engines claude,codex picks which engines. Neither is --scope, which already means the OAuth permissions of a shared session.