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 标记的测试分类改动。
|
|
|
|
|
|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
折成日均:329 个 commit、74 个 PR、2.37 万行新增。平均每小时写进去 987 行。
这也解释了那个"故意不写"——不是懒,是写不完。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 行
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,把工具拦掉。一个往开里放,一个往死里拦,方向不同,但都写了。
顺便看了眼仓库现在长什么样
我拉了 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 审核有时差,去更新页看看有没有;有的话回来说一声版本号,我想确认两边对不对得齐。






