Mercury CLI
Documentation

Releases

1.0.0-beta.42

published 23 October 2026

  • Added live model search and pre-rental engine loadability checks to /llmhost on Which model?: typing filters the 78 shipped recipes immediately and queries Hugging Face after 3 characters for public text-generation models sorted by downloads (labeled found on Hugging Face · not booted by Mercury, with parameters, format, download count, licence, gated or private status and the unverified stamp), and selecting a Hugging Face model reads its paginated file tree and config.json (using your /logins huggingface token or HF_TOKEN for gated models), checks GGUF shard headers by HTTP range requests against the 163 architectures and 314 tensor names of the prebuilt llama.cpp engine (assets/host/llamacpp-engine.json at llama.cpp 184f6536) and safetensors quant_method values against vLLM's supported quantisations (refusing unknown GGUF architectures or tensor families, EXL2/EXL3 and unsupported quantisations before any rental or watch), and derives a llama.cpp or vLLM recipe on the spot with the smallest fitting GPU shape and live prices (docs/LLM-HOST.md)
  • Added the Bank screen (Bank · your weights), Vast.ai machine-bound volumes and a WEIGHTS line on every model screen in /llmhost: five single-key actions on the Bank rail let you download a model's weights once to a local folder with b (or b bank again), verify every file against SHA256SUMS with v at $0.00 for mercury host start --bank and SSH boxes (recognising existing bank folders by their manifest or config.json and supporting both sharded and single-file GGUF or safetensors models), mirror shipped, derived or private recipes with m onto a Runpod network or global fast-load volume or a machine-bound Vast.ai volume (using the cheapest single-node pod or machine instance in stock as the temporary fill instance, attaching the Vast.ai volume at /workspace/mercury-weights with SGLang, DeepGEMM, FlashInfer, TorchInductor, Triton, CUDA and vLLM kernel caches on the volume so compiled kernels can be reused on later boots, and listing kept Vast.ai volumes under Machines I'm paying for with d delete and w watch on that machine), delete a kept weights volume with d while keeping your local bank, or press k keep safe to copy and verify a bank (including config and tokenizer files) onto a second drive, mirror it to a volume, or save a first-boot upload of your local bank to Vast.ai and Lambda rentals at your measured upload speed, alongside a Change folder action and automatic loading of <config>/host/private-recipes.json (docs/LLM-HOST.md)
  • Added the frontier open-weights tier to /llmhost (assets/host/recipes.json version 2, 78 recipes across 32 models): 45 documented recipes across Reflection Beam 1.0 501B-A23B (FP8 and NVFP4), Tencent Hy4-preview 780B (MXFP8 and BF16), StepFun Step 5 Preview 604B-A27B, MiniMax-M3 427B-A23B (MXFP8 and BF16), Thinking Machines Inkling 952B and Inkling-Small 266B (NVFP4), NVIDIA Nemotron 3 Ultra 550B-A55B (NVFP4 and BF16), Meituan LongCat-2.0 1.8T, inclusionAI Ling-3.1-flash 572B, Qwen3.8-Flash-Next 180B-A6B, Xiaomi MiMo-V2.6-Flash-RL 309B-A15B, NVIDIA Nemotron 3.5 Super VL 120B NVFP4 on one RTX PRO 6000, OpenAI gpt-oss-120b on one H100 or H200, and Google Gemma 4 31B, each with its vendor launch flags, tool-call parser, context window, reasoning effort levels, licence summary and verified file manifest (docs/LLM-HOST.md)
  • Added Hugging Face Inference Endpoints as a fourth GPU rental provider alongside Runpod, Vast.ai and Lambda on every model screen in /llmhost, with in-place vendor key controls: reuses your /logins huggingface sign-in to create a private, single-replica endpoint on Hugging Face hardware (18 fitting shipped recipes from 1× RTX PRO 6000 at $2.75/hr to 8× H200 at $40/hr) that reaches READY over HTTPS without SSH, supports pause, resume and verified deletion, joins the side-by-side rental list sorted cheapest first with per-vendor verification stamps, boot source and a cross-provider Watch stock action that polls all connected providers every 5 seconds, and adds Replace key and Remove key actions for connected Runpod, Vast.ai and Lambda accounts on the model screen (while Hugging Face points to Sign out with /logins huggingface) (docs/LLM-HOST.md)
  • Added image input on the shipped llama.cpp GGUF recipes in /llmhost: GLM-5.3-Flash (mmproj-F16.gguf) and Nemotron 3.5 Super VL 120B (mmproj-BF16.gguf) download and verify their vision projector alongside the model shards and pass --mmproj to llama-server on the updated prebuilt CUDA 13 llama.cpp container image (built at llama.cpp 184f6536), enabling image prompts and the Computer tool on rented and SSH-hosted GGUF servers (docs/LLM-HOST.md)
  • Added lighter captures and macOS terminal text reads to the Computer tool: mouse and keyboard acts and plain wait calls return text and focus state without taking a screenshot unless capture: true is passed (or wait matches an until target), sequence captures one final screenshot at the end (or none with capture: false), screenshot captures the front window by default at scale: 0.5 (full: true or display captures a full display, and scale accepts 0.25 to 1 on screenshot, wait and sequence), and screenshot or tree on a macOS terminal window reads the focused terminal text instead of an image unless pixels: true is passed (docs/COMPUTER-USE.md)
  • Added context-aware evaluation and tree-wide conditional function breakpoints to the Debug tool: evaluate accepts context (repl, watch, hover, clipboard or variables), defaults frameId to the top frame of the last stopped thread, and returns variablesReference with named and indexed counts so structured results expand directly through variables; functionBreakpoints accepts { name, condition, hitCondition } rows that apply across every session in a multi-session debug tree, replay to child sessions started later, and clear everywhere with functions: [] (docs/DEBUGGER.md)
  • Added tree-sitter syntax checks to Edit and Write when no language server covers a file: edits and writes to TypeScript, Python, Rust, Go and C files report newly introduced parse errors and missing syntax nodes immediately after the write using the bundled grammar packs (docs/LANGUAGE-SERVICE.md)
  • Changed LICENSE.md, README.md, sdk/README.md and sdk-py/README.md to state the CLI and SDK licence split in plain language: the Mercury CLI is licensed under the Business Source License 1.1 (BUSL-1.1) with the Mercury Community Production Grant in LICENSE.md, and the TypeScript and Python SDKs in sdk/ and sdk-py/ (mercury-cli-sdk on npm and PyPI) are licensed separately under Apache-2.0 by their own LICENSE files
  • Changed Which model?, Machines I'm paying for, and rental rows in /llmhost: Which model? displays each recipe's verification stamp (measured, documented, community or unverified) and sorts models by verification tier first (with your own private recipes ahead of search-derived recipes, so an unverified search result never sorts above a shipped or private recipe of the same model) and then by where they can run right now (already running on your machine, fits one of your computers, in stock at the lowest hourly price across connected providers, then out of stock or unconnected) and model name; Machines I'm paying for counts live vendor instances only, names each provider's answer (none, no instances, no endpoints or unread), and labels each row as a Runpod pod, Vast.ai instance, Lambda instance or HF endpoint; Vast.ai rows tag each machine as datacenter, community host or host; the WEIGHTS line, rental rows and confirmations reflect kept Runpod or Vast.ai volumes and saved first-boot uploads; the Bank key rail follows the selected row's state (b bank again when banked); setup progress reads downloading weights on the machine · <X> of <Y> GB; rental confirmations state storage terms and the Tune summary once; and vendor read errors collapse to one line at the top of the screen (with details on Enter) and park a rejected credential across model, Bank and volume reads for the session until the saved key changes (docs/LLM-HOST.md)
  • Changed screens, popups, sign-in cards and notices across /llmhost, /logins, /config, /usage, /tasks, /rewind, /jev and extensions to state what you see, decide and pay for without narrating Mercury's internal storage or background mechanics
  • Changed docs/LLM-HOST.md and mercury host start: the guide documents the /llmhost model search and pre-rental engine checks, verification-tier ordering, the five-key Bank screen (b, v, m, d and k keep safe), Runpod and Vast.ai kept weights volumes, side-by-side provider rows across Runpod, Vast.ai, Lambda and Hugging Face, cross-provider stock watches, vendor retry and failure cleanup, vision projectors and engine refusal messages, and starting a model on one of your own computers prints each setup phase as it begins (verifying the bank, installing Ollama or building llama.cpp, downloading weights, installing the login service, pulling the model and waiting for the engine to load) on the terminal and the /llmhost computer screen (docs/LLM-HOST.md)
  • Fixed the bundled Node runtime: updated to 24.22.1, the October 2026 security release, which closes an out-of-bounds write in Node's Brotli decoder (CVE-2026-111497) that a hostile server could reach by answering a fetch() with Brotli-compressed content; the update carries the rest of that release's fixes and its OpenSSL, undici, c-ares and root-certificate updates
  • Fixed self-hosted llama.cpp, vLLM, SGLang, Ollama and LM Studio requests: SGLang requests send chat_template_kwargs.thinking (true when session thinking is on, false when off) so models such as DeepSeek-V4.1-Flash reason by default when no /effort level is set and honour thinking off when an effort word is present, the Computer tool sends a flat one-level sequence schema so llama.cpp accepts the full tool roster without $ref errors, an incompatible custom or MCP tool schema on llama.cpp refuses the request before dispatch without removing any tool from the roster, a llama.cpp server running without a vision projector reports that --mmproj is missing instead of marking the model text-only, llama.cpp router-mode servers receive ?model= on /props, /slots and /metrics, SGLang discovery reads /model_info before falling back to /get_model_info, and HTTP 4xx/5xx engine refusals name the cause and server flag to fix it (docs/LLM-HOST.md)
  • Fixed turn, session and SDK parity on self-hosted and OpenAI-compatible engines: an engine that rejects the effort field keeps your selected /effort and reports the server remedy instead of retrying at default effort, cold Ollama launches read the model's capability catalogue before the first request so the first turn sends your chosen /effort, sending an image to a text-only or projector-less endpoint displays a notice naming the remedy, an unfinished tool-call stream fragment ends as a fault instead of a completed reply, cancelled or interrupted turns settle their consumed token usage once, a refused nested Checkpoint call keeps the active checkpoint for Rewind, multi-block compaction summaries keep every text block, Workflow agents with model set to compat inherit the parent session's endpoint, scheduled wakes stay bound to their own endpoint credential, /clear or session resume when the previous model cannot start falls back to the default model with a one-line notice (and unavailable compat model refusals point to /llmhost and /model), and mercury run --model local|compat|huggingface and both SDKs (sdk/ and sdk-py/) resolve those family names against your configured endpoints and retain a recorded compat model across cold and warm session resume (docs/LLM-HOST.md, docs/AUTOMATION.md)
  • Fixed silent turn and compaction streams on self-hosted, OpenAI-compatible and Gemini endpoints: the turn spinner and context compaction row show waiting for the first token, live thinking and writing token counts, and reading <N>k tokens of context · ~<duration> from llama.cpp and SGLang /metrics prefill speeds; silent or dropped streams reconnect with progress on the spinner and end with a plain notice when retries are exhausted, and context compaction retries keep your selected thinking and /effort settings (docs/LLM-HOST.md)
  • Fixed self-hosted engines re-reading the conversation prefix on every turn: llama.cpp sessions coordinate distinct id_slot assignments across Mercury processes sharing a config home and keep their slot through context compaction and crewmate turns, shipped recipes enable llama.cpp prompt caching, vLLM prefix caching and SGLang cache reporting, and running machine rows in /llmhost show prefix cached · <N> of <M> tokens (last turn) from the server's reported counters (docs/LLM-HOST.md)
  • Fixed transient GPU vendor errors, slow engine startups and post-ready tunnel or engine drops in /llmhost: pod setup reads and the verification reads after manual Stop, Terminate and weights-disk deletion retry HTTP 429, 5xx and network hiccups for up to 4 minutes with exponential backoff and live retry status on the row before pausing, engine startup keeps waiting while engine.log continues to advance and stops only after 10 minutes of log silence past the startup budget, and when a ready machine stops answering on its SSH tunnel Mercury checks the remote engine first, reporting the engine's exit reason, the hourly rate still billing and Resume restarts the engine, Terminate stops the bill if the engine died, or reconnecting the SSH tunnel on the same local port up to five times if the engine is still running (docs/LLM-HOST.md)
  • Fixed failed GPU rentals and clusters continuing to bill in /llmhost: when an engine exits or runs out of memory while loading weights (reading the engine's own first error line and any unused-tensor count from the full engine.log instead of stack-trace frames), a weight download stalls under 1 GB in 10 minutes, a running machine refuses Mercury's SSH key three times, or a multi-node cluster fails placement, engine setup or tunnel startup, Mercury terminates the instance or cluster, verifies it is absent from the vendor's instance list, and posts one notice naming the cause and whether anything still bills; every paused setup, dropped tunnel or unconfirmed termination names the hourly or monthly rate still billing and points to Machines I'm paying for (docs/LLM-HOST.md)
  • Fixed GPU vendor API, OAuth refresh and Vast.ai rental handling in /llmhost: Hugging Face host requests proactively refresh an expired OAuth token before use and retry Hub requests once on HTTP 401, an Inference Endpoints HTTP 403 response names the required Inference Endpoints token permission and settings URL, a Vast.ai machine taken between listing and confirmation (no_such_ask) refreshes stock for that recipe and presents the next machine behind a new price confirmation (staying on the volume's machine when a Vast.ai volume is attached), a Vast.ai SSH-key failure before instance creation reports that no instance was created and nothing bills (and Vast.ai's SSH-key list is read in both bare and wrapped array shapes), Vast.ai instance listing uses /api/v1/instances/ with full pagination (and reports an update notice on HTTP 410), Runpod and Vast.ai refuse an incomplete or truncated instance page before claiming an instance is terminated, Lambda walks paginated instance lists past 50 instances, Runpod log tails decode Server-Sent Events log lines and surface HTTP 422 validation fields, Machines I'm paying for includes starting, booting, error and terminating instances in spend estimates, Runpod key setup links to console.runpod.io/user/credentials, and a Hugging Face HTTP 429 response shows the rate-limit reset time and /logins huggingface remedy
  • Fixed detached /llmhost jobs, mouse-wheel scrolling and model-screen shortcuts: scrolling the mouse wheel inside /llmhost moves the selected popup row one row per notch instead of scrolling the chat behind it, stock watches and background setup or bank workers keep the selected recipe row, its verified weight manifest and a private reference to your foreground Hugging Face token or relative-path credential command across processes, a Vast.ai kept-volume stock watch (w) refreshes price and waits specifically for the machine that holds the volume, background host notices stay queued across a restart until consumed, banked Hugging Face models stay in the Bank table across sessions, pressing b, v, m, d or k on a model screen works before moving the selection cursor, and Tune on a running Runpod pod recognises the prebuilt llama-server binary
  • Fixed crewmate launch and resume, queued daemon requests and daemon worktrees: crewmates inherit the parent session's thinking configuration at launch and keep their resolved effort level, thinking budget and strict structured-output schema when resumed, session requests held by the daemon replay with their shell or prompt mode, attached images, and selected MCP, skill and extension kit intact while re-asking launch consent on a replayed birth, and daemon-created worktrees copy project-local dependencies, vendor packs, .mercury settings and .worktreeinclude files
  • Fixed LspMoveFile and Debug breakpoint clearing: LspMoveFile stops before moving or editing any file when a participating language server fails its willRenameFiles request or returns malformed edits (naming the server), and Debug breakpoints with lines: [] or breakpoints: [] clears a file's last breakpoint across every session in the debug tree instead of refusing (docs/LANGUAGE-SERVICE.md, docs/DEBUGGER.md)
  • Fixed the first-run sign-in wizard, /help at 80×30 and Windows .cmd/.bat execution: pressing s on the first-run sign-in screen skips straight to Guardrails (with s skip shown in the footer at 80×24 and 120×40), /help at 80×30 paints every shortcut row and switches tabs with ↑/↓ and PgUp/PgDn when the body fits, and running a .cmd or .bat script on PATH under the Windows system shell invokes cmd.exe with every argument byte (carets, percent signs, spaces, exclamation marks, backslashes and non-ASCII characters) intact