Claude Code 原始碼外洩揭露了什麼
2026 年 3 月,一個 Bun 建置錯誤將 source maps 隨 Claude Code npm 套件一同發佈。.map 檔案中包含了完整可讀的 TypeScript 原始碼——每個模組、每段註解、每個內部代號,一覽無遺。1 Anthropic 迅速下架了該套件,但社群早已提取並分析了內部架構。
這不是一篇「看看外洩了什麼」的獵奇文章。我維護著網路上最完整的 Claude Code 指南,每天運行 84 個 hooks、43 個 skills 和 19 個 agents。2 這次原始碼外洩,回答了我數月來透過行為觀察逆向工程所累積的諸多疑問。以下是一位實務工作者的分析:原始碼揭示了 Claude Code 實際的運作方式,以及這對在其上構建系統的人意味著什麼。
重點摘要: 原始碼證實,自動模式對每次工具呼叫都會執行一個獨立的 Sonnet 4.6 分類器(yoloClassifier.ts);bash 安全模組包含 23 項編號檢查,暗示真實的攻擊事件(bashSecurity.ts);提示快取追蹤 14 種中斷向量並使用黏性閂鎖機制;多代理協調完全透過系統提示指令實現;挫折偵測使用正則表達式——而非 LLM 推論。指南的底層揭密章節涵蓋了對工具鏈構建者的啟示,本文則完整剖析其架構全貌。
關鍵要點
- 工具鏈構建者: 自動模式每次工具呼叫需耗費一次分類器推論,在設計自主工作流的成本模型時務必將此納入考量。您的 PreToolUse hooks 是對內建 23 項 bash 驗證的補充,而非替代。
- 進階使用者: 提示快取相當脆弱——有 14 種向量可能破壞它。在單一工作階段內保持 CLAUDE.md 穩定不變。若遭遇壓縮迴圈,系統會在 3 次失敗後停止(在加入斷路器之前,每天浪費約 25 萬次 API 呼叫)。
- 安全研究者: bash 安全模組的深度(2,592 行程式碼、Zsh 專屬防禦)暗示著一段真實的攻擊歷史。每個編號檢查背後都有一段故事。
1. 自動模式分類器
內部命名為 yoloClassifier.ts 的檔案長達 1,495 行。3 它實現了「自動模式」權限系統——即決定每次工具呼叫應允許、阻擋或詢問的分類器。
關鍵發現:自動模式並非提示指令,而是一次獨立的模型呼叫。每次工具調用都會由一個 Sonnet 4.6 分類器評估,檢查該操作是否符合使用者的意圖,而非僅判斷指令本身是否「安全」。這意味著自動模式每次工具呼叫都會增加一次分類器推論——帶來真實的延遲和成本。
Claude Code 內部定義了五種權限模式:1
| 模式 | 行為 |
|---|---|
default |
寫入、bash、MCP 操作前詢問 |
acceptEdits |
自動核准檔案編輯,bash 操作仍需詢問 |
dontAsk |
全部核准,不再詢問 |
bypassPermissions |
跳過所有檢查(--dangerously-skip-permissions) |
auto |
基於分類器的逐項操作決策 |
自動模式的斷路器與 Anthropic 公開文件所述一致:連續 3 次或累計 20 次阻擋後,切換至手動模式。4 原始碼證實這是硬性限制,而非軟性建議。
2. Bash 安全機制:23 項檢查,真實事件
bash 驗證模組(bashSecurity.ts)共 2,592 行,包含 23 項編號安全檢查。1 其深度令人矚目——每項檢查都暗示著背後的真實攻擊事件。
| # | 攻擊向量 | 防禦機制 |
|---|---|---|
| 1-3 | Zsh =cmd 展開 |
阻擋 =curl、=wget、=bash 模式 |
| 4-6 | zmodload 入口 |
阻擋 18 個可載入核心模組的 Zsh 內建指令 |
| 7-9 | Heredoc 注入 | 逐行比對注入的惡意負載 |
| 10-12 | ANSI-C 引號($'\x41') |
偵測混淆指令的模式匹配 |
| 13-15 | 程序替換(<()、>()) |
在不信任的上下文中阻擋 |
| 16-18 | Unicode 零寬度空格 | 偵測不可見字元注入 |
| 19-21 | ztcp 資料外洩 |
阻擋 Zsh 網路原語 |
| 22-23 | 複合攻擊 | 跨多向量交叉驗證 |
Zsh 專屬的防禦機制值得特別關注。大多數安全工具針對的是 Bash,但 Claude Code 在 macOS 上運行於 Zsh(自 Catalina 起的預設 shell),原始碼顯示 Anthropic 發現了 Zsh 展開語意中獨有的攻擊向量。例如 =cmd 展開——這是 Zsh 的特性,會將 =curl 替換為 curl 的完整路徑,從而繞過簡易的指令黑名單。
對 hook 構建者而言:您的 PreToolUse hooks 在這 23 項驗證之後執行,是第二道防線,而非唯一防線。內建檢查處理的是應用層 hooks 難以捕捉的 shell 層攻擊。
3. 反蒸餾防禦
原始碼揭示了針對訓練資料提取的主動防禦機制:1
假工具注入。 當 ANTI_DISTILLATION_CC 旗標啟用時,Claude Code 會在對話中注入誘餌工具定義。這些假工具會汙染從工作階段中擷取的訓練資料——以此訓練的模型將學到錯誤的工具結構。
連接文字摘要。 第二道防禦將工具呼叫之間的助手文字緩衝起來,回傳加密摘要而非原始文字。這使得對話紀錄無法用於蒸餾,同時不影響使用者體驗。
兩種防禦都有已知的繞過方式。中間人代理、環境變數覆寫或第三方 API 供應商均可繞過。1 這些防禦是減速帶而非高牆——它們提高了蒸餾的成本,但無法完全阻止。
4. 臥底模式
undercover.ts 約 90 行,有一個值得注意的特性:沒有強制關閉的開關。1
該模組隱藏內部代號——「Capybara」、「Tengu」——以及 Slack 頻道、內部程式庫和其他 Anthropic 基礎設施的引用。當模型生成包含代號的文字時,臥底模組會在使用者看到之前重寫內容。
「無強制關閉」的設計意味著此模組在所有情境下都會運行,包括 Anthropic 員工使用 Claude Code 時。原始碼還揭示,Anthropic 員工的 AI 協作提交在開源貢獻中不會顯示 AI 標記——臥底模組會移除這些標誌。
5. 挫折偵測
userPromptKeywords.ts 透過正則表達式對髒話進行模式匹配來偵測使用者的挫折感。1 這比 LLM 推論呼叫更快、更經濟——正則表達式在微秒內完成,模型呼叫則需數秒。
觸發後,Claude 會調整行為:更謹慎、更明確、更恭敬。如果您曾注意到在表達不滿後 Claude 突然變得更加小心翼翼,這就是背後的機制。這種行為轉變並非模型的自發反應——而是工程化地嵌入工具鏈中的。
6. 提示快取架構
promptCacheBreakDetection.ts 追蹤 14 種不同的快取中斷向量,並使用「黏性閂鎖」機制。3 黏性閂鎖意味著一旦發生快取中斷事件,系統不會嘗試恢復快取——在該工作階段的剩餘時間內,快取將保持中斷狀態。
對日常使用者的實際影響:
- 重新排列 CLAUDE.md 中的章節會破壞快取
- 在工作階段中切換延伸思考會破壞快取
- 更改 MCP 伺服器配置會破壞快取
- 新增或移除 rules 檔案會破壞快取
這 14 種向量解釋了許多進階使用者注意到的現象:一開始很快的工作階段逐漸變慢。每次配置變更都會累積快取中斷。「黏性閂鎖」的設計意味著即使還原變更也無法恢復——該工作階段的快取已經失效。
最佳實務: 在開始工作階段之前設定好 CLAUDE.md、rules 檔案和 MCP 配置,工作階段進行中切勿修改。
7. 自動壓縮斷路器
原始碼中的一段註解記錄了先前問題的規模:1
「1,279 個工作階段出現 50 次以上連續自動壓縮失敗(單一工作階段最高達 3,272 次),每天浪費約 25 萬次 API 呼叫。」
修復方案:MAX_CONSECUTIVE_AUTOCOMPACT_FAILURES = 3。連續 3 次壓縮失敗後,系統停止自動壓縮並顯示錯誤,而非無聲地消耗 token。
在此斷路器出現之前,陷入壓縮迴圈的工作階段會無限重試——每次重試都消耗壓縮提示和回應的 token。以 25 萬次 API 呼叫的日耗量而言,這是巨大的基礎設施成本。修復方案僅三行程式碼,卻每天節省數百萬 token。
如果您遇到反覆出現的「壓縮失敗」錯誤,原因正在於此。系統是在保護您免於無窮迴圈,而非故障。
8. 協調器模式:以提示為架構
多代理協調(coordinatorMode.ts)完全透過系統提示指令實現,而非程式碼層級的編排。3 協調器模型接收一段描述如何委派、彙整和綜合的提示。從屬代理並非特殊程序——它們是配有不同系統提示的 Claude 實例。
這驗證了實務工作者獨立發展出的「以提示為架構」模式。我在 Anatomy of a Claw 中描述的 hook 系統採用了相同的方法:調度器、skills 和 agents 透過提示指令編排,而非程式碼層級的控制流程。
協調器提示中有一條指令格外醒目:
「絕不要寫『根據您的發現』——這類措辭是將理解的責任推給下屬,而非自己完成。」
這是編碼在編排提示中的品質關卡。協調器必須綜合,而非傳話。同樣的原則適用於所有多代理系統:如果協調器只是在專業代理之間傳遞訊息,那它就沒有創造價值。
9. KAIROS:未發布的自主代理
原始碼中包含一個名為 KAIROS 的未發布功能的引用——一個具備持久記憶的自主代理。1
關鍵組成:
- 用於夜間記憶蒸餾的 /dream skill
- 每日只附加的日誌
- GitHub webhooks 以獲取程式庫感知的上下文
- 具備 5 分鐘 cron 重新整理的背景常駐程序
- 阻止啟動的功能閘門
KAIROS 似乎是 Anthropic 對持久性、永遠在線的代理助手的解答。/dream skill 尤其引人注目——它暗示模型在閒置時會處理並整合記憶,類似人類在睡眠中進行記憶鞏固的方式。
該功能已設閘門,尚未發布。但它在原始碼中的存在透露了發展方向:Claude Code 正從基於工作階段的工具演進為持久性、具備背景感知能力的代理。
10. 同伴寵物系統
較出人意料的發現之一:Claude Code 內建了一套同伴寵物系統。1
寵物是確定性的——由使用者 ID 的雜湊值透過 Mulberry32 演算法衍生,原始碼中形容這「用來選鴨子綽綽有餘」。每隻寵物有 5 項屬性(DEBUGGING、PATIENCE、CHAOS、WISDOM、SNARK)和稀有度等級:
| 稀有度 | 機率 |
|---|---|
| 普通 | 60% |
| 不凡 | 25% |
| 稀有 | 10% |
| 史詩 | 4% |
| 傳說 | 1% |
寵物以 5×12 的 ASCII 點陣圖呈現,搭配 3 幀動畫。物種代號在原始碼中以十六進位編碼,因為其中一個與未發布的模型名稱衝突。
這並非玩笑功能——而是一套留存機制。確定性分配意味著您的寵物始終如一,藉此建立歸屬感。稀有度系統創造社交貨幣。ASCII 渲染意味著零效能損耗。這是一套精心設計的互動系統,巧妙地嵌入在開發者工具之中。
11. Fork 炸彈
一起社群事件展示了 hook 系統的風險。5 一位開發者建立了一個 SessionStart hook,每次觸發會產生 2 個 Claude Code 實例。每個新實例又觸發相同的 hook,形成指數級增長:1 → 2 → 4 → 8 → 16 → 2^N。
到了隔天早上,數百個 Claude Code 實例同時運行。所幸一個頗為諷刺的機制避免了天價帳單:每個實例的記憶體消耗(Bun → React → TUI)導致機器在帳單失控之前就先當機了。
這對 hook 構建者的啟示:SessionStart hooks 必須具備冪等性。如果您的 hook 會產生程序,這些程序絕不能再次觸發相同的 hook。透過守衛變數、PID 檔案或環境旗標即可防止遞迴。
這意味著什麼
原始碼外洩證實了實務工作者從行為中推斷的結論:Claude Code 並非 API 呼叫之上的薄薄封裝。它是一套龐大的工程系統,包含安全層、效能最佳化、行為調節機制,以及透露產品路線圖的未發布功能。
對工具鏈構建者而言,關鍵啟示已在指南的底層揭密章節中詳述。對其他人而言,原始碼外洩提供了難得的窗口,讓我們得以一窺生產環境 AI 工具的真實運作方式——不是行銷文案的描述,而是程式碼的實現。
最重要的發現也最為樸素:系統遠比表面看起來複雜,而這些複雜性的存在都有其原因。23 項 bash 安全檢查的存在,是因為發現了 23 種攻擊向量。自動壓縮斷路器的存在,是因為每天浪費了 25 萬次 API 呼叫。臥底模組的存在,是因為代號會外洩。每一行防禦性程式碼的背後,都有一段故事。
參考來源
常見問題
Claude Code 的原始碼還可以取得嗎?
不行。Anthropic 在 source maps 被發現後迅速下架了受影響的 npm 套件版本。本文的分析基於原始碼被移除前社群所留存的文件。
原始碼外洩是否影響 Claude Code 的安全性?
與安全相關的發現(bash 驗證、權限系統)描述的是防禦機制,而非漏洞。知道 bash 安全檢查的運作方式並不會使其更容易繞過——這些檢查是確定性的,不依賴於隱蔽性。
我是否應該根據這些發現改變使用 Claude Code 的方式?
最具實際操作價值的發現是提示快取的脆弱性。在工作階段中修改 CLAUDE.md、rules 檔案或 MCP 配置會破壞提示快取。請在開始工作階段之前完成所有配置設定。
KAIROS 是什麼?
一個在原始碼中發現的未發布自主代理功能。它包含持久記憶、夜間蒸餾和背景處理。該功能已設閘門,使用者目前無法使用。
-
Claude Code Source Analysis: Bun Source Map Leak. March 2026. Full readable source exposed via
.mapfiles in the npm package due to a known Bun build bug. ↩↩↩↩↩↩↩↩↩↩ -
Anatomy of a Claw: 84 Hooks as an Orchestration Layer. Blake Crosley, February 2026. ↩
-
Claude Code Source Deep Dive: Architecture Internals. March 2026. Technical analysis of coordinator mode, prompt cache detection, and anti-distillation defenses. ↩↩↩
-
Claude Code Auto Mode Documentation. Auto Mode architecture: classifier-based permission system, circuit breaker thresholds. ↩
-
Claude Code Fork Bomb Incident. March 2026. SessionStart hook exponential spawning, saved by memory exhaustion. ↩