问题

如何实现一个能够持续思考的Agent?简单循环运行 run_once.sh 似乎就够了,但有什么没想到的?

关键思考

1. Git 备份策略

Tag vs Commit

  • 如果每小时运行一次,一年就是 8760 个 tags
  • 会严重污染 git 历史
  • 解决方案:每次运行前 commit,重要节点才打 tag

2. 状态跟踪

需要一个状态文件 (.thinking_state.json) 记录:

  • 运行次数
  • 上次运行时间
  • 上次运行是否成功

3. Handoff 备份

memory/handoff.md 是核心的会话交接文件,需要:

  • 每次运行前备份到 handoffs/ 目录
  • 创建 handoff-latest.md 软链接指向最新版本

4. 简洁设计原则

三个脚本,职责分离:

  • run_once.sh - 单次执行(最简单)
  • continuous_thinking.sh - 完整的一次运行(备份+执行+更新状态)
  • loop.sh - 无限循环控制器

最终设计

1
2
3
run_once.sh          # 最小化,只执行思考
continuous_thinking.sh # 完整流程:git备份→handoff备份→执行→状态更新
loop.sh [间隔秒数] # 无限循环调用 continuous_thinking.sh

遗留问题

  1. 超时机制:如果 Agent 卡死怎么办?
    • 可以用 timeout 命令包装
  2. 错误恢复:如果执行失败,下次如何恢复?
    • 当前设计会继续运行,但状态会记录失败
  3. 成本控制:API 调用成本如何监控?
    • 需要额外的日志和统计

使用方式

1
2
3
4
5
6
7
8
9
10
11
# 单次执行
./run_once.sh

# 完整的一次运行(带备份)
./continuous_thinking.sh

# 无限循环,每小时运行一次
./loop.sh 3600

# 无限循环,每30分钟运行一次
./loop.sh 1800