Hermes Agent v0.12.0 — The Curator Release
Overview
v0.12.0 — The Curator Release. Released April 30, 2026. 1,096 commits · 550 merged PRs · 1,270 files changed · 217,776 insertions · 213 community contributors.
The Curator Release answers a question every long-running agent user eventually faces: who maintains the agent’s knowledge? The answer is now the agent itself. An autonomous background Curator grades, consolidates, and prunes your skill library on a 7-day cycle — no human intervention needed. The self-improvement loop (the core engine that decides what to save after each turn) was substantially rewritten from free-form judgment to rubric-based grading. Four new inference providers landed, messaging platforms hit 19 with the first plugin-shipped adapter (Microsoft Teams), ComfyUI v5 and TouchDesigner-MCP moved from optional to bundled-by-default, Spotify and Google Meet got native integrations, and TUI cold start dropped by over half.
Major Features
1. Autonomous Curator — The Agent Maintains Itself
After months of heavy use, your skill library inevitably accumulates duplicates, stale drafts, and one-off skills that never got touched again. The Curator is a background agent that fixes this autonomously.
How it works:
- Runs on the gateway’s cron ticker with a 7-day cycle by default
- Grades every skill in the library for usage and relevance
- Consolidates overlapping skills into unified entries
- Prunes dead skills that haven’t been touched
- Classifies archived skills as “consolidated” or “pruned” using model + heuristic
- Writes per-run reports to
logs/curator/run.jsonandREPORT.md
# Check curator status — ranks skills by usage
hermes curator status
# Output: most-used vs. least-used skills, recent consolidations, per-run reports
Built-in protections:
- Bundled and hub skills are locked with defense-in-depth gates — the Curator won’t touch them
- Pinned skills are protected from mutation
skill_managerefuses writes on pinned skills- External directory skills are respected as-is
Unified management:
# hermes.config.yaml
auxiliary:
curator:
provider: openrouter
model: deepseek-v4-flash # cheap aux model is ideal
enabled: true
curator:
cycle_days: 7
max_prunes_per_run: 20
min_skill_age_days: 3 # protect very new skills
Pick the Curator’s model under auxiliary.curator in hermes model and manage it from the dashboard. Run it on a cheap auxiliary model like DeepSeek V4 Flash — a 7-day cycle on a 500-skill library typically costs less than a single coding session.
2. Self-Improvement Loop — The Rubric Rewrite
The self-improvement loop is Hermes’ core learning engine: after every conversation turn, a background review fork decides what memories and skills to save or update. v0.12 rewrote this system from top to bottom.
What changed:
- Rubric-based grading instead of free-form “should we update this?” questions — prevents the model from second-guessing obvious improvements
- Active-update bias — prefers updating the skill the agent just loaded rather than creating duplicates
- Handles sub-files —
references/andtemplates/directories within skills are properly tracked and updated - Proper runtime inheritance — provider, model, and credentials actually propagate from the parent to the review fork now
- Scoped toolsets — the review fork is restricted to memory + skills tools only; no shell, no web access, no sprawl
- Clean shutdown — memory providers exit cleanly after review
- Clean context — prior-turn tool messages are excluded from the review summary so the fork sees a fresh view
These changes make the self-improvement loop more predictable, more accurate, and significantly safer. The agent won’t accidentally modify files outside its scope or inherit stale credentials from previous sessions.
3. LM Studio — First-Class Provider
LM Studio graduated from a custom-endpoint alias to a full native provider:
# Dedicated auth, first-class setup flow
hermes setup --provider lmstudio
# Live model listing from running LM Studio instance
hermes model --provider lmstudio
Now with dedicated authentication, hermes doctor health checks, reasoning transport support, and live /models listing. Point Hermes at your local LM Studio instance and it discovers available models automatically.
4. Four New Inference Providers
| Provider | Details |
|---|---|
| GMI Cloud | First-class API-key provider, same tier as Arcee/Kilocode/Xiaomi |
| Azure AI Foundry | Auto-detection, full wiring for enterprise deployments |
| MiniMax OAuth | PKCE browser flow with full OAuth integration |
| Tencent Tokenhub | New provider for Tencent’s model ecosystem |
Plus new models in the catalog: gpt-5.5 / gpt-5.5-pro, deepseek-v4-pro / deepseek-v4-flash, qwen3.6-plus, and a remote model catalog manifest so new OpenRouter and Nous Portal models appear without a Hermes release.
5. Pluggable Gateway + Microsoft Teams (19th Platform)
The gateway is now a plugin host — messaging adapters can ship as drop-in plugins outside the core codebase. Microsoft Teams is the first platform to ship this way.
| # | Platform | Type |
|---|---|---|
| 18 | Tencent Yuanbao (元宝) | Native adapter with text + media delivery |
| 19 | Microsoft Teams | First plugin-shipped platform adapter |
Gateway plugin architecture:
pre_gateway_dispatchhook — intercept messages before dispatchpre_approval_request/post_approval_responsehooks — customize approval flowsduration_msonpost_tool_call— performance tracking per tool invocation
6. Native Spotify Integration
Seven tools behind PKCE OAuth with an interactive setup wizard:
# Interactive setup
hermes spotify setup
# Walks you through OAuth, then the bundled skill is ready
| Tool | Function |
|---|---|
| Play/pause | Control playback on any device |
| Search | Find tracks, albums, artists, playlists |
| Queue | Manage the play queue |
| Playlists | Create and manage playlists |
| Devices | Switch between available devices |
Surfaced in hermes tools and documented for cron usage — automate your music alongside everything else.
7. Google Meet Plugin
Join calls, transcribe conversations, speak responses, and follow up after meetings — all as a bundled plugin:
# Join a meeting
hermes meet join https://meet.google.com/xxx-xxxx-xxx
# Enables captions, generates transcript, can speak responses, sends follow-up
Built on Realtime OpenAI transport with a Node bot server. Full pipeline bundled as a plugin — no external services required.
8. ComfyUI v5 & TouchDesigner-MCP — Now Built-in by Default
ComfyUI v5 moved from optional to built-in, with official CLI + REST + hardware-gated local install. Hermes can now generate images, manage workflows, and control ComfyUI directly.
TouchDesigner-MCP is now bundled by default and significantly expanded:
- GLSL shader generation and manipulation
- Post-FX pipeline configuration
- Audio reactive setups
- Geometry node programming
- 9 new reference documents covering advanced techniques
These integrations position Hermes as a creative production tool alongside its coding and messaging capabilities.
9. Skill Ecosystem Expansion
| Skill | Description |
|---|---|
| Humanizer | Strips AI-isms from generated text — makes output sound natural |
| claude-design | HTML artifact skill with disambiguation from other design tools |
| design-md | Google’s DESIGN.md specification skill |
| airtable | Airtable database integration with API keys from .env |
| pretext | Creative browser demos using @chenglou/pretext |
| spike + sketch | Throwaway experiments + HTML mockups |
Skills UX improvements:
# Install skills from a direct URL
hermes skills install https://example.com/skill.tar.gz
# Reload skills without restarting
/reload-skills
# List skills with enabled/disabled status
hermes skills list
10. hermes -z — One-Shot Mode
Run Hermes non-interactively for scripting and automation:
# Single prompt, get result, exit
hermes -z "Summarize this codebase"
# With model and provider overrides
hermes -z "Review this PR diff" --model gpt-5.5 --provider openrouter
# Use environment variable
HERMES_INFERENCE_MODEL=claude-sonnet-4 hermes -z "Explain this error"
Perfect for CI/CD pipelines, git hooks, and any automation where you need a one-shot agent call.
11. Web Dashboard — Models Tab
A new Models tab with rich per-model analytics. Configure your main and auxiliary models directly from the browser:
- Usage stats per model
- Cost tracking and trends
- Switch main and auxiliary models from the dashboard
- Dashboard Chat tab with xterm.js + JSON-RPC sidecar
12. Performance — 57% Faster Cold Start
Visible TUI cold start time cut by more than half through:
- Lazy agent initialization — don’t spin up the full agent until needed
- Lazy imports — OpenAI, Anthropic, Firecrawl, and account_usage loaded on demand
- mtime-cached
load_config()— config re-reads avoided when nothing changed - Memoized
get_tool_definitions()— TTL-cached check function results - Precompiled dangerous-command patterns — regex compilation done at startup, not per-invocation
Additional performance work: cached Ink text measurements across Yoga flex re-passes, stabilized long-session scrolling, and lazily seeded virtual history heights.
13. Native Multimodal Image Routing
Images now route based on the model’s actual vision capability rather than provider defaults. If a model supports vision, images go through. If not, they’re handled gracefully. No more guessing which providers support images — the system checks.
14. Gateway Media Parity
Native multi-image sending across Telegram, Discord, Slack, Mattermost, Email, and Signal. Centralized audio routing with FLAC support and Telegram document fallback. The gateway now handles rich media consistently across every supported platform.
New Built-in Tools & Commands
| Tool / Command | Description | Usage |
|---|---|---|
hermes curator |
Background agent for skill library maintenance | hermes curator status |
hermes -z |
Non-interactive one-shot mode | hermes -z "<prompt>" --model gpt-5.5 |
hermes update --check |
Preflight check before update | hermes update --check |
hermes fallback |
Manage fallback provider chains | hermes fallback list |
/busy |
Busy input mode (steer/queue) | /busy steer |
/btw |
Alias for /background |
/btw <task> |
/reload-skills |
Hot-reload skills without restart | /reload-skills |
/reload |
Hot-reload .env in TUI |
/reload |
/mouse |
Toggle mouse mode (WSL2 ghost-mouse fix) | /mouse |
pre_gateway_dispatch |
Plugin hook before message dispatch | Plugin API |
pre_approval_request / post_approval_response |
Approval flow hooks | Plugin API |
TUI — Major Upgrade
The TUI caught up to and surpassed the classic CLI in several areas:
- LaTeX rendering — mathematical expressions render natively
- Pluggable busy-indicator styles — customize the loading animation
- Opt-in auto-resume of last session on startup
- Session deletion from
/resumepicker withdkey - Line-by-line scroll on modified mouse wheel
- Queue editing — delete queued messages with ctrl-x, cancel with esc
- Expanded light-terminal auto-detection with
HERMES_TUI_THEMEenv var - Voice mode parity with CLI — VAD loop + TTS + crash forensics
- Mini help menu on
?in the input field - Per-section visibility for the details accordion
- Proactive mouse disable on ConPTY +
/mousetoggle (WSL2 ghost-mouse fix)
TTS — Pluggable Provider Registry
Text-to-speech is now a pluggable system:
# hermes.config.yaml
tts:
providers:
piper: # local TTS — no cloud needed
voice: en_US-lessac-medium
openai: # cloud TTS
voice: alloy
Piper ships as a native local TTS provider, closing a long-standing community request for offline speech. Pick your provider, switch between them, and Hermes handles the rest.
Improvements
Core Agent & Architecture
- Configurable prompt cache TTL —
prompt_caching.cache_ttl(5m default, 1h opt-in) for cost savings in bursty sessions - Delegate
child_timeout_secondsdefault bumped to 600s for longer subagent tasks - Diagnostic dump when subagent times out with 0 API calls — helps debug silent failures
- Gateway busts cached agent on compression/context_length config edits — no stale agents
- Opt-in runtime-metadata footer on final replies — shows model/provider info
/fastwhitelist broadened to all OpenAI + Anthropic modelsauxiliary.extra_body.reasoningtranslates into Codex Responses API
Compression
- Retry summary on main model before giving up on unknown errors
- Notify users when configured aux model fails, even if main-model fallback recovers
/compresswrapped in_busy_commandto block input during compression
Session & Memory
- Trigram FTS5 index for CJK (Chinese/Japanese/Korean) search with repair + migration
tool_name+tool_callsindexed in FTS5 for searchable tool history- Auto-prune orphan checkpoints at startup
- Memory providers notified on mid-process session_id rotation
- Preserve symlinks during atomic file writes
Messaging Platforms
| Platform | Improvement |
|---|---|
| Telegram | Chat allowlists for groups/forums; markdown table rendering; native multi-image |
| Discord | Opt-in toolsets + ID injection + tool split |
| Slack | Every gateway command as native slash; strict_mention config; channel_skill_bindings |
| Signal | Native markdown formatting (bodyRanges, reply quotes, reactions); multi-image |
| Feishu/Mattermost/Email | Native multi-image sending |
Cron
- Honor
hermes toolsconfig for cron platform - Per-job
workdir— project-aware cron runs context_fromfield — chain cron job outputs
Browser
- CDP supervisor — dialog detection + response + cross-origin iframe eval
- Auto-spawn local Chromium for LAN/localhost URLs when cloud provider is configured
Execute Code
- Vercel Sandbox backend for
execute_code/ terminal - Collapse subagent task_ids to shared container
- Docker: run container as host user to avoid root-owned bind mounts
Observability
- Bundled Langfuse observability plugin — trace every tool call, model request, and agent decision
- Bundled hermes-achievements plugin — scans full session history for milestone detection
Security & Reliability
- Secret redaction off by default — prevents the long-standing issue where fake secret-shaped substrings in tool outputs mangled patches and API payloads. Opt in via
redaction.enabled: truewhen needed [SYSTEM:→[IMPORTANT:in all user-injected markers — dodges Azure content filter false positives- Hardline blocklist for unrecoverable commands — certain destructive commands now blocked outright
- Canonical
mask_secrethelper — unified secret masking across the codebase - Sweep expired paste.rs uploads on a real timer
- Preserve symlinks during atomic file writes
- Probe
/dev/ttyby opening it, not bare existence check
Notable Bug Fixes
360 fix: PRs landed this window. Key highlights:
- Background review fork inherits parent’s live runtime — provider/model/credentials now propagate correctly (previously the fork ran with stale config)
- Streaming reasoning persists on assistant turns (was being dropped on DeepSeek/Kimi)
- Cross-provider reasoning isolation — DeepSeek/Kimi reasoning content no longer leaks across provider histories
croniterpromoted to core dependency — fixes cron scheduling failures- Compression recovery — retry on main model before giving up; user notified when aux fails
- FTS5 search — tool_name + tool_calls indexed with repair + migration
- Vision cache uses HERMES_HOME instead of cwd
- MCP
definitionsrefs rewritten to$defsin input schemas — fixes provider-side 400 errors - Azure content filter compatibility — renamed system markers avoid Azure content filter flags
- Discord tool
limitparameter coerced to int beforemin()call - ACP image prompt advertisement and forwarding
The vast majority of fixes landed in streaming, compression, and tool-calling paths across all major providers — DeepSeek, Kimi, Moonshot, GLM, Qwen, MiniMax, Gemini, Anthropic, and OpenAI.
Removed / Reverted
- Kanban multi-profile collaboration board — landed then reverted for design rework
- computer-use cua-driver — preparatory PRs landed then reverted
- BOOT.md built-in hook removed — replaced by hooks tutorial showing how to build it yourself
/provider+/planslash commands droppedflush_memoriesremoved entirely
Upgrade
hermes update
For new installations, visit the install guide.
← Hermes Agent Changelog