Hermes Agent Lab

Hermes Agent Blog — Practical Guides & Insights

Latest articles and insights.

Sign in once and your connected apps follow: the free tier hands over cleanly

You connected Gmail and Notion on the free tier, then created an account — and every connection stayed behind on the old identity, so you reconnected them one by one. PRs #143234, #143235 and #143248 close that gap: every Nous sign-in is now one plain device login, the free tier hands its connected apps to the account it replaces, and the Connectors page stops creating an identity just because you opened it.

Read more

The Windows half-update: hermes.exe gone, version stamp left behind

On Windows, hermes update can finish with one ⚠ line you scroll past — and only half the update actually landed. The running hermes.exe cannot be deleted mid-update, so the install degrades to hermes.cmd, the stamp write is skipped, and install-stamp.json still names the old version. PRs #143291 and #143339 fix both halves: retire the running exe by renaming it, and mint a real exe again after a Python repin.

Read more

MCP tools now carry a price tag: declare what each call costs, cap what a chat may spend

Three new keys — tool_costs, spend_limit and cost_unit — let an MCP server declare what each tool spends. The approval prompt names the cost and the chat total, a call that would break the budget asks even on a trust: full server, and unattended contexts refuse it outright.

Read more

Let an MCP server call you: the experimental events client and its webhook delivery

Turn on events: true and an MCP server can push an event the moment something happens upstream, with each event starting an agent run. Here is how the three event tools work, what a subscription looks like underneath, and the five ways it can silently lapse.

Read more

Hermes ships its own package manager: what pm doctor, repair and gc actually fix

hermes pm manages tool binaries and Python dependency environments — not the app itself; that is hermes update. Here is what doctor, status, install, repair and gc do, why every pinned package must be three days old, and what the new pm update --skip-target is for.

Read more

hermes update stopped the gateways and never woke them: the .git that git itself rejects

When the checkout has a .git that git refuses to read — an empty HEAD, or a gitdir pointer to nowhere — hermes update pauses the gateways, prints a generic Failed to fetch, and walks away. This fix releases the pause record, names the damage, and hands you the installer command that repairs it in place.

Read more

v0.22.4 touched six things — and finally removed those suggestion pills above the composer

The October 21 v0.22.4 patch is pure cleanup: suggestion pills above the composer are gone, plugins that install nothing skip the consent prompt, WhatsApp can be re-paired after logout, and the plugin catalog picks up six entries including bubblewrap, Singularity and mcp-serve. The same day shipped v0.22.3, a rollup of roughly 620 PRs.

Read more

A Chinese reply became the session title: the length guard only counts spaces

A model that ignores "return only a title" is supposed to be caught by an answer-shaped guard. The guard counts words with split(), and one Chinese sentence is one word, so a 76-character reply sails through.

Read more

Resuming a compressed session says everything twice: inside the summary carrier

In-place compaction wraps the protected tail of a conversation in a summary carrier that inherits the original message_uid but not its text. The display layer rendered both, so one reply appeared twice.

Read more

Plugin terminal backends are no longer stuck in /root: default_cwd and supports_streams

Two opt-in provider attributes let a plugin sandbox pick its own starting directory, and let Bot Desktop, computer_use and the browser follow the terminal into it.

Read more

Output that vanishes: after 1024 open files, Hermes terminal calls start coming back empty

Long-running Desktop and gateway processes suddenly return empty output with exit code 0. The cause is select()s 1024 ceiling; the fix moves to selectors and avoids a macOS poll() trap.

Read more

Your plugin can finally notice a session being squashed or deleted

Hermes added two plugin hooks: post_compaction lets memory plugins re-inject context that a summary swallowed, and on_session_delete lets plugins clean up after a session is deleted or archived. Both with working code.

Read more

One command to update every plugin: hermes plugins update now shows you the list first

Run hermes plugins update with no plugin name and Hermes audits every installed plugin, names the ones it can move and why it skips the rest, asks once, then updates them all. Includes --yes, exit codes, cron usage and the skip rules.

Read more

Telegram DMs piling into one thread? Give every new message its own topic

Telegram topic mode splits a DM into separate threads, yet anything you type in the root chat still lands in whichever topic you used last. Turn on dm_topic_auto_transfer and every root-DM message opens a fresh topic and a fresh session. Full config, fallbacks and pitfalls.

Read more

More than half of that state.db was copies of messages you already pruned

A proactive prune edits a few messages and then re-wrote the entire live transcript. One profile ended up with 48,737 superseded copies — 55% of its rows. The commit primitive now rewrites rows in place.

Read more

A file your agent left in Docker can run as root on your laptop

nosuid mounts and cap-drop only bind what runs inside the container. A file that lands on the host keeps its setuid, setgid and file capabilities. Hermes now strips those bits on the host side, including for long-lived sandboxes.

Read more