Hermes Agent Lab

Hermes Agent Blog — Practical Guides & Insights

Latest articles and insights.

Why a Brand-New Skill Returns Zero Results in a Search

Unfiltered skill search is answered from a periodically rebuilt central index, so a skill published minutes ago can be missing even though it exists. Changes from September 16-18 close the gap: an index miss now re-queries skills.sh, ClawHub, LobeHub and well-known endpoints within an 8-second budget, and the index build no longer silently drops skills when a shard times out.

Read more

Commanding Your Agent From a Train: A Field Guide to the Community WebUI

Hermes WebUI is a community project with roughly 18K stars that puts the CLI's capabilities in a browser: Python plus vanilla JS, no build step, bound to localhost by default, with SSH tunnels or Tailscale for phone access and optional password, passkey, or OIDC sign-in. Here is how to install it, expose it safely, and where its edges are.

Read more

Why Opening a Dropdown Costs You Three Seconds

A spinner in the model picker, a `hermes plugins list` that hangs, a Profiles panel that drops frames — three unrelated-looking stalls with one cause: the read path was quietly doing network probes and filesystem walks. PRs #114994, #114811 and #114879 moved the caching, the failure memory and the refreshes off that path.

Read more

Hermes No Longer Fetches Whatever URL Someone Handed It

Image URLs returned by a generation provider, reference images a model supplies, pet-store manifests and spritesheets, skills.sh sitemap entries — none of these URLs come from you. PR #114887 routes seven fetch sites through the repository's existing SSRF guard: check before the fetch, re-check at TCP connect (closing the DNS-rebinding window), re-check every redirect hop, and fail closed on a 3xx with no Location header.

Read more

The API Key You Printed Once Should Not End Up in a Chat Log

Two fixes landed the same day to close two seams in secret leakage: PR #114839 makes dotted sk- keys and Zhipu's prefix-less id.secret keys fully masked in tool output, and PR #114789 forces redaction on every cron delivery lane — chat, session mirror, job name, bot chat — failing closed instead of shipping the raw text.

Read more

Your Memory Provider Moved Out of Core — the Upgrade Puts It Back

Built-in memory providers are moving to their maintainers' repos and the plugin catalog. PR #114569 adds two hooks: hermes update and agent init both notice a configured provider whose code is gone and reinstall it at the catalog's reviewed pin. Name, memory.<name> config, data directory and tool names all stay the same.

Read more

1,393 Subagents, 19 Hours, One Desktop: How Nous Refactored a Million Lines with Hermes

One /goal, 19 hours and 1,393 subagents cut 34.4% of the source lines out of Hermes' own repo. Here are the official measurements, the nine things that break at scale, and the steps to repeat it in your own codebase.

Read more

One 16 KB Script Froze a Gateway for 23 Seconds: The Command-Scan Postmortem

Hand Hermes a few-hundred-line heredoc and your Telegram bot stops answering — a synchronous regex is holding the event loop. Issue #113535 and PR #114208 explain the O(n³) path and why the fixed version reaches identical verdicts.

Read more

Stop Letting Images Eat Your Quota: The Two Vision Knobs Worth Knowing

Natively embedded images are re-sent on every later API call, and the old retire policy could rewrite 120,000 tokens of history just to drop one image. PRs #113953 and #113817 fixed both and added vision.embed_target_bytes and max_calls_per_image.

Read more

The Second Model You Never Configured: Hermes' Auxiliary Call Lane

Session titles that turn into JSON fragments, approvals that stop being smart, agonising compression with a local model — the fault is often not your main model but one of 13 named auxiliary tasks. Here is the config shape, the global knobs, and the silent-failure fixes merged on 17 September.

Read more

Your Agent Can Byte-Wreck a Live SQLite Database — Now Hermes Refuses the Write

write_file and patch used to read a .db-wal sidecar as ordinary text and write the mojibake back, silently destroying a live SQLite database. PR #114220 adds a sidecar write guard at the tool layer. Here is how the damage happened, what changed, and whether your version has it.

Read more

hermes doctor's Large-WAL Warning Is Now Honest

hermes doctor used to tell you to run --fix on a >50 MB state.db WAL without checking for a live writer. PR #113055 makes that warning honest.

Read more

Why Hermes Honcho Memory Lands in the Wrong Project

Auto-generated titles overrode sessionStrategy, and memory resolution used the backend launch directory instead of your workspace — PR #112602 fixes both.

Read more

Your renamed Hermes profile left a ghost in the state DB

A renamed profile used to leave the state DB pointing at the old name. PR #112653 migrates that identity, adds a retry command, and tombstones deleted profiles.

Read more

Gateway profile multiplexing is on by default now

gateway.multiplex_profiles now defaults to on, but a boot guard settles an unset flag at every boot: one gateway serves all profiles only when the fold is safe.

Read more

Why state.db Gets Corrupted Inside Docker Desktop, OrbStack and WSL2 Mounts

Bind-mount your data directory into a container and virtiofs or 9p cannot give SQLite WAL the shared lock it needs, so two writers corrupt state.db quietly while every integrity check passes. Since PR #111433, Hermes says so at startup and in hermes doctor, with two concrete fixes.

Read more