v0.13.0

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 日志内容在上传时即脱敏,而非上传后

外加额外的加固措施:

  • .envauth.jsonstate.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_fncron_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_filepatch 操作之后,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-session
  • hermes 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

全新安装请参考安装指南


GitHub 完整 Changelog

← Hermes Agent Changelog