Hermes v0.21.1:一次让 Hermes 瘦了三分之一的升级,你在乎的事反而全变快了

大多数 Hermes 更新都会向你索取点什么:一个新命令要学、一个新配置要想清楚、一个新默认值改变了你现有环境的脾气。v0.21.1(tag v2026.9.7,2026 年 9 月 7 日发布)正好相反——装完之后你几乎察觉不到,因为变的全是引擎盖下面的事,或者是工作流里最让你烦躁的那几处。官方把这次定位为整合补丁:自 v0.21.0 以来约 5,139 个提交、改动约 4,364 个文件、合并约 632 个 PR,官方说明从简、完整梳理留给 v0.22.0。我们替你把整个窗口翻了一遍,下面是要点。
一次让代码库瘦了三分之一的更新
这个窗口最大的新闻,不打开仓库你是看不见的:一次整库简化(PR #102117)把源码从 1,063,826 行减到 698,363 行——砍掉 34.4%——并且行为保证不变。超过 5,000 行的巨型文件从 37 个变成 6 个。那些著名的庞然大物都不见了:gateway/run.py 从 34,847 行缩到 5,512 行,cli.py 从 22,426 行缩到 4,656 行,超过 300 行的函数从 192 个降到 2 个。旧文件保留为薄薄的入口,团队在合并前逐字节对拍了工具 schema、配置默认值和线上格式,确认与重构前完全一致。
你什么都没看见,为什么要关心?因为“能装进模型脑子里的代码库”导航成本更低:这个 PR 自带的评测把重构前后的仓库导航任务成功率与 token 花费都量了一遍,现在每个子系统都小到 agent(或人)能真正装进上下文。下次你在大型代码库里跑会话,加载更快、走弯路更少——这次重构相当于给 agent 化编码发了一张永久 token 折扣券。完整数字见本站的 v0.21.1 发版说明。
扇出任务:跑完一个报一个
如果你曾经一次派五个子代理去调研,然后盯着空空的对话框等了一个小时——只因为最慢的那个卡住了——这条就是为你写的。以前 delegate_task 要等最后一个孩子跑完才一次性返回结果;现在每个任务一完成就立即返回(PR #104299)。需要归拢的任务可以加一个 group,同组结果仍然合并成一条消息:
{
"tasks": [
{ "goal": "check api latency", "group": "bench" },
{ "goal": "check db latency", "group": "bench" },
{ "goal": "scan the changelog" }
]
}
两个基准测试任务会一起回来;changelog 扫描一跑完就单独落地。你可以先处理先到的结果,不必干等掉队的那个——而且整次调用仍然只占 delegation.max_concurrent_children 的一个名额,容量账不用重算。配合本站的子代理实时编排指南,扇出任务会变得像一支你真能看着干活的团队。
孩子把方向盘交还给你——包括后台进程
同一轮委派修复还解决了多代理协作里最阴险的失败模式之一:子代理拉起一个长跑后台进程然后退出,这个进程以前会变成“没主”状态——要么被孩子的清理逻辑悄悄杀掉,要么父会话傻等一个永远不会来的完成通知(因为孩子的 notify=true 是没人兑现得了的承诺)。现在子代理退出前可以把正在跑的进程交接给你:process_manage(action="handoff", session_id=<id>, data="<purpose>")——所有权转给父会话,进程跑完时通知会带着用途说明落到你的对话里(PR #105125)。遗留物会被如实报告为“已终止”,孩子也会事先被告知通知并不保证送达。“孤儿进程”悬案就此了结。
没有浏览器也能登录 MCP
你 SSH 到一台无头服务器,让 Hermes 连一个自托管的 MCP 服务器,然后撞墙了:服务器要求走 OAuth 浏览器流程,而方圆十里唯一有浏览器的设备是你的手机。RFC 8628 设备码正是为这种情况设计的,v0.21.1 把它端到端接好了(PR #104891)。一条命令开始流程:
hermes mcp login <server> --flow device
Hermes 会找到服务器的设备端点、打印验证 URI 和用户码,然后轮询等待你在任意一台有浏览器的设备上批准。在服务器配置里写 oauth.flow: device,设备码就成为登录和重授权的默认方式。被拒绝或过期的授权绝不会覆盖你已有的凭据,后台重连也会引导你显式登录而不是偷偷发起设备流程。如果你在远程主机上跑 MCP 服务器,这一条消灭了整整一类“在这儿没法授权”的痛点——其余无头友好的 MCP 工具见本站的 MCP 配置上下文变量指南。
选择器不过时,锁定不跑偏
这个窗口落地的两个模型选择升级,合起来治好了“等等,它为什么用了那个供应商?“的瞬间。第一,OpenRouter 的路由规则现在可以按模型锁定,而不只是全局设置(PR #104159):
provider_routing:
sort: price
models:
"openai/gpt-6-astra": { only: [openai] }
"anthropic/claude-fable-5.1": { only: [anthropic] }
一份配置就能把 GPT-6 Astra 锁给 OpenAI、把 Claude Fable 锁给 Anthropic,其余模型照旧按价格排序——而且因为规则在每条请求路径共用的同一个咽喉点生效,cron 任务和委派子代理同样遵守。如果你一直在追本站的 Astra 发现门控指南,这把旋钮就是让多供应商 Astra 配置变得确定性的关键。
第二,/model 选择器不再过期:远程目录从 1 小时 TTL 改为每 20 分钟刷新一次,网关后台循环会保持目录温热,即使没人打开选择器(PR #101319)——新发布或下架的模型会在二十分钟内在所有界面出现(或消失)。Meta Model API 供应商也改以实时 /v1/models 响应为权威目录,新 Muse 模型无需等客户端更新就会出现(PR #101503)。更多目录与覆盖机制见本站的模型覆盖配置指南。
引擎盖下的提速:搜索、压缩与更诚实的 cron
search_files现在本地直跑原生 ripgrep(PR #104502)——内容搜索从约 85 ms 降到约 15 ms,按文件名搜索从约 73 ms 降到约 12 ms。结果一样,工具延迟却低了 5-6 倍;对每轮都在反复搜索的 agent 循环来说,积少成多非常可观。万一遇到怪事,HERMES_NATIVE_FILE_READ=0可以退回旧 shell 路径。- 压缩不再丢掉前缀缓存(PR #104455):编码会话的工作区快照按会话固定,不再每次压缩都重新探测
git status——长会话压缩后不必再从零重建提示词。 - 跑完的子代理不再漏内存(PR #102032):孩子 transcript 从父进程堆释放,也不再进全文索引——一次 1,320 个孩子的运行以前会留下 1.9 GB 堆和约 1 GB 影子表。
- cron 如实报告错过触发(PR #100445、#104877):
hermes cron list现在给每个任务打印一行Dispatch:——补跑显示⚠ catch-up after missed fire,不再用干净的 “ok” 糊弄人;安静的监控 tick 也不再抹掉下次运行需要的 continuity 上下文。更多 cron 卫生见本站的 cron 医生指南。
同一窗口还修了一个真安全漏洞:approvals.deny 规则现在在隔离的 Docker 和云端沙箱内部同样生效(PR #103649),堵住了一条即使在 --yolo 下也能用沙箱 shell 绕过 deny 清单的路。v0.21.0 Pantheon 大版本负责上新功能,v0.21.1 负责让房子站得稳。如果你跳过了最近几个补丁,本站的 v0.20.6 补丁盘点覆盖了之前的更新。
hermes update
升级、跑一遍 hermes doctor、重启网关——然后享受这次“改了三分之一代码却一个设置都不用你动”的更新。