1.0.0-beta.41
published 22 October 2026
- Added the Video tool: a prompt and optional project-local reference files (images, clips, audio) go to a configured generator: MiniMax through /logins minimax and a videoProvider row in settings: and the MP4 lands in your project with a preview frame; the result names the vendor's reported usage, never an invented price (docs/VIDEO.md)
- Added to the Computer tool: clicks, drags and scrolls addressed by an element of the accessibility tree, a browser's page content in that tree, find, wait until an element appears, region captures, several acts in one sequence with reads between them, verify after an act, a pause while you are typing, and captcha hand-off to you (docs/COMPUTER-USE.md)
- Added a Markdown reader to the FILES popup: r on a .md file reads it in the popup, wrapped to its width and paged with pgup/pgdn; ← returns to the list and ↵ still attaches the file (docs/SESSIONS.md)
- Added a per-turn answer schema on the runner wire: a prompt row (and initialize) may carry a JSON Schema for that turn's structured output, and a malformed schema is refused on its row with the session alive (docs/AUTOMATION.md)
- Added file_checkpoints on mercury runner's initialize, so a program-driven session keeps pre-edit snapshots for session/rewind without the worker role; the initialize answer and session facts say whether capture is on (docs/AUTOMATION.md)
- Changed samples: sample({ name, title?, doc, ask? }) takes a document of nine typed blocks: verdict, section, cards, table, diff, terminal, figure, checklist, question: and Mercury renders the page in its own look, with a dark surface and a Parchment surface, terminal blocks as green-on-black windows, stable ids for marks and a question block whose answer lands in the viewer's note; raw html from a cell is refused (docs/SAMPLES.md, docs/EVAL.md)
- Changed /voice to on-device only: /voice on downloads and verifies the Whisper speech model once (60 MB) and dictation never leaves the machine; /voice off turns it off; no cloud transcriber and no API key is involved; all six release archives carry the Whisper driver, Windows ARM64 included (docs/VOICE.md)
- Changed every popup list to one keyboard contract: /model, /effort, /mcp, /config, /jev, /usage, /health, /memory, /logins, /permissions, /saturn, /workflows, /agents, /skills, /hooks, /workbench, /samples, /llmhost and the boot menus: ↑↓ move, pgup/pgdn page, markers show rows above and below, ↵ selects, esc closes, and the footer names the keys; the smallest popups keep the page key in their header when it fits
- Changed the bundled mercury-docs skill: its trigger fits the skill listing whole, each page's map row is the page's own opening sentence, and a long page is searched before it is read
- Changed the settings file watcher to watch the project's .mercury folder, the git root's .mercury folder and the config home, never the directories above the project
- Fixed OpenAI models stalling a session or a crewmate after eight identical tool-call retries: tools are sent to OpenAI in its strict dialect with every optional parameter nullable, and nulls in optional slots are dropped on the way back, so a placeholder argument is never refused
- Fixed Read refusing a text file when crop or pages was sent: the file is read as usual with one note that the setting was ignored, and an all-zero crop box means no crop
- Fixed /keybindings ending the session on Windows when the editor setting named a program that is not an editor; an editor hand-off can no longer end the chat, and a non-editor value is refused in words before anything is launched
- Fixed a "remember" the model got wrong being lost in silence: a refused memory call is held until a good one lands in the same turn, or the chat says plainly that the remember did not happen
- Fixed an unknown model name on a signed-in Anthropic account answering "sign-in expired" with the account e-mail on the line: the answer is one line naming the model as not offered, and no error line carries an account address
- Fixed /llmhost: the rental confirmation shows the recipe's verification status, a pod's setup script keeps the container image's PATH so the engine starts over SSH, finished-job notices reach a new chat, Terminate removes the pod's provider row, and Pod terminated paints once
- Fixed a stray 4 (and other fragments) typed into the composer: a terminal reply, mouse report or focus mark cut across two reads is held until its tail arrives
- Fixed the Eval tool's Python kernel raising a macOS crash dialog at shutdown
- Fixed the "finished this response with nothing said" line painting in the chat for OpenAI and Z.AI turns that ended cleanly with no words: the fact is kept under ctrl+o and in the debug log
- Fixed a resumed session delivering its dead-watch notice a turn late: it rides the first request with the restart notice
- Fixed the model picker crashing when the config home is read-only, the picker painting one line too many in a tight slot, PageDown doing nothing on /help's list, /logins' readiness rows unreachable by keyboard, /config painting one row too many beside its scroll marker, /usage miscounting rows above, and a tiny task-detail popup losing input to a measurement loop
- Fixed the ward's refusal of a delete command to say that a ward refuses before any permission ask, and /resume typed as a command to point at /sessions and mercury --resume