
Your renamed Hermes profile left a ghost in the state DB
A renamed profile used to leave the state DB pointing at the old name. PR #112653 migrates that identity, adds a retry command, and tombstones deleted profiles.
Read more
Gateway profile multiplexing is on by default now
gateway.multiplex_profiles now defaults to on, but a boot guard settles an unset flag at every boot: one gateway serves all profiles only when the fold is safe.
Read more
Why state.db Gets Corrupted Inside Docker Desktop, OrbStack and WSL2 Mounts
Bind-mount your data directory into a container and virtiofs or 9p cannot give SQLite WAL the shared lock it needs, so two writers corrupt state.db quietly while every integrity check passes. Since PR #111433, Hermes says so at startup and in hermes doctor, with two concrete fixes.
Read more
You Already Pay for Thinking You Don't Need: Reasoning Effort in Every Hermes Model Picker
Billing a one-line rename at ultra reasoning effort is the most common waste in an agent setup. PR #110346 puts an effort step on every model picker — hermes model, /model, the Ink TUI, the messaging gateway. Here is the whole control surface: /reasoning, the Desktop composer pill, per-task effort in Settings → Model → Auxiliary, agent.reasoning_overrides, and delegation.reasoning_effort.
Read more
Why Your MCP Tools Keep Logging You Out: Inside the OAuth Token Lifecycle
Figma, Linear, and Notion keep asking Hermes to sign in again — and it is usually not a misconfiguration. Here is the token lifecycle behind it: how concurrent refreshes trip reuse detection, why a refresh token must stay bound to the server that issued it, and the four fixes Hermes shipped for it.
Read more
hermes profile update used to delete your skills and cron jobs
PR #111344 fixes a P1 data-loss bug: updating a profile distribution replaced the whole skills/ and cron/ directories, wiping anything the user had added. They are now merged per root, so your additions survive while the author's shipped roots still update.
Read more
Hermes v0.21.3: your desktop session stops signing itself out after sleep
v0.21.3 (tag v2026.9.14) is the patch tag that carries remote sign-in fixes to Docker and Cloud users: concurrent refresh bursts no longer revoke the whole session, refresh runs off the event loop, and long-lived processes stop leaking duplicate state.db writer handles.
Read more
Your iPhone Photos Finally Work: HEIC Decoding in vision_analyze, and Vision Tools That Stop Vanishing
Feeding an iPhone photo to Hermes used to return one line: source is not a recognized image. PR #106408 added ISO-BMFF ftyp sniffing plus pillow-heif normalization; PR #110136 fixed the cache poisoning that made vision tools disappear in long-running processes.
Read more
How to Complete OAuth on a Remote Server: SSH Tunnels, Pasted Callbacks, and Device Codes
When Hermes runs on a cloud VM or behind a jump box, loopback-redirect OAuth (Spotify, remote MCP servers) breaks at 127.0.0.1. Three workable routes: an SSH local forward, pasting the redirect URL back, and device-code or paste-the-code flows.
Read more
169.254.169.254 Now Asks First: Hermes Gates Cloud Instance-Metadata Credential Fetches Behind Approval
On a cloud VM the instance-metadata service hands temporary IAM credentials to any local process with no authentication. After PR #106418, commands that hit 169.254.169.254, fd00:ec2::254, metadata.google.internal or 100.100.100.200 prompt for approval instead of being auto-approved.
Read more
When Your Fingers Hit Esc: Vim Keybindings for the Hermes CLI Composer (Plus the Branch Name in Your Status Bar)
You type a long prompt, spot a typo, and reflexively press Esc to fix it — nothing happens. After PR #106412, display.vim_mode turns the CLI input composer into a vi-style editor, with a live NORMAL/INSERT/REPLACE label on the status bar.
Read more
Hermes v0.21.2: Multi-Profile Isolation Hardening, and No More One Backend Per Profile
v0.21.2 closes seven cross-profile leak paths in multi-profile installs, stops the desktop from spawning a backend for every profile, and cleans up a batch of cron, kanban and memory behaviours that never made sense.
Read more
No More Restart: Hermes Hot-Serves Profiles You Create While the Gateway Is Running
You create a third profile at 2 a.m., paste in the bot token, send hello in Telegram, and nothing answers — the desktop still says that profile's gateway is stopped. The only documented fix is restarting the gateway, which interrupts the two profiles happily running long jobs. PR #109239 changes that: a running multiplex gateway now reconciles its profiles directory at runtime. New profiles are served on the spot, credentials pasted in later rebuild their adapter, deleted profiles get torn down and de-routed, and a 30-second rescan covers the failures. Merged to main on 2026-09-12, after the v0.21.2 release.
Read more
Hermes Now Gates Package-Manager Uninstalls Behind Approval
A global npm package is quietly slowing your builds, so you type `npm uninstall -g some-package` and hit Enter. Two days later CI is missing it and every project on that machine is affected. That command used to run with no prompt at all, because the dangerous-command gate only knew shell primitives. PR #109170 (merged to main) adds a package manager uninstall rule for npm, pnpm, yarn, pip, and brew: removals now ask, while installs and updates still slip through. The rules are anchored with _CMDPOS so quoted text isn't misflagged, and a global option plus one argument still gets caught.
Read more
Hermes MCP include: an explicit empty list now blocks everything, everywhere
tools.include: [] used to be read as “key not set” by several surfaces. After PR #109188, hermes mcp list, hermes mcp configure, hermes tools, catalog reinstall and the desktop MCP panel all read it as 0 selected.
Read more
Hermes Cron Jobs Now Degrade Instead of Failing on systemd Gateways With No User D-Bus Session
On systemd-managed gateways that have no user D-Bus session (containers, slim LXC, service users without linger), every due cron job used to fail right at dispatch. PR #109311 makes those jobs degrade instead: still a separate external worker process, just without cgroup isolation, with a single warning per gateway process. Set cron.require_restart_safe_scope: true to get the old fail-closed behavior back. Merged to main on 2026-09-12; not in a tagged release yet.
Read more