Release history
hermes-agent releases
The agent that grows with you
All releases
16 shown
- Redaction enabled by default — mitigates secret leakage
- Discord `DISCORD_ALLOWED_ROLES` now scoped to originating guild (CVE impact CVSS 8.1)
- Multi‑agent Kanban durable board with heartbeats, reclaim, zombie detection and per‑task retries
- `/goal` persistent cross‑turn goal primitive (Ralph loop)
- Checkpoints v2 state persistence rewrite with real pruning
Full changelog
Hermes Agent v0.13.0 (v2026.5.7)
Release Date: May 7, 2026
Since v0.12.0: 864 commits · 588 merged PRs · 829 files changed · 128,366 insertions · 282 issues closed (13 P0, 36 P1) · 295 community contributors (including co-authors)
The Tenacity Release — Hermes Agent now finishes what it starts. Kanban ships as a durable multi-agent board (heartbeat, reclaim, zombie detection, auto-block on incomplete exit, per-task retries, hallucination recovery).
/goalkeeps the agent locked on a target across turns (Ralph loop). Checkpoints v2 rewrites state persistence with real pruning. Gateway auto-resumes interrupted sessions after restart. Cron grows ano_agentwatchdog mode. A security wave closes 8 P0s — redaction is now ON by default, Discord role-allowlists are guild-scoped, WhatsApp rejects strangers by default, and TOCTOU windows close across auth.json and MCP OAuth. Google Chat becomes the 20th platform. Providers become a pluggable surface. Seven i18n locales ship.
✨ Highlights
-
Multi-agent Kanban — delegate to an AI team that actually finishes — Spin up a durable board, drop tasks on it, and let multiple Hermes workers pick them up, hand off, and close them out. Heartbeats, reclaim, zombie detection, retry budgets, and a hallucination gate keep the team honest. One install, many kanbans. (#17805, #19653, #20232, #20332, #21330, #21183, #21214)
-
/goal— the agent doesn't forget what you asked it to do — Lock the agent onto a target and it stays on task across turns. The Ralph loop as a first-class primitive. (#18262, #18275, #21287) -
Show it a video — new
video_analyzetool for native video understanding on Gemini and compatible multimodal models. (@alt-glitch) (#19301) -
Clone a voice — xAI Custom Voices lands as a TTS provider with voice cloning support. (@alt-glitch) (#18776)
-
Hermes speaks your language — static gateway + CLI messages translate to 7 locales: Chinese, Japanese, German, Spanish, French, Ukrainian, and Turkish. Docs site gains a Chinese (zh-Hans) locale. (#20231, #20329, #20467, #20474, #20430, #20431)
-
Google Chat — the 20th messaging platform — plus a generic platform-plugin hooks surface so third-party adapters drop in without touching core (IRC and Teams migrated). (#21306, #21331)
-
Sessions survive restarts — gateway bounces mid-agent,
/updaterestarts, source-file reloads — conversations auto-resume when the gateway comes back. (#21192) -
Security wave — 8 P0 closures — redaction ON by default, Discord role-allowlists guild-scoped (CVSS 8.1 cross-guild DM bypass closed), WhatsApp rejects strangers by default, TOCTOU windows closed across
auth.jsonand MCP OAuth, browser enforces cloud-metadata SSRF floor, cron prompt-injection scans assembled skill content,hermes debug shareredacts at upload. (#21193, #21241, #21291, #21176, #21194, #21228, #21350, #19318) -
Checkpoints v2 — state persistence rewritten. Real pruning, disk guardrails, no more orphan shadow repos. (#20709)
-
The agent lints its own writes — post-write delta lint on
write_file+patch. Python, JSON, YAML, TOML. Syntax errors surface immediately instead of shipping downstream. (#20191) -
no_agentcron mode — script-only watchdog — cron jobs can now skip the agent entirely and just run a script. Empty stdout is silent, non-empty gets delivered verbatim. (#19709) -
Platform allowlists everywhere —
allowed_channels/allowed_chats/allowed_roomsconfig across Slack, Telegram, Mattermost, Matrix, and DingTalk. (#21251) -
Providers are now plugins —
ProviderProfileABC +plugins/model-providers/. Drop in third-party providers without touching core. (#20324) -
API server — long-term memory per session —
X-Hermes-Session-Keyheader gives memory providers a stable session identifier. (#20199) -
MCP levels up — SSE transport with OAuth forwarding, stale-pipe retries, image results surface as MEDIA tags instead of getting dropped, keepalive on long-lived lifecycle waits. (#21227, #21323, #21289, #21328, #20209)
-
Curator grows subcommands —
hermes curator archive,prune,list-archived. Manualhermes curator runis synchronous now — you see results without polling. (#20200, #21236, #21216) -
ACP —
/steerand/queue— direct the in-flight agent or queue follow-ups from Zed, VS Code, or JetBrains. Plus atomic session persistence and reasoning-metadata preservation across restarts. (@HenkDz) (#18114, #20279, #20296, #20433) -
TUI glow-up —
/modelpicker matcheshermes modelwith inline auth (@austinpickett), collapsible startup banner sections (@kshitijk4poor), context-compression counter in the status bar. (#18117, #20625, #21218) -
Dashboard grows up — Plugins page (manage, enable/disable, auth status) (@austinpickett), Profiles management page (@vincez-hms-coder), sortable analytics tables, reverse-proxy support via
X-Forwarded-Prefix, newdefault-large18px theme. (#18095, #16419, #18192, #21296, #20820) -
SearXNG + split web tools — SearXNG ships as a native search-only backend; web tools now let you pick different backends per capability (search vs extract vs browse). (@kshitijk4poor) (#20823, #20061, #20841)
-
OpenRouter response caching — explicit cache control for models that expose it. (@kshitijk4poor) (#19132)
-
[[as_document]]— skill media-routing directive — skills can force the gateway to deliver output as a document on platforms that support it. (#21210) -
transform_llm_outputplugin hook — new lifecycle hook that lets plugins reshape or filter LLM output before it hits the conversation. Useful for context-window reducers and content filters. (#21235) -
Nous OAuth persists across profiles — shared token store: sign in once, every profile inherits the session. (#19712)
-
QQBot — native approval keyboards — feature parity with Telegram / Discord approval UX. Chunked upload, quoted attachments. (#21342, #21353)
-
6 new optional skills — Shopify (Admin + Storefront GraphQL), here.now, shop-app personal shopping assistant, Anthropic financial-services bundle, kanban-video-orchestrator (@SHL0MS), searxng-search (@kshitijk4poor). (#18116, #18170, #20702, #21180, #19281, #20841)
-
New models —
deepseek/deepseek-v4-pro,x-ai/grok-4.3,openrouter/owl-alpha(free),tencent/hy3-preview(@Contentment003111), Arcee Trinity Large Thinking temperature + compression overrides. (#20495, #20497, #18071, #21077, #20473) -
100 fresh CLI startup tips — the random tip banner gets 100 new entries covering cron, kanban, curator, plugins, and lesser-known flags. (#20168)
🧩 Multi-Agent Kanban (Durable)
New — durable multi-profile collaboration board
feat(kanban): durable multi-profile collaboration board— post-revert reimplementation, multi-profile by design (#17805)- Multi-project boards — one install, many kanbans (#19653, #19679)
- Share board, workspaces, and worker logs across profiles (#19378)
- Hallucination gate + recovery UX for worker-created-card claims (closes #20017) (#20232)
- Generic diagnostics engine for task distress signals (#20332)
- Per-task
max_retriesoverride (supersedes #20972) (#21330) - Multiline textarea for inline-create title (salvage of #20970) (#21243)
Kanban Dashboard
- Workspace kind + path inputs in inline create form (#19679)
- Per-platform home-channel notification toggles (#19864)
- Sharper home-channel toggle contrast + drop → running action (#19916)
- Fix: reject direct status transition to 'running' via dashboard API (salvage of #19554) (#19705)
- Fix: dashboard board pin authoritative over server current file (#20879) (#21230)
- Fix: treat dashboard event-stream cancellation as normal shutdown (#20790) (#21222)
- Fix: filter dashboard board by selected tenant (#19817) (#21349)
- Fix: code/pre styling theme-immune across all themes (#21086) (#21247)
- Fix: reset
<code>background inside dashboard board (#20687) - Fix: preserve dashboard completion summaries + add kanban edit (salvages #20016) (#20195)
- Fix: avoid fragile failure-column renames (salvage #20848) (@kshitijk4poor) (#20855)
Worker lifecycle + reliability
- Heartbeat + reclaim + zombie + retry-cap fixes (#21147, #21141, #21169, #20881) (#21183)
- Auto-block workers that exit without completing + shutdown race (#20894) (#21214)
- Detect darwin zombie workers (salvages #20023) (#20188)
- Unify failure counter across spawn/timeout/crash outcomes (#20410)
- Enforce worker task-ownership on destructive tool calls (#19713)
- Drop worker identity claim from KANBAN_GUIDANCE (#19427)
- Fix: skip dispatch for tasks assigned to non-profile lanes (salvages #20105, #20134) (#20165)
- Fix: include default profile in on-disk assignee enumeration (salvages #20123) (#20170)
- Fix: ignore stale current board pointers (salvages #20063) (#20183)
- Fix: profile discovery ignores HERMES_HOME in custom-root deployments (@jackey8616) (#19020)
- Fix: allow orchestrator profiles to see kanban tools via toolsets config (#19606)
Batch salvages
- Tier-1 batch — metadata test, max_spawn config, run-id lifecycle guard (salvages #19522 #19556 #19829) (#20440)
- Tier-2 batch — doctor, started_at, parent-guard, latest_summary, selects, linked-children (#20448)
Documentation
- Backfill multi-board refs in reference docs (#19704)
- Document
/kanbanslash command (#19584) - Document recommended handoff evidence metadata (salvage #19512) (#20415)
- Fix orchestrator + worker skill setup instructions (@helix4u) (#20958, #20960)
🎯 Persistent Goals, Checkpoints & Session Durability
/goal — persistent cross-turn goals (Ralph loop)
feat: /goal — persistent cross-turn goals(#18262)- Docs page — Persistent Goals (/goal) (#18275)
- Fix: honor configured goal turn budget (salvage #19423) (#21287)
Checkpoints v2
- Single-store rewrite with real pruning + disk guardrails (#20709)
Session durability
- Auto-resume interrupted sessions after gateway restart (salvage #20888) (#21192)
- Preserve pending update prompts across restarts (#20160)
- Preserve home-channel thread targets across restart notifications (salvage #18440) (#19271)
- Preserve thread routing from cached live session sources (#21206)
- Preserve assistant metadata when branching sessions (#18222)
- Preserve thread routing for /update progress and prompts (#18193)
- Preserve document type when merging queued events (#18215)
🛡️ Security & Reliability
Security hardening (8 P0 closures)
- Enable secret redaction by default (#17691, #20785) (#21193)
- Discord — scope
DISCORD_ALLOWED_ROLESto originating guild (#12136, CVSS 8.1) (#21241) - WhatsApp — reject strangers by default, never respond in self-chat (#8389) (#21291)
- MCP OAuth — close TOCTOU window when saving credentials (#21176)
hermes_cli/auth.py— close TOCTOU window in credential writers (#21194)- Browser — enforce cloud-metadata SSRF floor in hybrid routing (#16234) (#21228)
hermes debug share— redact log content at upload time (@GodsBoy) (#19318)- Cron — scan assembled prompt including skill content for prompt injection (#3968) (#21350)
- Restore .env/auth.json/state.db with 0600 perms (#19699)
- SRI integrity for dashboard plugin scripts (salvage #19389) (#21277)
- Bind Meet node server to localhost, restrict token file to owner read (#19597)
- Extend sensitive-write target to cover shell RC and credential files (#19282)
- Harden YOLO mode env parsing against quoted-bool strings (#18214)
- OSV-Scanner CI + Dependabot for github-actions only (#20037)
Reliability — critical bug closures
- CLI crash on startup —
Invalid key 'c-S-c'(P0, prompt_toolkit doesn't support Shift modifier) (#19895, #19919) - CLOSE_WAIT fd leak audit — httpx keepalive + WhatsApp aiohttp leak + Feishu hygiene (#18451) (#18766)
- Gateway creates AIAgent with empty OpenRouter API key when OPENROUTER_API_KEY is missing (#20982) — fallback providers correctly honored
- Background review + curator protected from overwriting bundled/hub skills (#20273) (#20194)
- TUI compression continuation — ghost sessions with incomplete metadata (#20001)
hermes mcp addsilently launches chat instead of registering MCP server (#19785) (#21204)- Background review agent runtime propagation — provider/model/credentials now actually inherit from parent
- Inbound document host paths translated to container paths for Docker backend (salvage #19048) (#21184)
- Matrix gateway race between auto-redaction and message delivery with high-speed models (#19075)
/newduring active agent session never sends response on Telegram (#18912)
📱 Messaging Platforms (Gateway)
New platform
- Google Chat — 20th platform + generic
env_enablement_fn/cron_deliver_env_varplatform-plugin hooks (IRC + Teams migrated) (#21306, #21331)
Cross-platform
allowed_{channels,chats,rooms}whitelist — Slack (salvage #7401), Telegram, Mattermost, Matrix, DingTalk (#21251)- Per-platform
gateway_restart_notificationflag (#20892) busy_ack_enabledconfig — suppress ack messages (#18194)- Auto-delete slash-command system notices after TTL (#18266)
- Opt-in cleanup of temporary progress bubbles (#21186)
[[as_document]]directive — skill media routing (salvage #19069) (#21210)hermes gateway list— cross-profile status (salvage #19129) (#21225)- Auto-resume interrupted sessions after restart (salvage #20888) (#21192)
- Atomic restart markers + Windows runtime-lock offset (#17842) (#18179)
- Fix:
config.yamlwins over.envfor agent/display/timezone settings (#18764) - Fix: auto-restart when source files change out from under us (#17648) (#18409)
- Fix: use git HEAD SHA for stale-code check, not file mtimes (#19740)
- Fix: shutdown + restart hygiene — drain timeout, false-fatal, success log (#18761)
- Fix: preserve max_turns after env reload (salvage #19183) (#21240)
- Fix: exclude ancestor PIDs from gateway process scan (#19586)
- Fix: move quick-command alias dispatch before built-ins (#19588)
- Fix: show other profiles in 'gateway status' to prevent confusion (#19582)
- Fix: include external_dirs skills in Telegram/Discord slash commands (salvage #8790) (#18741)
- Fix: match disabled/optional skills by frontmatter slug, not dir name (#18753)
- Fix: read /status token totals from SessionDB (#17158) (#18206)
- Fix: snapshot callback generation after agent binds it, not before (#18219)
- Fix: re-inject topic-bound skill after /new or /reset (#18205)
- Fix: isolate pending native image paths by session (#18202)
- Fix: clear queued reload skills notes on new/resume/branch (#19431)
- Fix: hide required-arg commands from Telegram menu (#19400)
- Fix: bridge top-level
require_mentionto Telegram config (#19429) - Fix: suppress duplicate voice transcripts (#19428)
- Fix: show friendly error when service is not installed (#19707)
- Fix: read context_length from custom_providers in session info header (#19708)
- Fix: preserve WSL interop PATH in systemd units (#19867)
- Fix: handle planned service stops (salvage #19876) (#19936)
- Fix: keep DoH-confirmed Telegram IPs that match system DNS (salvage #17043) (#20175)
- Fix: load
reply_to_modefrom config.yaml for Discord + Telegram (salvage #17117) (#20171) - Fix: tolerate malformed HERMES_HUMAN_DELAY_* env vars (salvage #16933) (#20217)
- Fix: deterministic thread eviction preserves newest entries (salvage #13639) (#20285)
- Fix: don't dead-end setup wizard when only system-scope unit is installed (#20905)
- Fix: wait for systemd restart readiness + harden Discord slash-command sync (#20949)
- Fix: avoid duplicated Responses history (salvage #18995) (#21185)
- Fix: surface bootstrap failures to stderr (salvage #21157) (#21278)
- Fix: log agent task failures instead of silently losing usage data (salvage #21159) (#21274)
- Fix: log runtime-status write failures with rate-limiting (salvage #21158) (#21285)
- Fix: reset-failed before every fallback restart so the gateway can't get stranded (#21371)
- Fix: Telegram — preserve
thread_id=1for forum General typing indicator (#21390) - Fix: batch critical fixes — session resume, /new race, HA WebSocket scheme (@kshitijk4poor) (#19182)
Telegram
- DM user-managed multi-session topics (salvage of #19185) (#19206)
Discord
- Message deletion action (salvage #19052) (#21197)
- Fix: allow
free_response_channelsto overrideDISCORD_IGNORE_NO_MENTION(#19629)
Slack
- Fix: ephemeral slash-command ack, private notice delivery, format_message fixes (@kshitijk4poor) (#18198)
- Fix: load WhatsApp home channel from env overrides (#18190)
Feishu
- Operator-configurable bot admission and mention policy (#18208)
- Fix: force text mode for markdown tables (salvage of #13723 by @WuTianyi123) (#20275)
Matrix + Email
- Fix:
/sethomeon Matrix and Email now persists across restarts (#18272)
Teams
- Docs + feat: sidebar + threading with group-chat fallback (#20042)
Weixin
- Fix: deduplicate Weixin messages by content fingerprint (#19742)
QQBot
- Port SDK improvements in-tree — chunked upload, approval keyboards, quoted attachments (#21342)
- Wire native tool-approval UX via inline keyboards (#21353)
🏗️ Core Agent & Architecture
Provider & Model Support
Pluggable providers
- ProviderProfile ABC +
plugins/model-providers/— inference providers are now a pluggable surface (salvage of #14424) (#20324) list_picker_providers— credential-filtered picker (salvage #13561) (#20298)- Remove
/provideralias for/model(#20358) - Shared Hermes dotenv loader across CLI + plugins (salvage #13660) (#20281)
- Nous OAuth persisted across profiles via shared token store (#19712)
New models
deepseek/deepseek-v4-proadded to OpenRouter + Nous Portal (#20495)x-ai/grok-4.3added to OpenRouter + Nous Portal (#20497)openrouter/owl-alpha(free tier) added to curated OpenRouter list (#18071)tencent/hy3-previewpaid route on OpenRouter (@Contentment003111) (#21077)- Arcee Trinity Large Thinking — temperature + compression overrides (#20473)
- Rename
x-ai/grok-4.20-betatox-ai/grok-4.20(#19640) - Demote Vercel AI Gateway to bottom of provider picker (#18112)
Provider configuration
- OpenRouter — response caching support (@kshitijk4poor) (#19132)
image_gen.modelfrom config.yaml honored (salvage #19376) (#21273)- Fix: honor runtime default model during delegate provider resolution (@johnncenae) (#17587)
- Fix: avoid Bedrock credential probe in provider picker (@helix4u) (#18998)
- Fix: drop stale env-var override of persisted provider for cron (#19627)
- Fix: auxiliary curator api_key/base_url into runtime resolution (#19421)
Agent Loop & Conversation
video_analyze— native video understanding tool (@alt-glitch) (#19301)- Show context compression count in status bar (CLI + TUI) (#21218)
- Isolate
get_tool_definitionsquiet_mode cache + dedup LCM injection (#17335) (#17889) - Fix: warning-first tool-call loop guardrails (#18227)
- Fix: break permanent empty-response loop from orphan tool-tail (#21385)
- Fix: propagate ContextVars to concurrent tool worker threads (salvage #16660) (#18123)
- Fix: surface self-improvement review summaries across CLI, TUI, and gateway (#18073)
- Fix: serialize concurrent
hermes_toolsRPC calls fromexecute_code(#17894, #17902) - Fix: include system prompt + tool schemas in token estimates for compression (#18265)
Compression
- Fix: skip non-string tool content in dedup pass to prevent AttributeError (#19398)
- Fix: reset
_summary_failure_cooldown_untilon session reset (#19622) - Fix: trigger fallback on timeout errors alongside model-unavailable errors (#19665)
- Fix:
_prune_old_tool_resultsboundary direction (#19725) - Fix: soften summary prompt for content filters (salvage #19456) (#21302)
Delegate
- Fix: inherit parent fallback_chain in
_build_child_agent(#19601) - Fix: guard
_load_config()againstdelegation: nullin config.yaml (#19662) - Fix: inherit parent api_key when
delegation.base_urlset withoutdelegation.api_key(#19741) - Fix: expand composite toolsets before intersection (salvage #19455) (#21300)
- Fix: correct ACP docs — Claude Code CLI has no --acp flag (salvage #19058) (#21201)
Session & Memory
- Hindsight — probe API for
update_mode='append'to dedupe across processes (@nicoloboschi) (#20222)
Curator
hermes curator archiveandprunesubcommands (#20200)hermes curator list-archived(#20651) (#21236)- Synchronous manual
hermes curator run(#20555) (#21216) - Fix: preserve
last_report_pathin state (#18169) - Fix: rewrite cron job skill refs after consolidation (#18253)
- Fix: defer first run +
--dry-runpreview (#18373) (#18389) - Fix: authoritative
absorbed_intoon delete + restore cron skill links on rollback (#18671) (#18731) - Fix: prevent false-positive consolidation from substring matching (#19573)
- Fix: only mark agent-created for background-review sediment (#19621)
- Fix: protect hub skills by frontmatter name (#20194)
🔧 Tool System
File tools
- Post-write delta lint on
write_file+patch— in-proc linters for Python, JSON, YAML, TOML (#20191)
Cron
no_agentmode — script-only cron jobs (watchdog pattern) (#19709)context_fromchaining docs (salvage #15724) (#20394)- Fix: treat non-dict origin as missing instead of crashing tick (#19283)
- Fix: bump skill usage when cron jobs load skills (#19433)
- Fix: recover null
next_run_atjobs (#19576) - Fix: skip AI call when prerun script produces no output (#19628)
- Fix: expand config.yaml refs during job execution (#19872)
- Fix: serialize
get_due_jobswrites to prevent parallel state corruption (#19874) - Fix: initialize MCP servers before constructing the cron AIAgent (#21354)
MCP
- SSE transport support (salvage #19135) (#21227)
- Forward OAuth auth + bump
sse_read_timeouton SSE transport (#21323) - Retry stale pipe transport failures as session-expired (#21289)
- Surface image tool results as MEDIA tags instead of dropping them (#21328)
- Periodic keepalive to
_wait_for_lifecycle_event(salvage #17016) (#20209) - Fix: reconnect on terminated sessions (#19380)
- Fix: decouple AnyUrl import from mcp dependency (#19695)
- Fix:
mcp add --commandgets distinct argparse dest (#21204) - Fix: clear stale thread interrupt before MCP discovery (#21276)
- Fix: report configured timeout in MCP call errors (#21281)
- Fix: include exception type in error messages when str(exc) is empty (salvage #19425) (#21292)
- Fix: re-raise CancelledError explicitly in
MCPServerTask.run(#21318) - Fix: coerce numeric tool args defensively in
mcp_serve(#21329) - Fix: gate utility stubs on server-advertised capabilities (#21347)
Browser
- Fix: allow explicit CDP override without local agent-browser (#19670)
- Fix: inject
--no-sandboxfor root + AppArmor userns restrictions (#19747) - Fix: tighten Lightpanda fallback edge cases (@kshitijk4poor) (#20672)
Web tools
- Per-capability backend selection — search/extract split (@kshitijk4poor) (#20061)
- SearXNG native search-only backend (@kshitijk4poor) (#20823)
Approval / Tool gating
- Fix: wake blocked gateway approvals on session cleanup (#18171)
- Fix: harden YOLO mode env parsing against quoted-bool strings (#18214)
- Fix: extend sensitive write target to cover shell RC and credential files (#19282)
🔌 Plugin System
transform_llm_outputplugin hook (salvage of #20813) (#21235)- Document
env_enablement_fn+cron_deliver_env_varplatform-plugin hooks (#21331) - Pluggable surfaces coverage — model-provider guide, full plugin map, opt-in fix (#20749)
- Plugin-authoring gaps — image-gen provider guide + publishing a skill tap (#20800)
🧩 Skills Ecosystem
New optional skills
- Shopify — Admin + Storefront GraphQL optional skill (#18116)
- here.now — optional skill (#18170)
- shop-app — personal shopping assistant (optional) (#20702)
- Anthropic financial-services bundle — ported as optional finance skills (#21180)
- kanban-video-orchestrator — creative optional skill (@SHL0MS) (#19281)
- searxng-search — optional skill + Web Search + Extract docs page (@kshitijk4poor) (#20841, #20844)
Skill UX
- Linear skill — add Documents support + Python helper script (#20752)
- Modernize Obsidian skill to use file tools (salvage #19332) (#20413)
- Default custom tool creation to plugins (@kshitijk4poor) (#19755)
- skill_commands cache — rescan on platform scope changes (salvage #14570 by @LeonSGP43) (#18739)
- Skills — additional rescan paths in skill_commands cache (salvage #19042) (#21181)
- Fix: regression tests for non-dict metadata in
extract_skill_conditions(#18213) - Docs: explain restoring bundled skills (salvage #19254) (#20404)
- Docs: document
hermes skills resetsubcommand (salvage #11544) (#20395) - Docs: himalaya v1.2.0
folder.aliasessyntax (#19882) - Point agent at
hermes-agentskill + docs site sync (#20390)
🖥️ CLI & User Experience
CLI
/newaccepts optional session name argument (salvage of #19555) (#19637)- 100 new CLI startup tips (#20168)
display.language— static message translation (zh/ja/de/es) (#20231)- French (fr) locale (@Foolafroos) (#20329)
- Ukrainian (uk) locale (#20467)
- Turkish (tr) locale (#20474)
- Fix: recover classic CLI output after resize (@helix4u) (#20444)
- Fix: complete absolute paths as paths (@helix4u) (#19930)
- Fix: resolve lazy session creation regressions (#18370 fallout) (@alt-glitch) (#20363)
- Fix: local backend CLI always uses launch directory (@alt-glitch) (#19334)
- Refactor: drop dead c-S-c key binding (follow-up to #19895) (#19919)
TUI (Ink)
/modelpicker overhaul to matchhermes modelwith inline auth (@austinpickett) (#18117)- Collapsible sections in startup banner — skills, system prompt, MCP (@kshitijk4poor) (#20625)
- Show context compression count in status bar (#21218)
- Perf: reduce overlay render churn with focused selectors (@OutThisLife) (#20393)
- Fix: restore voice push-to-talk parity (salvage of #16189 by @Montbra) (@OutThisLife) (#20897)
- Fix: kanban button (@austinpickett) (#18358)
Dashboard
- Plugins page — manage, enable/disable, auth status (@austinpickett) (#18095)
- Profiles management page (@vincez-hms-coder) (#16419)
- Interactive column sorting in analytics tables (#18192)
default-largebuilt-in theme with 18px base size (#20820)- Support serving under URL prefix via
X-Forwarded-Prefix(salvage #19450) (#21296) - Launch dashboard as side-process via
HERMES_DASHBOARD=1in Docker (@benbarclay) (#19540) - Fix: dashboard theme layout shift (@AllardQuek) (#17232)
- Fix: gateway model picker current context (@helix4u) (#20513)
Update + setup
hermes update --yes/-yto skip interactive prompts (#18261)- Restart manual profile gateways after update (#18178)
Profiles
--no-skillsflag for empty profile creation (#20986)
🎵 Voice, Image & Media
- xAI Custom Voices — voice cloning (@alt-glitch) (#18776)
- Achievements — share card render on unlocked badges (#19657)
- Refresh systemd unit on gateway boot (not just start/restart) (@alt-glitch) (#19684)
🔗 API Server & Remote Access
X-Hermes-Session-Keyheader for long-term memory scoping (closes #20060) (#20199)
🧰 ACP Adapter (VS Code / Zed / JetBrains)
/steerand/queueslash commands (@HenkDz) (#18114)- Fix: translate Windows cwd for WSL sessions (salvage #18128) (#18233)
- Fix: run
/steeras a regular prompt on idle sessions (#18258) - Fix: route Zed thoughts to reasoning + polish tool/context rendering (#19139)
- Fix: atomic session persistence via
replace_messages(salvage #13675) (#20279) - Fix: preserve assistant reasoning metadata in session persistence (salvage #13575) (#20296)
- Docs: update VS Code setup for ACP Client extension (salvage #12495) (#20433)
🐳 Docker
- Launch dashboard as side-process via
HERMES_DASHBOARD=1(@benbarclay) (#19540) - Refuse root gateway runs in official image (salvage #19215) (#21250)
- Chown runtime
node_modulestrees to hermes user (salvage #19303) (#21267) - Fix: exclude compose/profile runtime state from build context (#19626)
- CI: don't cancel overlapping builds, guard
:latest(@ethernet8023) (#20890) - Test: align Dockerfile contract tests with simplified TUI flow (salvage #19024) (#21174)
- Docs: connect to local inference servers (vLLM, Ollama) (salvage #12335) (#20407)
- Docs: document
API_SERVER_*env vars (salvage #11758) (#20409) - Docs: clarify Docker terminal backend is a single persistent container (#20003)
🐛 Notable Bug Fixes
Agent
- Fix: recover lazy session creation regressions (#18370 fallout) (@alt-glitch) (#20363)
- Fix: propagate ContextVars to concurrent tool worker threads (salvage #16660) (#18123)
- Fix: warning-first tool-call loop guardrails (#18227)
- Fix: surface self-improvement review summaries across CLI, TUI, and gateway (#18073)
Gateway streaming
- Fix: harden StreamingConfig bool and numeric coercion (@simbam99) (#16463)
Model
- Fix: avoid Bedrock credential probe in provider picker (@helix4u) (#18998)
Doctor
- Fix: check global agent-browser when local install not found (#19671)
- Test: kimi-coding-cn provider validation regression (#19734)
Update
- Fix: patch
isattyon real streams to fix xdist-flaky--yestests (salvage #19026) (#21175) - Fix: teach restart-mocks about the post-update survivor sweep (salvage #19031) (#21177)
Auth
- Fix: acp preserve assistant reasoning metadata (#20296)
Redact
- Fix: add
code_fileparam to skip false-positive ENV/JSON patterns (#19715)
- Fix: quoted-relative file-drop paths + Date header on tool email path (#19646)
🧪 Testing
- ACP — accept prompt persistence kwargs in MCP E2E mocks (@stephenschoettler) (#18047)
- Toolsets — include kanban in expected post-#17805 toolset assertions (@briandevans) (#18122)
- Agent — cover max-iterations summary message sanitization (#19580)
- run_agent —
-infandnanregression coverage for_coerce_number(#19703)
📚 Documentation
Major docs additions
llms.txt+llms-full.txt— agent-friendly ingestion (#18276)- User Stories and Use Cases collage page (#18282)
- Persistent Goals (/goal) feature page (#18275)
- Windows (WSL2) guide expansion — filesystem, networking, services, pitfalls (#20748)
- Chinese (zh-CN) README translation (salvage #13508) (#20431)
- zh-Hans Docusaurus locale + Tool Gateway / image-gen / WSL quickstart translations (salvage #11728) (#20430)
- Tool Gateway docs restructure — lead with what it does, config moved to bottom (#20827)
- Quickstart — Onchain AI Garage Hermes tutorials playlist (#20192)
- Open WebUI bootstrap script (salvage #9566) (#20427)
- Local Ollama setup guide (salvage #5842) (#20426)
- Google Gemini guide (salvage #17450) (#20401)
- Custom model aliases for /model command (#20475)
- Together/Groq/Perplexity cookbook via
custom_providers(salvage #15214) (#20400) - Doubao speech integration examples (TTS + STT) (salvage #18065) (#20418)
- WSL-to-Windows Chrome MCP bridge (salvage #8313) (#20428)
- Hermes skills docs sync — slash commands + durable-systems section (#20390)
- AGENTS.md — curator/cron/delegation/toolsets + fix plugin tree (#20226)
- Bedrock quickstart entry + fallback comment + deployment link (salvage #11093) (#20397)
Docs polish
- Collapse exploding skills tree to a single Skills node (#18259)
- Clarify
session_searchauxiliary model docs (#19593) - Open WebUI Quick Setup gap fill (#19654)
- Default custom tool creation to plugins (@kshitijk4poor) (#19755)
- Clarify Telegram group chat troubleshooting (salvage #18672) (#20416)
- Codex OAuth auth prerequisite clarification (salvage #18688) (#20417)
- Discord Server Members Intent + SSRC-mapping drift + /voice join slash Choice (salvage #11350) (#20411)
- Document
ctx.dispatch_tool()(salvage #10955) (#20391) - Document
hermes webhook subscribe --deliver-only(salvage #12612) (#20392) - Document
hermes importreference (salvage #14711) (#20396) - Document per-provider TTS
max_text_lengthcaps (salvage #13825) (#20389) - Clarify supported prompt customization surfaces (salvage #19987) (#20383)
- Correct
web_extractsummarizer timeout comment (salvage #20051) (#20381) - Fix fallback provider config paths (salvage #20033) (#20382)
- Fix misleading RL install-extras claim (salvage #19080) (#21213)
- Clarify API server tool execution locality (salvage #19117) (#21223)
- Prefer
.venvto match AGENTS.md and scripts/run_tests.sh (@xxxigm) (#21334) - Align tool discovery + test runner with AGENTS.md (@xxxigm) (#20791)
- Align terminal-backend count and naming across docs and code (salvage #19044) (#20402)
- Refresh stale platform counts (salvage #19053) (#20403)
👥 Contributors
Core
- @teknium1 — salvage, triage, review, feature work, and release management
Top Community Contributors
- @kshitijk4poor (21 PRs) — SearXNG native search backend, per-capability backend selection, collapsible TUI startup banner, Slack ephemeral ack + format fixes, Lightpanda fallback hardening, searxng-search optional skill + Web Search + Extract docs, default custom tool creation to plugins, kanban failure-column fix
- @alt-glitch (13 PRs) — video_analyze tool, xAI Custom Voices (voice cloning), local-backend CLI launch-directory fix, lazy-session creation regression recovery, systemd unit refresh on gateway boot
- @OutThisLife (9 PRs) — TUI perf — overlay render churn reduction, voice push-to-talk parity restoration (salvaging @Montbra)
- @helix4u (6 PRs) — Classic CLI output recovery after resize, absolute-path TUI completion, gateway model picker current-context fix, Bedrock credential probe avoidance, kanban docs fixes
- @ethernet8023 (3 PRs) — Docker CI — don't cancel overlapping builds, :latest guard
- @benbarclay (3 PRs) — Docker — launch dashboard as side-process via HERMES_DASHBOARD=1
- @austinpickett (3 PRs) — Dashboard Plugins page, TUI /model picker overhaul with inline auth, kanban button fix
- @sprmn24 (2 PRs) — Contributor (2 PRs)
- @asheriif (2 PRs) — Contributor (2 PRs)
- @xxxigm (2 PRs) — Contributing docs — .venv preference and test runner alignment with AGENTS.md
- @stephenschoettler (1 PR) — ACP — MCP E2E mock kwargs
- @vincez-hms-coder (1 PR) — Dashboard — Profiles management page
- @cdanis (1 PR) — Contributor
- @briandevans (1 PR) — Toolsets test — kanban assertions post-#17805
- @heyitsaamir (1 PR) — Contributor
All Contributors
Thanks to everyone who contributed to v0.13.0 — commits, co-authored work, and salvaged PRs. 295 contributors in one week.
@0oAstro, @0xDevNinja, @0xharryriddle, @0xKingBack, @0xsir0000, @0xyg3n, @0z1-ghb, @abhinav11082001-stack,
@acc001k, @acesjohnny, @adamludwin, @adybag14-cyber, @agentlinker, @agilejava, @ai-ag2026, @AJV20,
@alanxchen85, @albert748, @AllardQuek, @alt-glitch, @altmazza0-star, @ambition0802, @amitgaur, @amroessam,
@andrewhosf, @Asce66, @asheriif, @ashermorse, @asimons81, @Aslaaen, @Asunfly, @atongrun, @austinpickett,
@banditburai, @barteqpl, @Bartok9, @Beandon13, @beardthelion, @beibi9966, @benbarclay, @binhnt92, @bjianhang,
@BlackJulySnow, @bobashopcashier, @bogerman1, @Bongulielmi, @Brecht-H, @briandevans, @brooklynnicholson,
@c3115644151, @camaragon, @CashWilliams, @CCClelo, @cdanis, @CES4751, @cg2aigc, @changchun989, @ChanlerDev,
@CharlieKerfoot, @chengoak, @chenyunbo411, @chinadbo, @CIRWEL, @cixuuz, @cmcgrabby-hue, @colorcross,
@Contentment003111, @CoreyNoDream, @counterposition, @curiouscleo, @DaniuXie, @deep-name, @dengtaoyuan450-a11y,
@discodirector, @donramon77, @dpaluy, @ee-blog, @ehz0ah, @el-analista, @elmatadorgh, @EmelyanenkoK,
@Emidomenge, @emozilla, @Es1la, @EthanGuo-coder, @etherman-os, @ethernet8023, @EvilDrag0n, @exxmen, @Fearvox,
@Feranmi10, @firefly, @flobo3, @fmercurio, @Foolafroos, @formulahendry, @franksong2702, @ggnnggez, @GinWU05,
@giwaov, @glesperance, @gnanirahulnutakki, @GodsBoy, @Gosuj, @Grey0202, @guillaumemeyer, @Gutslabs, @h0tp-ftw,
@haidao1919, @halmisen, @happy5318, @hedirman, @helix4u, @hendrixfreire, @HenkDz, @hex-clawd, @heyitsaamir,
@hharry11, @Hinotoi-agent, @holynn-q, @hrkzogw, @Hypn0sis, @Hypnus-Yuan, @ideathinklab01-source, @IMHaoyan,
@Interstellar-code, @ishardo, @jacdevos, @jackey8616, @JanCong, @jasonoutland, @jatingodnani, @JayGwod,
@jethac, @JezzaHehn, @JiaDe-Wu, @jjjojoj, @jkausel-ai, @John-tip, @johnncenae, @jrusso1020, @jslizar,
@JTroyerOvermatch, @julysir, @Junass1, @JustinUssuri, @Kailigithub, @keepcalmqqf, @kiala9, @konsisumer,
@kowenhaoai, @Krionex, @kshitijk4poor, @kyan12, @leavrcn, @leon7609, @LeonSGP43, @leprincep35700, @lhysdl,
@likejudy, @lisanhu, @liu-collab, @liuguangyong93, @liuhao1024, @LucianoSP, @luoyuctl, @luyao618, @M3RCUR2Y,
@maciekczech, @Magicray1217, @magicray1217, @MaHaoHao-ch, @malaiwah, @manateelazycat, @masonjames, @megastary,
@memosr, @MichaelWDanko, @mikeyobrien, @millerc79, @Mind-Dragon, @mioimotoai-lgtm, @misery-hl, @molvikar,
@momowind, @Montbra, @MottledShadow, @mrbob-git, @mrcharlesiv, @mrcoferland, @ms-alan, @mwnickerson,
@nazirulhafiy, @nftpoetrist, @nicoloboschi, @nightq, @nikolay-bratanov, @NikolayGusev-astra, @nocturnum91,
@noOne-list, @nouseman666, @novax635, @npmisantosh, @nudiltoys-cmyk, @olisikh, @oluwadareab12, @Oxidane-bot,
@pama0227, @pander, @pasevin, @paul-tian, @pdonizete, @perlowja, @pingchesu, @PratikRai0101, @priveperfumes,
@probepark, @QifengKuang, @quocanh261997, @qWaitCrypto, @qxxaa, @r266-tech, @rames-jusso, @revaraver,
@Ricardo-M-L, @rob-maron, @Roy-oss1, @rxdxxxx, @SandroHub013, @Sanjays2402, @Sertug17, @shashwatgokhe,
@shellybotmoyer, @SHL0MS, @SimbaKingjoe, @simbam99, @simplenamebox-ops, @socrates1024, @sonic-netizen,
@sprmn24, @steezkelly, @stephen0110, @stephenschoettler, @stevenchanin, @stevenchouai, @stormhierta,
@subtract0, @suncokret12, @swithek, @taeng0204, @TakeshiSawaguchi, @tangyuanjc, @TheEpTic, @thelumiereguy,
@Tkander1715, @tmdgusya, @Tranquil-Flow, @TruaShamu, @UgwujaGeorge, @valda, @vincez-hms-coder, @VinVC,
@vominh1919, @wabrent, @WadydX, @wanazhar, @WanderWang, @warabe1122, @web-dev0521, @WideLee, @willy-scr,
@wmagev, @WuTianyi123, @wxst, @wysie, @Wysie, @xsfX20, @xxxigm, @xyiy001, @YanzhongSu, @ygd58, @Yoimex,
@yuehei, @Yukipukii1, @yuqianma, @YX234, @zeejaytan, @zhanggttry, @zhao0112, @zng8418, @zons-zhaozhy, @Zyproth
Full Changelog: v2026.4.30...v2026.5.7
- Autonomous Curator (`hermes curator`) runs as a background agent on a 7‑day cron, grades/prunes skills, writes `logs/curator/run.json` + `REPORT.md`, and provides usage ranking via `hermes curator status`.
- Self‑improvement loop upgraded to class‑first rubric grading, active‑update bias, proper runtime inheritance, and scoped toolsets for safer memory/skill reviews.
Full changelog
Hermes Agent v0.12.0 (v2026.4.30)
Release Date: April 30, 2026
Since v0.11.0: 1,096 commits · 550 merged PRs · 1,270 files changed · 217,776 insertions · 213 community contributors (including co-authors)
The Curator release — Hermes Agent now maintains itself. An autonomous background Curator grades, prunes, and consolidates your skill library on its own schedule. The self-improvement loop that reviews what to save got a substantial upgrade. Four new inference providers, a 18th messaging platform, a 19th via Teams plugin, native Spotify + Google Meet integrations, ComfyUI and TouchDesigner-MCP moved from optional to bundled-by-default, and a ~57% cut to visible TUI cold start.
✨ Highlights
-
Autonomous Curator —
hermes curatorruns as a background agent on the gateway's cron ticker (7-day cycle default). It grades your skill library, consolidates related skills, prunes dead ones, and writes per-run reports tologs/curator/run.json+REPORT.md. Archived skills are classified consolidated-vs-pruned via model + heuristic. Defense-in-depth gates protect bundled/hub skills from mutation. Unified underauxiliary.curator— pick the curator's model inhermes model, manage it from the dashboard.hermes curator statusranks skills by usage (most-used / least-used). (#17277, #17307, #17941, #17868, #18033) -
Self-improvement loop — substantially upgraded — The background review fork (the core of Hermes' self-improvement: after each turn it decides what memories/skills to save or update) is now class-first (rubric-based rather than free-form), active-update biased (prefers the skill the agent just loaded), handles
references//templates/sub-files, and properly inherits the parent's live runtime (provider, model, credentials actually propagate). Restricted to memory + skills toolsets so it can't sprawl. Memory providers shut down cleanly. Prior-turn tool messages excluded from the summary so the fork sees a clean context. (#16026, #17213, #16099, #16569, #16204, #15057) -
Skill integrations — major expansion — ComfyUI v5 with official CLI + REST + hardware-gated local install, moved from optional to built-in by default (#17610, #17631, #17734). TouchDesigner-MCP bundled by default, expanded with GLSL, post-FX, audio, geometry, and 9 new reference docs (#16753, #16624, #16768 — @kshitijk4poor + @SHL0MS). Humanizer skill ports a text-cleaner that strips AI-isms (#16787). claude-design HTML artifact skill + design-md (Google DESIGN.md spec) + airtable salvage +
skill_manageedits inexternal_dirs+ direct-URL skill install +/reload-skillsslash command. (#16358, #14876, #16291, #17512, #16323, #17744) -
LM Studio — first-class provider — upgraded from a custom-endpoint alias to a full-blown native provider: dedicated auth,
hermes doctorchecks, reasoning transport, live/modelslisting. (Salvage of @kshitijk4poor's #17061.) (#17102) -
Four more new inference providers — GMI Cloud (first-class, salvage of #11955 — @isaachuangGMICLOUD), Azure AI Foundry with auto-detection, MiniMax OAuth with PKCE browser flow (salvage #15203), Tencent Tokenhub (salvage of #16860). (#16663, #15845, #17524, #16960)
-
Pluggable gateway platforms + Microsoft Teams — the gateway is now a plugin host. Drop-in messaging adapters live outside the core, and Microsoft Teams is the first plugin-shipped platform. (Salvage of #17664.) (#17751, #17828)
-
Tencent 元宝 (Yuanbao) — 18th messaging platform — native gateway adapter with text + media delivery. (#16298, #17424)
-
Spotify — native tools + bundled skill + wizard — 7 tools (play, search, queue, playlists, devices) behind PKCE OAuth, interactive setup wizard, bundled skill, surfacing in
hermes tools, cron usage documented. (#15121, #15130, #15154, #15180) -
Google Meet plugin — join calls, transcribe, speak, follow up. Realtime OpenAI transport + Node bot server, full pipeline bundled as a plugin. (#16364)
-
hermes -zone-shot mode +hermes update --check— non-interactivehermes -z <prompt>with--model/--provider/HERMES_INFERENCE_MODEL.hermes update --checkpreflight. Opt-in pre-update HERMES_HOME backup. (#15702, #15704, #15841, #16539, #16566) -
Models dashboard tab + in-browser model config — rich per-model analytics, switch main + auxiliary models from the dashboard. (#17745, #17802)
-
Remote model catalog manifest — OpenRouter + Nous Portal model catalogs are now pulled from a remote manifest so new models show up without a release. (#16033)
-
Native multimodal image routing — images now route based on the model's actual vision capability rather than provider defaults. (#16506)
-
Gateway media parity — native multi-image sending across Telegram, Discord, Slack, Mattermost, Email, and Signal; centralized audio routing with FLAC support + Telegram document fallback. (#17909, #17833)
-
TUI catches up to (and past) the classic CLI — LaTeX rendering (@austinpickett),
/reload.env hot-reload, pluggable busy-indicator styles (@OutThisLife, #13610), opt-in auto-resume of last session, expanded light-terminal auto-detection, session delete from/resumepicker withd, modified mouse-wheel line scroll, and a/mousetoggle that kills ConPTY's phantom mouse injection (@kevin-ho). (#17175, #17286, #17150, #17130, #17113, #17668, #17669, #15488) -
Observability + achievements plugins — bundled Langfuse observability plugin (salvage #16845) + bundled hermes-achievements plugin that scans full session history. (#16917, #17754)
-
TTS provider registry + Piper local TTS — pluggable
tts.providers.<name>registry; Piper ships as a native local TTS provider. (Closes #8508.) (#17843, #17885) -
Vercel Sandbox backend — Vercel sandboxes as an execute_code/terminal backend (@kshitijk4poor). (#17445)
-
Secret redaction off by default — default flipped to off. Prevents the long-standing patch-corruption incidents where fake secret-shaped substrings mangled tool outputs. Opt in via
redaction.enabled: truewhen you need it. (#16794) -
Cold-start performance — visible TUI cold start cut ~57% via lazy agent init (@OutThisLife), lazy imports of OpenAI / Anthropic / Firecrawl / account_usage, mtime-cached
load_config(), memoizedget_tool_definitions()with TTL-cachedcheck_fnresults, precompiled dangerous-command patterns. (#17190, #17046, #17041, #17098, #17206) -
Configurable prompt cache TTL —
prompt_caching.cache_ttl(5m default, 1h opt-in — cost savings for bursty sessions that keep cache warm). Salvage of #12659. (#15065)
🧠 Autonomous Curator & Self-Improvement Loop
Curator — autonomous skill maintenance
hermes curatoras a background agent — runs on the gateway's cron ticker, 7-day cycle by default, umbrella-first prompt, inherits parent config, unbounded iterations (#17277 — issue #7816)- Per-run reports —
logs/curator/run.json+REPORT.mdper cycle (#17307) - Consolidated vs pruned classification — archived skills split with model + heuristic (#17941)
hermes curator status— ranks skills by usage, shows most-used and least-used (#18033)- Unified under
auxiliary.curator— pick the model inhermes model, configure from the dashboard (#17868) - Documentation — dedicated curator feature page on the docs site (#17563)
- Fix: seed defaults on update, create
logs/curator/directory, defer fire import (#17927) - Fix: scan nested archive subdirs in
restore_skill(@0xDevNinja) (#17951) - Fix: use actual skill activity in curator status (@y0shua1ee) (#17953)
- Fix:
skill_managerefuses writes on pinned skills; pinning now blocks curator writes (#17562, #17578) - Fix:
bump_use()wired into skill invocation + preload + skill_view (salvage #17782) (#17932)
Self-improvement loop (background review fork)
- Class-first skill-review prompt — rubric-based grading rather than free-form "should this update" (#16026)
- Active-update bias — prefers updating skills the agent just loaded, handles
references/+templates/sub-files (#17213) - Fork inherits parent's live runtime — provider, model, credentials actually propagate now (#16099)
- Scoped toolsets — review fork restricted to memory + skills (no shell, no web) (#16569)
- Clean shutdown — background review memory providers exit properly (salvage #15289) (#16204)
- Clean context — prior-history tool messages excluded from review summary (salvage #14967) (#15057)
🧩 Skills Ecosystem
Skill integrations — newly bundled or promoted
- ComfyUI v5 — official CLI + REST + hardware-gated local install; moved from optional to built-in (#17610, #17631, #17734, #17612)
- TouchDesigner-MCP — bundled by default (#16753 — @kshitijk4poor), expanded with GLSL, post-FX, audio, geometry references (#16624), 9 new reference docs (#16768 — @SHL0MS)
- Humanizer — strips AI-isms from text (#16787)
- claude-design — HTML artifact skill with disambiguation from other design skills (#16358)
- design-md — Google's DESIGN.md spec skill (#14876)
- airtable — salvaged skill + skill API keys wired into
.env(#15838) (#16291) - pretext — creative browser demos with @chenglou/pretext (#17259)
- spike + sketch — throwaway experiments + HTML mockups, adapted from gsd-build (#17421)
Skills UX
- Install skills from a direct HTTP(S) URL —
hermes skills install <url>(#16323) /reload-skillsslash command (salvage #17670) (#17744)hermes skills listshows enabled/disabled status (#16129)skill_managerefuses writes on pinned skills (#17562)skill_manageedits external_dirs skills in place (salvage #9966) (#17512, #17289)- Fix: inline-shell rendering in
skill_view(#15376) - Fix: exclude
.archive/from skill index walk (salvage #17639) (#17931) - Fix: dedicated docs page per bundled + optional skill (#14929)
- Fix:
google-workspaceshared HERMES_HOME helper + ship deps as optional extra (#15405) - Fix: auto-wrap ASCII-art code blocks in generated skill pages (#16497)
- Point agent at
hermes-agentskill + docs site for Hermes questions (#16535)
🏗️ Core Agent & Architecture
Provider & Model Support
New providers
- GMI Cloud — first-class API-key provider on par with Arcee/Kilocode/Xiaomi (salvage of #11955 — @isaachuangGMICLOUD) (#16663)
- Azure AI Foundry — auto-detection, full wiring (#15845)
- LM Studio — upgraded from custom-endpoint alias to first-class provider: dedicated auth, doctor checks, reasoning transport, live
/models(salvage of #17061 — @kshitijk4poor) (#17102) - MiniMax OAuth — PKCE browser flow with full OAuth integration (salvage #15203) (#17524)
- Tencent Tokenhub — new provider (salvage of #16860) (#16960)
Model catalog
- Remote model catalog manifest — OpenRouter + Nous Portal catalogs pulled from remote manifest so new models show up without a release (#16033)
openai/gpt-5.5andgpt-5.5-proadded to OpenRouter + Nous Portal (#15343)deepseek-v4-proanddeepseek-v4-flashadded (#14934)qwen3.6-plusadded to Alibaba-supported models (#16896)- Gemini free-tier keys blocked at setup with 429 guidance surfacing (#15100)
Model configuration
- Configurable
prompt_caching.cache_ttl— 5m default, 1h opt-in (salvage #12659) (#15065) /fastwhitelist broadened to all OpenAI + Anthropic models (#16883)auxiliary.extra_body.reasoningtranslates into Codex Responses API (#17004)hermes fallbackcommand for managing fallback providers (#16052)
Agent Loop & Conversation
- Native multimodal image routing — based on model vision capability, not provider defaults (#16506)
- Delegate
child_timeout_secondsdefault bumped to 600s (#14809) - Diagnostic dump when subagent times out with 0 API calls (#15105)
- Gateway busts cached agent on compression/context_length config edits (#17008)
- Opt-in runtime-metadata footer on final replies (#17026)
/reload-mcpawareness — rebuild cached agents + prompt-cache cost confirmation (#17729)- Fix: repair CamelCase +
_toolsuffix tool-call emissions (#15124) - Fix: retry on
json.JSONDecodeErrorinstead of treating as local validation error (#15107) - Fix: handle unescaped control chars in
tool_call.arguments(#15356) - Fix: ordering fix in
_copy_reasoning_content_for_api— cross-provider reasoning isolation (@Zjianru) (#15749) - Fix: inject empty
reasoning_contentfor DeepSeek/Kimitool_callsunconditionally (@Zjianru) (#15762) - Fix: persist streamed
reasoning_contenton assistant turns (#16844) (#16892) - Fix: cancel coroutine on timeout so worker thread exits; full traceback on tool failure (#17428)
- Fix: isolate
get_tool_definitionsquiet_mode cache + dedup LCM injection (#17335) (#17889) - Fix: serialize concurrent
hermes_toolsRPC calls fromexecute_code(#17770) (#17894, #17902) - Fix: rename
[SYSTEM:→[IMPORTANT:in all user-injected markers (dodges Azure content filter) (#16114)
Compression
- Retry summary on main model for unknown errors before giving up (#16774)
- Notify users when configured aux model fails even if main-model fallback recovers (#16775)
/compresswrapped in_busy_commandto block input during compression (#15388)- Fix: reserve system + tools headroom when aux binds threshold (#15631)
- Fix: use text-char sum for multimodal token estimation in
_find_tail_cut_by_tokens(#16369)
Session, Memory & State
- Trigram FTS5 index for CJK search, replace LIKE fallback (@alt-glitch) (#16651)
- Index
tool_name+tool_callsin FTS5, with repair + migration (salvages #16866) (#16914) - Checkpoints: auto-prune orphan and stale shadow repos at startup (#16303)
- Memory providers notified on mid-process session_id rotation (#6672) (#17409)
- Fix: quote underscored terms in FTS5 query sanitization (#16915)
- Fix: resolve viking_read 500/412 on file URIs + pseudo-summary URIs (salvage #5886) (#17869)
- Fix: skip external-provider sync on interrupted turns (#15395)
- Fix: close embedded Hindsight async client cleanly (salvage #14605) (#16209)
- Fix: pass session transcript to
shutdown_memory_provideron gateway + CLI (#15165) (#16571) - Fix: write-origin metadata seam (#15346)
- Fix: preserve symlinks during atomic file writes (#16980)
- Refactor: remove
flush_memoriesentirely (#15696)
Auxiliary models
- Fix: surface auxiliary failures in UI (previously silent) (#15324)
- Fix: surface title-gen auxiliary failures instead of silently dropping (#16371)
- Fix: generalize unsupported-parameter detector and harden
max_tokensretry (#15633)
📱 Messaging Platforms (Gateway)
New Platforms
- Microsoft Teams (19th platform) — as a plugin, + xdist collision guard (#17828)
- Yuanbao (Tencent 元宝, 18th platform) — native adapter with text + media delivery (#16298, #17424, #16880)
Pluggable Gateway Platforms
- Drop-in messaging adapters — the gateway is now a plugin host for platforms (salvage of #17664) (#17751)
Telegram
- Chat allowlists for groups and forums (@web3blind) (#15027)
- Send fresh finals for stale preview streams (port openclaw#72038) (#16261)
- Render markdown tables as row-group bullets + prompt hint (#16997)
- Document fallback in centralized audio routing (#17833)
- Native multi-image sending (#17909)
Discord
- Opt-in toolsets + ID injection + tool split + Feishu wiring (salvage #15457, #15458) (#15610, #15613)
- Fix: coerce
limitparameter to int beforemin()call (#16319)
Slack
- Register every gateway command as a native slash (Discord/Telegram parity) (#16164)
strict_mentionconfig — prevents thread auto-engagement (#16193)channel_skill_bindings— bind specific skills to specific Slack channels (#16283)
Signal
- Native formatting — markdown → bodyRanges, reply quotes, reactions (#17417)
- Native multi-image sending (#17909)
Feishu / Mattermost / Email / Signal
- All participate in native multi-image sending (#17909)
Gateway Core
- Centralized audio routing + FLAC support + Telegram doc fallback (#17833)
- Native multi-image sending across Telegram, Discord, Slack, Mattermost, Email, Signal (#17909)
- Make hygiene hard message limit configurable (#17000)
- Opt-in runtime-metadata footer on final replies (#17026)
pre_gateway_dispatchhook — plugins can intercept before dispatch (#15050)pre_approval_request/post_approval_responsehooks (#16776)- Fix: timeouts — guard
load_config()call against runtime exceptions (#16318) - Fix: support passing handler tools via registry (#15613)
🔧 Tool System
Plugin-first architecture
- Pluggable gateway platforms — platforms can ship as plugins (#17751)
- Microsoft Teams as first plugin-shipped platform (#17828)
pre_gateway_dispatchhook (#15050)pre_approval_request+post_approval_responsehooks (#16776)duration_msonpost_tool_call(inspired by Claude Code 2.1.119) (#15429)- Bundled plugins: Spotify (#15174), Google Meet (#16364), Langfuse observability (#16917), hermes-achievements (#17754)
- Page-scoped plugin slots for built-in dashboard pages (#15658)
- Declarative plugin installation for NixOS module (@alt-glitch) (#15953)
Browser
- CDP supervisor — dialog detection + response + cross-origin iframe eval (#14540)
- Auto-spawn local Chromium for LAN/localhost URLs when cloud provider is configured (#16136)
Execute code / Terminal
- Vercel Sandbox backend for
execute_code/ terminal (@kshitijk4poor) (#17445) - Collapse subagent
task_ids to shared container (#16177) - Docker: run container as host user to avoid root-owned bind mounts (@benbarclay) (#17305)
- Fix: safely quote
~/subpaths in wrappedcdcommands (#15394) - Fix: close file descriptor in
LocalEnvironment._update_cwd(#17300) - Fix: SSH — prevent tar from overwriting remote home dir permissions (#17898, #17867)
Image generation
- See Provider section for updates; no new image providers this window.
TTS / Voice
- Pluggable TTS provider registry under
tts.providers.<name>(#17843) - Piper as native local TTS provider (closes #8508) (#17885)
- Voice mode CLI parity in the TUI — VAD loop + TTS + crash forensics (#14810)
- Fix: vision — use HERMES_HOME-based cache dir instead of cwd (#17719)
Cron
- Honor
hermes toolsconfig for the cron platform (#14798) - Per-job
workdir— project-aware cron runs (#15110) context_fromfield — chain cron job outputs (#15606)- Fix: promote
croniterto a core dependency (#17577)
Web search
- Expose
limitforweb_search(#16934)
Maps
- Fix: include seconds in timezone UTC offset output (#16300)
Approvals
- Hardline blocklist for unrecoverable commands (#15878)
- Perf: precompile DANGEROUS_PATTERNS and HARDLINE_PATTERNS (#17206)
ACP
- Advertise and forward image prompts (#18030)
API Server
- POST
/v1/runs/{run_id}/stop(salvage of #15656) (#15842) - Expose run status for external UIs (#17085) (#17458)
Nix
- Declarative plugin installation for NixOS module (@alt-glitch) (#15953)
- Fix: use
--rebuildin fix-lockfiles to bypass cached FOD store paths (#15444) - Fix:
extraPackagesnow actually works via per-user profile (#17047) - Fix: refresh web/ npm-deps hash to unblock main builds (#17174)
- Fix: replace magic-nix-cache with Cachix (#17928)
🖥️ TUI
New features
- LaTeX rendering (@austinpickett) (#17175)
/reload.env hot-reload — ported from the classic CLI (#17286)- Pluggable busy-indicator styles (@OutThisLife, #13610) (#17150)
- Opt-in auto-resume of the most recent session (@OutThisLife) (#17130)
- Expanded light-terminal auto-detection —
HERMES_TUI_THEME+ background hex (@OutThisLife) (#17113) - Delete sessions from
/resumepicker withd(@OutThisLife) (#17668) - Line-by-line scroll on modified mouse wheel (@OutThisLife) (#17669)
- Delete queued message while editing with ctrl-x / cancel with esc (@OutThisLife) (#16707)
- Per-section visibility for the details accordion (@OutThisLife) (#14968)
- Voice mode CLI parity — VAD loop + TTS + crash forensics (#14810)
- Contextual first-touch hints ported to TUI —
/busy,/verbose(#16054) - Mini help menu on
?in the input field (@ethernet8023) (#18043)
Fixes
- Fix: proactive mouse disable on ConPTY +
/mousetoggle command (@kevin-ho, WSL2 ghost-mouse fix) (#15488) - Fix: restore skills search RPC (#15870)
- Perf: cache text measurements across yoga flex re-passes (#14818)
- Perf: stabilize long-session scrolling (#15926)
- Perf: lazily seed virtual history heights (#16523)
- Perf: cut visible cold start ~57% with lazy agent init (#17190)
🖱️ CLI & User Experience
New commands
hermes -z <prompt>— non-interactive one-shot mode (#15702)hermes -zwith--model/--provider/HERMES_INFERENCE_MODEL(#15704)hermes update --checkpreflight flag (#15841)hermes fallbackcommand for managing fallback providers (#16052)/busyslash command for busy input mode (#15382)/busyinput mode 'steer' as a third option (#16279)/btwas alias for/background(#16053)/reload-skillsslash command (salvage #17670) (#17744)- Surface
/queue,/bg,/steerin agent-running placeholder (#16118)
Setup / onboarding
- Auto-reconfigure on existing installs (#15879)
- Contextual first-touch hints for
/busyand/verbose(#16046) - Cost-saving tips from the April 30 tip-of-the-day (#17841)
- Hyperlink startup banner title to the latest GitHub Release (#14945)
Update / backup
- Snapshot pairing data before
git pull(#16383) - Auto-backup HERMES_HOME before
hermes update(opt-in, off by default) (#16539, #16566) - Exclude
checkpoints/from backups (#16572) - Exclude SQLite WAL/SHM/journal sidecars from backups (#16576)
- Installer FHS layout for root installs on Linux (#15608)
- Fix: kill stale dashboards instead of warning (#17832)
- Fix: show correct update status on nix-built hermes (#17550)
Slash-command housekeeping
- Refactor: drop
/provider,/planhandler, and clean up slash registry (#15047) - Refactor: drop
persist_sessionplumbing + fix broken/btwmid-turn bypass (#16075)
OpenClaw migration (for folks coming from OpenClaw)
- Hardened OpenClaw import — plan-first apply, redaction, pre-migration backup (#16911)
- Fix: case-preserving brand rewrite + one-time
~/.openclawresidue banner (#16327) - Fix: resolve
openclawworkspace files fromagents.defaults.workspace(#16879) - Fix: resolve model aliases against real OpenClaw catalog schema (salvage #16778) (#16977)
📊 Web Dashboard
- Models tab — rich per-model analytics (#17745)
- Configure main + auxiliary models from the Models page (#17802)
- Dashboard Chat tab — xterm.js + JSON-RPC sidecar (supersedes #12710 + #13379, @OutThisLife) (#14890)
- Dashboard layout refresh (@austinpickett) (#14899)
--stopand--statusflags on the dashboard CLI (#17840)- Page-scoped plugin slots for built-in pages (#15658)
- Fix: replace all buttons for design system buttons (#17007)
⚡ Performance
- TUI visible cold start cut ~57% via lazy agent init (#17190)
- Lazy-import OpenAI, Anthropic, Firecrawl, account_usage (#17046)
- mtime-cache
load_config()andread_raw_config()(#17041) - Memoize
get_tool_definitions()+ TTL-cachecheck_fnresults (#17098) - Precompile DANGEROUS_PATTERNS and HARDLINE_PATTERNS (#17206)
- Cache Ink text measurements across yoga flex re-passes (#14818)
- Stabilize long-session scrolling (#15926)
- Lazily seed virtual history heights (#16523)
🔒 Security & Reliability
- Secret redaction off by default — stops corrupting patches / API payloads with fake-key substitutions. Opt in via
redaction.enabled: true(#16794) [SYSTEM:→[IMPORTANT:in all user-injected markers (Azure content filter dodge) (#16114)- Hardline blocklist for unrecoverable commands (#15878)
- Canonical
mask_secrethelper; fix status.py DIM drift (#17207) - Sweep expired paste.rs uploads on a real timer (#16431)
- Preserve symlinks during atomic file writes (#16980)
- Probe
/dev/ttyby opening it, not bare existence (#17024)
🐛 Notable Bug Fixes
This window includes 360 fix: PRs. Selected highlights from across the stack:
- Background review fork inherits parent's live runtime — provider/model/creds now propagate correctly (#16099)
- Hindsight configurable
HINDSIGHT_TIMEOUTenv var (#15077) - Tools: normalize numeric entries + clear stale
no_mcpin_save_platform_tools(#15607) - MCP: rewrite
definitionsrefs to$defsin input schemas — closes provider-side 400s - Azure content filter compatibility — renamed
[SYSTEM:markers so Azure's content filter stops flagging them (#16114) - Vision cache uses HERMES_HOME instead of cwd (#17719)
- FTS5 search — tool_name + tool_calls indexing with repair + migration (#16914)
- Streaming reasoning persists on assistant turns (#16892)
- execute_code concurrent RPC serialization (#17770) (#17894, #17902)
- Background reviewer scoped to memory + skills toolsets — no more accidental web/shell escapes (#16569)
- Compression recovery — retry on main before giving up; notify user when aux fails (#16774, #16775)
croniterpromoted to a core dependency (#17577)- Discord tool
limitparameter coerced to int beforemin()call (#16319) - Yuanbao messaging platform entrance fix (#16880)
- ACP advertise and forward image prompts (#18030)
- DeepSeek / Kimi reasoning content isolation across cross-provider histories (@Zjianru) (#15749, #15762)
- Preserve reasoning_content replay on DeepSeek v4 + Kimi/Moonshot thinking (#18045)
The vast majority of the 360 fixes landed in the streaming/compression/tool-calling paths across all providers — DeepSeek, Kimi, Moonshot, GLM, Qwen, MiniMax, Gemini, Anthropic, OpenAI — alongside TUI polish (resize, scroll, sticky-prompt) and gateway platform-specific edge cases.
🧪 Testing & CI
- Hermetic test parity (
scripts/run_tests.sh) held across this window - Microsoft Teams xdist collision guard — prevents worker collisions when Teams platform tests run in parallel (#17828)
- Chore: remove unused imports and dead locals (ruff F401, F841) (#17010)
📚 Documentation
- Curator feature page added to docs site (#17563)
- Document pin also blocking
skill_managewrites (#17578) - Direct-URL skill install documented across features, reference, guide, and
hermes-agentskill (#16355) - Hooks tutorial — build a BOOT.md startup checklist (replaces the removed built-in hook) (#17202)
- ComfyUI docs: ask local vs cloud FIRST before hardware check (#17612)
- Obliteratus skill: link YouTube video guide in SKILL.md (#15808)
- Per-skill docs pages generated for bundled + optional skills; ASCII art code blocks auto-wrapped (#14929, #16497)
⚖️ Removed / Reverted
- Kanban multi-profile collaboration board — landed in #16081, reverted in (#16098) while the design is reworked
- computer-use cua-driver — 3 preparatory PRs landed then were reverted in (#16927)
- BOOT.md built-in hook removed (#17093); the hooks tutorial (#17202) shows how to build the same workflow yourself with a shell hook
/provider+/planslash commands dropped (#15047)flush_memoriesremoved entirely (#15696)
👥 Contributors
Core
- @teknium1 (Teknium)
Top Community Contributors (by merged PR count since v0.11.0)
- @OutThisLife (Brooklyn) — 52 PRs · TUI — light-terminal detection + pluggable busy styles + auto-resume + session-delete from /resume + mouse-wheel scrolling + xterm.js dashboard Chat tab + cold-start cut + accordion polish
- @kshitijk4poor — 12 PRs · LM Studio first-class provider (salvage), Vercel Sandbox backend, GMI Cloud salvage, bundled-by-default touchdesigner-mcp, many tool-call / reasoning fixes
- @helix4u — 10 PRs · MCP schema robustness, assorted stability fixes
- @alt-glitch — 8 PRs · trigram FTS5 CJK search, declarative Nix plugin install, matrix/feishu hints and fixes
- @ethernet8023 — 4 PRs
- @austinpickett — 4 PRs · LaTeX rendering in TUI, dashboard layout refresh
- @benbarclay — 3 PRs · Docker run-as-host-user so bind mounts don't get root-owned
- @vominh1919 — 2 PRs
- @stephenschoettler — 2 PRs
- @kevin-ho — ConPTY mouse-injection fix (#15488)
- @Zjianru — cross-provider reasoning_content isolation + DeepSeek/Kimi empty-reasoning injection (#15749, #15762)
- @web3blind — Telegram chat allowlists for groups and forums (#15027)
- @SHL0MS — 9 new TouchDesigner-MCP reference docs (#16768)
- @0xDevNinja — curator
restore_skillnested-archive fix (#17951) - @y0shua1ee — curator
useactivity fix (#17953)
Also contributing
Salvaged or co-authored work from @isaachuangGMICLOUD (GMI Cloud), earlier upstream PRs from the original author of each salvage chain, and a long tail of one-shot fixes, documentation nudges, and skill contributions from the community.
All Contributors (alphabetical, excluding @teknium1)
@0xbyt4, @0xharryriddle, @0xDevNinja, @0z1-ghb, @5park1e, @A-FdL-Prog, @aj-nt, @akhater, @alblez, @alexg0bot,
@alexzhu0, @AllardQuek, @alt-glitch, @amanning3390, @amanuel2, @AndreKurait, @andrewhosf, @Andy283, @andyylin,
@angel12, @AntAISecurityLab, @ash, @austinpickett, @badgerbees, @BadTechBandit, @Bartok9, @beenherebefore,
@beesrsj2500, @BeliefanX, @benbarclay, @benjaminsehl, @BlackishGreen33, @bloodcarter, @BlueBirdBack,
@briandevans, @brooklynnicholson, @bsgdigital, @buray, @bwjoke, @camaragon, @cdanis, @cgarwood82,
@charles-brooks, @chen1749144759, @chengoak, @ching-kaching, @Contentment003111, @crayfish-ai, @CruxExperts,
@cyclingwithelephants, @dandaka, @danklynn, @ddupont808, @dhabibi, @difujia, @dimitrovi, @dlkakbs,
@dontcallmejames, @EKKOLearnAI, @emozilla, @ericnicolaides, @Erosika, @ethernet8023, @exiao, @Feranmi10,
@flobo3, @foxion37, @georgeglessner, @georgex8001, @ghostmfr, @H-Ali13381, @HangGlidersRule, @harryplusplus,
@haru398801, @heathley, @hejuntt1014, @hekaru-agent, @helix4u, @Heltman, @HenkDz, @heyitsaamir, @hharry11,
@hhhonzik, @hhuang91, @HiddenPuppy, @htsh, @iamagenius00, @in-liberty420, @innocarpe, @irispillars, @iRonin,
@isaachuangGMICLOUD, @Ito-69, @j3ffffff, @jackjin1997, @jakubkrcmar, @Jason2031, @JayGwod, @jerome-benoit,
@johnncenae, @Kailigithub, @keiravoss94, @kevin-ho, @knockyai, @konsisumer, @kshitijk4poor, @kunlabs, @l0hde,
@Leihb, @leoneparise, @LeonSGP43, @liizfq, @liuhao1024, @loongzhao, @lsdsjy, @luyao618, @ma-pony, @Magaav,
@MagicRay1217, @math0r-be, @MattMaximo, @maxims-oss, @MaxyMoos, @maymuneth, @mcndjxlefnd, @memosr,
@MestreY0d4-Uninter, @mewwts, @Mirac1eSky, @MorAlekss, @mrhwick, @mrunmayee17, @mssteuer, @Nanako0129,
@nazirulhafiy, @Nerijusas, @Nicecsh, @nicoloboschi, @nightq, @ningfangbin, @octo-patch, @Octopus,
@OutThisLife, @Paperclip, @pein892, @perlowja, @prasadus92, @qike-ms, @qiyin-code, @Readon, @ReginaldasR,
@revaraver, @rfilgueiras, @rmoen, @romanornr, @rugvedS07, @rylena, @samrusani, @Sanjays2402, @sasha-id,
@Satoshi-agi, @scheidti, @scotttrinh, @season179, @SeeYangZhi, @sgaofen, @shamork, @shannonsands, @SHL0MS,
@simbam99, @Societus, @socrates1024, @Sonoyunchu, @sprmn24, @stephenschoettler, @tangyuanjc, @TechPrototyper,
@tekgnosis-net, @ThomassJonax, @tmimmanuel, @tochukwuada, @Tosko4, @Tranquil-Flow, @twozle, @txbxxx,
@UgwujaGeorge, @Versun, @vlwkaos, @voidborne-d, @vominh1919, @Wang-tianhao, @Wangshengyang2004, @web3blind,
@westers, @Wysie, @xandersbell, @xiahu88988, @XieNBi, @xinbenlv, @xnbi, @y0shua1ee, @yatesjalex, @yes999zc,
@yeyitech, @Yoimex, @YueLich, @Yukipukii1, @zhiyanliu, @zicochaos, @Zjianru, @zkl2333, @zons-zhaozhy,
@ztexydt-cqh.
Also: @Siddharth Balyan, @YuShu.
Full Changelog: v2026.4.23...v2026.4.30
- Ink-based TUI rewrite with live streaming and OSC-52 clipboard support
- Pluggable transport layer with native AWS Bedrock support
- Five new inference paths: NVIDIA NIM, Arcee AI, Step Plan, Google Gemini, Vercel ai-gateway
Full changelog
Hermes Agent v0.11.0 (v2026.4.23)
Release Date: April 23, 2026
Since v0.9.0: 1,556 commits · 761 merged PRs · 1,314 files changed · 224,174 insertions · 29 community contributors (290 including co-authors)
The Interface release — a full React/Ink rewrite of the interactive CLI, a pluggable transport architecture underneath every provider, native AWS Bedrock support, five new inference paths, a 17th messaging platform (QQBot), a dramatically expanded plugin surface, and GPT-5.5 via Codex OAuth.
This release also folds in all the highlights deferred from v0.10.0 (which shipped only the Nous Tool Gateway) — so it covers roughly two weeks of work across the whole stack.
✨ Highlights
-
New Ink-based TUI —
hermes --tuiis now a full React/Ink rewrite of the interactive CLI, with a Python JSON-RPC backend (tui_gateway). Sticky composer, live streaming with OSC-52 clipboard support, stable picker keys, status bar with per-turn stopwatch and git branch,/clearconfirm, light-theme preset, and a subagent spawn observability overlay. ~310 commits toui-tui/+tui_gateway/. (@OutThisLife + Teknium) -
Transport ABC + Native AWS Bedrock — Format conversion and HTTP transport were extracted from
run_agent.pyinto a pluggableagent/transports/layer.AnthropicTransport,ChatCompletionsTransport,ResponsesApiTransport, andBedrockTransporteach own their own format conversion and API shape. Native AWS Bedrock support via the Converse API ships on top of the new abstraction. (#10549, #13347, #13366, #13430, #13805, #13814 — @kshitijk4poor + Teknium) -
Five new inference paths — Native NVIDIA NIM (#11774), Arcee AI (#9276), Step Plan (#13893), Google Gemini CLI OAuth (#11270), and Vercel ai-gateway with pricing + dynamic discovery (#13223 — @jerilynzheng). Plus Gemini routed through the native AI Studio API for better performance (#12674).
-
GPT-5.5 over Codex OAuth — OpenAI's new GPT-5.5 reasoning model is now available through your ChatGPT Codex OAuth, with live model discovery wired into the model picker so new OpenAI releases show up without catalog updates. (#14720)
-
QQBot — 17th supported platform — Native QQBot adapter via QQ Official API v2, with QR scan-to-configure setup wizard, streaming cursor, emoji reactions, and DM/group policy gating that matches WeCom/Weixin parity. (#9364, #11831)
-
Plugin surface expanded — Plugins can now register slash commands (
register_command), dispatch tools directly (dispatch_tool), block tool execution from hooks (pre_tool_callcan veto), rewrite tool results (transform_tool_result), transform terminal output (transform_terminal_output), ship image_gen backends, and add custom dashboard tabs. The bundled disk-cleanup plugin is opt-in by default as a reference implementation. (#9377, #10626, #10763, #10951, #12929, #12944, #12972, #13799, #14175) -
/steer— mid-run agent nudges —/steer <prompt>injects a note that the running agent sees after its next tool call, without interrupting the turn or breaking prompt cache. For when you want to course-correct an agent in-flight. (#12116) -
Shell hooks — Wire any shell script as a Hermes lifecycle hook (pre_tool_call, post_tool_call, on_session_start, etc.) without writing a Python plugin. (#13296)
-
Webhook direct-delivery mode — Webhook subscriptions can now forward payloads straight to a platform chat without going through the agent — zero-LLM push notifications for alerting, uptime checks, and event streams. (#12473)
-
Smarter delegation — Subagents now have an explicit
orchestratorrole that can spawn their own workers, with configurablemax_spawn_depth(default flat). Concurrent sibling subagents share filesystem state through a file-coordination layer so they don't clobber each other's edits. (#13691, #13718) -
Auxiliary models — configurable UI + main-model-first —
hermes modelhas a dedicated "Configure auxiliary models" screen for per-task overrides (compression, vision, session_search, title_generation).autorouting now defaults to the main model for side tasks across all users (previously aggregator users were silently routed to a cheap provider-side default). (#11891, #11900) -
Dashboard plugin system + live theme switching — The web dashboard is now extensible. Third-party plugins can add custom tabs, widgets, and views without forking. Paired with a live-switching theme system — themes now control colors, fonts, layout, and density — so users can hot-swap the dashboard look without a reload. Same theming discipline the CLI has, now on the web. (#10951, #10687, #14725)
-
Dashboard polish — i18n (English + Chinese), react-router sidebar layout, mobile-responsive, Vercel deployment, real per-session API call tracking, and one-click update + gateway restart buttons. (#9228, #9370, #9453, #10686, #13526, #14004 — @austinpickett + @DeployFaith + Teknium)
🏗️ Core Agent & Architecture
Transport Layer (NEW)
- Transport ABC abstracts format conversion and HTTP transport from
run_agent.pyintoagent/transports/(#13347) - AnthropicTransport — Anthropic Messages API path (#13366, @kshitijk4poor)
- ChatCompletionsTransport — default path for OpenAI-compatible providers (#13805)
- ResponsesApiTransport — OpenAI Responses API + Codex build_kwargs wiring (#13430, @kshitijk4poor)
- BedrockTransport — AWS Bedrock Converse API transport (#13814)
Provider & Model Support
- Native AWS Bedrock provider via Converse API (#10549)
- NVIDIA NIM native provider (salvage of #11703) (#11774)
- Arcee AI direct provider (#9276)
- Step Plan provider (salvage #6005) (#13893, @kshitijk4poor)
- Google Gemini CLI OAuth inference provider (#11270)
- Vercel ai-gateway with pricing, attribution, and dynamic discovery (#13223, @jerilynzheng)
- GPT-5.5 over Codex OAuth with live model discovery in the picker (#14720)
- Gemini routed through native AI Studio API (#12674)
- xAI Grok upgraded to Responses API (#10783)
- Ollama improvements — Cloud provider support, GLM continuation,
think=falsecontrol, surrogate sanitization,/v1hint (#10782) - Kimi K2.6 across OpenRouter, Nous Portal, native Kimi, and HuggingFace (#13148, #13152, #13169)
- Kimi K2.5 promoted to first position in all model suggestion lists (#11745, @kshitijk4poor)
- Xiaomi MiMo v2.5-pro + v2.5 on OpenRouter, Nous Portal, and native (#14184, #14635, @kshitijk4poor)
- GLM-5V-Turbo for coding plan (#9907)
- Claude Opus 4.7 in Nous Portal catalog (#11398)
- OpenRouter elephant-alpha in curated lists (#9378)
- OpenCode-Go — Kimi K2.6 and Qwen3.5/3.6 Plus in curated catalog (#13429)
- minimax/minimax-m2.5:free in OpenRouter catalog (#13836)
/modelmerges models.dev entries for lesser-loved providers (#14221)- Per-provider + per-model
request_timeout_secondsconfig (#12652) - Configurable API retry count via
agent.api_max_retries(#14730) - ctx_size context length key for Lemonade server (salvage #8536) (#14215)
- Custom provider display name prompt (#9420)
- Recommendation badges on tool provider selection (#9929)
- Fix: correct GPT-5 family context lengths in fallback defaults (#9309)
- Fix: clamp
minimalreasoning effort tolowon Responses API (#9429) - Fix: strip reasoning item IDs from Responses API input when
store=False(#10217) - Fix: OpenViking correct account default + commit session on
/newand compress (#10463) - Fix: Kimi
/codingthinking block survival + empty reasoning_content + block ordering (multiple PRs) - Fix: don't send Anthropic thinking to api.kimi.com/coding (#13826)
- Fix: send
max_tokens,reasoning_effort, andthinkingfor Kimi/Moonshot - Fix: stream reasoning content through OpenAI-compatible providers that emit it
Agent Loop & Conversation
/steer <prompt>— mid-run agent nudges after next tool call (#12116)- Orchestrator role + configurable spawn depth for
delegate_task(default flat) (#13691) - Cross-agent file state coordination for concurrent subagents (#13718)
- Compressor smart collapse, dedup, anti-thrashing, template upgrade, hardening (#10088)
- Compression summaries respect the conversation's language (#12556)
- Compression model falls back to main model on permanent 503/404 (#10093)
- Auto-continue interrupted agent work after gateway restart (#9934)
- Activity heartbeats prevent false gateway inactivity timeouts (#10501)
- Auxiliary models UI — dedicated screen for per-task overrides (#11891)
- Auxiliary auto routing defaults to main model for all users (#11900)
- PLATFORM_HINTS for Matrix, Mattermost, Feishu (#14428, @alt-glitch)
- Fix: reset retry counters after compression; stop poisoning conversation history (#10055)
- Fix: break compression-exhaustion infinite loop and auto-reset session (#10063)
- Fix: stale agent timeout, uv venv detection, empty response after tools (#10065)
- Fix: prevent premature loop exit when weak models return empty after substantive tool calls (#10472)
- Fix: preserve pre-start terminal interrupts (#10504)
- Fix: improve interrupt responsiveness during concurrent tool execution (#10935)
- Fix: word-wrap spinner, interruptable agent join, and delegate_task interrupt (#10940)
- Fix:
/stopno longer resets the session (#9224) - Fix: honor interrupts during MCP tool waits (#9382, @helix4u)
- Fix: break stuck session resume loops after repeated restarts (#9941)
- Fix: empty response nudge crash + placeholder leak to cron targets (#11021)
- Fix: streaming cursor sanitization to prevent message truncation (multiple PRs)
- Fix: resolve
context_lengthfor plugin context engines (#9238)
Session & Memory
- Auto-prune old sessions + VACUUM state.db at startup (#13861)
- Honcho overhaul — context injection, 5-tool surface, cost safety, session isolation (#10619)
- Hindsight richer session-scoped retain metadata (salvage of #6290) (#13987)
- Fix: deduplicate memory provider tools to prevent 400 on strict providers (#10511)
- Fix: discover user-installed memory providers from
$HERMES_HOME/plugins/(#10529) - Fix: add
on_memory_writebridge to sequential tool execution path (#10507) - Fix: preserve
session_idacrossprevious_response_idchains in/v1/responses(#10059)
🖥️ New Ink-based TUI
A full React/Ink rewrite of the interactive CLI — invoked via hermes --tui or HERMES_TUI=1. Shipped across ~310 commits to ui-tui/ and tui_gateway/.
TUI Foundations
- New TUI based on Ink + Python JSON-RPC backend
- Prettier + ESLint + vitest tooling for
ui-tui/ - Entry split between
src/entry.tsx(TTY gate) andsrc/app.tsx(state machine) - Persistent
_SlashWorkersubprocess for slash command dispatch
UX & Features
- Stable picker keys, /clear confirm, light-theme preset (#12312, @OutThisLife)
- Git branch in status bar cwd label (#12305, @OutThisLife)
- Per-turn elapsed stopwatch in FaceTicker + done-in sys line (#13105, @OutThisLife)
- Subagent spawn observability overlay (#14045, @OutThisLife)
- Per-prompt elapsed stopwatch in status bar (#12948)
- Sticky composer that freezes during scroll
- OSC-52 clipboard support for copy across SSH sessions
- Virtualized history rendering for performance
- Slash command autocomplete via
complete.slashRPC - Path autocomplete via
complete.pathRPC - Dozens of resize/ghosting/sticky-prompt fixes landed through the week
Structural Refactors
- Decomposed
app.tsxintoapp/event-handler,app/slash-handler,app/stores,app/hooks(#14640 and surrounding) - Component split:
branding.tsx,markdown.tsx,prompts.tsx,sessionPicker.tsx,messageLine.tsx,thinking.tsx,maskedPrompt.tsx - Hook split:
useCompletion,useInputHistory,useQueue,useVirtualHistory
📱 Messaging Platforms (Gateway)
New Platforms
- QQBot (17th platform) — QQ Official API v2 adapter with QR setup, streaming, package split (#9364, #11831)
Telegram
- Dedicated
TELEGRAM_PROXYenv var + config.yaml proxy support (closes #9414, #6530, #9074, #7786) (#10681) ignored_threadsconfig for Telegram groups (#9530)- Config option to disable link previews (closes #8728) (#10610)
- Auto-wrap markdown tables in code blocks (#11794)
- Fix: prevent duplicate replies when stream task is cancelled (#9319)
- Fix: prevent streaming cursor (▉) from appearing as standalone messages (#9538)
- Fix: retry transient tool sends + cold-boot budget (#10947)
- Fix: Markdown special char escaping in
send_exec_approval - Fix: parentheses in URLs during MarkdownV2 link conversion
- Fix: Unicode dash normalization in model switch (closes iOS smart-punctuation issue)
- Many platform hint / streaming / session-key fixes
Discord
- Forum channel support (salvage of #10145 + media + polish) (#11920)
DISCORD_ALLOWED_ROLESfor role-based access control (#11608)- Config option to disable slash commands (salvage #13130) (#14315)
- Native
send_animationfor inline GIF playback (#10283) send_messageDiscord media attachments (#10246)/skillcommand group with category subcommands (#9909)- Extract reply text from message references (#9781)
Feishu
- Intelligent reply on document comments with 3-tier access control (#11898)
- Show processing state via reactions on user messages (#12927)
- Preserve @mention context for agent consumption (salvage #13874) (#14167)
DingTalk
require_mention+allowed_usersgating (parity with Slack/Telegram/Discord) (#11564)- QR-code device-flow authorization for setup wizard (#11574)
- AI Cards streaming, emoji reactions, and media handling (salvage of #10985) (#11910)
send_voice— native audio message delivery (#13002)dm_policyandgroup_policyparity with WeCom/Weixin/QQ adapters (#13151)
WeCom / Weixin
- WeCom QR-scan bot creation + interactive setup wizard (salvage #13923) (#13961)
Signal
- Media delivery support via
send_message(#13178)
Slack
- Per-thread sessions for DMs by default (#10987)
BlueBubbles (iMessage)
- Group chat session separation, webhook registration & auth fixes (#9806)
Gateway Core
- Gateway proxy mode — forward messages to a remote API server (#9787)
- Per-channel ephemeral prompts (Discord, Telegram, Slack, Mattermost) (#10564)
- Surface plugin slash commands natively on all platforms + decision-capable command hook (#14175)
- Support document/archive extensions in MEDIA: tag extraction (salvage #8255) (#14307)
- Recognize
.pdfin MEDIA: tag extraction (#13683) --allflag forgateway startandrestart(#10043)- Notify active sessions on gateway shutdown + update health check (#9850)
- Block agent from self-destructing the gateway via terminal (closes #6666) (#9895)
- Fix: suppress duplicate replies on interrupt and streaming flood control (#10235)
- Fix: close temporary agents after one-off tasks (#11028, @kshitijk4poor)
- Fix: busy-session ack when user messages during active agent run (#10068)
- Fix: route watch-pattern notifications to the originating session (#10460)
- Fix: preserve notify context in executor threads (#10921, @kshitijk4poor)
- Fix: avoid duplicate replies after interrupted long tasks (#11018)
- Fix: unlink stale PID + lock files on cleanup
- Fix: force-unlink stale PID file after
--replacetakeover
🔧 Tool System
Plugin Surface (major expansion)
register_command()— plugins can now add slash commands (#10626)dispatch_tool()— plugins can invoke tools from their code (#10763)pre_tool_callblocking — plugins can veto tool execution (#9377)transform_tool_result— plugins rewrite tool results generically (#12972)transform_terminal_output— plugins rewrite terminal tool output (#12929)- Namespaced skill registration for plugin skill bundles (#9786)
- Opt-in-by-default + bundled disk-cleanup plugin (salvage #12212) (#12944)
- Pluggable
image_genbackends + OpenAI provider (#13799) openai-codeximage_gen plugin (gpt-image-2 via Codex OAuth) (#14317)- Shell hooks — wire shell scripts as hook callbacks (#13296)
Browser
browser_cdpraw DevTools Protocol passthrough (#12369)- Camofox hardening + connection stability across the window
Execute Code
- Project/strict execution modes (default: project) (#11971)
Image Generation
- Multi-model FAL support with picker in
hermes tools(#11265) - Recraft V3 → V4 Pro, Nano Banana → Pro upgrades (#11406)
- GPT Image 2 in FAL catalog (#13677)
- xAI image generation provider (grok-imagine-image) (#14765)
TTS / STT / Voice
- Google Gemini TTS provider (#11229)
- xAI Grok STT provider (#14473)
- xAI TTS (shipped with Responses API upgrade) (#10783)
- KittenTTS local provider (salvage of #2109) (#13395)
- CLI record beep toggle (#13247, @helix4u)
Webhook / Cron
- Webhook direct-delivery mode — zero-LLM push notifications (#12473)
- Cron
wakeAgentgate — scripts can skip the agent entirely (#12373) - Cron per-job
enabled_toolsets— cap token overhead + cost per job (#14767)
Delegate
- Orchestrator role + configurable spawn depth (default flat) (#13691)
- Cross-agent file state coordination (#13718)
File / Patch
patch— "did you mean?" feedback when patch fails to match (#13435)
API Server
- Stream
/v1/responsesSSE tool events (salvage #9779) (#10049) - Inline image inputs on
/v1/chat/completionsand/v1/responses(#12969)
Docker / Podman
- Entry-level Podman support —
find_docker()+ rootless entrypoint (#10066) - Add docker-cli to Docker image (salvage #10096) (#14232)
- File-sync back to host on teardown (salvage of #8189 + hardening) (#11291)
MCP
- 12 MCP improvements across the window (status, timeout handling, tool-call forwarding, etc.)
🧩 Skills Ecosystem
Skill System
- Namespaced skill registration for plugin bundles (#9786)
hermes skills resetto un-stick bundled skills (#11468)- Skills guard opt-in —
config.skills.guard_agent_created(default off) (#14557) - Bundled skill scripts runnable out of the box (#13384)
xitterreplaced withxurl— the official X API CLI (#12303)- MiniMax-AI/cli as default skill tap (salvage #7501) (#14493)
- Fuzzy
@file completions + mtime sorting (#9467)
New Skills
- concept-diagrams (salvage of #11045, @v1k22) (#11363)
- architecture-diagram (Cocoon AI port) (#9906)
- pixel-art with hardware palettes and video animation (#12663, #12725)
- baoyu-comic (#13257, @JimLiu)
- baoyu-infographic — 21 layouts × 21 styles (salvage #9901) (#12254)
- page-agent — embed Alibaba's in-page GUI agent in your webapp (#13976)
- fitness-nutrition optional skill + optional env var support (#9355)
- drug-discovery — ChEMBL, PubChem, OpenFDA, ADMET (#9443)
- touchdesigner-mcp (salvage of #10081) (#12298)
- adversarial-ux-test optional skill (salvage of #2494, @omnissiah-comelse) (#13425)
- maps — added
guest_house,camp_site, and dual-key bakery lookup (#13398) - llm-wiki — port provenance markers, source hashing, and quality signals (#13700)
📊 Web Dashboard
- i18n (English + Chinese) language switcher (#9453)
- Live-switching theme system (#10687)
- Dashboard plugin system — extend the web UI with custom tabs (#10951)
- react-router, sidebar layout, sticky header, dropdown component (#9370, @austinpickett)
- Responsive for mobile (#9228, @DeployFaith)
- Vercel deployment (#10686, #11061, @austinpickett)
- Context window config support (#9357)
- HTTP health probe for cross-container gateway detection (#9894)
- Update + restart gateway buttons (#13526, @austinpickett)
- Real API call count per session (salvages #10140) (#14004)
🖱️ CLI & User Experience
- Dynamic shell completion for bash, zsh, and fish (#9785)
- Light-mode skins + skin-aware completion menus (#9461)
- Numbered keyboard shortcuts on approval and clarify prompts (#13416)
- Markdown stripping, compact multiline previews, external editor (#12934)
--ignore-user-configand--ignore-rulesflags (port codex#18646) (#14277)- Account limits section in
/usage(#13428) - Doctor: Command Installation check for
hermesbin symlink (#10112) - ESC cancels secret/sudo prompts, clearer skip messaging (#9902)
- Fix: agent-facing text uses
display_hermes_home()instead of hardcoded~/.hermes(#10285) - Fix: enforce
config.yamlas sole CWD source + deprecate.envCWD vars + addhermes memory reset(#11029)
🔒 Security & Reliability
- Global toggle to allow private/internal URL resolution (#14166)
- Block agent from self-destructing the gateway via terminal (closes #6666) (#9895)
- Telegram callback authorization on update prompts (#10536)
- SECURITY.md added (#10532, @I3eg1nner)
- Warn about legacy hermes.service units during
hermes update(#11918) - Complete ASCII-locale UnicodeEncodeError recovery for
api_messages/reasoning_content(closes #6843) (#10537) - Prevent stale
os.environleak afterclear_session_vars(#10527) - Prevent agent hang when backgrounding processes via terminal tool (#10584)
- Many smaller session-resume, interrupt, streaming, and memory-race fixes throughout the window
🐛 Notable Bug Fixes
The fix: category in this window covers 482 PRs. Highlights:
- Streaming cursor artifacts filtered from Matrix, Telegram, WhatsApp, Discord (multiple PRs)
<think>and<thought>blocks filtered from gateway stream consumers (#9408)- Gateway display.streaming root-config override regression (#9799)
- Context
session_searchcoerces limit to int (prevents TypeError) (#10522) - Memory tool stays available when
fcntlis unavailable (Windows) (#9783) - Trajectory compressor credentials load from
HERMES_HOME/.env(#9632, @Dusk1e) @_context_completionsno longer crashes on@mention (#9683, @kshitijk4poor)- Group session
user_idno longer treated asthread_idin shutdown notifications (#10546) - Telegram
platform_hint— markdown is supported (closes #8261) (#10612) - Doctor checks for Kimi China credentials fixed
- Streaming: don't suppress final response when commentary message is sent (#10540)
- Rapid Telegram follow-ups no longer get cut off
🧪 Testing & CI
- Contributor attribution CI check on PRs (#9376)
- Hermetic test parity (
scripts/run_tests.sh) held across this window - Test count stabilized post-Transport refactor; CI matrix held green through the transport rollout
📚 Documentation
- Atropos + wandb links in user guide
- ACP / VS Code / Zed / JetBrains integration docs refresh
- Webhook subscription docs updated for direct-delivery mode
- Plugin author guide expanded for new hooks (
register_command,dispatch_tool,transform_tool_result) - Transport layer developer guide added
- Website removed Discussions link from README
👥 Contributors
Core
- @teknium1 (Teknium)
Top Community Contributors (by merged PR count)
- @kshitijk4poor — 49 PRs · Transport refactor (AnthropicTransport, ResponsesApiTransport), Step Plan provider, Xiaomi MiMo v2.5 support, numerous gateway fixes, promoted Kimi K2.5, @ mention crash fix
- @OutThisLife (Brooklyn) — 31 PRs · TUI polish, git branch in status bar, per-turn stopwatch, stable picker keys,
/clearconfirm, light-theme preset, subagent spawn observability overlay - @helix4u — 11 PRs · Voice CLI record beep, MCP tool interrupt handling, assorted stability fixes
- @austinpickett — 8 PRs · Dashboard react-router + sidebar + sticky header + dropdown, Vercel deployment, update + restart buttons
- @alt-glitch — 8 PRs · PLATFORM_HINTS for Matrix/Mattermost/Feishu, Matrix fixes
- @ethernet8023 — 3 PRs
- @benbarclay — 3 PRs
- @Aslaaen — 2 PRs
Also contributing
@jerilynzheng (ai-gateway pricing), @JimLiu (baoyu-comic skill), @Dusk1e (trajectory compressor credentials), @DeployFaith (mobile-responsive dashboard), @LeonSGP43, @v1k22 (concept-diagrams), @omnissiah-comelse (adversarial-ux-test), @coekfung (Telegram MarkdownV2 expandable blockquotes), @liftaris (TUI provider resolution), @arihantsethia (skill analytics dashboard), @topcheer + @xing8star (QQBot foundation), @kovyrin, @I3eg1nner (SECURITY.md), @PeterBerthelsen, @lengxii, @priveperfumes, @sjz-ks, @cuyua9, @Disaster-Terminator, @leozeli, @LehaoLin, @trevthefoolish, @loongfay, @MrNiceRicee, @WideLee, @bluefishs, @malaiwah, @bobashopcashier, @dsocolobsky, @iamagenius00, @IAvecilla, @aniruddhaadak80, @Es1la, @asheriif, @walli, @jquesnelle (original Tool Gateway work).
All Contributors (alphabetical)
@0xyg3n, @10ishq, @A-afflatus, @Abnertheforeman, @admin28980, @adybag14-cyber, @akhater, @alexzhu0,
@AllardQuek, @alt-glitch, @aniruddhaadak80, @anna-oake, @anniesurla, @anthhub, @areu01or00, @arihantsethia,
@arthurbr11, @asheriif, @Aslaaen, @Asunfly, @austinpickett, @AviArora02-commits, @AxDSan, @azhengbot, @Bartok9,
@benbarclay, @bennytimz, @bernylinville, @bingo906, @binhnt92, @bkadish, @bluefishs, @bobashopcashier,
@brantzh6, @BrennerSpear, @brianclemens, @briandevans, @brooklynnicholson, @bugkill3r, @buray, @burtenshaw,
@cdanis, @cgarwood82, @ChimingLiu, @chongweiliu, @christopherwoodall, @coekfung, @cola-runner, @corazzione,
@counterposition, @cresslank, @cuyua9, @cypres0099, @danieldoderlein, @davetist, @davidvv, @DeployFaith,
@Dev-Mriganka, @devorun, @dieutx, @Disaster-Terminator, @dodo-reach, @draix, @DrStrangerUJN, @dsocolobsky,
@Dusk1e, @dyxushuai, @elkimek, @elmatadorgh, @emozilla, @entropidelic, @Erosika, @erosika, @Es1la, @etcircle,
@etherman-os, @ethernet8023, @fancydirty, @farion1231, @fatinghenji, @Fatty911, @fengtianyu88, @Feranmi10,
@flobo3, @francip, @fuleinist, @g-guthrie, @GenKoKo, @gianfrancopiana, @gnanam1990, @GuyCui, @haileymarshall,
@haimu0x, @handsdiff, @hansnow, @hedgeho9X, @helix4u, @hengm3467, @HenkDz, @heykb, @hharry11, @HiddenPuppy,
@honghua, @houko, @houziershi, @hsy5571616, @huangke19, @hxp-plus, @Hypn0sis, @I3eg1nner, @iacker,
@iamagenius00, @IAvecilla, @iborazzi, @Ifkellx, @ifrederico, @imink, @isaachuangGMICLOUD, @ismell0992-afk,
@j0sephz, @Jaaneek, @jackjin1997, @JackTheGit, @jaffarkeikei, @jerilynzheng, @JiaDe-Wu, @Jiawen-lee, @JimLiu,
@jinzheng8115, @jneeee, @jplew, @jquesnelle, @Julientalbot, @Junass1, @jvcl, @kagura-agent, @keifergu,
@kevinskysunny, @keyuyuan, @konsisumer, @kovyrin, @kshitijk4poor, @leeyang1990, @LehaoLin, @lengxii,
@LeonSGP43, @leozeli, @li0near, @liftaris, @Lind3ey, @Linux2010, @liujinkun2025, @LLQWQ, @Llugaes, @lmoncany,
@longsizhuo, @lrawnsley, @Lubrsy706, @lumenradley, @luyao618, @lvnilesh, @LVT382009, @m0n5t3r, @Magaav,
@MagicRay1217, @malaiwah, @manuelschipper, @Marvae, @MassiveMassimo, @mavrickdeveloper, @maxchernin, @memosr,
@meng93, @mengjian-github, @MestreY0d4-Uninter, @Mibayy, @MikeFac, @mikewaters, @milkoor, @minorgod,
@MrNiceRicee, @ms-alan, @mvanhorn, @n-WN, @N0nb0at, @Nan93, @NIDNASSER-Abdelmajid, @nish3451, @niyoh120,
@nocoo, @nosleepcassette, @NousResearch, @ogzerber, @omnissiah-comelse, @Only-Code-A, @opriz, @OwenYWT, @pedh,
@pefontana, @PeterBerthelsen, @phpoh, @pinion05, @plgonzalezrx8, @pradeep7127, @priveperfumes,
@projectadmin-dev, @PStarH, @rnijhara, @Roy-oss1, @roytian1217, @RucchiZ, @Ruzzgar, @RyanLee-Dev, @Salt-555,
@Sanjays2402, @sgaofen, @sharziki, @shenuu, @shin4, @SHL0MS, @shushuzn, @sicnuyudidi, @simon-gtcl,
@simon-marcus, @sirEven, @Sisyphus, @sjz-ks, @snreynolds, @Societus, @Somme4096, @sontianye, @sprmn24,
@StefanIsMe, @stephenschoettler, @Swift42, @taeng0204, @taeuk178, @tannerfokkens-maker, @TaroballzChen,
@ten-ltw, @teyrebaz33, @Tianworld, @topcheer, @Tranquil-Flow, @trevthefoolish, @TroyMitchell911, @UNLINEARITY,
@v1k22, @vivganes, @vominh1919, @vrinek, @VTRiot, @WadydX, @walli, @wenhao7, @WhiteWorld, @WideLee, @wujhsu,
@WuTianyi123, @Wysie, @xandersbell, @xiaoqiang243, @xiayh0107, @xinpengdr, @Xowiek, @ycbai, @yeyitech, @ygd58,
@youngDoo, @yudaiyan, @Yukipukii1, @yule975, @yyq4193, @yzx9, @ZaynJarvis, @zhang9w0v5, @zhanggttry,
@zhangxicen, @zhongyueming1121, @zhouxiaoya12, @zons-zhaozhy
Also: @maelrx, @Marco Rutsch, @MaxsolcuCrypto, @Mind-Dragon, @Paul Bergeron, @say8hi, @whitehatjr1001.
Full Changelog: v2026.4.13...v2026.4.23
- Nous Tool Gateway provides web search (Firecrawl), image generation (FAL/FLUX 2 Pro), text-to-speech (OpenAI TTS), and browser automation (Browser Use) for paid subscribers
- Per-tool opt-in via `use_gateway` configuration
- Runtime prefers gateway access over direct API keys when both available
Full changelog
Hermes Agent v0.10.0 (v2026.4.16)
Release Date: April 16, 2026
The Tool Gateway release — paid Nous Portal subscribers can now use web search, image generation, text-to-speech, and browser automation through their existing subscription with zero additional API keys.
✨ Highlights
- Nous Tool Gateway — Paid Nous Portal subscribers now get automatic access to web search (Firecrawl), image generation (FAL / FLUX 2 Pro), text-to-speech (OpenAI TTS), and browser automation (Browser Use) through their existing subscription. No separate API keys needed — just run
hermes model, select Nous Portal, and pick which tools to enable. Per-tool opt-in viause_gatewayconfig, full integration withhermes toolsandhermes status, and the runtime correctly prefers the gateway even when direct API keys exist. Replaces the old hiddenHERMES_ENABLE_NOUS_MANAGED_TOOLSenv var with clean subscription-based detection. (#11206, based on work by @jquesnelle; docs: #11208)
🐛 Bug Fixes & Improvements
This release includes 180+ commits with numerous bug fixes, platform improvements, and reliability enhancements across the agent core, gateway, CLI, and tool system. Full details will be published in the v0.11.0 changelog.
👥 Contributors
- @jquesnelle (emozilla) — Original Tool Gateway implementation (#10799), salvaged and shipped in this release
Full Changelog: v2026.4.13...v2026.4.16
- Path traversal protection in checkpoint manager
- Shell injection prevention in sandbox writes
- SSRF protection in Slack image uploads
- Local Web Dashboard for agent management
- Fast Mode for OpenAI and Anthropic
- Android/Termux native support
- Config structure validation now catches malformed YAML at startup
- Centralized logging moved to ~/.hermes/logs/ (agent.log and errors.log)
- Uses 'hermes auth' instead of 'hermes login'
- Consolidated SSRF protections, timing attack mitigations, and tar traversal prevention
- OSV malware scanning for MCP extension packages
- MCP OAuth 2.1 PKCE implementation
- Background process auto-notifications via notify_on_complete
- Live model switching across all platforms using the /model command
- Native Google AI Studio (Gemini) provider integration
- Implemented secret exfiltration detection and blocking in browser URLs and LLM responses
- Protected credential directories for .docker, .azure, .config/gh files
- Redacted execute_code sandbox output to prevent credential leakage
- Pluggable memory provider system enabling custom backends
- Automatic credential rotation with thread-safe least-used strategy
- Stealth browser backend using Camoufox for anti-detection browsing
- Multi-profile isolation allows separate Hermes instances with token-locked credentials
- MCP server mode exposes Hermes conversations to IDEs via Model Context Protocol
- Feishu and Lark adapters provide full gateway integration for Chinese messaging platforms
- Removed compromised litellm dependency and pinned all packages to fix multiple CVEs
- Added CI scanning for supply chain attack patterns and regenerated lockfile with hashes
- Hugging Face integrated as a first-class provider with 400+ models
- Telegram private chat topics enable isolated project-based conversations
- Native Modal SDK replaces swe-rex for a simplified terminal backend
- Hardened API server with input validation, field whitelist, SQLite persistence, and CORS origin protection
- OpenAI-compatible API server exposing chat completions and cron job endpoint
- Context compression overhaul with iterative summaries and token-budget protection
- Gateway prompt caching reduces inference cost for long sessions
- Unified streaming infrastructure enables token‑by‑token responses across all platforms.
- Native Anthropic provider with OAuth PKCE and prompt caching eliminates the need for OpenRouter.
- Voice mode adds push‑to‑talk and Whisper transcription for hands‑free interaction.
- Multi-platform gateway unifies Telegram, Discord, Slack, WhatsApp, Signal, Email, and Home Assistant with unified session management.
- MCP client provides stdio and HTTP transports, resource discovery, and server-initiated sampling for LLM requests.
- Centralized provider router and credential refresh simplify LLM calls and support many providers like OpenAI, OpenRouter, and Firecrawl.