核心洞察
你以为缺的是更强的 prompt,其实缺的是一个会按时叫醒它的 runtime。
问题现象
Agent 在一轮任务结束时说:
"下一步:继续收集案例,之后搭建模拟交易环境。无需老板决策,继续工作。"
然后它就真的不工作了。
嘴上说继续,身体很诚实地停在了当前回合。
误解根源
大多数 Agent 产品的基本交互单位是一个 turn。完成本轮回复后,系统不会自动发起下一轮。
没有外部调度器再次唤醒它,下一轮根本不会发生。
正确架构:短周期接力
不是让一个上下文窗口硬撑 24 小时。
每 30 分钟醒一次
→ 读取当前状态
→ 选择最高优先级任务
→ 推进一个明确工作单元
→ 更新任务队列
→ 写入运行日志
→ 等下一次 heartbeat
长期工作的秘密不是「不断说继续」,而是 Gateway + Cron + Heartbeat + 状态文件。
四个核心部件
1. Gateway:真正的后台闹钟
功能:到点检查、启动任务、创建 fresh agent session。
关键命令:
hermes gateway install
没有 Gateway 的后果:
- cron 任务能 list 出来
- 但不会自动跑
- "闹钟列表写好了,但没有人在后台看表"
2. Cron:按时唤醒 Agent
定义:什么时候叫醒 Agent。
关键坑:
| 写法 | 含义 | 结果 |
|---|---|---|
hermes cron create "30m" | 30 分钟后运行一次 | 一次性任务 |
hermes cron create "every 30m" | 每 30 分钟运行一次 | 循环任务 |
验证:列表里看 Schedule 和 Repeat 字段。
3. Heartbeat:每次醒来该做什么
文件:HEARTBEAT.md
作用:交接班卡片,写清楚每次被唤醒后必须做什么。
示例结构:
1. 读取连续工作规则
2. 读取当前状态
3. 读取任务队列
4. 检查是否存在阻塞
5. 推进一个实际工作单元
6. 更新状态文件
7. 写运行日志
关键约束:
不要只输出计划。只要没有阻塞,就必须实际推进文件、研究、代码、报告或记录中的至少一项。
防止:Agent 每次醒来只说 "下一步我会继续",然后什么都没做。
4. 状态文件:替代聊天上下文
核心问题:Cron 新建 session 不继承当前聊天窗口上下文。
如果你在 cron prompt 里写:
"继续刚才的工作。"
它大概率不知道「刚才」是什么。
解决方案:把上下文落到文件系统。
最小文件结构
| 文件 | 用途 |
|---|---|
HEARTBEAT.md | 每次醒来做什么 |
config/continuity_policy.md | 长期运行规则 |
memory/current-state.md | 当前阶段、主任务、已完成事项 |
memory/task-queue.md | 任务队列(NOW / NEXT / LATER / BLOCKED / DONE) |
memory/run-state.md | 最近一次运行类型、完成事项、当前 focus、下一步、是否被阻塞 |
logs/ | 运行记录 |
关键原则:
Agent 可以失去聊天上下文,但不能失去工作上下文。
通用 Work Heartbeat 模板
你是这个项目的长期工作 Agent。工作目录是 /path/to/project。
这是一次 Work Heartbeat。不要只汇报计划,必须实际推进一个工作单元,除非遇到明确阻塞。
先读取:
- HEARTBEAT.md
- config/continuity_policy.md
- memory/current-state.md
- memory/task-queue.md
- memory/run-state.md
然后执行:
1. 检查是否存在阻塞事项
2. 如果没有阻塞,从 memory/task-queue.md 选择最高优先级任务
3. 推进一个明确工作单元
4. 更新 memory/current-state.md、memory/task-queue.md、memory/run-state.md
5. 如有实质进展,在 logs/ 写一条简短运行记录
本轮回复只需要说明:
- 完成了什么
- 更新了哪些文件
- 下一轮继续什么
- 是否需要用户决策
注意:没有写 "继续刚才"——每次都从工作目录和状态文件恢复自己。
建议的 Cron 设置
三层调度
| 任务 | 频率 | 职责 |
|---|---|---|
| Work Heartbeat | every 30m | 持续推进日常工作 |
| Short Review | every 12h | 短周期复盘,避免只堆文件 |
| Major Review | every 48h | 阶段性反思,更新方向和任务队列 |
入门建议
如果只是普通资料整理:
- 先只开 Work Heartbeat every 30m
- 确认能稳定接力
- 再加 12h 和 48h 复盘
Git 使用原则
Git 应该是审计账本,不是运行日志。
| 操作 | 频率 | 规则 |
|---|---|---|
| 文件写入 | 随时 | 工作单元推进时 |
| 本地 commit | 明确工作单元结束后 | 有实质进展时 |
| push GitHub | 低频 | 确认无敏感信息后 |
绝不提交进 Git:
- API key / cookie / token / 密码 / 私钥
- 个人身份材料
- 大体量原始数据
- 高频变化的数据库文件
自检清单
如果你的 Agent 做完一轮就停,先问自己四个问题:
- 有没有后台 Gateway?
- Cron 是 once 还是 every?
- 每次唤醒的 prompt 是否自包含?
- 有没有状态文件承接上一轮工作?
四个答案都对,它才真的有可能 24 小时工作。
核心结论
长期工作的秘密,不是让 Agent 一口气跑更久,而是让它每次醒来都知道自己是谁、在哪、要接着做什么。
资源
- 作者:Bridge Wang (@qc777qc)
- 原文:https://x.com/qc777qc/status/2055938260103548970
- 工具:Hermes Agent