4 Hidden Hermes Tricks from the Latest Commits: Token Savings, In-App Browser Control, Cron, and Resilient Search

You’d think the big Hermes news this week was v0.20.4’s frosted-glass windows — but the official project quietly merged a batch of features over the last four days with no keynote, no promo art. They hide in the commit log, and each one saves you real money, real effort, or a real headache. This post covers the four most valuable: token savings, browser control, cron upgrades, and search resilience.
Trick 1 — Token savings: Muse Spark caching is fully on
If you use Meta’s Muse Spark (api.meta.ai), this is probably the most wallet-relevant line item this week.
PR #88601 (merged Aug 17) moves api.meta.ai traffic from chat completions to the Responses API — because only the latter supports prompt caching. The measured numbers are striking:
| Wire | Cache hit rate | Contributor-tier input price |
|---|---|---|
/v1/chat/completions (old) |
0% | $0.10 / M tokens |
/v1/responses (new) |
93–99% | $0.002 / M (cached) |
On agentic workloads — where the same system prompt and tool definitions are re-sent over and over — that’s roughly a 13× cost difference. Hermes also auto-sends prompt_cache_retention: 24h, Meta’s opt-in cache hint, to maximize the effect. After updating, Muse Spark users get caching automatically — nothing to configure.
Trick 2 — Browser: the agent can finally USE the page, not just look at it
The desktop app’s in-app browser used to be a one-way mirror: open_preview put a page in the pane, read_preview read its text back, but the agent could never touch it. Anything needing a click went to a separate Chromium the user can’t see — with none of the sessions you’re already signed into.
PR #90197 (merged Aug 20, on main) changes that, adding two tools to the desktop_ui toolset:
drive_preview:action="elements"inventories everything clickable/typable, thenclick,type,scroll, andpressact on those elements;back/forward/reloaddrive the pane’s history;annotate_preview: hold a mark on an element until the agent takes it off — for pointing at something rather than acting on it.
Two engineering details worth understanding:
- Real input, not synthetic events: actions go through Chromium’s
sendInputEvent, not dispatched events — a page cannot tell the difference, and hover/focus state behaves exactly as a user’s would (synthetic clicks leave pages in states no user could have produced); - Durable element handles: elements are named after what they are and say (
btn-sign-in,inp-email); when a framework destroys a node and rebuilds it, the handle automatically re-binds (the agent is toldreboundinstead of being handed a removal to react to) — log-in-then-list-refresh flows no longer drop handles.
The payoff: “log into this site and pull my invoices” now happens inside the browser on your screen, using the sessions you already have.
Trick 3 — Cron: relay crons gain flat replies and rich formatting
Enterprise users fronting Slack through the relay adapter noticed the gap: on the native Slack adapter, cron briefs can post flat in the DM (cron_continuable_surface: in_channel) with a plain reply continuing the job — while on the relay lane, briefs always landed in a dedicated thread and rich content (Block Kit tables, highlighted code) rendered as literal - bullets.
PR #90038 (merged Aug 20) closes that gap (found in an enterprise side-by-side evaluation):
CapabilityDescriptorgainssupports_inchannel_continuable, and the relay adapter now advertises and applies it —in_channelmode works on the relay lane;- the cron surface-knob resolution was rewritten so relay’s Slack knobs finally live somewhere that works (
platforms.relay.extra.slack.*) instead of being read-but-ignored; - block formatting: native rich text, tables, and highlighted code now render properly over the relay.
Paired with the complete cron automation guide, relay users now get native-parity cron UX.
Trick 4 — Resilience: failing keyed search backends get a keyless rescue
Your web search is configured with an API-keyed backend. It goes down — and previously that meant an error, fall through to the next, and if every keyed backend is down, search dies.
PR #90688 (merged Aug 20) adds a quietly elegant fallback: when a keyed web backend fails, Hermes rescues onto the keyless ring for one call — and crucially, never sticky: the rescue applies to that single call only, so the keyed backend takes back over the moment it recovers.
For the user: one fewer “search failed” error, one more “found it without spending your quota.” Tiny change, enormous daily frequency.
Release status
| Trick | PR | Merged | Status |
|---|---|---|---|
| Muse Spark prompt caching | #88601 | Aug 17 | In v0.20.4 (released Aug 18) |
| In-app browser control | #90197 | Aug 20 | main, unreleased |
| Relay cron flat + rich text | #90038 | Aug 20 | main, unreleased |
| Keyless search rescue | #90688 | Aug 20 | main, unreleased |
To try them: hermes update (v0.20.4 users get trick 1 automatically); the other three land with the next release or from main (hermes update --branch main).
Wrap-up
What these four tricks share: nobody announced them, and they affect you every day. Caching saves real money, browser control saves context switching, the cron upgrade saves enterprise integration headaches, and the search rescue saves a 3am failure. All merged August 17–20; the first is already out in v0.20.4. After upgrading, check the cron command reference and put what applies to you to work.