Anthropic 自己做了版本控制系統 Scion:對照我開發 App 踩到的 5 個坑

Anthropic 內部每天合併超過 3 萬次程式碼變更,git 撐不住,他們花 5 個月自己做了一套版本控制系統 Scion。我的專案規模差了好幾個數量級,用不到 Scion。但這篇文章裡的 5 個觀念,剛好對上我這幾天踩到的坑。我最近在開發自己的 App。

原文是 Anthropic 工程部落格〈Redesigning source control at Anthropic〉,2026 年 10 月 13 日發表,作者是 Nick G. 和原始碼管理團隊。前半段整理原文重點,後半段是我對照自己專案的 5 個教訓。

名詞解釋版本控制:記錄程式碼每一次修改的系統,最常見的是 git。monorepo:把整間公司的程式碼放在同一個儲存庫裡。工作副本:把程式碼從儲存庫拿到自己電腦上、可以直接修改的那一份檔案。

一、Anthropic 遇到什麼問題

Anthropic 的工程師大量用 Claude 寫程式。寫程式本身已經不慢了,慢的是周邊的基礎設施:版本控制、建置和自動測試。這些系統當初是照「人類寫程式的速度」設計的。

  • 合併量暴增:2026 年 5 月每天約 2,500 次,9 月已超過 30,000 次。
  • 儲存庫很大:主分支歷史約 100 GB,一份壓縮後的工作副本就超過 25 GB。
  • 拉取量驚人:自動測試每天約 2,500 萬次取出程式碼。照 git 原本的做法,每天流量會超過 600 PB。

git 的設計假設每個人都會離線工作,所以每個人都要有完整的歷史紀錄。但 Anthropic 現在的使用者大多是「永遠連線」的 AI agent 和自動化任務,這個假設反而變成負擔。

二、Scion 怎麼解決

一個 7 人團隊花 5 個月做出 Scion,同時做了程式碼審查工具,再把整個 monorepo 從 git 搬過去。這段期間,每天的合併量又成長了 10 倍。幾個關鍵設計:

  • 工作副本是選配的:只拿需要的目錄,甚至可以完全不拿,直接透過 API 讀寫。原文寫「The working copy is optional, and sparse by design.」
  • 重活交給伺服器:歷史、合併、比對都在伺服器端做,個人電腦只留有上限的快取。
  • 審意圖,不逐行讀:工程師仍審每一份變更,但看的是「這次想做什麼、取捨對不對」。原文說,工程師很常扮演的角色是對 Claude 說「不」。
  • 合併後才測試:排隊一個一個合併的做法在 agent 的速度下行不通。他們改成先合併、合併後與部署前再自動測試,衝突交給 Claude 修。
  • 專職監看的 agent:每個元件配一個只負責看健康狀態的 Claude,他們叫它 superfan。它會讀遙測資料和日誌,找出一般告警抓不到的細微異常。

結果是:快取命中率超過 99%,運算資源需求比原本的 git 架構小約 200 倍,自動測試取出程式碼的時間從幾分鐘降到幾秒。

Anthropic 也說明,Scion 只適合超大型 monorepo,不打算當 git 的通用替代品。他們分享的目的是讓 git 社群參考其中有用的設計。

三、我的情況:一個人帶著一群 agent 開發 App

我最近在開發一個桌面 App,叫 Thatcaster,用來錄製和剪輯教學影片。開發方式是讓多個 AI agent 平行工作:每個功能開一個分支、一個獨立的工作資料夾,做完再合進發行分支,打包成安裝檔給我安裝。

這個規模用 git 綽綽有餘。不過這幾天出的狀況,和 Anthropic 文章裡講的問題,形狀幾乎一樣。

坑 1:工作副本太重,硬碟被塞滿

我讓每個任務都開一個完整的工作資料夾(git 的 worktree 功能,可以在同一個儲存庫底下同時開好幾份工作副本)。agent 做完不會自己清,幾天下來累積到 158 個,硬碟只剩 23 GB。

Anthropic 的做法是讓工作副本盡量輕,只拿需要的部分。對照到我的專案,改法是:

  • 不再一個任務開一個資料夾,改成固定幾個可以重複使用的「工作槽」。
  • 任務結束就自動清掉,不靠人記得刪。

坑 2:我在審意圖,但沒有寫下規則

Anthropic 的工程師不逐行讀程式碼,只看這次改動想做什麼、取捨對不對。這其實就是我現在的角色。我也不會逐行看 agent 寫的程式,我看的是它想做什麼。

問題是,我的規則都在腦袋裡,或散落在每次交辦的對話裡。例如:

  • 不能動 main 分支:所有修改先進發行分支,確認沒問題才進 main。
  • 內嵌網頁不能加 preload:preload 是讓網頁內容碰到桌面系統功能的通道。內嵌外部網頁時開這個口,等於給網頁太多權限。
  • 打包白名單:哪些檔案要放進安裝檔,有一份清單管控。

改法是把這些寫成一張明確的規則表。每個 agent 開工前要讀,結束時要逐條自查。這樣我審的時候,也有一份可以對照的標準。

坑 3:測試全過,裝好的 App 卻打不開

這是這幾天最痛的一次。第 5 個組建(build 5)的安裝檔做好了,所有自動測試都通過。我裝上去,App 開不出視窗。

原因是主程式啟動時要讀一個選單檔,但打包白名單漏了它,安裝檔裡根本沒有這個檔。測試是在開發環境跑的,檔案都在,所以抓不到。裝好的 App 也沒有人或 agent 真的開啟過。結果,我就是第一個發現的人。

Anthropic 改成合併後、部署前自動測試。對照到我的專案,驗收要做到「裝好的成品」這一層:

  • 已經做了:打包完自動檢查主程式要讀的檔案是不是都在安裝檔裡,缺一個就讓打包失敗。build 6 就靠這個確認了 228 個檔案都在。
  • 還差一步:安裝後自動啟動一次,確認視窗有出來、日誌沒有錯誤,才通知我去裝。

坑 4:缺一個專門盯著的 agent

修好的第 6 個組建(build 6)安裝檔做好了,卻過了 4 個小時都沒裝上去。

原因是前一個負責後續流程的排程任務提早被刪掉了,沒有人接手。每個 agent 都只顧自己那一段,段與段之間的交接就掉了。

Anthropic 的 superfan 是每個元件配一個只負責盯健康狀態的 Claude。我不需要這麼多,但可以有一個固定的排程任務,專門盯「打包到安裝」這條線:有沒有新的安裝檔、裝上去了沒、開起來正不正常。

坑 5:合併排隊,偶爾卡住

我現在每一版安裝檔,要合併 4 到 6 個功能分支。分支之間偶爾會衝突,衝突就卡在那裡等我處理。

Anthropic 的結論是:在 agent 的速度下,排隊合併行不通。原文寫「Claude can typically fix these conflicts faster than humans can even identify them.」,也就是 Claude 修衝突的速度,往往比人類發現衝突還快。

對照到我的專案,改法是讓修改直接進發行分支,打包時再完整跑一次測試。遇到衝突,就讓 AI 程式工具(我用的是 Grok CLI)當場修,不再排隊等我。

四、規模差很多,問題的形狀一樣

Anthropic 是每天 3 萬次合併,我是一天幾個分支。但根本的問題相同:AI 寫程式變快之後,瓶頸就移到程式以外的地方。例如工作環境要有人清,規則要寫下來,成品要驗收,流程要有人交接。

如果你也開始讓 AI agent 幫你寫程式,可以先檢查這 5 件事:

  1. 工作環境會不會自動清理?agent 開出來的資料夾、分支、暫存檔,有沒有人收。
  2. 規則有沒有寫成文字?不能做的事要寫成清單,讓 agent 開工前讀、收工時自查。
  3. 驗收做到成品了嗎?測試通過不等於使用者拿到的東西能用,要真的安裝、開啟來檢查。
  4. 流程的交接有人盯嗎?每段都有 agent 負責,不代表段與段之間有人負責。
  5. 合併衝突要排隊等人嗎?可以讓 agent 先修,人再審它修的意圖。

工程師的角色正在變:寫得少,審得多,更常說「不」。而要能審、能說不,前提是規則和驗收標準已經清楚寫下來。

資料來源
Nick G. 等,Redesigning source control at Anthropic(Anthropic Engineering,2026-10-13)
文中 Anthropic 的數據與引言皆引自上述文章;Thatcaster 的開發狀況為作者本人專案的紀錄。

想拿這篇的純文字原稿?網址結尾加上 .md 即可: /blog/anthropic-scion-source-control-agent-dev-lessons.md

想把這些方法帶進你的團隊?

無論是一場主題講座,或完整的 AI 導入規劃,歡迎與我們聊聊你的需求。

預約課程洽詢