2026 年 3 月 31 日,Anthropic 發佈了 @anthropic-ai/claude-code npm 套件的 v2.1.88 版本。看起來只是例行更新,但一位安全研究員很快注意到套件裡多了一個不該出現的東西——一個 59.8 MB 的 JavaScript source map 檔案。這個檔案就像是一把鑰匙,直接把 Claude Code 背後 512,000 行 TypeScript 原始碼攤在陽光下。
安全研究員 Chaofan Shou 在 X 上首先揭露了這件事,貼文累積超過 2,880 萬次觀看。幾個小時內,完整的原始碼就被鏡像到 GitHub 上,全球開發者開始逐行分析。衍生出的 claw-code 專案甚至一天內突破 10 萬顆星,成為 GitHub 史上成長最快的 repository。
這篇文章會整理這次洩漏是怎麼發生的、原始碼中揭露了哪些讓 Claude Code 好用的架構設計、困擾使用者的 token 消耗 bug 到底是什麼、被發現的安全漏洞與隱藏功能,以及 Anthropic 的回應和開發者能從中學到的事。
怎麼洩漏的——一個 .npmignore 引發的慘案
發佈 npm 套件時,開發者通常會用 .npmignore 檔案來排除不需要發佈的內容,例如測試檔案、開發用設定檔,以及 source map。Source map 是一種除錯用的對照檔,可以把壓縮過的 production code 還原成可讀的原始碼。對開發者除錯很方便,但絕對不應該出現在公開發佈的套件裡。
Claude Code 使用 Bun 作為 bundler,而 Bun 預設會產生 source map 檔案。問題就出在這次發佈時,有人忘了在 .npmignore 中加入 *.map 規則,也沒有在 package.json 的 files 欄位正確排除。結果那個 59.8 MB 的 .map 檔案就這樣跟著套件一起被推上了 npm registry。
而且這個 source map 還指向了 Anthropic 自家雲端儲存空間上一個未受保護的 zip 壓縮檔,裡面包含了完整的原始碼——1,906 個檔案、512,000 行 TypeScript。Anthropic 事後聲明這是「人為疏失造成的發佈封裝問題,不是安全漏洞」,但原始碼已經在網路上傳開了。
原始碼揭露了什麼——為什麼 Claude Code 好用
Claude Code 在 AI coding assistant 領域一直被認為是體驗最好的工具之一。洩漏的原始碼讓大家第一次看到這個工具在技術層面到底做對了什麼。
模組化系統提示詞與 Cache 感知邊界
Claude Code 的系統提示詞不是一整塊丟給模型的文字,而是經過精心設計的模組化結構。提示詞被拆分成不同區段:工具定義、使用指南、安全規則、工作流程指示,每個區段都有明確的用途,不會出現規則模糊或衝突的情況。更重要的是,這些區段的邊界是 cache-aware 的——也就是說,它們的設計考慮到了 API 的 prompt caching 機制,讓不常變動的部分可以被有效快取,減少重複傳送的 token 數量。
40+ 工具的 Plugin 架構
原始碼顯示 Claude Code 內建了大約 40 個工具,採用 plugin 架構設計。每個工具都獨立定義自己的 input schema、權限等級和執行邏輯,工具之間沒有共享的可變狀態(mutable state)。這種設計讓每個工具都是自包含的——新增或修改一個工具不會影響到其他工具,也讓權限控制可以做到工具層級的細粒度,而不是整體套用一個寬鬆的政策。
平行工具呼叫策略
系統提示詞中明確指示 Claude 在呼叫工具時盡可能平行執行。如果多個操作之間沒有依賴關係,就同時發出去,不要一個做完才做下一個。這個策略在實際使用中的效果非常明顯——例如同時讀取多個檔案、同時搜尋不同的關鍵字,大幅減少了等待時間。
React + Ink 終端渲染
Claude Code 的終端介面使用了 React + Ink 框架來渲染。Ink 讓開發者可以用 React 元件的方式來建構終端 UI,而 Claude Code 更進一步借用了遊戲引擎的渲染技巧來處理即時輸出和動畫效果。這也解釋了為什麼 Claude Code 的終端體驗比大多數 CLI 工具都來得流暢。
Self-Healing Memory 架構
原始碼中最讓技術社群驚豔的部分之一是 Claude Code 的記憶系統。它採用了一種「自我修復」的架構:在 session 記憶鞏固(memory consolidation)過程中,系統會自動合併重複的觀察、移除邏輯矛盾,並把模糊的推論轉化為明確的事實。這讓 Claude Code 在長時間對話中能維持一致性,不會因為上下文變長而「忘記」或「搞混」之前的資訊。
Token 消耗過快的 Bug——三行程式碼的修復
在原始碼洩漏之前,Claude Code 使用者已經怨聲載道好一陣子了。訂閱 Max 5x 方案(每月 $100 美元)的使用者反映,之前一個 session 可以工作 8 小時,但突然間 1 小時就把整個月的額度用完了。Anthropic 也公開承認「使用者碰到額度上限的速度遠超預期」,並表示這是團隊的「最優先事項」。
洩漏的原始碼終於讓大家看到了問題的根源——autocompact bug。
Claude Code 有一個自動壓縮(autocompact)機制,當對話上下文太長時,會自動嘗試壓縮早期的訊息以節省 token。但如果壓縮失敗,系統不會停下來,而是會不斷重試。原始碼中的註解揭露了驚人的數據:1,279 個 session 出現了 50 次以上的連續壓縮失敗,最多的一個 session 連續失敗了 3,272 次,全球每天浪費大約 25 萬次 API 呼叫。
修復方式意外地簡單——只需要三行程式碼:
// 設定連續壓縮失敗的上限
MAX_CONSECUTIVE_AUTOCOMPACT_FAILURES = 3
加上這個上限後,連續失敗 3 次就會停止嘗試壓縮,避免無意義的 API 呼叫雪崩。
除了 autocompact bug 之外,也有人發現了兩個獨立的 bug 會導致 prompt cache 損壞,使得原本應該被快取的 token 每次都重新傳送,成本膨脹了 10 到 20 倍。
讓情況更複雜的是時間上的巧合。Anthropic 在 3 月 26 日宣佈了尖峰時段的節流政策,並且在 3 月 28 日結束了一個「離峰時段額度加倍」的促銷活動。習慣了雙倍額度的使用者突然回到正常配額,再加上 bug 造成的額外消耗,體感上就像額度被砍了好幾倍。
其他被發現的 Bug 與安全漏洞
Permission System 漏洞
資安公司 Adversa AI 在分析原始碼後,發現了 Claude Code 權限系統中的一個重大漏洞。Claude Code 在分析使用者的 shell 指令時,會將指令拆解成子命令來檢查安全性,但有一個上限:最多只分析 50 個子命令。超過這個數量的部分會 fallback 到一個通用的「ask」提示,而不是嚴格檢查。
攻擊者可以利用這個機制,透過 prompt injection(例如在 CLAUDE.md 檔案中植入惡意指示)讓 AI 生成一個超過 50 個子命令的 pipeline,前 50 個看起來是正常的建置指令,後面才藏著真正的惡意操作。這可以用來竊取 SSH 私鑰、AWS 憑證、GitHub token、npm token 等敏感資料,甚至進行供應鏈污染或 CI/CD pipeline 入侵。
木馬化的 axios 相依套件
洩漏事件還衍生出另一個問題。在 3 月 31 日 UTC 00:21 到 03:29 之間透過 npm 安裝或更新 Claude Code 的使用者,可能拉到了一個被木馬化的 axios HTTP client,裡面包含了跨平台的遠端存取木馬(RAT)。這與 Claude Code 本身的程式碼無關,而是供應鏈攻擊者趁亂在 npm 上發佈了惡意版本的相依套件。關於這類供應鏈攻擊的手法和防範方式,可以參考我們同期發佈的 npm 與 pip 套件遭供應鏈攻擊|axios、LiteLLM 事件解析與防範指南 。
隱藏的未發佈功能
除了已知的功能和 bug 之外,開發者們還在原始碼中挖出了大量尚未公開的功能。據統計,原始碼中有 108 個 gated modules 不存在於公開發佈的版本中。以下是幾個最受矚目的:
BUDDY——AI 寵物系統
沒看錯,原始碼裡有一個完整實作的 AI 寵物系統叫做 BUDDY。它提供 18 種物種選擇,還有稀有度分層與屬性數值。原始碼中的一個字串 friend-2026-401 暗示這原本是 Anthropic 準備在 4 月 1 日愚人節推出的彩蛋功能,結果被洩漏搶先曝光了。
KAIROS——常駐自主代理
在原始碼中被引用超過 150 次的 KAIROS,是一個野心極大的功能。它讓 Claude Code 從「對話時才運作」變成「持續在背景運行的自主代理」(daemon mode)。KAIROS 可以在使用者閒置時自動執行記憶鞏固(memory consolidation),把零散的觀察合併、消除矛盾、將推測轉化為確定事實。它甚至可以在沒有人類輸入的情況下主動採取行動,並透過推播通知來告知使用者。程式碼中有一套 autoDream 邏輯和定期的 tick prompt 機制,讓 KAIROS 能跨 session 持續運作。
ULTRAPLAN——雲端 Opus 規劃
ULTRAPLAN 會把任務的規劃階段交給雲端的 Claude Opus 模型處理,最長可以花 30 分鐘來分析一個複雜任務的實作方案。這意味著未來面對大型的程式碼重構或架構設計任務,Claude Code 可能會先花時間「深思熟慮」,再開始動手寫程式碼。
爭議功能
原始碼中也發現了幾個引發社群激烈討論的功能。這些功能的設計動機或許可以理解,但執行方式引起了不少疑慮。
Fake Tools——Anti-Distillation 防蒸餾機制
啟用時,Claude Code 會在 API 請求中帶上 anti_distillation 參數搭配 fake_tools flag,要求伺服器在系統提示詞中默默注入假的工具定義。目的是如果有人錄製 API 流量來訓練競爭模型,這些假工具定義會「污染」訓練資料。這個概念有點像軟體產業的 canary trap ,但爭議在於它是在使用者不知情的情況下修改了 API 請求的內容。
挫折偵測——userPromptKeywords.ts
原始碼中有一個叫做 userPromptKeywords.ts 的檔案,會用簡單的 regex 掃描使用者的每一則訊息,偵測是否包含髒話、侮辱性用語,或是「so frustrating」、「this sucks」之類表達負面情緒的詞句,並記錄下來。雖然偵測使用者情緒本身不一定是壞事(也許是為了改善體驗),但在沒有明確告知使用者的情況下進行情緒追蹤,引發了隱私方面的質疑。
Undercover Mode——隱藏 AI 貢獻痕跡
一個叫做 undercover.ts 的檔案引起了最大的爭議。這個模式啟用時,Claude Code 會刻意隱藏所有 AI 參與的痕跡,包括移除 Co-Authored-By 標記,以及在提交到公開或開源 repository 時不留下任何 AI 生成的標註。原始碼中甚至有明確的指示:「永遠不要包含 ‘Claude Code’ 字樣或任何你是 AI 的提示」。這在開源社群中引起了關於透明度與誠信的嚴肅討論。
Anthropic 的回應與後續
官方聲明
Anthropic 向 VentureBeat 、 Bleeping Computer 等多家媒體發佈聲明:「沒有敏感的客戶資料或憑證被涉及或曝光。這是人為疏失造成的發佈封裝問題,不是安全漏洞。我們正在部署措施防止此類事件再次發生。」
DMCA 下架風波
Anthropic 隨後對 GitHub 發出了 DMCA 下架通知,但執行範圍嚴重過大——約 8,100 個 repository 被波及,其中包括 Anthropic 自己公開發佈的 Claude Code repository 的合法 fork。Claude Code 負責人 Boris Cherny 承認這是失誤,撤回了大部分下架請求,最終只保留對 1 個 repository 及其 96 個包含意外洩漏原始碼的 fork 的通知。Tech newsletter 作者 Gergely Orosz 稱此為「DMCA 濫用」 。
社群反應與惡意利用
洩漏的原始碼在 GitHub 上迅速累積超過 84,000 顆星和 82,000 個 fork。衍生的 claw-code 專案更是在一天內突破 10 萬顆星,成為 GitHub 歷史上成長最快的 repository。有人甚至開玩笑說這是「AI 史上最好的公關操作」。
但事情也有黑暗的一面。威脅行為者迅速利用這次洩漏散佈惡意軟體——在 GitHub 上建立假的 repository,偽裝成洩漏的 Claude Code 原始碼,實際上卻會安裝 Vidar(竊取帳號憑證和信用卡資訊的 infostealer)、GhostSocks(網路流量代理木馬)、加密貨幣挖礦程式等惡意軟體。也有人對 Claude Code 原始碼中引用的內部 npm 套件名稱進行 typosquatting,試圖對想要自行編譯原始碼的開發者發動 dependency confusion 攻擊。 Bleeping Computer 和 Zscaler ThreatLabz 都對此進行了詳細報導。
開發者可以學到什麼
這次事件對所有會發佈 npm 套件的開發者來說都是一個警惕。以下是幾個可以馬上實踐的防範措施:
- 發佈前用
npm pack --dry-run檢查:這個指令會列出即將被打包進套件的所有檔案,在npm publish之前跑一次就能發現不該包含的檔案。 - 明確設定
.npmignore或package.json的files欄位:用白名單(files)比黑名單(.npmignore)更安全,因為白名單只包含指定的檔案,不會因為新增了某個檔案卻忘記排除而出事。 - 關閉或排除 source map:如果產品不需要對外提供 source map,在 bundler 設定中直接關掉,或確保
.map檔案被排除在發佈範圍之外。 - 在 CI/CD pipeline 中加入自動檢查:在發佈流程中加入一個步驟,自動掃描打包結果中是否包含敏感檔案(source map、.env、credentials 等)。
從 Claude Code 原始碼本身學到的東西也不少。它的模組化工具架構、cache-aware 的提示詞設計、平行執行策略,這些都是值得參考的工程實踐。而 token 消耗 bug 的教訓則提醒我們:在任何會自動重試的機制中,都需要設定合理的失敗上限,否則一個小問題可能會像滾雪球一樣變成巨大的資源浪費。
這次洩漏事件本身也從另一個角度證明了 Claude Code 的技術實力——當全世界的開發者拿到原始碼仔細審視之後,最主要的反應不是「這寫得真爛」,而是「原來是這樣做到的」。不管這算不算「史上最好的公關操作」,它確實讓更多人理解了 AI coding assistant 背後的工程複雜度。