Mercury CLI

Notes

Swarm chat in the main chat, captains, declared waits, and 1.0.3

· by @dubsthedev

Mercury CLI 1.0.3 brings the crew into the conversation. Swarm is on for new sessions by default (swarm.enabled in user settings.json, the Swarm row in /config): crewmates' board messages show as rows in the main chat as they arrive, each with its time and the crewmate's colour (matching its colour in the Workbench), landing between the lead's blocks. A crewmate joining (joined · team <team>) or parking (parked · waiting on <event>) shows as a row too, and a crewmate finishing shows as its completion notice; the turn summary under the lead's reply counts tool work only, and a refused crewmate launch paints as the refusal rather than a finished crewmate.

/swarm off turns Swarm off for a session's future launches while existing board crewmates keep their board, /swarm on turns it back on (and shows the wave's launch line), and resumed sessions keep their choice. /swarmchat alone toggles board messages in the main chat for the session, /swarmchat on and /swarmchat off set the channel explicitly without changing the selected filter, and /swarmchat all, /swarmchat team <name> or /swarmchat main chooses which new messages show (Slash commands). In the Workbench, /swarm opens Crew chat and wraps each message to three lines in the timeline, with the full text in the thread.

Talk directly to the crew, captains and declared waits

You can talk back to crewmates directly from the main chat:

  • /general <text> posts to every crewmate on the board.
  • /team <name> <text> posts to that team's captain when it has one, or all its members when it has none.
  • /whisper <name> <text> posts to one crewmate.

Crewmate and team names complete as you type. Your posts carry your own label and reach the lead too; ordinary prompts still go only to the lead.

To organise larger crews, the lead names a captain (captain: true on the Crewmate launch or swarm_captain on CrewBoard) for a team of five or more crewmates, or for a smaller team when you ask or a crewmate asks and the lead agrees. A captain gathers its team's work and reports it to the lead.

Crewmates can also park with a declared wait for another crewmate's post, a file or subject, a message kind or their team's traffic. A matching message or a post addressed to the parked crewmate resumes it with the message that woke it; broadcasts do not resume anyone. /crew shows why a parked crewmate is waiting: the post it waits for, or a worktree that is missing (when a recorded worktree is unavailable, the crewmate stays parked and the lead receives the path). For file coordination across a wave, a crewmate can now lease a folder with a trailing slash as one directory lease covering everything under it, lease listings name each holder with its count and shared folder, and lease calls finish in milliseconds whatever other crewmates hold, with a failing call naming its reason.

Prompt-cache stability, small-window local models and language services

Long crew and image-heavy sessions keep their prompt cache intact across two cases that previously rewrote it: a crewmate re-entering keeps the crew-board brief it was first given instead of rewriting its system prompt with the live crew list, and a conversation's twenty-first image no longer resizes earlier images in place.

Small-window local models no longer compact almost at once: the turn reserve and post-compaction landing room scale to the model's window, and /localsetup (Providers and sign-in) asks for the model's trained context when the loaded window is smaller while the context gauge displays the loaded server window (Models and effort). Local engines also get the same lazily started language servers (LspRead and the refactor tools through ToolSearch) as cloud engines, and when rust-analyzer cannot start because its rustup component is missing, the failure names rustup component add rust-analyzer and the next call tries again without waiting for the 15-second backoff.

Health, updates, terminal input and Windows repairs

mercury health (Health check) adds an OCR row naming the engine in use (macOS Vision, Windows OCR or Tesseract) with its languages, or why none is available, and mercury health --json no longer creates crew-board files (the board opens only when a crewmate launches, a board command runs or chat first paints). Start-up housekeeping keeps Node's compile cache under 512 MiB and 8,192 files, retiring the oldest entries.

Every mercury update refusal now ends with the reinstall command for your installation method (Install and update). On 1.0.0-rc.1 or 1.0.0? Run the installer once (curl -fsSL https://mercury-cli.ai/install | sh on macOS and Linux, or irm https://mercury-cli.ai/install.ps1 | iex on Windows); settings and sessions stay.

The release also fixes slash commands typed while Mercury is working so they run after the turn in the order typed, keeps a crew-board notice or finished command's output out of the composer after a sign-in failure, binds check verification evidence to the tree the check started on (Edits and change transactions), applies fast bursts of keys such as a held Backspace or a long paste in order (Using Mercury), scrolls the transcript with the mouse wheel in the classic Windows console without typing arrow keys into the draft, keeps one background daemon on Windows when the home folder is reached by another spelling of its path, leaves managed shims unchanged after a refused update rollback on Windows, and preserves Python Eval variables when a cell is interrupted on Windows (Workshop). The full list of changes is in the 1.0.3 release notes.