AI SYNTHESIS / MAY CONTAIN ERRORS

1. 結論先行:同一個 repo,不等於同一個工作目錄

來源事實:Orca 自稱 worktree-native;每個任務會取得真正的 Git worktree,並擁有自己的 branch、磁碟檔案與 Agent terminals。Git 官方則把 linked worktree 定義為掛在同一 repository 上的額外 working tree,其 HEAD、index 等工作樹狀態分開,但底層 repository 仍共享。

AI 工程判讀:最重要的心智模型是「一份 Git 歷史,多個獨立施工現場」。Agent A 在自己的 worktree 修改檔案時,不會即時改到 Agent B 的檔案;兩者也各自有 staging index,因此不會因為同時執行 git add 而互相污染。

但這只是第一層安全。branches 與多數 refs 仍屬於共同 repository;fetch、push、branch 建立與刪除,以及預設 repository config,會影響其他 worktree 可觀察到的狀態。更重要的是,port、database、Docker daemon、測試帳號、雲端 sandbox 與第三方 API 根本不在 Git worktree 的隔離範圍內。

AI 建議:把 Orca 當成「平行施工場管理器」,而不是「自動避免所有衝突的合併器」。若任務邊界、外部資源與整合責任沒有設計,多開 Agent 只會把等待時間改造成重工時間。

Worktree 之間哪些狀態隔離、哪些仍共享

FIGURE 01 / MATRIX
Worktree 之間哪些狀態隔離、哪些仍共享
項目每個 worktree 獨立同一 repository 共享Git 之外仍需自行隔離
原始碼與暫存狀態working files、HEAD、index、未追蹤檔案objects、commits、多數 refs、預設 config
分支與同步各自 checkout 不同 branchbranch ref、remote-tracking refs、fetch 結果Git hosting 權限與 branch protection
執行環境在各目錄內建立的 node_modules、venv、build 輸出可選擇共享套件快取或 Git object storeport、DB schema、container 名稱、測試帳號、雲端資源
Agent 工作階段Orca 的終端、編輯器、browser 與 diff 都綁定 worktree同一 Orca runtime 可看見任務與訊息模型帳號、rate limit、外部憑證與服務配額
Git 官方文件直接支持 HEAD、index 與 working tree 的分離,以及多數 refs 與 repository config 的共享;外部執行資源是依此模型做出的工程推論。

2. Orca 在 Git worktree 之上多做了什麼

來源事實:Orca 的工作流程把建立、工作、檢視、提交與刪除串成同一個介面。建立時可選 base ref、local branch、commit SHA 或 remote branch;工作期間的 terminal、editor、browser 與 diff 都以 worktree 為範圍;完成後可在同一處 commit、push、開 PR、等待 checks,再封存或刪除。

官方原始碼顯示,Orca 實際呼叫 git worktree add,並額外保存 worktree 建立時的 base lineage。它也會在更新 local base ref 前檢查 fast-forward 條件與 owner worktree 是否乾淨,避免把有未提交變更的 base checkout 靜默往前移。這些保護降低操作失誤,但不取代專案自己的合併政策。

Git 本身通常拒絕把同一 local branch 同時 checkout 到另一個 worktree,除非明確使用 force。這是好事:每個 Agent 應有唯一 branch,不應靠兩個工作目錄共同推進同一 branch。若需要共享成果,應透過 commit、rebase、merge 或 cherry-pick 傳遞,而不是直接共寫 branch。

AI 建議:建立 worktree 時,把 start-from 固定成同一個已記錄 SHA,而不只口頭說「都從 main 開」。當任務時間拉長,origin/main 可能繼續前進;用 SHA 才能分辨差異是 Agent 策略不同,還是起跑點不同。

3. 第一個決策:你是在競速,還是在協作

來源事實:Orca 官方的新手流程與 recipe 主要示範「同題競速」:三個 worktree 從同一 start-from ref 開始,三個 Agent 接到同一 prompt,最後比較 diff、選一個 winner、提交 winner,刪除其餘兩個 worktree。

AI 工程判讀:同題競速與互補協作是兩種不同拓樸。競速的輸出彼此替代,原則上只合併一個;協作的輸出彼此相依,目標是把多個 branch 整合成同一個交付。若沒有先講清楚,團隊很容易把三個競速結果全部拼在一起,或讓三個協作 Agent 重複設計同一層。

同題競速適合規格清楚、驗收可自動化、解法空間大的任務,例如修一個可重現 bug、重構一個純函式、比較三種 selector 策略。互補協作適合可以切成穩定契約的功能,例如 API contract、backend implementation、frontend integration、tests 與 migration。

限制:官方 recipe 認為不同 Agent 的分歧能暴露難點,這是實用的操作假說,不等於每次多跑幾個 Agent 都會提高正確率。若驗收條件模糊,三個錯誤答案也可能彼此一致。

同題競速與互補協作不可混用

FIGURE 02 / MATRIX
同題競速與互補協作不可混用
項目同題競速互補協作
目標同一問題產生多個候選解不同工作包共同完成一個交付
輸入相同 prompt、相同 base SHA、相同 tests不同 spec、明確 dependencies、共享 contract
整合選一個 winner;其他結果只供參考依依賴順序合併多個 branch
主要風險評選標準不客觀、浪費算力契約漂移、重疊 ownership、語意衝突
完成定義候選通過同一驗收集且 diff 可比較每個工作包有 commit、測試、介面與 handoff 摘要
比較依 Orca 官方 race recipe 與本文的工程協作建議整理;協作欄屬於 AI 工程建議。

4. 多 Agent 任務切分:先切契約與依賴,再切檔案

AI 建議:最差的分工是「你改前端、你改後端、你補測試」但不先定義介面。這種切法看似沒有重疊檔案,實際上每個 Agent 會自行猜測 request shape、錯誤碼、欄位命名與 loading state,最後產生跨檔案的語意衝突。

較穩健的順序是先建立 contract task:確認 API schema、type、event、database boundary、feature flag 與 acceptance tests。後續 Agent 只能在 contract 的允許範圍內實作;需要改 contract 時,必須提出 decision gate,而不是各自偷偷調整。

檔案 ownership 仍然有用,但它是第二道防線。請列出 shared hot files,例如 package.json、lockfile、router registry、central schema、migration index、generated client 與 global CSS;這些檔案最好指定單一 owner,或在整合階段集中重建。

依賴圖應盡量是有向無環圖。若 Agent B 必須等 Agent A 的 contract 才能開始,就不要假裝兩者完全平行;可先讓 A 產生最小 contract commit,B 從該 commit 建 child worktree,或由 coordinator 明確 dispatch 第二階段。

建議的協作式任務拓樸

FIGURE 03 / FLOW
Base SHA

鎖定共同起點與驗收基線

Contract Agent

定義 schema、types、acceptance tests 與禁止變更區

Implementation Agents

在契約後方平行實作 UI、service 或 adapter

QA Agent

依 contract 建立測試,不依賴某個實作細節

Integrator

依序合併、重建生成物、跑完整 CI

先產出可審查的 contract,再讓 implementation 與 QA 平行;最後由單一 integrator 依依賴順序整合。

5. Worktree 沒有隔離 port、DB、Docker 與測試帳號

AI 工程推論:Git worktree 只管理 repository 與 working tree。兩個 Agent 即使修改不同目錄,只要同時啟動預設 port 3000、共用同一個本機 database、重用同一個 container name,或對同一個測試租戶寫資料,仍會互相干擾。

每個 worktree 應有可推導的 namespace,例如以 worktree ID 或 branch slug 產生 APP_PORT、DB_SCHEMA、COMPOSE_PROJECT_NAME、CACHE_PREFIX 與 ARTIFACT_DIR。對外部 sandbox 也應分配獨立 tenant 或至少獨立 test data prefix。

套件快取可以共享以節省空間,但可寫入的 build output、node_modules、Python virtualenv 與 test report 應留在各 worktree。若工具會把絕對路徑寫進 cache,跨 worktree 共用反而可能產生難以重現的錯誤。

AI 建議:在 Agent 開始之前,由 bootstrap script 產生 `.env.worktree`,並在測試啟動時印出 namespace。沒有 namespace 的外部副作用任務,不應被平行 dispatch。

常見共享資源與隔離手段

FIGURE 04 / MATRIX
常見共享資源與隔離手段
項目衝突症狀建議隔離鍵整合或清理方式
開發伺服器 portEADDRINUSE、預覽到另一個 Agent 的版本APP_PORT=基準值+工作樹序號關閉 terminal 時釋放 process
Databasemigration 互踩、測試資料互相刪除獨立 schema、database 或 transaction namespace整合時由 migration owner 重建乾淨 DB
Docker Composecontainer/network 名稱相撞COMPOSE_PROJECT_NAME=<worktree-slug>以同一 project name 執行 down
Cache 與 artifact讀到舊 build、report 被覆寫CACHE_PREFIX、ARTIFACT_DIR只共享唯讀或 content-addressed cache
外部測試帳號狀態被另一個 Agent 改掉、rate limit獨立 tenant、測試資料前綴測試結束執行可重跑 cleanup
這是依 Git worktree 邊界做出的工程實務建議,不是 Orca 自動提供的隔離保證。

6. 任務有 ownership 或 dependency 時,使用 Orchestration,不要只群發 prompt

來源事實:Orca Orchestration 是實驗性功能,提供 persistent messages、tasks、dispatches 與 decision gates。官方文件明確區分:一次性的 terminal input 可用 terminal send;需要追蹤 ownership、dependencies 或 worker completion 的工作應使用 orchestration。

Task 有 pending、ready、dispatched、completed、failed 與 blocked 等狀態;dispatch 代表某一次具體指派。完成權限綁定 active dispatch,因此 worker 回報時應同時帶 taskId 與 dispatchId,避免舊的 retry 誤把新 dispatch 標成完成。

Worker contract 要求 worker_done 僅送一次、附上完成摘要、長工時送 heartbeat,遇到阻塞問題使用 ask,而不是停在 Agent 自己的互動式 TUI 等人回答。這讓 coordinator 能區分「還在做」、「等待決策」、「已失敗」與「已完成但有殘留風險」。

AI 建議:Orchestration 解決的是協調狀態,不是程式碼合併。task completed 應只表示 worker 已交付可整合成果;真正的完成仍需 integrator 驗證 commit、diff、tests 與相依契約。

7. 整合是序列化臨界區:指定一個 Integrator

AI 工程判讀:多個 Agent 可以平行產生 commits,但合併到共享基線的動作本質上是一段序列化臨界區。若每個 Agent 都自行 rebase、改 lockfile、解 migration conflict 並推同一個 integration branch,Worktree 的物理隔離會在最後一步全部失效。

指定單一 integrator 或 merge queue。它先確認每個 handoff 的 commit SHA 與測試證據,再按 dependency order 合併:contract 先、implementation 次、generated artifacts 與 lockfile 最後集中重建。每納入一個 branch 就跑最小相關測試,全部完成後再跑完整 CI。

獨立且小的修正可 cherry-pick 原子 commits;需要保留一組內部歷史的功能可 merge branch;rebase 只應由 branch owner 或 integrator 對該 branch 執行。不要在多人共用的 branch 上任意改寫歷史。

來源事實:Orca 的一般 Push 不會在 branch 落後時靜默 force-push;需要改寫遠端歷史時,介面把 force push with lease 做成明確、獨立動作。這符合多 Agent 環境的安全原則:任何歷史改寫都必須是顯式決策。

建議的整合佇列

FIGURE 05 / FLOW
Freeze handoff

記錄 branch、commit SHA、tests 與 assumptions

Update against base

檢查 drift;由 owner 或 integrator rebase/merge

Integrate one branch

依 dependency order cherry-pick 或 merge

Run focused gates

lint、typecheck、unit、contract 與 migration checks

Regenerate shared artifacts

lockfile、client、schema snapshot 由單一 owner 產生

Full CI and review

再開 PR;失敗時只回退最近一個整合步驟

平行只發生在工作包內;進入整合 branch 後,依序驗證,避免多個 Agent 同時改寫共享基線。

8. 最危險的不是 merge conflict,而是 Git 看不見的語意衝突

AI 工程判讀:Git 能偵測的是文字層級重疊,不能理解兩個不同檔案是否對同一 API、schema 或 business rule 做出矛盾假設。多 Agent 專案最常在「合併完全乾淨」之後才失敗。

第一類是契約衝突:frontend 假設欄位叫 expiresAt,backend 實作 expiry;兩個 branch 沒改同一行,Git 不會警告。第二類是順序衝突:兩個 Agent 各自新增 migration 編號或 registry entry,文字可合併但執行順序錯誤。第三類是生成物衝突:lockfile、API client、snapshot 與 codegen output 由不同基線生成,手工合併通常比重建更危險。

第四類是測試盲點:每個 Agent 只在自己的 branch 跑綠色測試,但整合後的組合路徑沒有 coverage。第五類是外部狀態衝突:一個 Agent 建立資料,另一個 Agent 的 cleanup 把它刪掉。這些都需要 contract tests、integration tests 與 namespaced sandbox,而不是更強的文字 merge 工具。

AI 建議:對 shared hot files 建立「禁止平行修改」清單;對跨模組契約建立 machine-readable schema 與 consumer tests;對生成物採「來源檔合併後重建」,不要讓 integrator 手工修出一份看似合理的 lockfile。

衝突類型與應對控制

FIGURE 06 / MATRIX
衝突類型與應對控制
項目Git 是否通常可見典型例子主要控制
文字衝突可見同一檔案同一區塊被改動縮小 commits、指定 owner、人工 resolve
契約衝突通常不可見不同檔案對欄位、錯誤碼或事件名稱假設不同schema、contract tests、decision gate
順序衝突不一定可見migration、router registry、feature flag rollout單一 owner、序號保留、整合後重跑
生成物衝突可能只顯示大量文字差異lockfile、generated client、snapshot合併來源後集中 regenerate
環境衝突不可見port、DB、container、測試帳號互踩per-worktree namespace 與 cleanup
行為衝突不可見各自測試通過,整合路徑失敗integration/E2E tests 與真實驗收情境
表格區分 Git 可直接偵測與需要工程驗證才能發現的衝突。

9. 一個可重複的 Orca 多 Agent Runbook

AI 建議:把每次多 Agent 執行當成小型變更列車,而不是開三個聊天視窗。開始前先建立 run manifest;執行中只透過 commits、task messages 與 decision gates 交換狀態;結束後保留可追溯的 integration log。

Step 1:更新 remote refs,記錄 base SHA、目標 branch 與驗收命令。Step 2:選 topology:race 或 collaboration。Step 3:為每個 worktree 指派唯一 branch、ownership 與環境 namespace。Step 4:先跑 baseline tests,確保起跑點不是紅色。

Step 5:dispatch 後禁止任意擴張 scope;遇到 shared contract 必須升級決策。Step 6:worker 以 atomic commits 交付,附上 tests、assumptions、files modified 與 remaining risks。Step 7:integrator freeze 每個 commit SHA,依賴序整合並逐步驗證。

Step 8:PR 通過後刪除或封存 worktrees。Git 官方建議用 git worktree remove;直接刪資料夾可能留下 administrative metadata,之後才需要 prune。長期離線或放在可移除裝置的 worktree 可 lock,避免 metadata 被清理。

  • Start gate:共同 base SHA、乾淨 baseline、可重跑 acceptance tests
  • Dispatch gate:唯一 branch、唯一 owner、明確 may-read/must-not-modify
  • Handoff gate:固定 commit SHA、測試證據、assumptions、remaining risks
  • Integration gate:一次只納入一個 branch,先 focused checks,再 full CI
  • Cleanup gate:確認 branch 已合併或可丟棄,再由 Orca 或 git worktree remove 清理

10. 常見失敗模式與復原方法

AI 工程判讀:多 Agent 失敗通常不是因為 Agent 數量太多,而是 worktree 活太久、基線漂移、shared hot files 無 owner,或外部環境沒有隔離。這些問題可以透過較短的工作包與明確恢復路徑降低成本。

Base drift:工作超過數小時或主線高頻更新時,先讓 integrator 評估 ahead/behind,再決定 merge main、rebase 或重建 worktree。不要讓每個 Agent自行選不同策略。Dirty base:主 worktree 有未提交變更時,不要把它當可信起點;Orca 原始碼也特別避免在 owner worktree dirty 時自動 fast-forward local base。

Stale worktree:資料夾被手動移動或刪除,使用 git worktree list、repair 或 prune 恢復 metadata,不要直接重建同名 branch 造成歧義。Shared branch:發現兩個工作階段在同一 branch 上時,立刻停止寫入,分別固定 commits,為其中一方建立新 branch,再由 integrator 重排。

Submodule:Git 官方仍警告 multiple checkout 對 submodule 支援不完整,不建議對 superproject 建立多重 checkout。若 repo 大量依賴 submodules,應先做小規模驗證,或改用完整 clone/容器作為更強隔離邊界。

Long-lived worktree:分支活得越久,整合成本通常越高。把任務切到一個可獨立 review 的最小改動;若架構仍未確定,先讓單一 Agent 做 spike 或 contract,不要用多 Agent 同時發明架構。

11. 什麼情況不值得開多個 Agent

AI 建議:平行化不是免費加速。它增加模型成本、環境成本、review 面積與整合負荷。當 critical path 不能拆、驗收不可自動化,或大部分變更集中在同一個 hot file 時,單 Agent 逐步完成通常更快。

不適合的情境包括:只改一兩行的小 bug;需要先釐清架構的探索工作;全程依賴同一份 migration 或 schema;沒有 sandbox 的破壞性外部操作;build/test 太昂貴而無法在每個 worktree 重跑;以及 reviewer 沒有能力比較多份 diff。

評估是否值得時,不要只看 Agent 執行時間。應同時記錄 wall-clock completion、總模型與運算成本、人工 review 時間、整合失敗次數、重工 commits、CI retry 與 escaped defect。多 Agent 只有在交付時間下降且總驗證成本可控時才算成功。

實務起點可以是兩個 Agent:一個實作、一個以相同 contract 建 tests 或 review。確認整合流程可重複後,再把 max concurrency 往上調;不要從十個 Agent 開始,最後才發現 merge queue 只能一次處理一個。

12. 資深工程師版使用心法:把隔離、協調與整合分成三個控制面

AI 綜合建議:Orca 最有價值的地方,是把 worktree、Agent terminal、diff review 與 orchestration 放在同一個操作面;真正決定成果的,仍是你是否把三個控制面分開設計。

隔離面回答「誰能寫哪些檔案與資源」:一 Agent 一 worktree 一 branch,外加 per-worktree port、DB 與 sandbox namespace。協調面回答「誰在做什麼、依賴誰、何時需要決策」:用 task、dispatch、heartbeat、worker_done 與 decision gate 留下狀態。整合面回答「哪些 commits 以什麼順序進主線」:由單一 integrator、merge queue 與 CI gate 序列化處理。

最值得記住的規則是:main 是協調基準,不是多人共寫的施工現場;branch 是交付單位,不是聊天紀錄;tests 是驗收契約,不是 Agent 自我感覺良好的證明;worker_done 是 handoff,不是 production done。

不確定性:Orca 迭代速度快,Orchestration 目前仍標示 Experimental,CLI 旗標與功能入口可能變動。實際導入時,請以當下官方文件、orca status --json 與專案 Git 版本為準,並先在非關鍵 repo 做完整演練。