长运行 Agent

Initializer + Coding Agent

核心思路:把一个 Agent 拆成两个角色,一个负责规划,一个负责执行。每次交接都留下干净的状态。

双角色解决方案
两个 Agent,明确分工
只跑第一轮
Initializer Agent
负责从零到有:搭环境、定计划、做第一次提交
  • 创建 init.sh 脚本搭建开发环境
  • claude-progress.txt 进度文件
  • 把用户的高级提示展开成详细的功能清单(JSON 格式)
  • 做第一次 git commit,确保仓库状态干净
每轮都跑
Coding Agent
负责从有到多:逐个功能实现,持续推进
  • 读 progress 文件,了解当前状态
  • 一次只做一个功能
  • 完成后更新 progress 文件
  • git commit 并写清楚做了什么
功能清单的设计

一种验证有效的做法是用 JSON 格式来记录功能清单,Markdown 不适合这个用途。原因是:模型更不容易错误修改结构化的 JSON,而 Markdown 容易被模型顺手重写。

// claude-progress.txt 中的功能清单 { "features": [ { "category": "authentication", "description": "Email/password login with session management", "steps": [ "Create login form component", "Implement auth API endpoint", "Add session cookie handling", "Write end-to-end test" ], "passes": false }, { "category": "chat", "description": "Real-time streaming chat with Claude API", "steps": ["..."], "passes": false } ] }
Prompt 中使用强措辞:明确告诉 Agent「不允许删除或修改已有的测试内容」。否则 Agent 会为了让测试通过而降低测试标准。
增量进度:一次只做一个功能
为什么"一次一个"是关键
测试验证

Agent 容易以为做完了却没有端到端验证。它说「实现了登录功能」,但实际上按钮根本点不动。解决方案:

明确要求 Agent 用浏览器自动化做端到端测试。
要真正打开浏览器、点击按钮、验证结果,光有单元测试还不够。让 Agent 用 Puppeteer / Playwright 写 E2E 测试,作为功能是否真正"passes"的判定标准。
最终效果
200+ 功能的 claude.ai 克隆成功构建
通过 Initializer + Coding Agent 的双角色方案,成功让 Agent 自主构建了一个包含 200+ 功能的完整 Web 应用。每个功能都有对应的 E2E 测试,代码始终保持可合并状态。
好的交接机制 = 好的长运行 Agent。进度文件、功能清单、增量提交,这些是让 Agent 能持续推进的最基本保障,一点也不花哨。