Hermes Agent Lab

Hermes Agent Blog — Practical Guides & Insights

Latest articles and insights.

"Chat out of date": when the desktop refused every send

In a long, tool-heavy chat the desktop app could refuse every send with "Chat out of date" — surviving reload and relaunch. Nothing was actually stale: one component releases history by weight, the other judged freshness by message count. PR #125523 compares the transcript tail instead of totals.

Read more

190 wasted calls and no guard said a word

To wait on 10 background subagents, one model held the turn open with no-op execute_code calls: 190 main-model calls, 31 million input tokens, 49 minutes — and zero loop-guard notices. The verdict hash carried two bookkeeping fields that change on every call. PR #124724 drops exactly those two.

Read more

Your address is on the allowlist — does that make the sender you?

Two security fixes merged on 2026-09-27 closed the same class of hole in two gateways: email and SimpleX both treated a field the sender can write freely as an identity. One let any contact rename themselves past the allowlist; the other let a From: header carry a second address and pass as you.

Read more

Why Writing a Big File Into a Sandbox Keeps Failing

The same 200 KB write works locally and fails inside a Modal, Daytona or Vercel sandbox with "embedded null byte" — or writes an empty file while reporting success. The payload was being stuffed into the command line itself: Linux caps an argument at about 128 KiB, and any process on the box can read it. A fix merged on 2026-09-26 (PR #124206) finally sends stdin as stdin.

Read more

Watch Your Bot Work — and Take the Mouse When It Hits a Login

When the bot stalls on a sign-in, a 2FA prompt or a CAPTCHA, you no longer have to guess what it sees. On a headless Linux host every profile now has its own Xfce desktop, streamed live into Hermes Desktop: watch it work, take over the mouse and keyboard, then hand control back. Since 2026-09-23 the official images ship a -desktop variant with the packages baked in.

Read more

One Junk Line in jobs.json Stopped Every Cron Job You Own

The jobs are all listed, the schedules look fine, and nothing runs. A single null in jobs.json made load_jobs() raise on every tick, taking the whole scheduler down with it. A fix merged on 2026-09-26 (PR #124034) drops bad entries, repairs the file in place, and stops a null repeat counter from crashing a run.

Read more

Compaction Ate the Tool Result Your Model Was Waiting For

It ran your test suite, it produced thousands of lines — and then it told you it only saw a one-line "truncated" placeholder, with the screenshots gone too. Three fixes merged on 2026-09-26 (PRs #124208 / #124207 / #124231) close the holes where mid-turn compaction could destroy exactly the output the model was about to read.

Read more

Your API Key Went to the Wrong Host — Hermes Fixes base_url Routing

You pointed Hermes at a relay, a regional endpoint or your own gateway. On four code paths the configured address was quietly dropped and the request — with your credential attached — went to the vendor's own host instead. Here is what broke, how to check your setup, and where the fix lands.

Read more

The Agent Can Now Reach Into Your Blender Scene — Official Blender Lab Integration

Hermes ships an official Blender plugin: the Blender Lab MCP server over stdio, wired to your running session on loopback. Here is what it can do, the exact install steps, the prerequisite nobody mentions until it fails, and the security line you should read before pointing it at real work.

Read more

The Patch That Rewrote Bytes It Was Never Asked to Touch

Ask the agent for a one-line change in a file that is not UTF-8, and the tool could rewrite every other line too — silently, with the diff and the verification re-read both going through the same lossy path. Two fixes merged on 2026-09-25 make file writes byte-exact; here is how to check whether your repo was touched.

Read more

The Agent Went Quiet at Minute Four — Hermes' Timeout Layers, Explained

A reasoning model thinks for four minutes and gets killed at three. A hung provider call outlives the run budget it was supposed to respect. A cron job never finishes. Three fixes landed on 2026-09-25, and this is the whole timeout stack — defaults, floors, and which knob wins.

Read more

You watched the reply stream out — then it vanished: 10 delivery bugs Hermes fixed in one day

The worst streaming failure is not slowness, it is text you already read being treated as if it never happened: a partial reply discarded when retries run out, an interrupted answer re-rendered as a second copy, duplicate replies after switching sessions mid-stream, a context gauge frozen for the whole turn. These fixes all merged on September 24, 2026; here is the mechanism behind each, with PR numbers and an honest note on release status.

Read more

Two seconds of silence every time you say the wake word — local voices stop reloading now

Talk to Hermes with a wake word and you wait through the same two seconds of silence every time, because the voice was evicted milliseconds after it loaded and the next wake pays the full reload. v0.21.5 adds tts.keep_warm_seconds (default 60) for that, and finally makes the desktop voice loop read your config for spoken stop and barge-in. Sentence-by-sentence playback is still on main only.

Read more

v0.21.5 ships without release notes again — how to audit what your install actually got

v0.21.5 (tag v2026.9.24, released September 24, 2026) rolls the 460 merged PRs since v0.21.4 into a stable tag, and the release body defers the curated notes to v0.22.0. This guide is about the practical half: the commands that show you what is really in your install, plus the eight change groups in the window that are live today and not yet written up anywhere.

Read more

Your alert went to the group chat — now a follow-up question there actually works

Webhook deliveries used to be fire-and-forget: each event ran in its own session, so replying “is this the same failure as yesterday?” in that chat got you “who are you referring to?”. Since v0.21.5 a route can set mirror_to_session and the delivered text is written into the target chat session as a labelled user turn. Here is how to turn it on, what exactly gets mirrored, and the three boundaries you need to know.

Read more

Four crashes on Windows that only localized users ever hit

On a German Windows install every new conversation could die with a UnicodeEncodeError; on Chinese Windows the gateway log filled with gbk decode failures; paths starting with C:\\ could be neither tagged nor previewed; and a cold start was declared a failure by a 10-second probe. Four independent bugs with one thing in common — they only show up on a localized Windows. All four are fixed in v0.21.5.

Read more