Browse by topic

Hermes yesterday, October 20, 2026: your gateway now asks before it stops

What landed on Hermes Agent main on October 20, 2026: gateway stop and restart that ask before cutting off live sessions, Telegram edits and mid-turn photos that reach the agent once, background jobs that report back, a classic CLI /worktree that really moves, Krea 3 and 50 new plugins.

Dark green cyberpunk city title card with glowing mint-white type in a central panel, reading your gateway now asks first, stop and restart spare live sessions, from the Hermes yesterday motion recap.

Heads-up if a script or cron job restarts your gateway. hermes gateway stop and restart no longer cut off live sessions on their own: in a terminal they list what is running and ask y/N, and without one they refuse while sessions are live unless you pass --yes. Also: Telegram edits and mid-turn photos reach the agent once again, and delegate_task is back inside Kanban cards. 566 commits landed on main; here are the 10 that matter.

1. hermes gateway stop and restart ask before they cut off live sessions

Before: hermes gateway stop or restart took the gateway down whatever it was running, mid-turn included. A command run under a different HOME (a test, a sandbox, a scratch folder) could also resolve the account’s real service name and stop another install’s gateway: one such probe stopped a real gateway mid-session, interrupting six background delegations, with about 100 s of downtime, and hermes profile delete or rename from such a home could stop and remove the real profile’s service. On a multi-profile gateway, hermes -p <profile> gateway stop killed the shared host that serves every profile. After: stop and restart list the live turns, cron jobs and delegations and ask Interrupt them and stop the gateway? (y/N), default no; -y or --yes (alias --interrupt) skips the question. With no terminal to ask on (scripts, cron, Desktop) they refuse while sessions are live unless --yes is passed, so Desktop’s gateway restart now refuses too, and the browser dashboard’s stop answers with the list instead (its restart stays a deliberate force). The same check covers sudo hermes gateway stop --system and hermes -p <profile> gateway stop, which now parks just that profile and leaves the host running. hermes update still drains turns first and restarts without asking. Every lifecycle verb, the --all sweep and profile delete and rename leave alone any service that pins another Hermes home. Not covered live: macOS launchd and Windows services (tests only).

Pull requests: Live sessions and other installs’ services, sudo –system, -p profiles and y/N, Profile delete and rename, Profile stop parks, host stays up.

2. Telegram edits, mid-turn photos and path messages reach the agent once

Before: since the one-gateway change, editing a Telegram message got the reply Sorry, I encountered an error (RuntimeStoreError). admission_conflict; a message that starts with a path, like /tmp/notes.md is broken, was refused as a command with no model turn; a photo or voice note sent while the agent was busy made two turns and two replies, the first without the media; a long Chinese, Japanese or Korean prompt in a hosted room was rejected before it connected; and a message Buzz split into parts became separate turns. After: an edit gets its own reply (edits stay turns, keyed by Telegram’s update id), a leading path is read as text, a busy photo or voice note is one turn with its media, CJK prompts under 128 KiB go through, and a Buzz burst merges into one turn. Checked with the in-repo Telegram and Discord stand-ins running the real SDKs, not the live services.

Pull request: Messages reach the agent once.

3. Background work reports back instead of dying or looping

Before: once more than 16 Desktop or TUI sessions were open (max_live_sessions), an idle session with a background process started with notify_on_complete could be evicted seconds after its turn, and eviction killed the process, so the promised I will report back never came (one host lost four such processes in an afternoon). Notices the gateway refused were retried every 2 s forever, async delegation results were requeued forever, cron jobs with deliver: bot-chat hit not_found on every run, and message_agent from a gateway-hosted turn reported its DM as ambiguous, do not resend. After: a session stays resident while a process that will notify it runs and until its notice is routed. A notice refused for good (its session was closed by /new, or the gateway answers not_found) backs off and is dropped after 8 tries with one warning, while temporary refusals such as a restart keep backing off without a limit. bot-chat cron delivery works again, message_agent reaches its target, and a failure before dialing says it is safe to resend. A message typed into a running cron chat now says why it was refused, with Start new chat in Desktop. Not covered live: Desktop with more than 16 open sessions, and real Telegram, Slack and Windows.

Pull requests: Notify sessions kept alive, Refused deliveries settle.

4. Classic CLI: /worktree new really moves the agent, and /snapshot restore works

Before: in the classic CLI (hermes chat) on the shared gateway, /worktree new said tools now ran in the worktree while the terminal stayed in the original checkout, so the agent edited and committed in the main tree and the untouched worktree was removed on exit; Desktop’s Move to project had the same gap for any session whose terminal had already run. /snapshot restore always failed with some files were refused; /compress printed success and counted a compression when the summary call had failed; /save wrote a bare copy without the title; /cron add, edit and run wrote cron/jobs.json from the CLI, a second writer next to the gateway; a /resume the gateway refused still ended your current session; and /new, /resume and /branch kept showing the previous session’s usage. After: /worktree new asks the gateway to move the session and the terminal follows (a refused move changes nothing and says why). /snapshot restore has the gateway let go of the profile, restores and reconnects; a gateway run by systemd, launchd or Desktop is refused up front. /compress reports an aborted summary with its reason, /save writes the gateway’s full export on your machine, every /cron form runs on the gateway, a refused /resume keeps you where you are, usage and the todo list follow the session you switch to, and hermes -c skips empty launch stubs and finds sessions created through the gateway. The manage_connections sign-in card is back in the classic CLI too.

Pull requests: /worktree new and Move to project, /snapshot restore, /compress, /save, /cron, Refused /resume, Usage after a switch, Todo list on resume, Session listing and -c, Older compressed sessions, manage_connections card.

5. Krea 3 becomes the default image model for paid Nous subscribers

New: Krea 3 generates and edits images through the Nous tool gateway, or directly with your own KREA_API_KEY. Paid subscribers on Nous who never set an image model and have no FAL key of their own now get Krea 3 by default; a saved model and the free tool pool’s default stay as they are. Edits take up to four reference images, local files included, and keep the source’s framing. Thinking (fast or high) and resolution (1K or 2K) default to fast at 1K. The image tool’s options follow the selected model, so Krea 3 shows its editing controls and Krea 2 its style controls.

Pull request: Krea 3.

6. Kanban cards can delegate again

Before: since the one-gateway change, every Kanban card runs as a gateway-managed worker, and those workers had no delegate_task (asking for it got a misleading call it directly); session_search failed with an error; and a card whose owner died before its worker started held its profile slot forever. After: delegate_task works inside cards. The gateway reserves each child, caps come from delegation.max_concurrent_children and max_spawn_depth, children end with their parent, and a gateway restart ends in-flight children without replaying them. session_search reads the profile’s own state.db, and a provably dead attempt frees its slot, with kanban diagnostics naming it stale_running.

Pull requests: delegate_task in cards, session_search and stuck slots.

7. A second profile is served right away, and Desktop picks reach Telegram chats

Before: a gateway that booted with only the default profile never served a profile created later, so a new Desktop bot failed with Invalid gateway ticket response; slash and @ completions showed No matches in a secondary profile’s window; New Group Chat offered bots it then refused; picking a model or reasoning level for a Telegram or other messaging session failed with runtime_coordination_required; and a correction sent to a busy session whose agent was not ready yet was dropped in Desktop and stuck as queued forever in the TUI. After: when a second profile appears, that gateway starts serving every profile in place, with no restart and no drain (gateway.auto_multiplex_migration: false keeps it on one profile). Completions go to the session’s owner, the group picker offers only bots it can seat, a messaging pick sets that chat’s own override as its /model and /reasoning do, and an undelivered correction comes back as the next prompt, never twice. Limits: that reasoning override is kept in memory only, like the chat’s own /reasoning, and a pick made mid-turn applies from the next turn.

Pull requests: Second profile served in place, Messaging picks and corrections.

8. MCP tools show live progress

New: Hermes now asks MCP servers for progress on every tool call. When a server reports it, Desktop’s running tool row shows it next to the timer (42% · refining mesh stage 9/24), the classic CLI spinner shows the same, and Desktop plugins can subscribe to a tool.progress event (at most one every 500 ms per call). Before, a 2 to 4 minute 3D refine showed only Running … 11s. Not covered: the Ink TUI, messaging platforms and MCP calls through the Codex runtime. Progress does not extend the tool timeout yet; a fix for that is still in review (linked below).

Pull requests: Live progress, Timeout reset on progress, in review.

9. Desktop’s Capabilities page becomes a catalog, and git plugins get an Update button

New: Desktop’s Skills, Plugins, Connectors and Tools tabs are redesigned as a card catalog that replaces the embedded docs-site picker. Plugins come in Official, Verified and Community tiers with a tier filter, shelves are ordered by stars, cards show artwork, and a featured pick rotates weekly, the same one the docs site shows. Before: a plugin update whose new code the security scan rated caution was blocked with a hint to use --force, a flag hermes plugins update did not have, and Desktop refused to update any plugin not installed from the catalog. After: hermes plugins update shows the findings and asks Update anyway? [y/N], --force accepts a caution verdict, and a dangerous verdict still always blocks. Desktop and the browser dashboard show the same findings in a confirm dialog, and git-installed plugins get an Update button from the saved update check (every 24 hours by default, or hermes plugins check-updates).

Pull requests: Catalog redesign, Update past a caution scan, Update button follow-up.

10. 50 new plugins in the catalog: Desktop leads

50 new entries, and Hermes Desktop was the day’s theme: 13 add panes, pages or status-bar chips, from a Miro-like board the agent draws on (hermes-board) and a read-only Git review pane (git-review) to a live tokens-per-second chip (hermes-token-speed). One is verified, Cua’s own cua-spaces, which runs Hermes’s terminal, file and code tools inside an isolated Linux machine you can watch live; the other 49 are community entries. Several send data to hosted services (bharatcode-provider sends your prompts, tool schemas and key to bharatcode.ai; promoat sends your scripts and media URLs to Promoat): read the disclosure before installing. Catalog entries do not wait for a release: they go live once the published catalog refreshes.

Meanwhile, in the engine room

Dozens of fixes landed yesterday that most users will never see, and the shared gateway took most of them again, still settling in after the one-gateway change.

  • hermes serve and the Desktop backend now free a closed session’s memory: a token-count cache kept every message body, the event replay ring stayed until 64 newer sessions pushed it out, and garbage collection never ran on macOS. 5 minutes after 20 sessions closed, the process went from 380.6 to 293.0 MB on macOS and from 476.6 to 432.6 MB on Linux (pull request)
  • On Amazon Bedrock, switching mid-session between Claude and OpenAI’s reasoning GPTs (a fallback or /model) failed every retry in both directions, because each model’s reasoning was replayed to a model that rejects it; each model now gets only the reasoning it can take (not run against live Bedrock) (pull request)
  • Sandbox terminal backends (Modal, Daytona, Singularity and remote plugin backends such as Sprites) were sent the Hermes host’s launch folder from TUI, dashboard and Desktop chats, so every command failed with cd: No such file or directory; with no folder picked they now start in the backend’s own default (pull request)
  • On Telegram for Android, a DM topic created from All messages got its first message and the reply in the previously used topic; the reply, session and auto-rename now land in the new topic (your own message still shows in All messages, which only a Telegram client fix can move) (pull request)

If you noticed none of this, it worked.

All on main, ships in the next release. Latest stable: v0.22.2.

Watch the recap

The 56-second motion recap, made with Remotion, is on X.

Was this configuration guide helpful?

If you have questions, encountered issues during setup, or want to discuss networking and security, connect or reach out on LinkedIn.

Connect on LinkedIn