Hermes Agent v0.13.0 — Tenacity 发布
概述
v0.13.0 — Tenacity 发布。 发布于 2026 年 5 月 7 日。864 个提交 · 588 个合并 PR · 829 个文件变更 · 128,366 行新增 · 282 个问题关闭(13 个 P0,36 个 P1)· 295 位社区贡献者(含共同作者)。
Tenacity 发布的主题用一个问题就能概括:智能体如何把开始的事情做完? 在 v0.13 之前,Hermes 够聪明但不够持久——它可能开始一个多步骤任务,在中途遇到障碍,然后悄悄偏离甚至中止。v0.13 用三种相互配合的机制解决了这个问题:持久化多智能体 Kanban(任务看板,带心跳监控、僵尸检测和幻觉恢复)、/goal(Ralph 循环——让智能体跨轮次锁定目标)、Checkpoints v2(重写的状态持久化,带真正的剪枝能力)。三管齐下,Hermes 成为首个内置任务完成保障的开源智能体框架。
这也是项目历史上最大规模的安全发布——单次发布修复 8 个 P0 级别漏洞。日志脱敏默认开启,Discord 角色白名单按服务器隔离,WhatsApp 默认拒绝陌生人,auth.json 和 MCP OAuth 的 TOCTOU 竞态窗口被关闭。智能体的攻击面大幅收窄,同时能力边界持续扩展:Google Chat 加入成为第 20 个消息平台,Provider 成为可插拔接口,CLI 和 Gateway 静态消息支持七种语言。
核心功能
1. 多智能体 Kanban —— 把任务交给一群能完成的 AI 团队
v0.13 的重头戏。Kanban 将 Hermes 变成了一个持久化多智能体任务看板。创建一个看板,往里面扔任务,让多个 Hermes 工作进程捡起任务、传递任务、完成任务。真正厉害的是底层的容错机制:心跳监控、超时回收、僵尸检测、每个任务独立的尝试预算、异常退出自动阻塞,以及一个幻觉恢复门禁。
创建和管理看板:
# 创建新看板并切换过去
hermes kanban boards create project-a --name "项目 A" --switch
# 添加任务
hermes kanban create "实现 OAuth 认证流程" \
--priority 1 \
--body "为认证服务添加支持 PKCE 的 OAuth 2.0"
hermes kanban create "写集成测试" \
--priority 2 \
--body "覆盖所有认证端点的测试用例"
# 列出所有任务
hermes kanban list
# 查看看板统计
hermes kanban stats
持久化机制的运作方式:
工作进程捡起任务后,开始发送心跳信号。如果心跳停止(崩溃、断网、内存溢出),另一个工作进程会在超时后回收该任务。僵尸检测能识别那些名义上存活但实际没有进展的工作进程——标记为死亡并重新分配其任务。如果一个任务连续失败 N 次,重试预算把它踢到人工审核队列,而不是无限循环。还未完成当前任务就退出的工作进程会被自动阻塞,防止任务悄无声息地消失。
幻觉门禁是让这个系统从玩具变成生产级的关键。当工作进程声称完成了某个任务,系统会在接受之前先验证——检查是否有证据表明工作确实完成了,而不仅仅是口头声明。
# hermes.config.yaml — kanban 工作进程配置
kanban:
board: project-a
worker:
max_spawn: 5 # 最多 5 个并发工作进程
heartbeat_interval: 30s
reclaim_timeout: 120s # 空闲任务多久后被回收
max_retries: 3 # 每个任务默认重试预算
auto_block_on_exit: true # 退出时阻塞未完成的任务
还可以按任务覆盖重试次数,适用于那些容错度不同场景:
hermes kanban create "脆弱的数据迁移" --max-retries 1
hermes kanban create "暴力搜索任务" --max-retries 10
底层实现细节:
- 多项目看板——一次安装,多个独立的 Kanban 板
- 原子化状态写入——崩溃不会导致看板数据损坏
- 按平台的通知开关——Telegram、Discord、Slack 等平台可分别配置任务状态变更通知
- 通用诊断引擎——工作进程可以标记“我被卡住了,原因是……”
- 仪表盘集成——实时看板视图、内嵌任务创建、工作区和路径输入
2. /goal —— 智能体不会忘记你交代的事
Ralph 循环现在成为了第一等原语。/goal 将智能体锁定在某个目标上,并让它跨轮次保持。如果用户在中途试图带偏话题,智能体会先回应这个偏离,再回到主线。如果某个工具调用失败了,换条路再试。即使对话持续数小时,目标始终存在。
# 设置一个持久化目标
/goal "调研 TOP 5 CRM 工具,对比定价,总结哪款最适合 50 人创业公司"
/goal 系统使用一个裁决模型来判断目标是否达成。裁决模型在每个轮次后运行,对比目标和当前进展。智能体可以绕路(处理边角问题、澄清模糊点、应对工具失败),但在裁决模型宣布完成之前,不能永久放弃目标。
# 随时查看目标状态
/goal status
# 暂停和恢复
/goal pause
/goal resume
# 清除并设置新目标
/goal clear
/goal 配合即将在 v0.14.0 中落地的 /subgoal,就可以在智能体执行过程中追加成功标准。两者合在一起的效果类似于传统项目管理中的“目标 + 渐进明细”——一个核心目标,加上推进中的逐步细化。
3. Checkpoints v2 —— 状态持久化重写
旧版检查点系统会积累孤立的影子仓库、没有真正的剪枝机制、状态数据只增不减。Checkpoints v2 是一次彻底重写:
- 统一存储架构——不再把状态散落在多个目录中
- 真正的剪枝——旧检查点真的被删除了,支持配置保留策略
- 磁盘保护——磁盘空间严重不足时拒绝创建新检查点
- 零孤儿仓库——每个 git 影子仓库都有完整的生命周期追踪
配合新增的 Gateway 自动恢复功能,智能体现在能在重启后无缝继续。Gateway 在执行中途重启?对话恢复。/update 重启了进程?回到断点继续。源文件重新加载?会话正常接续。
4. 安全浪潮 —— 8 个 P0 一次性修复
这是 Hermes 历史上安全加固力度最大的一次发布:
| # | 修复内容 | 严重级别 | 具体变更 |
|---|---|---|---|
| 1 | 日志脱敏默认开启 | P0 | 智能体输出自动脱敏——不需要手动开启,默认即生效 |
| 2 | Discord 角色白名单按服务器隔离 | CVSS 8.1 | 此前一个服务器的角色可以授权访问另一个服务器(跨服 DM 绕过) |
| 3 | WhatsApp 默认拒绝陌生人 | P0 | 新 WhatsApp 连接默认屏蔽,需显式加入白名单;不响应自己的消息 |
| 4 | MCP OAuth TOCTOU 窗口关闭 | P0 | 保存 OAuth 凭据时的 TOCTOU 竞态条件已修复 |
| 5 | auth.json TOCTOU 窗口关闭 | P0 | 凭据写入器的竞态条件已修复 |
| 6 | 浏览器云元数据 SSRF 管控 | P0 | 混合路由强制拦截云元数据端点,覆盖所有 CDP 后端 |
| 7 | Cron 注入扫描 | P0 | cron 执行前扫描组装好的 skill 内容,检测注入攻击 |
| 8 | hermes debug share 脱敏 |
P0 | 日志内容在上传时即脱敏,而非上传后 |
外加额外的加固措施:
.env、auth.json、state.db恢复为 0600 权限——仅所有者可读写- 仪表盘插件脚本添加 SRI 完整性校验
- Meet 节点服务器绑定到 localhost,令牌文件限制为所有者读取
- 敏感写目标扩展覆盖 shell RC 文件和凭据文件
- YOLO 模式加固,防范 引号布尔值解析漏洞
- 引入 OSV-Scanner CI + Dependabot 进行依赖漏洞监控
5. Google Chat —— 第 20 个消息平台
Hermes 现在原生支持 20 个消息平台,Google Chat 是最新加入的成员。完整列表:
Telegram、Discord、Slack、WhatsApp、Signal、钉钉、短信(Twilio)、Mattermost、Matrix、Webhook、邮件(IMAP/SMTP)、Home Assistant、飞书、企业微信、微信、BlueBubbles(iMessage)、QQ 机器人、元宝、Microsoft Teams、Google Chat。
所有 20 个平台都在同一个 Gateway 进程下运行,共用一套会话管理、重启处理和线程路由。Gateway 架构现在包含通用的平台插件钩子——env_enablement_fn 和 cron_deliver_env_var——使得第三方适配器可以不改核心代码直接接入。IRC 和 Teams 已经迁移到这个插件面上。
本次发布新增的跨平台能力:
- Slack、Telegram、Mattermost、Matrix、钉钉全面支持
allowed_channels/allowed_chats/allowed_rooms白名单配置 - 按平台的
gateway_restart_notification——控制每个平台是否接收“我回来了”重启通知 busy_ack_enabled——关闭“正在处理中”的确认消息- 斜杠命令系统通知超时自动删除
[[as_document]]指令——skill 可强制 Gateway 将输出以文档形式投递
6. Provider 变为可插拔接口
推理 Provider 不再硬编码在核心代码中。新的 ProviderProfile ABC 和 plugins/model-providers/ 目录使之成为一等插件接口:
# plugins/model-providers/my_provider.py
from hermes.abc import ProviderProfile
class MyProvider(ProviderProfile):
name = "my-custom-provider"
display_name = "我的自定义 Provider"
def list_models(self) -> list[ModelInfo]:
...
def chat_completion(self, request: ChatRequest) -> ChatResponse:
...
把 Provider 插件放到指定目录,它们就会在模型选择器中与 OpenAI、Anthropic 等内置选项并列。无需修改核心代码。
本次新增的模型:
| 模型 | 提供方 | 备注 |
|---|---|---|
deepseek/deepseek-v4-pro |
OpenRouter + Nous Portal | DeepSeek 最新旗舰 |
x-ai/grok-4.3 |
OpenRouter + Nous Portal | xAI 最新模型 |
openrouter/owl-alpha |
OpenRouter | 免费套餐 |
tencent/hy3-preview |
OpenRouter | 付费路由 |
| Arcee Trinity Large Thinking | OpenRouter | 温度 + 压缩覆盖 |
OpenRouter 响应缓存现在对支持该功能的模型可用——减少重复上下文的开销。
Nous OAuth 现在通过共享令牌存储跨 Profile 持久化:登录一次,所有 Profile 共享同一个会话,不需要每个 Profile 单独认证。
7. 国际化 —— 七种语言
Hermes 现在支持中文、日文、德文、西班牙文、法文、乌克兰文和土耳其文——加上英文。Gateway 静态消息(CLI 帮助文本、智能体状态、错误提示)全部完成翻译。文档站点新增中文(zh-Hans)版本。
# hermes.config.yaml
display:
language: zh # 或 ja, de, es, fr, uk, tr
8. 视频与语音 —— 看得见、说得出
video_analyze 让 Hermes 在 Gemini 和兼容的多模态模型上获得了原生视频理解能力:
# 分析文件视频
hermes run "查看 meeting-recording.mp4 并总结会议中的决策"
# 分析 URL 视频
hermes run "分析 https://example.com/demo.mp4 —— 展示的是什么工作流程?"
xAI Custom Voices 作为 TTS Provider 正式入驻,支持语音克隆。录制一段语音样本,Hermes 就能用你的声音——或者任何你提供的声音——来朗读回复。
9. Delta Linting —— 智能体写完就自查
每次 write_file 或 patch 操作之后,Hermes 现在会运行进程内 linter,覆盖 Python、JSON、YAML 和 TOML。语法错误立即呈现,不会再等到十轮之后才发现问题:
WRITE src/auth.py
✓ 语法通过 (Python 3.12)
✓ 导入检查通过
WRITE config.json
✗ 语法错误: 第 14 行第 3 列出现意外 token
新增内置工具与命令
| 工具 / 命令 | 描述 | 用法 |
|---|---|---|
/goal |
持久跨轮次目标跟踪(Ralph 循环) | /goal "调研 X 并总结" |
/goal status |
查看当前目标进展 | /goal status |
/goal pause / /goal resume |
暂停或恢复目标追踪 | /goal pause |
/goal clear |
清除当前目标 | /goal clear |
video_analyze |
多模态模型原生视频理解 | video_analyze path/to/video.mp4 |
hermes curator archive |
归档已整理的 skill | hermes curator archive |
hermes curator prune |
清理旧的/已合并的 curator 条目 | hermes curator prune |
hermes curator list-archived |
列出所有已归档条目 | hermes curator list-archived |
[[as_document]] |
Skill 指令——以文档形式投递输出 | 在 skill frontmatter 中添加 [[as_document]] |
transform_llm_output |
插件钩子——重塑/过滤 LLM 输出 | 在插件中实现 |
X-Hermes-Session-Key |
API 头,用于稳定的会话记忆关联 | 通过 HTTP 头传递 |
no_agent cron 模式 |
纯脚本看门狗——无需 Agent 运行脚本 | 在 cron 任务配置中设置 no_agent: true |
| OpenRouter 缓存控制 | 对支持的模型显式控制缓存 | 在 Provider 配置中设置 cache: true |
改进项
核心智能体与会话
[[as_document]]skill 指令——skill 可强制 Gateway 以可下载文档形式投递输出,而非内嵌文本transform_llm_output插件钩子——新的生命周期钩子,允许插件在 LLM 输出进入对话前进行重塑或过滤;适用于上下文窗口压缩和内容过滤- 状态栏显示上下文压缩次数(CLI + TUI)——一眼就知道上下文被压缩了几次
- 隔离
get_tool_definitions缓存——去重 LCM 注入,避免冗余工具 schema 查询 - 以警告为先的工具调用循环护栏——智能体在进入无限工具循环前先发出警告,而非静默空转
- 打破永久空响应循环——孤立的工具尾部不再导致无限空响应
- ContextVars 传递到并发工具工作线程
- 跨 CLI、TUI 和 Gateway 展示自我改进审核摘要
- Token 估算现在包含系统提示和工具 schema,实现精准压缩触发
平台白名单
- Slack 的
allowed_channels、Telegram 的allowed_chats、Mattermost 和 Matrix 的allowed_rooms、钉钉的allowed_robots——将智能体交互限制在指定频道 - 按平台的
gateway_restart_notification——精细控制重启后消息的发送 busy_ack_enabled——关闭“正在处理中”的确认消息- 临时进度气泡自动清理
会话持久化
- Gateway 重启后自动恢复中断的会话——不再丢失对话
- 待处理的 update 提示跨重启保留
- Home channel 线程目标跨重启通知保留
- 线程路由从缓存的活跃会话源保留
- 分支会话时保留 Assistant 元数据
- 合并排队事件时保留文档类型
Curator(v0.12 引入,v0.13 成熟)
hermes curator archive——归档 curator 条目长期保存hermes curator prune——清理旧的、已合并的或孤立的条目hermes curator list-archived——查看已归档条目- 同步手动
hermes curator run——无需轮询,即时看到结果 - 保护内置和 hub skill不被覆盖
MCP(模型上下文协议)
- SSE 传输,支持 OAuth 转发和提升的
sse_read_timeout - 过期管道传输重试作为会话过期处理(自动重连)
- 图片工具结果作为 MEDIA 标签展示,不再被静默丢弃
- 长生命周期等待的定期 keepalive
- 会话终止后自动重连
- 防御性数字类型参数强制转换
- 工具桩按服务器公告的能力进行门控
Kanban 仪表盘
- 内嵌任务创建中的工作区类型 + 路径输入
- 按平台的 Home channel 通知开关
- 任务标题支持多行文本区
- 看板按选定的租户过滤
- 仪表盘看板锚定优先于服务器当前文件
QQ 机器人
- 原生审批键盘——内嵌的同意/拒绝按钮用于工具授权
- 分块上传大文件
- 引用附件支持
TUI 与 CLI
- 100 条新的 CLI 启动提示,覆盖 cron、kanban、curator、插件和冷门标志
/model选择器与hermes model匹配,支持所有 Provider 的内联认证- 启动横幅中的可折叠区域(skill、系统提示、MCP)
/new支持可选会话名:/new my-refactor-sessionhermes update --yes/-y跳过交互式确认
仪表盘
- 插件管理页——管理、启用/禁用、检查所有插件的认证状态
- Profile 管理页——从 Web UI 创建、编辑和删除 Profile
- 分析表格可交互排序
default-large主题,基础字号 18px- 通过
X-Forwarded-Prefix头支持反向代理 - Docker 中通过
HERMES_DASHBOARD=1启动为子进程
Web 工具
- SearXNG 作为原生纯搜索后端发布
- 按能力选择后端——搜索、提取、浏览可分别使用不同后端
ACP(VS Code / Zed / JetBrains)
/steer斜杠命令——控制正在执行的智能体/queue斜杠命令——排队追加任务- 通过
replace_messages实现原子化会话持久化 - Assistant 推理元数据跨会话持久化保留
- Windows 工作目录转换为 WSL 会话路径
安全与可靠性
关键 Bug 修复
- CLI 启动崩溃 ——
Invalid key 'c-S-c'(P0):prompt_toolkit 不支持 Shift 修饰键,已移除该按键绑定 - CLOSE_WAIT 文件描述符泄漏审计:httpx keepalive + WhatsApp aiohttp 泄漏 + 飞书清理——全部修复
- Gateway 在缺少
OPENROUTER_API_KEY时创建空的 API Key——备用 Provider 现在正确生效 - 后台审核 + curator 保护不被覆盖内置和 hub skill
- TUI 压缩续传幽灵会话——元数据不完整的问题已修复
hermes mcp add静默启动聊天而非注册 MCP 服务器——已修复- 后台审核 Agent 运行时传播——provider/model/credentials 现在真正继承自父 Agent
- 入站文档的宿主机路径转换为 Docker 后端的容器路径
- Matrix Gateway 在高速模型下自动脱敏和消息投递之间的竞态条件——已修复
- 活跃智能体会话中执行
/new,Telegram 上永远收不到回复——已修复 - config.yaml 优先级高于
.env,适用于 agent/display/timezone 配置 - 使用 Git HEAD SHA 检测过期代码,而非文件修改时间
- 计划内服务停止不会触发虚假致命错误
- 源文件变化时 Gateway 自动重启
WhatsApp 加固
在 P0 陌生人拒绝修复的基础上:
- 支持从环境变量覆盖 Home Channel 配置
- 永远不在自聊中响应(防止消息放大循环)
平台可靠性
- Gateway 在每次备用重启前执行 reset-failed——防止 Gateway 陷入停滞状态
- 原子化重启标记 + Windows 运行时锁偏移
- 关机和重启清理——排空超时、去除虚假致命错误、成功日志
- 祖先 PID 被排除在 Gateway 进程扫描之外
- 快捷命令别名分发移到了内置命令之前(防止意外覆盖)
gateway status显示其他 Profile,避免困惑
文件安全
.env/auth.json/state.db恢复为 0600 权限- Meet 节点服务器绑定到 localhost
- 令牌文件限制为所有者读取
- 敏感写目标扩展覆盖 shell RC 文件和凭据文件
升级
hermes update
全新安装请参考安装指南。
← Hermes Agent Changelog