Mercury CLI
Documentation

Releases

1.0.0-beta.4

published 7 September 2026

  • Added an optional built-in shell engine (the /config row "Shell engine" set to brush, or MERCURY_SHELL_ENGINE=brush): one persistent shell for the conversation and one per sub-agent, the same shell on every platform, and Windows no longer needs Git for Windows
  • Added a "Shell engine sessions" setting that caps how many shell sessions stay alive (8 by default; MERCURY_SHELL_ENGINE_SESSIONS overrides it); an agent past the cap waits for a free one
  • Added on-device speech-to-text: /speak on, space to talk, space to stop, no API key and nothing leaving the machine, once the install carries the on-device pack and you have fetched its 60 MB English model with /speak download
  • Added /speak options to list the transcribers this install can use and save the one you pick
  • Added a "Patience with a quiet model" setting in /config (normal, patient, custom) that sets the wait on a silent model, the retry ceiling and the recovery budget together, with environment variables as overrides
  • Added a Motion setting (auto, full, reduced, off) in /config and the Boot Menu; auto slows the idle animations only while painting falls behind and says "reduced" in the status line
  • Added an effort field to the Agent tool, and sub-agent defaults (model, effort, how many at once) as /config rows
  • Added a browser fallback for /bug: when the GitHub CLI cannot file the report, the prefilled issue form opens in the browser
  • Changed /supercode to delegate to parallel agents only when that helps, with the agents' tokens and cost shown in the turn summary
  • Changed a sub-agent that hits a short provider throttle to wait it out and finish; only a limit hours away stops it, with its work kept and the parent told
  • Changed a sub-agent that hits a usage limit to pause and resume at the reset; its row says why and when
  • Changed the parent agent to hear from each sub-agent the moment it finishes or fails, and a wait on several agents to return at the first failure
  • Changed an agent stopped mid-stream to hand back its partial work, the files it touched and the reason, resumable; one stopped by the retry budget resumes by itself once
  • Changed the notice for a stream that ends with no error code and no message to name the provider, the stream's closing reason and what Mercury did next
  • Changed a shell-engine command that times out, ends the shell or is stopped by you to reset that session and tell the model; a message typed during a command waits until it ends
  • Changed a session to make no request of its own before your first turn; sign-in, the model requests and the update check are the only calls that leave the machine
  • Changed a provider's model list to load only when something on screen needs it, once per sign-in
  • Changed the usage meters to read only when shown or after a retry, never on a timer; a meter not shown for two minutes reads stale until it is shown again
  • Changed a permission ask on a session you are not looking at to wait with no time limit; a sub-agent's ask still expires after ten minutes
  • Changed finished background commands to collapse into one transcript line while the model is busy; a failed one keeps its title
  • Changed the sign-in list in the Logins screen, /logins and the first run to put OpenAI first
  • Changed voice input to prefer the on-device transcriber when its pack and model are present; a signed-in cloud transcriber serves otherwise, or when chosen with /speak options or MERCURY_VOICE_TRANSCRIBER
  • Changed an option Mercury does not know to be refused with exit code 2
  • Changed the stream-json feed to spell every key it defines in snake_case at every depth (feed contract 3); provider, tool, hook and permission-rule shapes keep their own spellings
  • Changed a settings file written for an older version to be rewritten in place the first time it is read, a project's checked-in file included; it shows as modified once
  • Changed the macOS keychain to one entry per config home; a sign-in stored by a much older build asks for one fresh sign-in
  • Changed the MCP connection memory to keep a server's fingerprint instead of its full configuration
  • Removed the "ultra" effort level; effort now ends at max
  • Removed the .mercury/commands folder from the project command search; move a command to .mercury/skills/<name>/SKILL.md
  • Updated the MCP client to the 2026-07-28 protocol revision; older servers still connect and the doctor names the revision in use
  • Fixed agents stopping with "provider throttled" after a quiet or dropped stream when nothing was refused; a retry now counts only the time waited, and the stop line says how to resume
  • Fixed a live but quiet model stream being cut after 90 seconds; keep-alive signals now count as signs of life
  • Fixed a sub-agent with no sign of life from the model and no tool running being left as running; it is now stopped with its reason
  • Fixed the crew row reading "no tokens yet" beside a growing context
  • Fixed the exit prompt counting agents that had already ended and disagreeing with the crew view
  • Fixed a "still running" notice lingering after a compaction for an agent that had finished, and a workflow being counted as a sub-agent
  • Fixed a compaction with an OpenAI model sending a shorter request than the session, which left most of the context uncached afterwards
  • Fixed a session with only an OpenAI sign-in being refused at its start
  • Fixed a message to a worker inside a running workflow starting a second copy of it, and a late result from an earlier run marking a resumed agent finished
  • Fixed a resumed agent losing one of its two completion notices when queued guidance restarted it
  • Fixed a named foreground agent never getting its name for SendMessage, and retired names lingering after eviction
  • Fixed an agent stopping without a reason after an interruption during a Stop hook or a workflow permission ask that timed out
  • Fixed a workflow child's capped report ending with a bare "[outcome truncated at cap]" instead of saying where the full text is
  • Fixed the /model picker dropping keys typed in its first second while a chat was still loading
  • Fixed the idle screen keeping a CPU core busy on a slow machine
  • Fixed the "back to the bottom" pill never appearing after PgUp or PgDn
  • Fixed a background file count started at boot outliving a Mercury that exits right away
  • Fixed on-device voice loading its speed-optimised pack on a CPU that cannot run it, which could end Mercury on the doctor's voice row or the first take
  • Fixed the first use of voice on Windows stalling while it checked the CPU
  • Fixed a file read from offset 0 numbering its lines from 0, which broke them as Edit targets
  • Fixed the fallback image reader labelling PNG bytes as JPEG when the image processor is absent
  • Fixed the Bash tool inserting a backslash before every ! once a command contained a single quote, which corrupted commit messages
  • Fixed the Transaction tool refusing agent, transcript and workbench evidence references when noting a step or resuming
  • Fixed a repeat install that changed nothing still telling you to open a new terminal
  • Fixed Godot validation of a script with a class_name reporting a duplicate global class
  • Fixed Workshop cells with statements and an await on one line failing with a syntax error, and braces inside strings returning the wrong value
  • Fixed a Workshop workspace failing to find TypeScript when node_modules is a link
  • Fixed the render_tui tool failing outside the source checkout; on a release install it now says there is no render script instead of failing
  • Known on Windows with the shell engine at this version: a .cmd shim such as npm fails (run cmd /c npm … or node on the script) and a program named by a relative path after a cd is not found (use its absolute path)