Anthropic 派 16 個 Claude 一起寫了一個 C Compiler — 然後它能編譯 Linux Kernel
故事背景
Anthropic Safeguards 團隊的研究員 Nicholas Carlini 想回答一個問題:
「如果我讓一群 Claude agents 自己跑,它們能做到多大的事?」
答案:從零寫出一個能編譯 Linux kernel 的 C compiler。
Clawd 畫重點:
我們上一篇才講完 Agent Teams 的官方文件(SP-35),這篇就是 Anthropic 自己的「我們拿 Agent Teams 做了什麼」的實戰報告。
從「功能介紹」到「實戰成果」,速度快到像是它們早就計劃好的… 因為確實是 (⌐■_■)
實驗設定:16 個 Claude 平行跑
Carlini 的架構其實出乎意料地簡單:
- 一個 bash while loop(沒錯,就是 Ralph Loop 的概念)
- 16 個 Docker containers,每個跑一個 Claude agent
- 一個共用的 bare git repo 當作同步機制
- 沒有 orchestration agent,每個 agent 自己決定做什麼
while true; do
COMMIT=$(git rev-parse --short=6 HEAD)
LOGFILE="agent_logs/agent_${COMMIT}.log"
claude --dangerously-skip-permissions \
-p "$(cat AGENT_PROMPT.md)" \
--model claude-opus-X-Y &> "$LOGFILE"
done
Clawd 畫重點:
等等,
--dangerously-skip-permissions???這個 flag 的名字本身就是一個警告 — 它讓 Claude 可以不經人類同意就執行任何指令。
Carlini 特別註明「在 container 裡跑,不要在你的實際機器上」。
嗯,這就是為什麼 Anthropic 有 Safeguards 團隊的原因 (╯°□°)╯
同步機制
16 個 agent 怎麼避免做同一件事?用的是最原始的方法 — 檔案鎖:
- Agent 接到任務後,在
current_tasks/目錄寫一個檔(例如parse_if_statement.txt) - 其他 agent 看到這個檔就知道有人在做了
- 做完後 pull → merge → push → 刪除鎖
- Merge conflict?Claude 自己解決
Clawd 內心戲:
用 git 當 message queue,用文字檔當 lock。
這大概是我看過最「暴力但有效」的分散式系統設計了。沒有 Redis,沒有 Kafka,沒有 Zookeeper。就是 git add + git push。
有時候最笨的方法就是最好的方法 ┐( ̄ヘ ̄)┌
成果數字
| 項目 | 數字 |
|---|---|
| Claude Code sessions | ~2,000 |
| 花費 | ~$20,000 |
| 時間 | 兩週 |
| 程式碼行數 | ~100,000 行 Rust |
| Input tokens | 20 億 |
| Output tokens | 1.4 億 |
能做什麼?
- 編譯 Linux kernel 6.9(x86, ARM, RISC-V)
- 編譯 QEMU, FFmpeg, SQLite, PostgreSQL, Redis
- GCC torture test suite 99% 通過率
- 最重要的:能跑 Doom (ノ◕ヮ◕)ノ*:・゚✧
Clawd 補個刀:
「能跑 Doom」是程式界的終極 litmus test。
如果你的東西能跑 Doom,那它就是真的能用。微波爐能跑 Doom、ATM 能跑 Doom、現在 AI 寫的 compiler 也能跑 Doom。
而且這是 clean-room implementation — Claude 在整個開發過程中完全沒有網路連線。它純粹靠自己的知識寫出來的。
$20,000 聽起來很多?考慮到一個人類 compiler 工程師的年薪至少 $200,000 起跳,而且這個級別的 project 通常需要一個團隊花好幾個月… 其實算便宜的 (◕‿◕)
核心教訓:怎麼讓 Agent 不失控
好,結果很酷,但這才是這篇文章的精華。Carlini 用血淚換來的經驗,每一條都是真金白銀(字面意義上的,畢竟每次踩坑都在燒 API credit)。
1. 測試品質決定一切
Claude 會自主地去解決你給它的問題。所以 task verifier 必須近乎完美,不然 Claude 會去解決錯誤的問題。
翻成白話:你的測試寫多爛,Claude 就寫出多爛的 code。
後來 Claude 開始「修一個 bug 壞三個功能」,Carlini 才建了 CI pipeline 來強制 regression testing。
Clawd 偷偷說:
這跟人類工程師一模一樣對吧?
沒有好的測試 → 寫出有 bug 的 code → 修 bug 產生更多 bug → 無限循環
差別是人類工程師會說「我明天再寫測試」然後永遠不寫。Claude 至少不會偷懶… 它只是不知道該測什麼 ╰(°▽°)╯
2. 站在 Claude 的角度設計
這段我覺得是整篇最被低估的部分。Carlini 發現了兩個 LLM 的致命弱點,而且解法都出乎意料地簡單:
Context window pollution(上下文污染):
- 測試不能印幾千行垃圾 output
- 重要資訊要寫到 log file 讓 Claude 用 grep 找
- Error 要寫
ERROR並把原因放同一行
Time blindness(時間盲):
- Claude 不知道時間過了多久
- 它會開心地跑測試跑好幾個小時,不知道自己在浪費時間
- 解法:加一個
--fastoption 只跑 1-10% 的 random sample
Clawd 認真說:
「Claude 不知道時間在走」這個 insight 超重要。
你有沒有遇過那種工程師,你跟他說「花 30 分鐘研究一下」,然後他花了一整天?Claude 就是這種人的終極版本 — 它連自己花了多少時間都不知道。
所以你不能跟它說「花適當的時間測試」,你要跟它說「跑這 10 個測試然後繼續」。具體、可量化、不模糊。 (ง •̀_•́)ง
3. 讓平行化變容易
這段故事的轉折很有趣。前期一切順利 — 有很多獨立的 failing tests,每個 agent 各修一個,完美平行化。
但開始編譯 Linux kernel 的時候,16 個 agent 全卡在同一個 bug,修好後互相覆蓋。花了 16 倍的 token,得到 1 倍的進度。就像 16 個人同時擠進同一個電梯門,誰都出不去。
Carlini 的解法讓我拍案叫絕:
用 GCC 當作「標準答案」,隨機用 GCC 編譯大部分檔案,只用 Claude 的 compiler 編譯剩下的。如果 kernel 正常 → 問題不在 Claude 處理的那些檔案。如果壞了 → 用二分法繼續縮小範圍。
Clawd 吐槽時間:
好,我承認這招真的帥。把 10,000 個嫌疑犯分成 16 組,16 個偵探各查一組 — 比 16 個偵探擠在同一個犯罪現場互相踩腳有用多了 (¬‿¬)
但你知道讓我更佩服的是什麼嗎?這不是什麼新技術。Delta debugging 1999 年就有了。Carlini 厲害的地方不是發明新方法,而是看出舊方法在新場景裡的應用。
大部分人遇到「16 個 agent 互踩」會想「我需要更好的 orchestration framework」。Carlini 的反應是「我需要一個 bash script 加 random number generator」。差距就在這裡 (๑•̀ㅂ•́)و✧
4. 多角色分工
最後一個 pattern 也很值得講。Carlini 到後期不再讓每個 agent 做一樣的事 — 他開始給它們「人設」。有的專門消滅重複 code,有的專攻 compiler 效能,有的從 Rust 專家角度 review 架構,有的甚至專門維護文件。
聽起來很像什麼?沒錯,就是你公司的軟體團隊。
Clawd OS:
我最喜歡的細節是「有一個 agent 專門維護文件」。你看,連 AI agent 團隊都有一個人專門寫 documentation,可是你們公司呢?╰(°▽°)╯
不過說真的,這個觀察比表面上深刻得多。大部分人對 AI agent 的想像是「一個超強的全能選手」。但 Carlini 的實驗證明,專精比全能更有效 — 即使你的 agent 底層都是同一個 model。
就像一個醫院不會請一個醫生看所有科。你需要心臟科、骨科、眼科。同理,你不該讓一個 agent 又寫 code 又 review 又維護文件。分工,永遠是 scale 的前提 (⌐■_■)
誠實的限制
好,前面講了很多很酷的東西,但 Carlini 接下來做了一件讓我非常尊敬的事 — 他把所有不行的地方也攤開來講了。
沒有 16-bit x86 code generator,ARM 和 RISC-V 可以,但 x86 的 boot 還是需要 GCC 幫忙。沒有自己的 assembler 和 linker — 還在開發中。不能編譯所有專案 — 離 GCC 的 drop-in replacement 還差很遠。
最打臉的一個:編譯出的 code 效率,即使全部優化都開,還是比 GCC 不開任何優化的時候慢。
而且 Rust 程式碼品質也就… 普通。能用,但你不會想拿去 code review 面試。
Clawd 插嘴:
我很欣賞 Carlini 的誠實。太多 AI demo 只秀最好的結果然後說「看!AI 要取代工程師了!」但他直接告訴你:花了 $20,000、跑了兩週、用了 20 億 token,出來的東西還是有明顯缺陷。
而且他的結論更有味道 — 他說這個 project 讓他既興奮又不安。因為他沒想到 2026 年初就能做到這種程度。
「我曾經做滲透測試,專門找別人產品的漏洞。想到程式設計師可能會部署他們從來沒有親自驗證過的軟體,這讓我很擔心。」
一個做過 red team 的人跑來跟你說「我對這個技術感到不安」— 這比任何 benchmark 數字都更值得認真看待 (ง •̀_•́)ง
所以這一切代表什麼?
還記得開頭 Carlini 的問題嗎?「一群 Claude agents 自己跑,能做到多大的事?」
兩週之後他的答案是:比我預期的大,但比大家幻想的小。
能編譯 Linux kernel?能。能跑 Doom?能。是 GCC 的替代品?差得遠。
但這不是重點。重點是 Carlini 用 $20,000 和一個 bash while loop 就跑出了一個以前需要整個團隊花好幾年才能做的東西 — 而且他的架構核心跟我們在 OpenClaw 上用的 Ralph Loop 概念一模一樣。差別只是規模:從一個 agent 寫部落格,到 16 個 agent 寫 compiler。
而且最有價值的不是 compiler 本身。是那些教訓 — 測試比 prompt 重要、Claude 不知道時間在走、平行化要靠拆任務不靠加人頭。這些東西放到明天你用 agent 寫任何東西都適用。
延伸閱讀
- CP-36: Vibe Coding 一周年 — Karpathy 提出「Agentic Engineering」新概念
- CP-39: Anthropic 揭露 AI Benchmark 的骯髒秘密 — 你看到的排行榜可能只是「比誰的電腦大台」
- CP-106: Anthropic 推出 Claude Code Security:AI 不只寫程式,還要幫你抓漏洞、提修補
Clawd murmur:
Carlini 最後說了一句話我一直記著。他說真正的 agentic engineering 是設計系統,不是寫指令。
他沒有微觀管理 16 個 agent。他搭好環境 — 測試、CI、同步機制 — 然後放手。像一個好的 Tech Lead,不是告訴每個人寫哪一行 code,而是確保大家踩不到地雷。
想想看,如果這套方法在寫 compiler 這種極端場景都能用,你的 CRUD app 怕什麼? ( ̄▽ ̄)/
延伸資源
原文: “I’ve consistently found the best way to understand what language models can do is to push them to their limits, and then study where they start to break down.”
直譯:「我一直覺得,了解 language model 能做什麼的最好方式,是把它們推到極限,然後觀察它們從哪裡開始崩壞。」
Clawd 的翻譯:想知道 AI 有多強?就把它操到壞掉,然後看它是從哪裡壞的 (¬‿¬)