Skip to content

Release history

hermes-agent releases

The agent that grows with you

All releases

16 shown

No immediate action
v2026.5.29.2 Bug fix

Plugin manifests inclusion

Upgrade now
v2026.5.29 Bug fix
Auth

Dashboard, Docker, MCP, Kanban, Skills

Review required
v2026.5.28
Auth RBAC

Routine maintenance and dependency updates.

Review required
v2026.5.16 New feature
Dependencies

Native Windows support

v2026.5.7 Security relevant
Security fixes
  • Redaction enabled by default — mitigates secret leakage
  • Discord `DISCORD_ALLOWED_ROLES` now scoped to originating guild (CVE impact CVSS 8.1)
Notable features
  • 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). /goal keeps 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 a no_agent watchdog 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_analyze tool 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, /update restarts, 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.json and MCP OAuth, browser enforces cloud-metadata SSRF floor, cron prompt-injection scans assembled skill content, hermes debug share redacts 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_agent cron 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 everywhereallowed_channels / allowed_chats / allowed_rooms config across Slack, Telegram, Mattermost, Matrix, and DingTalk. (#21251)

  • Providers are now pluginsProviderProfile ABC + plugins/model-providers/. Drop in third-party providers without touching core. (#20324)

  • API server — long-term memory per sessionX-Hermes-Session-Key header 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 subcommandshermes curator archive, prune, list-archived. Manual hermes curator run is synchronous now — you see results without polling. (#20200, #21236, #21216)

  • ACP — /steer and /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/model picker matches hermes model with 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, new default-large 18px 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_output plugin 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 modelsdeepseek/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_retries override (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 /kanban slash 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_ROLES to 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 add silently 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)
  • /new during 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_var platform-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_notification flag (#20892)
  • busy_ack_enabled config — 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.yaml wins over .env for 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_mention to 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_mode from 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=1 for 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_channels to override DISCORD_IGNORE_NO_MENTION (#19629)

Slack

  • Fix: ephemeral slash-command ack, private notice delivery, format_message fixes (@kshitijk4poor) (#18198)

WhatsApp

  • 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: /sethome on 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 /provider alias 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-pro added to OpenRouter + Nous Portal (#20495)
  • x-ai/grok-4.3 added to OpenRouter + Nous Portal (#20497)
  • openrouter/owl-alpha (free tier) added to curated OpenRouter list (#18071)
  • tencent/hy3-preview paid route on OpenRouter (@Contentment003111) (#21077)
  • Arcee Trinity Large Thinking — temperature + compression overrides (#20473)
  • Rename x-ai/grok-4.20-beta to x-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.model from 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_definitions quiet_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_tools RPC calls from execute_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_until on session reset (#19622)
  • Fix: trigger fallback on timeout errors alongside model-unavailable errors (#19665)
  • Fix: _prune_old_tool_results boundary 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() against delegation: null in config.yaml (#19662)
  • Fix: inherit parent api_key when delegation.base_url set without delegation.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 archive and prune subcommands (#20200)
  • hermes curator list-archived (#20651) (#21236)
  • Synchronous manual hermes curator run (#20555) (#21216)
  • Fix: preserve last_report_path in state (#18169)
  • Fix: rewrite cron job skill refs after consolidation (#18253)
  • Fix: defer first run + --dry-run preview (#18373) (#18389)
  • Fix: authoritative absorbed_into on 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_agent mode — script-only cron jobs (watchdog pattern) (#19709)
  • context_from chaining 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_at jobs (#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_jobs writes 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_timeout on 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 --command gets 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-sandbox for 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_output plugin hook (salvage of #20813) (#21235)
  • Document env_enablement_fn + cron_deliver_env_var platform-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 reset subcommand (salvage #11544) (#20395)
  • Docs: himalaya v1.2.0 folder.aliases syntax (#19882)
  • Point agent at hermes-agent skill + docs site sync (#20390)

🖥️ CLI & User Experience

CLI

  • /new accepts 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)

  • /model picker overhaul to match hermes model with 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-large built-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=1 in Docker (@benbarclay) (#19540)
  • Fix: dashboard theme layout shift (@AllardQuek) (#17232)
  • Fix: gateway model picker current context (@helix4u) (#20513)

Update + setup

  • hermes update --yes/-y to skip interactive prompts (#18261)
  • Restart manual profile gateways after update (#18178)

Profiles

  • --no-skills flag 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-Key header for long-term memory scoping (closes #20060) (#20199)

🧰 ACP Adapter (VS Code / Zed / JetBrains)

  • /steer and /queue slash commands (@HenkDz) (#18114)
  • Fix: translate Windows cwd for WSL sessions (salvage #18128) (#18233)
  • Fix: run /steer as 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_modules trees 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 isatty on real streams to fix xdist-flaky --yes tests (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_file param to skip false-positive ENV/JSON patterns (#19715)

Email

  • 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 — -inf and nan regression 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_search auxiliary 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 import reference (salvage #14711) (#20396)
  • Document per-provider TTS max_text_length caps (salvage #13825) (#20389)
  • Clarify supported prompt customization surfaces (salvage #19987) (#20383)
  • Correct web_extract summarizer 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 .venv to 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

v2026.4.30 Breaking risk
Notable features
  • 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 Curatorhermes curator runs 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 to logs/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 under auxiliary.curator — pick the curator's model in hermes model, manage it from the dashboard. hermes curator status ranks 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 expansionComfyUI 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_manage edits in external_dirs + direct-URL skill install + /reload-skills slash 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 doctor checks, reasoning transport, live /models listing. (Salvage of @kshitijk4poor's #17061.) (#17102)

  • Four more new inference providersGMI 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 -z one-shot mode + hermes update --check — non-interactive hermes -z <prompt> with --model/--provider/HERMES_INFERENCE_MODEL. hermes update --check preflight. 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 /resume picker with d, modified mouse-wheel line scroll, and a /mouse toggle 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: true when 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(), memoized get_tool_definitions() with TTL-cached check_fn results, precompiled dangerous-command patterns. (#17190, #17046, #17041, #17098, #17206)

  • Configurable prompt cache TTLprompt_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 curator as 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 reportslogs/curator/run.json + REPORT.md per 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 in hermes 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_manage refuses 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-MCPbundled 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) URLhermes skills install <url> (#16323)
  • /reload-skills slash command (salvage #17670) (#17744)
  • hermes skills list shows enabled/disabled status (#16129)
  • skill_manage refuses writes on pinned skills (#17562)
  • skill_manage edits 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-workspace shared 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-agent skill + 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.5 and gpt-5.5-pro added to OpenRouter + Nous Portal (#15343)
  • deepseek-v4-pro and deepseek-v4-flash added (#14934)
  • qwen3.6-plus added 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)
  • /fast whitelist broadened to all OpenAI + Anthropic models (#16883)
  • auxiliary.extra_body.reasoning translates into Codex Responses API (#17004)
  • hermes fallback command for managing fallback providers (#16052)

Agent Loop & Conversation

  • Native multimodal image routing — based on model vision capability, not provider defaults (#16506)
  • Delegate child_timeout_seconds default 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-mcp awareness — rebuild cached agents + prompt-cache cost confirmation (#17729)
  • Fix: repair CamelCase + _tool suffix tool-call emissions (#15124)
  • Fix: retry on json.JSONDecodeError instead 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_content for DeepSeek/Kimi tool_calls unconditionally (@Zjianru) (#15762)
  • Fix: persist streamed reasoning_content on assistant turns (#16844) (#16892)
  • Fix: cancel coroutine on timeout so worker thread exits; full traceback on tool failure (#17428)
  • Fix: isolate get_tool_definitions quiet_mode cache + dedup LCM injection (#17335) (#17889)
  • Fix: serialize concurrent hermes_tools RPC calls from execute_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)
  • /compress wrapped in _busy_command to 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_calls in 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_provider on gateway + CLI (#15165) (#16571)
  • Fix: write-origin metadata seam (#15346)
  • Fix: preserve symlinks during atomic file writes (#16980)
  • Refactor: remove flush_memories entirely (#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_tokens retry (#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 limit parameter to int before min() call (#16319)

Slack

  • Register every gateway command as a native slash (Discord/Telegram parity) (#16164)
  • strict_mention config — 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_dispatch hook — plugins can intercept before dispatch (#15050)
  • pre_approval_request / post_approval_response hooks (#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_dispatch hook (#15050)
  • pre_approval_request + post_approval_response hooks (#16776)
  • duration_ms on post_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 wrapped cd commands (#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 tools config for the cron platform (#14798)
  • Per-job workdir — project-aware cron runs (#15110)
  • context_from field — chain cron job outputs (#15606)
  • Fix: promote croniter to a core dependency (#17577)

Web search

  • Expose limit for web_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 --rebuild in fix-lockfiles to bypass cached FOD store paths (#15444)
  • Fix: extraPackages now 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-detectionHERMES_TUI_THEME + background hex (@OutThisLife) (#17113)
  • Delete sessions from /resume picker with d (@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 + /mouse toggle 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 -z with --model / --provider / HERMES_INFERENCE_MODEL (#15704)
  • hermes update --check preflight flag (#15841)
  • hermes fallback command for managing fallback providers (#16052)
  • /busy slash command for busy input mode (#15382)
  • /busy input mode 'steer' as a third option (#16279)
  • /btw as alias for /background (#16053)
  • /reload-skills slash command (salvage #17670) (#17744)
  • Surface /queue, /bg, /steer in agent-running placeholder (#16118)

Setup / onboarding

  • Auto-reconfigure on existing installs (#15879)
  • Contextual first-touch hints for /busy and /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, /plan handler, and clean up slash registry (#15047)
  • Refactor: drop persist_session plumbing + fix broken /btw mid-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 ~/.openclaw residue banner (#16327)
  • Fix: resolve openclaw workspace files from agents.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)
  • --stop and --status flags 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() and read_raw_config() (#17041)
  • Memoize get_tool_definitions() + TTL-cache check_fn results (#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_secret helper; 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/tty by 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_TIMEOUT env var (#15077)
  • Tools: normalize numeric entries + clear stale no_mcp in _save_platform_tools (#15607)
  • MCP: rewrite definitions refs to $defs in 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)
  • croniter promoted to a core dependency (#17577)
  • Discord tool limit parameter coerced to int before min() 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_manage writes (#17578)
  • Direct-URL skill install documented across features, reference, guide, and hermes-agent skill (#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 + /plan slash commands dropped (#15047)
  • flush_memories removed 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_skill nested-archive fix (#17951)
  • @y0shua1ee — curator use activity 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

v2026.4.23 Breaking risk
Notable features
  • 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 TUIhermes --tui is 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, /clear confirm, light-theme preset, and a subagent spawn observability overlay. ~310 commits to ui-tui/ + tui_gateway/. (@OutThisLife + Teknium)

  • Transport ABC + Native AWS Bedrock — Format conversion and HTTP transport were extracted from run_agent.py into a pluggable agent/transports/ layer. AnthropicTransport, ChatCompletionsTransport, ResponsesApiTransport, and BedrockTransport each 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_call can 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 orchestrator role that can spawn their own workers, with configurable max_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-firsthermes model has a dedicated "Configure auxiliary models" screen for per-task overrides (compression, vision, session_search, title_generation). auto routing 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.py into agent/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=false control, surrogate sanitization, /v1 hint (#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)
  • /model merges models.dev entries for lesser-loved providers (#14221)
  • Per-provider + per-model request_timeout_seconds config (#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 minimal reasoning effort to low on Responses API (#9429)
  • Fix: strip reasoning item IDs from Responses API input when store=False (#10217)
  • Fix: OpenViking correct account default + commit session on /new and compress (#10463)
  • Fix: Kimi /coding thinking 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, and thinking for 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: /stop no 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_length for 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_write bridge to sequential tool execution path (#10507)
  • Fix: preserve session_id across previous_response_id chains 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) and src/app.tsx (state machine)
  • Persistent _SlashWorker subprocess 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.slash RPC
  • Path autocomplete via complete.path RPC
  • Dozens of resize/ghosting/sticky-prompt fixes landed through the week

Structural Refactors

  • Decomposed app.tsx into app/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_PROXY env var + config.yaml proxy support (closes #9414, #6530, #9074, #7786) (#10681)
  • ignored_threads config 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_ROLES for role-based access control (#11608)
  • Config option to disable slash commands (salvage #13130) (#14315)
  • Native send_animation for inline GIF playback (#10283)
  • send_message Discord media attachments (#10246)
  • /skill command 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_users gating (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)

WhatsApp

  • send_voice — native audio message delivery (#13002)
  • dm_policy and group_policy parity 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 .pdf in MEDIA: tag extraction (#13683)
  • --all flag for gateway start and restart (#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 --replace takeover

🔧 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_call blocking — 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_gen backends + OpenAI provider (#13799)
  • openai-codex image_gen plugin (gpt-image-2 via Codex OAuth) (#14317)
  • Shell hooks — wire shell scripts as hook callbacks (#13296)

Browser

  • browser_cdp raw 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 wakeAgent gate — 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/responses SSE tool events (salvage #9779) (#10049)
  • Inline image inputs on /v1/chat/completions and /v1/responses (#12969)

Docker / Podman

  • Entry-level Podman supportfind_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 reset to un-stick bundled skills (#11468)
  • Skills guard opt-inconfig.skills.guard_agent_created (default off) (#14557)
  • Bundled skill scripts runnable out of the box (#13384)
  • xitter replaced with xurl — 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-config and --ignore-rules flags (port codex#18646) (#14277)
  • Account limits section in /usage (#13428)
  • Doctor: Command Installation check for hermes bin 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.yaml as sole CWD source + deprecate .env CWD vars + add hermes 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.environ leak after clear_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_search coerces limit to int (prevents TypeError) (#10522)
  • Memory tool stays available when fcntl is unavailable (Windows) (#9783)
  • Trajectory compressor credentials load from HERMES_HOME/.env (#9632, @Dusk1e)
  • @_context_completions no longer crashes on @ mention (#9683, @kshitijk4poor)
  • Group session user_id no longer treated as thread_id in 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, /clear confirm, 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

v2026.4.16 New feature
Notable features
  • 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 via use_gateway config, full integration with hermes tools and hermes status, and the runtime correctly prefers the gateway even when direct API keys exist. Replaces the old hidden HERMES_ENABLE_NOUS_MANAGED_TOOLS env 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

v2026.4.13 Security relevant
Security fixes
  • Path traversal protection in checkpoint manager
  • Shell injection prevention in sandbox writes
  • SSRF protection in Slack image uploads
Notable features
  • Local Web Dashboard for agent management
  • Fast Mode for OpenAI and Anthropic
  • Android/Termux native support
v2026.4.8 Mixed
⚠ Upgrade required
  • 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'
Security fixes
  • Consolidated SSRF protections, timing attack mitigations, and tar traversal prevention
  • OSV malware scanning for MCP extension packages
  • MCP OAuth 2.1 PKCE implementation
Notable features
  • 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
v2026.4.3 New feature
Security fixes
  • 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
Notable features
  • 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
v2026.3.30 New feature
Notable features
  • 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
v2026.3.28 Security relevant
Security fixes
  • 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
Notable features
  • 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
v2026.3.23 New feature
Security fixes
  • Hardened API server with input validation, field whitelist, SQLite persistence, and CORS origin protection
Notable features
  • 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
v2026.3.17 New feature
Notable features
  • 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.
v2026.3.12 New feature
Notable features
  • 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.

Beta — feedback welcome: [email protected]