跨編碼代理的工作協調
您是協作者:您擁有任務定義、審查每個交付成果,並決定後續步驟。每個其他代理都是工作者:它接收規範、產出工件並停止。沒有跨供應商的訊息匯流排,因此協調是以回合制且基於檔案的方式進行:
您寫下 task.md -> 工作者無頭執行 -> 工作者寫下 result.md ->
您閱讀、驗證、決定下一回合
如果已安裝 agent-sync,請在委派之前執行 agent sync,以便每個工作者都從您擁有的相同綜合化記憶開始。
1. 編寫任務目錄
task/
task.md # 規範(請參閱下方合約)
...inputs... # 工作者所需的一切;工作者不接收其他上下文
result.md # 工作者寫下此檔案;其存在表示完成
task.md 是一份承包商簡報,必須包含:
- 目標,一個段落即可;
- 確切的交付成果(一個命名檔案);
- 可檢查的完成定義;
- 完成交付成果後停止的指示;
- 當工作者將編輯共享樹時,第 2 節中的鎖定或工作樹規則。
2. 在呼叫任何人之前選擇共享模式
第零條規則:兩個代理絕不能同時變更同一個工作樹。
| 情境 | 模式 |
|---|---|
| 工作者僅讀取(審查、分析、第二意見) | 同一目錄,無鎖定 |
| 在一個樹上交替編輯 | 同一目錄 + mkdir 鎖定 |
| 平行嘗試或平行觸摸檔案的子任務 | 每個工作者一個 git 工作樹 |
| 兩個代理同時編輯一個樹 | 永不;請重構 |
同一目錄鎖定(mkdir 是原子操作;請也將這些指令放入 task.md 中):
until mkdir .agent-lock 2>/dev/null; do sleep 1; done # 取得鎖定
echo "$(whoami):$$" > .agent-lock/owner
# ... 工作 ...
rm -rf .agent-lock # 釋放鎖定
切勿根據時間自動使鎖定過期:緩慢的工作者看起來與已死亡的工作者相同。在清除陳舊鎖定之前,請先驗證工作者進程已死亡。
工作樹模式:為每個工作者執行 git worktree add ../task-<worker> -b agent/<worker>,工作者永不推送且永不觸碰彼此的工作樹,主檢出保持唯讀,而您(協作者)執行所有合併作為唯一的序列化步驟。
3. 無頭執行工作者
| 工作者 | 命令 |
|---|---|
| Claude Code | claude -p "Read task.md in this directory and complete it." |
| Codex CLI | codex exec --skip-git-repo-check --sandbox workspace-write "Read task.md in this directory and complete it." </dev/null |
| Gemini CLI | gemini -p "Read task.md in this directory and complete it." |
從艱苦教訓中學到的規則:
- 從任務目錄內部執行工作者,並將其寫入權限限制在該目錄內。
- 對任何後台工作者關閉標準輸入(
</dev/null),否則它可能會掛起等待輸入。 - 沒有
--skip-git-repo-check時,Codex 會拒絕不受信任的非 git 目錄。
4. 驗證,然後決定
- 工作者的話不是交付成果。閱讀
result.md並根據完成定義進行檢查;對於程式碼,請自行執行測試。 - 缺失或錯誤的交付成果會得到一個包含更明確規範的新回合,而不是重複相同的回合。
- 您對您接受的內容負全部責任:像審查人類承包商的 PR 一樣審查工作者的差異(diff)。
界限
- 絕不給予工作者憑證、部署權限或存取真實受眾的權限;工作者產出工件,協作者(與使用者一起)部署它們。
- 如果沒有鎖定或工作樹,切勿執行此協定來平行編輯一個樹內部的內容,即使是為了「快速」任務。
- 使用者決定哪個代理扮演協作者;不要將協調工作移交給工作者。