Hermes v0.20.3:会自我修复的补丁——凌晨 3 点挂掉的定时任务,自己爬起来了

凌晨 3 点,你的定时任务悄悄挂了。没有报错、没有通知,管理面板上一切显示“健康”——直到早上 9 点你才发现数据没更新。这个场景 Hermes 团队自己就撞上过:2026-08-14 的一次线上事故,连续 4 个晚上任务漏跑,唯一的痕迹是日志里一行不起眼的 WARNING。v0.20.3(tag v2026.8.16.2)就是为这类问题出的补丁:它让 Hermes 学会自己发现故障、自己爬起来,而不是把烂摊子留给你。
这个补丁窗口合并了约 125 个 PR、约 250 个提交。好消息是:官方说明说完整文档随 v0.21.0 发布,但补丁里最值钱的部分,其实几句话就能讲清楚。
定时任务:从“悄悄挂掉”到“自己爬起来”
先说最疼的。过去 Hermes 的定时任务有几种“假健康”死法,每一种都能让任务停摆几小时甚至几天,而系统看起来一切正常:
- 文件描述符耗尽(EMFILE):调度器抢锁时把所有错误都当成“别人在锁”,于是 fd 耗尽被记成一次成功 tick,之后没有任何任务再跑过;
- 卡死的任务:任务出错一次后
next_run_at停在未来,任何清理逻辑都对它视而不见,重启网关也没用; - 外部 provider 漏触发:Chronos 这类托管 cron 的触发没送达,任务就永远停在过去的时间点上。
v0.20.3 把这三类都治了。EMFILE 现在会被如实上报并尝试回收文件描述符(指数退避,最多 15 分钟);卡死的任务会在下一个 tick 自动重新武装——而且重新武装遵守 cron 表达式,周一到周五的任务绝不会在周六跑;外部 provider 漏掉的触发会在宽限期后由网关本地补跑。
补跑窗口可以用配置调:
cron:
misfire_grace_minutes: 10 # 默认 10;设 0 或负数则关闭补跑
更重要的是,漏跑终于看得见了。每次触发失败,任务记录上都会盖一个 last_fire_error 印记,在 hermes cron list 里以红色 ⚠ Missed scheduled fire: 显示,dashboard 和 agent 的 cronjob list 工具输出里也有;下一次成功运行会自动清除它。以前排查“任务到底跑没跑”要靠翻日志,现在一行命令:
hermes cron list
如果你在用外部 cron provider(Chronos / 托管 cron),升级后先跑一次这条命令,确认没有待处理的漏跑。这套自愈能力怎么配、怎么监控,我们的定时任务完全指南里有更完整的用法。
MCP:跟上 2026-07-28 无状态协议
这一窗口 Hermes 完成了 MCP 2.x SDK 迁移,并端到端支持 2026-07-28 发布的无状态协议——简单说,新一代 MCP 服务器不再强制要求 initialize 握手,Hermes 现在开箱就能连上它们。
具体到配置,每个 MCP 服务器可以加一个 protocol 键:
mcp:
servers:
my-server:
url: https://example.com/mcp
protocol: auto # auto 默认:先试旧握手,被拒就回退 server/discover
auto 对现有服务器零影响(不增加任何往返),stateless 强制先 discover,legacy 则完全关闭回退。顺带还接住了新协议的两个细节:tools/list 返回的 TTL 缓存提示(ttlMs/cacheScope)会进入带过期时间的 schema 缓存,OAuth 注册也按新规范走(native application_type + RFC 9207 iss 校验)。MCP 服务器的更多配置技巧见我们之前的 MCP 上下文变量指南。
新供应商:CommandCode 与 Muse Spark
想换个模型供应商?这一窗口加了两个:
CommandCode(commandcode.ai)成为一等公民供应商,一个 key 覆盖 GOAT/Pro/Max/Provider 套餐里的 30+ 个开源与闭源模型。配置方式:
hermes setup # 或手动设置
export COMMANDCODE_API_KEY="your-key"
hermes --provider commandcode
需要 Anthropic Messages 接口的话用 commandcode-anthropic profile,同一个 key。另外在 main 上(还没进任何 release tag),Meta Model API(Muse Spark) 也作为内置插件加入了——--provider meta-ai 开箱即用,用 MODEL_API_KEY 认证(也认 META_API_KEY 别名),有 muse-spark-1.2 和 muse-spark-1.2-contributor 两个模型可选。
让 agent 的改动可以反悔:/worktree 与 /rollback
这个窗口还落地了两个受 Copilot CLI 启发的命令,专治“agent 把仓库搞乱”的焦虑。
/worktree new 让你在会话中途开一个隔离的 git worktree,不用重启:
/worktree new my-experiment
Hermes 会在仓库里建 .worktrees/my-experiment/(分支基于最新 fetch 的远端 tip),并把当前会话的终端和文件操作重定向进去。实验做完、改动满意,退出时它会按老规矩保留有未推送提交的 worktree。/worktree 单独输入显示当前树,/worktree list 列出全部。
/rollback 升级成了“安全回滚”:Hermes 按项目记录每次自己写入文件的 sha256,回滚时只撤销agent 改过的内容、删除 agent 创建的文件,你手工改的东西原样保留。想全部还原再加 --all 或 --force,被跳过的文件会明确告诉你。这对“agent 改错了文件,但我自己又动过几行”的场景是救命级体验。
升级
hermes update
升级后跑一遍 hermes doctor 验证安装,然后重启网关(hermes gateway)。如果你在用外部 cron provider,记得先看一眼 hermes cron list——确保没有历史欠账。
更完整的改动清单在v0.20.3 发版说明;上一个补丁的连接与 MCP 深链亮点见v0.20.2 补丁解析。