hermes / RELEASE_v0.7.0.md
haochengsama's picture
Add files using upload-large-folder tool
8ecc70d verified
|
Raw
History Blame Contribute Delete
34 kB

Hermes Agent v0.7.0 (v2026.4.3)

Release Date: April 3, 2026

The resilience release β€” pluggable memory providers, credential pool rotation, Camofox anti-detection browser, inline diff previews, gateway hardening across race conditions and approval routing, and deep security fixes across 168 PRs and 46 resolved issues.


✨ Highlights

  • Pluggable Memory Provider Interface β€” Memory is now an extensible plugin system. Third-party memory backends (Honcho, vector stores, custom DBs) implement a simple provider ABC and register via the plugin system. Built-in memory is the default provider. Honcho integration restored to full parity as the reference plugin with profile-scoped host/peer resolution. (#4623, #4616, #4355)

  • Same-Provider Credential Pools β€” Configure multiple API keys for the same provider with automatic rotation. Thread-safe least_used strategy distributes load across keys, and 401 failures trigger automatic rotation to the next credential. Set up via the setup wizard or credential_pool config. (#4188, #4300, #4361)

  • Camofox Anti-Detection Browser Backend β€” New local browser backend using Camoufox for stealth browsing. Persistent sessions with VNC URL discovery for visual debugging, configurable SSRF bypass for local backends, auto-install via hermes tools. (#4008, #4419, #4292)

  • Inline Diff Previews β€” File write and patch operations now show inline diffs in the tool activity feed, giving you visual confirmation of what changed before the agent moves on. (#4411, #4423)

  • API Server Session Continuity & Tool Streaming β€” The API server (Open WebUI integration) now streams tool progress events in real-time and supports X-Hermes-Session-Id headers for persistent sessions across requests. Sessions persist to the shared SessionDB. (#4092, #4478, #4802)

  • ACP: Client-Provided MCP Servers β€” Editor integrations (VS Code, Zed, JetBrains) can now register their own MCP servers, which Hermes picks up as additional agent tools. Your editor's MCP ecosystem flows directly into the agent. (#4705)

  • Gateway Hardening β€” Major stability pass across race conditions, photo media delivery, flood control, stuck sessions, approval routing, and compression death spirals. The gateway is substantially more reliable in production. (#4727, #4750, #4798, #4557)

  • Security: Secret Exfiltration Blocking β€” Browser URLs and LLM responses are now scanned for secret patterns, blocking exfiltration attempts via URL encoding, base64, or prompt injection. Credential directory protections expanded to .docker, .azure, .config/gh. Execute_code sandbox output is redacted. (#4483, #4360, #4305, #4327)


πŸ—οΈ Core Agent & Architecture

Provider & Model Support

  • Same-provider credential pools β€” configure multiple API keys with automatic least_used rotation and 401 failover (#4188, #4300)
  • Credential pool preserved through smart routing β€” pool state survives fallback provider switches and defers eager fallback on 429 (#4361)
  • Per-turn primary runtime restoration β€” after fallback provider use, the agent automatically restores the primary provider on the next turn with transport recovery (#4624)
  • developer role for GPT-5 and Codex models β€” uses OpenAI's recommended system message role for newer models (#4498)
  • Google model operational guidance β€” Gemini and Gemma models get provider-specific prompting guidance (#4641)
  • Anthropic long-context tier 429 handling β€” automatically reduces context to 200k when hitting tier limits (#4747)
  • URL-based auth for third-party Anthropic endpoints + CI test fixes (#4148)
  • Bearer auth for MiniMax Anthropic endpoints (#4028)
  • Fireworks context length detection (#4158)
  • Standard DashScope international endpoint for Alibaba provider (#4133, closes #3912)
  • Custom providers context_length honored in hygiene compression (#4085)
  • Non-sk-ant keys treated as regular API keys, not OAuth tokens (#4093)
  • Claude-sonnet-4.6 added to OpenRouter and Nous model lists (#4157)
  • Qwen 3.6 Plus Preview added to model lists (#4376)
  • MiniMax M2.7 added to hermes model picker and OpenCode (#4208)
  • Auto-detect models from server probe in custom endpoint setup (#4218)
  • Config.yaml single source of truth for endpoint URLs β€” no more env var vs config.yaml conflicts (#4165)
  • Setup wizard no longer overwrites custom endpoint config (#4180, closes #4172)
  • Unified setup wizard provider selection with hermes model β€” single code path for both flows (#4200)
  • Root-level provider config no longer overrides model.provider (#4329)
  • Rate-limit pairing rejection messages to prevent spam (#4081)

Agent Loop & Conversation

  • Preserve Anthropic thinking block signatures across tool-use turns (#4626)
  • Classify think-only empty responses before retrying β€” prevents infinite retry loops on models that produce thinking blocks without content (#4645)
  • Prevent compression death spiral from API disconnects β€” stops the loop where compression triggers, fails, compresses again (#4750, closes #2153)
  • Persist compressed context to gateway session after mid-run compression (#4095)
  • Context-exceeded error messages now include actionable guidance (#4155, closes #4061)
  • Strip orphaned think/reasoning tags from user-facing responses (#4311, closes #4285)
  • Harden Codex responses preflight and stream error handling (#4313)
  • Deterministic call_id fallbacks instead of random UUIDs for prompt cache consistency (#3991)
  • Context pressure warning spam prevented after compression (#4012)
  • AsyncOpenAI created lazily in trajectory compressor to avoid closed event loop errors (#4013)

Memory & Sessions

  • Pluggable memory provider interface β€” ABC-based plugin system for custom memory backends with profile isolation (#4623)
  • Honcho full integration parity restored as reference memory provider plugin (#4355) β€” @erosika
  • Honcho profile-scoped host and peer resolution (#4616)
  • Memory flush state persisted to prevent redundant re-flushes on gateway restart (#4481)
  • Memory provider tools routed through sequential execution path (#4803)
  • Honcho config written to instance-local path for profile isolation (#4037)
  • API server sessions persist to shared SessionDB (#4802)
  • Token usage persisted for non-CLI sessions (#4627)
  • Quote dotted terms in FTS5 queries β€” fixes session search for terms containing dots (#4549)

πŸ“± Messaging Platforms (Gateway)

Gateway Core

  • Race condition fixes β€” photo media loss, flood control, stuck sessions, and STT config issues resolved in one hardening pass (#4727)
  • Approval routing through running-agent guard β€” /approve and /deny now route correctly when the agent is blocked waiting for approval instead of being swallowed as interrupts (#4798, #4557, closes #4542)
  • Resume agent after /approve β€” tool result is no longer lost when executing blocked commands (#4418)
  • DM thread sessions seeded with parent transcript to preserve context (#4559)
  • Skill-aware slash commands β€” gateway dynamically registers installed skills as slash commands with paginated /commands list and Telegram 100-command cap (#3934, #4005, #4006, #4010, #4023)
  • Per-platform disabled skills respected in Telegram menu and gateway dispatch (#4799)
  • Remove user-facing compression warnings β€” cleaner message flow (#4139)
  • -v/-q flags wired to stderr logging for gateway service (#4474)
  • HERMES_HOME remapped to target user in system service unit (#4456)
  • Honor default for invalid bool-like config values (#4029)
  • setsid instead of systemd-run for /update command to avoid systemd permission issues (#4104, closes #4017)
  • 'Initializing agent...' shown on first message for better UX (#4086)
  • Allow running gateway service as root for LXC/container environments (#4732)

Telegram

  • 32-char limit on command names with collision avoidance (#4211)
  • Priority order enforced in menu β€” core > plugins > skills (#4023)
  • Capped at 50 commands β€” API rejects above ~60 (#4006)
  • Skip empty/whitespace text to prevent 400 errors (#4388)
  • E2E gateway tests added (#4497) β€” @pefontana

Discord

  • Button-based approval UI β€” register /approve and /deny slash commands with interactive button prompts (#4800)
  • Configurable reactions β€” discord.reactions config option to disable message processing reactions (#4199)
  • Skip reactions and auto-threading for unauthorized users (#4387)

Slack

  • Reply in thread β€” slack.reply_in_thread config option for threaded responses (#4643, closes #2662)

WhatsApp

  • Enforce require_mention in group chats (#4730)

Webhook

  • Platform support fixes β€” skip home channel prompt, disable tool progress for webhook adapters (#4660)

Matrix

  • E2EE decryption hardening β€” request missing keys, auto-trust devices, retry buffered events (#4083)

πŸ–₯️ CLI & User Experience

New Slash Commands

  • /yolo β€” toggle dangerous command approvals on/off for the session (#3990)
  • /btw β€” ephemeral side questions that don't affect the main conversation context (#4161)
  • /profile β€” show active profile info without leaving the chat session (#4027)

Interactive CLI

  • Inline diff previews for write and patch operations in the tool activity feed (#4411, #4423)
  • TUI pinned to bottom on startup β€” no more large blank spaces between response and input (#4412, #4359, closes #4398, #4421)
  • /history and /resume now surface recent sessions directly instead of requiring search (#4728)
  • Cache tokens shown in /insights overview so total adds up (#4428)
  • --max-turns CLI flag for hermes chat to limit agent iterations (#4314)
  • Detect dragged file paths instead of treating them as slash commands (#4533) β€” @rolme
  • Allow empty strings and falsy values in config set (#4310, closes #4277)
  • Voice mode in WSL when PulseAudio bridge is configured (#4317)
  • Respect NO_COLOR env var and TERM=dumb for accessibility (#4079, closes #4066) β€” @SHL0MS
  • Correct shell reload instruction for macOS/zsh users (#4025)
  • Zero exit code on successful quiet mode queries (#4613, closes #4601) β€” @devorun
  • on_session_end hook fires on interrupted exits (#4159)
  • Profile list display reads model.default key correctly (#4160)
  • Browser and TTS shown in reconfigure menu (#4041)
  • Web backend priority detection simplified (#4036)

Setup & Configuration

  • Allowed_users preserved during setup and quiet unconfigured provider warnings (#4551) β€” @kshitijk4poor
  • Save API key to model config for custom endpoints (#4202, closes #4182)
  • Claude Code credentials gated behind explicit Hermes config in wizard trigger (#4210)
  • Atomic writes in save_config_value to prevent config loss on interrupt (#4298, #4320)
  • Scopes field written to Claude Code credentials on token refresh (#4126)

Update System

  • Fork detection and upstream sync in hermes update (#4744)
  • Preserve working optional extras when one extra fails during update (#4550)
  • Handle conflicted git index during hermes update (#4735)
  • Avoid launchd restart race on macOS (#4736)
  • Missing subprocess.run() timeouts added to doctor and status commands (#4009)

πŸ”§ Tool System

Browser

  • Camofox anti-detection browser backend β€” local stealth browsing with auto-install via hermes tools (#4008)
  • Persistent Camofox sessions with VNC URL discovery for visual debugging (#4419)
  • Skip SSRF check for local backends (Camofox, headless Chromium) (#4292)
  • Configurable SSRF check via browser.allow_private_urls (#4198) β€” @nils010485
  • CAMOFOX_PORT=9377 added to Docker commands (#4340)

File Operations

  • Inline diff previews on write and patch actions (#4411, #4423)
  • Stale file detection on write and patch β€” warns when file was modified externally since last read (#4345)
  • Staleness timestamp refreshed after writes (#4390)
  • Size guard, dedup, and device blocking on read_file (#4315)

MCP

  • Stability fix pack β€” reload timeout, shutdown cleanup, event loop handler, OAuth non-blocking (#4757, closes #4462, #2537)

ACP (Editor Integration)

  • Client-provided MCP servers registered as agent tools β€” editors pass their MCP servers to Hermes (#4705)

Skills System

  • Size limits for agent writes and fuzzy matching for skill patch β€” prevents oversized skill writes and improves edit reliability (#4414)
  • Validate hub bundle paths before install β€” blocks path traversal in skill bundles (#3986)
  • Unified hermes-agent and hermes-agent-setup into single skill (#4332)
  • Skill metadata type check in extract_skill_conditions (#4479)

New/Updated Skills

  • research-paper-writing β€” full end-to-end research pipeline (replaced ml-paper-writing) (#4654) β€” @SHL0MS
  • ascii-video β€” text readability techniques and external layout oracle (#4054) β€” @SHL0MS
  • youtube-transcript updated for youtube-transcript-api v1.x (#4455) β€” @el-analista
  • Skills browse and search page added to documentation site (#4500) β€” @IAvecilla

πŸ”’ Security & Reliability

Security Hardening

  • Block secret exfiltration via browser URLs and LLM responses β€” scans for secret patterns in URL encoding, base64, and prompt injection vectors (#4483)
  • Redact secrets from execute_code sandbox output (#4360)
  • Protect .docker, .azure, .config/gh credential directories from read/write via file tools and terminal (#4305, #4327) β€” @memosr
  • GitHub OAuth token patterns added to redaction + snapshot redact flag (#4295)
  • Reject private and loopback IPs in Telegram DoH fallback (#4129)
  • Reject path traversal in credential file registration (#4316)
  • Validate tar archive member paths on profile import β€” blocks zip-slip attacks (#4318)
  • Exclude auth.json and .env from profile exports (#4475)

Reliability

  • Prevent compression death spiral from API disconnects (#4750, closes #2153)
  • Handle is_closed as method in OpenAI SDK β€” prevents false positive client closure detection (#4416, closes #4377)
  • Exclude matrix from [all] extras β€” python-olm is upstream-broken, prevents install failures (#4615, closes #4178)
  • OpenCode model routing repaired (#4508)
  • Docker container image optimized (#4034) β€” @bcross

Windows & Cross-Platform

  • Voice mode in WSL with PulseAudio bridge (#4317)
  • Homebrew packaging preparation (#4099)
  • CI fork conditionals to prevent workflow failures on forks (#4107)

πŸ› Notable Bug Fixes

  • Gateway approval blocked agent thread β€” approval now blocks the agent thread like CLI does, preventing tool result loss (#4557, closes #4542)
  • Compression death spiral from API disconnects β€” detected and halted instead of looping (#4750, closes #2153)
  • Anthropic thinking blocks lost across tool-use turns (#4626)
  • Profile model config ignored with -p flag β€” model.model now promoted to model.default correctly (#4160, closes #4486)
  • CLI blank space between response and input area (#4412, #4359, closes #4398)
  • Dragged file paths treated as slash commands instead of file references (#4533) β€” @rolme
  • Orphaned </think> tags leaking into user-facing responses (#4311, closes #4285)
  • OpenAI SDK is_closed is a method not property β€” false positive client closure (#4416, closes #4377)
  • MCP OAuth server could block Hermes startup instead of degrading gracefully (#4757, closes #4462)
  • MCP event loop closed on shutdown with HTTP servers (#4757, closes #2537)
  • Alibaba provider hardcoded to wrong endpoint (#4133, closes #3912)
  • Slack reply_in_thread missing config option (#4643, closes #2662)
  • Quiet mode exit code β€” successful -q queries no longer exit nonzero (#4613, closes #4601)
  • Mobile sidebar shows only close button due to backdrop-filter issue in docs site (#4207) β€” @xsmyile
  • Config restore reverted by stale-branch squash merge β€” _config_version fixed (#4440)

πŸ§ͺ Testing

  • Telegram gateway E2E tests β€” full integration test suite for the Telegram adapter (#4497) β€” @pefontana
  • 11 real test failures fixed plus sys.modules cascade poisoner resolved (#4570)
  • 7 CI failures resolved across hooks, plugins, and skill tests (#3936)
  • Codex 401 refresh tests updated for CI compatibility (#4166)
  • Stale OPENAI_BASE_URL test fixed (#4217)

πŸ“š Documentation

  • Comprehensive documentation audit β€” 9 HIGH and 20+ MEDIUM gaps fixed across 21 files (#4087)
  • Site navigation restructured β€” features and platforms promoted to top-level (#4116)
  • Tool progress streaming documented for API server and Open WebUI (#4138)
  • Telegram webhook mode documentation (#4089)
  • Local LLM provider guides β€” comprehensive setup guides with context length warnings (#4294)
  • WhatsApp allowlist behavior clarified with WHATSAPP_ALLOW_ALL_USERS documentation (#4293)
  • Slack configuration options β€” new config section in Slack docs (#4644)
  • Terminal backends section expanded + docs build fixes (#4016)
  • Adding-providers guide updated for unified setup flow (#4201)
  • ACP Zed config fixed (#4743)
  • Community FAQ entries for common workflows and troubleshooting (#4797)
  • Skills browse and search page on docs site (#4500) β€” @IAvecilla

πŸ‘₯ Contributors

Core

  • @teknium1 β€” 135 commits across all subsystems

Top Community Contributors

  • @kshitijk4poor β€” 13 commits: preserve allowed_users during setup (#4551), and various fixes
  • @erosika β€” 12 commits: Honcho full integration parity restored as memory provider plugin (#4355)
  • @pefontana β€” 9 commits: Telegram gateway E2E test suite (#4497)
  • @bcross β€” 5 commits: Docker container image optimization (#4034)
  • @SHL0MS β€” 4 commits: NO_COLOR/TERM=dumb support (#4079), ascii-video skill updates (#4054), research-paper-writing skill (#4654)

All Contributors

@0xbyt4, @arasovic, @Bartok9, @bcross, @binhnt92, @camden-lowrance, @curtitoo, @Dakota, @Dave Tist, @Dean Kerr, @devorun, @dieutx, @Dilee, @el-analista, @erosika, @Gutslabs, @IAvecilla, @Jack, @Johannnnn506, @kshitijk4poor, @Laura Batalha, @Leegenux, @Lume, @MacroAnarchy, @maymuneth, @memosr, @NexVeridian, @Nick, @nils010485, @pefontana, @Penov, @rolme, @SHL0MS, @txchen, @xsmyile

Issues Resolved from Community

@acsezen (#2537), @arasovic (#4285), @camden-lowrance (#4462), @devorun (#4601), @eloklam (#4486), @HenkDz (#3719), @hypotyposis (#2153), @kazamak (#4178), @lstep (#4366), @Mark-Lok (#4542), @NoJster (#4421), @patp (#2662), @pr0n (#4601), @saulmc (#4377), @SHL0MS (#4060, #4061, #4066, #4172, #4277), @Z-Mackintosh (#4398)


Full Changelog: v2026.3.30...v2026.4.3