長運行 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 能持續推進的最基本保障,一點也不花哨。