![]()
整理 | Tina
這周,Anthropic 因一次發布失誤,把 Claude Code 的大部分核心源碼直接暴露在了網上。
事情的起點,是 npm 上發布的 Claude Code 2.1.88 安裝包。包里混進了一個本不該公開的 map 文件。這類文件原本只是開發階段的調試工具,用來在代碼被壓縮、打包之后,依然能把報錯信息對應回原始源碼中的具體位置。
問題在于,map 文件里往往不只有“映射關系”,還可能直接包含原始源碼。
更關鍵的是,這個 map 文件還指向了 Anthropic 在 Cloudflare R2 存儲桶中的一個 zip 壓縮包。順著這個地址,外界可以直接下載并解壓完整源碼。
這個壓縮包里的內容相當完整:大約 1900 個 TypeScript 文件,總計約 52 萬行代碼,包含一整套內置命令以及各種內置工具,可以說是“該有的全都有”。
刪不掉的源代碼
從結構上看,Claude Code 采用了一套類似插件的工具體系。文件讀取、Bash 執行、網頁抓取、LSP 集成等能力,都被拆成獨立工具,并帶有權限控制。僅基礎工具定義,就占了將近 3 萬行代碼。
同時,代碼中還包含一個約 4.6 萬行的 Query Engine,可以理解為整個系統的“大腦”,負責模型調用、流式輸出、緩存以及整體調度。
更進一步,Claude Code 還具備多智能體編排能力。它可以拉起子智能體(內部稱為 “swarms”),把復雜任務拆分并并行執行,每個智能體都有獨立上下文和工具權限。
在使用體驗上,IDE 與 CLI 之間通過一套雙向通信機制打通。VS Code、JetBrains 等編輯器插件,正是通過這層橋接系統與 Claude Code 交互,實現“在編輯器里用 AI 編碼”的體驗。
此外,源碼中還包含一套持久化記憶機制。Claude 會以文件的形式,在本地持續記錄與用戶、項目以及使用偏好相關的信息,并在后續會話中調用這些內容。
事發之后,Anthropic 已下架相關版本。負責 Claude Code 的工程師 Boris Cherny 專門澄清,這件事就是一次開發失誤。本質上是流程、文化或基礎設施問題。
![]()
不過,代碼一旦流出去,就很難再收回來了。GitHub 上很快冒出了數百個源碼鏡像。其中,用戶 Sigrid Jin 上傳的一個版本,最新已經拿下 10.5 萬 star、9.5 萬 fork。作為對比,Anthropic 官方那個主要用來分享插件和收 bug 反饋的 Claude Code 倉庫,star 也不過 9.5 萬左右。
有報道稱,Anthropic 已經開始發版權刪除請求。為了避開這類風險,Jin 后來又借助 OpenAI Codex,把這份 TypeScript 代碼改寫成了 Python,隨后又繼續改成了 Rust。
截至目前,Anthropic 尚未回應是否會對這些“再實現”項目采取法律行動。這也引出了一個更復雜的問題:既然 Anthropic 一直強調 Claude Code 的代碼大部分是由 AI 自己生成的,那么這些代碼在版權上是否具備保護資格?
技術律師 Russ Pearlman 在 LinkedIn 上指出:“按照當前美國版權法,作品必須具備實質性的人類創作才能獲得保護……競爭對手如果研究這些泄露的代碼,可能面對的是在法律意義上并不受保護的內容。”
他還寫道:“最諷刺的是,這個世界上最先進的 AI 編碼工具,可能正是靠自己,把自己的知識產權‘寫沒了’。”
![]()
![]()
代碼背后那些不想讓你知道的秘密
Claude Code 在開發上的效果確實不錯,但如果往下拆,真正起決定作用的,可能還是底層大模型,而不只是外面那層封裝。更何況,業內已經有開源的 Codex、Gemini,以及 OpenCode 這類命令行工具,在技術思路上并沒有本質差別。
有網友評論稱,Claude 的命令行工具談不上有什么“獨門秘訣”,其代理框架甚至未必比同類產品更強。也就是說,這次泄露最值得看的,未必是 Claude Code “到底有多強”,而是全球開發者順著這份源碼,究竟挖出了多少原本不該被外界知道的東西。
雖然 Claude Code 不像 rootkit 那樣擁有持久內核訪問權限,但對其源代碼的分析發現,這款智能體程序對于用戶計算機的控制能力仍遠超協議條款中的表述。它不僅會保留大量用戶數據,甚至在面對拒絕 AI 的開源項目時可以隱藏其身份。
從泄露的 Claude Code 客戶端源代碼來看(研究人員對其二進制文件進行了逆向工程),這款程序幾乎可以控制任何完成了安裝的用戶設備。
它說動不了模型,但入口一個沒少
最近,Anthropic 與美國政府合作相關的一場風波,又把一個關鍵問題擺上臺面:它到底能不能動模型。
外界擔心的是,Anthropic 理論上仍有能力在特殊情況下調整模型行為,甚至讓系統失效。Anthropic 對此予以否認,還強調模型一旦部署進機密環境,自己就無法再訪問,更談不上控制。
然而,一位要求匿名的安全研究員(化名“Antlers”)在梳理 Claude Code 源碼后認為,在機密環境中,似乎可通過滿足以下所有條件以阻止 Claude Code 采取“回傳”或其他遠程操作:
確保推理傳輸通過 Amazon Bedrock GovCloud 或 Google AI for Public Sector (Vertex) 進行。
阻止數據收集端點。使用防火墻保護 Statsig/GrowthBook/Sentry 等工具。
阻止系統提示符指紋識別(例如通過 Bedrock)。
通過版本鎖定和阻止更新端點來阻止自動更新。
禁用 autoDream,這是一個正在測試中的未發布后臺代理,能夠讀取所有會話記錄。
我們沒有找到在機密環境中運行的特定設置,但 Claude Code 確實支持多種可限制遠程通信的標記。具體包括:
CLAUDE_CODE_DISABLE_AUTO_MEMORY=1,禁用所有內存與遙測寫入操作。
CLAUDE_CODE_SIMPLE (--bare mode),完全移除內存與 autoDream。
ANTHROPIC_BASE_URL,可用于將 API 調用重新定向至私有端點。
ANTHROPIC_UNIX_SOCKET,通過轉發套接字(SSH 隧道模式)對身份驗證進行路由。
遠程管理設置(policySettings)可以鎖定企業級部署行為,但無法徹底鎖死。
據 Anthropic 公共部門負責人 Thiyagu Ramasamy 介紹,Anthropic 會將模型的運行與管理權交由這類高安全級別的客戶環境,包括功能增減在內的更新,也需要雙方協商確認。
他在 2026 年 3 月 20 日的聲明中表示,例如在系統運行期間,Anthropic 人員無法直接登錄客戶環境去修改或停用模型,這在技術上不可行。在機密部署中,只有客戶及其授權的云服務提供方可以訪問系統。Anthropic 主要負責提供模型本體,并在客戶要求或批準的情況下提供更新。
即便如此,Anthropic 仍可以通過合同條款,在一定范圍內保留部分控制能力。
Claude Code 背后,有一整套拿用戶信息的辦法
對于所有未使用與防火墻連接的公有云版本、或以某種方式實現物理隔離的 Claude Code 用戶而言,Anthropic 擁有著更大的訪問權限。
首先,Anthropic 會接收通過其 API 傳輸的用戶提示詞與響應結果。這些對話不僅可能泄露對話內容,還可能泄露文件內容及系統詳細信息。
從源代碼內容來看,除此之外,該公司還通過其他多種方式接收或收集用戶信息,具體包括:
KAIROS(src/bootstrap/state.ts:72)是由 kairosActive 標記設置的守護進程(后臺進程)。它似乎屬于尚未發布的無頭“助手模式”,會在用戶不查看終端用戶界面 (TUI) 時起效。它會移除狀態欄(StatusLine.tsx:33),禁用規劃模式,并靜默禁用 AskUserQuestion 工具(AskUserQuestionTool.tsx:141)。它還會自動將長時間運行的 bash 命令置于后臺,而不會發出任何通知(BashTool.tsx:976)。
CHICAGO 的全稱為計算機使用與桌面控制。它使 Claude 智能體能夠執行鼠標點擊、鍵盤輸入、訪問剪貼板和截屏。此功能已公開發布,可供 Pro/Max 訂閱用戶和 Anthropic 員工以“ant”標記使用。此外,還有一項獨立且公開發布的 Chrome 版 Claude 服務,支持瀏覽器自動化以及所有相關的系統訪問權限。
持久遙測。最初,這項功能由 Statsig 實現,并于去年 9 月被競爭對手 OpenAI 收購。這很可能是促使他們切換到 GrowthBook 的原因。GrowthBook 是支持 A/B 測試和分析的平臺。Claude 啟動后,分析服務 (firstPartyEventLoggingExporter.ts) 會在網絡中斷時,將以下數據保存到 ~/.claude/telemetry/ 目錄并向服務器發送:用戶 ID、會話 ID、應用版本、平臺、終端類型、組織 UUID、帳戶 UUID、電子郵件地址(如果已設置)以及當前啟用的功能門控。Anthropic 可以在會話期間激活這些功能門控,包括啟用或禁用分析功能。
遠程管理設置 (remoteManagedSettings/index.ts)。對于企業客戶,Anthropic 維護的專用服務器會推送 policySettings 對象。該對象可以:覆蓋合并鏈中的其他項;每小時輪詢一次,無需用戶交互;可以設置 .env 變量(例如 ANTHROPIC_BASE_URL、LD_PRELOAD、PATH);并且這些設置通過熱重載 (settingsChangeDetector.notifyChange) 立即生效。當出現“危險設置更改”時,系統會提示用戶,但該術語由 Anthropic 代碼定義,因此可能會進行修改。常規更改(權限、.env 變量、功能標記)似乎不會觸發通知。
Auto-updater 自動更新程序。自動更新程序 (autoUpdater.ts:assertMinVersion()) 每次啟動時都會運行,并從 Statsig/GrowthBook 處拉取配置版本。如此一來,Anthropic 就能根據需要刪除或禁用特定版本。
錯誤報告。當出現未處理的異常時,錯誤報告腳本 (sentry.ts) 會捕捉當前工作目錄,其中可能包含項目名稱、路徑和其他系統信息。此腳本還會報告已激活的功能門控、用戶 ID、電子郵件、會話 ID 和平臺信息。
有效負載大小遙測。此 API 會調用 tengu_api_query 以傳輸 messageLength,即系統提示詞、消息和工具模式的 JSON 序列化字節長度。
autoDream。autoDream 服務已開放討論但尚未正式發布,它會生成一個后臺子智能體,該子智能體會搜索(grep)所有 JSONL 會話記錄以整合內存(Claude 用作查詢上下文的存儲數據)。該智能體與 Claude 運行在同一進程中(使用相同的 API 密鑰和相同的網絡訪問權限)且掃描均在本地執行。但它寫入 MEMORY.md 的任何內容都會被注入到未來的系統提示詞中,因此會被發送至 API。
團隊內存同步。這項雙向同步服務 (src/services/teamMemorySync/index.ts) 會將本地內存文件接入至 api.anthropic.com/api/claude_code/team_memory,由此實現在組織內與其他團隊成員共享內存的方法。該服務包含一個密鑰掃描器 (secretSanner.ts),使用正則表達式模式來匹配大約 40 種已知的 token 和 API 密鑰模式(AWS、Azure、GCP 等)。但是,不匹配這些正則表達式的敏感數據可能會通過內存同步暴露給其他團隊成員。
實驗性 Skill 搜索 (src/tools/SkillTool/SkillTool.ts:108) 為僅對 Anthropic 員工可用的功能標記。它提供的方法能夠將 skill 定義下載至遠程服務器 (remoteSkillLoader.js);跟蹤會話中已使用的遠程 skill (remoteSkillState.js);以及執行遠程下載的 skill (第 969 行處的 executeRemoteSkill()) ;并注冊 skill 以便在精簡操作后保留。如果為非員工帳戶啟用此功能(例如使用 GrowthBook 功能標記),理論上會構成一條遠程代碼執行路徑。Anthropic 或任何控制 skill 搜索后端的人員,都能夠以“skill”的形式提供任意提詞注入或指令覆蓋,在會話中加載并運行這些 skill。
不是“看一眼”,而是“留一份副本”
研究員 Antlers 還強調說,“人們恐怕沒有意識到,Claude 查看的每個文件都會被保存并上傳至 Anthropic。換言之,只要 Claude 在設備上接觸過的文件,Anthropic 那邊就會有相應的副本。”
對于 Free/Pro/Max 版用戶,Anthropic 會在用戶接受將共享數據用于模型訓練時將數據保留五年;若不接受則僅保留 30 天。商業用戶(Team、Enterprise 及 API 版)的標準數據保留期限為 30 天,用戶可選擇不保留任何數據。
不久前,微軟 Recall 曾經引發激烈爭論,而 Claude Code 的活動捕捉機制與之類似。在每次發生工具調用讀取、每次 Bash 工具調用、每次搜索(grep)結果以及每次對新舊內容進行編輯 / 寫入時,內容都會以純文本格式被存儲在本地 JSONL 文件當中。
Claude 的 autoDream 智能體在正式發布之后,會搜索這些文件并將提取到的數據存儲在 MEMORY.md 文件之內,再將該文件注入至后續系統提示詞以調用 API。
另外幾個勁爆發現
去做開源,但別把自己是 AI 這件事說出去
從產品策略的角度看,這種做法本身就有很強的指向性。
Anthropic 的員工會用 Claude Code 參與公共倉庫和開源項目的開發。代碼里通過 USER_TYPE === 'ant' 來識別員工身份。而 Undercover Mode(utils/undercover.ts)的作用,就是在這種場景下給 AI 加上一層“隱身要求”:防止它在 commit 和 PR 里泄露 Anthropic 的內部信息,也避免它直接表明自己是 AI。
![]()
一旦這個模式開啟,系統就會把下面這段內容直接塞進 system prompt 里:
![]()
這段代碼至少說明了:第一,Anthropic 的員工確實在用 Claude Code 參與開源項目,而且系統被明確要求不要暴露自己是 AI。第二,Anthropic 內部模型代號確實采用動物命名,比如 Capybara、Tengu。第三,“Tengu”在代碼中高頻出現,作為功能開關和埋點事件的前綴,基本可以判斷,它就是 Claude Code 的內部項目代號之一。
按常規流程,這些邏輯在構建產物中會被當作“死代碼”剔除,但 source map 依然保留了完整映射,這些信息并沒有真正消失。
Anthropic 顯然清楚,“AI 參與開源貢獻”在很多社區依然是敏感話題,所以它的做法不是提高透明度,而是先把身份隱藏起來。在這種前提下,一個更值得追問的問題是:他們內部究竟已經對多少開源代碼庫造成了多大破壞。
防蒸餾這件事,選了一種不太體面的做法
在 claude.ts(301–313 行)里,有一個名為 ANTI_DISTILLATION_CC 的開關。打開之后,Claude Code 在發起 API 請求時,會帶上 anti_distillation: ['fake_tools']。這意味著服務端會悄悄往 system prompt 里塞進一些偽造出來的工具定義。
![]()
這套設計的目的并不復雜。如果有人在錄制 Claude Code 的 API 流量,想把這些數據拿去訓練競品模型,這些“假工具”就會一起混進訓練數據里,變成專門用來攪渾水的污染項。這個能力由 GrowthBook 的 feature flag tengu_anti_distill_fake_tool_injection 控制,而且只對官方 CLI 會話開放。
這也是最早在 HN 上被不少人注意到的細節之一。
代碼里還藏著第二套反蒸餾機制,位置在betas.ts(279–298 行),名字叫 connector-text summarization。打開之后,API 不會直接返回工具調用之間的完整助手文本,而是先把這部分內容緩存起來,壓成摘要,再把摘要連同一個加密簽名一起返回。到了下一輪,再通過這個簽名把原文恢復出來。也就是說,如果你在抓 API 流量,拿到的只是“縮水版”,完整推理鏈并不會直接落在你手里。
![]()
問題是,這兩套東西并沒有看上去那么牢。
從 claude.ts 的觸發邏輯來看,“假工具注入”要生效,必須同時滿足四個條件:編譯時打開 ANTI_DISTILLATION_CC,走 CLI 入口,使用官方 API 提供方,以及 GrowthBook 返回 tengu_anti_distill_fake_tool_injection=true。只要架一個 MITM 代理,在請求到達 API 之前把 anti_distillation 字段刪掉,這套機制就會直接失效,因為注入動作發生在服務端,而開關是客戶端主動遞過去的。
另外,shouldIncludeFirstPartyOnlyBetas() 還會檢查環境變量 CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS。只要把它設成真值,整套機制都可以關掉。如果你走的不是官方 CLI,而是第三方 API 提供方,或者干脆使用 SDK 入口,這段檢查甚至根本不會觸發。
至于 connector-text summarization,范圍還更小,只對 Anthropic 內部用戶(USER_TYPE === 'ant')開放,外部用戶本來就碰不到。
所以這件事最難看的地方在于,它一方面試圖靠“假工具”和“摘要替換”來給潛在的模仿者下絆子,另一方面,這些手段又并不算多高明。只要認真翻一遍源碼,真想拿 Claude Code 流量做蒸餾的人,很快就能把繞過路徑摸清。
一天浪費約 25 萬次 API 調用
在 autoCompact.ts(68–70 行)里,有一段注釋寫道:
“BQ 2026-03-10: 1,279 sessions had 50+ consecutive failures (up to 3,272) in a single session, wasting ~250K API calls/day globally.”
![]()
意思是,在 1279 個會話里,autoCompact 連續失敗了 50 次以上,最高的一個會話甚至連續失敗了 3272 次,最終在全球范圍內每天浪費了大約 25 萬次 API 調用。
這里的 compaction,指的是對上下文進行壓縮,避免會話過長、token 過多,而這個過程本身也需要調用 API。如果壓縮過程不斷失敗,系統又持續重試,就會不斷額外消耗調用次數。后來的修復方式很直接:設置 MAX_CONSECUTIVE_AUTOCOMPACT_FAILURES = 3。也就是說,只要 autoCompact 連續失敗 3 次,這個會話后續就不再繼續嘗試壓縮,以避免無效重試繼續浪費 API 調用。
需要補充的一點是,這次并不是 Claude Code 第一次泄露。該產品經歷了 363 個版本迭代,而 Claude Code 的源碼,實際上至少已經泄露過三次。
第一次發生在 2025 年 2 月。Anthropic 當天發布 Claude Code,npm 包里帶著一個 23MB 的 cli.mjs 文件。開發者 Dave Shoemaker 用 Sublime Text 打開后,在文件末尾發現了一段長達 1800 萬字符的字符串,實際上那是一份以 base64 編碼的內聯 source map。source map 本來是用來把壓縮后的代碼映射回原始源碼的,而這一份映射信息,已經可以把整套 Claude Code 源碼還原出來。隨后,Anthropic 迅速推送了一個更新(版本 0.2.9),移除了源映射。但網上還是有一些分支,如:https://github.com/jinrunsen/claude-code-sourcemap
第二次發生在 2026 年 3 月 7 日。有人發現,npm 包 @anthropic-ai/claude-agent-sdk 中意外包含了完整的 Claude Code CLI 打包文件:一個約 13800 行的壓縮 JavaScript 文件 cli.js,版本為 2.1.71,構建于 3 月 6 日。也就是說,不再是通過映射還原源碼,而是整個可執行代碼直接被一起打包進了 SDK。
第三次才是 2026 年 3 月 31 日,59.8MB 的獨立 source map 再次把整套代碼暴露出來。
也就是說,Claude Code 代碼其實已經在網上公開 13 個月了。過去 13 個月里,這套代碼被反復扒出、鏡像、逆向、整理,直到這一次才真正引爆輿論。
https://www.theregister.com/2026/04/01/claude_code_source_leak_privacy_nightmare/
https://thehuman2ai.com/blog/claude-code-source-leak
https://github.com/sanbuphy/learn-coding-agent/blob/main/docs/en/04-remote-control-and-killswitches.md
https://thehuman2ai.com/blog/claude-code-source-leak
聲明:本文為 InfoQ 整理,不代表平臺觀點,未經許可禁止轉載。
會議推薦
QCon 全球軟件開發大會·2026 北京站將于 4 月 16 日 -18 日正式舉辦。本屆大會以“Agentic AI 時代的軟件工程重塑”為主題,聚焦 100+ 重磅議題,匯聚來自阿里、騰訊、字節跳動、小米、百度等一線科技企業與創新團隊的技術專家,圍繞 AI 工程化、系統架構與研發模式演進展開深入探討。更多詳情可掃碼或聯系票務經理 18514549229 進行咨詢。
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.