Hermes 新命令 /loop:在会话里养一个"越等越聪明"的哨兵——与 /goal、cron 的本质区别


部署脚本跑完了,但你不敢走开——CI 会不会红?队列会不会堵?服务什么时候真正 live?于是你每隔五分钟手动刷新一次页面,像一个尽职的哨兵。

Hermes 最新的 /loop 命令,就是来顶替你当这个哨兵的:在会话里按节奏重复执行一条 prompt,每次醒来都基于最新状态干活。它是 Hermes 对 Claude Code /loop 的实现(/proactive 别名也兼容),刚刚合入 main。这篇文章把它讲透:它和 /goal、cron 到底有什么本质区别,以及怎么用它。

一句话分清三个命令

命令 驱动方式 生命周期 典型用途
/goal judge 驱动——每回合后由裁判模型判断“达成没有”,没达成就继续 单会话内,跨回合持续 “把 src/ 下所有 lint 错误修完并验证通过”
/loop timer 驱动——到点就醒来干一次,直到有人喊停 单会话内,跨回合 + 跨恢复 “每 5 分钟看一次部署状态,live 了告诉我”
cron 调度驱动——固定时间表,与任何会话无关 会话外,无人值守 “每天早上 9 点生成日报发到群里”

/goal 是“不停工作直到达成目标”,/loop 是“反复检查直到有人说停”,cron 是“到点执行、与对话无关”——三者完全不重叠。

两种节奏:你定时钟,或让它自己定

固定间隔:你说了算

/loop 5m check the deploy status and tell me if it's live yet

每 5 分钟(会话空闲时)注入一次真实 agent turn,基于当前状态干活——最新 CI 结果、最新队列深度、文件现在的样子。

自适应节奏:越等越聪明

不写间隔,让 Hermes 自己定节奏:

/loop keep an eye on the migration and summarize progress

机制很巧妙:从 60 秒起步,只要 agent 的回复不再变化,就指数退避(2m → 4m → 8m … 上限 15 分钟);一旦回复内容发生变化,立刻弹回 60 秒加密检查。变化检测用的是本地摘要比对(忽略时间戳),零额外 LLM 成本——等得越久说明越稳定,越稳定就越少打扰;一旦有进展,马上跟进。

一句话:外部时钟驱动工作用固定间隔,工作节奏自己变化用自适应

停止条件:五个出口

条件 方式
Agent 自己判断完成 醒来回复以 LOOP_COMPLETE 单独一行结尾
次数上限 --times N(如 --times 30
证据条件 --until <条件>——由 /goal 同款裁判模型判断(fail-open,裁判坏了也不会卡死循环)
手动 /loop stop(或 /loop pause 暂时挂起)
预算兜底 loops.max_ticks(默认 100,0 表示无限)——防止无人看管的会话无限烧 token
/loop 2m poll CI --times 30
/loop 5m watch the queue --until "queue depth reaches zero"

控制与组合

  • /loop status 看节奏与下次唤醒时间;/loop pause / resume / stop 全生命周期控制(CLI 里 Ctrl+C 也会暂停,可恢复)。
  • 循环一条 slash 命令:/loop 10m /recap
  • /goal 协作:活跃的 goal 拥有“空闲边界”——loop 的 tick 会等 goal 完成/暂停/搁置后再触发(wait barrier);而一个已搁置的 goal + loop 心跳可以自然组合。真实用户输入永远抢占两者——你一发话,两个都让路。

为什么它不掉链子:架构级设计

这是这篇博客想让你真正看懂的部分——/loop 不是简单的 while true

  1. 普通 user-role turn 注入:每次 wakeup 就是一条普通用户消息,不篡改 system prompt、不换工具集、prompt 缓存保持完整——不会因为循环而破坏缓存、浪费 token。
  2. 状态持久化:循环状态存在 SessionDBstate_metaloop:<session_id>),/resume 恢复会话后循环自动复活,跨上下文压缩也能迁移(和 /goal 同款机制,已知坑提前修了)。
  3. 全平台覆盖:CLI、TUI、dashboard、桌面 App、以及所有 gateway 消息平台——gateway 有一个 loop_wakeup_watcher 扫描持久化的循环,即使你不在聊天,它也会在空闲会话里注入唤醒。这是 Claude Code 做不到的(它的 loop 只活在 CLI 会话里,关终端就死)。
  4. Slack 的小插曲:Slack 有 50 个斜杠命令上限,Hermes 把 /version 移到了 /hermes version,给 /loop 腾出了原生槽位。

和 Claude Code 的 /loop 相比

Claude Code Hermes
覆盖面 仅 CLI 会话 CLI + TUI + dashboard + 桌面 + 全部消息平台
持久化 随会话消亡 /resume 与压缩后依然存活
自适应节奏 模型自己决定 本地摘要退避(免费、确定)
停止条件 写在 prompt 里 LOOP_COMPLETE + --times + 判定的 --until + 预算兜底
与 /goal 协作 各自独立 显式优先级:活跃 goal 拥有空闲边界

什么时候用哪个(决策表)

发布状态与获取方式

/loop 于 2026 年 8 月 14 日合入 main(PR #72333,含 77 个新测试 + 367 个回归测试 + 22 个桌面测试,全部通过),尚未进入任何正式 release(最新仍是 v0.20.1)。想尝鲜:

  • 等下一个 release 后 hermes update
  • 或现在就从 main 分支安装:hermes update --branch main(等正式发布后记得切回来)。

配置键(可选):loops.min_interval_secondsloops.max_ticksloops.self_paced_floor_secondsloops.self_paced_ceiling_seconds

总结

/loop 把“盯梢”这件事从你的手动刷新里解放出来:固定间隔适合外部时钟,自适应节奏让它“越等越聪明”(稳定就退避、变化就加密,还零成本);持久化 + 全平台 + 与 /goal 明确协作,让它比 Claude Code 的原版更完整。下次部署完,把那个哨兵的角色交给它吧。