Hermes Agent v0.18.0 — The Judgment Release
Overview
v0.18.0 — The Judgment Release. Released July 1, 2026. ~1,720 commits · 998 merged PRs · 2,215 files changed · ~251,000 insertions · ~41,000 deletions · 949 issues closed · 370+ community contributors.
The Judgment Release is about one fundamental shift: Hermes Agent learned to prove its work with evidence instead of claiming success by vibes. Mixture-of-Agents graduated from a toggle mode to a first-class model system where each reference model’s reasoning is visible and the aggregator streams live. /goal gained completion contracts, /learn and /journey made self-improvement visible and steerable. Under the hood, the Gateway achieved scale-to-zero with drain coordination for production deployments, and the desktop app grew a real coding cockpit with first-class Projects.
And then there’s the clean sweep: the team resolved every P0 and P1 issue across the entire repo in twelve days. Zero open P0s. Zero open P1s. This is the new baseline.
The P0/P1 Clean Sweep
| Priority | Issues closed | PRs merged |
|---|---|---|
| P0 (critical) | 3 | 8 |
| P1 (high) | 493 | 188 |
| Total | 496 | 196 |
That’s ~692 highest-priority items resolved. The final P0 to fall: the interrupt-protected-compression sibling-fork bug (#56391, fixed by #56416), closed on an all-nighter right before the release cut.
Special shoutout to @kshitijk4poor, who drove the cron reliability wave, the compression-fork fix, credential-exfil hardening, and a huge share of the P1 closures.
We will keep P0/P1 at zero from here forward.
Major Features
1. Mixture-of-Agents (MoA) — First-Class Model Picker
MoA graduated from a mode toggle to a first-class part of the model system. Every named MoA preset now appears as a selectable model under the moa provider — right alongside Claude, GPT, and Grok in every model picker (CLI, TUI, desktop, gateway).
Select an ensemble like any other model:
# In CLI, switch to an MoA preset through the model picker
/hermes model:moa/my-council
# /moa is now a one-shot shortcut — runs through default preset, restores previous model
/moa Review this architecture decision
Each reference model’s reasoning visible as labelled blocks. In CLI, TUI, and desktop, each reference model’s full output renders in its own block before the aggregator synthesizes the final answer. You can read what GPT-5 thought, what Claude thought, and what Grok thought — then watch the committee deliberate.
Aggregator response streams live. No more long silence followed by a wall of text. The final answer streams token-by-token in all three surfaces.
Configuration:
# hermes.config.yaml
moa:
presets:
my-council:
references:
- provider: anthropic
model: claude-sonnet-4-20250514
role: reference
- provider: openai
model: gpt-5
role: reference
- provider: xai
model: grok-3
role: reference
aggregator:
provider: openai
model: gpt-5
save_traces: true # persist full turn traces to JSONL for debugging/eval
How it works under the hood:
- References see full tool state and fire on every user/tool response, not just the initial prompt
- Advisory references end on a user turn and receive a reference-role system prompt
- Reference and aggregator models called through their provider’s real route — no shortcuts
- Context window resolved from the aggregator, not the 256K default
- Auxiliary tasks resolve to the aggregator automatically
- Virtual provider blocked as a reference/aggregator slot — no recursive ensembles
- Tolerant of hand-edited preset config — won’t crash on minor formatting issues
- MoA slot provider-identity unified on the single
call_llmchokepoint - HermesBench results documented for reference
2. Verification — The Agent Proves Its Work
Hermes now records verification evidence for coding work and decides completion by actually running your project’s checks — not by asserting success.
/goal Completion Contracts:
# Set a goal with a completion contract
/goal "Fix the race condition in auth handler"
# Hermes prompts you to define "done":
# "done = unit tests pass + no lint errors + concurrent suite passes 10x without failure"
# The standing-goal loop judges against evidence, not the model's say-so.
# It won't stop until the contract is satisfied.
# Park the goal loop on a background process instead of re-poking the agent
/goal wait 12345
Verification Evidence Ledger:
# hermes.config.yaml
coding_context:
verify_on_stop: auto # auto-detect project type, run appropriate checks
pre_verify: # custom verification hooks run before claiming done
- command: "npm run test -- --coverage"
- command: "npm run lint"
- command: "npm run typecheck"
Implementation details:
- Profile-scoped evidence ledger auto-detected by
agent.coding_context - Gateway exposes verification status at
GET /api/verification/status pre_verifyhook accepts arbitrary scripts as verification gates- Verification stop loop with ad-hoc script support
- verify-on-stop defaults to OFF with a one-time v32 migration — skips doc-only edits, gated off for messaging surfaces
- Surface-aware “auto” default restored (interactive vs. non-interactive)
3. /learn — Turn Anything Into a Reusable Skill
Run /learn <anything> and Hermes distills a reusable skill from what you point it at. It writes to CONTRIBUTING.md standards automatically.
# Learn from a directory — package.json, scripts, README, all analyzed
/learn ./my-deployment-scripts
# Learn from a URL — documentation, API reference, blog post
/learn https://docs.example.com/api-reference
# Learn from the workflow you just walked through — Hermes watches the last N turns
/learn workflow # auto-detects the last workflow pattern
What happens under the hood:
- Analyzes structure (directory contents, URL content, or conversation history)
- Identifies reusable patterns and domain-specific procedures
- Generates a skill file following your project’s CONTRIBUTING.md standards
- Honors mixed requirements — if CONTRIBUTING.md specifies a particular format, that format is used
- The next time you need that workflow, it’s already in the skill library
Additional skill tools in this release:
cloudflare-temporary-deploy— optional skill for quick Cloudflare deploymentscreative-ideationv2.1.0 method library
4. /journey — A Playable Timeline of Everything Hermes Knows
The CLI and TUI gained /journey — a learning timeline of accumulated memories and skills, with in-place edit/delete. Pair it with the desktop’s new memory graph (a top-down, playable radial timeline of memories and skills over time), and for the first time you can actually see what your agent knows, watch it grow, and prune what’s wrong.
/journey
# Displays a scrollable timeline of all memories and skills
# Arrow keys: navigate
# Enter: expand details
# e: edit in-place
# d: delete
Desktop memory graph: A radial timeline visualization (top-down view, interactive nodes) showing memories and skills clustered by time period. Playable — scrub through the timeline, zoom into specific periods, tap a node to see the full memory content.
5. Background Fan-Out — Parallel Subagent Delegation
delegate_task can now fan out multiple subagents that all run in the background — your chat is never blocked, and when all finish, results come back as a single consolidated turn.
# Parallel research delegation
/delegate_task "Research competitors A, B, C in parallel — list their pricing, features, and recent funding"
# What happens:
# 1. Three background subagents spawn simultaneously
# 2. CLI/TUI status bar shows active background count
# 3. Your main chat stays responsive — keep working on something else
# 4. When all three finish, one consolidated summary arrives
Infrastructure:
- CLI + TUI status bar tracks background subagents in real-time
- Calm “will resume” affordance when background work is in progress
- One consolidated return — no babysitting individual agents
6. Desktop App — First-Class Coding Projects
The desktop app gained real, per-profile Projects backed by a project → repo → lane model. Your coding work is organized into projects the agent understands and can act on.
Project anatomy:
Project "auth-service"
├── Repo: github.com/myorg/auth-service
│ ├── Lane: main (current working branch)
│ ├── Lane: feat/oauth-refactor (worktree)
│ └── Lane: fix/race-condition (worktree)
└── Tools: agent-facing project tools (lint, test, build)
Coding cockpit features:
- Sidebar: per-profile project list with coding rail
- Review pane: git status, diff view, worktree management
- Remote-gateway-aware folder picker: works with hosted gateways
- Git cockpit: inline status, PR-style diff review, worktree create/switch/delete
Multi-terminal panel:
- Read-only agent terminals — watch what the agent is doing
- Terminal tabs and scrollback persist and restore across relaunches
PR-style file diffs in chat:
- File changes rendered as side-by-side or unified diffs
- In-app spot editor for the file preview pane
- Inline rich embeds, diagrams, and alerts in assistant markdown
UX enhancements:
- Conversation timeline rail for navigating long threads
- Context-usage breakdown popover — see exactly what’s consuming your context window
- Spectator transcript for subagent watch windows (read-only)
- Draggable floating composer — pop the input box into its own window
- Auto-TTS composer toggle — read replies aloud
- Window state persistence — size, position, maximized remembered across launches
- Redesigned clarify prompt
- Shared overlay Panel primitive for cron/profiles/agents management
Desktop Pets:
- Opt-in roaming pet with calmer, more realistic roam behavior
- Alt+wheel scaling — never crops the pet
- Frame-perfect hatch flow with CPU-safe chroma rendering
- Pop-out overlay with notifications
Refactor wave:
- Composer decomposed into isolated engine hooks
- Branch/esc/url/placeholder/popout engines extracted as separate modules
- God files split:
thread.tsx,sidebar/index.tsx, onboarding overlay,use-prompt-actionsall broken into focused modules - Shared WebSocket layer decoupling desktop from dashboard (
hermes serve) - Performance: bounded tool-result rendering prevents large
/learnruns from freezing; fast session switching under load
7. Gateway — Scale-to-Zero & Drain Coordination
The gateway can now go dormant when idle and quiesce cleanly before restart, migration, or auto-update — without dropping in-flight conversations.
Scale-to-zero workflow:
# Start gateway with scale-to-zero enabled
hermes serve --scale-to-zero --drain-timeout 30s
# What happens:
# 1. Gateway monitors active connections
# 2. After idle period (configurable), transitions to dormant
# 3. On new connection, wakes up transparently
# 4. Costs zero compute while idle
Drain coordination (safe shutdown):
# Graceful drain before maintenance/restart
hermes serve --drain
# In-flight conversations complete naturally
# New connections are rejected with a retry-after signal
# Transcripts persisted on drain timeout
# Busy/idle readout for lifecycle orchestration
Production hardening:
- Default
restart_drain_timeoutset to 0 to kill systemd crash loops - Self-heal from stranded draining/degraded state
- Suppress home-channel shutdown broadcast on flagged drains
- Harden dormancy arm-gate against disabled placeholder platforms
8. Relay (Phase 5 / 6)
The relay infrastructure matured significantly for multi-platform, multi-agent deployments:
- Wake primitive (gateway side) — remote relay can wake a dormant gateway
- Going-idle / buffered-flip primitive — clean handoff during state transitions
passthrough_forwardover WebSocket — lightweight proxy for relayed messages- Multi-platform-per-agent identity — one agent, multiple messaging platforms, unified identity
- Per-frame egress — fine-grained control over which messages leave through which channel
- Stable instance id forwarded at self-provision for reliable tracking
- Relevance policy declared to the connector — filter noise at the relay layer
- Delivery-based authorization for relayed events (authorize by delivery, not
source.platform) scope_idwire key adoption — purge platform-specific scope terminology
9. Google Vertex AI — First-Class Provider
Vertex AI is now a first-class provider for Gemini models over Vertex’s OpenAI-compatible endpoint. The key breakthrough: Hermes auto-mints and refreshes short-lived OAuth2 access tokens from your service-account JSON or Application Default Credentials — no static API key required.
# hermes.config.yaml
providers:
- name: vertex-gemini
provider: vertex
credentials: /path/to/service-account.json
model: gemini-2.5-pro
region: us-central1
# Or use Application Default Credentials (ADC) — no file path needed
- name: vertex-gemini-adc
provider: vertex
model: gemini-2.5-flash
region: europe-west4
Why this matters: Regular custom-provider setups with Vertex always died mid-session because tokens expire in ~1 hour. Hermes now handles the full OAuth2 lifecycle — mint, refresh, and retry — transparently. Point it at your service account and it just works.
Salvages & modernizes the original PR #8427 by @slawt.
10. Messaging Platforms — Major Updates
Cron continuations:
- Cron jobs now support thread-preferred continuation with DM-mirror fallback
- Flat in-channel continuable cron delivery for Slack
- Gateway-running check warns on cron create/list if gateway is not active
Platform-specific updates:
| Platform | Feature |
|---|---|
| Telegram | Configurable command menu + raised default cap so skills stay visible; gate rich draft previews separately; drain general send pool on timeout before retry |
| Slack | Opt-in Block Kit rendering for agent messages; --no-assistant flag for manifest generation |
| Discord | Render reasoning as subtext via -# prefix; configurable display.reasoning_style |
Native media delivery (send_video/send_voice/send_document) via Baileys bridge |
|
| Teams | Native send_video/send_voice/send_document support |
| Signal | AAC voice-note remux + shared markdown formatting |
| iMessage | Photon sidecar upgraded to spectrum-ts v8 with tapback correlation |
| Raft | Gateway setup wizard for new deployments |
Adapter migration: Slack, DingTalk, WhatsApp, Matrix, Feishu, Telegram, WeCom, Email, and SMS adapters all migrated to bundled format for faster loading and better versioning.
New Built-in Tools & Commands
| Tool / Command | Description | Usage |
|---|---|---|
web_extract |
Truncate-and-store web content (replaces LLM summarization, cheaper and faster) | web_extract https://example.com |
/reasoning full |
Uncapped thinking tokens — removes the reasoning budget ceiling for deep analysis | /reasoning full then your query |
llm.oneshot |
One-shot LLM call via Gateway RPC — fire and forget | hermes rpc llm.oneshot '{"prompt": "..."}' |
project.facts |
Expose coding-context project facts via Gateway RPC | hermes rpc project.facts |
/timestamps |
Toggle message timestamps in chat history | /timestamps |
/history |
Composable history view with search and filters | /history keyword |
/prompt |
Compose in $EDITOR — write full markdown prompt, save, and queue |
/prompt |
/journey |
Interactive memory/skill timeline with in-place edit/delete | /journey |
/learn |
Distill reusable skills from directory, URL, or workflow | /learn ./path |
/moa |
One-shot MoA prompt through default preset | /moa <query> |
/goal wait <pid> |
Park goal loop on a background process | /goal wait 12345 |
ctx.profile_name |
Session-agnostic profile access in plugins | ctx.profile_name |
| Blank Slate | Minimal agent setup mode — opt into everything | Config: setup: blank_slate |
cloudflare-temporary-deploy |
Optional skill for quick Cloudflare deployments | Skill install |
creative-ideation v2.1.0 |
Expanded creative method library | Skill install |
Improvements
Core Agent & Tools
- Concurrent @-reference expansion: multiple
@fileand@urlreferences now resolve in parallel instead of serially — significantly faster for multi-reference prompts - Human-friendly tool labels: all built-in tools now have readable English descriptions, lowering the learning curve
HERMES_WRITE_SAFE_ROOT: support for multiple allowed write directories — restrict agent file writes to approved paths- Opt-in HTTP/WS body capture: log request/response bodies to an isolated
gui_bodies.log(share-excluded, opt-in only) - Per-reasoning-model stale-timeout floor: separate timeout detection for streaming vs. non-streaming LLM calls, preventing false positives
- SIGTERM→SIGKILL escalation: on host-pid termination after grace period, escalate to ensure cleanup
Compression & Sessions
- In-place compaction: compact a single session without creating a new id; default flipped to
truewith guard fix - Backup expansion: pre-update snapshots now include
projects.dband kanban boards for complete state preservation
Providers & Models
- Krea available via managed Nous Subscription gateway
- Z.AI endpoint picker (Global/China/Coding Plan) for region-aware routing
- Ollama-cloud
reasoning_effortwiring - Removed google-gemini-cli and google-antigravity OAuth providers (consolidation)
- Honor
NOUS_INFERENCE_BASE_URLenv override for Nous OAuth - Keep Nous auth fresh for idle dashboard/gateway agents (prevents session expiry during inactivity)
Kanban
- Task lifecycle plugin hooks:
claimed,completed,blockedevents - Typed block reasons with unblock-loop breaker — prevents infinite block/unblock cycles
- Handoff freshness stamping — tracks when task ownership was last transferred
LSP
- PowerShellEditorServices language server added — PowerShell diagnostics now available
- mem0 v3 API + OSS mode + update/delete tools for memory management
Web Dashboard
- Auto-initiate SSO redirect on unauthenticated load
- Interactive auth setup guidance on no-provider non-loopback bind
- Confidential-client OIDC (
client_secret) for self-hosted identity providers - API key catalogue: all memory-provider keys listed in
OPTIONAL_ENV_VARS - Custom
.envkeys: list and add arbitrary environment variables from the Keys page - Cron execution fields exposed for monitoring
- Backup management: import/create/download from the Web UI
- PTY offload: spawn/close operations moved off the event loop to prevent blocking
Performance
- Cold start optimization: gateway platform adapters now lazy-loaded; config and plugin manifests parsed with
CSafeLoader(libyaml) instead of pure-Python YAML - FTS5 write-lock contention: segments merged and indexed to reduce database lock contention during concurrent writes
- Profile listing: single-pass alias map + skill-count cache + event-loop offload for
list_profiles— significantly faster on systems with many profiles - Gateway API server: configurable concurrent-run cap prevents DoS scenarios under load
Security & Reliability
Attack Surface Hardening
- MCP-config persistence attack surface locked down — prevents malicious skill persistence across sessions
- Cron
base_urlcredential exfiltration blocked — cron jobs can no longer override provider base URLs to intercept credentials - Non-reusable sentinel for prefix secrets in file reads — specific patterns that could leak secrets are caught and rejected
- Slack
xapp-token redaction — app-level tokens automatically redacted from logs and diagnostics - Browser cloud-metadata floor enforced on all CDP backends (even non-local)
- Private-network guard re-check after navigation — prevents bypass via redirects
/resumeand/sessionsscoped to caller origin — prevents Insecure Direct Object Reference (IDOR) attacksaiohttpCVE floor set to 3.14.1 across all lazy messaging paths with pin-drift guard
Cron Reliability Wave
- Fail closed when an unpinned job’s provider drifts — no silent fallbacks
- Missed-grace jobs run once instead of deferring forever — prevents infinite catch-up loops
- Ticker survival on
BaseException+ heartbeat-aware status — cron doesn’t silently die - MCP servers layered onto per-job toolsets — each cron job gets the right tools
- Model-tool path guard + auto-resume loop breaker — prevents runaway tool chains
Windows Reliability
- Suppress console flashes during gateway operations
- Harden gateway restarts against edge cases
- Prefer cmd npm shim on PATH fallback
- Respawn gateway windowless after GUI update
- Prefer managed node for WhatsApp/desktop integrations
Reverts (in-window)
- Cron job storage returned to per-profile (reverts centralized storage from #32117 + #50993)
auth.jsoncloning disabled — duplicating OAuth grants causes sibling revocation- Windows terminal-popup PRs rolled back for stability re-evaluation
prompt_caching.enabledtoggle backed out pending re-evaluation
Breaking Changes
- verify-on-stop defaults to OFF: one-time v32 migration; skips doc-only edits; disabled for messaging surfaces. To enable:
coding_context:
verify_on_stop: auto
- Removed google-gemini-cli and google-antigravity OAuth providers — migrate to Vertex AI provider
- Adapter migration: messaging platform adapters now bundled — custom adapter paths may need updates
Upgrade
hermes update
For new installations, visit the install guide.
← Release Notes