# Hermes Agent v0.4.0 (v2026.3.23)
**发布日期:** 2026年3月23日
> 平台扩展版本 —— 兼容OpenAI的API服务器、6个新的消息适配器、4个新的推理提供商、支持OAuth 2.1的MCP服务器管理、@上下文引用、网关提示词缓存、默认启用流式输出,以及包含200多个错误修复的全面可靠性改进。
---
## ✨ 主要亮点
- **兼容OpenAI的API服务器** —— 通过新的 `/api/jobs` REST API 将Hermes暴露为 `/v1/chat/completions` 端点,用于定时任务管理,并强化了输入限制、字段白名单、基于SQLite的响应持久化以及CORS源保护 ([#1756](https://github.com/NousResearch/hermes-agent/pull/1756), [#2450](https://github.com/NousResearch/hermes-agent/pull/2450), [#2456](https://github.com/NousResearch/hermes-agent/pull/2456), [#2451](https://github.com/NousResearch/hermes-agent/pull/2451), [#2472](https://github.com/NousResearch/hermes-agent/pull/2472))
- **6个新的消息平台适配器** —— Signal、钉钉、短信(Twilio)、Mattermost、Matrix和Webhook适配器加入Telegram、Discord和WhatsApp。网关使用指数退避策略自动重连失败的平台 ([#2206](https://github.com/NousResearch/hermes-agent/pull/2206), [#1685](https://github.com/NousResearch/hermes-agent/pull/1685), [#1688](https://github.com/NousResearch/hermes-agent/pull/1688), [#1683](https://github.com/NousResearch/hermes-agent/pull/1683), [#2166](https://github.com/NousResearch/hermes-agent/pull/2166), [#2584](https://github.com/NousResearch/hermes-agent/pull/2584))
- **@上下文引用** —— 类Claude Code风格的 `@file` 和 `@url` 上下文注入,CLI中支持标签补全 ([#2343](https://github.com/NousResearch/hermes-agent/pull/2343), [#2482](https://github.com/NousResearch/hermes-agent/pull/2482))
- **4个新的推理提供商** —— GitHub Copilot(OAuth + 令牌验证)、阿里云 / DashScope、Kilo Code和OpenCode Zen/Go ([#1924](https://github.com/NousResearch/hermes-agent/pull/1924), [#1879](https://github.com/NousResearch/hermes-agent/pull/1879) by @mchzimm, [#1673](https://github.com/NousResearch/hermes-agent/pull/1673), [#1666](https://github.com/NousResearch/hermes-agent/pull/1666), [#1650](https://github.com/NousResearch/hermes-agent/pull/1650))
- **MCP服务器管理CLI** —— `hermes mcp` 命令用于安装、配置和验证MCP服务器,支持完整的OAuth 2.1 PKCE流程 ([#2465](https://github.com/NousResearch/hermes-agent/pull/2465))
- **网关提示词缓存** —— 按会话缓存AIAgent实例,在对话轮次间保留Anthropic提示词缓存,大幅降低长对话成本 ([#2282](https://github.com/NousResearch/hermes-agent/pull/2282), [#2284](https://github.com/NousResearch/hermes-agent/pull/2284), [#2361](https://github.com/NousResearch/hermes-agent/pull/2361))
- **上下文压缩改造** —— 结构化摘要与迭代更新、令牌预算尾部保护、可配置摘要端点以及备用模型支持 ([#2323](https://github.com/NousResearch/hermes-agent/pull/2323), [#1727](https://github.com/NousResearch/hermes-agent/pull/1727), [#2224](https://github.com/NousResearch/hermes-agent/pull/2224))
- **默认启用流式输出** —— CLI默认开启流式输出,流式模式下正确显示旋转指示器和工具进度,并修复了大量换行和拼接问题 ([#2340](https://github.com/NousResearch/hermes-agent/pull/2340), [#2161](https://github.com/NousResearch/hermes-agent/pull/2161), [#2258](https://github.com/NousResearch/hermes-agent/pull/2258))
---
## 🖥️ CLI与用户体验
### 新命令与交互
- **@上下文补全** —— 支持标签补全的 `@file`/`@url` 引用,将文件内容或网页注入对话 ([#2482](https://github.com/NousResearch/hermes-agent/pull/2482), [#2343](https://github.com/NousResearch/hermes-agent/pull/2343))
- **`/statusbar`** —— 切换显示模型+提供商信息的持久配置栏 ([#2240](https://github.com/NousResearch/hermes-agent/pull/2240), [#1917](https://github.com/NousResearch/hermes-agent/pull/1917))
- **`/queue`** —— 为代理排队提示词,不中断当前运行 ([#2191](https://github.com/NousResearch/hermes-agent/pull/2191), [#2469](https://github.com/NousResearch/hermes-agent/pull/2469))
- **`/permission`** —— 在会话中动态切换批准模式 ([#2207](https://github.com/NousResearch/hermes-agent/pull/2207))
- **`/browser`** —— 从CLI启动交互式浏览器会话 ([#2273](https://github.com/NousResearch/hermes-agent/pull/2273), [#1814](https://github.com/NousResearch/hermes-agent/pull/1814))
- **`/cost`** —— 网关模式下的实时定价和使用跟踪 ([#2180](https://github.com/NousResearch/hermes-agent/pull/2180))
- **`/approve` 和 `/deny`** —— 用显式命令替换网关中的纯文本批准 ([#2002](https://github.com/NousResearch/hermes-agent/pull/2002))
### 流式与显示
- CLI默认启用流式输出 ([#2340](https://github.com/NousResearch/hermes-agent/pull/2340))
- 流式模式下显示旋转指示器和工具进度 ([#2161](https://github.com/NousResearch/hermes-agent/pull/2161))
- 启用 `show_reasoning` 时显示推理/思考块 ([#2118](https://github.com/NousResearch/hermes-agent/pull/2118))
- CLI和网关的上下文压力警告 ([#2159](https://github.com/NousResearch/hermes-agent/pull/2159))
- 修复:流式块拼接时缺少空格 ([#2258](https://github.com/NousResearch/hermes-agent/pull/2258))
- 修复:迭代边界换行阻止流式拼接 ([#2413](https://github.com/NousResearch/hermes-agent/pull/2413))
- 修复:延迟流式换行以防止空白行堆积 ([#2473](https://github.com/NousResearch/hermes-agent/pull/2473))
- 修复:在非TTY环境中抑制旋转动画 ([#2216](https://github.com/NousResearch/hermes-agent/pull/2216))
- 修复:在API错误消息中显示提供商和端点 ([#2266](https://github.com/NousResearch/hermes-agent/pull/2266))
- 修复:解决状态输出中的乱码ANSI转义码 ([#2448](https://github.com/NousResearch/hermes-agent/pull/2448))
- 修复:将金色ANSI颜色更新为真彩色格式 ([#2246](https://github.com/NousResearch/hermes-agent/pull/2246))
- 修复:标准化工具集标签并在横幅中使用肤色 ([#1912](https://github.com/NousResearch/hermes-agent/pull/1912))
### CLI优化
- 修复:退出时防止“按ENTER继续...” ([#2555](https://github.com/NousResearch/hermes-agent/pull/2555))
- 修复:在代理循环中刷新stdout以防止macOS显示冻结 ([#1654](https://github.com/NousResearch/hermes-agent/pull/1654))
- 修复:`hermes setup` 遇到权限错误时显示人类可读错误 ([#2196](https://github.com/NousResearch/hermes-agent/pull/2196))
- 修复:`/stop` 命令崩溃 + 流式媒体交付中的UnboundLocalError ([#2463](https://github.com/NousResearch/hermes-agent/pull/2463))
- 修复:允许自定义/本地端点无需API密钥 ([#2556](https://github.com/NousResearch/hermes-agent/pull/2556))
- 修复:Kitty键盘协议Shift+Enter支持Ghostty/WezTerm(尝试+因prompt_toolkit崩溃而回滚)([#2345](https://github.com/NousResearch/hermes-agent/pull/2345), [#2349](https://github.com/NousResearch/hermes-agent/pull/2349))
### 配置
- config.yaml中的 `${ENV_VAR}` 替换 ([#2684](https://github.com/NousResearch/hermes-agent/pull/2684))
- **实时配置重载** —— config.yaml更改无需重启即可应用 ([#2210](https://github.com/NousResearch/hermes-agent/pull/2210))
- **`custom_models.yaml`** 用于用户管理的模型添加 ([#2214](https://github.com/NousResearch/hermes-agent/pull/2214))
- **基于优先级的上下文文件选择** + CLAUDE.md支持 ([#2301](https://github.com/NousResearch/hermes-agent/pull/2301))
- **合并嵌套YAML部分** 而不是在配置更新时替换 ([#2213](https://github.com/NousResearch/hermes-agent/pull/2213))
- 修复:config.yaml提供商密钥覆盖环境变量但无提示 ([#2272](https://github.com/NousResearch/hermes-agent/pull/2272))
- 修复:记录警告而非静默吞没config.yaml错误 ([#2683](https://github.com/NousResearch/hermes-agent/pull/2683))
- 修复:`hermes tools` 后禁用的工具集重新启用 ([#2268](https://github.com/NousResearch/hermes-agent/pull/2268))
- 修复:平台默认工具集静默覆盖工具取消选择 ([#2624](https://github.com/NousResearch/hermes-agent/pull/2624))
- 修复:尊重裸YAML `approvals.mode: off` ([#2620](https://github.com/NousResearch/hermes-agent/pull/2620))
- 修复:`hermes update` 使用 `.[all]` 扩展及回退 ([#1728](https://github.com/NousResearch/hermes-agent/pull/1728))
- 修复:`hermes update` 在存储冲突重置工作树前提示 ([#2390](https://github.com/NousResearch/hermes-agent/pull/2390))
- 修复:更新/安装中使用git pull --rebase避免分支分歧错误 ([#2274](https://github.com/NousResearch/hermes-agent/pull/2274))
- 修复:添加zprofile回退并在全新macOS安装时创建zshrc ([#2320](https://github.com/NousResearch/hermes-agent/pull/2320))
- 修复:移除 `ANTHROPIC_BASE_URL` 环境变量以避免冲突 ([#1675](https://github.com/NousResearch/hermes-agent/pull/1675))
- 修复:如果IMAP密码已在钥匙串或环境中则不询问 ([#2212](https://github.com/NousResearch/hermes-agent/pull/2212))
- 修复:OpenCode Zen/Go显示OpenRouter模型而非自有模型 ([#2277](https://github.com/NousResearch/hermes-agent/pull/2277))
---
## 🏗️ 核心代理与架构
### 新提供商
- **GitHub Copilot** —— 完整OAuth认证、API路由、令牌验证和40万上下文。([#1924](https://github.com/NousResearch/hermes-agent/pull/1924), [#1896](https://github.com/NousResearch/hermes-agent/pull/1896), [#1879](https://github.com/NousResearch/hermes-agent/pull/1879) by @mchzimm, [#2507](https://github.com/NousResearch/hermes-agent/pull/2507))
- **阿里云 / DashScope** —— 与DashScope v1运行时完全集成、模型点保留、401认证修复 ([#1673](https://github.com/NousResearch/hermes-agent/pull/1673), [#2332](https://github.com/NousResearch/hermes-agent/pull/2332), [#2459](https://github.com/NousResearch/hermes-agent/pull/2459))
- **Kilo Code** —— 一级推理提供商 ([#1666](https://github.com/NousResearch/hermes-agent/pull/1666))
- **OpenCode Zen和OpenCode Go** —— 新提供商后端 ([#1650](https://github.com/NousResearch/hermes-agent/pull/1650), [#2393](https://github.com/NousResearch/hermes-agent/pull/2393) by @0xbyt4)
- **NeuTTS** —— 本地TTS提供商后端,内置设置流程,替换旧的可选技能 ([#1657](https://github.com/NousResearch/hermes-agent/pull/1657), [#1664](https://github.com/NousResearch/hermes-agent/pull/1664))
### 提供商改进
- **速率限制错误时 eager fallback** 到备用模型 ([#1730](https://github.com/NousResearch/hermes-agent/pull/1730))
- **端点元数据** 用于自定义模型上下文和定价;查询本地服务器的实际上下文窗口大小 ([#1906](https://github.com/NousResearch/hermes-agent/pull/1906), [#2091](https://github.com/NousResearch/hermes-agent/pull/2091) by @dusterbloom)
- **上下文长度检测改造** —— models.dev集成、提供商感知解析、自定义端点的模糊匹配、llama.cpp的 `/v1/props` ([#2158](https://github.com/NousResearch/hermes-agent/pull/2158), [#2051](https://github.com/NousResearch/hermes-agent/pull/2051), [#2403](https://github.com/NousResearch/hermes-agent/pull/2403))
- **模型目录更新** —— gpt-5.4-mini、gpt-5.4-nano、healer-alpha、haiku-4.5、minimax-m2.7、claude 4.6 支持1M上下文 ([#1913](https://github.com/NousResearch/hermes-agent/pull/1913), [#1915](https://github.com/NousResearch/hermes-agent/pull/1915), [#1900](https://github.com/NousResearch/hermes-agent/pull/1900), [#2155](https://github.com/NousResearch/hermes-agent/pull/2155), [#2474](https://github.com/NousResearch/hermes-agent/pull/2474))
- **自定义端点改进** —— config.yaml中的 `model.base_url`、响应API的 `api_mode` 覆盖、允许无API密钥的端点、缺失密钥时快速失败 ([#2330](https://github.com/NousResearch/hermes-agent/pull/2330), [#1651](https://github.com/NousResearch/hermes-agent/pull/1651), [#2556](https://github.com/NousResearch/hermes-agent/pull/2556), [#2445](https://github.com/NousResearch/hermes-agent/pull/2445), [#1994](https://github.com/NousResearch/hermes-agent/pull/1994), [#1998](https://github.com/NousResearch/hermes-agent/pull/1998))
- 将模型和提供商注入系统提示词 ([#1929](https://github.com/NousResearch/hermes-agent/pull/1929))
- 将 `api_mode` 绑定到提供商配置而非环境变量 ([#1656](https://github.com/NousResearch/hermes-agent/pull/1656))
- 修复:防止Anthropic令牌泄漏到第三方 `anthropic_messages` 提供商 ([#2389](https://github.com/NousResearch/hermes-agent/pull/2389))
- 修复:防止Anthropic回退继承非Anthropic `base_url` ([#2388](https://github.com/NousResearch/hermes-agent/pull/2388))
- 修复:`auxiliary_is_nous` 标志从不重置 —— Nous标签泄漏到其他提供商 ([#1713](https://github.com/NousResearch/hermes-agent/pull/1713))
- 修复:Anthropic `tool_choice 'none'` 仍允许工具调用 ([#1714](https://github.com/NousResearch/hermes-agent/pull/1714))
- 修复:Mistral解析器嵌套JSON回退提取 ([#2335](https://github.com/NousResearch/hermes-agent/pull/2335))
- 修复:MiniMax 401认证通过默认使用 `anthropic_messages` 解决 ([#2103](https://github.com/NousResearch/hermes-agent/pull/2103))
- 修复:不区分大小写的模型族匹配 ([#2350](https://github.com/NousResearch/hermes-agent/pull/2350))
- 修复:激活检查中忽略占位符提供商密钥 ([#2358](https://github.com/NousResearch/hermes-agent/pull/2358))
- 修复:上下文长度检测中保留Ollama model:tag冒号 ([#2149](https://github.com/NousResearch/hermes-agent/pull/2149))
- 修复:启动时识别Claude Code OAuth凭证 ([#1663](https://github.com/NousResearch/hermes-agent/pull/1663))
- 修复:动态检测Claude Code版本以用于OAuth用户代理 ([#1670](https://github.com/NousResearch/hermes-agent/pull/1670))
- 修复:刷新/回退后OAuth标志陈旧 ([#1890](https://github.com/NousResearch/hermes-agent/pull/1890))
- 修复:辅助客户端跳过过期的Codex JWT ([#2397](https://github.com/NousResearch/hermes-agent/pull/2397))
### 代理循环
- **网关提示词缓存** —— 按会话缓存AIAgent,保留助手回合,修复会话恢复 ([#2282](https://github.com/NousResearch/hermes-agent/pull/2282), [#2284](https://github.com/NousResearch/hermes-agent/pull/2284), [#2361](https://github.com/NousResearch/hermes-agent/pull/2361))
- **上下文压缩改造** —— 结构化摘要、迭代更新、令牌预算尾部保护、可配置 `summary_base_url` ([#2323](https://github.com/NousResearch/hermes-agent/pull/2323), [#1727](https://github.com/NousResearch/hermes-agent/pull/1727), [#2224](https://github.com/NousResearch/hermes-agent/pull/2224))
- **调用前清理和调用后工具防护** ([#1732](https://github.com/NousResearch/hermes-agent/pull/1732))
- **从提供商拒绝的 `tool_choice` 自动恢复**,通过无工具调用重试 ([#2174](https://github.com/NousResearch/hermes-agent/pull/2174))
- **后台内存/技能审查** 替换内联提示 ([#2235](https://github.com/NousResearch/hermes-agent/pull/2235))
- **SOUL.md作为主要代理身份** 替代硬编码默认值 ([#1922](https://github.com/NousResearch/hermes-agent/pull/1922))
- 修复:防止上下文压缩期间工具结果静默丢失 ([#1993](https://github.com/NousResearch/hermes-agent/pull/1993))
- 修复:处理工具调用恢复中的空/空函数参数 ([#2163](https://github.com/NousResearch/hermes-agent/pull/2163))
- 修复:优雅处理API拒绝响应而非崩溃 ([#2156](https://github.com/NousResearch/hermes-agent/pull/2156))
- 修复:防止代理循环在格式错误的工具调用上卡住 ([#2114](https://github.com/NousResearch/hermes-agent/pull/2114))
- 修复:返回JSON解析错误给模型而非用空参数调度 ([#2342](https://github.com/NousResearch/hermes-agent/pull/2342))
- 修复:连续助手消息合并在混合类型时丢失内容 ([#1703](https://github.com/NousResearch/hermes-agent/pull/1703))
- 修复:JSON恢复和错误处理程序中的消息角色交替违规 ([#1722](https://github.com/NousResearch/hermes-agent/pull/1722))
- 修复:`compression_attempts` 每次迭代重置 —— 允许无限压缩 ([#1723](https://github.com/NousResearch/hermes-agent/pull/1723))
- 修复:`length_continue_retries` 从不重置 —— 后续截断获得更少重试 ([#1717](https://github.com/NousResearch/hermes-agent/pull/1717))
- 修复:压缩器摘要角色违反连续角色约束 ([#1720](https://github.com/NousResearch/hermes-agent/pull/1720), [#1743](https://github.com/NousResearch/hermes-agent/pull/1743))
- 修复:移除硬编码 `gemini-3-flash-preview` 作为默认摘要模型 ([#2464](https://github.com/NousResearch/hermes-agent/pull/2464))
- 修复:正确处理空工具结果 ([#2201](https://github.com/NousResearch/hermes-agent/pull/2201))
- 修复:`tool_calls` 列表中None条目的崩溃 ([#2209](https://github.com/NousResearch/hermes-agent/pull/2209) by @0xbyt4, [#2316](https://github.com/NousResearch/hermes-agent/pull/2316))
- 修复:工作线程中的每线程持久事件循环 ([#2214](https://github.com/NousResearch/hermes-agent/pull/2214) by @jquesnelle)
- 修复:防止异步工具并行运行时“事件循环已在运行”错误 ([#2207](https://github.com/NousResearch/hermes-agent/pull/2207))
- 修复:在源头剥离ANSI —— 在到达模型前清理终端输出 ([#2115](https://github.com/NousResearch/hermes-agent/pull/2115))
- 修复:跳过OpenRouter的顶层 `cache_control` role:tool ([#2391](https://github.com/NousResearch/hermes-agent/pull/2391))
- 修复:委托工具 —— 在子构造改变全局前保存父工具名称 ([#2083](https://github.com/NousResearch/hermes-agent/pull/2083) by @ygd58, [#1894](https://github.com/NousResearch/hermes-agent/pull/1894))
- 修复:仅当最后一条助手消息为空字符串时才剥离 ([#2326](https://github.com/NousResearch/hermes-agent/pull/2326))
### 会话与内存
- **会话搜索** 和管理斜杠命令 ([#2198](https://github.com/NousResearch/hermes-agent/pull/2198))
- **自动会话标题** 和 `.hermes.md` 项目配置 ([#1712](https://github.com/NousResearch/hermes-agent/pull/1712))
- 修复:并发内存写入静默丢弃条目 —— 添加文件锁 ([#1726](https://github.com/NousResearch/hermes-agent/pull/1726))
- 修复:`session_search` 默认搜索所有源 ([#1892](https://github.com/NousResearch/hermes-agent/pull/1892))
- 修复:处理带连字符的FTS5查询并保留带引号的文字 ([#1776](https://github.com/NousResearch/hermes-agent/pull/1776))
- 修复:`load_transcript` 中跳过损坏行而非崩溃 ([#1744](https://github.com/NousResearch/hermes-agent/pull/1744))
- 修复:规范化会话键以防止区分大小写的重复项 ([#2157](https://github.com/NousResearch/hermes-agent/pull/2157))
- 修复:防止 `session_search` 在无会话时崩溃 ([#2194](https://github.com/NousResearch/hermes-agent/pull/2194))
- 修复:新会话重置令牌计数器以准确显示使用情况 ([#2101](https://github.com/NousResearch/hermes-agent/pull/2101) by @InB4DevOps)
- 修复:防止刷新代理导致的陈旧内存覆盖 ([#2687](https://github.com/NousResearch/hermes-agent/pull/2687))
- 修复:移除合成错误消息注入,修复重复失败后的会话恢复 ([#2303](https://github.com/NousResearch/hermes-agent/pull/2303))
- 修复:带 `--resume` 的静默模式现在传递 conversation_history ([#2357](https://github.com/NousResearch/hermes-agent/pull/2357))
- 修复:统一批处理模式中的恢复逻辑 ([#2331](https://github.com/NousResearch/hermes-agent/pull/2331))
### Honcho内存
- Honcho配置修复和@上下文引用集成 ([#2343](https://github.com/NousResearch/hermes-agent/pull/2343))
- 自托管/Docker配置文档 ([#2475](https://github.com/NousResearch/hermes-agent/pull/2475))
---
## 📱 消息平台(网关)
### 新平台适配器
- **Signal Messenger** —— 完整适配器,支持附件处理、群组消息过滤和“发送给自己”回显保护 ([#2206](https://github.com/NousResearch/hermes-agent/pull/2206), [#2400](https://github.com/NousResearch/hermes-agent/pull/2400), [#2297](https://github.com/NousResearch/hermes-agent/pull/2297), [#2156](https://github.com/NousResearch/hermes-agent/pull/2156))
- **钉钉** —— 适配器含网关连接和设置文档 ([#1685](https://github.com/NousResearch/hermes-agent/pull/1685), [#1690](https://github.com/NousResearch/hermes-agent/pull/1690), [#1692](https://github.com/NousResearch/hermes-agent/pull/1692))
- **短信(Twilio)** ([#1688](https://github.com/NousResearch/hermes-agent/pull/1688))
- **Mattermost** —— 带@提及only频道过滤 ([#1683](https://github.com/NousResearch/hermes-agent/pull/1683), [#2443](https://github.com/NousResearch/hermes-agent/pull/2443))
- **Matrix** —— 支持视觉和图像缓存 ([#1683](https://github.com/NousResearch/hermes-agent/pull/1683), [#2520](https://github.com/NousResearch/hermes-agent/pull/2520))
- **Webhook** —— 外部事件触发的平台适配器 ([#2166](https://github.com/NousResearch/hermes-agent/pull/2166))
- **兼容OpenAI的API服务器** —— `/v1/chat/completions` 端点带 `/api/jobs` 定时管理 ([#1756](https://github.com/NousResearch/hermes-agent/pull/1756), [#2450](https://github.com/NousResearch/hermes-agent/pull/2450), [#2456](https://github.com/NousResearch/hermes-agent/pull/2456))
### Telegram改进
- MarkdownV2支持 —— 删除线、剧透、块引用、转义括号/花括号/反斜杠/反引号 ([#2199](https://github.com/NousResearch/hermes-agent/pull/2199), [#2200](https://github.com/NousResearch/hermes-agent/pull/2200) by @llbn, [#2386](https://github.com/NousResearch/hermes-agent/pull/2386))
- 自动检测HTML标签并使用 `parse_mode=HTML` ([#1709](https://github.com/NousResearch/hermes-agent/pull/1709))
- Telegram群组视觉支持 + 基于线程的会话 ([#2153](https://github.com/NousResearch/hermes-agent/pull/2153))
- 网络中断后自动重连轮询 ([#2517](https://github.com/NousResearch/hermes-agent/pull/2517))
- 分发前聚合分割文本消息 ([#1674](https://github.com/NousResearch/hermes-agent/pull/1674))
- 修复:流式配置桥接、未修改、洪水控制 ([#1782](https://github.com/NousResearch/hermes-agent/pull/1782), [#1783](https://github.com/NousResearch/hermes-agent/pull/1783))
- 修复:`edited_message` 事件崩溃 ([#2074](https://github.com/NousResearch/hermes-agent/pull/2074))
- 修复:放弃前重试409轮询冲突 ([#2312](https://github.com/NousResearch/hermes-agent/pull/2312))
- 修复:通过 `platform:chat_id:thread_id` 格式的主题传递 ([#2455](https://github.com/NousResearch/hermes-agent/pull/2455))
### Discord改进
- 文档缓存和文本文件注入 ([#2503](https://github.com/NousResearch/hermes-agent/pull/2503))
- DM持久输入指示器 ([#2468](https://github.com/NousResearch/hermes-agent/pull/2468))
- Discord DM视觉 —— 内联图像+附件分析 ([#2186](https://github.com/NousResearch/hermes-agent/pull/2186))
- 跨网关重启持久化线程参与 ([#1661](https://github.com/NousResearch/hermes-agent/pull/1661))
- 修复:非ASCII公会名称导致网关崩溃 ([#2302](https://github.com/NousResearch/hermes-agent/pull/2302))
- 修复:线程权限错误 ([#2073](https://github.com/NousResearch/hermes-agent/pull/2073))
- 修复:线程中的斜杠事件路由 ([#2460](https://github.com/NousResearch/hermes-agent/pull/2460))
- 修复:移除有问题的后续消息 + `/ask` 命令 ([#1836](https://github.com/NousResearch/hermes-agent/pull/1836))
- 修复:优雅WebSocket重连 ([#2127](https://github.com/NousResearch/hermes-agent/pull/2127))
- 修复:流式启用时语音频道TTS ([#2322](https://github.com/NousResearch/hermes-agent/pull/2322))
### WhatsApp与其他适配器
- WhatsApp:出站 `send_message` 路由 ([#1769](https://github.com/NousResearch/hermes-agent/pull/1769) by @sai-samarth), LID格式自聊 ([#1667](https://github.com/NousResearch/hermes-agent/pull/1667)), `reply_prefix` 配置修复 ([#1923](https://github.com/NousResearch/hermes-agent/pull/1923)), 桥接子进程退出时重启 ([#2334](https://github.com/NousResearch/hermes-agent/pull/2334)), 图像/桥接改进 ([#2181](https://github.com/NousResearch/hermes-agent/pull/2181))
- Matrix:正确的 `reply_to_message_id` 参数 ([#1895](https://github.com/NousResearch/hermes-agent/pull/1895)), 裸媒体类型修复 ([#1736](https://github.com/NousResearch/hermes-agent/pull/1736))
- Mattermost:媒体附件的MIME类型 ([#2329](https://github.com/NousResearch/hermes-agent/pull/2329))
### 网关核心
- **自动重连** 失败平台,使用指数退避 ([#2584](https://github.com/NousResearch/hermes-agent/pull/2584))
- **会话自动重置时通知用户** ([#2519](https://github.com/NousResearch/hermes-agent/pull/2519))
- **回复消息上下文** 用于会外回复 ([#1662](https://github.com/NousResearch/hermes-agent/pull/1662))
- **忽略未授权DM** 配置选项 ([#1919](https://github.com/NousResearch/hermes-agent/pull/1919))
- 修复:线程模式下的 `/reset` 重置全局会话而非线程 ([#2254](https://github.com/NousResearch/hermes-agent/pull/2254))
- 修复:流式响应后传递MEDIA:文件 ([#2382](https://github.com/NousResearch/hermes-agent/pull/2382))
- 修复:限制中断递归深度防止资源耗尽 ([#1659](https://github.com/NousResearch/hermes-agent/pull/1659))
- 修复:检测停止进程并在 `--replace` 时释放陈旧锁 ([#2406](https://github.com/NousResearch/hermes-agent/pull/2406), [#1908](https://github.com/NousResearch/hermes-agent/pull/1908))
- 修复:PID等待+强制终止用于网关重启 ([#1902](https://github.com/NousResearch/hermes-agent/pull/1902))
- 修复:防止 `--replace` 模式杀死调用进程 ([#2185](https://github.com/NousResearch/hermes-agent/pull/2185))
- 修复:`/model` 显示活动回退模型而非配置默认值 ([#1660](https://github.com/NousResearch/hermes-agent/pull/1660))
- 修复:`/title` 命令在会话尚不存在于SQLite时失败 ([#2379](https://github.com/NousResearch/hermes-agent/pull/2379) by @ten-jampa)
- 修复:代理完成后处理 `/queue` 的消息 ([#2469](https://github.com/NousResearch/hermes-agent/pull/2469))
- 修复:剥离孤立 `tool_results` + 让 `/reset` 绕过运行代理 ([#2180](https://github.com/NousResearch/hermes-agent/pull/2180))
- 修复:防止代理在systemd管理外启动网关 ([#2617](https://github.com/NousResearch/hermes-agent/pull/2617))
- 修复:防止网关连接失败时的systemd重启风暴 ([#2327](https://github.com/NousResearch/hermes-agent/pull/2327))
- 修复:systemd单元中包含解析的节点路径 ([#1767](https://github.com/NousResearch/hermes-agent/pull/1767) by @sai-samarth)
- 修复:网关外部异常处理程序中向用户发送错误详情 ([#1966](https://github.com/NousResearch/hermes-agent/pull/1966))
- 修复:改进429使用限制和500上下文溢出的错误处理 ([#1839](https://github.com/NousResearch/hermes-agent/pull/1839))
- 修复:启动检查中添加所有缺失的平台允许列表环境变量 ([#2628](https://github.com/NousResearch/hermes-agent/pull/2628))
- 修复:包含空格的文件路径媒体传递失败 ([#2621](https://github.com/NousResearch/hermes-agent/pull/2621))
- 修复:多平台网关中的重复会话键冲突 ([#2171](https://github.com/NousResearch/hermes-agent/pull/2171))
- 修复:Matrix和Mattermost从不报告已连接 ([#1711](https://github.com/NousResearch/hermes-agent/pull/1711))
- 修复:PII编辑配置从不读取 —— 缺少yaml导入 ([#1701](https://github.com/NousResearch/hermes-agent/pull/1701))
- 修复:技能斜杠命令中的NameError ([#1697](https://github.com/NousResearch/hermes-agent/pull/1697))
- 修复:检查点中持久化监视器元数据以用于崩溃恢复 ([#1706](https://github.com/NousResearch/hermes-agent/pull/1706))
- 修复:在 `send_image_file`、`send_document`、`send_video` 中传递 `message_thread_id` ([#2339](https://github.com/NousResearch/hermes-agent/pull/2339))
- 修复:快速连续照片消息的媒体组聚合 ([#2160](https://github.com/NousResearch/hermes-agent/pull/2160))
---
## 🔧 工具系统
### MCP增强
- **MCP服务器管理CLI** + OAuth 2.1 PKCE认证 ([#2465](https://github.com/NousResearch/hermes-agent/pull/2465))
- **将MCP服务器暴露为独立工具集** ([#1907](https://github.com/NousResearch/hermes-agent/pull/1907))
- **`hermes tools` 中的交互式MCP工具配置** ([#1694](https://github.com/NousResearch/hermes-agent/pull/1694))
- 修复:MCP-OAuth端口不匹配、路径遍历和共享处理程序状态 ([#2552](https://github.com/NousResearch/hermes-agent/pull/2552))
- 修复:跨会话重置保留MCP工具注册 ([#2124](https://github.com/NousResearch/hermes-agent/pull/2124))
- 修复:并发文件访问崩溃 + 重复MCP注册 ([#2154](https://github.com/NousResearch/hermes-agent/pull/2154))
- 修复:规范化MCP模式 + 扩展会话列表列 ([#2102](https://github.com/NousResearch/hermes-agent/pull/2102))
- 修复:`tool_choice` `mcp_` 前缀处理 ([#1775](https://github.com/NousResearch/hermes-agent/pull/1775))
### Web工具后端
- **Tavily** 作为Web搜索/提取/爬取后端 ([#1731](https://github.com/NousResearch/hermes-agent/pull/1731))
- **Parallel** 作为替代Web搜索/提取后端 ([#1696](https://github.com/NousResearch/hermes-agent/pull/1696))
- **可配置Web后端** —— Firecrawl/BeautifulSoup/Playwright选择 ([#2256](https://github.com/NousResearch/hermes-agent/pull/2256))
- 修复:仅空白环境变量绕过Web后端检测 ([#2341](https://github.com/NousResearch/hermes-agent/pull/2341))
### 新工具
- **IMAP邮件** 读取和发送 ([#2173](https://github.com/NousResearch/hermes-agent/pull/2173))
- **STT(语音转文本)** 工具使用Whisper API ([#2072](https://github.com/NousResearch/hermes-agent/pull/2072))
- **路由感知定价估算** ([#1695](https://github.com/NousResearch/hermes-agent/pull/1695))
### 工具改进
- TTS:OpenAI TTS提供商的 `base_url` 支持 ([#2064](https://github.com/NousResearch/hermes-agent/pull/2064) by @hanai)
- 视觉:可配置超时、文件路径中的波浪号扩展、DM视觉支持多图像和base64回退 ([#2480](https://github.com/NousResearch/hermes-agent/pull/2480), [#2585](https://github.com/NousResearch/hermes-agent/pull/2585), [#2211](https://github.com/NousResearch/hermes-agent/pull/2211))
- 浏览器:会话创建中的竞争条件修复 ([#1721](https://github.com/NousResearch/hermes-agent/pull/1721)), 意外LLM参数的TypeError ([#1735](https://github.com/NousResearch/hermes-agent/pull/1735))
- 文件工具:在 `write_file` 和补丁内容中剥离ANSI转义码 ([#2532](https://github.com/NousResearch/hermes-agent/pull/2532)), 重复搜索键中包含分页参数 ([#1824](https://github.com/NousResearch/hermes-agent/pull/1824) by @cutepawss), 改进模糊匹配精度+位置计算重构 ([#2096](https://github.com/NousResearch/hermes-agent/pull/2096), [#1681](https://github.com/NousResearch/hermes-agent/pull/1681))
- 代码执行:资源泄漏和双套接字关闭修复 ([#2381](https://github.com/NousResearch/hermes-agent/pull/2381))
- 委托:并发子代理委托的线程安全 ([#1672](https://github.com/NousResearch/hermes-agent/pull/1672)), 委托后保留父代理的工具列表 ([#1778](https://github.com/NousResearch/hermes-agent/pull/1778))
- 修复:使并发工具批处理感知文件突变路径 ([#1914](https://github.com/NousResearch/hermes-agent/pull/1914))
- 修复:在平台分发前分块长消息 `send_message_tool` ([#1646](https://github.com/NousResearch/hermes-agent/pull/1646))
- 修复:添加缺失的 'messaging' 工具集 ([#1718](https://github.com/NousResearch/hermes-agent/pull/1718))
- 修复:防止不可用工具名称泄漏到模型模式 ([#2072](https://github.com/NousResearch/hermes-agent/pull/2072))
- 修复:按引用传递访问集以防止菱形依赖重复 ([#2311](https://github.com/NousResearch/hermes-agent/pull/2311))
- 修复:Daytona沙箱查找从 `find_one` 迁移到 `get/list` ([#2063](https://github.com/NousResearch/hermes-agent/pull/2063) by @rovle)
---
## 🧩 技能生态
### 技能系统改进
- **代理创建的技能** —— 允许谨慎级发现,危险技能询问而非阻止 ([#1840](https://github.com/NousResearch/hermes-agent/pull/1840), [#2446](https://github.com/NousResearch/hermes-agent/pull/2446))
- **`--yes` 标志** 绕过 `/skills install` 和卸载的确认 ([#1647](https://github.com/NousResearch/hermes-agent/pull/1647))
- **禁用的技能** 在横幅、系统提示词和斜杠命令中均受尊重 ([#1897](https://github.com/NousResearch/hermes-agent/pull/1897))
- 修复:技能 custom_tools 导入崩溃 + 沙箱 file_tools 集成 ([#2239](https://github.com/NousResearch/hermes-agent/pull/2239))
- 修复:带pip需求的代理创建技能安装时崩溃 ([#2145](https://github.com/NousResearch/hermes-agent/pull/2145))
- 修复:`hub.yaml` 缺失时 `Skills.__init__` 中的竞争条件 ([#2242](https://github.com/NousResearch/hermes-agent/pull/2242))
- 修复:安装前验证技能元数据并阻止重复 ([#2241](https://github.com/NousResearch/hermes-agent/pull/2241))
- 修复:技能中心检查/解析 —— 检查、重定向、发现、tap列表中的4个bug ([#2447](https://github.com/NousResearch/hermes-agent/pull/2447))
- 修复:代理创建的技能在会话重置后继续工作 ([#2121](https://github.com/NousResearch/hermes-agent/pull/2121))
### 新技能
- **OCR-and-documents** —— PDF/DOCX/XLS/PPTX/图像OCR,可选GPU ([#2236](https://github.com/NousResearch/hermes-agent/pull/2236), [#2461](https://github.com/NousResearch/hermes-agent/pull/2461))
- **Huggingface-hub** 捆绑技能 ([#1921](https://github.com/NousResearch/hermes-agent/pull/1921))
- **Sherlock OSINT** 用户名搜索 ([#1671](https://github.com/NousResearch/hermes-agent/pull/1671))
- **Meme-generation** —— 使用Pillow的图像生成器 ([#2344](https://github.com/NousResearch/hermes-agent/pull/2344))
- **Bioinformatics** 网关技能 —— 索引至400+生物技能 ([#2387](https://github.com/NousResearch/hermes-agent/pull/2387))
- **Inference.sh** 技能(终端基础)([#1686](https://github.com/NousResearch/hermes-agent/pull/1686))
- **Base blockchain** 可选技能 ([#1643](https://github.com/NousResearch/hermes-agent/pull/1643))
- **3D-model-viewer** 可选技能 ([#2226](https://github.com/NousResearch/hermes-agent/pull/2226))
- **FastMCP** 可选技能 ([#2113](https://github.com/NousResearch/hermes-agent/pull/2113))
- **Hermes-agent-setup** 技能 ([#1905](https://github.com/NousResearch/hermes-agent/pull/1905))
---
## 🔌 插件系统增强
- **TUI扩展钩子** —— 在Hermes之上构建自定义CLI ([#2333](https://github.com/NousResearch/hermes-agent/pull/2333))
- **`hermes plugins install/remove/list` 命令** ([#2337](https://github.com/NousResearch/hermes-agent/pull/2337))
- **插件的斜杠命令注册** ([#2359](https://github.com/NousResearch/hermes-agent/pull/2359))
- **`session:end` 生命周期事件** 钩子 ([#1725](https://github.com/NousResearch/hermes-agent/pull/1725))
- 修复:要求项目插件发现选择加入 ([#2215](https://github.com/NousResearch/hermes-agent/pull/2215))
---
## 🔒 安全与可靠性
### 安全
- **视觉工具和Web工具的SSRF保护** ([#2679](https://github.com/NousResearch/hermes-agent/pull/2679))
- **`_expand_path` 中的Shell注入预防** 通过 `~user` 路径后缀 ([#2685](https://github.com/NousResearch/hermes-agent/pull/2685))
- **阻止不受信任的浏览器源** API服务器访问 ([#2451](https://github.com/NousResearch/hermes-agent/pull/2451))
- **阻止沙箱后端凭据** 进入子进程环境 ([#1658](https://github.com/NousResearch/hermes-agent/pull/1658))
- **阻止@引用** 读取工作区外的秘密 ([#2601](https://github.com/NousResearch/hermes-agent/pull/2601) by @Gutslabs)
- **终端工具的恶意代码模式预执行扫描器** ([#2245](https://github.com/NousResearch/hermes-agent/pull/2245))
- **加强终端安全** 和沙箱文件写入 ([#1653](https://github.com/NousResearch/hermes-agent/pull/1653))
- **PKCE验证器泄漏** 修复 + OAuth刷新Content-Type ([#1775](https://github.com/NousResearch/hermes-agent/pull/1775))
- **消除SQL字符串格式化** 在 `execute()` 调用中 ([#2061](https://github.com/NousResearch/hermes-agent/pull/2061) by @dusterbloom)
- **加强作业API** —— 输入限制、字段白名单、启动检查 ([#2456](https://github.com/NousResearch/hermes-agent/pull/2456))
### 可靠性
- 4个SessionDB方法的线程锁 ([#1704](https://github.com/NousResearch/hermes-agent/pull/1704))
- 并发内存写入的文件锁 ([#1726](https://github.com/NousResearch/hermes-agent/pull/1726))
- 优雅处理OpenRouter错误 ([#2112](https://github.com/NousResearch/hermes-agent/pull/2112))
- 保护print()调用免受OSError ([#1668](https://github.com/NousResearch/hermes-agent/pull/1668))
- 编辑格式化程序中安全处理非字符串输入 ([#2392](https://github.com/NousResearch/hermes-agent/pull/2392), [#1700](https://github.com/NousResearch/hermes-agent/pull/1700))
- ACP:模型切换时保留会话提供商,将会话持久化到磁盘 ([#2380](https://github.com/NousResearch/hermes-agent/pull/2380), [#2071](https://github.com/NousResearch/hermes-agent/pull/2071))
- API服务器:跨重启将ResponseStore持久化到SQLite ([#2472](https://github.com/NousResearch/hermes-agent/pull/2472))
- 修复:`fetch_nous_models` 因位置参数始终TypeError ([#1699](https://github.com/NousResearch/hermes-agent/pull/1699))
- 修复:解决cli.py中的合并冲突标记导致启动失败 ([#2347](https://github.com/NousResearch/hermes-agent/pull/2347))
- 修复:wheel中缺少 `minisweagent_path.py` ([#2098](https://github.com/NousResearch/hermes-agent/pull/2098) by @JiwaniZakir)
### 定时系统
- **`[SILENT]` 响应** —— cron代理可抑制交付 ([#1833](https://github.com/NousResearch/hermes-agent/pull/1833))
- **缩放错过作业的宽限期** 与计划频率 ([#2449](https://github.com/NousResearch/hermes-agent/pull/2449))
- **恢复最近的一次性作业** ([#1918](https://github.com/NousResearch/hermes-agent/pull/1918))
- 修复:规范化 `repeat<=0` 为None —— LLM传递-1时作业首次运行后删除 ([#2612](https://github.com/NousResearch/hermes-agent/pull/2612) by @Mibayy)
- 修复:Matrix添加到调度器交付platform_map ([#2167](https://github.com/NousResearch/hermes-agent/pull/2167) by @buntingszn)
- 修复:无时区的朴素ISO时间戳 —— 作业在错误时间触发 ([#1729](https://github.com/NousResearch/hermes-agent/pull/1729))
- 修复:`get_due_jobs` 读取 `jobs.json` 两次 —— 竞争条件 ([#1716](https://github.com/NousResearch/hermes-agent/pull/1716))
- 修复:静默作业返回空响应以跳过交付 ([#2442](https://github.com/NousResearch/hermes-agent/pull/2442))
- 修复:停止将cron输出注入网关会话历史 ([#2313](https://github.com/NousResearch/hermes-agent/pull/2313))
- 修复:`asyncio.run()` 引发RuntimeError时关闭废弃协程 ([#2317](https://github.com/NousResearch/hermes-agent/pull/2317))
---
## 🧪 测试
- 解决所有持续失败的测试 ([#2488](https://github.com/NousResearch/hermes-agent/pull/2488))
- 用 `monkeypatch` 替换 `FakePath` 以兼容Python 3.12 ([#2444](https://github.com/NousResearch/hermes-agent/pull/2444))
- 对齐Hermes设置和完整套件预期 ([#1710](https://github.com/NousResearch/hermes-agent/pull/1710))
---
## 📚 文档
- 近期功能的综合文档更新 ([#1693](https://github.com/NousResearch/hermes-agent/pull/1693), [#2183](https://github.com/NousResearch/hermes-agent/pull/2183))
- 阿里云和钉钉设置指南 ([#1687](https://github.com/NousResearch/hermes-agent/pull/1687), [#1692](https://github.com/NousResearch/hermes-agent/pull/1692))
- 详细技能文档 ([#2244](https://github.com/NousResearch/hermes-agent/pull/2244))
- Honcho自托管/Docker配置 ([#2475](https://github.com/NousResearch/hermes-agent/pull/2475))
- 上下文长度检测FAQ和快速入门参考 ([#2179](https://github.com/NousResearch/hermes-agent/pull/2179))
- 修复参考和用户指南中的文档不一致 ([#1995](https://github.com/NousResearch/hermes-agent/pull/1995))
- 修复MCP安装命令 —— 使用uv而非裸pip ([#1909](https://github.com/NousResearch/hermes-agent/pull/1909))
- 用Mermaid/列表替换ASCII图表 ([#2402](https://github.com/NousResearch/hermes-agent/pull/2402))
- Gemini OAuth提供商实施计划 ([#2467](https://github.com/NousResearch/hermes-agent/pull/2467))
- Discord服务器成员意图标记为必需 ([#2330](https://github.com/NousResearch/hermes-agent/pull/2330))
- 修复api-server.md中的MDX构建错误 ([#1787](https://github.com/NousResearch/hermes-agent/pull/1787))
- 对齐venv路径以匹配安装程序 ([#2114](https://github.com/NousResearch/hermes-agent/pull/2114))
- 新技能添加到中心索引 ([#2281](https://github.com/NousResearch/hermes-agent/pull/2281))
---
## 👥 贡献者
### 核心
- **@teknium1** (Teknium) —— 280个PR
### 社区贡献者
- **@mchzimm** (to_the_max) —— GitHub Copilot提供商集成 ([#1879](https://github.com/NousResearch/hermes-agent/pull/1879))
- **@jquesnelle** (Jeffrey Quesnelle) —— 每线程持久事件循环修复 ([#2214](https://github.com/NousResearch/hermes-agent/pull/2214))
- **@llbn** (lbn) —— Telegram MarkdownV2删除线、剧透、块引用和转义修复 ([#2199](https://github.com/NousResearch/hermes-agent/pull/2199), [#2200](https://github.com/NousResearch/hermes-agent/pull/2200))
- **@dusterbloom** —— SQL注入预防 + 本地服务器上下文窗口查询 ([#2061](https://github.com/NousResearch/hermes-agent/pull/2061), [#2091](https://github.com/NousResearch/hermes-agent/pull/2091))
- **@0xbyt4** —— Anthropic tool_calls None保护 + OpenCode-Go提供商配置修复 ([#2209](https://github.com/NousResearch/hermes-agent/pull/2209), [#2393](https://github.com/NousResearch/hermes-agent/pull/2393))
- **@sai-samarth** (Saisamarth) —— WhatsApp send_message路由 + systemd节点路径 ([#1769](https://github.com/NousResearch/hermes-agent/pull/1769), [#1767](https://github.com/NousResearch/hermes-agent/pull/1767))
- **@Gutslabs** (Guts) —— 阻止@引用读取秘密 ([#2601](https://github.com/NousResearch/hermes-agent/pull/2601))
- **@Mibayy** (Mibay) —— 定时作业重复规范化 ([#2612](https://github.com/NousResearch/hermes-agent/pull/2612))
- **@ten-jampa** (Tenzin Jampa) —— 网关 `/title` 命令修复 ([#2379](https://github.com/NousResearch/hermes-agent/pull/2379))
- **@cutepawss** (lila) —— 文件工具搜索分页修复 ([#1824](https://github.com/NousResearch/hermes-agent/pull/1824))
- **@hanai** (Hanai) —— OpenAI TTS base_url支持 ([#2064](https://github.com/NousResearch/hermes-agent/pull/2064))
- **@rovle** (Lovre Pešut) —— Daytona沙箱API迁移 ([#2063](https://github.com/NousResearch/hermes-agent/pull/2063))
- **@buntingszn** (bunting szn) —— Matrix定时交付支持 ([#2167](https://github.com/NousResearch/hermes-agent/pull/2167))
- **@InB4DevOps** —— 新会话重置令牌计数器 ([#2101](https://github.com/NousResearch/hermes-agent/pull/2101))
- **@JiwaniZakir** (Zakir Jiwani) —— wheel中缺失文件修复 ([#2098](https://github.com/NousResearch/hermes-agent/pull/2098))
- **@ygd58** (buray) —— 委托工具父工具名称修复 ([#2083](https://github.com/NousResearch/hermes-agent/pull/2083))
---
**完整更新日志**: [v2026.3.17...v2026.3.23](https://github.com/NousResearch/hermes-agent/compare/v2026.3.17...v2026.3.23)
# Hermes Agent v0.4.0 (v2026.3.23)
**Release Date:** March 23, 2026
> The platform expansion release — OpenAI-compatible API server, 6 new messaging adapters, 4 new inference providers, MCP server management with OAuth 2.1, @ context references, gateway prompt caching, streaming enabled by default, and a sweeping reliability pass with 200+ bug fixes.
---
## ✨ Highlights
- **OpenAI-compatible API server** — Expose Hermes as an `/v1/chat/completions` endpoint with a new `/api/jobs` REST API for cron job management, hardened with input limits, field whitelists, SQLite-backed response persistence, and CORS origin protection ([#1756](https://github.com/NousResearch/hermes-agent/pull/1756), [#2450](https://github.com/NousResearch/hermes-agent/pull/2450), [#2456](https://github.com/NousResearch/hermes-agent/pull/2456), [#2451](https://github.com/NousResearch/hermes-agent/pull/2451), [#2472](https://github.com/NousResearch/hermes-agent/pull/2472))
- **6 new messaging platform adapters** — Signal, DingTalk, SMS (Twilio), Mattermost, Matrix, and Webhook adapters join Telegram, Discord, and WhatsApp. Gateway auto-reconnects failed platforms with exponential backoff ([#2206](https://github.com/NousResearch/hermes-agent/pull/2206), [#1685](https://github.com/NousResearch/hermes-agent/pull/1685), [#1688](https://github.com/NousResearch/hermes-agent/pull/1688), [#1683](https://github.com/NousResearch/hermes-agent/pull/1683), [#2166](https://github.com/NousResearch/hermes-agent/pull/2166), [#2584](https://github.com/NousResearch/hermes-agent/pull/2584))
- **@ context references** — Claude Code-style `@file` and `@url` context injection with tab completions in the CLI ([#2343](https://github.com/NousResearch/hermes-agent/pull/2343), [#2482](https://github.com/NousResearch/hermes-agent/pull/2482))
- **4 new inference providers** — GitHub Copilot (OAuth + token validation), Alibaba Cloud / DashScope, Kilo Code, and OpenCode Zen/Go ([#1924](https://github.com/NousResearch/hermes-agent/pull/1924), [#1879](https://github.com/NousResearch/hermes-agent/pull/1879) by @mchzimm, [#1673](https://github.com/NousResearch/hermes-agent/pull/1673), [#1666](https://github.com/NousResearch/hermes-agent/pull/1666), [#1650](https://github.com/NousResearch/hermes-agent/pull/1650))
- **MCP server management CLI** — `hermes mcp` commands for installing, configuring, and authenticating MCP servers with full OAuth 2.1 PKCE flow ([#2465](https://github.com/NousResearch/hermes-agent/pull/2465))
- **Gateway prompt caching** — Cache AIAgent instances per session, preserving Anthropic prompt cache across turns for dramatic cost reduction on long conversations ([#2282](https://github.com/NousResearch/hermes-agent/pull/2282), [#2284](https://github.com/NousResearch/hermes-agent/pull/2284), [#2361](https://github.com/NousResearch/hermes-agent/pull/2361))
- **Context compression overhaul** — Structured summaries with iterative updates, token-budget tail protection, configurable summary endpoint, and fallback model support ([#2323](https://github.com/NousResearch/hermes-agent/pull/2323), [#1727](https://github.com/NousResearch/hermes-agent/pull/1727), [#2224](https://github.com/NousResearch/hermes-agent/pull/2224))
- **Streaming enabled by default** — CLI streaming on by default with proper spinner/tool progress display during streaming mode, plus extensive linebreak and concatenation fixes ([#2340](https://github.com/NousResearch/hermes-agent/pull/2340), [#2161](https://github.com/NousResearch/hermes-agent/pull/2161), [#2258](https://github.com/NousResearch/hermes-agent/pull/2258))
---
## 🖥️ CLI & User Experience
### New Commands & Interactions
- **@ context completions** — Tab-completable `@file`/`@url` references that inject file content or web pages into the conversation ([#2482](https://github.com/NousResearch/hermes-agent/pull/2482), [#2343](https://github.com/NousResearch/hermes-agent/pull/2343))
- **`/statusbar`** — Toggle a persistent config bar showing model + provider info in the prompt ([#2240](https://github.com/NousResearch/hermes-agent/pull/2240), [#1917](https://github.com/NousResearch/hermes-agent/pull/1917))
- **`/queue`** — Queue prompts for the agent without interrupting the current run ([#2191](https://github.com/NousResearch/hermes-agent/pull/2191), [#2469](https://github.com/NousResearch/hermes-agent/pull/2469))
- **`/permission`** — Switch approval mode dynamically during a session ([#2207](https://github.com/NousResearch/hermes-agent/pull/2207))
- **`/browser`** — Interactive browser sessions from the CLI ([#2273](https://github.com/NousResearch/hermes-agent/pull/2273), [#1814](https://github.com/NousResearch/hermes-agent/pull/1814))
- **`/cost`** — Live pricing and usage tracking in gateway mode ([#2180](https://github.com/NousResearch/hermes-agent/pull/2180))
- **`/approve` and `/deny`** — Replaced bare text approval in gateway with explicit commands ([#2002](https://github.com/NousResearch/hermes-agent/pull/2002))
### Streaming & Display
- Streaming enabled by default in CLI ([#2340](https://github.com/NousResearch/hermes-agent/pull/2340))
- Show spinners and tool progress during streaming mode ([#2161](https://github.com/NousResearch/hermes-agent/pull/2161))
- Show reasoning/thinking blocks when `show_reasoning` enabled ([#2118](https://github.com/NousResearch/hermes-agent/pull/2118))
- Context pressure warnings for CLI and gateway ([#2159](https://github.com/NousResearch/hermes-agent/pull/2159))
- Fix: streaming chunks concatenated without whitespace ([#2258](https://github.com/NousResearch/hermes-agent/pull/2258))
- Fix: iteration boundary linebreak prevents stream concatenation ([#2413](https://github.com/NousResearch/hermes-agent/pull/2413))
- Fix: defer streaming linebreak to prevent blank line stacking ([#2473](https://github.com/NousResearch/hermes-agent/pull/2473))
- Fix: suppress spinner animation in non-TTY environments ([#2216](https://github.com/NousResearch/hermes-agent/pull/2216))
- Fix: display provider and endpoint in API error messages ([#2266](https://github.com/NousResearch/hermes-agent/pull/2266))
- Fix: resolve garbled ANSI escape codes in status printouts ([#2448](https://github.com/NousResearch/hermes-agent/pull/2448))
- Fix: update gold ANSI color to true-color format ([#2246](https://github.com/NousResearch/hermes-agent/pull/2246))
- Fix: normalize toolset labels and use skin colors in banner ([#1912](https://github.com/NousResearch/hermes-agent/pull/1912))
### CLI Polish
- Fix: prevent 'Press ENTER to continue...' on exit ([#2555](https://github.com/NousResearch/hermes-agent/pull/2555))
- Fix: flush stdout during agent loop to prevent macOS display freeze ([#1654](https://github.com/NousResearch/hermes-agent/pull/1654))
- Fix: show human-readable error when `hermes setup` hits permissions error ([#2196](https://github.com/NousResearch/hermes-agent/pull/2196))
- Fix: `/stop` command crash + UnboundLocalError in streaming media delivery ([#2463](https://github.com/NousResearch/hermes-agent/pull/2463))
- Fix: allow custom/local endpoints without API key ([#2556](https://github.com/NousResearch/hermes-agent/pull/2556))
- Fix: Kitty keyboard protocol Shift+Enter for Ghostty/WezTerm (attempted + reverted due to prompt_toolkit crash) ([#2345](https://github.com/NousResearch/hermes-agent/pull/2345), [#2349](https://github.com/NousResearch/hermes-agent/pull/2349))
### Configuration
- **`${ENV_VAR}` substitution** in config.yaml ([#2684](https://github.com/NousResearch/hermes-agent/pull/2684))
- **Real-time config reload** — config.yaml changes apply without restart ([#2210](https://github.com/NousResearch/hermes-agent/pull/2210))
- **`custom_models.yaml`** for user-managed model additions ([#2214](https://github.com/NousResearch/hermes-agent/pull/2214))
- **Priority-based context file selection** + CLAUDE.md support ([#2301](https://github.com/NousResearch/hermes-agent/pull/2301))
- **Merge nested YAML sections** instead of replacing on config update ([#2213](https://github.com/NousResearch/hermes-agent/pull/2213))
- Fix: config.yaml provider key overrides env var silently ([#2272](https://github.com/NousResearch/hermes-agent/pull/2272))
- Fix: log warning instead of silently swallowing config.yaml errors ([#2683](https://github.com/NousResearch/hermes-agent/pull/2683))
- Fix: disabled toolsets re-enable themselves after `hermes tools` ([#2268](https://github.com/NousResearch/hermes-agent/pull/2268))
- Fix: platform default toolsets silently override tool deselection ([#2624](https://github.com/NousResearch/hermes-agent/pull/2624))
- Fix: honor bare YAML `approvals.mode: off` ([#2620](https://github.com/NousResearch/hermes-agent/pull/2620))
- Fix: `hermes update` use `.[all]` extras with fallback ([#1728](https://github.com/NousResearch/hermes-agent/pull/1728))
- Fix: `hermes update` prompt before resetting working tree on stash conflicts ([#2390](https://github.com/NousResearch/hermes-agent/pull/2390))
- Fix: use git pull --rebase in update/install to avoid divergent branch error ([#2274](https://github.com/NousResearch/hermes-agent/pull/2274))
- Fix: add zprofile fallback and create zshrc on fresh macOS installs ([#2320](https://github.com/NousResearch/hermes-agent/pull/2320))
- Fix: remove `ANTHROPIC_BASE_URL` env var to avoid collisions ([#1675](https://github.com/NousResearch/hermes-agent/pull/1675))
- Fix: don't ask IMAP password if already in keyring or env ([#2212](https://github.com/NousResearch/hermes-agent/pull/2212))
- Fix: OpenCode Zen/Go show OpenRouter models instead of their own ([#2277](https://github.com/NousResearch/hermes-agent/pull/2277))
---
## 🏗️ Core Agent & Architecture
### New Providers
- **GitHub Copilot** — Full OAuth auth, API routing, token validation, and 400k context. ([#1924](https://github.com/NousResearch/hermes-agent/pull/1924), [#1896](https://github.com/NousResearch/hermes-agent/pull/1896), [#1879](https://github.com/NousResearch/hermes-agent/pull/1879) by @mchzimm, [#2507](https://github.com/NousResearch/hermes-agent/pull/2507))
- **Alibaba Cloud / DashScope** — Full integration with DashScope v1 runtime, model dot preservation, and 401 auth fixes ([#1673](https://github.com/NousResearch/hermes-agent/pull/1673), [#2332](https://github.com/NousResearch/hermes-agent/pull/2332), [#2459](https://github.com/NousResearch/hermes-agent/pull/2459))
- **Kilo Code** — First-class inference provider ([#1666](https://github.com/NousResearch/hermes-agent/pull/1666))
- **OpenCode Zen and OpenCode Go** — New provider backends ([#1650](https://github.com/NousResearch/hermes-agent/pull/1650), [#2393](https://github.com/NousResearch/hermes-agent/pull/2393) by @0xbyt4)
- **NeuTTS** — Local TTS provider backend with built-in setup flow, replacing the old optional skill ([#1657](https://github.com/NousResearch/hermes-agent/pull/1657), [#1664](https://github.com/NousResearch/hermes-agent/pull/1664))
### Provider Improvements
- **Eager fallback** to backup model on rate-limit errors ([#1730](https://github.com/NousResearch/hermes-agent/pull/1730))
- **Endpoint metadata** for custom model context and pricing; query local servers for actual context window size ([#1906](https://github.com/NousResearch/hermes-agent/pull/1906), [#2091](https://github.com/NousResearch/hermes-agent/pull/2091) by @dusterbloom)
- **Context length detection overhaul** — models.dev integration, provider-aware resolution, fuzzy matching for custom endpoints, `/v1/props` for llama.cpp ([#2158](https://github.com/NousResearch/hermes-agent/pull/2158), [#2051](https://github.com/NousResearch/hermes-agent/pull/2051), [#2403](https://github.com/NousResearch/hermes-agent/pull/2403))
- **Model catalog updates** — gpt-5.4-mini, gpt-5.4-nano, healer-alpha, haiku-4.5, minimax-m2.7, claude 4.6 at 1M context ([#1913](https://github.com/NousResearch/hermes-agent/pull/1913), [#1915](https://github.com/NousResearch/hermes-agent/pull/1915), [#1900](https://github.com/NousResearch/hermes-agent/pull/1900), [#2155](https://github.com/NousResearch/hermes-agent/pull/2155), [#2474](https://github.com/NousResearch/hermes-agent/pull/2474))
- **Custom endpoint improvements** — `model.base_url` in config.yaml, `api_mode` override for responses API, allow endpoints without API key, fail fast on missing keys ([#2330](https://github.com/NousResearch/hermes-agent/pull/2330), [#1651](https://github.com/NousResearch/hermes-agent/pull/1651), [#2556](https://github.com/NousResearch/hermes-agent/pull/2556), [#2445](https://github.com/NousResearch/hermes-agent/pull/2445), [#1994](https://github.com/NousResearch/hermes-agent/pull/1994), [#1998](https://github.com/NousResearch/hermes-agent/pull/1998))
- Inject model and provider into system prompt ([#1929](https://github.com/NousResearch/hermes-agent/pull/1929))
- Tie `api_mode` to provider config instead of env var ([#1656](https://github.com/NousResearch/hermes-agent/pull/1656))
- Fix: prevent Anthropic token leaking to third-party `anthropic_messages` providers ([#2389](https://github.com/NousResearch/hermes-agent/pull/2389))
- Fix: prevent Anthropic fallback from inheriting non-Anthropic `base_url` ([#2388](https://github.com/NousResearch/hermes-agent/pull/2388))
- Fix: `auxiliary_is_nous` flag never resets — leaked Nous tags to other providers ([#1713](https://github.com/NousResearch/hermes-agent/pull/1713))
- Fix: Anthropic `tool_choice 'none'` still allowed tool calls ([#1714](https://github.com/NousResearch/hermes-agent/pull/1714))
- Fix: Mistral parser nested JSON fallback extraction ([#2335](https://github.com/NousResearch/hermes-agent/pull/2335))
- Fix: MiniMax 401 auth resolved by defaulting to `anthropic_messages` ([#2103](https://github.com/NousResearch/hermes-agent/pull/2103))
- Fix: case-insensitive model family matching ([#2350](https://github.com/NousResearch/hermes-agent/pull/2350))
- Fix: ignore placeholder provider keys in activation checks ([#2358](https://github.com/NousResearch/hermes-agent/pull/2358))
- Fix: Preserve Ollama model:tag colons in context length detection ([#2149](https://github.com/NousResearch/hermes-agent/pull/2149))
- Fix: recognize Claude Code OAuth credentials in startup gate ([#1663](https://github.com/NousResearch/hermes-agent/pull/1663))
- Fix: detect Claude Code version dynamically for OAuth user-agent ([#1670](https://github.com/NousResearch/hermes-agent/pull/1670))
- Fix: OAuth flag stale after refresh/fallback ([#1890](https://github.com/NousResearch/hermes-agent/pull/1890))
- Fix: auxiliary client skips expired Codex JWT ([#2397](https://github.com/NousResearch/hermes-agent/pull/2397))
### Agent Loop
- **Gateway prompt caching** — Cache AIAgent per session, keep assistant turns, fix session restore ([#2282](https://github.com/NousResearch/hermes-agent/pull/2282), [#2284](https://github.com/NousResearch/hermes-agent/pull/2284), [#2361](https://github.com/NousResearch/hermes-agent/pull/2361))
- **Context compression overhaul** — Structured summaries, iterative updates, token-budget tail protection, configurable `summary_base_url` ([#2323](https://github.com/NousResearch/hermes-agent/pull/2323), [#1727](https://github.com/NousResearch/hermes-agent/pull/1727), [#2224](https://github.com/NousResearch/hermes-agent/pull/2224))
- **Pre-call sanitization and post-call tool guardrails** ([#1732](https://github.com/NousResearch/hermes-agent/pull/1732))
- **Auto-recover** from provider-rejected `tool_choice` by retrying without ([#2174](https://github.com/NousResearch/hermes-agent/pull/2174))
- **Background memory/skill review** replaces inline nudges ([#2235](https://github.com/NousResearch/hermes-agent/pull/2235))
- **SOUL.md as primary agent identity** instead of hardcoded default ([#1922](https://github.com/NousResearch/hermes-agent/pull/1922))
- Fix: prevent silent tool result loss during context compression ([#1993](https://github.com/NousResearch/hermes-agent/pull/1993))
- Fix: handle empty/null function arguments in tool call recovery ([#2163](https://github.com/NousResearch/hermes-agent/pull/2163))
- Fix: handle API refusal responses gracefully instead of crashing ([#2156](https://github.com/NousResearch/hermes-agent/pull/2156))
- Fix: prevent stuck agent loop on malformed tool calls ([#2114](https://github.com/NousResearch/hermes-agent/pull/2114))
- Fix: return JSON parse error to model instead of dispatching with empty args ([#2342](https://github.com/NousResearch/hermes-agent/pull/2342))
- Fix: consecutive assistant message merge drops content on mixed types ([#1703](https://github.com/NousResearch/hermes-agent/pull/1703))
- Fix: message role alternation violations in JSON recovery and error handler ([#1722](https://github.com/NousResearch/hermes-agent/pull/1722))
- Fix: `compression_attempts` resets each iteration — allowed unlimited compressions ([#1723](https://github.com/NousResearch/hermes-agent/pull/1723))
- Fix: `length_continue_retries` never resets — later truncations got fewer retries ([#1717](https://github.com/NousResearch/hermes-agent/pull/1717))
- Fix: compressor summary role violated consecutive-role constraint ([#1720](https://github.com/NousResearch/hermes-agent/pull/1720), [#1743](https://github.com/NousResearch/hermes-agent/pull/1743))
- Fix: remove hardcoded `gemini-3-flash-preview` as default summary model ([#2464](https://github.com/NousResearch/hermes-agent/pull/2464))
- Fix: correctly handle empty tool results ([#2201](https://github.com/NousResearch/hermes-agent/pull/2201))
- Fix: crash on None entry in `tool_calls` list ([#2209](https://github.com/NousResearch/hermes-agent/pull/2209) by @0xbyt4, [#2316](https://github.com/NousResearch/hermes-agent/pull/2316))
- Fix: per-thread persistent event loops in worker threads ([#2214](https://github.com/NousResearch/hermes-agent/pull/2214) by @jquesnelle)
- Fix: prevent 'event loop already running' when async tools run in parallel ([#2207](https://github.com/NousResearch/hermes-agent/pull/2207))
- Fix: strip ANSI at the source — clean terminal output before it reaches the model ([#2115](https://github.com/NousResearch/hermes-agent/pull/2115))
- Fix: skip top-level `cache_control` on role:tool for OpenRouter ([#2391](https://github.com/NousResearch/hermes-agent/pull/2391))
- Fix: delegate tool — save parent tool names before child construction mutates global ([#2083](https://github.com/NousResearch/hermes-agent/pull/2083) by @ygd58, [#1894](https://github.com/NousResearch/hermes-agent/pull/1894))
- Fix: only strip last assistant message if empty string ([#2326](https://github.com/NousResearch/hermes-agent/pull/2326))
### Session & Memory
- **Session search** and management slash commands ([#2198](https://github.com/NousResearch/hermes-agent/pull/2198))
- **Auto session titles** and `.hermes.md` project config ([#1712](https://github.com/NousResearch/hermes-agent/pull/1712))
- Fix: concurrent memory writes silently drop entries — added file locking ([#1726](https://github.com/NousResearch/hermes-agent/pull/1726))
- Fix: search all sources by default in `session_search` ([#1892](https://github.com/NousResearch/hermes-agent/pull/1892))
- Fix: handle hyphenated FTS5 queries and preserve quoted literals ([#1776](https://github.com/NousResearch/hermes-agent/pull/1776))
- Fix: skip corrupt lines in `load_transcript` instead of crashing ([#1744](https://github.com/NousResearch/hermes-agent/pull/1744))
- Fix: normalize session keys to prevent case-sensitive duplicates ([#2157](https://github.com/NousResearch/hermes-agent/pull/2157))
- Fix: prevent `session_search` crash when no sessions exist ([#2194](https://github.com/NousResearch/hermes-agent/pull/2194))
- Fix: reset token counters on new session for accurate usage display ([#2101](https://github.com/NousResearch/hermes-agent/pull/2101) by @InB4DevOps)
- Fix: prevent stale memory overwrites by flush agent ([#2687](https://github.com/NousResearch/hermes-agent/pull/2687))
- Fix: remove synthetic error message injection, fix session resume after repeated failures ([#2303](https://github.com/NousResearch/hermes-agent/pull/2303))
- Fix: quiet mode with `--resume` now passes conversation_history ([#2357](https://github.com/NousResearch/hermes-agent/pull/2357))
- Fix: unify resume logic in batch mode ([#2331](https://github.com/NousResearch/hermes-agent/pull/2331))
### Honcho Memory
- Honcho config fixes and @ context reference integration ([#2343](https://github.com/NousResearch/hermes-agent/pull/2343))
- Self-hosted / Docker configuration documentation ([#2475](https://github.com/NousResearch/hermes-agent/pull/2475))
---
## 📱 Messaging Platforms (Gateway)
### New Platform Adapters
- **Signal Messenger** — Full adapter with attachment handling, group message filtering, and Note to Self echo-back protection ([#2206](https://github.com/NousResearch/hermes-agent/pull/2206), [#2400](https://github.com/NousResearch/hermes-agent/pull/2400), [#2297](https://github.com/NousResearch/hermes-agent/pull/2297), [#2156](https://github.com/NousResearch/hermes-agent/pull/2156))
- **DingTalk** — Adapter with gateway wiring and setup docs ([#1685](https://github.com/NousResearch/hermes-agent/pull/1685), [#1690](https://github.com/NousResearch/hermes-agent/pull/1690), [#1692](https://github.com/NousResearch/hermes-agent/pull/1692))
- **SMS (Twilio)** ([#1688](https://github.com/NousResearch/hermes-agent/pull/1688))
- **Mattermost** — With @-mention-only channel filter ([#1683](https://github.com/NousResearch/hermes-agent/pull/1683), [#2443](https://github.com/NousResearch/hermes-agent/pull/2443))
- **Matrix** — With vision support and image caching ([#1683](https://github.com/NousResearch/hermes-agent/pull/1683), [#2520](https://github.com/NousResearch/hermes-agent/pull/2520))
- **Webhook** — Platform adapter for external event triggers ([#2166](https://github.com/NousResearch/hermes-agent/pull/2166))
- **OpenAI-compatible API server** — `/v1/chat/completions` endpoint with `/api/jobs` cron management ([#1756](https://github.com/NousResearch/hermes-agent/pull/1756), [#2450](https://github.com/NousResearch/hermes-agent/pull/2450), [#2456](https://github.com/NousResearch/hermes-agent/pull/2456))
### Telegram Improvements
- MarkdownV2 support — strikethrough, spoiler, blockquotes, escape parentheses/braces/backslashes/backticks ([#2199](https://github.com/NousResearch/hermes-agent/pull/2199), [#2200](https://github.com/NousResearch/hermes-agent/pull/2200) by @llbn, [#2386](https://github.com/NousResearch/hermes-agent/pull/2386))
- Auto-detect HTML tags and use `parse_mode=HTML` ([#1709](https://github.com/NousResearch/hermes-agent/pull/1709))
- Telegram group vision support + thread-based sessions ([#2153](https://github.com/NousResearch/hermes-agent/pull/2153))
- Auto-reconnect polling after network interruption ([#2517](https://github.com/NousResearch/hermes-agent/pull/2517))
- Aggregate split text messages before dispatching ([#1674](https://github.com/NousResearch/hermes-agent/pull/1674))
- Fix: streaming config bridge, not-modified, flood control ([#1782](https://github.com/NousResearch/hermes-agent/pull/1782), [#1783](https://github.com/NousResearch/hermes-agent/pull/1783))
- Fix: edited_message event crashes ([#2074](https://github.com/NousResearch/hermes-agent/pull/2074))
- Fix: retry 409 polling conflicts before giving up ([#2312](https://github.com/NousResearch/hermes-agent/pull/2312))
- Fix: topic delivery via `platform:chat_id:thread_id` format ([#2455](https://github.com/NousResearch/hermes-agent/pull/2455))
### Discord Improvements
- Document caching and text-file injection ([#2503](https://github.com/NousResearch/hermes-agent/pull/2503))
- Persistent typing indicator for DMs ([#2468](https://github.com/NousResearch/hermes-agent/pull/2468))
- Discord DM vision — inline images + attachment analysis ([#2186](https://github.com/NousResearch/hermes-agent/pull/2186))
- Persist thread participation across gateway restarts ([#1661](https://github.com/NousResearch/hermes-agent/pull/1661))
- Fix: gateway crash on non-ASCII guild names ([#2302](https://github.com/NousResearch/hermes-agent/pull/2302))
- Fix: thread permission errors ([#2073](https://github.com/NousResearch/hermes-agent/pull/2073))
- Fix: slash event routing in threads ([#2460](https://github.com/NousResearch/hermes-agent/pull/2460))
- Fix: remove bugged followup messages + `/ask` command ([#1836](https://github.com/NousResearch/hermes-agent/pull/1836))
- Fix: graceful WebSocket reconnection ([#2127](https://github.com/NousResearch/hermes-agent/pull/2127))
- Fix: voice channel TTS when streaming enabled ([#2322](https://github.com/NousResearch/hermes-agent/pull/2322))
### WhatsApp & Other Adapters
- WhatsApp: outbound `send_message` routing ([#1769](https://github.com/NousResearch/hermes-agent/pull/1769) by @sai-samarth), LID format self-chat ([#1667](https://github.com/NousResearch/hermes-agent/pull/1667)), `reply_prefix` config fix ([#1923](https://github.com/NousResearch/hermes-agent/pull/1923)), restart on bridge child exit ([#2334](https://github.com/NousResearch/hermes-agent/pull/2334)), image/bridge improvements ([#2181](https://github.com/NousResearch/hermes-agent/pull/2181))
- Matrix: correct `reply_to_message_id` parameter ([#1895](https://github.com/NousResearch/hermes-agent/pull/1895)), bare media types fix ([#1736](https://github.com/NousResearch/hermes-agent/pull/1736))
- Mattermost: MIME types for media attachments ([#2329](https://github.com/NousResearch/hermes-agent/pull/2329))
### Gateway Core
- **Auto-reconnect** failed platforms with exponential backoff ([#2584](https://github.com/NousResearch/hermes-agent/pull/2584))
- **Notify users when session auto-resets** ([#2519](https://github.com/NousResearch/hermes-agent/pull/2519))
- **Reply-to message context** for out-of-session replies ([#1662](https://github.com/NousResearch/hermes-agent/pull/1662))
- **Ignore unauthorized DMs** config option ([#1919](https://github.com/NousResearch/hermes-agent/pull/1919))
- Fix: `/reset` in thread-mode resets global session instead of thread ([#2254](https://github.com/NousResearch/hermes-agent/pull/2254))
- Fix: deliver MEDIA: files after streaming responses ([#2382](https://github.com/NousResearch/hermes-agent/pull/2382))
- Fix: cap interrupt recursion depth to prevent resource exhaustion ([#1659](https://github.com/NousResearch/hermes-agent/pull/1659))
- Fix: detect stopped processes and release stale locks on `--replace` ([#2406](https://github.com/NousResearch/hermes-agent/pull/2406), [#1908](https://github.com/NousResearch/hermes-agent/pull/1908))
- Fix: PID-based wait with force-kill for gateway restart ([#1902](https://github.com/NousResearch/hermes-agent/pull/1902))
- Fix: prevent `--replace` mode from killing the caller process ([#2185](https://github.com/NousResearch/hermes-agent/pull/2185))
- Fix: `/model` shows active fallback model instead of config default ([#1660](https://github.com/NousResearch/hermes-agent/pull/1660))
- Fix: `/title` command fails when session doesn't exist in SQLite yet ([#2379](https://github.com/NousResearch/hermes-agent/pull/2379) by @ten-jampa)
- Fix: process `/queue`'d messages after agent completion ([#2469](https://github.com/NousResearch/hermes-agent/pull/2469))
- Fix: strip orphaned `tool_results` + let `/reset` bypass running agent ([#2180](https://github.com/NousResearch/hermes-agent/pull/2180))
- Fix: prevent agents from starting gateway outside systemd management ([#2617](https://github.com/NousResearch/hermes-agent/pull/2617))
- Fix: prevent systemd restart storm on gateway connection failure ([#2327](https://github.com/NousResearch/hermes-agent/pull/2327))
- Fix: include resolved node path in systemd unit ([#1767](https://github.com/NousResearch/hermes-agent/pull/1767) by @sai-samarth)
- Fix: send error details to user in gateway outer exception handler ([#1966](https://github.com/NousResearch/hermes-agent/pull/1966))
- Fix: improve error handling for 429 usage limits and 500 context overflow ([#1839](https://github.com/NousResearch/hermes-agent/pull/1839))
- Fix: add all missing platform allowlist env vars to startup warning check ([#2628](https://github.com/NousResearch/hermes-agent/pull/2628))
- Fix: media delivery fails for file paths containing spaces ([#2621](https://github.com/NousResearch/hermes-agent/pull/2621))
- Fix: duplicate session-key collision in multi-platform gateway ([#2171](https://github.com/NousResearch/hermes-agent/pull/2171))
- Fix: Matrix and Mattermost never report as connected ([#1711](https://github.com/NousResearch/hermes-agent/pull/1711))
- Fix: PII redaction config never read — missing yaml import ([#1701](https://github.com/NousResearch/hermes-agent/pull/1701))
- Fix: NameError on skill slash commands ([#1697](https://github.com/NousResearch/hermes-agent/pull/1697))
- Fix: persist watcher metadata in checkpoint for crash recovery ([#1706](https://github.com/NousResearch/hermes-agent/pull/1706))
- Fix: pass `message_thread_id` in send_image_file, send_document, send_video ([#2339](https://github.com/NousResearch/hermes-agent/pull/2339))
- Fix: media-group aggregation on rapid successive photo messages ([#2160](https://github.com/NousResearch/hermes-agent/pull/2160))
---
## 🔧 Tool System
### MCP Enhancements
- **MCP server management CLI** + OAuth 2.1 PKCE auth ([#2465](https://github.com/NousResearch/hermes-agent/pull/2465))
- **Expose MCP servers as standalone toolsets** ([#1907](https://github.com/NousResearch/hermes-agent/pull/1907))
- **Interactive MCP tool configuration** in `hermes tools` ([#1694](https://github.com/NousResearch/hermes-agent/pull/1694))
- Fix: MCP-OAuth port mismatch, path traversal, and shared handler state ([#2552](https://github.com/NousResearch/hermes-agent/pull/2552))
- Fix: preserve MCP tool registrations across session resets ([#2124](https://github.com/NousResearch/hermes-agent/pull/2124))
- Fix: concurrent file access crash + duplicate MCP registration ([#2154](https://github.com/NousResearch/hermes-agent/pull/2154))
- Fix: normalise MCP schemas + expand session list columns ([#2102](https://github.com/NousResearch/hermes-agent/pull/2102))
- Fix: `tool_choice` `mcp_` prefix handling ([#1775](https://github.com/NousResearch/hermes-agent/pull/1775))
### Web Tool Backends
- **Tavily** as web search/extract/crawl backend ([#1731](https://github.com/NousResearch/hermes-agent/pull/1731))
- **Parallel** as alternative web search/extract backend ([#1696](https://github.com/NousResearch/hermes-agent/pull/1696))
- **Configurable web backend** — Firecrawl/BeautifulSoup/Playwright selection ([#2256](https://github.com/NousResearch/hermes-agent/pull/2256))
- Fix: whitespace-only env vars bypass web backend detection ([#2341](https://github.com/NousResearch/hermes-agent/pull/2341))
### New Tools
- **IMAP email** reading and sending ([#2173](https://github.com/NousResearch/hermes-agent/pull/2173))
- **STT (speech-to-text)** tool using Whisper API ([#2072](https://github.com/NousResearch/hermes-agent/pull/2072))
- **Route-aware pricing estimates** ([#1695](https://github.com/NousResearch/hermes-agent/pull/1695))
### Tool Improvements
- TTS: `base_url` support for OpenAI TTS provider ([#2064](https://github.com/NousResearch/hermes-agent/pull/2064) by @hanai)
- Vision: configurable timeout, tilde expansion in file paths, DM vision with multi-image and base64 fallback ([#2480](https://github.com/NousResearch/hermes-agent/pull/2480), [#2585](https://github.com/NousResearch/hermes-agent/pull/2585), [#2211](https://github.com/NousResearch/hermes-agent/pull/2211))
- Browser: race condition fix in session creation ([#1721](https://github.com/NousResearch/hermes-agent/pull/1721)), TypeError on unexpected LLM params ([#1735](https://github.com/NousResearch/hermes-agent/pull/1735))
- File tools: strip ANSI escape codes from write_file and patch content ([#2532](https://github.com/NousResearch/hermes-agent/pull/2532)), include pagination args in repeated search key ([#1824](https://github.com/NousResearch/hermes-agent/pull/1824) by @cutepawss), improve fuzzy matching accuracy + position calculation refactor ([#2096](https://github.com/NousResearch/hermes-agent/pull/2096), [#1681](https://github.com/NousResearch/hermes-agent/pull/1681))
- Code execution: resource leak and double socket close fix ([#2381](https://github.com/NousResearch/hermes-agent/pull/2381))
- Delegate: thread safety for concurrent subagent delegation ([#1672](https://github.com/NousResearch/hermes-agent/pull/1672)), preserve parent agent's tool list after delegation ([#1778](https://github.com/NousResearch/hermes-agent/pull/1778))
- Fix: make concurrent tool batching path-aware for file mutations ([#1914](https://github.com/NousResearch/hermes-agent/pull/1914))
- Fix: chunk long messages in `send_message_tool` before platform dispatch ([#1646](https://github.com/NousResearch/hermes-agent/pull/1646))
- Fix: add missing 'messaging' toolset ([#1718](https://github.com/NousResearch/hermes-agent/pull/1718))
- Fix: prevent unavailable tool names from leaking into model schemas ([#2072](https://github.com/NousResearch/hermes-agent/pull/2072))
- Fix: pass visited set by reference to prevent diamond dependency duplication ([#2311](https://github.com/NousResearch/hermes-agent/pull/2311))
- Fix: Daytona sandbox lookup migrated from `find_one` to `get/list` ([#2063](https://github.com/NousResearch/hermes-agent/pull/2063) by @rovle)
---
## 🧩 Skills Ecosystem
### Skills System Improvements
- **Agent-created skills** — Caution-level findings allowed, dangerous skills ask instead of block ([#1840](https://github.com/NousResearch/hermes-agent/pull/1840), [#2446](https://github.com/NousResearch/hermes-agent/pull/2446))
- **`--yes` flag** to bypass confirmation in `/skills install` and uninstall ([#1647](https://github.com/NousResearch/hermes-agent/pull/1647))
- **Disabled skills respected** across banner, system prompt, and slash commands ([#1897](https://github.com/NousResearch/hermes-agent/pull/1897))
- Fix: skills custom_tools import crash + sandbox file_tools integration ([#2239](https://github.com/NousResearch/hermes-agent/pull/2239))
- Fix: agent-created skills with pip requirements crash on install ([#2145](https://github.com/NousResearch/hermes-agent/pull/2145))
- Fix: race condition in `Skills.__init__` when `hub.yaml` missing ([#2242](https://github.com/NousResearch/hermes-agent/pull/2242))
- Fix: validate skill metadata before install and block duplicates ([#2241](https://github.com/NousResearch/hermes-agent/pull/2241))
- Fix: skills hub inspect/resolve — 4 bugs in inspect, redirects, discovery, tap list ([#2447](https://github.com/NousResearch/hermes-agent/pull/2447))
- Fix: agent-created skills keep working after session reset ([#2121](https://github.com/NousResearch/hermes-agent/pull/2121))
### New Skills
- **OCR-and-documents** — PDF/DOCX/XLS/PPTX/image OCR with optional GPU ([#2236](https://github.com/NousResearch/hermes-agent/pull/2236), [#2461](https://github.com/NousResearch/hermes-agent/pull/2461))
- **Huggingface-hub** bundled skill ([#1921](https://github.com/NousResearch/hermes-agent/pull/1921))
- **Sherlock OSINT** username search ([#1671](https://github.com/NousResearch/hermes-agent/pull/1671))
- **Meme-generation** — Image generator with Pillow ([#2344](https://github.com/NousResearch/hermes-agent/pull/2344))
- **Bioinformatics** gateway skill — index to 400+ bio skills ([#2387](https://github.com/NousResearch/hermes-agent/pull/2387))
- **Inference.sh** skill (terminal-based) ([#1686](https://github.com/NousResearch/hermes-agent/pull/1686))
- **Base blockchain** optional skill ([#1643](https://github.com/NousResearch/hermes-agent/pull/1643))
- **3D-model-viewer** optional skill ([#2226](https://github.com/NousResearch/hermes-agent/pull/2226))
- **FastMCP** optional skill ([#2113](https://github.com/NousResearch/hermes-agent/pull/2113))
- **Hermes-agent-setup** skill ([#1905](https://github.com/NousResearch/hermes-agent/pull/1905))
---
## 🔌 Plugin System Enhancements
- **TUI extension hooks** — Build custom CLIs on top of Hermes ([#2333](https://github.com/NousResearch/hermes-agent/pull/2333))
- **`hermes plugins install/remove/list`** commands ([#2337](https://github.com/NousResearch/hermes-agent/pull/2337))
- **Slash command registration** for plugins ([#2359](https://github.com/NousResearch/hermes-agent/pull/2359))
- **`session:end` lifecycle event** hook ([#1725](https://github.com/NousResearch/hermes-agent/pull/1725))
- Fix: require opt-in for project plugin discovery ([#2215](https://github.com/NousResearch/hermes-agent/pull/2215))
---
## 🔒 Security & Reliability
### Security
- **SSRF protection** for vision_tools and web_tools ([#2679](https://github.com/NousResearch/hermes-agent/pull/2679))
- **Shell injection prevention** in `_expand_path` via `~user` path suffix ([#2685](https://github.com/NousResearch/hermes-agent/pull/2685))
- **Block untrusted browser-origin** API server access ([#2451](https://github.com/NousResearch/hermes-agent/pull/2451))
- **Block sandbox backend creds** from subprocess env ([#1658](https://github.com/NousResearch/hermes-agent/pull/1658))
- **Block @ references** from reading secrets outside workspace ([#2601](https://github.com/NousResearch/hermes-agent/pull/2601) by @Gutslabs)
- **Malicious code pattern pre-exec scanner** for terminal_tool ([#2245](https://github.com/NousResearch/hermes-agent/pull/2245))
- **Harden terminal safety** and sandbox file writes ([#1653](https://github.com/NousResearch/hermes-agent/pull/1653))
- **PKCE verifier leak** fix + OAuth refresh Content-Type ([#1775](https://github.com/NousResearch/hermes-agent/pull/1775))
- **Eliminate SQL string formatting** in `execute()` calls ([#2061](https://github.com/NousResearch/hermes-agent/pull/2061) by @dusterbloom)
- **Harden jobs API** — input limits, field whitelist, startup check ([#2456](https://github.com/NousResearch/hermes-agent/pull/2456))
### Reliability
- Thread locks on 4 SessionDB methods ([#1704](https://github.com/NousResearch/hermes-agent/pull/1704))
- File locking for concurrent memory writes ([#1726](https://github.com/NousResearch/hermes-agent/pull/1726))
- Handle OpenRouter errors gracefully ([#2112](https://github.com/NousResearch/hermes-agent/pull/2112))
- Guard print() calls against OSError ([#1668](https://github.com/NousResearch/hermes-agent/pull/1668))
- Safely handle non-string inputs in redacting formatter ([#2392](https://github.com/NousResearch/hermes-agent/pull/2392), [#1700](https://github.com/NousResearch/hermes-agent/pull/1700))
- ACP: preserve session provider on model switch, persist sessions to disk ([#2380](https://github.com/NousResearch/hermes-agent/pull/2380), [#2071](https://github.com/NousResearch/hermes-agent/pull/2071))
- API server: persist ResponseStore to SQLite across restarts ([#2472](https://github.com/NousResearch/hermes-agent/pull/2472))
- Fix: `fetch_nous_models` always TypeError from positional args ([#1699](https://github.com/NousResearch/hermes-agent/pull/1699))
- Fix: resolve merge conflict markers in cli.py breaking startup ([#2347](https://github.com/NousResearch/hermes-agent/pull/2347))
- Fix: `minisweagent_path.py` missing from wheel ([#2098](https://github.com/NousResearch/hermes-agent/pull/2098) by @JiwaniZakir)
### Cron System
- **`[SILENT]` response** — cron agents can suppress delivery ([#1833](https://github.com/NousResearch/hermes-agent/pull/1833))
- **Scale missed-job grace window** with schedule frequency ([#2449](https://github.com/NousResearch/hermes-agent/pull/2449))
- **Recover recent one-shot jobs** ([#1918](https://github.com/NousResearch/hermes-agent/pull/1918))
- Fix: normalize `repeat<=0` to None — jobs deleted after first run when LLM passes -1 ([#2612](https://github.com/NousResearch/hermes-agent/pull/2612) by @Mibayy)
- Fix: Matrix added to scheduler delivery platform_map ([#2167](https://github.com/NousResearch/hermes-agent/pull/2167) by @buntingszn)
- Fix: naive ISO timestamps without timezone — jobs fire at wrong time ([#1729](https://github.com/NousResearch/hermes-agent/pull/1729))
- Fix: `get_due_jobs` reads `jobs.json` twice — race condition ([#1716](https://github.com/NousResearch/hermes-agent/pull/1716))
- Fix: silent jobs return empty response for delivery skip ([#2442](https://github.com/NousResearch/hermes-agent/pull/2442))
- Fix: stop injecting cron outputs into gateway session history ([#2313](https://github.com/NousResearch/hermes-agent/pull/2313))
- Fix: close abandoned coroutine when `asyncio.run()` raises RuntimeError ([#2317](https://github.com/NousResearch/hermes-agent/pull/2317))
---
## 🧪 Testing
- Resolve all consistently failing tests ([#2488](https://github.com/NousResearch/hermes-agent/pull/2488))
- Replace `FakePath` with `monkeypatch` for Python 3.12 compat ([#2444](https://github.com/NousResearch/hermes-agent/pull/2444))
- Align Hermes setup and full-suite expectations ([#1710](https://github.com/NousResearch/hermes-agent/pull/1710))
---
## 📚 Documentation
- Comprehensive docs update for recent features ([#1693](https://github.com/NousResearch/hermes-agent/pull/1693), [#2183](https://github.com/NousResearch/hermes-agent/pull/2183))
- Alibaba Cloud and DingTalk setup guides ([#1687](https://github.com/NousResearch/hermes-agent/pull/1687), [#1692](https://github.com/NousResearch/hermes-agent/pull/1692))
- Detailed skills documentation ([#2244](https://github.com/NousResearch/hermes-agent/pull/2244))
- Honcho self-hosted / Docker configuration ([#2475](https://github.com/NousResearch/hermes-agent/pull/2475))
- Context length detection FAQ and quickstart references ([#2179](https://github.com/NousResearch/hermes-agent/pull/2179))
- Fix docs inconsistencies across reference and user guides ([#1995](https://github.com/NousResearch/hermes-agent/pull/1995))
- Fix MCP install commands — use uv, not bare pip ([#1909](https://github.com/NousResearch/hermes-agent/pull/1909))
- Replace ASCII diagrams with Mermaid/lists ([#2402](https://github.com/NousResearch/hermes-agent/pull/2402))
- Gemini OAuth provider implementation plan ([#2467](https://github.com/NousResearch/hermes-agent/pull/2467))
- Discord Server Members Intent marked as required ([#2330](https://github.com/NousResearch/hermes-agent/pull/2330))
- Fix MDX build error in api-server.md ([#1787](https://github.com/NousResearch/hermes-agent/pull/1787))
- Align venv path to match installer ([#2114](https://github.com/NousResearch/hermes-agent/pull/2114))
- New skills added to hub index ([#2281](https://github.com/NousResearch/hermes-agent/pull/2281))
---
## 👥 Contributors
### Core
- **@teknium1** (Teknium) — 280 PRs
### Community Contributors
- **@mchzimm** (to_the_max) — GitHub Copilot provider integration ([#1879](https://github.com/NousResearch/hermes-agent/pull/1879))
- **@jquesnelle** (Jeffrey Quesnelle) — Per-thread persistent event loops fix ([#2214](https://github.com/NousResearch/hermes-agent/pull/2214))
- **@llbn** (lbn) — Telegram MarkdownV2 strikethrough, spoiler, blockquotes, and escape fixes ([#2199](https://github.com/NousResearch/hermes-agent/pull/2199), [#2200](https://github.com/NousResearch/hermes-agent/pull/2200))
- **@dusterbloom** — SQL injection prevention + local server context window querying ([#2061](https://github.com/NousResearch/hermes-agent/pull/2061), [#2091](https://github.com/NousResearch/hermes-agent/pull/2091))
- **@0xbyt4** — Anthropic tool_calls None guard + OpenCode-Go provider config fix ([#2209](https://github.com/NousResearch/hermes-agent/pull/2209), [#2393](https://github.com/NousResearch/hermes-agent/pull/2393))
- **@sai-samarth** (Saisamarth) — WhatsApp send_message routing + systemd node path ([#1769](https://github.com/NousResearch/hermes-agent/pull/1769), [#1767](https://github.com/NousResearch/hermes-agent/pull/1767))
- **@Gutslabs** (Guts) — Block @ references from reading secrets ([#2601](https://github.com/NousResearch/hermes-agent/pull/2601))
- **@Mibayy** (Mibay) — Cron job repeat normalization ([#2612](https://github.com/NousResearch/hermes-agent/pull/2612))
- **@ten-jampa** (Tenzin Jampa) — Gateway /title command fix ([#2379](https://github.com/NousResearch/hermes-agent/pull/2379))
- **@cutepawss** (lila) — File tools search pagination fix ([#1824](https://github.com/NousResearch/hermes-agent/pull/1824))
- **@hanai** (Hanai) — OpenAI TTS base_url support ([#2064](https://github.com/NousResearch/hermes-agent/pull/2064))
- **@rovle** (Lovre Pešut) — Daytona sandbox API migration ([#2063](https://github.com/NousResearch/hermes-agent/pull/2063))
- **@buntingszn** (bunting szn) — Matrix cron delivery support ([#2167](https://github.com/NousResearch/hermes-agent/pull/2167))
- **@InB4DevOps** — Token counter reset on new session ([#2101](https://github.com/NousResearch/hermes-agent/pull/2101))
- **@JiwaniZakir** (Zakir Jiwani) — Missing file in wheel fix ([#2098](https://github.com/NousResearch/hermes-agent/pull/2098))
- **@ygd58** (buray) — Delegate tool parent tool names fix ([#2083](https://github.com/NousResearch/hermes-agent/pull/2083))
---
**Full Changelog**: [v2026.3.17...v2026.3.23](https://github.com/NousResearch/hermes-agent/compare/v2026.3.17...v2026.3.23)