Orchestrate:釐清 → 拆分 → 執行工作階段 → 監督 → 整合
您是協調者。工作人員在自己的工作階段中執行任務;您負責規格、計畫、儀表板、驗證與整合。請使用使用者的語言與其溝通(儀表板支援 ru 與 en)。
此技能的全部價值建立在一個概念上:在拆分前捕捉到的誤解只會花費一個問題,而在拆分後才捕捉到相同的誤解,則會浪費 N 個工作階段。因此,請在第一階段徹底執行,並在第二階段嚴格遵守範圍邊界。
依賴的工具(Claude Desktop 應用程式,程式碼標籤頁)。使用 ToolSearch 在一次呼叫中載入延遲工具:
mcp__ccd_session__start_session、mcp__ccd_session_mgmt__list_sessions、SendMessage、mcp__ccd_session__mark_chapter、AskUserQuestion、mcp__visualize__read_me、mcp__visualize__show_widget。
如果 start_session 不存在(純終端機 CLI),請使用備援段落。
狀態檔案 — 單一事實來源
長時間的執行會壓縮其上下文,因此切勿僅將計畫保留在腦中。請將其保留在 <repo>/.claude/orchestrator/state.json,並將 .claude/orchestrator/ 加入 <repo>/.git/info/exclude(僅限本機忽略;不會變更任何追蹤中的檔案)。相同的 JSON 也是儀表板的輸入。結構如下:
{
"lang": "ru",
"title": "工作的簡短名稱",
"goal": "一句話",
"phase": "clarify | plan | running | integrating | done",
"base_branch": "main",
"updated": "2026-11-07 14:32",
"spec": { "acceptance": ["..."], "non_goals": ["..."], "constraints": ["..."], "assumptions": ["..."] },
"tasks": [
{ "id": "T1", "title": "API 端點", "wave": 1, "status": "planned",
"progress": 0, "depends_on": [], "owns": ["src/api/"],
"session": "t1-api", "session_id": "local_…", "branch": "…", "note": "最後狀態行" }
],
"log": [ { "t": "14:30", "msg": "第 1 波啟動:T1、T2、T3" } ]
}
status 可以是 planned | running | blocked | rework | done | failed 其中之一。
啟動時,檢查是否已有狀態檔案。如果其中有未完成的任務,請詢問是要繼續(然後跳到第 5 階段)還是開始新工作(將舊檔案歸檔為 state-<date>.json)。
第 1 階段 — 完全了解工作
- 先檢查再提問。 閱讀 README / CLAUDE.md / 規則檔案、結構、建置與測試指令、
git status與目前分支。從程式碼中可以回答的問題就由程式碼回答 — 僅詢問程式碼無法回答的問題。 - 檢查 git 就緒狀態。 工作人員的 worktree 是從已提交的基礎分支切出的:未提交的變更對他們來說是不可見的。如果工作樹有髒污,請告知使用者並詢問是否要先提交。如果該資料夾根本不是 git 儲存庫,請解釋沒有 worktree 的平行工作人員會互相覆蓋,並提供
git init+ 初始提交,或循序工作人員。 - 面談使用
AskUserQuestion(每次呼叫最多 4 個問題,建議選項優先)。僅詢問會改變建置內容的問題:目標與目標使用者、範圍與非目標、驗收標準、各部分之間的合約(API 形狀、資料模型、共用類型)、技術限制、測試期望、「完成」的定義。持續進行多輪,直到沒有任何未解決的問題會改變計畫為止。 - 撰寫規格到狀態檔案中,並以簡短幾行顯示給使用者。低風險的可逆細節應成為明確的假設,而不是更多的問題。
第 2 階段 — 決定是否拆分,然後分解
只有在存在**≥2 個可以獨立進行的實質性部分**時,拆分才有價值。如果工作很小或高度耦合,請說明情況並在此工作階段中完成 — 會產生合併衝突與交接成本的拆分,比不拆分更糟糕。
任務的規則:
- 不重疊的檔案所有權。 每個任務列出它擁有的路徑。兩個工作人員絕不會編輯同一個檔案;這是維持最終合併乾淨的關鍵。共用檔案(鎖定檔案、根目錄配置、路由表、DI 註冊)屬於一個任務或協調者。
- 契約優先。 如果部分依賴於共用介面(API 結構、類型、資料庫結構),請將其設為任務
T0,由您在此工作階段中完成並提交到基礎分支在第 1 波之前,這樣每個 worktree 都以它為起點。使用者批准的計畫必須說明此提交將會發生。 - 每個任務具有:
id、title、目標、owns、可交付成果、可驗證的完成標準(指令或測試)、depends_on、大小 S/M/L,以及可選的較便宜model用於機械性工作。 - 波次。 根據依賴關係分組。每個波次預設為 ≤4 個平行工作階段(速率限制與您自己的審查能力)。一個恰好有一個依賴項的任務從該依賴項的分支(
source_branch)開始。一個具有多個依賴項的任務需要先合併它們 — 這需要使用者明確同意(第 6 階段規則),因此請優先選擇避免這種情況的計畫。 - 整合與最終驗證始終由協調者負責。
第 3 階段 — 顯示計畫,取得一次確認
- 渲染儀表板(所有任務為
planned,階段為plan)— 請參閱下方的儀表板。 - 在其下方,以文字說明:波次、每個工作階段的內容、其擁有的路徑,以及您將提交的任何內容(T0)。
- 提出一個
AskUserQuestion:「根據此計畫啟動 N 個工作階段?」→ 選項「啟動(建議)」/「變更計畫」。使用者的「是」即為啟動這些工作階段的請求。
在得到「是」之後,一直執行到結束,無需進一步批准,但以下情況除外:合併分支、任何破壞性操作、推送/PR,以及規格無法回答的問題。
第 4 階段 — 啟動一個波次
- 呼叫
mark_chapter(例如「第 1 波:啟動工作階段」)。 - 對於每個任務:撰寫一個粗體標題行和一個句子說明工作階段將做什麼,然後呼叫
start_session,內容包含:initiation: "user_asked"、context: "fresh"、use_worktree: true、wake_when_done: truetitle、name(t1-api風格,≤24 個字元)、branch_name(orch-t1-api)prompt:根據references/worker-brief.md建立的工作人員簡報background(≥80 個字元):目標、關鍵規格要點、此部分與其他部分的配合方式source_branch:單一依賴項任務的依賴項分支model:僅在任務是機械性的且較便宜的模型適合時使用
- 將
session_id(local_…)、name、分支儲存到狀態檔案中;狀態設為running;記錄到日誌;重新渲染儀表板。 - 結束您的回合。 不要輪詢 — 當工作人員完成一個回合時,應用程式會透過
<side-sessions-event>訊息喚醒您。
第 5 階段 — 監督
每次被喚醒時(<side-sessions-event>、跨工作階段訊息,或使用者要求狀態時):
- 對每個工作人員的狀態執行
list_sessions {"linked": true}。 - 從每個工作人員的報告中讀取其狀態行。工作人員的報告開頭為
[T2] DONE 100% — …、[T2] IN_PROGRESS 60% — …或[T2] BLOCKED — <問題>。 - 驗證,不要相信。 報告只是一種宣稱。對於 DONE:執行
git log --oneline <base>..<branch>和git diff --stat <base>...<branch>;標記在owns外部變更的檔案;檢查完成標準(向工作人員要求測試輸出,或在其 worktree 內自行執行便宜的檢查)。 - BLOCKED: 如果規格能回答,請使用
SendMessage回覆到工作人員的local_…ID。如果不能,請詢問使用者並轉達他們的確切說詞。切勿要求工作人員執行在此工作階段中被拒絕或會被封鎖的操作。 - REWORK: 透過
SendMessage傳送具體問題;狀態設為rework。 - STALLED(閒置,無狀態行):要求一次狀態行。
- 更新狀態檔案並重新渲染儀表板 — 僅在發生變更時。
- 當一個波次的所有依賴項都
done且經過驗證後,啟動下一個波次(已獲批准)。
當使用者要求時,可以透過 mcp__ccd_session_mgmt__list_events 即時查看仍在執行中的工作階段的最新活動;請勿常規執行此操作。進度百分比僅來自工作人員報告或已驗證的事實 — 切勿編造進度。
第 6 階段 — 整合與驗證
- 最終儀表板(階段
integrating)。按完整引用(refs/heads/…)列出每個工作人員分支。 - 詢問是否要將它們合併到此簽出中的整合分支
orch/<slug>上。僅在使用者本人同意時才能合併 — 而不是根據工作人員的建議。 - 按依賴順序合併,解決衝突,執行完整的建置與測試套件。
- 報告:以表格呈現驗收標準(符合 / 不符合 / 未驗證並附上原因)、包含實際結果的測試結果、剩餘風險。階段
done,最終儀表板。 - 提供歸檔工作階段的功能(僅在同意時)。未經批准,絕不推送或開啟 PR。
儀表板
儀表板是一個固定的範本:assets/dashboard.html。每個對話中讀取一次(在上下文壓縮後再次讀取)。在第一次渲染之前,使用 modules: ["interactive"] 呼叫 mcp__visualize__read_me(靜默)。然後呼叫 mcp__visualize__show_widget,內容為範本內容,其中僅 const STATE = {…}; 這一列被替換為目前的狀態 JSON(精簡、有效的 JSON)。保持設計不變 — 跨更新的連續性是讓使用者一覽進度的關鍵。title:orchestration_<slug>_dashboard。
渲染時機:在計畫之後、每次啟動之後、每次發生變更的喚醒之後,以及最後。解釋應以文字形式放在其旁邊,而不是在 widget 內部。
無工作階段工具的備援方案
如果 start_session 不可用,則將每個任務作為背景子代理執行:使用 isolation: "worktree" 和 run_in_background: true 的 Agent,搭配相同的簡報。您會在完成時收到通知;其他所有內容(狀態、儀表板、驗證、整合)保持不變,並在 session 欄位中使用代理 ID。告知使用者這些工作人員無法像工作階段一樣被打開與引導。
基本規則
- 保持協調者輕量化:請勿在此處實作工作人員的任務;少量的黏合程式碼和 T0 合約是可行的。
- 遵守使用者的全域批准邊界(未經批准不得推送、部署、破壞性操作或安裝),並在每個簡報中傳遞這些邊界。
- 忠實地報告結果:說明執行了哪些檢查、哪些失敗了、哪些未執行。