工程筆記 作者 Hsin,Head of Product English

讓 Coding Agent Scale Up:五個 Agent,五台獨立的 Linux box

大家都會用 Coding Agent 寫 code,但幾乎沒人在講怎麼讓 Coding Agent Scale Up。 對我們團隊來說,關鍵不是換一個更強的模型,說白了就兩件事: 一套 Agent 真的會遵守的軟體品質管理流程, 以及 每個 Agent 一台獨立的 Linux box

先講數字,也先講但書: 我們團隊現在平均一位工程師一天大約 100 個 commits。但 commit 數不是我們的 KPI,它只是 Scale Up 的副作用—— 真要有人把它當 KPI,我們會第一個反對。五個 Agent 各自送小顆的 commit,本來就會比一個人送大顆的多, 這件事講的是 commit 的顆粒度,不是產出。會提它,只是因為大家都問這個。真正有意思的是底下那套機制。

為什麼一台筆電就不夠了

一個 Coding Agent 跑在你的筆電上,沒問題。麻煩是從第二個 Agent 開始的。

兩個 Agent 在同一台機器上,就是共用同一份檔案系統、同一個套件管理器、同一組 port、 同一套語言 toolchain、同一個瀏覽器 profile。一個 Agent 跑 npm install, 另一個 Agent 編譯的依賴就被換掉了;一個佔走 port 3000,另一個的 dev server 就起不來; 一個 Agent 跑 E2E 開瀏覽器,直接把你正在用的桌面搶走。 這些狀況都不會炸得很漂亮,而是間歇性地壞——這更麻煩, 因為你整個下午都在判斷「這 bug 到底是 code 的問題,還是環境的問題」。

而且這些 Agent 全都跑在那台放著你 SSH key 的筆電上。

你可以用 per-task container、tmux 紀律、加上很多小心來勉強撐住。 但撐不住的是:這些 Agent 終究還是在搶同一台機器的狀態。

五個 Agent,五台 box

所以我們乾脆不共用了。每個 Agent 拿到自己的一台 Linux box——真的 root、真的檔案系統、真的網路—— 要裝什麼就裝進自己那台。box 在多次執行之間是持續存在的,所以 toolchain 跟 cache 明天還在。

各個 Agent 角色,以及各自 box 裡裝了什麼
Agent box 裡裝什麼 為什麼不能共用
Engineer CLI toolchain、編譯器、語言 runtime 裝套件會直接改掉其他人編譯時依賴的東西
QA 瀏覽器、E2E 測試框架、測試資料 要模擬各種環境,而且得能整個砍掉重來
Reviewer 乾淨的 checkout,沒有 build 產物 工作目錄髒掉,就無法回答「這份 code 從零真的 build 得起來嗎」
DevOps 部署憑證、基礎設施工具 爆炸半徑——這台最不該讓人在裡面做實驗
PM issue 系統、文件,不碰 code 規劃這件事,根本就不該碰得到工作目錄

於是規則就很簡單:誰都不會污染誰的環境,也不會炸到你的筆電。 Engineer Agent 把自己 box 的套件管理器搞爛,對 QA Agent 完全沒影響。 真的遇到一台 box 進入沒人解釋得了的狀態,就砍掉重開一台—— 這跟你花一個下午 bisect 自己的機器,是完全不同的下午。

另一半:把流程寫下來

光有隔離,你只是得到五個 Agent 平行地製造混亂。另一半是: 每個角色的職責都寫成一份 Agent 會載入的 skill——它能碰什麼、必須產出什麼、 以及對這個角色來說「做完了」是什麼意思。

我們的是串成一條鏈:PM skill 把工作拆成 issue,Engineer skill 在自己的 box 裡 test-first 實作一張 issue, Reviewer skill 拿 diff 對照 issue 的驗收條件,QA skill 端到端跑過一輪,最後 deploy skill 出貨。 每一關都有 exit criteria,所以 Agent 不能靠「宣稱自己做完了」把工作往前推。

這就是讓 PM 跟 Engineer 完全不互相踩線的關鍵。他們不是在同一個工作區裡協調然後祈禱, 而是互相交付產出物——一張 issue、一個 PR、一份測試報告——中間有明確的邊界。 而 box 讓這個邊界是物理上的,不只是說說而已。

這裡講的「一台 box」是什麼

這套 runtime 是我們自己做的,也開源了,所以細節是我們的做法—— 但重點是這個「形狀」,你用別的工具也能兜出來。

  • 一個真正的 Linux 環境,不是一次 function 呼叫——LXC container 或 Kubernetes pod,有 root、有持續存在的檔案系統、有可路由的 hostname。
  • 跨 session 持續存在。第二次跑之所以快,多半就是因為 cache 是熱的、toolchain 已經裝好了。每次呼叫都重置的 sandbox 等於把這些全丟掉。
  • 用 SSH 連進去,用 MCP 驅動。box 裡跑一個 Model Context Protocol server,提供 shell 跟檔案工具,所以任何會講 MCP 的 Agent 都能直接用,不需要專用的 client library。
  • Agent 手上拿的是 SSH key,不是叢集憑證。就算 Agent 被打下來,對方拿到的是一台 box 的 shell,不是通往 control plane 的路。
  • 可拋棄。砍掉重建的成本夠低,低到可以當作 debug 的第一步,而不是最後一步。
利益揭露:上面講的那套 runtime 就是我們做的 Containarium。 它是 Apache 2.0,可以自架在一台 VM 上,所以你不靠我們也能跑出這個架構。 如果你不想自己顧基礎設施,也有代管版本。

這套解決不了的事

它不會讓 Agent 變得更會做事。 隔離拿掉的是一整類環境造成的失敗,但對一個爛計畫毫無幫助—— 而五個 Agent 平行執行一個爛計畫,只會產生五倍的善後。

瓶頸會變成 review,而且會落到你身上。 平行的 Agent 產出的 diff,多到一個人沒辦法認真讀完。 這才是這套架構真正會撞到的限制,而我們認為目前還沒有漂亮的解法。

commit 數是很糟的代理指標,而且會誤導你。 再講一次開頭的但書,因為大家最容易抓著這個數字不放: 平行 Agent 送的小 commit 會在結構上把它灌大。要看的是真正出貨、被 review 過、而且能動的改動。

給每個 Agent 一台自己的 box。

把開源版自架在你的 VM 上,或直接從代管雲端版免費開始。