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
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
🧰 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
Model
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