1.0.0-beta.44
published 26 October 2026
- Added Melious AI and OrcaRouter as the 21st and 22nd sign-in model providers across /logins, /model, /accounts, /defaultprovider, /usage, /submodels and Crewmate: connect OrcaRouter with /logins orcarouter (device-code sign-in or an API key from orcarouter.ai/console/token), ORCAROUTER_API_KEY or credentials.keyCommands.orcarouter to run orcarouter/<vendor>/<model>, orcarouter/<alias>, orcarouter/orcarouter/auto and named routers (orcarouter/orcarouter/<name>) on https://api.orcarouter.ai/v1/chat/completions with streaming reasoning, tool calls, session-affinity cache keys and per-request or catalogue credit pricing in /usage; and connect Melious AI with /logins melious, MELIOUS_API_KEY or credentials.keyCommands.melious to run open-weight chat models as melious/<model-id> (with :speed, :price, :eco and :batch routing variants) on https://api.melious.ai/v1/chat/completions with reasoning_effort (including max) and EUR usage and rate reporting in /usage (docs/ENGINES.md, docs/SETTINGS.md)
- Added Kimi K3.1 Pro and K3.1 Pro Highspeed and new model rows across Moonshot, Anthropic, OpenAI, Meta, MiniMax, Mistral, Z.AI, Together AI, Fireworks AI, Cohere and OpenCode Zen: Moonshot adds kimi-k3.1-pro and kimi-k3.1-pro-highspeed (1,048,576-token context window, 1,048,576-token output ceiling, low, high and max effort with max default, always-on preserved thinking and dynamic tool loading) and Kimi Code adds k3.1-pro and k3.1-pro-highspeed (1,048,576-token context window, low, high and max effort with high default, listed newest-first so bare kimi picks the newest served model, with retired kimi-k2.5 removed); Anthropic adds claude-mythos-5-1 (priced as claude-fable-5-1 at $10/$50 per MTok and $0.25/MTok cache read); OpenAI adds gpt-6.1-sol ($2/$10 per MTok, $0.10 cached, $2.50 cache write), gpt-6-sol ($2/$10, $0.20 cached, $2.50 cache write) and gpt-6-luna ($0.10/$0.50, $0.01 cached, $0.125 cache write) at a 1,050,000-token context window and 128,000-token output ceiling (with 2× input/cache and 1.5× output pricing above 272,000 input tokens); Meta adds muse-wonder-1.0 (1,048,576 context, $4/$20, $0.20 cached, minimal through max effort); MiniMax adds minimax-m3.1-flash (1,000,000 context, $0.15/$0.60, $0.015 cached, vision and low through max effort); Mistral adds zai-glm-5-3 ($1.40/$4.40, $0.14 cached, low, high and max effort) and zai-glm-5-3-flash ($0.15/$0.50, $0.03 cached) at 1,000,000 context; Z.AI adds glm-5.3-flashx-legal ($0.37/$1.25) and vision models glm-4.6v ($0.30/$0.90), glm-4.6v-flashx ($0.04/$0.40), glm-4.6v-flash (free) and glm-4.5v ($0.60/$1.80) alongside image input on glm-5.3-flash and glm-5.3-flashx; Together AI adds MiniMaxAI/MiniMax-M3.1-Flash, deepseek-ai/DeepSeek-V4.1-Flash-1017, Qwen/Qwen3.5-9B, Qwen/Qwen3.5-397B-A17B and together/Tev1-4B-experimental; Fireworks AI adds muse-spark-open ($1.25/$4.25) and deepseek-v4p1-flash-1017 ($0.30/$1.20); Cohere adds tiny-aya-global, tiny-aya-earth, tiny-aya-fire, tiny-aya-water, command-a-translate-08-2025 and north-small-translate-09-2026; and OpenCode Zen adds zen/muse-wonder-1.0 and five *-free models (glm-5.3-flash-free, deepseek-v4.1-flash-free, beam-free, flint-40b-free and nemotron-3.5-super-vl-free) (docs/ENGINES.md)
- Added edits[], op: "delete" and op: "move" on ChangeSet, richer Edit not-found diagnostics, magic-byte image detection on Read, per-file caps on Grep, and VCS pruning and directory sampling on Glob: ChangeSet members accept edits (old_string, new_string, optional replace_all, planned and applied with Edit's exact-string matcher, quote preservation and overlap checks) alongside hunks, op: "delete" to remove a file, and op: "move" with new_path to rename a file, while sharing Edit's stale-anchor relocation, ranges and full-file read-knowledge checks, and lossy-decode refusals; Edit not-found refusals name the closest read lines, whether new_string is already in place, and whitespace-only differences; Write requires replaced lines to have been read, and both Edit and Write reject pasted Read line-number prefixes and invalidate read state undone by /rewind; Read refreshes windowed line numbers when a file changes on disk, detects PNG, JPEG, GIF and WebP files by their byte signatures regardless of extension, and reports both axis ratios when horizontal and vertical image scaling differ; Grep caps matches at 25 per file with an overflow notice; and Glob resolves folder and bracketed ([id]) globs, prunes .git and other VCS directories in ripgrep walks, and samples capped pages across top-level folders (docs/CHANGE-TRANSACTIONS.md)
- Added macOS Keychain migration and origin-bound TOTP code generation for Browser secretRef fills: when Browser op: "type" resolves a named secret from <config>/browser-secrets.json on macOS, Mercury writes the entry to the macOS Keychain, verifies an exact read-back before removing the key from the mode-0600 file (keeping the file copy if the Keychain write or read-back fails), and supports { "origin": "https://…", "totp": "<seed>" } entries that mint a 6-digit TOTP code for that exact origin and re-verify location.origin, focus and element attachment in the page before filling
- Added permission-rule match clauses and failClosed on hooks, plus richer crewmate.end payloads and failed-crewmate diagnostics: events.hooks match strings on tool.before, tool.after, permission.ask and permission.decided accept |-separated permission-rule clauses including Bash(git *) and PowerShell(…) (matching each subcommand of a compound command such as cd x && git push), Read(…), Edit(…), Write(…), NotebookEdit(…), NotebookRead(…), Glob(…) and Grep(…) file globs, Crewmate(<type>), WebFetch(domain:<host>) (with domain:*.<host> wildcard subdomains), and mcp__<server> or mcp__<server>__*; hooks on synchronous events that can stop an action accept failClosed: true to turn a hook spawn error, timeout, non-zero exit or malformed JSON response into a refusal carrying the failure line; crewmate.end hook inputs include answer and worktree_path; and a failed crewmate's result and chat notice include its last five tool calls and any kept worktree's branch, HEAD and working-tree status (docs/HOOKS.md, docs/CREW.md)
- Added per-call cwd on Bash and PowerShell, reply capture and port-holder reporting on Service, interrupt: true on ResumeCrewmate, Computer screenshot attachment and TypeScript type stripping in Eval, and usage.context in the TypeScript and Python SDKs: Bash and PowerShell accept cwd to run a command in another directory without moving the session (and permission checks inspect the inner command of bash -c scripts); Service op: "input" accepts timeoutMs (default 500 ms, up to 30,000 ms) and returns the lines the service printed in reply with the log cursor and service state, while Service op: "start" names the holding process and PID when a readiness TCP port is already in use; ResumeCrewmate accepts interrupt: true to stop a running crewmate's turn and start a replacement turn with the new message; Eval JavaScript cells strip erasable TypeScript type syntax, accept dynamic import(), destructuring defaults, block-nested var and top-level return, run with a 512 MiB Node old-space heap, and attach screenshots taken by tool.Computer(...) inside a cell to the cell's result so subsequent Computer clicks succeed; Sleep returns as soon as a waited-on background shell finishes; and session/facts in mercury runner and the TypeScript and Python SDKs includes usage.context (model, used_tokens, used_pct, fill_source, window, window_source, window_pinned, window_reason, compact_at_pct, left_until_compact_pct) (docs/EVAL.md, docs/COMPUTER-USE.md, docs/CREW.md, docs/AUTOMATION.md)
- Changed the licence of Mercury CLI, its release archives, the Winget manifest, the VS Code extension and the TypeScript and Python SDKs to the Apache License 2.0 (Apache-2.0) across LICENSE.md, NOTICE, TRADEMARKS.md and all 22 README translations, and reorganised README.md into a single overview page with installation, update, verification and source-build guides in docs/INSTALL.md and headless CLI and JSON-RPC runner reference material in docs/AUTOMATION.md (docs/INSTALL.md, docs/AUTOMATION.md)
- Changed GPU rental switching, Machine controls, /usage, shipped recipes and keyless model display in /llmhost: when a rental reaches ready, the renting chat switches to compat/pod-<id>/<model> for that session without changing the saved default model, and terminating the rental restores the chat's prior model (or prints /model compat/pod-<id>/<model> if the renting chat has closed); Machine controls shows the active setup step, elapsed time, hourly rate and compute spend so far, and Logs reads the remote engine.log (or vendor log) and holds its page with a frozen clock until Esc; /usage shows the active GPU rental's machine name, hourly rate, elapsed time and compute spend in USD; rented and self-hosted OpenAI-compatible servers receive the deferred-tool roster instead of all tool schemas up front; the Hy4-preview 770B recipes set --context-length 262144 (262,144-token serving context), the Inkling 975B · NVFP4 recipes add xhigh effort (low, medium, high, xhigh, max), and the gpt-oss-120b and Mistral Large 3 675B vLLM recipes use vllm/vllm-openai:v0.32.0; and when no provider is signed in, every screen displays choose a model and refuses a prompt with one line pointing to /logins, /llmhost or /localsetup (docs/LLM-HOST.md)
- Changed DeepSeek Chat Completions wire handling and catalogue resolution: requests replay reasoning_content across tool-call sub-turns while thinking is enabled and omit it when thinking is off, route image inputs to deepseek-flash (DeepSeek V4.1 Flash) while keeping deepseek-v4-pro text-only, apply the 1,048,576-token context window and 393,216-token output ceiling from the display table while merging live /models fields into the catalogue, and admit deferred tools on deepseek-flash by appending the definition so the prompt cache prefix stays intact (docs/ENGINES.md)
- Changed recorded model pricing, context windows and capability flags across Anthropic, OpenAI, Google Gemini, Qwen, Together AI, Fireworks AI, Mistral and Hugging Face: Anthropic claude-sonnet-5-5 cache reads are $0.10/MTok ($2/$10 per MTok); OpenAI records context windows, 128,000-token output ceilings and rates for gpt-5.6-cyber (400,000 context, $12.50/$75, $1.25 cached, $15.625 cache write), gpt-5.5 (1,050,000 context, $5/$30, $0.50 cached), gpt-5.5-pro and gpt-5.4-pro (1,050,000 context, $30/$180), gpt-5.5-cyber ($12.50/$75, $1.25 cached), gpt-5.4 (1,050,000 context, $2.50/$15, $0.25 cached), gpt-5.4-mini (400,000 context, $0.75/$4.50, $0.075 cached) and gpt-5.4-nano (400,000 context, $0.20/$1.25, $0.02 cached), with 2× input/cache and 1.5× output long-context pricing above 272,000 input tokens on gpt-5.5, gpt-5.5-pro, gpt-5.4 and gpt-5.4-pro; Google Gemini records gemini-4-argon at $2/$10 per MTok and $0.10 cached input ($4/$20 and $0.20 from 2026-12-01); Qwen adds long-prompt pricing tiers on qwen3.7-plus (above 256,000 input tokens: $1.20/$4.80), qwen3.7-flash (above 32,000: $0.10/$0.40; above 256,000: $0.20/$0.80) and qwen3.6-flash (above 256,000: $1.00/$4.00) and hybrid thinking on qwen3-coder-flash; Together AI updates vision flags across ten models, Qwen/Qwen3.7-Max pricing ($1.50/$4.50, $0.30 cached) and Qwen/Qwen3.8-2.4T-A95B cached input ($0.25); Fireworks AI records vision and a 131,072-token output ceiling on kimi-fast-latest; Mistral records 10% cached-input rates across its lineup; and Hugging Face updates router price-floor entries across twelve models (docs/ENGINES.md)
- Changed turn-limit completion, streaming repetition and thinking-drop recovery, malformed tool-call repair, and lost tool-result placeholders: a run that hits its turn limit (or a compaction fork that exhausts its turn) runs one tool-free closing turn so the final answer lands in the turn outcome and mercury run --format text; a streaming reply that loops on a repeated block is cut mid-stream and retried once without the repetition, and a stream that closes after thinking-only output is retried cleanly; malformed tool-call JSON arguments use one shared repair pipeline across Anthropic, OpenAI Responses and OpenAI-compatible streams; and a tool call whose result was lost before recording states that execution is unknown and instructs the model to retry only read-only or idempotent calls after checking state (docs/DURABILITY.md, docs/AUTOMATION.md)
- Changed piped verification command scoring and large-file Edit performance: piped verification commands keep the test runner's own exit status, strip wrapper commands before matching, and note when a piped check went unscored; and large-file Edit calls and the clipped-lines ledger run in linear time (docs/DURABILITY.md, docs/CHANGE-TRANSACTIONS.md)
- Changed skill discovery depth and hot-reload, bundled skills, MCP file variable expansion, and working-set path resolution: skill discovery and file-watch hot-reload scan up to eight directory levels deep, load a skill reached by multiple paths once, clip skill listings at word boundaries, and check SKILL.md frontmatter on Edit and Write; the bundled provider-apis, update-config, keybindings-help, schedule and skill-forge skills reflect all 22 providers, 7 GPU rental vendors, permission-rule hook matchers, wall_ms, guardrails.mode, the 2-second chord window, session-record schedules and built-in skill shadow protection; the project's .mercury/mcp.json expands the env:NAME, workspaceFolder and userHome placeholders, and an MCP server with one malformed tool schema skips that tool while keeping its remaining tools and server title; and working-set assembly resolves tsconfig.json paths and baseUrl aliases, bare filenames and named symbols (docs/KIT.md, docs/EXTENSIONS.md)
- Fixed Continue Last Session, session store enumeration, per-file transcript-degraded footers, and daemon ▲ DEGRADED clearing: Continue Last Session on the home screen, /sessions, /concourse, mercury usage --history and session store readers ignore *.receipts.jsonl sidecar files and non-UUID filenames so resuming never loops on a sidecar file; the transcript-degraded warning in the footer is scoped to the affected file and clears on a clean read; and the daemon's ▲ DEGRADED mark belongs to the session that raised it and clears when that session closes or re-registers cleanly, while naming multiple degraded sessions side by side (docs/SESSIONS.md, docs/DURABILITY.md)
- Fixed Arabic and right-to-left rendering in macOS Terminal.app, side-rail word wrapping, and terminal keyboard and paste handling: on macOS Terminal.app, Mercury shapes Arabic characters using Unicode Presentation Forms, orders right-to-left segments visually, isolates each glyph, and counts zero-width joiners and non-joiners at Terminal.app's cell width so right-to-left rows keep joined letters and aligned borders at 80 and 110 columns; the session rail truncates rows on whole words; and the input decoder delivers supplementary and combining characters from enhanced key reports, keeps vertical cursor movement on grapheme boundaries across decomposed text, recognises Super+Up, preserves text before embedded paste markers, counts pasted bytes accurately, hyperlinks wrapped code URLs without trailing brackets, and ignores malformed key reports without throwing (docs/SESSIONS.md)
- Fixed Saturn parked-session wakeups, daylight-saving cron schedules, and daemon permission-mode re-evaluation: ScheduleWakeup sets onParked: "wake" so a parked session keeps its scheduled wakes, wakes when its timer fires, and prevents the daemon from exiting while a scheduled or held fire is pending (interrupting or stopping the session still drops its self-paced wakes); recurring cron schedules step across daylight-saving transitions in local time so a repeated autumn hour fires once and a spring-forward gap fires at the first valid minute after the jump; and changing a daemon-hosted session's permission mode re-evaluates parked permission requests and releases any call the new mode permits (docs/SATURN.md, docs/AUTOMATION.md)
- Fixed multi-node cluster placement timeouts, engine warning log parsing, idle sweep snapshots, and vendor error isolation in /llmhost: cluster placement uses a dedicated read budget at the placement deadline so a slow vendor response reports that not all nodes came up in time instead of a node-read failure, and an exhausted cluster read pauses under the 2-hour clock instead of marking the cluster failed; engine WARNING log lines are not treated as engine crashes and post-ready exit diagnostics read only log lines from the current engine start; background host notices render in chat without starting a model turn; the 5-minute idle sweep re-reads a fresh store snapshot before terminating an idle rental; pause notices quote the current hourly price; cancelling a Bank check or local setup stops the job immediately; private Hugging Face downloads never echo the token; a failed placement states that no pod was created and nothing bills; and one vendor's API error no longer hides another vendor's models (docs/LLM-HOST.md)
- Fixed /config Escape undo, State cleanup error-log counting, and retention bounds: pressing Esc in /config undoes only the writes made in that dialog in reverse order without touching other fields or concurrent writes, State cleanup counts deleted aged error logs as removed so the cleanup sweep sentinel advances, and an oversized retention period keeps existing files and worktrees instead of deleting them (docs/SESSIONS.md)
- Fixed /model cross-process sign-in updates, daemon context-loss prompts, and provider sign-in screens: /model picks up sign-ins completed in another Mercury process during a running chat and previews a daemon session's own model and history before switching so the context-loss confirmation is not skipped; and the Gemini, Hugging Face and Kimi sign-in screens mask pasted authorization codes, clear drafts on close, write a key once on repeated Enter, and keep signed-in history on cancel (docs/SESSIONS.md, docs/ENGINES.md)
- Fixed permission cards and /diff, /effort, /keysetup, /sessions, crewmate and worktree dialogs: Read permission cards show a symlink's resolved target path, Bash sed -i cards preview the file after loading and refuse to write if the file changed while the card was open, Skill "don't ask again" approvals save the skill's own name (and skill deny rules match aliases), NotebookEdit previews name the exact target cell and refuse unknown cell_id values instead of deleting cell 0, and modifier chords (Ctrl+…, Alt+…, Meta+…) do not trigger single-key consent, uninstall, folder-trust or crew actions; /diff numbers additions and deletions from their own sides and widens the gutter at 10 and 100 lines, /effort scrolls the selected level into view past ten rows, /keysetup leaves malformed editor configs untouched and restores Terminal.app backups on failure, /sessions resolves ID and title lookups when the local list is empty, open shell and settled crewmate cards keep their final output and transcript (Esc closes a crewmate card), and a failed worktree removal reports the error and keeps the worktree record (docs/SESSIONS.md, docs/TRUST.md)
- Fixed Windows process-kill exit codes, PowerShell curly-quote escaping, .bat/.cmd resolution, PID liveness checks, and daemon path separators: on Windows, stopping a background process settles with 143 or 137 instead of taskkill's 1, PowerShell single-quoted literals escape curly quotes in session titles and pasted image paths, bare .bat and .cmd names resolve in the working directory before PATH, EPERM on a live PID is treated as a running process by the journal and daemon locks, and Windows path separators are normalised across the daemon home, file store and journal (docs/SESSIONS.md)
- Fixed signal-killed shell exit lines, Test pytest collection errors, crewmate LSP diagnostics, and directory instruction rules: shell commands killed by a signal name the signal on their exit line (137 killed, 139 crashed, 134 aborted, 143 terminated), tool errors strip ANSI escapes before rendering, and typing / after /rewind restores a prompt starts a slash command instead of joining the restored text; Test reports pytest import/collection and fixture teardown errors with the traceback tail and location so op: "rerunFailed" reruns them; crewmates receive new LSP diagnostics on files they edit (tracked per writer and checkout), LspRead re-reads modified files, WorkspaceEdit deduplicates identical edits, and LSP requests accept Windows paths with spaces and clear resolved errors after a clean publish; and directory instruction rules attach on Write, Edit, ChangeSet, AstEdit and content Grep while <system-reminder> tags in instruction files are neutralised before wrapping (docs/LANGUAGE-SERVICE.md, docs/DEBUGGER.md)
- Fixed OpenAI-compatible and Z.AI parallel tool-call slots, GPT transcript settlements across resume and compaction, Bedrock throttling retries, and provider catalogue backoff: parallel tool calls on OpenAI-compatible and Z.AI streams keep distinct slots, GPT turn settlements landing during a transcript copy survive resume, fork and respawn (keeping admitted deferred tools callable across compactions), Bedrock throttling errors are retried as rate limits, and failed provider catalogue fetches back off for 5 minutes (docs/ENGINES.md, docs/DURABILITY.md)
- Fixed /localsetup KV sizing and discovery, Recall consolidated cards, concurrent MCP progress and argument forwarding, WebFetch charset decoding, and bundled Craft extension startup: /localsetup sizes sliding-window KV caches accurately for gpt-oss and gemma3n, discovers llama-server on port 9931 when 8080 is silent, and passes server-advertised reasoning levels to /effort; Recall(read) follows consolidated memory cards and labels history rows; concurrent MCP tool calls keep separate progress routes and preserve text blocks alongside structuredContent while passing null and extra arguments verbatim, lossy MCP tool names append an identity hash, and Context7 keys and custom MCP User-Agent headers are redacted; WebFetch decodes pages by their declared charset and refuses authority backslashes; and bundled Craft extensions without a build for the current platform stay quiet at boot and state availability in /extensions (docs/LOCAL-SETUP.md, docs/MNEME.md, docs/EXTENSIONS.md)