HNT/LOG/HERMES-AGENTREVISION 2026.09.20STATUS: PUBLISHED
← Zurück zum Build Log agent // build-log

Hermes Agent v0.21.3: why 338 pull requests hide inside a patch release

Hermes Agent v0.21.3 (v2026.9.14) ships 338 pull requests as a patch release. I read the two curated fixes for refresh bursts and duplicate state.db writers and check what they mean for an agent stack running on a 45 euro phone.

Hermes Agent v0.21.3: why 338 pull requests hide inside a patch release
SYSTEM NOTE // CURRENT BUILD● LIVE ARCHIVE
DEVICEGOOGLE PIXEL 6A
INPUTRII K06
ROOT ACCESSNONE
RUNTIMETERMUX / HERMES
READ THIS AS FIELD NOTES

Kein fertiges Produkt und keine Hochglanz-Rückschau: Dieser Eintrag hält fest, was gebaut, getestet, verworfen und als Nächstes überprüft wird.

A patch release that carries 338 pull requests sounds like a contradiction, and that contradiction is why Hermes Agent v0.21.3 (v2026.9.14), published on September 14, 2026, is the most interesting release note I read this week. The curated part on GitHub names two fixes: remote dashboard sessions no longer die from refresh bursts, and long-lived processes stop leaving duplicate writer handles on the state database. Everything else that landed between v0.21.2 and this tag is not narrated in the notes but measured: 1,036 non-merge commits across 2,642 changed files, with 131,690 lines added and 37,096 removed. I operate my own agent stack on a used Google Pixel 6a, and I read this release on September 20, 2026. In this post I break down what the two visible fixes actually solve, what the state.db story teaches anyone who runs agents, and where my reading ends, because I have not tested the fixes live as of the retrieval date.

The release in numbers

338merged pull requests in the window since v0.21.2, release note dated 14.09.2026, retrieved 20.09.2026
1,036non-merge commits since v0.21.2, measured at commit 9b419a2d, release note, retrieved 20.09.2026
2,642changed files in the window, plus 131,690 and minus 37,096 lines, release note, retrieved 20.09.2026
0OOM kills in 306 of 306 hourly checks on September 7, 2026 on this deck, stability snapshots, measurement register

Fix 1: sessions that died from refresh bursts

The first fix, #110061, is a textbook case of distributed systems failing without anything being broken. The desktop backend rotates the refresh token on every renewal. Waking the device fires several refresh requests at the same already-rotated token, according to the release note. The portal side reads that pattern as token reuse and applies the rule its reuse detection prescribes: it revokes the entire session. To the user this looks absurd, because the most ordinary action, waking the machine after a pause, kills the login. The fix coalesces concurrent refresh requests that carry the same token, on both paths, the cookie gate at the gateway and the desktop's native bearer route, which now converge into the same coalesced call. Refreshing also leaves the event loop, so a slow identity provider can no longer freeze the status route. On the portal side, pull request #1209 adds a sliding 30-day idle horizon plus a five-minute grace window for the rotated token. Three lines of defense against a problem that, seen from a single server, looked like an attack.

Fix 2: duplicate writer handles on the state database

The second fix, #110934, cleans up a pattern that long surfaced only as noise. The gateway, the dashboard, the desktop backend, ACP and the CLI readers each opened their own handles to the state database, and in long-lived processes duplicate writer handles piled up, with the precursor reporting messages such as N live SessionDB handles while the topology was healthy. The release note links this pattern to two open issues, #100896 and #103339. The solution reads unremarkable, and that is the lesson: readers connect read-only, and writers inside one process share a handle through a registry instead of opening their own. This is not a feature, it is hygiene for long-running software. And operating agents is mostly running long-lived software, gateways, watchdogs and cron jobs that stay up for days or weeks and never forget the small impurities they accumulate.

What else swam in the window

The real story of this window sits in the section the notes deliberately keep quiet. Listed but not curated: server-to-client JSON-RPC and a Pydantic wire-contract registry that generates TS and OpenRPC artifacts for the gateway between TUI and desktop, reasoning-effort selection in every model picker, OpenRouter login via OAuth PKCE, decoding for HEIF, HEIC and AVIF images, Wan 3.0, Kling 3.0, Kling Image v3, MiniMax H3 Max Turbo, Gemini Omni Flash 1.1 and Meta Muse in the FAL catalogs, pasted tables in Slack, an Agent Sessions API, multiplexed-profile isolation, and the WAL refusal on cross-VM filesystems. Anyone who reads only the two curated fixes misses half the release. A patch release here is not a patch in the sense of small repairs, it is a timestamp at which 338 merged pull requests receive a stable number, so cloud instances and docker images can adopt them as one package.

Why a patch release carries 338 pull requests

The text says it plainly: the tag exists so that the remote-gateway sign-in fixes reach the cloud agents, which auto-update to the newest release tag. Downstream consumers such as docker images, Hermes Cloud and hosted deployments need a stable anchor, and the tag is that anchor. This is a model you can copy directly when you operate your own systems: curated notes for users, a complete measurement line for operators, a stable tag for automation. Curation is not decoration here, it is a decision about what the world should hold on to during an upgrade. The two visible fixes are the two places where users had complained, everything else in the window rides along. For my own understanding of release work, that is the real message of this tag: the visible story and the actual mass of a release may drift apart, as long as both are documented honestly.

What it means for my setup on the Pixel

My agent stack runs on a 45 euro phone, the Google Pixel 6a, with a gateway, cron jobs and a postbox of agent events. Database and process hygiene are not a side topic there, they are daily work. On this deck I watched the OOM storm of August 28, 2026, 46 OOM kills in seven days according to the snapshot from August 31, followed by hardening that reached 306 of 306 hourly checks with zero OOM kills on September 7, including an 88-hour streak from late August into early September. The week up to September 14 showed five OOM kills at a still unbroken 100 percent liveness rate, the numbers live in the stability snapshots of my measurement register. That is why I read a release like v0.21.3 not as news but as a tool list: handles that keep readers from writing, refresh paths that coalesce burst replays, and an update path through hermes update while cloud instances jump to the newest tag on their own. Honesty belongs in here: as of the retrieval date I cannot prove which patch number runs on my deck, and I have not tested the two fixes live. The measurements above are my own, the rest is careful reading.

The limits of this reading

The limits are open, and they still matter. First, every number in the release text is the project's own measurement, taken at commit 9b419a2d, and the notes are curated, the document says so itself. Second, the two visible fixes are written from the perspective of the users who requested them, how often the refresh-burst pattern occurs outside the reported cases remains unknown. Third, there are no independent tests or benchmarks as of the retrieval date September 20, 2026, no third party has measured the behavior of these fixes. Fourth, a new tag for cloud instances is not proof that your own setup already contains them, self-hosted setups pick the fixes up at their next regular update. Running agents on your own hardware therefore means reading release windows the way I did here: as a list of tools that name problems you did not have on your radar before.

Frequently asked questions

FAQ
What is inside Hermes Agent v0.21.3?

A patch release from September 14, 2026 with roughly 338 merged pull requests since v0.21.2. Curated: remote dashboard sessions survive refresh bursts (#110061) and long-lived processes stop leaking duplicate state.db writer handles (#110934). Updates run through hermes update, cloud instances move to the newest tag automatically.

Why did remote dashboard sessions die when the device woke up?

Waking fired several refresh requests at the same already-rotated token. The portal side read that as token reuse and revoked the whole session. The fix coalesces simultaneous requests with the same token on both paths, and the portal adds a 30-day idle horizon plus a five-minute grace window.

What are duplicate state.db writer handles?

The gateway, dashboard, desktop backend, ACP and CLI readers each opened their own handles to the same database, and long-lived processes accumulated duplicate writer handles. The fix binds readers read-only and lets writers of one process share a handle through a registry. It resolves issues #100896 and #103339.

Should I update to v0.21.3 right away?

Cloud instances do it automatically, that is the purpose of the tag. For your own installs the regular rhythm through hermes update is fine. The notes are patch curation without a security warning, but if you have seen the refresh-burst or writer-handle symptoms yourself, that is a direct reason to move earlier.

Are the numbers 338 pull requests and 1,036 commits independently verified?

No, they are the project's own measurement, taken at commit 9b419a2d and stated in the release note. Independent tests or benchmarks for the two visible fixes did not exist as of the retrieval date September 20, 2026. This post therefore separates reading from measuring and marks that boundary.

About the author

About the author: I am Marcel, I run the HUNTER cyberdeck on a used Google Pixel 6a and operate the agent stack behind it in daily use. This post draws on my reading of the Hermes Agent release note dated September 14, 2026 (retrieved September 20, 2026) and on the stability snapshots of my measurement register from August 31 to September 14, 2026. I have not tested the two fixes live, that boundary is stated in the post. Last reviewed on September 20, 2026.

GitHub: NousResearch/hermes-agent, releases, v0.21.3 (v2026.9.14), retrieved 20.09.2026 ↗

GitHub: Hermes Agent pull request #110061, remote dashboard sessions survive refresh bursts, retrieved 20.09.2026 ↗

GitHub: Hermes Agent pull request #110934, no duplicate state.db writer handles in long-lived processes, retrieved 20.09.2026 ↗

GitHub: Hermes Agent issue #100896, duplicate live handles on the session database, retrieved 20.09.2026 ↗

Internal reading: Comment pins in the browser: Hermes Desktop 0.21 ↗

Internal reading: Flask creator Armin Ronacher on the pi agent and agentic workflows ↗

Community Signal

Nachgebaut oder getestet?

Teile deine Erfahrung mit genau diesem Build-Log. Reviews werden vor der Veröffentlichung moderiert.

Noch keine Reviews für diesen Eintrag.

GitHub Discussions

Fragen, Reaktionen und Verbesserungen werden direkt über GitHub Discussions eingebettet.

GitHub-Bereich öffnen ↗
Dein Testbericht

Erfahrung zurückmelden