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)