用 Orca 編排多個 AI coding agent:隔離工位、平行派工、看板監看、diff 審查到 PR

文字解析 · 1 支影片 · 產生於 2026-10-01 00:54

🎧 語音解析📝 筆記✍️ 練習

🎧 語音解析 13m46s · TTS 講解與作者原聲交錯;點章節可跳。
邊聽邊看逐句講稿,點任一句從那裡開始
章節(9)

1. Outline

  1. 起點 · Parallel Agent Orchestration with Orca: Local AI Mac
    先用 design mode 走完「一個 agent、一個網頁、改到合併」的迴圈,再把同一套機制乘以三做平行編排。

2. YouTuber 的思維推導

Parallel Agent Orchestration with Orca: Local AI Mac

Joe Maddalone · 6m36s · 字幕 en · vision=on (使用者指定 vision=true;整支是螢幕錄影 demo,作者每一步都是「點這裡、看這個」,畫面才是主要資訊來源。) · YouTube

預估 vs 實際耗時
階段預估實際
fetch 6s 2s
segment 43s 2m30s
shot 24s 3s
analyze 3m45s 7m03s
render 5s –

作者的出發點是一個很實際的痛點:現在 AI coding agent 很多(OpenCode、Claude、Codex、Antigravity、Pi…),但一個人要同時用好幾個,最大的麻煩不是 agent 本身,而是「它們會在同一個資料夾裡互相踩到」以及「一個人盯不住那麼多終端機」。所以他先把 Orca 定位成 agent orchestrator(工頭,不是工人),接著用兩條路線證明這個工頭有用。第一條是 design mode:先示範 Orca 怎麼替一個 agent 開一個隔離的工位(git worktree + setup script 自動裝依賴),再把網頁跑在 Orca 內建的瀏覽器裡、用 grab page element 把畫面上的元素變成 agent 讀得懂的 markup,貼上加一句話就改好;然後打開側邊面板證明人隨時可以介入(Monaco 編輯器、歷史、git status),最後 stage → AI 生成 commit message → commit → 開 PR → 在 GitHub 合併,走完一個完整迴圈。

第二條路線是把「一個工位」乘以三:連開三個 worktree、各派一個不同的 agent(OpenCode、Antigravity、Pi)、各給一個事先由 Improve 掃出來的小任務,然後切到 workspace board 一眼看全部進度。結果剛好涵蓋三種情境——OpenCode 做完、Antigravity 免費額度用完直接砍掉、Pi 任務大一點還在收尾——作者用「砍掉失敗的、先審做完的」示範平行編排的心法。審查階段他強調可以在 diff 上加註解直接送回 agent 修,滿意再 stage 開 PR;最後 GitHub 上兩個 PR 並排,就是收成。

結尾他把同一套機制推廣到兩個沒示範的用法:所有 agent 做同一個任務來比稿、以及 agent handoff/sub agents 做有順序的任務鏈。整支影片的推導其實是「隔離(worktree)→ 指揮(派任務)→ 監看(board)→ 審查(diff 註解)→ 收成(PR)」這條線,每個功能都是這條線上的一站。

推理鏈:每段留給下一段的線索

每一列是一段,箭頭後的字是這段留給下一段的線索。點段落標題跳到該段。

  1. Orca 是什麼 → 既然 Orca 是工頭而不是工人,第一個要看的就是:它怎麼替每個 agent 準備一個不會互相干擾的「工位」?作者說要先看 design mode,並提到建立新 work tree 時會自動跑 setup。
  2. Design Mode:一鍵開 worktree → 工位開好、OpenCode 載入了,但 agent 要改的是一個網站——要怎麼讓 agent「看到」網頁上要改的那個元素?作者接著要在 work tree 裡把網站跑起來,並在 Orca 裡面開瀏覽器。
  3. 內建瀏覽器 + 抓 DOM 元素 → agent 已經在自己的 worktree 裡改好了一個地方。但改了什麼、改在哪個檔案?如果我想自己看一眼或動手微調呢?作者接著要打開側邊面板。
  4. 側邊面板:編輯器、歷史、Git 狀態 → 兩個地方都改好了、git status 也看到改動,但這些改動還只在本機的 worktree 分支上。接下來要把它們 stage、commit、開 PR 送回主分支——作者說可以讓 AI 幫忙寫 commit message。
  5. Git 工作流:AI 寫 commit、開 PR → design mode 是「一個 agent、一個網頁、快速來回」的路線,作者已經示範完並刪掉 workspace。接下來換另一條路線:一次開很多個 worktree,每個指派給不同的 agent,同時做不同的任務。
  6. 平行編排:三個 worktree、三個 agent → 三個 agent 已經各自開始跑了。但一個人怎麼同時盯三個終端機?作者接著要切到 workspace board,一眼看全部進度。
  7. Workspace Board:一眼看全部進度 → OpenCode 說做完了,Pi 也快了。「宣稱完成」不等於「可以合併」——作者接著要去審 OpenCode 的 diff,並示範審查意見可以直接送回 agent 修。
  8. Diff 審查:加註解丟回 agent → 兩個 PR 都進了 GitHub,平行分工這條路線走完了。但作者說這只是 Orca 的一小部分:同一個任務叫多個 agent 比稿、或讓 agent 接力,又是什麼玩法?
  9. 還能做更多:比稿、handoff、sub agents

3. 逐段說明

Parallel Agent Orchestration with Orca: Local AI Mac

1. Orca 是什麼 0:00–0:24

作者介紹 Orca:一個「agent orchestrator」(他玩了 Orca / orchestrator 的諧音梗),由 Y Combinator 支持的公司 Stably 開發。它能做的比一支影片能展示的多得多,這支影片只挑幾個有趣的功能來看。

承上 用上前情提要裡的背景:讀者已經知道「AI coding agent」(Claude Code、OpenCode、Codex 這類在終端機裡幫你改 code 的工具)是什麼,也知道一個人同時開好幾個 agent 時,最麻煩的是它們會在同一個資料夾裡互相踩到對方的改動。Orca 就是在這個痛點上出現的。

推理因為觀眾可能從沒聽過 Orca,所以作者先用一句話定位它:它不是又一個 coding agent,而是「agent orchestrator」——管理多個 agent 的指揮台(他還玩了 Orca ≈ orchestrator 的諧音)。接著補上可信度(Stably 公司、Y Combinator 支持),並事先聲明「功能多到一支影片講不完,只挑幾個有趣的示範」,把觀眾的期待設在「看幾個亮點」而不是完整教學。

AI 補充作者沒說清楚「orchestrator」和「agent」差在哪,但這是整支影片的前提:agent 是真正動手改程式碼的工人(OpenCode、Claude、Codex…),orchestrator 是不寫程式、只負責「開工位、派任務、看進度、收成果」的工頭。Orca 本身不帶模型,它把你電腦上已經裝好的各種 agent 接進同一個介面。理解這個分工,後面每一個功能(開 worktree、內建瀏覽器、board、diff 審查)都可以歸到「工頭的工作」這條線上。

術語:AI coding agent

agent orchestrator

代理程式編排器

不自己寫程式、專門負責啟動多個 AI coding agent、分派任務並收攏成果的管理層工具。

「orchestrator」原意是交響樂團的編曲/指揮:每個樂手(agent)各自演奏,指揮決定誰在什麼時候做什麼。在 AI 開發工具裡,agent 通常指能自主讀 code、改 code、跑指令的程式(Claude Code、OpenCode、Codex 等);orchestrator 則在它們之上,處理「隔離工作環境、同時執行、監看狀態、審查合併」這些 agent 自己不管的事。常見誤解是把 orchestrator 當成更強的 agent——其實它完全不需要模型,Orca 就是把你機器上已安裝的 agent 接進同一個介面。

相關術語: AI coding agent (編排的對象)

出處:第 1 段「Orca 是什麼」

AI coding agent

AI 程式代理

能在你的專案裡自主讀檔、改檔、執行指令來完成一個任務的 AI 程式,通常跑在終端機裡。

和只會「回答問題」的聊天機器人不同,coding agent 有工具可以操作檔案系統與 shell,會自己規劃步驟、跑測試、修錯再試。影片裡出現的 OpenCode、Antigravity、Pi、Claude、Codex 都是這類工具,各自綁不同模型或收費方式。因為它們會真的動手改檔案,兩個 agent 同時改同一個資料夾就會衝突——這正是需要 orchestrator 幫忙隔離的原因。

相關術語: agent orchestrator (被它管理)

出處:第 1 段「Orca 是什麼」

留給下一段 既然 Orca 是工頭而不是工人,第一個要看的就是:它怎麼替每個 agent 準備一個不會互相干擾的「工位」?作者說要先看 design mode,並提到建立新 work tree 時會自動跑 setup。

2. Design Mode:一鍵開 worktree 0:24–1:00

進到 Orca 看 design mode。作者先說明專案裡有 setup script,每次建立新 work tree 都會自動跑 pnpm install。按 Cmd+N 建新 work tree,agent 預設是 OpenCode,但可以換成任何已安裝的 agent。建好後它先跑 setup,跑完 OpenCode 就載入了。

新 work tree 對話框:看到 agent 選單(預設 OpenCode,還能選其他已安裝的 agent),是後面平行編排能「一個 worktree 配一個 agent」的基礎
0:46 · 新 work tree 對話框:看到 agent 選單(預設 OpenCode,還能選其他已安裝的 agent),是後面平行編排能「一個 worktree 配一個 agent」的基礎
承上 承接上一段留下的問題——工頭怎麼替每個 agent 準備互不干擾的工位。這一段的答案是 git worktree:Cmd+N 就開一個新的工作副本,並自動跑 setup script。

推理因為上一段把 Orca 定位成工頭,所以作者接著示範工頭的第一個動作:開工位。他先繞去專案設定給觀眾看一眼 setup script(每次建新 work tree 就跑 pnpm install),再回到 app 按 Cmd+N。這個順序是刻意的:先讓你知道「新工位不是空殼、依賴會自動裝好」,你才不會疑惑為什麼 agent 一載入就能直接跑。對話框裡 agent 預設是 OpenCode,但作者特別強調「可以選任何已安裝的」,為之後一個工位配一個不同 agent 埋伏筆。

AI 補充作者沒有解釋什麼是 work tree,但這是整支影片的基礎。Git 的 worktree 功能讓同一個 repo 同時 checkout 多個分支到不同資料夾,共享同一份 .git 歷史;每個資料夾可以獨立編輯、獨立 commit。Orca 的「建 work tree」= 開一個新資料夾 + 新分支 + 在裡面啟動一個 agent。因為是新資料夾,node_modules 不會自動存在,所以才需要 setup script 跑 pnpm install——這就是作者一開始繞去看設定的原因。截圖裡的 agent 選單很值得看:Blank Terminal、Claude、Claude Agent Teams、Codex、OpenCode(勾選中)、Pi、OMP、Gemini、Antigravity、Kiro、Cline、Cursor、Hermes,底下還有「Manage agents」和一個「Create more」開關(可一次連開多個)。這張清單直接說明 Orca 是 agent-agnostic 的:它不綁任何一家模型。

術語:git worktree

design mode

設計模式

Orca 的一種工作方式:把 coding agent 和正在開發的網頁並排在同一個視窗,直接指著畫面上的元素叫 agent 改。

「design」指的是前端 UI 微調這類「看得到結果」的工作。它和平行編排是 Orca 的兩條使用路線:design mode 是一個 agent、一個網頁、快速來回;平行編排是多個 agent、多個任務、事後審查。這一段只看到第一步(開 worktree),完整迴圈還包括內建瀏覽器、抓元素、下 prompt、commit、開 PR。

相關術語: git worktree (在其中運作)

出處:第 2 段「Design Mode:一鍵開 worktree」

git worktree

Git 工作樹

同一個 git repo 同時 checkout 到多個獨立資料夾,各自對應一個分支、共享同一份提交歷史。

一般情況一個 repo 只有一個工作目錄,切分支要 stash 或 commit 才能換。worktree 讓你 `git worktree add ../feature-x feature-x`,得到第二個資料夾,兩邊可以同時改、同時 commit、互不干擾。對多 agent 來說這是最自然的隔離單位:每個 agent 一個資料夾、一個分支,最後各自開 PR。代價是每個資料夾都要自己裝依賴,所以 Orca 讓你設定 setup script。

相關術語: setup script (建立後自動跑)、AI coding agent (每個配一個)

出處:第 2 段「Design Mode:一鍵開 worktree」

setup script

初始化腳本

Orca 在每次建立新 worktree 後自動執行的指令,這裡是 pnpm install,用來把新資料夾的依賴裝好。

新 worktree 只有原始碼、沒有 node_modules、.env 這類不進版控的東西,agent 一開始就跑指令會失敗。把安裝步驟寫成 setup script 讓每個新工位都「可立即開工」。影片裡可以看到建立後先跑 setup、跑完 OpenCode 才載入,兩者是先後關係。

相關術語: git worktree (服務的對象)

出處:第 2 段「Design Mode:一鍵開 worktree」

留給下一段 工位開好、OpenCode 載入了,但 agent 要改的是一個網站——要怎麼讓 agent「看到」網頁上要改的那個元素?作者接著要在 work tree 裡把網站跑起來,並在 Orca 裡面開瀏覽器。

3. 內建瀏覽器 + 抓 DOM 元素 1:00–2:02

在 work tree 裡跑 nx dev website 啟動網站,再開一個「new browser tab」直接在 Orca 內開那個網站,分割到右邊,左邊留 OpenCode。瀏覽器分頁有「grab page element」功能:滑過去會高亮 DOM 元素,點下去就把該元素的 markup 複製到剪貼簿。作者貼進 OpenCode 並加一句「讓 description 撐滿卡片寬度」,agent 在自己的 work tree 裡調查專案然後改好。

左 OpenCode、右內建 Chromium 的分割畫面:Orca 把 agent 與被改的網頁放在同一個視窗,這是 design mode 的核心版面
1:23 · 左 OpenCode、右內建 Chromium 的分割畫面:Orca 把 agent 與被改的網頁放在同一個視窗,這是 design mode 的核心版面
grab page element 高亮 DOM 元素的瞬間,看了才知道「抓元素」是怎麼選的
1:33 · grab page element 高亮 DOM 元素的瞬間,看了才知道「抓元素」是怎麼選的
貼進 OpenCode 的 markup 加上一句 prompt:展示「元素 + 自然語言」就是給 agent 的完整輸入
1:47 · 貼進 OpenCode 的 markup 加上一句 prompt:展示「元素 + 自然語言」就是給 agent 的完整輸入
承上 承接上一段留下的問題:agent 要改網頁,怎麼讓它「看到」要改的元素?答案分兩步——先在 worktree 裡把網站跑起來、用 Orca 內建的瀏覽器開它,再用「grab page element」把畫面上的元素變成 agent 讀得懂的 markup。

推理因為上一段 worktree 已經裝好依賴、OpenCode 也載入了,所以作者直接在 worktree 裡跑 `nx dev website`,然後開一個「new browser tab」在 Orca 裡面打開 localhost,把它分割到右邊、OpenCode 留在左邊。這個並排版面就是 design mode 的樣子。接著他點瀏覽器工具列的 grab page element,滑過去會高亮 DOM 元素,點下 card container 就把它的 markup 複製到剪貼簿;貼進 OpenCode 再加一句「make the description extend the width of the card」按 Enter。作者刻意讓整個流程一氣呵成,用行為證明「指著畫面上的東西叫 agent 改」真的只有三個動作。

AI 補充幾個作者沒說、但截圖看得到的細節:(1) 左邊終端機的路徑是 `~/orca/workspaces/prowfish`,分支名也叫 prowfish——Orca 幫每個 worktree 隨機取名,資料夾與分支同名,這就是上一段 worktree 的實體。(2) 網站是 Astro 專案跑在 localhost:4321,`nx dev website` 是 Nx monorepo 的指令,代表這是 monorepo 裡的其中一個 app;上一段的 setup script 沒跑過就不會有這個指令可用。(3) 抓元素時瀏覽器上方有一行提示「Click or hover an element, then press C to copy or S to screenshot」——所以除了複製 markup,也能直接截圖給 agent 看。(4) 貼進 OpenCode 後顯示「Pasted ~25 lines」,也就是複製的是該元素的 HTML 片段,而不是原始碼檔案位置;agent 收到的是「渲染出來的 DOM」,它得自己在專案裡找到產生這段 HTML 的元件——這就是作者說「它會去 investigate the project」的原因。這裡也點出 grab element 的限制:DOM 和原始碼不一定一一對應(框架會加 class、hash),agent 需要一點推理才能對上。

grab page element

抓取頁面元素

Orca 內建瀏覽器的工具:滑鼠指向網頁上的元素會高亮,點下去就把該元素的 HTML markup 複製到剪貼簿,可以直接貼給 agent。

它解決的問題是「人看得到、agent 看不到」:你知道要改哪張卡片,但要用文字描述給 agent 得寫一堆「首頁第二個區塊的第一張卡…」。抓元素把「指」變成「貼」,agent 拿到的是準確的 DOM 片段(class、結構、文字),再自己往原始碼找對應元件。截圖顯示提示列還有 S 鍵可以改成截圖,適合純視覺問題。要注意它複製的是瀏覽器渲染後的 DOM,不是原始碼檔案,所以 agent 仍需要一步「從 DOM 找回元件」的推理。

相關術語: DOM (抓的是它)、design mode (核心操作)

出處:第 3 段「內建瀏覽器 + 抓 DOM 元素」

DOM

文件物件模型

瀏覽器把 HTML 解析後在記憶體裡建的樹狀結構,每個標籤是一個節點,網頁上看到的每個區塊都對應一個 DOM 元素。

DOM 是「渲染結果」而不是「原始碼」:React、Astro 這類框架會把元件編譯成 HTML,過程中可能加上自動產生的 class 名稱或改變巢狀結構。所以從 DOM 抓到的 markup 可以精確定位畫面上的東西,但要改原始碼還得反推是哪個元件產生它。這正是抓元素後 agent 需要「調查專案」的原因。

相關術語: grab page element (被它複製)

出處:第 3 段「內建瀏覽器 + 抓 DOM 元素」

Nx

Nx monorepo 工具

管理一個 repo 裡多個專案(app、library)的建置工具,`nx dev website` 意思是啟動名為 website 的那個 app 的開發伺服器。

作者的專案是 monorepo(一個 repo 裝多個 app),所以指令不是 `npm run dev` 而是 `nx dev website`。截圖裡看得到底層其實是 `pnpm run dev` → `astro dev`,網站跑在 localhost:4321。對這支影片的重點來說,只要知道「這行指令把網站跑起來」就夠;但它也解釋了為什麼 worktree 需要 setup script——沒有 pnpm install 就沒有 nx 可用。

相關術語: setup script (先跑它才能用)

出處:第 3 段「內建瀏覽器 + 抓 DOM 元素」

留給下一段 agent 已經在自己的 worktree 裡改好了一個地方。但改了什麼、改在哪個檔案?如果我想自己看一眼或動手微調呢?作者接著要打開側邊面板。

4. 側邊面板:編輯器、歷史、Git 狀態 2:02–2:43

打開側邊面板:有檔案瀏覽器,點開檔案是內建的 Monaco 編輯器,可以自己改;有 agent 做過什麼的歷史紀錄;還有 git status 顯示剛才改了一個檔案。作者接著跳到另一頁,用同樣方式抓一個區塊貼進去說「這裡也一樣」,agent 也改好了。

側邊面板裡的 Monaco 編輯器:說明 Orca 不只是叫 agent 做事,人也能直接在同一個地方手改
2:13 · 側邊面板裡的 Monaco 編輯器:說明 Orca 不只是叫 agent 做事,人也能直接在同一個地方手改
git status 面板顯示一個檔案被改:這是接下來 stage / commit 流程的入口
2:24 · git status 面板顯示一個檔案被改:這是接下來 stage / commit 流程的入口
承上 承接上一段的問題——agent 改好了,但改了什麼、改在哪、我能不能自己動手?這一段打開側邊面板,三個東西剛好回答這三個問題:檔案瀏覽器+Monaco 編輯器(自己動手)、agent 歷史(做了什麼)、git status(改在哪個檔案)。

推理因為上一段的改動是 agent 在自己的 worktree 裡完成的、人沒有介入,所以作者接著要證明「人隨時可以介入」:打開側邊面板,點開 .gitignore 示範內建 Monaco 編輯器「我們可以自己改」;再往下是 agent 做過什麼的歷史;最後是 git status 顯示剛才只改了一個檔案。看完狀態他沒有停下來,而是立刻跳到另一頁,用同一套「抓元素 → 貼上 → 說 do the same here」再做一次,證明這個迴圈是可重複的,不是一次性的巧合。

AI 補充截圖補上作者沒講的兩個重點。第一,git status 面板(右側)的資訊比他說的多:分支叫 `feat-card-component`、上游是 `origin/main`、Changes 1:`apps/website/src/pages/index.astro` +2 −2。左側 OpenCode 的輸出也列出具體改了什麼:在內層 `<div>` 加 `flex-1 min-w-0`、把 `<p>` 的 `max-w-xl` 拿掉——這就是「讓 description 撐滿卡片寬度」在 Tailwind 裡的實作。更值得注意的是 agent 的中間思考:它 grep 到同樣 pattern 有兩處,但判斷「使用者只要求他選的那張卡片,所以只改這裡」——這正好解釋為什麼作者下一步要手動跳到另一頁再抓一次:agent 刻意沒有擴大範圍。第二,側邊欄的 worktree 名稱從上一段的 `prowfish` 變成了 `Feat card component`,而終端路徑仍是 `~/orca/workspaces/prowfish`——代表 Orca 在 agent 開始做事後依任務內容自動幫 worktree/分支取了有意義的名字,資料夾名不變。另外面板上方已經有「Create PR」按鈕和「Stage All」,這是下一段流程的入口。

Monaco editor

Monaco 編輯器

VS Code 底層的那個網頁版程式碼編輯器元件,Orca 把它嵌進側邊面板,讓人可以不離開 app 直接改檔案。

Monaco 是微軟從 VS Code 抽出來的開源編輯器核心,提供語法高亮、行號、基本自動補全,很多網頁工具(GitHub 的線上編輯、各種 playground)都用它。它在 Orca 裡的意義不是取代 IDE,而是「小改動不用切視窗」:agent 改完你看到一個 typo 或想調一個數字,直接在這裡改完再 commit。這讓 Orca 的定位從純「工頭」多了一點「人也能下場」的彈性。

相關術語: agent orchestrator (人工介入的入口)

出處:第 4 段「側邊面板:編輯器、歷史、Git 狀態」

git status

Git 變更狀態

列出目前工作目錄相對於上一次 commit 有哪些檔案被修改、新增、刪除、以及哪些已經 staged 的指令與面板。

Orca 把 `git status` 做成側邊面板:顯示分支名、上游分支、每個變更檔案的 +/− 行數與狀態(M = 修改)。這是「審查 agent 做了什麼」最便宜的方法——不用讀對話紀錄,直接看它碰了哪些檔案、動了幾行。截圖裡看到只有一個檔案 +2 −2,就能立刻判斷改動範圍很小、可以放心。

相關術語: git worktree (顯示其狀態)

出處:第 4 段「側邊面板:編輯器、歷史、Git 狀態」

留給下一段 兩個地方都改好了、git status 也看到改動,但這些改動還只在本機的 worktree 分支上。接下來要把它們 stage、commit、開 PR 送回主分支——作者說可以讓 AI 幫忙寫 commit message。

5. Git 工作流:AI 寫 commit、開 PR 2:43–3:28

在 changes 面板按 stage all,commit message 可以自己寫也可以按 generate 讓 AI 生成。作者對生成的訊息滿意,commit 後直接按 create a PR。到 GitHub 看到 PR 已建立(有 commit message、沒有 PR 描述,作者說沒關係),按 create the merge commit 合併。這就是 design mode 的完整迴圈;作者刪掉這個 workspace 進入下一個主題。

AI 生成的 commit message:看實際產出的品質,是作者判斷「可以直接 commit」的依據
2:57 · AI 生成的 commit message:看實際產出的品質,是作者判斷「可以直接 commit」的依據
GitHub 上由 Orca 建立的 PR:證明流程真的從 app 一路走到遠端 repo,也看到「沒有 PR 描述」這個小缺口
3:08 · GitHub 上由 Orca 建立的 PR:證明流程真的從 app 一路走到遠端 repo,也看到「沒有 PR 描述」這個小缺口
承上 承接上一段:改動還只在 worktree 的本機分支上,要送回主分支。這一段就是把「stage → commit → PR → merge」在 Orca 裡走一遍,其中 commit message 交給 AI 生成。

推理因為上一段已經看到 git status 列出兩個改動的檔案,所以作者接著在 changes 面板按 stage all,然後面對「commit message 要自己寫還是讓 AI 寫」的選擇——他選了 generate 來測試品質。生成的訊息他覺得可以,就 commit,接著直接按 create a PR。跳到 GitHub 確認 PR 真的存在後,他還順手按了 create the merge commit 把它合進 main。整段的邏輯是「把 design mode 的迴圈走到底」:從指著畫面上的一個元素,到改動進 main,全程沒離開 Orca(除了最後去 GitHub 看一眼)。走完後他刪掉這個 workspace,代表 design mode 示範結束。

AI 補充看截圖可以評估 AI 生成的 commit message 到底好不好:它寫的是「Fix course card text overflow in flex layouts」——注意它沒有照抄作者的 prompt(「讓 description 撐滿寬度」),而是從 diff(加 `flex-1 min-w-0`、拿掉 `max-w-2xl`)反推出「這其實是在修 flex 版面的文字溢出問題」,這比作者自己的說法更接近技術本質,難怪他說 happy with that。Staged changes 是 2 個檔案(`pages/index.astro` 與 `pages/courses/index.astro`),對應上一段做的兩次修改。GitHub 那張圖也有幾個值得注意的地方:PR 標題「Feat card component #2」直接拿分支名(上一段 Orca 自動取的 `feat-card-component`)轉成的;內文「No description provided」——作者說「沒有 PR message 但沒關係」,這對個人專案 OK,但團隊協作時 PR 描述通常是必要的,這是 Orca 這個流程目前的一個小缺口(或作者沒設定)。最後「create the merge commit」是 GitHub 三種合併方式之一(merge commit / squash / rebase),保留完整歷史。

術語:pull request

stage

暫存(加入索引)

把工作目錄裡的變更標記為「下一次 commit 要包含的內容」,等於 `git add`;Orca 的 Stage All 就是一次全部標記。

Git 的三層結構是:工作目錄(你改的檔案)→ 暫存區/索引(準備提交的快照)→ 提交歷史。stage 是從第一層搬到第二層,commit 才是真正寫進歷史。分開的好處是可以只提交一部分改動;但在 agent 工作流裡,通常是「審過整個 diff 就全部 stage」,所以 Orca 把它做成一顆 Stage All 按鈕。

相關術語: git status (前一步看它)、commit message (下一步寫它)

出處:第 5 段「Git 工作流:AI 寫 commit、開 PR」

commit message

提交訊息

每一次 git commit 附帶的一段說明文字,記錄這次改動做了什麼、為什麼;Orca 可以按 generate 讓 AI 根據 diff 自動寫。

AI 生成 commit message 的原理是把 staged diff 丟給模型摘要。好的訊息應該描述「效果」而不是「動作」——截圖裡生成的「Fix course card text overflow in flex layouts」就是從 diff 反推意圖的例子,比逐字翻譯 prompt 更有用。常見誤解是 AI 寫的訊息一定很泛(「update files」),實際品質取決於 diff 是否小而聚焦;agent 只改兩個檔案 +2 −2 時,生成結果通常很準。

相關術語: stage (描述已 stage 的內容)、pull request (會出現在其中)

出處:第 5 段「Git 工作流:AI 寫 commit、開 PR」

pull request

合併請求(PR)

在 GitHub 上發起的「請把我這個分支合進 main」的請求,附帶 diff、commit 列表與討論區,是審查與合併的單位。

PR 是分支工作流的終點:worktree 上的分支 push 到遠端後,開 PR 讓人(或 CI)審查,再選一種方式合併。截圖裡的 PR #2 標題來自分支名、沒有描述、只有一個 commit,合併方式作者選了 create a merge commit(保留分支歷史;另外兩種是 squash 把多個 commit 壓成一個、rebase 把 commit 線性接上)。對多 agent 工作流來說,「每個 worktree 最後變成一個 PR」是收成果最乾淨的方法,因為 PR 之間彼此獨立、可以分開審查與合併。

相關術語: git worktree (每個產一個)、commit message (包含它)

出處:第 5 段「Git 工作流:AI 寫 commit、開 PR」

留給下一段 design mode 是「一個 agent、一個網頁、快速來回」的路線,作者已經示範完並刪掉 workspace。接下來換另一條路線:一次開很多個 worktree,每個指派給不同的 agent,同時做不同的任務。

6. 平行編排:三個 worktree、三個 agent 3:28–4:29

接著建一堆 work tree 並分派給不同 agent:第一個用 OpenCode,第二個用 Antigravity(作者很久沒用了),第三個用 Pi。每個都在自己的 work tree 裡,可以切換。作者事先讓一個工具(Improve)找出專案裡幾個小問題,現在把任務分派:Pi 做 001、Antigravity 做 005、OpenCode 做 007,然後依序按下執行。

三個 worktree 並列、各自不同 agent 的清單:這張圖就是「平行 agent 編排」的具體樣子
3:56 · 三個 worktree 並列、各自不同 agent 的清單:這張圖就是「平行 agent 編排」的具體樣子
承上 承接上一段結尾:design mode 示範完、workspace 刪掉了,換到第二條路線——一次開很多 worktree、每個指派不同 agent、同時做不同任務。這正是第 1 段說的「orchestrator」真正發揮的地方。

推理因為上一段已經證明一個 worktree 可以獨立走完「改 → commit → PR」,所以作者接著把同一個動作乘以三:連按三次「建 worktree」,分別選 OpenCode、Antigravity(他說很久沒用了)、Pi,每個都在自己的 worktree 裡跑 setup。這裡的推理很直接:既然工位彼此隔離,那同時開三個就不會互相干擾。任務來源他事先準備好了——用一個叫 Improve 的工具掃出專案裡幾個小問題並編號,現在只要把 001 給 Pi、005 給 Antigravity、007 給 OpenCode,再依序按下執行。作者刻意選三個不同的 agent,是為了展示 Orca 不綁任何一家、也順便比較它們的表現。

AI 補充截圖裡三個 worktree 的名字是 `mojarra`(Pi)、`opaleye`(Antigravity)、`barnacle`(OpenCode)——Orca 隨機取海洋生物名,和第 3 段的 prowfish 一樣,等 agent 開始做事後才會改成有意義的名字(見第 4 段)。中間終端機正在顯示 Antigravity 的啟動畫面,有兩個作者沒點出來、但後面會很重要的細節:一是最上面那行 `Waiting for setup to finish before starting agent...`,證實 Orca 是「setup script 跑完才啟動 agent」的序列(透過環境變數 `ORCA_SEQUENCED_STARTUP_SCRIPT`),和第 2 段看到的行為一致;二是 Antigravity 顯示 `Antigravity Starter Quota`、模型 `Gemini 3.5 Flash (High)`——「Starter Quota」就是免費額度,這是一個伏筆。右側 git 面板顯示「No changes on this branch」,因為任務還沒開始跑。另外要補充「Improve」是什麼:作者沒解釋,從上下文看它是一個另外跑的 agent/工具,先把專案掃一遍、產出一份編號的小問題清單(001、005、007…),讓後續分派有現成的任務單。這一步其實是平行編排的前提——沒有先把工作切成互不重疊的小任務,三個 agent 同時跑就沒意義。

術語:parallel agent orchestration

parallel agent orchestration

平行代理編排

同時啟動多個 coding agent,各自在隔離的 worktree 裡做不同任務,再統一監看與收成果的工作方式。

它建立在三個前提上:(1) 任務已經切成彼此不重疊的小單位(這裡由 Improve 先掃出來並編號);(2) 每個 agent 有自己的工作副本(git worktree),改動不會互相覆蓋;(3) 有一個地方能同時看到所有 agent 的狀態。缺任何一個,平行跑就會變成互相踩腳或失控。常見誤解是「平行 = 更快完成同一件事」——實際上是「同時做多件獨立的事」,每件事的速度不變,省的是人等待的時間。

相關術語: git worktree (隔離前提)、agent orchestrator (其主要用途)

出處:第 6 段「平行編排:三個 worktree、三個 agent」

Antigravity

Google Antigravity

Google 推出的 AI coding agent,這裡以 CLI 形式跑在 worktree 裡,使用 Gemini 模型,有免費的 Starter Quota。

截圖顯示版本 Antigravity CLI 1.1.15、模型 Gemini 3.5 Flash (High)、帳號狀態 Antigravity Starter Quota。它在這支影片裡的角色是「三個 agent 之一」,也是作者說「很久沒用」的那個。Starter Quota 是免費層額度,用完就無法繼續——這個細節在啟動畫面上就看得到。

相關術語: AI coding agent (一種)

出處:第 6 段「平行編排:三個 worktree、三個 agent」

Pi

Pi coding agent

另一個 AI coding agent,作者指派它做任務 001,在 worktree mojarra 裡跑。

影片沒有介紹 Pi 的來歷,只當作第三個可選的 agent。重點不在 Pi 本身,而在 Orca 把 OpenCode、Antigravity、Pi 這種來自不同陣營的工具放在同一個選單、同一種 worktree 流程裡——你不需要為每個 agent 學一套不同的隔離與合併方式。

相關術語: AI coding agent (一種)

出處:第 6 段「平行編排:三個 worktree、三個 agent」

留給下一段 三個 agent 已經各自開始跑了。但一個人怎麼同時盯三個終端機?作者接著要切到 workspace board,一眼看全部進度。

7. Workspace Board:一眼看全部進度 4:29–5:08

切到 workspace board,可以看到每個 agent 各自在跑,做完會浮上來等審查。OpenCode 先宣稱完成;Antigravity 因為免費額度用完沒做完,作者直接把它刪掉;Pi 的任務比較大(大約九個步驟)還在收尾。作者說趁這段時間可以先去審 OpenCode 的成果。

workspace board 總覽:三個 agent 的狀態同時呈現,是監看平行任務的儀表板
4:35 · workspace board 總覽:三個 agent 的狀態同時呈現,是監看平行任務的儀表板
Antigravity 顯示免費額度用完的失敗狀態:平行跑時「有一個掛掉」長什麼樣、怎麼處理
4:50 · Antigravity 顯示免費額度用完的失敗狀態:平行跑時「有一個掛掉」長什麼樣、怎麼處理
承上 承接上一段的問題:三個 agent 同時在跑,一個人怎麼盯?答案是 workspace board——一個看板,每個 worktree 是一張卡片,狀態變了會自己往右移。

推理因為上一段三個任務已經派出去,所以作者不再逐個切終端機,而是切到 workspace board 看整體。他的說法是「每個都在做自己的事,做完會浮上來、我們再審」——這是把監看從「主動輪詢」變成「被動等通知」。接著三個 agent 的結果剛好構成三種情境:OpenCode 宣稱完成(可以去審了);Antigravity 免費額度用完、任務沒做完(直接刪掉 worktree,不糾結);Pi 的任務比較大、約九個步驟、還在收尾(等它)。作者的處理方式本身就是在示範平行編排的心法:不是所有 agent 都會成功,失敗的就砍掉,不要讓它擋住其他人。

AI 補充看板截圖補上了任務內容:Todo 0 / In progress 5 / In review 0 / Done 0 四欄,In progress 裡三張卡片分別是「Fix typescript errors and…」(Pi,prompt 是 `implement @plans/001-fix-typescript…`)、「Fix seo metadata warnings」(Antigravity)、以及還叫 `barnacle` 的 OpenCode。這解開了上一段的兩個謎:(1) 001 / 005 / 007 是 `plans/` 資料夾裡的 markdown 檔(第 4 段的檔案樹裡就有 `plans` 目錄),Improve 產出的是一份份計畫檔,agent 用 `@plans/001-…` 引用;(2) 卡片標題是 agent 開始做事後自動從任務改名的,還沒開工的 barnacle 就維持隨機名。卡片除了三個 agent 還有兩張 `main primary`,是兩個專案各自的主分支。第二張截圖是 Antigravity 的失敗現場:往上看它其實已經做了不少事——讀了 CoursePost.astro、列出課程目錄、編輯了兩個 .mdx 的 metadata、正要改 tags 頁——然後底下一行紅字 `Individual quota reached. Please upgrade your subscription to increase your limits. Resets in 68h6m28s`。第 6 段啟動畫面上的「Starter Quota」在這裡兌現了。值得注意的是它做到一半的改動並沒有消失(仍在 opaleye worktree 裡),作者選擇刪掉是因為任務沒完成、審半成品不划算;如果那是關鍵任務,另一個做法是換一個 agent 接手同一個 worktree。這一段的 lesson 是:平行跑多個 agent 時,額度/費用是每個 agent 各自的限制,orchestrator 幫不上忙。

workspace board

工作區看板

Orca 把所有 worktree 以看板(Todo / In progress / In review / Done)呈現的頁面,agent 狀態改變時卡片自動移動,用來同時監看多個 agent。

它借用的是 Kanban(看板)的形式:欄位是狀態、卡片是工作單位。這裡工作單位 = 一個 worktree + 裡面的 agent。好處是「一個畫面看完所有人」,尤其當 agent 需要幾分鐘到幾十分鐘時,你不必守在每個終端機前。截圖裡還有一個 Pinned 區可以固定重要卡片而不改變狀態。它是平行編排的第三個前提(見第 6 段)的實作:沒有這種總覽,開三個 agent 只會讓自己更忙。

相關術語: parallel agent orchestration (監看它)、git worktree (每張卡一個)

出處:第 7 段「Workspace Board:一眼看全部進度」

quota

用量額度

AI 服務對每個帳號在一段時間內允許的 token 或請求上限,免費層(free tier)用完就必須等重置或付費。

截圖顯示 Antigravity 的訊息是「Individual quota reached… Resets in 68h6m28s」,也就是免費額度以約三天為週期。對多 agent 工作流的影響是:每個 agent 各自有自己的額度與計費,orchestrator 無法幫你把額度從一個 agent 挪到另一個。平行跑之前要先確認每個 agent 的額度夠做完它的任務,否則就像這裡一樣做到一半停掉、白費前面的 token。

相關術語: Antigravity (這裡用完的是它)

出處:第 7 段「Workspace Board:一眼看全部進度」

留給下一段 OpenCode 說做完了,Pi 也快了。「宣稱完成」不等於「可以合併」——作者接著要去審 OpenCode 的 diff,並示範審查意見可以直接送回 agent 修。

8. Diff 審查:加註解丟回 agent 5:08–5:53

審查 OpenCode 做的所有工作:可以直接在 diff 上加註解,把註解送回給 agent 修改。滿意就 stage all、建 PR。回到 board 看 Pi,也收尾完成了,同樣 stage、生成 commit message、commit、開 PR。跳到 GitHub 看到兩個 PR 都在。

在 diff 上加註解的介面:「審查結果回饋給 agent」這個閉環只有看畫面才知道怎麼操作
5:13 · 在 diff 上加註解的介面:「審查結果回饋給 agent」這個閉環只有看畫面才知道怎麼操作
承上 承接上一段:OpenCode 宣稱完成、Pi 快好了,但「宣稱完成」不等於「可以合併」。這一段就是審查——看 diff、在行上加註解、把註解送回 agent 修,滿意才 stage 與開 PR。

推理因為上一段的看板只告訴你「誰做完了」、不告訴你「做得對不對」,所以作者接著打開 OpenCode 的 diff 逐行看。他強調的重點是:可以在 diff 上直接加註解,然後把註解送回給 agent——這比自己動手改(第 4 段的 Monaco 編輯器)更省力,也比重新打一段 prompt 更精準,因為註解本身就帶著行號與上下文。審過滿意就 stage all、建 PR。接著回看板,Pi 也做完了,同樣的四步(stage、generate commit message、commit、create PR)再走一次。最後到 GitHub 看到兩個 PR 並排——這是平行編排的收成畫面:三個 agent 出發、兩個成功、兩個獨立的 PR。

AI 補充截圖顯示的是 `Card.astro` 的 diff(路徑在 barnacle worktree 下,分支已改名為 `feat-cleanup-lint-and…`),變更是把 props 解構裡沒用到的 `variant = "h2"` 拿掉——OpenCode 的分頁標題「Remove unused impo…」也印證 007 這個任務是「清理 lint 警告/未使用的 import 與變數」。右側顯示 Changes 8,也就是這次改了八個檔案,比 design mode 那次的兩個檔案多得多,這正是需要逐檔審查的原因。左側行號旁邊有一個「+」圖示,那就是加註解的入口(和 GitHub PR review 的體驗一樣)。作者沒說但值得補的一步:「把註解送回 agent」的實際效果是 Orca 把你的註解(含檔案與行號)組成一段 prompt 塞回該 worktree 裡的 agent 對話,agent 再改一次、你再看一次 diff——這是一個人機來回的閉環,工頭不寫 code,只批改。另外注意三個任務的性質:TypeScript 錯誤、SEO metadata、lint 清理——都是「小、獨立、不會碰同一批檔案」的任務,所以兩個 PR 可以分別合併而不衝突;如果任務會改到同一個檔案,平行跑的收成階段就會在 merge 時打架,這是選任務時要先想到的。

術語:annotation

diff

差異比對

兩個版本之間逐行的差別:紅色是被刪掉的行、綠色是新增的行;審查 agent 的成果時看的就是它。

diff 是 code review 的通用語言,Git 的 commit、GitHub 的 PR、Orca 的審查面板都以它為單位。看 diff 比看整個檔案有效率,因為只顯示「動過的地方」及其前後幾行。Orca 的 diff 面板多了一個功能:在任一行加註解並送回 agent,把「審查意見」直接變成「下一輪 prompt」。審 agent 的 diff 時要特別看的是「它有沒有改了不該改的東西」——所以 Changes 的檔案數是第一個訊號。

相關術語: pull request (PR 的內容)、stage (審過才做)

出處:第 8 段「Diff 審查:加註解丟回 agent」

annotation

行內註解(審查意見)

在 diff 的特定行上留下的評論,Orca 可以把它連同檔案與行號一起送回給 agent 當作修改指示。

它和單純再打一段 prompt 的差別在「定位」:註解自帶檔案路徑與行號,agent 不用猜你在講哪裡。這讓審查變成迭代:agent 改 → 人加註解 → agent 再改,人始終不需要自己動手寫。截圖裡行號旁邊的「+」就是加註解的按鈕。這也是 Orca 作為 orchestrator 的最後一塊:開工位、派任務、監看之後,還要能「退件」。

相關術語: diff (加在它上面)、AI coding agent (送回給它)

出處:第 8 段「Diff 審查:加註解丟回 agent」

留給下一段 兩個 PR 都進了 GitHub,平行分工這條路線走完了。但作者說這只是 Orca 的一小部分:同一個任務叫多個 agent 比稿、或讓 agent 接力,又是什麼玩法?

9. 還能做更多:比稿、handoff、sub agents 5:53–6:36

影片只涵蓋 Orca 的一小部分功能。剛才是讓不同 agent 平行做不同任務;也可以叫所有 agent 做同一個任務,比較 diff 後挑最好的。還有 agent handoff:一連串任務由一個 agent 交棒給下一個,或用 sub agents。作者建議去試試 Orca,最後自我介紹:做短而實用、尊重觀眾智商與時間的影片。

承上 承接上一段結尾的問題——平行分工之外還有什麼玩法?作者列出兩種:同一任務讓所有 agent 比稿、以及一連串任務由 agent 接力(handoff)或用 sub agents。

推理因為前面示範的是「不同 agent 做不同任務」,所以作者接著把同一套機制換個用法:也可以「所有 agent 做同一個任務」,然後比較各家的 diff、挑最喜歡的——這把 Orca 從生產工具變成評測工具,正好回應第 6 段刻意選三個不同 agent 的動機。第二種是 agent handoff:任務有先後依賴時,一個做完交給下一個;或用 sub agents 把大任務拆開。他沒有示範這兩種,只是點名,然後收尾建議觀眾去試 Orca,並自我介紹:做短而實用、尊重觀眾智商與時間的影片。

AI 補充把三種用法對回前面建立的概念,就能看出它們共用同一套基礎設施(worktree 隔離 + board 監看 + diff 審查),差別只在任務怎麼分配:(1) 平行分工——N 個 agent × N 個不同任務,成果是 N 個獨立 PR(第 6–8 段示範的);(2) 比稿——N 個 agent × 同一個任務,成果是 N 個 diff,只留一個合併、其餘 worktree 刪掉,本質上是用實際產出來選 agent/模型;(3) handoff——1 個任務鏈,agent A 的產出是 agent B 的輸入,需要的是順序而非隔離,Orca 要處理的是「A 做完自動啟動 B」。sub agents 則是第三種的變體:由一個主 agent 自己拆任務、派給子 agent,這在 Claude Agent Teams 這類工具裡是內建能力(第 2 段的選單裡就有)。要注意 (2) 和 (3) 影片都沒有實際示範,作者只是口頭提到,實際操作方式與限制需要自己查文件。最後的自我介紹看似與內容無關,但它解釋了整支影片的風格:六分鐘、不講原理、每個功能只做一次示範——這也是為什麼很多背景(worktree 是什麼、Improve 是什麼、quota 怎麼算)需要由這份筆記補上。

agent handoff

代理交棒

把一串有先後順序的任務串起來,一個 agent 做完自動把成果交給下一個 agent 接續,而不是同時平行做。

它和平行分工互補:平行適合任務彼此獨立,handoff 適合任務有依賴(例如先寫 API、再寫呼叫它的前端、再寫測試)。實作上 orchestrator 要負責「A 完成的判定」與「把 A 的產出當成 B 的起點」,通常是同一個 worktree 換 agent、或新 worktree 從 A 的分支開出來。影片只點名沒示範,細節請查 Orca 文件。

相關術語: parallel agent orchestration (互補)、sub agents (相近概念)

出處:第 9 段「還能做更多:比稿、handoff、sub agents」

sub agents

子代理

由一個主 agent 自己把任務拆小、派給多個子 agent 各自完成再彙整,拆解與分派由 agent 而不是人決定。

和 Orca 的平行編排最大的差別是「誰在當工頭」:平行編排是人(在 board 上)分派,sub agents 是主 agent 自己分派。Claude Agent Teams(第 2 段選單裡有)就是這類內建多 agent 的工具。兩者可以疊加:人用 Orca 開三個 worktree,每個裡面的 agent 再自己開 sub agents。

相關術語: agent handoff (相近概念)、agent orchestrator (由 agent 自己扮演)

出處:第 9 段「還能做更多:比稿、handoff、sub agents」

留給下一段 總結收束

4. 總結

作者先把 Orca 定位成 agent orchestrator(工頭而非工人),然後用兩條路線證明它有用。第一條 design mode:Cmd+N 開一個 git worktree 並自動跑 setup script → 在內建瀏覽器裡用 grab page element 把畫面元素變成 markup 貼給 agent → 側邊面板證明人隨時能介入(Monaco 編輯器、歷史、git status)→ stage、AI 生成 commit message、開 PR、在 GitHub 合併。第二條把工位乘以三:連開三個 worktree 各派 OpenCode/Antigravity/Pi 做不同任務 → workspace board 一眼看進度(做完的先審、額度用完的直接砍)→ 在 diff 上加註解送回 agent 修 → 兩個 PR 並排收成。最後點出還能做同題比稿、agent handoff 與 sub agents。整條推導是「隔離 → 派工 → 監看 → 審查 → 收成」。

5. 推薦三個下一步

1. 往下挖深:git worktree 到底怎麼隔離

影片把 worktree 當黑盒子按 Cmd+N 就有;要自己在沒有 Orca 的環境重現這套隔離,得懂 worktree 與分支、.git 目錄的關係。

YouTube 搜尋:git worktree tutorial git worktree parallel AI agents git worktree vs branch

2. 往旁邊對照:其他 agent orchestrator 怎麼做

影片只看 Orca 一家;比較 Conductor、Claude Squad 之類同型工具,才知道 workspace board 與 diff 註解回傳是不是標配。

YouTube 搜尋:Conductor parallel Claude Code Claude Squad tmux worktree AI agent orchestrator comparison

3. 往上應用:同題比稿與 agent handoff 實際怎麼跑

作者只點名沒示範的兩種用法;想把 Orca 用在真實專案上,需要看多 agent 做同一任務挑最好的、以及任務鏈接力的實例。

YouTube 搜尋:Orca agent handoff multiple AI agents same task compare diffs sub agents workflow Claude Code

📄 全部影片 · 主題區: 工程職涯與架構角色