實戰背景
在大型多人協作的專案中,核心模組的重構往往會牽涉到數十個外部相依模組。如果只有單一的 AI 代理循序進行修改,整個重構週期會非常漫長。
痛點與問題描述:
我們需要將一個 C# 專案中舊版實體元件(如 PaymentService)的所有同步方法(如 Charge()),全面升級為支援 async/await 的非同步版本(如 ChargeAsync())。這項改動會直接破壞 BillingController、SubscriptionWorker 與 AdminPanel 三個獨立子專案的呼叫,導致編譯錯誤。如果採用單一執行緒重構,我們需要手動一個檔案一個檔案處理編譯報錯。
本範例中,我們將使用 Oh My Claude Code (OMC) 的 Team Mode 功能,同時指派多個背景 Sisyphus 代理,在各自隔離的 Git Worktree 中並行修改這三個子專案,並利用 OMC HUD 即時監控各代理的自主編譯與修復進度。
規格定義
本次變更計畫的 ID 為 omc-parallel-refactor。我們在 OpenSpec 中定義了以下規格:
# 實戰範例 003:openspec/changes/omc-parallel-refactor/specs/async-upgrade/spec.md
## ADDED Requirements
### Requirement: Full asynchronous payment flow
所有支付管道呼叫必須(SHALL)使用非同步 `async/await` 語意。
- 底層 `PaymentService.ChargeAsync` 必須(SHALL)返回 `Task<PaymentResult>`。
#### Scenario: Verify parallel controller compilation
- **WHEN** 執行全域建置命令 `dotnet build`
- **THEN** 所有子專案(Billing、Subscription、Admin)必須(SHALL)無編譯錯誤地編譯成功,且其對 `ChargeAsync` 的 await 呼叫配置正確。
端到端 8 輪 AI 協作紀錄
以下是開發者 (You) 與 OMC Team Mode 代理群之間的完整重構紀錄:
── 第 1 輪:初始化 Team Mode 與工作區分配 ──
- You:
/opsx:explore "我們需要把 PaymentService 改為非同步。請幫我用 omc team mode 啟動並行重構,分配背景代理分別處理 Billing、Subscription 與 Admin 子專案的編譯修復。" - AI:
好的,已進入探索模式。我將使用
omc的 Team Mode 工具在本地端啟動並行開發。首先,我將呼叫
omc team init來在 tmux 中建立三個隔離的開發視窗(Workers),每個 Worker 將使用一個獨立的 Git Worktree,避免代碼衝突。OMC 呼叫:
omc team init --workers=3 --names=billing,subscription,admin
OMC 回傳:Worker: billing(工作樹:temp/worktree-billing, 專注路徑:src/Billing/)Worker: subscription(工作樹:temp/worktree-subscription, 專注路徑:src/Subscription/)Worker: admin(工作樹:temp/worktree-admin, 專注路徑:src/Admin/)
規劃:
我已在底層完成了PaymentService.cs向ChargeAsync的非同步簽章修改。這時整個專案編譯已中斷。我將在各個 Worker 中啟動 Sisyphus 自主循環代理,要求它們在各自的目錄下修復編譯錯誤。
── 第 2 輪:啟動並行 Sisyphus 循環 ──
- You:
在所有 Worker 中啟動 Sisyphus 自主循環(每個 Worker 跑 dotnet build,最多 10 輪),並限制每個會話的 Token 預算為 $5 USD。 - AI:
好的,我將在每個背景 Worker 中啟動
omc sisyphus自主修復循環,最大 10 輪,並透過omc config將單一會話預算上限設為 $5 USD,以防止 Token 暴走。OMC 呼叫:
omc sisyphus --build-cmd="dotnet build" --max-loops=10(於各 Worker 工作樹中分別執行)
OMC 回傳:Background workers spawned successfully. Monitoring via HUD.目前 OMC HUD 面板已啟用,即時監控進度如下:
- [HUD billing]: Loop 1/10 | Status: Parsing compiler error CS1998 in BillingController.cs
- [HUD subscription]: Loop 1/10 | Status: Analyzing SubscriptionWorker.cs
- [HUD admin]: Loop 1/10 | Status: Identifying admin panel endpoints
── 第 3 輪:檢視 Billing Worker 修正紀錄 ──
- You:
請幫我拉取 billing worker 目前的詳細日誌,看看它遇到了什麼錯誤,是怎麼修復的。 - AI:
好的,我將使用
omc的日誌檢索工具來讀取billing工作區的 Sisyphus 狀態。OMC 呼叫:
omc team log --worker=billing --lines=15
OMC 回傳:[billing] [Loop 2] dotnet build failed. Error: CS4033: 必須在 async 方法中使用 await。 [billing] [Loop 2] Action: 修改 src/Billing/BillingController.cs 第 45 行。 [billing] [Loop 2] Action: 將 public ActionResult Process() 改為 public async Task<ActionResult> Process()。 [billing] [Loop 3] dotnet build succeeded in Billing subproject!分析:
billing代理成功識別出同步控制器無法直接呼叫非同步方法的問題,自主將控制器方法宣告改為async Task,並成功通過了src/Billing/的局部建置!
── 第 4 輪:建立變更提案 ──
- You:
/opsx:propose "將整個支付管道重構為非同步模式,並整合 OMC Team 並行修改成果" - AI:
好的,變更提案
omc-parallel-refactor已建立:- proposal.md: 說明非同步 Payment 升級及多代理協同的必要性。
- specs/async-upgrade/spec.md: 定義全域編譯通過與非同步傳回值驗收。
- tasks.md: 任務檢核表如下:
- 1.1 執行
omc team merge合併三個 Worker 的重構程式碼。 - 1.2 執行全域
dotnet build驗證編譯。 - 1.3 歸檔變更。
- 1.1 執行
請輸入
/opsx:apply來開始執行合併與驗證。
── 第 5 輪:合併並行分支 (Task 1.1) ──
- You:
/opsx:apply - AI:
Implementing: omc-parallel-refactor (schema: spec-driven)
正在處理任務 1.1:合併並行代理的重構代碼。
我將呼叫
omc team merge。該命令會將三個背景工作樹的 Git 分支自動 Cherry-pick 並 Merge 到當前的重構分支中。OMC 呼叫:
omc team merge
OMC 回傳:- Merged branch
omc-worker-billing-> Success - Merged branch
omc-worker-subscription-> Success - Merged branch
omc-worker-admin-> Success (Resolved 1 conflict in routes configuration)
合併完成!三個模組的修改代碼已成功統一。已將任務 1.1 標記為完成。
- Merged branch
── 第 6 輪:執行全域建置與測試 (Task 1.2) ──
- You:
繼續實作任務 1.2,執行全域建置與單元測試。 - AI:
Implementing: omc-parallel-refactor
正在處理任務 1.2:全域建置驗證。
我將在專案根目錄下執行全域的 .NET 編譯與測試:
dotnet build dotnet test建置輸出:
Build succeeded. 0 Warning(s), 0 Error(s).
Passed test cases: 48/48.所有子專案全部順利通過編譯,且所有整合測試均無異常!已將任務 1.2 標記為完成。
── 第 7 輪:清理工作區與歸檔 (Task 1.3) ──
- You:
很好!執行歸檔,並清理剛才建立的 3 個 Git Worktree,保持工作區乾淨。 - AI:
Implementing: omc-parallel-refactor
正在處理任務 1.3:清理臨時工作區與變更歸檔。
我將呼叫
omc team cleanup來安全地移除剛才建立的臨時工作樹,釋放磁碟空間。OMC 呼叫:
omc team cleanup
OMC 回傳:Temporary worktrees and tmux sessions successfully terminated.變更歸檔:
- 已將非同步規格同步至主規格庫。
- 清理
changes/下的專案資料夾。
Archive Complete
變更計畫已順利歸檔!
── 第 8 輪:總結與效能指標 ──
- You:
請幫我總結一下,與傳統單執行緒修改相比,我們這次使用 Team Mode 節省了多少時間? - AI:
本次重構的效能對比指標如下:
重構模式 工具呼叫與等待次數 耗時 (秒) Token 費用 (USD) 傳統單代理模式 (估計) 24 次往返 (逐一排查三個專案錯誤) ~680 秒 ~$3.80 OMC Team 並行模式 3 個並行 Worker (各 3 輪) ~190 秒 (縮短 72%) ~$2.10 (減少 44%) 效益總結:
- 時間縮短:得益於並行編譯與自主 Sisyphus 循環,編譯錯誤在各自的工作樹中被並行修復,省去了循序除錯的等待時間。
- 費用更省:每個 Worker 僅加載其受影響的子模組 AST,消除了單一會話中加載整個大專案所帶來的 Token 冗餘。