Hermes v0.20.1: 18 Platforms and 13 Hidden Efficiency Wins You Probably Missed

Yesterday you ran hermes update, the terminal printed “Updated to v0.20.1”, and that was that. Makes sense — v0.20.1 is a quiet patch release: the official notes are a few lines long, saying the full documentation will “ship with v0.21.0”.
But behind that silence are 656 merged PRs, 1,444 commits, and 481 closed issues. Hidden inside are 13 efficiency wins the release notes never advertise — things that save you time and money every single day. Let’s dig them all out.
The headline change: the platform list grew to 18
Across the v0.20.x window, the official messaging docs grew to cover 18 platforms, all served by a single gateway process:
Telegram, Discord, Slack, WhatsApp (personal + Cloud API), Signal, Email, Matrix, IRC, QQ, Yuanbao, Feishu, Weixin, iMessage (BlueBubbles), LINE, DingTalk, Google Chat, and SMS.
No matter which platform you’re on, hermes gateway runs one process and conversations flow seamlessly between them.
The 13 hidden efficiency wins
A. Faster, more reliable installs (2)
1. Windows setup no longer hangs forever (#85529 / #85539 / #81390)
The Windows installer’s “Installing Node.js dependencies” stage could hang indefinitely — npm install and the Chromium download had no wall-clock bound, and one user left it running overnight (a stage timer reading 744:38). Now: every step has a timeout, failures fail loudly instead of pretending success, “Already up to date” no longer skips repairing broken deps, and the installer can recover after a crash.
2. Model-catalog refresh no longer blocks hot paths (#85555)
The models.dev refresh now uses ETag conditional GETs: it only re-downloads when content actually changed, and a no-network hot path keeps startup and model switching from waiting on the network.
B. Save tokens, save money (2)
3. Anthropic prompt caching silently came back (#85554)
If you use a custom Anthropic-compatible endpoint (api_mode: anthropic_messages), prompt caching may have been silently lost during the v0.20.0 window — now each model can declare prompt_caching: true|false, and even bare aliases (e.g. fable → claude-fable-5) get cache_control breakpoints again. Long conversations get immediate token savings.
4. context_length cache can no longer be “poisoned” (#85507 / #85509 / #85506)
A corrupted cache entry (context_length: 0) used to poison the whole resolution chain, handing the compressor and every display a permanent 0. Now: non-positive values are refused on write, the cache is written atomically, and stale 32K underreports (the MiniMax/Kimi class) are dropped and re-resolved. Your context-window numbers are trustworthy again.
C. Session resume (1)
5. Resuming a session restores the model you actually used (#85261 / #85558)
hermes --resume or /resume used to silently fall back to the config default — you might have been on Grok last night and resumed on something else without noticing. Now the session’s actual model, provider, and endpoint are restored, and /model switches persist their full route to the session row.
D. CLI / desktop input experience (3)
6. Frozen CLI input now heals itself (#85630)
When the terminal drifted back to cooked mode, the CLI would “stop accepting input” — previously only an external stty rescue worked. Now the CLI detects the drift and self-heals.
7. Suggestion pills, three fixes deep (#85661 / #85698 / #85091)
- Pills now wait for you to finish a word before firing (no more “use skill: hermes-agent” popping up just because you mentioned a repo);
- The MCP connect directory more than doubled (it previously covered only 8 vendors);
- The “clicked once, then dead button” ghost is gone.
8. Typing during blocking prompts no longer lost (#85045 / #84971)
On desktop, messages typed while a confirmation dialog is up now run as the next turn, and queued prompts merge into the live turn — no more “I definitely typed that, why did nothing happen?”
E. Gateway / platforms (3)
9. Cron alerts started telling the truth (#85536 / #85508)
Script-job failures used to be reported as “provider errors” (and stray 429s got mis-matched). Now no_agent and script failures, timeouts, fallback chains, and drift are all reported honestly; drift alerts fire once per job instead of once per tick.
10. Voice/wake no longer stalls the whole gateway (#85438)
voice.toggle / record / tts and wake.start / status are now pool-routed — a synchronous STT lazy-install (faster-whisper, ~50MB, 300s timeout) can’t block WebSocket sends anymore. Voice commands and model replies stop fighting over the same thread.
11. Native live cards on Slack (#85476)
Slack replies now stream as native live-typing messages, with optional plan/task progress cards — you can see what the agent is thinking and how far along it is, right in Slack.
F. Tools & data safety (2)
12. Image generation no longer bypasses your provider (#85520)
The image.generate WebSocket handler used to call the in-tree FAL leaf directly, silently bypassing plugin-registered image providers and Krea routing — a plugin user got the wrong results because of it. It now goes through the provider dispatcher, so whoever you configured is who gets used.
13. state.db self-heals: survives even a swapped-out database file (#84885 / #84886 / #84881)
- If the backing DB file is replaced under a live connection, a bounded one-shot reconnect self-heal kicks in instead of wedging until restart;
- Transient EIO errors retry 4×;
hermes sessions recover --allow-partialnow recovers tail rows that were silently dropped, with a lost_and_found lane as last resort;- WAL checkpoints are uniformly PASSIVE, never TRUNCATE.
(This continues the hardening from the 798-message amnesia incident — another layer of defense at the database level.)
How to upgrade
hermes update
After upgrading, run hermes doctor to confirm everything is healthy, then restart the gateway (hermes gateway) so platform changes take effect.
Wrapping up
v0.20.1 is the “quiet workhorse” release: no fanfare, but 656 PRs of exactly the fixes you’ll eventually need. Eighteen platforms, plus these 13 efficiency wins — this is a release every long-term user should be on.
Want to go deeper? See the hermes update, hermes sessions, hermes cron, and hermes model command references; the previous major release is covered in the v0.20.0 release notes.