Browse by topic

Hermes yesterday, October 22, 2026: three features leave core, and subagents get routes

What landed on Hermes Agent main on October 22, 2026: hermes mcp serve, import-agent and Singularity moved into plugins, subagents routed per task to a model or a profile, Edge TTS working again, Pillow 13, Electron 44 and 1 new plugin, all of it already in v0.22.5.

Dark desert-dusk title card with white type reading three features left core, now plugins, already in v0.22.5, from the Hermes yesterday motion recap.

Three features moved out of core into plugins, and the move already shipped in v0.22.5, out overnight. If Claude Desktop, Cursor or Claude Code launch hermes mcp serve, that command now exits with a pointer: install the mcp-serve plugin and change the args to mcp-serve; hermes import-agent and hermes claw need agent-importers; Singularity users get their plugin installed for them. Also: subagents can now be routed per task to a named model or a Hermes profile. 190 commits landed on main; here are the 10 that matter.

1. Three features leave core: mcp serve, import-agent and Singularity

Before: Hermes as an MCP server (hermes mcp serve), hermes import-agent, the OpenClaw migration (hermes claw and the openclaw-migration skill) and the Singularity/Apptainer terminal backend were built into core. After: each lives in an official catalog plugin, and the old commands print where they went. hermes mcp serve exits with the new spelling and the install line on stderr, never on the MCP wire; nothing installs mcp-serve for you, because no Hermes config records which MCP clients launch it, so install it with hermes plugins install mcp-serve and change the client’s args to mcp-serve; the ten tool names stay the same. hermes import-agent and hermes claw point to the agent-importers plugin; it installs itself only on homes with a registered import sync source, and a first-time hermes setup now offers to import from OpenClaw, Claude Code, Codex CLI or Cursor when it finds one, installing the plugin only after a yes. Singularity keeps its backend name and config keys: hermes update installs the plugin once for every profile that uses it, the next agent or gateway start does it for the active profile (security.allow_lazy_installs still applies), and under plugins.isolation: host it refuses and names the setting to change.

Pull requests: hermes mcp serve, import-agent and OpenClaw migration, Singularity backend.

2. Subagents can be routed per task to a model or a profile

Before: every subagent followed the one delegation section in config.yaml or inherited the parent’s model. After: delegation.backend picks a delegation backend, and the default changes nothing (the delegate_task tool definition is byte-identical). With the new advanced-delegation plugin (item 10), Model routes gives the agent named options, each with its own provider, model, reasoning effort and speed tier, to pick per task, and Profile routes runs a task as another Hermes profile, with that profile’s model, credentials, SOUL.md and terminal policy. /delegation switches the mode for one session or with --global, and Desktop Settings > Model > Subagents gets a Routing section with a mode picker, a route editor and Install or Turn on buttons. It fails closed: when the saved mode’s plugin is missing or off, subagents are refused with the fix named, never quietly run on Default, and a task its route cannot serve is refused alone while its siblings run. Limits: profile routes are refused inside managed workers such as Kanban, the Desktop page does not show a session’s /delegation override, and a package-managed install refuses the writes. Plugin slash commands can now also ask you to pick an option: buttons on Telegram, Discord and Slack, a numbered list on other messaging platforms, a picker in the CLI, TUI and Desktop.

Pull requests: Pluggable delegation backends, Default strategy as a bundled plugin, Desktop Routing settings.

3. Edge TTS speaks again

Before: since about October 13, Microsoft’s speech endpoint rejected the token that the pinned edge-tts 7.2.7 sends, so every Edge synthesis failed with a 403. Edge is Hermes’s default free voice (tts.provider: edge), so voice replies broke for anyone on the default. After: Hermes pins edge-tts 7.3.1, which sends the new token, and a live synthesis produced audio with no 403.

Pull request: Edge TTS.

4. Pillow 13 closes three critical image-decoder holes

Before: Hermes shipped Pillow 12.3.0, a core dependency that resizes images for the vision tools, with 28 open advisories and no 12.x backport. Three are critical: a heap overflow decoding JPEG, a heap overflow saving TIFF to a buffer and a Ghostscript argument injection; 16 more are high. After: Pillow 13.0.0. browser-harness still pins 12.3.0, so Hermes overrides it; its contact sheets, thumbnails and click overlays came out pixel-identical. A plugin that asks for Pillow below 13 also gets 13.0.0.

Commit: Pillow 13.

5. Desktop moves to Electron 44, and leaves macOS 11, macOS 12 and 32-bit Windows

Before: the desktop app ran Electron 40.10.2, which sits inside two GitHub security advisories (the high one has no fixed 40.x release) and still trusts the eMudhra root behind eight compromised intermediate certificates disclosed on October 20. It stayed there because newer Electron broke the installer’s desktop build on Windows machines without the VC++ runtime. After: Electron 44.9.3, outside both advisories and no longer trusting that root; on Windows the build copies the runtime DLL that ships with Hermes’s own Python, with nothing installed system-wide. Heads-up: Electron 44 does not run on macOS 11, macOS 12 or 32-bit Windows, so the desktop app ends support there. Not tested yet: anything on macOS (notifications included), the PDF preview and a full installer run on a fresh Windows machine. Microsoft Store app with v0.22.5, the .exe and .dmg app with its next bundled release.

Pull request: Electron 44.

6. Fresh Desktop installs get onboarding and the free trial back

Before: since the unified gateway in v0.22.1, the gateway decided whether it was serving the Desktop on this machine from settings only a Desktop-launched backend had, so a new user landed on the provider picker with no free account and onboarding never started; Settings > Advanced > Run onboarding again opened nothing, and quitting before onboarding lost the trial. After: the Desktop declares itself on each connection, accepted only with a native control ticket so a remote or tunnelled client never gets the trial; a fresh install gets its free account and onboarding again. Once claimed, the trial model also runs cron jobs, Kanban workers, side agents and the CLI when no model is set, and a chat started on the trial moves to the provider you connect later. The provider picker no longer shows a grey box of CLI commands to someone who has not set up a provider.

Pull requests: Fresh installs, Run onboarding again, Trial runs cron and Kanban, Provider picker.

7. A chat whose folder is gone says so

Before: when a chat’s working folder was deleted, every message came back as The model request failed, Something went wrong. On the classic CLI, /goal burned its 20-turn budget in about 40 seconds judging those refusals, and safe-mode or config-only chats parked every later message behind a lost run, even after the folder came back. After: the turn is refused before it runs, and the reply names the folder and the way out: recreate it, /worktree new in the CLI or Move to project in Desktop. A refused turn never drives /goal or a /loop --until judge, and nothing is saved for a turn that never ran.

Pull request: Missing folder.

8. Usage-window plans: one bar per allowance

New for Nous subscriptions whose included usage is tracked as allowances (today, this week, this month, a separate one for large models) instead of a credit balance. /usage shows one bar per allowance with percent used and time to reset, and Desktop Billing adds gauges and a Keep going on credits setting. Model pickers list the plan’s recommended models first and tag them Large or Free. At a limit, the message names the allowance, when it resets and what still works; Hermes never switches models on its own and skips the fallback chain, and with a credential pool only the refused model is benched. Hermes only shows what the server sends, and only on Nous routes: other plans and providers see no change.

Pull request: Usage-window plans.

9. Desktop: mute the chimes, drag to pin, install with +

Settings > Notifications > Sounds gains Mute interface sounds, which silences the completion, wake and thinking sounds, haptics and the sound of OS notifications (the banners still show), plus None in the completion-sound picker. Drag a session onto Pinned to pin it and back out to unpin. In the Capabilities catalog, install is a one-way + button, an installed entry gets its on/off switch and Uninstall sits in its detail; the install dialog now shows the real tier (Official, Verified or Community) instead of calling every pick Verified, and the switch and + on compact cards act instead of opening the details. Gateway group chats show which bot is working again.

Pull requests: Mute sounds, Drag to pin, Install with + and tier badges, Group chat activity.

10. 1 new plugin in the catalog: the delegation routes

One new entry, and it is official: advanced-delegation, the plugin behind item 2’s Model routes and Profile routes, plus hermes delegation config and /delegation. It has no Python dependencies and makes no network or model calls of its own, and it writes only delegation.backend and delegation.backends in the active profile’s config.yaml. Heads-up: a model route’s optional api_key is stored in config.yaml in plain text, and listing a profile under profile routes lets this profile’s subagents use that profile’s credentials, SOUL.md and terminal policy. It needs v0.22.5; on an older core it loads, logs a warning and registers nothing. 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 never see, and most of them polished the new delegation routing and usage-window plans before they merged.

  • Windows updates from v0.22.4 get the new launcher and an install stamp at the new commit, instead of keeping the old hermes.exe on Python 3.14.7 after the same day’s Python repin: Windows will not delete the launcher that is running the update, so it is now renamed aside and collected later. The v0.22.5 release-candidate tests caught it before the release (pull request)
  • Stable-channel installs whose sessions already use the gateway runtime are held at their build instead of being offered v0.22.2 and then refused as a downgrade on every hermes update; Desktop, the dashboard and hermes update --check now say held (pull request)
  • The API server’s /v1/chat/completions reports finish_reason length for a turn that hit agent.max_turns instead of cancelled, which brokers read as an abort and threw away a usable answer; retrying a rate-limited call no longer draws a this looks like a loop warning (pull request)
  • terminal with background=true on Docker, SSH, Modal and other non-local backends said Background process started even when the launch failed (no bash in the image, sandbox gone); it now returns the real error, and background launches honour workdir (pull request)

If you noticed none of this, it worked.

Everything above already shipped in v0.22.5, out overnight (Desktop app changes reach the Microsoft Store app now and the .exe and .dmg app with its next bundled release). Latest stable: v0.22.5.

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