大数跨境

Hermes Agent v0.22.6:一个补丁版攒了 3448 个 commit,官方说「这些我们故意不写」

Hermes Agent v0.22.6:一个补丁版攒了 3448 个 commit,官方说「这些我们故意不写」 创见AI实验室
2026-11-03
17
导读:Hermes Agent v0.22.6 是个叫 patch 的补丁版:3,448 个 commit、776 个 PR 全塞进 10 天里,官方索性不写更新说明了。

Hermes Agent v0.22.6(2026-11-03 01:18 北京)距 v0.22.5 10 天 12 小时⁠。仓库 Star 259,865、fork 57,217。

系列导航:本篇是 v0.22.6 的版本速览。上一篇是《Hermes Agent v0.22.5 主要更新一览》。

11 月 3 日凌晨一点多,我照例点进 release 页面。第一段是标准模板:

Patch release. This tag rolls up the ~776 PRs merged since v0.22.5 into a stable release…

第二段开头是这么一句:

Also in the window, undocumented here on purpose: …

"故意不写"。后面跟着一个句子,从句一直挂到句号,中间塞了二十来样东西:从 gateway 自己当 web server、到 skill 写保护、到 opt-in 预压缩、到 hermes cron cancel⁠、到把 Grok Bot 和 OpenBot 用户迁过来、到桌面端群聊改名解散、到 Telegram 视频留言、到包管理器断点续传。

一个覆盖二十多项功能的句子。我盯着看了一会,觉得这个版本真正值得写的东西,不是那三十项中的任何一项。


先把这 10 天的量摆出来

官方给的数字是"Measured at commit f0d94882e89",我核过这个 commit,2026-11-02 15:57 UTC,作者 Teknium,标题是给一个 macOS DMG 的 app-update 失败打上 known 标记的测试分类改动。


v0.22.5
v0.22.6
倍数
距上一版
1 天 10 小时
10 天 12 小时
—
commit
231
3,448
14.9×
PR
81
776
9.6×
改动文件
804
4,316
5.4×
新增行
35,212
248,579
7.1×
净增行
17,327
154,502
8.9×

折成日均:329 个 commit、74 个 PR、2.37 万行新增。平均每小时写进去 987 行。

hermes-v0226-02-ratio.png

这也解释了那个"故意不写"——不是懒,是写不完。776 个 PR 逐条写,那是本书。

为什么它叫 patch

patch 这个词的意思是小修补。一个 15 倍于上个补丁版体量的东西,还叫 patch,这个标签基本就用废了。

官方的解释在第三段:完整 notes 跟 v0.23.0 一起发,覆盖 v0.22.0 以来的全部内容。

我上一篇写 v0.22.5 的时候,当时那句"完整 notes 等 v0.23.0"已经在那儿了。现在又攒进来一个 v0.22.6。也就是说 v0.22.1 到 v0.22.6 六个版本、几千个 PR,最后都会挤进同一份文档里。

一份要装下六个版本的 release note,长度会到什么程度,我不太敢想。更现实的问题是:到那时候还有谁从头读。

那三十项里,我翻了三项的代码

那串列表从 gateway 讲到 Telegram,跨度太大,逐条写没意义。我挑了三件自己翻了源码的,讲它们到底是怎么落地的。

一、hermes migrate 现在能吃六家

hermes_cli/subcommands/migrate.py 里的 description 原文列得很清楚:OpenClaw、Claude Code、Codex CLI、Cursor、Grok Bot、OpenBot。

不带参数跑,它会扫这台机器上有没有别的 agent 的配置,然后问你要不要导。带参数就指定导谁。

Grok Bot 稍微特殊些——它不吃本地安装目录,要你给一个 export 文件。Grok Bot 和 OpenBot 还各有两个专属参数:--activate-routines(导入的定时任务直接跑,还是先挂着)、--bot NAME(只挑某一个 bot 导,可以重复给)。

同一个文件里还挂着另一条命令,hermes migrate xai⁠:扫 config.yaml 里引用了 2026 年 5 月 15 日退役的 xAI 模型名,按官方迁移表原地改掉,改之前备份。

底层不是硬编码,走的是 agent-importers 这个插件,缺了会自己去 catalog 装。

一个 agent 框架专门写命令,帮用户从六个别家 agent 搬家,还顺手替 xAI 处理模型退役。这个动作挺直白,不用多解释。

二、给 skill 上锁,441 行

hermes-v0226-04-lock.png

tools/skill_lock.py⁠,441 行,docstring 第一句是"User skill locks, enforced on every agent write path"。

用法:hermes curator lock <skill>⁠,或者桌面端 Capabilities 面板里的锁开关。锁的记录写在 profile 的 skills/.usage.json 里,跟 pinned 挨着,一个 locked: true⁠。

锁上之后是这么几条:skill_manage 拒绝一切变更动作;write_file 和 patch 拒绝这个 skill 目录下的任何路径;terminal 拒绝往那儿写的命令。锁记录本身也受同样的保护,agent 不能自己执行 hermes curator unlock⁠。

用户自己改不受限——桌面编辑器、你自己的编辑器、CLI,随便。

那 441 行花在哪了?一张按动词分好类的表:所有参数都是写目标的(rm⁠、mv⁠、chmod⁠、shred⁠、vim…)、只有最后一个参数是目标的(cp⁠、mv⁠、rsync…)、会递归钻进目录的(rm⁠、chmod⁠、find…)、17 个 git 变更动作(commit⁠、rebase⁠、cherry-pick⁠、clean…),还有一段正则专门认 python / node / ruby 内联代码里的写操作——open(..., 'w')⁠、.write()⁠、unlink⁠、rmtree⁠、shutil.move⁠。为了一条命令能不能拦得住,写了一张表。

然后官方自己在 docstring 里把边界说得清清楚楚:

It is a policy check, not a sandbox: a script that writes there through its own logic is not seen.

装了个锁,同时告诉你这锁挡不住什么。这句话我挺欣赏,比吹"全面保护"有用得多。

三、pre_llm_call 能把一整个 turn 拦下来

这个在 website/docs/user-guide/features/hooks.md 里,2251 行的文档。

插件注册 pre_llm_call⁠,回调返回 {"action": "block", "message": "..."}⁠,就能在任何推理请求发出之前否决这一轮:零模型调用,结果带 turn_exit_reason: "blocked_by_plugin_pre_llm_call"⁠,那句 message 直接顶替模型回复显示给用户,还存进 transcript(所以 --resume 能正常接着聊)。

真正让我停下来看的是被拦之后 prompt 去哪了。文档写得很细:原始 prompt 会被换成一句占位符 [Message withheld: a pre_llm_call policy hook blocked it.]⁠,后续 turn 回放的是这句,压缩摘要、session_search⁠、外部记忆 provider、后台记忆审阅读到的也是这句。所以被拦的内容不会在下一轮偷偷进模型。

用户自己打的原文只作为显示元数据保留,所以 CLI 的 --resume 摘要、TUI、桌面端、dashboard 都还看得见。

超时(默认 30 秒)或者回调抛异常,就放行。而 pre_tool_call 是反的——超时直接 fail closed,把工具拦掉。一个往开里放,一个往死里拦,方向不同,但都写了。

顺便看了眼仓库现在长什么样

hermes-v0226-06-tree.png

我拉了 tag 对应的 tree 统计:22,066 个文件,240 MB⁠。Python 10,612 个、TypeScript 3,840 个、TSX 1,502 个、Markdown 1,564 个,tests/ 一个目录占了 7,669 个。

单看 hermes_cli 一个目录,819 个文件。根目录还躺着六十来个 hermes_state_*.py——hermes_state_mutation_branch.py⁠、hermes_state_lockowners.py⁠、hermes_state_prune_rewrite.py⁠、hermes_state_skew_exit.py 这样。

这不是"代码变少了",是变碎了。一个文件只干一件事,改一处不会牵出三个回归——代价是开一个新目录就要先翻八百个文件名。

怎么升

# CLI:两条路各选一条 hermes update # 或者重跑安装器那一行  # Docker / Hermes Cloud docker pull nousresearch/hermes-agent:stable # 想跟最新也行::latest  # Microsoft Store 应用 # 走 Store 更新  # 安装器装的桌面端(.exe / .dmg) # 这版不动,跟下个 bundled release 一起更

升级前有四件事值得先看一眼:

  • 桌面端这次真的没更新
    ⁠,点了没反应是正常的,别以为卡住了
  • 在用 OpenClaw / Claude Code / Codex CLI / Cursor / Grok Bot / OpenBot 的
    ⁠,可以试 hermes migrate⁠,会先预览再问你要不要落盘
  • 有 skill 不想被 agent 改的
    ⁠,hermes curator lock <名字>⁠,锁完记得自己那份还能改
  • 在跑 cron 的
    ⁠,hermes cron cancel 和按任务设的"错过运行"策略是这版才有的

这版的 tag 是 annotated tag,message 里塞着发布流水线的元数据,能看到它是从 rc.3-v0.22.6 提升上来的,dockerManifestDigest 是 sha256:d27689bc…⁠。从打 commit 到发 release 隔了 1 小时 21 分。

我自己的判断

v0.23.0 那份 release note 大概率会变成一份没人从头读到尾的巨型文档。这是"攒着一起写"策略的必然结果——每多攒一个版本,就多一层债务,而这一版的体量是上个补丁版的 15 倍。

但真正让我对这个版本有好感的,恰好是那三件官方懒得写的事。它们指向同一个方向:开始给 agent 装刹车了。

不能改你锁住的 skill,不能悄悄往 prompts 里塞东西,不能在策略钩子说不行的时候还发那次推理请求。这些都是"减法",写进 release note 撑不满一行,但装到实际用的机器上,差别很大。

一个能自己写 skill、自己改配置、自己起 gateway 的 agent,最缺的可能真不是更多能力,是几个它自己打不开的锁⁠。

对了,如果你是 Microsoft Store 装的,这次能从 Store 直接更到——release note 里单独写了一行。不过 Store 审核有时差,去更新页看看有没有;有的话回来说一声版本号,我想确认两边对不对得齐。

精选系列





【声明】内容源于网络
0
0
创见AI实验室
创见AI实验室,我们不只是介绍工具,我们共同创造工作方式的未来。
内容 238
粉丝 0
创见AI实验室 创见AI实验室,我们不只是介绍工具,我们共同创造工作方式的未来。
总阅读24.9k
粉丝0
内容238