v0.20.2

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.

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.
  • /status no 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 as api_key="no-key-required".
  • skills.disabled and agent.disabled_toolsets honor JSON-array string forms (["a","b"]) saved via hermes config set.
  • Streamed already_sent turns 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 any Path call; systemd hermes-serve units restart alongside gateways.
  • Windows scheduled-task gateways without pidfiles are spared by the orphan reaper.
  • image_gen catalog 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.

← Hermes Agent Changelog