17Long-Running Agent
核心问题:长任务必须跨多个 context window,而每个新 session 没有前一个的记忆。简单 compaction(把历史摘要塞回去)在超长任务下信息漂移严重——agent 会"忘记自己做过什么"。
解法:双 agent 架构
┌─────────────────────────────────────┐
│ Initializer Agent (跑一次) │
│ · 探索 codebase │
│ · 生成 plan.md (任务拆解) │
│ · 配环境(install deps、env) │
│ · 写空 progress.md │
└─────────────────────────────────────┘
↓
┌─────────────────────────────────────┐
│ Coding Agent (反复唤起) │
│ 每次启动: │
│ 1. 读 plan.md + progress.md │
│ 2. 推进 1~2 个 feature │
│ 3. 更新 progress.md │
│ 4. 触发 context reset │
│ 5. 下一轮从干净 context 起 │
└─────────────────────────────────────┘
↑ ← 共享文档作为 cross-session memory ← ↓
关键设计 1:共享文档作为唯一持久状态。plan.md + progress.md 是 agent 的"班次交接表"。必须结构化:
# progress.md 标准模板
## 已完成
- [x] 重构 auth 模块为 async
- [x] 添加单元测试
## 进行中
- [ ] 迁移 DB schema(改了 3/8 张表)
## 阻塞
- payment 模块的 stripe webhook 测试需要 mock
## 下一步
1. 完成剩余 5 张表的 schema 迁移
2. 跑全量测试
关键设计 2:Initializer 和 Coding agent 用不同 system prompt。Initializer 任务是"读懂 + 拆解",Coding agent 任务是"按 progress 推进"——两个 system prompt 优化目标完全不同,共用会两边都不好。
关键设计 3:reset 策略。每次 Coding agent run 在 context 用到 60-70% 时主动触发 reset(把状态写入 progress.md → 撕掉 context → 新 session 读 progress 继续),不要等到 95% 才被动 compact。
模型代际差异(重要):Claude Sonnet 4.5 有 context anxiety(感觉 context 快满会提前结束任务)——这套架构就是为它优化的。但 Opus 4.5 已不再需要 context anxiety,可以在一个 session 跑更久(见 #27)。harness 设计要预设模型迭代。
Claude Code 在 long-running 模式下的工作流(基于 Anthropic 公开博客):
Day 1, Session 1:
User → "重构整个 auth 系统为 OAuth2"
Initializer:
- 扫描所有 auth 相关文件 (50 个)
- 写 plan.md:列 12 个 milestone
- 写 progress.md(空)
- exit
Day 1, Session 2 (用户回来):
Coding Agent reads:
plan.md → 12 milestone
progress.md → 全部未完成
推进 milestone 1-2 (改 token 生成模块)
Update progress.md:
[x] milestone 1, [x] milestone 2
触发 reset, exit
Day 2, Session 3:
Coding Agent reads:
plan.md(不变)
progress.md(2 完成,10 待办)
推进 milestone 3-4
...继续 N 天
对比:如果不用这个架构,把 50 个文件 + 12 个 milestone 全塞进 context,Sonnet 4.5 跑到一半就 context anxiety 退出,Opus 4.5 也会因为 attention 衰减而出错。
何时用 Long-Running 双 agent 架构
- 任务需 > 1 个 context window 才能完成——大型重构、跨多文件迁移、多日积累的研究
- 用户可接受异步执行——不需要立即看到结果,可以分多次回来检查
- 任务可以结构化拆解——能写出清晰 plan.md(milestone 化)
- 有持久化能力——文件系统可写,或外部 DB 存 progress