Hermes Agent Lab

Hermes Agent Blog — Practical Guides & Insights

Latest articles and insights.

Featured Post

You only opened that community skill — and it ran a shell command

You install a skill from a community hub, and one day you open it just to read what it does. That single look used to be enough to execute the skill inline-shell snippet. Worse: when another profile reached the same skill through external_dirs, the command ran there too. Four trust boundaries were tightened — nested skills, cross-profile views and an unreadable hub lock now fail closed. The same week brought skills-guard-v9 false-positive fixes, ~1,900 uninstallable index rows removed, and two installs that could never succeed.

Read more

Desktop plugins can finally press the app's own buttons: ctx.runAction and ctx.pet.say

Desktop plugins used to trigger built-in features by faking a keyboard event — rebind the shortcut and the button silently dies. Now ctx.runAction(id) runs the same handler as the shortcut and the command palette, exposes view and navigation actions only, and always returns a value instead of throwing. Alongside it, ctx.pet.say lets a plugin speak through the core pet bubble without touching the app DOM.

Read more

Free-tier guests stop getting the browser challenge for connectors: the scoped guest token

A change merged in the v0.21.7 window means a free-tier guest who only uses connectors or managed tools no longer meets the browser challenge. Hermes now mints a token whose only scope is connectors:invoke — the challenge and PoW gates are waived for it, and the inference gateway refuses it. Here is how the two tokens differ, how a slot is chosen, and which background paths used to mint inference by accident.

Read more

Image defaults for subscribers changed: Krea 2 Medium Turbo, with FAL standing behind it

A paid install that never opened hermes tools used to get FAL's FLUX 2 Klein 9B. Paid accounts now default to Krea 2 Medium Turbo — written only when the image section was never configured, has no stored model, and the account is entitled to Krea. Reference images are now described as copying a look rather than editing a picture, and a Krea refusal that provably created no job is rerun on FAL, with the result naming who actually ran.

Read more

The model no longer forgets what it thought: reasoning replays across turns, reloads and compaction

A per-route reasoning carrier table, a private hermes.native_assistant record, and a "record the rejection and retry once" fallback: Hermes now replays reasoning by default on every provider that can read it, and compaction and branching stop deleting earlier-turn reasoning. Here is which field each route gets, and where to look when it misbehaves.

Read more

After v0.21.7, `hermes update` follows tagged releases only — know which channel you are on

v0.21.7 (October 11, 2026) changes how source installs update: by default you only move to the latest published release, and following main is now an explicit choice. The same window also fixes reasoning lost on resume and update failures behind regional firewalls. Here is what changes, how to switch, and what will not happen to your install.

Read more

One Click on Regenerate, and 107 Messages Were Gone

Hermes Desktop regenerate could replay a turn from four hours earlier and silently archive 107 later messages. Now a rewind that would drop a later user turn asks first — plus the server-side turn counting, the 4033 refusal and next release's enforcement switch.

Read more

When a Subagent Finished, It Used to Steal the Chat

A background process started inside a delegate_task child recorded the child as its completion owner, so the gateway moved the chat route onto the child and dropped the parent delegation result. Here is the chain, the fix, and the boundaries that did not move.

Read more

A Rate-Limited Cloud Browser No Longer Kills browser_exec

When the cloud browser provider returns 429 or goes down, browser_exec now falls back to the local packaged Chromium instead of failing the call, and localhost or LAN pages open on a local sidecar so private URLs never reach the cloud.

Read more

Two Gmails, One Hermes: Connector Accounts Finally Get Names

Hermes connectors now support several accounts of the same app with a short alias (work, home), tell you which account every call ran under, and repair one account at a time. Covers the hermes connectors CLI, the /connectors TUI overlay and the desktop UI.

Read more

The Hermes in Docker lost half its dependency tree — the image never recorded a baseline

You open the Hermes running in Docker and the API server says aiohttp is not installed. Messaging adapters and MCP servers are gone, hosted agents report as degraded. You changed nothing. The cause: since v0.21.6 the eight extras baked into the image were never recorded as the dependency baseline, so the first generation the container built itself became the new baseline. The image now records it, and every boot restores what went missing — volumes that are already broken heal on their own.

Read more

hermes update quietly changed its default: no more tracking every commit

You run hermes update on Wednesday morning and it says there is no newer release — while also telling you that you are hundreds of commits behind main. You changed nothing. The default update channel for an official source install moved from main to stable, which only moves between published vX.Y.Z releases. Here is what stable means, where the channel is stored, the difference between --set-channel and --channel, and the one rule that surprises people: the default only moves forward.

Read more

Hermes Told a 16 GB Machine to Run a 27B Model: Now It Says No

A GTX 1080 with 16 GB of RAM was told Qwen3.8 27B fits this machine, and an integrated GPU was budgeted the whole system RAM. Hermes fixed three stacked bugs behind a bad local-model recommendation.

Read more

Your Memory Provider's Recall Was Being Truncated: Opt-In Spilling and Two Other Silent Failures

External memory recall used to be swapped for a head/tail preview before it ever reached the model. Hermes now keeps it intact by default (memory.prefetch_spill_enabled), and fixes an 8 KB discovery limit plus a startup install-retry loop.

Read more

Close the Laptop and Your /loop Dies: Why Detached Schedules Now Survive

A /loop or /heartbeat set in the desktop app, dashboard or TUI used to be torn down the moment the client disconnected. Hermes now exempts a session that still owns a live schedule, so wakeups keep firing in the background.

Read more

One Failed TTS Call Deleted a User File: Inside Hermes' P0 Output-Path Fix

Point text_to_speech at an existing file and a failed synthesis used to sweep that file away with its own temp output. Hermes now synthesizes into a hidden sibling and only replaces the target on success.

Read more

An MCP server sent a screenshot and your model saw only a file path

Wire up an MCP server that captures the screen, ask the agent to read it, and it tells you it only sees a path — the image was cached, but the model never received the pixels. The fix collapsed "can this image reach the model" into one gate (vision_tools._native_tool_result_images), shared by MCP ImageContent, browser screenshots, computer_use captures and vision_analyze. Here is what auto / native / text actually do, plus two security details that are easy to miss.

Read more