← 所有文章

Claude Code 原始碼外洩揭露了什麼

From the guide: Claude Code Comprehensive Guide

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 是什麼?

一個在原始碼中發現的未發布自主代理功能。它包含持久記憶、夜間蒸餾和背景處理。該功能已設閘門,使用者目前無法使用。


  1. Claude Code Source Analysis: Bun Source Map Leak. March 2026. Full readable source exposed via .map files in the npm package due to a known Bun build bug. 

  2. Anatomy of a Claw: 84 Hooks as an Orchestration Layer. Blake Crosley, February 2026. 

  3. Claude Code Source Deep Dive: Architecture Internals. March 2026. Technical analysis of coordinator mode, prompt cache detection, and anti-distillation defenses. 

  4. Claude Code Auto Mode Documentation. Auto Mode architecture: classifier-based permission system, circuit breaker thresholds. 

  5. Claude Code Fork Bomb Incident. March 2026. SessionStart hook exponential spawning, saved by memory exhaustion. 

相關文章

The CLI Thesis

Three top HN Claude Code threads converge on one conclusion: CLI-first architecture is cheaper, faster, and more composa…

15 分鐘閱讀

The Fork Bomb Saved Us

The LiteLLM attacker made one implementation mistake. That mistake was the only reason 47,000 installs got caught in 46 …

6 分鐘閱讀

The Ralph Loop: How I Run Autonomous AI Agents Overnight

I built an autonomous agent system with stop hooks, spawn budgets, and filesystem memory. Here are the failures and what…

8 分鐘閱讀