MTPLX 2.0.0

MTPLX v2 is the coding-agent release. Three weeks of work went into the thing people actually run MTPLX for: long agent sessions in OpenCode, Pi, Hermes, and Claude Code that stay fast, stay warm, and do not fall over. Ordered by how much it changes your day.

1. Your session cache survives everything now

Session-cache v2 keeps conversation KV state in RAM and mirrors it to an SSD cold tier that survives daemon restarts. A 100k-token session restores in about 2 seconds after a restart instead of a five-minute cold prefill.

The part agents feel most: prompt-cache reuse now chains across tool-call turns. Mid-session tool rounds restore warm in under 2 seconds instead of re-prefilling the whole transcript, which used to cost 1 to 4 minutes per turn on big sessions. One busy project no longer evicts every other project's cache, so multitasking across repos keeps each one warm. And restores are boundary-true for the recurrent layers, which fixes the corrupted agent output some of you saw after a prefix restore: prompt recitation, phantom tool calls, argument leakage (#130).

2. Decode got its next gear, and it is on by default

The turbo profile ships verify-specialized quantized-matmul kernels plus a compiled verify step, and it is now the default for the quantized 27B flagships in the app, the CLI, and the bare API. Measured on M5 Max: 27B Optimized-Speed moved from ~45 to 58-60 tok/s in the chat lane, and Optimized-Quality (q8) from 31-36 to 43-44 tok/s. The engine gates itself per model, so quantizations that do not benefit keep their proven path.

All of it runs on stock PyPI MLX. There is no custom MLX fork and there never was one in the shipped product; the kernels live inside the mtplx package and run on any Apple Silicon Mac (#129). The confusing fork metadata is gone for good.

3. Long context stopped being the weak spot

A new packed verify attention kernel reads one KV stream for the whole speculative window instead of four, and compiled verify now donates KV buffers instead of copying 4 GB per step. Together, measured on M5 Max: decode at 64k up 12%, decode at 128k from 17 to 20+ tok/s, peak memory down 8 GB at 64k and 16 GB at 128k. Prefill chunk hygiene got 5-21% faster on dense layouts too.

4. The engine stops dying mid-session

Several of you reported the server dying during agent workloads at 50-60k tokens (#105). The main driver turned out to be the app itself: its health watchdog treated a health response it could not parse the same as a dead server, and killed a perfectly healthy daemon mid-session. Liveness is now transport truth. If the daemon answers, it lives. Combined with the cache work above (those giant mid-session re-prefills were exactly the crash window), long sessions should hold. If you still hit this on v2, reopen with a crash report and we will dig.

Also in this class: fresh installs no longer crash at model load. transformers 5.13.0 broke a dependency import and took out every new install and DMG first run at the worst possible moment (#135, #136). mtplx now pins below it.

5. Agents got a protocol pass

6. Chat looks and feels different

Markdown now renders live during streaming at zero per-token cost, instead of arriving as plain text that snaps into formatting at the end. Each turn gets one compact activity strip with grouped tool rounds, a phase-following activity well, and a sources footer for web results. CJK and dead-key input no longer drops composed characters in the composer (community PR by penta2himajin). Turbo is a first-class mode in Settings, and the update toast floats politely instead of covering the tab bar.

7. Memory that respects the machine it is on

The RAM session-cache budget now scales to the hardware: roughly half the headroom above the model instead of a flat cap sized for a 128 GB Mac. The app's Settings tab exposes explicit RAM and SSD cache limits if you want to set your own ceiling. Peak-memory reporting is honest per request instead of a process-lifetime high-water mark.

8. Vision tells the truth under MTP

The draft head's committed history now consumes the spliced vision rows instead of image-pad embeddings, which fixes fabricated differences between similar screenshots at MTP depth 2+ (#103). MoE multimodal checkpoints that store the tower under model.visual.* (for example Ornith 1.0) are recognised (community PR by Jonathangadeaharder).

9. Fans and startup behave

Smart fan control ramps when the request arrives (not when decode starts), verifies actual RPM instead of trusting the request, and holds through the post-response cache work instead of dropping to auto while the GPU is still pinned at 100% (#127). Startup is ready in ~2 seconds; the deeper kernel warmup continues silently in the background and yields instantly to real requests.

Community

This release carries direct community contributions: the presence/frequency penalty engine and the tool-turn cache report that shaped session-cache v2 (Justin Stewart), the IME composition fix (penta2himajin), the startup heartbeat orphan guard (ashalliants), the finished-request scheduler bound (SuperMarioYL), the dashboard handoff fix (shiningliang), the model.visual.* vision prefix (Jonathangadeaharder), and the transformers pin arrived as a PR while we were landing the same fix (#137). The issue reports on long agent sessions were unusually good and steered this whole release. Thank you.

Downloads

Existing installs update themselves; the app refreshes its engine automatically after updating.