Hermes Agent v0.17.0 — The Reach Release
Overview
v0.17.0 — The Reach Release. Released June 19, 2026. ~1,475 commits · ~800 merged PRs · 1,693 files changed · 235,390 insertions · 50,730 deletions · 300+ issues closed · 245 community contributors.
v0.16.0 put Hermes on your desktop. v0.17.0 is about how far that reach extends — across new places to talk to it, deeper into the tools you already use, and out to the people running Hermes for a team. Two new messaging channels arrived (iMessage via Photon, Raft agent network). The desktop app deepened substantially. Subagents can now run in the background. Image generation learned to edit. Cursor’s Composer model is reachable through an xAI Grok subscription. The dashboard got a full profile builder and secure login. The Skills Hub was rehauled. The memory tool got atomic batch operations. And the curator stopped spending aux-model budget on routine runs. Plus a security round and 300+ issues closed.
Major Features
1. iMessage via Photon Spectrum — No Mac Relay Required
Hermes now speaks iMessage through Photon’s managed line pool. No Mac sitting in a closet running a relay, no BlueBubbles bridge to babysit.
# Authenticate with device-code OAuth
hermes photon login
# Hermes is now on iMessage — gRPC-native channel (no webhook)
# Markdown rendering, emoji reactions, outbound media via spectrum-ts
Built on a gRPC-native channel with no webhook dependency, supporting markdown rendering, emoji reactions, and outbound media. It’s positioned as the successor to BlueBubbles: free to start, nothing to self-host. If your friends and family live in blue bubbles, Hermes lives there now too. (#32348, #42582, #44713)
2. Raft — Hermes Joins the Agent Network
A new bundled Raft platform adapter lets Hermes connect to Raft as an external agent through a wake-channel bridge. Set RAFT_PROFILE, run the bridge, and Raft can wake Hermes to handle messages — with a privacy-by-contract design where wake payloads carry only metadata (event IDs, timestamps), never message bodies. (#48210)
export RAFT_PROFILE=my-hermes-agent
hermes raft bridge
3. A Substantially More Capable Desktop App
v0.16.0 shipped the desktop app; v0.17.0 deepened it across dozens of PRs. The desktop is now a serious daily driver.
Rebindable keyboard shortcuts and native OS notifications with per-type toggles.
Live subagent watch-windows:
When you delegate a task, a dedicated pane streams the subagent's
activity in real-time — tool calls, outputs, progress. You can
watch what it's doing without switching context.
Composer model selector with per-model presets — surface every provider/model from hermes model in the GUI. Automatic RTL/bidi text direction. A resizable VS Code-themed terminal pane. Per-thread composer drafts.
Install any VS Code Marketplace theme directly into the app — assignable per profile. Window translucency slider. Unified overlay design system.
Additional desktop features:
- Mac-style session switcher (^Tab / ^1-9)
- Arrow-key history + queue editing in composer
- Expand full command inline from the approval bar
- Follow-streaming-at-bottom + jump-to-bottom button
- First-class cron jobs in the sidebar
- Worktree-aware sidebar grouping
- Hover-reveal collapsed sidebars
- Messaging source folders in sidebar
- Desktop pets — pop-out overlay + notifications
- Japanese + Traditional Chinese language switching
- “Restart gateway” action in statusbar
Remote-gateway improvements:
- Remote media relay — attach images/PDFs and display agent-generated images over the network for the first time
- Remote file attachments via
file.attach - Client + backend version buttons with remote-update flow
- Browse remote backend files
- Recover chat after sleep/wake by revalidating stale remote backend
4. Background / Async Subagents — Delegate Work and Keep Going
delegate_task(background=true) dispatches a subagent that runs in the background and returns a handle immediately. You and the model keep working while it churns, and the full result re-enters the conversation as a new turn the moment it finishes.
# Background delegation — non-blocking
/delegate_task "Research the entire competitor landscape" --background
# You keep working. When the subagent finishes, results arrive as a new turn.
No more sitting blocked waiting on a long research dive or multi-step build. Kick it off and carry on. (#40946, #46968)
5. Image-to-Image Editing — Not Just Generation
image_generate can now edit and transform a source image, not only create one from scratch. Pass an existing image and a prompt — it routes to the backend’s edit endpoint across every supported image provider.
# Edit an existing image
image_generate --source logo.png --prompt "Make this logo blue and add a gradient background"
# "Remove the background," "turn this sketch into a render" — all from one tool
Same tool, same pattern as video_generate. (#48705)
6. Automation Blueprints — Schedule Without Learning Cron
Pick an automation by name and Hermes asks you for what it needs — no cron syntax, no slot=value typing. One blueprint definition renders natively on every surface: a form in the dashboard, a slash command in the CLI/TUI/messenger, a conversation with the agent, an entry in the docs catalog.
# Cron-free scheduling
/hermes automation create "Daily news briefing at 8am"
# Hermes asks: which sources? what format? any filters?
# Done. No "0 8 * * *" anywhere.
“Daily news briefing at 8am” becomes something you set up by answering questions, not by memorizing cron syntax. (#41309)
7. Cursor’s Composer Model — Through Your xAI Grok Subscription
grok-composer-2.5-fast is now in the xAI OAuth model picker, with its context window reconciled to the full 200k. Composer is the fast coding model behind Cursor — and if you have an xAI Grok subscription, you can now point Hermes at it directly over OAuth, no separate API key.
/hermes model:xai/grok-composer-2.5-fast
Your Grok plan, Hermes’s agent loop, Composer’s coding speed. (#47908)
8. Full Profile Builder in the Dashboard
Build a complete Hermes profile from the browser — pick its model, choose its skills, attach its MCP servers — without hand-editing config.yaml. The dashboard unified multi-profile management into one machine-wide view with a global profile switcher. (#39084, #44007)
9. Skills Hub Browser Rehaul
The dashboard’s Skills Hub got a ground-up rework: connected hubs, a Featured section, full skill previews before installation, and a security scan on each skill. Browsing and installing skills from trusted taps (OpenAI, Anthropic, HuggingFace, NVIDIA) is now a real browsing experience, not a flat list. Plus a SKILL.md editor on the Skills page and an attach-skill selector in cron modals. (#40384, #43398)
10. Memory Tool — Atomic Batch Operations
The memory tool gained an operations array that applies a batch of add/replace/remove edits atomically against the final character budget. The model can free up space and add new entries in a single call — even when an add alone would overflow the budget.
{
"operations": [
{ "action": "remove", "key": "old-deprecated-fact" },
{ "action": "add", "key": "new-important-fact", "value": "..." },
{ "action": "replace", "key": "updated-fact", "value": "..." }
]
}
What used to be a fragile multi-turn dance is now one reliable operation. (#48507)
11. Official WhatsApp Business Cloud API
Alongside the existing Baileys bridge, Hermes now speaks the official WhatsApp Business Cloud API — Meta’s first-party, hosted, no-bridge-process path. Point it at your Business API credentials and Hermes talks WhatsApp through the supported channel, with no QR-scanning bridge process to keep alive. (#44331, #43921)
12. Rich Text for Telegram — Bot API 10.1
Telegram replies now render as proper rich messages via Bot API 10.1: better formatting, cleaner long-message handling, native markup instead of flattened text. Always-on with an opt-out. Plus opt-in Online/Offline bot status indicator. (#44829, #45584)
13. Curator Cost Optimization — Zero Tokens on Routine Runs
The skill curator now prunes stale skills by default but no longer runs its LLM-powered consolidation pass unless you opt in (curator.consolidate: true or hermes curator run --consolidate). The deterministic inactivity sweep keeps running for free; the aux-model-spending “build umbrella skills” fork is now off by default. Routine background curation costs you zero tokens. (#47840)
God-File Refactor — Massive Code Quality Push
This release shipped one of the largest refactors in Hermes history, decomposing three monolithic god-files into focused modules:
| File | Before | After | What was extracted |
|---|---|---|---|
cli.py main() |
3,297 lines | 954 lines | 28 subcommand parsers → hermes_cli/subcommands/; 32 slash-command handlers → CLICommandsMixin; 18 model-flow wizard functions → model_setup_flows; agent-construction cluster → CLIAgentSetupMixin |
gateway/run.py |
19,157 lines | 15,870 lines | 42 slash-command handlers → GatewaySlashCommandsMixin; authorization cluster → GatewayAuthorizationMixin; kanban watcher loops → GatewayKanbanWatchersMixin |
run_agent.py turn loop |
— | — | Prologue extracted into TurnContext; post-loop tail into finalize_turn; retry-loop recovery flags consolidated into TurnRetryState |
New Built-in Tools & Commands
| Tool / Command | Description | Usage |
|---|---|---|
/version |
Display current Hermes version | /version |
/billing |
Interactive terminal billing view (TUI + CLI) | /billing |
image_generate (edit) |
Image-to-image editing across all backends | image_generate --source img.png --prompt "make it blue" |
memory (batch ops) |
Atomic add/replace/remove array against char budget | See JSON example in Major Feature 10 |
search_files (densified) |
Lossless densification — fewer tokens per result, same matches | search_files --pattern "*.py" |
read_file (notebooks) |
Extracts .ipynb/.docx/.xlsx to text |
read_file notebook.ipynb |
file.attach |
Remote-gateway file attachments | file.attach ./report.pdf |
| Automation Blueprints | Cron-free scheduling via named templates | hermes automation create "Daily briefing" |
write_approval |
Boolean gate replacing tri-state write_mode for memory/skill writes | Config: write_approval: true |
session:compress |
Plugin lifecycle event on session compression | Plugin hook |
| Plugins Hub (TUI) | Interactive enable/disable overlay | TUI overlay |
Provider & Model Support
- New models:
z-ai/glm-5.2(verified 1M context),anthropic/claude-fable-5,laguna-m.1+nemotron-3-ultra, xAI Composer 2.5 in OAuth picker - Model picker: Refresh-Models control to bust stale cache; persist Nous recommended-models to disk; seed catalog disk cache from checkout on update; MiniMax-M3 reports true 1M context
- Anthropic adaptive models: default to modern thinking contract; never send
reasoningfield; routereasoning_effortto verbosity; require confirmation for very expensive selections - Auth improvements: auto-detect OpenRouter credential from pool; keep Codex OAuth pool accounts distinct; resolve xAI OAuth across profiles; honor
model.default_headersfor custom providers - Bedrock: falls back to non-streaming
InvokeModelwhen IAM denies streaming variant - Ollama: default
max_tokens=65536; surface model refusals ascontent_filter
Core Architecture Improvements
Agent loop & tools:
search_fileslossless densification — fewer tokens per result, same matches- Removed agent-callable
send_messagetool (consolidation) - Coding-context posture across CLI/TUI/desktop/ACP
- Context-file handling: configurable truncation limit + warnings; scale to model window
- Compression: temporal anchoring in compaction summaries; raise trigger to 85% for gpt-5.5 on Codex OAuth
- Adaptive middleware (consumed by NeMo-Relay observer telemetry); usable mid-turn steer
Sessions, state & multi-agent:
- Optional max session cap; drop empty sessions on CLI exit
- ACP session-provenance metadata for compression rotation
- Delegation: resolve custom-endpoint subagent pools by endpoint identity; remove default wall-clock timeout
- Kanban: config-gated auto-subscribe on
kanban_create; machine-global singleton lock for embedded dispatcher; pin assigned profile toolsets for workers - Memory: configurable Hindsight retain observation scopes; OpenViking setup UX; Honcho gateway-gated identity tree; Supermemory session-level ingest
Messaging Platforms
New channels:
- iMessage via Photon Spectrum — device-code OAuth, gRPC-native, no webhook
- WhatsApp Business Cloud API — official, no bridge process
- SimpleX — groups, native attachments, text batching, auto-accept
- Raft — bundled platform plugin with activity hooks
Gateway core & rendering:
- Terminal tool calls rendered as native bash code blocks on markdown platforms
- Optional message timestamps for LLM context
- Configurable
tool_progress_grouping
Platform improvements:
| Platform | Improvement |
|---|---|
| Telegram | Bot API 10.1 rich messages (always-on); Online/Offline status indicator; long streamed responses no longer cut; MarkdownV2 on progress edits |
| Discord | role_authorized propagation for DISCORD_ALLOWED_ROLES; recover from runtime gateway task exits; stop typing after replies |
| Slack | Scope top-level channel messages when reply_in_thread=false; thread approval UX; video attachments available to agents; register_slack_action_handler plugin API |
| Signal/Email/Teams | Document attachments classified correctly; replied-to media included |
| Restarts stale bridge processes | |
| Matrix | Room-context isolation |
| QQbot | CPU-spin fix |
| Weixin | Rate-limit circuit breaker |
CLI, TUI & Setup
/versionslash command;/billinginteractive terminal billing- Show time since last final agent response on status bar
- Persist resolved approval/clarify prompts in scrollback
- Lock hermes worktrees so concurrent processes can’t clobber
- Clone profiles from any source
- Opt-in structured profile-build path on first contact
- Configurable per-platform system-prompt hints
- Configurable background memory/skill notifications
- TUI: interactive Plugins Hub enable/disable overlay; session name in terminal titlebar; wrap long approval commands instead of truncating
- TTS: Gemini persona prompts + audio tags; xAI auto speech tags + speed/streaming; Piper speaker_id; OGG for Telegram auto-TTS
Tool System, Skills & MCP
- image-to-image editing in
image_generateacross all backends; auto-shrink to provider dimension limits - MCP: official Unreal Engine 5.8 MCP server in catalog; elicitation handler so MCP servers can prompt for mid-tool-call confirmation (payment/OAuth) on whatever surface owns the session; expose late-connecting MCP tools between turns; keepalive ping for short-TTL HTTP sessions; block exfil-shaped/suspicious stdio configs; capability-gate
tools/list - Skills:
simplify-codeskill (parallel 3-agent code review & cleanup) with risk-tiered application; find & diff user-modified bundled skills; optional payments skills (Stripe Link, MPP, Projects); live per-source browse progress - Plugins: install from subdirectory within a repo; accept browser-pasted GitHub URLs in
hermes plugins install;session:compresslifecycle event +thread_id/chat_typein agent context - Memory/skill write approval gate (default off) — boolean
write_approvalreplaces tri-statewrite_mode
Fleet, Relay & Automation
- Managed scope — administrator-pinned, user-immutable config & secrets from root-owned
/etc/hermes - Multiplex all profiles over one gateway process (opt-in)
- Pluggable CronScheduler + Chronos managed-cron provider (scale-to-zero)
- Gateway-Gateway relay (phases 0-3): relay adapter + capability descriptor, connector⇄gateway channel auth + signed-HTTP inbound, WS-only inbound, managed-boot self-provision client
Docker, Nix & Installer
Docker:
- s6: detect supervisor directly for gateway restart; register profile gateways without auto-starting; clear stale log locks
- Optimize image size (.dockerignore, drop dev deps, split layers); pre-install matrix deps; supervised gateway uses
--replace; harden hosted install tree
Nix:
- Cold npm build fixes + auto-fix-lockfiles workflow
- Hashless npm deps via
importNpmLock - Refresh npmDepsHash after Electron 40.10.2 pin
Installer:
- Clear unmerged git index before autostash
- Scope install-method stamp to code tree
Windows
- Dashboard
/chattab via ConPTY (win_pty_bridge) - Resolve PowerShell host instead of bare
powershellfor uv install - Resolve
powershell.exeby absolute path so Desktop install doesn’t stall - Repair stale winget registration + refresh/merge PATH
- Kill hermes before recreating venv to release
_bcrypt.pydlock - Read HERMES_HOME from registry when env is stale
- JOB-breakaway watcher reliability + status
--deepprobes - Decode subprocess output as UTF-8
Security & Reliability
- Fail closed on own-policy gateway adapters
- Fail closed for approval-button auth on Slack/Feishu/Discord when no allowlist is set
- Redact secrets in request debug dumps; withhold host metadata from public status
- Block exfil-shaped/suspicious MCP stdio configs before probe
- Close shell-escape denylist bypass + fail-closed on missing approval module
- Scrub operator environment before launching cua-driver MCP
- Sanitize env for cron job-script subprocesses
- Bound TodoStore content length/count
- Scan REST cron prompts for parity with agent tool
- Bump urllib3 and PyJWT to clear CVEs
- Langfuse redacts base64 data URIs
Notable Bug Fixes
- Percent-encode non-ascii URL components
- Sanitize
:in FTS5 queries so colon searches don’t silently return empty - Preserve multimodal user content through crash-resilience persist
- Flatten multimodal content before provider sync
- Re-enter retry loop on genuine Nous 429 so fallback guard runs
- Scope Nous tags to Nous auxiliary calls
- Cron: don’t strict-scan script-injected output in no-skills jobs
- Cron: resolve per-job provider “custom” to
providers.custom - Cron: repair cron ownership on container restart
(300+ issues closed this window — full per-area fix list is exhaustive.)
Reverted in This Window
html-artifactskill + sketch/architecture-diagram/concept-diagrams fold (#48899) — reverted (#49053)- Cron per-job profile support reverted (#43956)
- Nix patchPhase workaround reverted (#42151)
Upgrade
hermes update
For new installations, visit the install guide.
← Release Notes