v0.20.0

Hermes Agent v0.20.0 — The Herald Release


Overview

v0.20.0 — The Herald Release. Released August 3, 2026. ~3,650 commits · ~1,400 merged PRs · ~5,200 files changed · ~559,000 insertions · ~405,000 deletions · ~1,200 issues closed · 650+ community contributors.

Hermes is the herald of the gods, and this release makes him one in earnest: he speaks (real-time conversational voice with streaming TTS, barge-in, on-device wake words, and hands-free control across CLI, desktop, and every audio-capable gateway platform), he carries word to other agents (A2A v1.0), he announces events to your systems (signed outbound webhooks), and he cites his sources (grounded research with verifiable citations and fact-checking).

Around that spine: the desktop app became a platform (Artifacts with sandboxed live preview, a plugin SDK, quick-entry from anywhere, multiple windows), the CLI got a wave of power commands (! shell mode, /init, /diff, /context, /focus), compression got smarter and gentler, and the tools themselves now recover from their own failures instead of making the model guess.

Community reaction was immediate — the Digg Tech thread hit 900K+ combined views and 5,400+ likes within 24 hours. Teknium called it “heralding the new era”. This release also rolls up everything from the v0.19.1 infrastructure patch tag.


Highlights

1. Talk to Hermes — Streaming, Conversational Voice with Barge-In

Voice mode used to mean: speak, wait for the whole reply to generate, then listen to one long audio file. Now Hermes speaks clause-by-clause as the response streams, you can interrupt it mid-sentence by just talking (it stops, listens, and the model is told you cut in), and busy-aware silence detection means it doesn’t talk over you.

This is a qualitative change, not a quantitative one — talking to Hermes finally feels like a conversation, not a voicemail exchange. Works in CLI voice mode, on the desktop, and through gateway adapters.

# Enter voice mode from CLI or TUI
hermes chat --voice

# Hermes speaks clause-by-clause, you say "wait" and it stops
# Completely hands-free — no keyboard needed

2. Wake Words and Hands-Free Control — Talk from Across the Room

Pick your own open-vocabulary wake phrase (“hey Hermes,” or anything you choose) and Hermes starts listening — detection runs on-device, so no audio leaves your machine while it waits. Multi-profile voice routing means different wake words can reach different profiles, and saying “stop” ends the voice chat on every surface without touching the keyboard. Your terminal is now something you can talk to from across the room.

# Register a custom wake word (voice enrollment, 3 samples)
hermes voice wake-word register --phrase "hey assistant"

# Bind different profiles to different wake words
hermes voice wake-word bind --profile work --phrase "time to work"
hermes voice wake-word bind --profile personal --phrase "hey hermes"

Community reaction: developers are calling this the “Alexa/Google Home killer” moment. Wake word detection runs silently in the background without consuming model budget.

3. Voice Everywhere — WhatsApp, Feishu, DingTalk, LINE, QQ, WeChat

Send a voice note to Hermes on WhatsApp, Feishu, DingTalk, LINE, QQ, Photon, or Weixin and it’s transcribed and answered. Auto-TTS replies are delivered platform-aware (opus where platforms want opus, captions attached correctly).

STT is now fully configurable — its own hermes tools category, GUI toggle matrix, dashboard dropdowns, setup status display. Unified language resolution fixes the “transcript comes back in the wrong language” problem that has plagued voice users. OpenAI gpt-transcribe is now supported.

All TTS providers share one unified spoken-text preprocessor — markdown, code blocks, and URLs are intelligently stripped from speech output.

4. Research You Can Trust — Grounded Citations with Fact-Checking

The new grounded-citations skill makes Hermes produce research where every claim is backed by a verifiable source: quotes are matched against actual page text (not hallucinated), citations link to the exact evidence. A fact-checking mode turns the same machinery on any document or claim you hand it — it tells you what checks out, what doesn’t, and what couldn’t be verified.

If you use Hermes for research, this is the difference between “sounds right” and “provably sourced.”

# Activate grounded research mode in conversation
/grounded-citations

# Fact-check an existing document
/fact-check "Is this report on AI safety accurate?"

5. Agent-to-Agent Communication — A2A v1.0 Protocol

A new bundled plugin implements the Agent-to-Agent protocol — Hermes can discover, talk to, and be driven by other A2A-compatible agents. This closes issue #514 — one of the oldest open feature requests in the repository.

If you’re building multi-agent systems with heterogeneous stacks, Hermes now has a standard wire protocol for joining them.

# Enable the A2A plugin
hermes plugins enable a2a

# Hermes auto-discovers agents on the local network
# Can delegate sub-tasks to other agents autonomously

Teknium highlighted this as one of the most significant infrastructure changes in this release — agents finally have a standard communication protocol instead of being isolated black boxes.

6. Outbound Webhooks — Hermes Pushes Events to Your Systems

Until now, integrating with Hermes meant polling or listening on a platform. Now Hermes pushes signed lifecycle events (session activity, turn completions, tool events) to any HTTP endpoint you register — with HMAC signatures so your receiver can verify authenticity.

Wire Hermes into your CI/CD pipelines, home automation, monitoring dashboards, or any service that speaks HTTP, with no polling loop.

# hermes.config.yaml
webhooks:
  - url: "https://your-service.example.com/hermes-events"
    events: ["turn_complete", "tool_invocation", "session_activity"]
    hmac_secret: "${env:WEBHOOK_HMAC_KEY}"

7. The Desktop App Becomes a Platform — Artifacts, Plugin SDK, Quick Entry

The desktop app stopped being a chat client and started being a workbench:

  • Artifacts: versioned cards with sandboxed live preview in a right-rail viewer — generated HTML or web apps run safely next to the chat
  • Plugin SDK landed: Kanban as the founding desktop plugin; ctx.download hands users files from plugins; widget-app SDK (state + reducer + render); widget grid layout engine with background-aware theme engine
  • Global hotkey quick-entry window: capture a thought into any session from anywhere in your OS
  • Multiple GUI windows; floating pane placement
# Desktop: Ctrl+Space pops up the global quick-entry window
# Type "build me a login page in HTML"
# Hermes generates it as an Artifact with live preview in the right panel

Julian Goldie’s review video called Artifacts live preview the most important desktop addition, turning “seeing code” into “seeing results.”

8. CLI Power-User Wave — Less Undo, More Control

A wave of high-impact CLI commands lands, ending the “mess up and start over” era:

Command What It Does
!command Run a shell command instantly — no model turn spent, results immediately
/init Scan your project, generate or update an AGENTS.md context file
/diff View staged / all / session diffs from any surface
/context Show exactly what’s filling your context window
/focus Reduced-output view with hidden-line recovery
Ctrl+S Stash a half-written prompt into a browsable panel
hermes import-agent One-command migration from Claude Code or Codex CLI
# Fast shell — no model budget consumed
! ls -la && cat package.json

# See exactly what's eating your context window
/context
# Output:
# System prompt: 12,450 tokens
# Last 3 turns: 2,100 tokens
# Tool definitions: 4,800 tokens
# Active skill docs: 3,200 tokens
# Remaining: 15,450 / 38,000 tokens

# Migrate from Claude Code — one command
hermes import-agent

AICrier noted that /context is one of the most requested diagnostic commands — no more guessing what’s filling up the context window.

9. Correct the Agent Mid-Turn — Redirect Instead of Restart

If Hermes is heading the wrong way, you no longer have to /stop, rewrite the prompt, and wait for a replay. Type a correction while it works and the active turn is redirected: work in flight is preserved, the original prompt is kept, and the agent course-corrects with your new guidance.

Paired with double-ESC draft discard and a composer undo stack, steering Hermes feels like editing, not restarting.

# Hermes is executing, and you realize it's going the wrong way
# Don't /stop — just type a correction:
> Wait, check the Node version first before deciding which package manager to use

# Hermes immediately redirects, preserving completed work, and continues

10. Tools That Fix Themselves — No More Tool-Friction Turns

A systematic sweep of self-recovery upgrades means the agent wastes far fewer turns on tool friction:

  • Truncated terminal output spills to a file the agent can read back
  • patch command detects already-applied edits and diagnoses whitespace mismatches
  • Zero-result searches probe for near-misses and recover
  • write_file verifies content on disk
  • Common failure classes come back with actionable recovery hints

The default tool-calling iteration limit also jumped from 90 to 500 — long autonomous runs stopped hitting an artificial wall.

# Default tool iteration limit dramatically increased
# Old: auto-stop after 90 iterations
# New: 500 iterations, enough for complex multi-step task chains

AICrier analysis calls tool self-recovery a “silent productivity win” — you don’t notice it, but it saves 5–10 wasted turns every day.


Voice & Speech

Conversational Voice

  • Streaming, clause-by-clause TTS with barge-in across all surfaces (CLI voice mode + gateway adapters)
  • Full-duplex turn listener — interrupt by voice during generation AND playback
  • Busy-aware silence detection, stop hints, thinking sounds, barge-in fixes
  • The model is told when the user interrupts its spoken reply — context stays coherent
  • Desktop speaks the whole turn and idle-flushes held narration

TTS / STT Infrastructure

  • Unified spoken-text preprocessing + speed/instructions/provider tool params; unified STT language resolution (fixes the wrong-language transcription class)
  • Fully configurable STThermes tools category, GUI toggle matrix, dashboard dropdowns, setup status; OpenAI gpt-transcribe support
  • Platform-aware auto-TTS delivery (opus platforms handled correctly, captions attached)
  • Inbound voice classification/routing for WhatsApp, Feishu, DingTalk, LINE, QQ, Photon, Weixin
  • Command TTS/STT provider hardening (idle timeouts, env scrubbing, no-shell, path guards)
  • Per-sentence TTS synthesis pipelined with playback — next sentence renders while current one speaks
  • Discord voice PCM streams to ffmpeg stdin instead of temp files

Wake Words & Hands-Free

  • On-device open-vocabulary wake words (voice enrollment, 3 samples)
  • Multi-profile voice routing — different wake words reach different profiles
  • Say “stop” to end voice chat hands-free on every surface
  • 15-item CLI/TUI voice-mode UX and environment fix wave

Core Agent & Architecture

Compression — Smart and Gentle

  • Proactive tool-result pruning for large-window models
  • Per-turn micro-compaction — compression cost amortized across turns instead of one giant pause
  • Guaranteed N-user-message tail (compression.min_tail_user_messages) — recent conversation always survives
  • Ghost-skill defense — pruned skills can never silently haunt a session
  • Progress-aware timeouts — slow summary models are no longer punished
  • Per-model threshold overrides; absolute token threshold (compression.threshold_tokens); opt-in idle-triggered compaction

Long sessions stay coherent and stop stalling.

Mid-Turn Redirects

  • User corrections steer the active turn, preserving in-flight work and the original prompt
  • Double-ESC discards draft
  • Composer undo stack

Approvals — Smarter, Less Clicking

  • hermes approvals suggest mines approval history into allowlist proposals
  • Customizable smart-approval policy (approvals.smart_policy)
  • Consecutive-denial circuit breaker — three consecutive denials force-stop the loop
  • Docker/podman daemon-redirect commands now require additional approval
  • Cross-surface approvals mode command
  • Desktop pairing approvals: profile-correct, with a proper surface to answer from

Prompt Caching & Hot-Path Performance

  • Tool schemas cached on native Anthropic without history loss
  • DeepSeek prompt caching on OpenCode gateways
  • Per-API-call token accounting off the turn thread
  • OpenAI wire client reused across sequential LLM calls
  • Send-path tool-call canonicalization memoized

Providers & Models

  • Vercel AI Gateway provider + Vercel Sandbox terminal backend return, modernized (SDK 0.7.2, telemetry off)
  • Gemini 3.1 Pro + 3.6 Flash in catalogs; Gemini salvage cluster
  • claude-opus-5 in OpenRouter and Nous Portal
  • deepseek-v4-flash-0731 onboarded
  • Bedrock Converse API prompt caching (cachePoint)
  • Model picker: curated defaults + collapsible providers + select-all
  • Stale caches served instantly with background refresh

Delegation & Subagents

  • Structured timeout/stall metadata + live per-child status in /agents
  • Subagents can use execute_code
  • Redacted child tool history exposed in subagent_stop
  • Public subagent lifecycle API for plugins

Desktop — From Chat App to Development Platform

Platform Capabilities

  • Artifacts: versioned cards + sandboxed live preview in right-rail viewer
  • Plugin SDK: Kanban as the founding desktop plugin; ctx.download hands users files; widget-app SDK (state + reducer + render); widget-grid layout engine + background-aware theme engine
  • Quick-entry window: global hotkey → any session
  • Multiple GUI windows: parallel sessions side by side
  • Floating pane placement — panes anywhere
  • SSH remote-backend connection mode
  • Let the agent drive the shell (preview pane + pane focus) AND inspect the desktop app it’s building

Composer & UX

  • Attach files/folders/links via picker; @path and pasted-link composer chips
  • Composer undo stack; double-ESC discards draft; double-Enter sends queued turn
  • 2-keypress model switching (⌘⇧M); YOLO in ⌘K with live toggle state
  • Sidebar date dividers + pinned section + opt-in stale-session auto-archive
  • Grouped, live-ticking tool-activity line; @session links resolve to clickable titles
  • iMessage-style emoji reactions (opt-in, two-way); double-click to heart
  • Credit-usage toasts
  • RFC 8252 native desktop sign-in (system browser + PKCE, no webview cookies)
  • Keep-computer-awake toggle + notch wake indicator

Desktop Performance — 60fps Wave 2

  • Streaming cost independent of transcript length — stays smooth no matter how long you’ve been talking
  • 60fps on real sessions (reflow-gated pins, adaptive flush)
  • 60fps drag with five streaming tabs
  • Hidden-pane timers paused, scroll/status loops stopped in busy sessions
  • Idle CPU near zero in the background
  • Sidebar/overlay render churn killed
  • ⌘K opens instantly
  • Renderer cold start: shiki/mermaid stay off the boot path
  • State diagnostics (render + store churn counters) + lint rule banning atom-mirrored refs
  • Playwright E2E suite with visual regression diffs

CLI, TUI & Runtime

Command/Feature Description
!command Fastest shell — no model turn spent
/init Scan project → generate/update AGENTS.md
/diff Three diff views — staged / all / session
/context Precise context window breakdown
/focus Reduced-output view + hidden-line recovery
Ctrl+S Stash a prompt to browsable panel
/goal Persistent goal indicator
hermes import-agent One-command migration from Claude Code / Codex CLI
Multi-select clarify Checkbox interaction across CLI/gateway/TUI
Per-turn summary line + live token flow in spinner Transparent progress
Cross-surface theme SDK One skin themes CLI, TUI, and desktop
hermes -w cold start ~14s → ~1.8s
hermes update no-ops 2–6s faster
Runtime Node 26 across installers; brew/pip/PyPI channels retired (shell installer / Docker / Nix remain)

TUI: model picker no longer wrecks your draft, slash menu leads with your most-used skills, attachments live in the composer. Arabic (ar) locale with RTL across desktop/dashboard/agent.


Gateway, Platforms & Relay

New Platforms

  • Buzz: Block’s Nostr-based messenger with native WebSocket transport + NIP-42 auth
  • Photon: native polls, effects, clarify-as-poll, rich links (4-PR salvage)
  • Vercel AI Gateway provider + Vercel Sandbox terminal backend return
  • Slack: native Block Kit clarify buttons; opt-in reaction triggers; outbound payload sanitization
  • Discord: auto-thread sessions keyed on prospective_thread_id; reply references built from ids
  • WhatsApp: configurable inbound read receipts
  • Kanban wakes resume the creator’s DM/thread session; kanban/delegate wake-ups reach api_server sessions

Relay Phase Parity

  • Phase 1: supported_ops discovery, identity fields, /handoff aliasing
  • Phase 2: media
  • Phase 3: interactive prompts
  • Phase 4: thread lifecycle
  • Egress typing indicators

HSP Skill Sync

  • Personal client (M1) + org-skills client (M2) + org-skill namespace with token-gated discovery

Delivery Reliability

  • Session activity heartbeats, stall watchdog, bounded compression waits — re-landed hardened after an in-window revert
  • SessionState consolidation: 19 session-keyed dicts → one turn/conversation/persistent-scoped object

Skills, Plugins & MCP

New & Updated

  • A2A v1.0: Agent-to-Agent protocol plugin (closes #514)
  • grounded-citations skill: source citations + fact-checking mode
  • Curator: surface unmanaged skills + curator adopt
  • Office skills bundled: docx, xlsx, pdf + refreshed PowerPoint
  • Skills-tree debloat continues: yuanbao, segment-anything, jupyter, heartmula, audiocraft → optional-skills
  • tldraw-offline scripting skill
  • simplify-code v1.1

MCP

  • Comfy Cloud catalog entry with curated 20-tool default
  • MCP lazy server startup — from a fingerprint-keyed on-disk tool-schema cache; configured servers no longer all boot at session start
  • Hidden-whitespace warnings in MCP config
  • NeMo Relay observability integration (re-landed on stable 0.6)

Security & Reliability

Credential & Secret Hardening

  • Iron-proxy credential-injection egress firewall (re-landed)
  • DNS-pinned SSRF-safe fetches + Slack CDN allowlist
  • Strict redaction at compaction boundaries
  • ReDoS eliminated in config-key redaction patterns
  • Tier-3 credential reads scoped
  • CVE dependency pins refreshed
  • Windows hardening wave: text-mode subprocess decode bug class closed repo-wide, console flashes hidden, residual encoding gaps (MCP stdio, gateway update I/O, STT/TTS, desktop spawn)
  • Command-helper secret source (composes with all vaults)
  • ${env:VAR} SecretRef parity between config.yaml and MCP config

Session & State Integrity

  • Four session-state fixes (safe close tracking, flush-cursor class fix, row-retry, usage-PK healer)
  • Compact v23 FTS layout + hermes sessions optimize + CJK-bigram FTS
  • Read-path split with per-thread read-only connections
  • OpenViking memory-provider hardening
  • Credential pool: reset-aware primary restore + deferred-refresh locking fixes

Upgrade

hermes update

For new installations:

# macOS / Linux / WSL2
curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash

# Windows (PowerShell)
iex (irm https://hermes-agent.nousresearch.com/install.ps1)

If you’re coming from Claude Code or Codex CLI, migration is one command:

hermes import-agent

Full changelog on GitHub

← Hermes Agent Changelog