Hermes Agent v0.20.2
Overview
v0.20.2 — The Connections Patch. Released August 16, 2026. ~397 merged PRs · 967 commits · 1,279 files changed (+128,522 / −7,622) since v0.20.1.
Three days after v0.20.1, Hermes ships the structural change the desktop app has needed for years: the connection model stops being “one global connection with per-profile overrides” and becomes a real registry. The desktop can now hold any number of named agent sources — local runtime, remote gateways, Hermes Cloud, SSH hosts — while MCP grows one-click hermes:// installs and background health checks, and the CLI finally remembers which session belongs to which terminal.
This is a patch release, so the official notes are brief and the full curated documentation ships with v0.21.0. This page covers the most valuable parts of the window.
Highlights
1. Desktop Multi-Connection Registry
Settings → Connections is now a true registry of named agent sources: local, remote gateways (LAN/Tailscale/public), Hermes Cloud, and SSH hosts, all persisted in one place with case-insensitively-unique labels. Backend pool routing is keyed by (connection, profile), and a multi-source agent roster + SDK surfaces in the desktop. Discoverability follows: a “Connect another Hermes gateway…” pill in the profile rail and a ⌘K entry for Settings → Connections.
2. MCP One-Click Installs via hermes:// Deep Links
MCP vendors and docs can offer an “Add to Hermes” button via hermes://mcp/install?name=NAME&config=B64. The link is strictly validated (name ^[A-Za-z0-9._-]{1,64}$, base64url JSON config) and shows an explicit confirmation dialog before anything is written to config.
3. Background MCP Health Checks
On gateway connect and every 30 minutes, the desktop sweeps the active profile’s enabled HTTP/SSE MCP servers. A server transitioning into needs-auth (or error) fires an in-app warning — “GitHub MCP needs re-authentication” — with a Sign in action that deep-links to the server’s config pane and flashes it. stdio servers are excluded because each probe is a real spawn.
4. Terminal Breadcrumbs: Per-Terminal -c
A bare hermes -c / --continue now resumes the session belonging to this terminal (tty, tmux pane, kitty window, wezterm pane, Zellij pane, Windows Terminal) instead of the globally most-recent session. Breadcrumbs live under $HERMES_HOME/terminal-sessions/, are written atomically, and expire after 30 days.
5. chat -c Fails Loudly + --create-if-missing
hermes chat -c "<title>" with no match now prints to stderr and exits 1 (no more silent no-op). The new --create-if-missing flag creates a fresh titled session and resumes into it — a deterministic “send to this named thread, making it if needed” primitive for scripts and plugins.
6. Image Upscaling Is Opt-In
The August 8 change that chained the Clarity Upscaler after every sub-2MP FAL/Krea generation (visibly degrading GPT Image 2 text/CJK rendering, Ideogram typography, photorealistic faces) is reverted: upscaling is off by default and only runs with an explicit upscale: true.
7. Every Tool Is Interruptible
The sequential tool executor now polls the interrupt flag every second and abandons a running tool within a 3-second grace period; image_generate additionally aborts its in-flight FAL wait cooperatively. Ctrl+C ends tools instead of holding the turn hostage for ~40s.
Improvements
- Kitty keyboard protocol restored (
CSI >1u) with a completed 294-entry extended-key alias table — kitty users get Ctrl+C and working combos. /statusno longer pairs a model with a provider/base URL from a different fallback route; persisted model routes stay consistent.- Bedrock API keys are delivered through a named provider (
custom:bedrock-mantle+key_env) instead of being dropped asapi_key="no-key-required". skills.disabledandagent.disabled_toolsetshonor JSON-array string forms (["a","b"]) saved viahermes config set.- Streamed
already_sentturns complete their /loop tick (LOOP_COMPLETE marker + judge run) instead of being endlessly rescheduled. - Multi-gateway connections are torn down and recycled cleanly on remove/edit, with a pool cap.
- Provider auto-detection keys resolve through the profile scope; Bedrock and auth paths honor per-profile secret scopes.
Fixes
- Windows: bounded process-scan probes so a slow WMI scan can’t wedge
hermes update; NUL-bearing cron script paths rejected before anyPathcall; systemdhermes-serveunits restart alongside gateways. - Windows scheduled-task gateways without pidfiles are spared by the orphan reaper.
image_gencatalog invariant pins all-off upscaling defaults.- Sequential tool calls bound to
timeouts.tools.sequential_call; the tool-call dedupe/reasoning-floor pair that caused regressions was reverted and reworked. - TUI: modified Enter and bare LF insert newlines in the composer across IDE and macOS terminals.
Upgrade
hermes update
After upgrading, run hermes doctor to verify the install, restart the gateway (hermes gateway) so platform changes take effect, and open Settings → Connections to explore the multi-connection registry.