v0.17.0

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 reasoning field; route reasoning_effort to 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_headers for custom providers
  • Bedrock: falls back to non-streaming InvokeModel when IAM denies streaming variant
  • Ollama: default max_tokens=65536; surface model refusals as content_filter

Core Architecture Improvements

Agent loop & tools:

  • search_files lossless densification — fewer tokens per result, same matches
  • Removed agent-callable send_message tool (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
WhatsApp Restarts stale bridge processes
Matrix Room-context isolation
QQbot CPU-spin fix
Weixin Rate-limit circuit breaker

CLI, TUI & Setup

  • /version slash command; /billing interactive 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_generate across 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-code skill (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:compress lifecycle event + thread_id/chat_type in agent context
  • Memory/skill write approval gate (default off) — boolean write_approval replaces tri-state write_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 /chat tab via ConPTY (win_pty_bridge)
  • Resolve PowerShell host instead of bare powershell for uv install
  • Resolve powershell.exe by absolute path so Desktop install doesn’t stall
  • Repair stale winget registration + refresh/merge PATH
  • Kill hermes before recreating venv to release _bcrypt.pyd lock
  • Read HERMES_HOME from registry when env is stale
  • JOB-breakaway watcher reliability + status --deep probes
  • 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-artifact skill + 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.


Full changelog on GitHub

← Release Notes