Mission Briefing // NO. 027
Hermes v0.21.0, the Pantheon Release: a household of helpers gets faces, a phone line, and a memory
Hermes Agent v0.21.0 rolls the post-v0.20.0 patch window into one milestone: Bot Mode built into the desktop, hermes peer for bot-to-bot DMs across machines, cron jobs that remember their last run, and subagents you can steer mid-flight. What each one is for, how to wire it, and the hermes update path.
Every household of agents hits the same moment. The helpers exist, they work, and then one morning you want two of them to talk without you standing in the middle. For the Hermes household on this site, that moment is the story of the Bot Mode piece: Quill, the researcher, is a profile on the laptop; Warden keeps the night shift on the homelab box; and their inability to pass a note was the whole fight. v0.20.3 through v0.20.6 won that fight the hard way, one delivery bug at a time.
v0.21.0 is the moment the household stops being a workaround. The Pantheon Release shipped 31 August 2026 by Nous Research and rolls up everything since v0.20.0, roughly 5,800 commits from 760-plus contributors. What matters for the household is four changes, and each gets a room below: the reason it exists, the switch that turns it on, and the first thing to try. The keyless web tier, web search that needs no API key, already had its own piece inside this release window; this one teaches the new ground.
Every bot gets a face
Bot Mode is now built into the desktop and on by default, and nothing about rooms or handoffs changed mechanically — the roster simply ships with the app, no plugin switch.
Each row gets a name, a title and description, and a face: the avatar system draws that face from the bot’s name, so the same name keeps the same face forever, with a Randomize button if you want a different one. Under the paint nothing moved: every bot is still a profile with its own memory, skills, and credentials under ~/.hermes/profiles/<name>/, and the existing group rooms work the same way, two to six bots, handoffs by @mention. If you would rather the roster disappear, Settings → Plugins → Bots is still the off switch.
Cron jobs that remember yesterday
A face is cosmetic until it is backed by a mind, and a mind is exactly what the household’s morning jobs lacked, because a scheduled job used to wake up with amnesia every single run.
Hermes calls its scheduler cron, the thing that fires a job on a timer, and jobs on it used to have the memory of a mayfly: every run started blank, so the morning scan re-reported yesterday’s stories. Continuity is the counter: set continuity=true and the job injects its own most recent output into each run, so it wakes up seeing what it reported last time, plus one standing instruction, “avoid repeating what was already reported.” Every job also gets a durable notepad for working notes, and for quiet watchers there is a second trick: a job delivered to a bot chat can reply [SILENT], the delivery is suppressed entirely, and the output still saves to ~/.hermes/cron/output/ for audit.
With continuity switched on and delivery pointed at her chat, Quill’s morning job is one command:
hermes cron create "every 1d at 06:00" \
"Scan the overnight feeds for stories about the projects I watch. \
If nothing is new, reply with exactly [SILENT]." \
--skill blogwatcher \
--name "Overnight feeds" \
--continuity
Because the runs land in the bot’s own chat history, Quill’s 6 a.m. report sits in the same conversation where you would ask follow-up questions anyway. The household’s routines now persist between sunrises.
hermes peer: the phone line between machines
A face that talks to itself is no use. Hermes’s scheduler could now remember, but delivery to another machine either needed the desktop app running or settled for fire-and-forget timing, sent with no confirmation that the other side heard.
hermes peer registers another machine’s Hermes gateway, the service a machine runs so its agents are reachable, as a peer. The peer machine must run the api_server platform, Hermes’s built-in HTTP server, with a strong API_SERVER_KEY set on its gateway. Once hermes peer add knows the other machine, your bots can message across machines with no desktop involved — the Bot Mode piece’s courier problem, answered:
# <API_SERVER_KEY> below is a placeholder: paste the peer's gateway key
hermes peer add warden --url http://warden.lan:8377 --key <API_SERVER_KEY>
hermes peer list
hermes peer dm warden/researcher < /tmp/brief.txt
peer dm delivers into the remote agent’s canonical Bot Chat, the bot’s one permanent conversation, runs one agent turn there, one request-to-reply cycle, and prints the reply on stdout. It holds one HTTP connection until the turn finishes, so reserve it for short queries and receipts. Long turns get the same treatment as a phone call to a busy colleague: hermes peer run returns a run_id immediately, poll it with hermes peer status, hermes peer stop interrupts it, and a stable --idempotency-key makes a retry return the original run instead of starting duplicate work. Names live in config.yaml under bot_peers, and the key is stored as HERMES_PEER_<NAME>_KEY in ~/.hermes/.env. Once a peer is registered, the messaging protocol taught to every Bot Chat automatically includes the peer roster, so Quill learns on her own that Warden exists and how to reach him.
One honest limit, for the reason it teaches: a gateway behind home NAT can dial out to a public peer, laptop-to-VPS works, but the reverse direction has no inbound route unless your network provides one. Put the room’s authority on the host every participant can reach, or bridge with Tailscale.
Subagents you can steer mid-flight
Delegation had the opposite problem all along: workers were fired into the dark, and the parent could only wait. That changed in this release.
delegate_task, the tool an agent uses to hire child agents, spawns each child with a fresh conversation and the parent’s tool access, and steering is now a first-class flow. In the parent agent’s own tool calls, {"action": "list"} returns each running child with status and running_seconds, steer passes a course correction into a live child without stopping it, and stop ends a child early at its next iteration boundary, the gap between two tool calls, returning the partial result as an ordinary completion message that carries no stopped label, so the child’s own summary is the record of how far it got. From your side of the glass, /agents turns the same machinery into a live tree view with per-branch cost and token rollups, so a slow run that is actually the child thinking between tool calls stops looking like a hang.
When you steer, the child sees your correction as an out-of-band message at that same boundary between tool calls, and the in-flight tool call is never cut. A child that finished before the steer arrived comes back with a steer did not land note on its summary, so a steered child is never confused with one that finished on the old instructions. For Quill’s household this is the difference between a delegation being a black box and being a hire: send three children off to research, watch the one wandering into dead ends, and correct it mid-flight.
Also landed
The rest of the release notes is a stack of quality-of-life and plumbing items, worth a paragraph each rather than a room each.
- An MCP command center. MCP, the standard for giving agents outside tools, got a single desktop page: servers and the catalog merged, drag-in import, background health checks that nudge re-auth before a call fails, per-server cost and usage, and
hermes://deep links that ask before they act. The MCP docs cover the catalog underneath. - A CLI power wave, headlined by the Ctrl+P palette and a status bar with live cache-hit percentage, latency, and tokens-per-second alongside a global emergency stop. The palette is the one to try first, since the whole CLI becomes type-to-find.
- Six new providers plus model catalog additions, and
model_overrides, which patches any model’s context window or pricing without waiting on a release. - Security hardening. Protected agent-instruction files, AGENTS.md, skills, and memory stores, always require write approval now, so an agent tricked by a malicious page cannot rewrite its own standing orders, and a redaction sweep closed secret-leak paths in terminal errors,
.envreads, and checkpoints. - The desktop’s own browser became drivable: the agent navigates, clicks, and reads in the in-app browser, and pages pop out to your system browser.
Upgrade and go
The upgrade path is one command because the release is one artifact:
hermes update
Existing installs ride on top of their config and profiles. Register the peer, send the DM, and see who answers at 6 a.m.