v0.23.0

Hermes Agent v0.23.0


Overview

v0.23.0 — The Hearth Release. Released November 5, 2026. ~10,080 commits · ~1,950 merged PRs · ~8,720 changed files (+725,200 / −201,400) · ~850 issues closed · 666 contributors since v0.22.0.

The metaphor in the official note is worth keeping: v0.22.0 got newcomers through the door, and v0.23.0 builds the fire they gather around. In practice that means the pieces stopped being separate products. Your whole Desktop workspace now opens in a browser tab served by your own gateway. Every surface — classic CLI, TUI, Desktop, editor integrations, messaging bots, cron — attaches to one gateway that owns each session, instead of each running its own copy of the agent.

This release also rolls up and fully documents the v0.22.1–v0.22.7 patch releases, which is why the numbers are so large: the two-week patch windows that shipped without curated notes are now written down here.

Highlights

1. Your Desktop workspace in a browser tab

With webapp.enabled: true, the gateway serves the Desktop workspace on its own listener — same chats, same Group Chats, same plugins, same settings. hermes webapp opens it. Desktop’s Settings → Web Access serves it on your network or behind a public URL with sign-in.

webapp:
  enabled: true          # default: false
  host: 127.0.0.1        # default
  port: 9120             # default
  public_url: ''         # set when serving behind a proxy or public host

It is off by default and single-user: a signed-in tab acts as you, so the sessions it shows are the same ones native Desktop shows. Display settings follow you across devices on the same machine. The Docker image and the Nix package ship it.

2. One gateway owns every conversation

Before this release the CLI, TUI, Desktop, ACP editors, messaging bots and cron could each run their own agent against the same chat, which is how a message got written twice or disappeared between surfaces. Now one gateway per machine owns every session and every surface attaches as a client: a chat you open anywhere is the same chat, with one queue and one history.

Under that model you can steer or edit a queued prompt from Desktop without it running twice. The cycle also repaired what the first migration broke — slash commands, /retry, /refine, /review, clarify cards, reasoning display, usage and ACP sessions.

3. Pictures in the terminal

When you paste an image, or a tool takes a screenshot, the CLI and TUI draw it in the chat instead of printing a file path. Real pixels in kitty and Ghostty (CLI and TUI) and in iTerm2, WezTerm and Konsole (CLI); coloured blocks everywhere else; full resolution in VS Code’s terminal when its image support is on.

4. Rewind a conversation

Press Esc twice on an idle, empty composer — or type /rewind — and the CLI or TUI lists your earlier prompts newest first. Pick one, then edit and resend it, or fork a new session from that point. Edit-and-resend cuts nothing until you actually submit: the edit is re-validated against the picked turn first, and cancelling leaves the session exactly as it was. Fork reuses /branch and rewinds only the child, so the original session keeps its rows.

The TUI can also start /new while a turn is still running; the old turn keeps working in the background.

5. Every machine in one Desktop window

Desktop keeps all your registered gateways connected at once, so switching between this computer, an SSH host and a URL gateway is instant — no confirm dialog, no blanked session list. Terminal tabs run on the host they were opened on and say so in their label. A Group Chat can seat bots from different machines.

6. Group Chats that run themselves

Rooms can now let a lead bot, or an automatic router, pick who answers a message that names nobody. Scheduled jobs can post into a room with deliver: room:<room_id>@<profile>, waking only the bots they @mention. Rooms keep a purpose and shared notes, each bot shows what it is doing live, and bots no longer ping each other in endless loops: an exchange is capped at max_hops (default 4) after the last human message.

7. Plugins that keep themselves current

hermes plugins update updates every installed plugin in one pass, and an opt-in Auto-update switch (CLI, chat, Desktop, dashboard) keeps catalog and git plugins current. Updates that would break your setup are held back instead of applied. The catalog grew from about 600 to over 1,050 entries, and a new Verified tier marks plugins built by the vendor itself.

8. Price tags and spend limits for paid tools

Paid MCP tools can declare what a call costs, and the approval prompt shows the price plus the chat’s running total. With spend_limit set, Hermes asks before a chat goes over budget even on a trusted server and even in YOLO mode; where nobody can answer — a cron job, a headless chat -q run — the call is refused instead of silently spending.

mcp_servers:
  renders:
    command: "render-mcp"
    tool_costs:
      create_image: 20
      animate: {credits: [5, 20], note: "per animation"}
    spend_limit: 100
    cost_unit: credits

9. New official plugins, and a smaller core

Meshy (text and image to 3D), ElevenLabs Music and Sound Effects, X Chat, REA and a bubblewrap sandbox are one-command installs. Camofox, mcp-serve, the agent importers and Singularity moved out of core into plugins that install themselves for anyone who used them.

10. Choose how subagents are run

Delegation is pluggable: keep the default, or install the official advanced-delegation plugin to send each subagent task to a named model or into a separate profile. /delegation switches between routes.

11. Lighter and faster, especially when Hermes runs all day

Recurring cron jobs share one prompt-cache key. Background one-shot calls stop paying for cache writes, and one-shot runs send about 1,570 fewer prompt tokens per call. patch and write_file return in milliseconds with LSP on — a clean TypeScript edit went from 10.1 s to about 0.06 s. Long-lived gateways let go of closed sessions’ memory, and one Desktop sidebar backed by a store with ~35,000 cron runs went from a 121-second refresh to instant.

12. A leaner skill set you can lock

A fresh install ships 44 built-in skills instead of 58. Word, PowerPoint and Excel merged into one microsoft-office skill, 12 niche skills became optional installs, and skills that a vendor repo, catalog MCP or the built-in web search already covers were removed. After hermes curator lock <skill>, the agent cannot rewrite that skill through any tool, even under YOLO, and the curator will not archive it.

Upgrade notes

  • The old built-in browser tools are gone. Browser automation runs on browser_exec only; agent-browser and the ten browser_* tools (browser_navigate, browser_click, …) were removed. Homes that used Camofox get the camofox plugin installed automatically. If your prompts, skills or toolset lists name the old tools, switch them to browser_exec.
  • Desktop needs macOS 13+ and 64-bit Windows. The app moved to Electron 44, which no longer runs on macOS 11, macOS 12 or 32-bit Windows.
  • hermes mcp serve is now hermes mcp-serve. The command moved into a plugin, and MCP clients that launch Hermes as a server need their command updated — nothing rewrites it for you.
  • Office skills merged. Word, PowerPoint and Excel are one microsoft-office skill; old copies stay on disk until you remove them.
  • The Webapp is off by default. Nothing is served to a browser until you turn on webapp.enabled or Web Access.

Also in this window

  • Models — GLM-5.3 is the silent default when you never pick one, with the same 1M context window on Nous Portal and OpenRouter. GPT-6.1 Terra, DeepSeek V4.1 Flash 1017, Gemini 4 Argon on Solstice and Nemotron 3.5 Super VL land as new options; Claude Mythos is treated as always-thinking. /model reset takes a session pinned with /model back to your configured default without losing the conversation.
  • Compaction — opt-in compression.prepare_ahead writes the next summary in the background as a session nears the trigger, so compaction no longer pauses the turn. Summaries list uncertain claims on UNVERIFIED: lines. hermes sessions refresh-prompts lets continuing sessions pick up an edited SOUL.md, skill or context file on their next turn.
  • Security — more secret shapes are masked (quoted secrets, connection strings, Azure keys, non-PEM private keys, SMB passwords), the approval gate now prompts for curl … | sudo bash pipes and credential uploads hidden behind an approved rule, and a stale approval card can no longer approve the next request.
  • Cron — a running job can be cancelled from the CLI, Desktop, the API or the agent itself, and each job can declare what happens to runs missed while Hermes was off.
  • Reliability — the roughly once-a-minute gateway freeze during memory trims is gone, closed sessions leave memory, and hermes gateway stop / restart refuse while sessions are live.

Upgrade

hermes update
hermes doctor
hermes version

hermes doctor exits non-zero when it still lists an unresolved problem, so it doubles as a health gate after the upgrade.

← Hermes Agent Changelog