Changelog / release

0.12.15 — Tool calls stop truncating what your agent writes

Released 2026-08-18 · full changelog · GitHub releases

Upgrade: pip install -U rapid-mlx  ·  brew upgrade rapid-mlx  ·  or grab the desktop app.

If a coding agent wrote files through a local Qwen model on 0.12.5–0.12.14, upgrade first — outputs could be silently shortened. Also in this release: Qwen3.8-27B up to 23% faster with one flag (identical output, checksummed), downloads that reroute instead of stalling, voice transcription that stops inventing words, and safer model loading.

  • Upgrade first if you run coding agents. On 0.12.5–0.12.14, an agent (Claude Code, Aider, and friends) writing files through a Qwen 3.5/3.6 model could have its output silently shortened: a file meant to be 710 bytes arrived as 11 bytes, and nothing looked wrong — no error, valid response. Even short values could corrupt (Tokyo → Toyo). The cause was our constrained decoding fighting the model’s own output format; 0.12.15 fixes it. If your agent edited anything important on those versions, it’s worth re-checking those files. Gemma-4 and JSON-wire models were never affected (#1996, #1997).
  • Qwen3.8-27B gets faster — for free. Add one flag — --speculative-config '{"method":"mtp"}' — and generation goes 38.9 → 44.1 tok/s on an M3 Ultra, up to 23% faster when the model writes code, JSON or lists. The output is exactly the same: same sha256 with it on and off. Works on the aliases that ship an MTP head (#2004); in the desktop app it’s a switch under Settings → Performance (#1987).
  • Downloads stay fast. Pulling a model now watches its own transfer speed, file by file; if a download slows to a crawl, that file automatically finishes from Hugging Face instead — mid-pull, no restart. In our fresh-install test a 9B model was downloaded and chatting in about two minutes at 90 MB/s. RAPID_MLX_MIRROR_MIN_MBPS=0 restores the old behaviour if you ever need it (#2015).
  • DeepSeek Harness works out of the box. rapid-mlx agents dsh --setup wires the dsh coding agent to your local server — it joins Claude Code, Codex, Hermes and Aider as agents we run against every release before shipping (#1982). And when the served model can’t do step-by-step reasoning, dsh no longer shows an effort selector that does nothing (#1984).
  • Voice transcription stops inventing words. Pauses and silence used to come back as imagined speech — Whisper was transcribing its own padding. A silent clip now returns an empty transcript, like it should (#1964).
  • Safer to try models you just found. A model repository can no longer run code on your machine simply by being loaded; downloaded Python artifacts are integrity-checked (SHA256); the audio loader refuses pickled weights unless you explicitly allow them; rapid-mlx share warns before a key leaves your machine; and --trusted-hosts can pin which HTTP Host headers your server answers (#2011).
  • Fixes. install.sh requires a native arm64 Python and repairs a half-built venv (#1994); hybrid vision models get the right cache instead of answering from stale state (#1963); media-only models no longer appear as launchable chat models (#1965); rapid-mlx ps and models stop colliding columns and connect no longer announces a server that is not running (#2006); the unused jlens subcommand is removed (#1992).
  • Desktop. Settings gains a Developer section in development builds only — rehearse first-run without touching real state, with every erasure opt-in and named before it happens (#1993); the status footer sheds readouts instead of squeezing six chips into four’s width (#1991); an MTP sidecar whose quantization differs from the base now warns instead of silently degrading (#1989).