Anthropic 這次不小心外洩的原始碼,直接暴露了之前 Claude Code 裡不少有趣的設定,包括針對蒸餾情境注入假工具、隱藏 AI 版本、透過正則表達式偵測挫折感、可能存在的封號策略等。

在 Claude Code 原始碼裡有一個 ANTI_DISTILLATION_CC 標誌,啟用後 Claude Code 在向伺服器發送請求時會帶上 anti_distillation: ['fake_tools'],也就是告訴伺服器:
在系統提示詞裡偷偷插入一些「假的工具定義」。
這樣如果有人透過抓包去錄製 Claude Code 的 API,再拿這些資料訓練競品模型,訓練集裡就會混入被偽造的工具,從而「污染」蒸餾資料。
這看起來算是一種很有針對性的「投毒式防複製」,也很符合 Anthropic 的風格,另外還有第二種反蒸餾機制:
在某些場景下,伺服器會把工具呼叫之間的文本先做摘要處理,然後配合簽章返回,後續輪次再透過簽章還原,這樣抓包的人只能拿到摘要,而不是完整的中間文本。
也就是說 Anthropic 也有考量防止別人「記錄互動過程再二次利用」這種情境,當然這更多是一種態度的表達:別來惹我。
因為如果真的要繞過還是有方法,只是這些做法都表達出 Anthropic 的一個立場,就是我們不歡迎蒸餾與第三方。
這也是一個有趣的設定,Claude Code 原始碼裡有個叫 undercover.ts 的程式,功能是當 Claude Code 被用在「非內部倉庫」時,主動移除所有可能暴露 Anthropic 內部背景的資訊。
它會要求模型不要提及內部代號、內部 Slack 頻道、內部倉庫名稱,甚至不要提到「Claude Code」這個詞,最有趣的一句註解是:
「There is NO force-OFF. This guards against model codename leaks.」
這算是一種「單向偽裝」:可以強制開啟,但不能強制關閉。
在外部建置的情況下,相關邏輯甚至會變成不可逆的預設行為,所以如果 Anthropic 員工在開源專案裡用 Claude Code 寫 PR 或 commit,這套機制可能會讓外部人士完全看不出有 AI 參與。
所以,Anthropic 一直強調自己 100% AI 寫程式,但實際對外呈現的情況很可能是被屏蔽的。
另一個有趣的地方是,使用者挫敗感偵測居然是用正則表達式做的。
在 userPromptKeywords.ts 裡有一個很長的 regex,專門比對 wtf、ffs、shit、this sucks、so frustrating 等表達沮喪、憤怒、辱罵的使用者輸入。你能想像,一家做大型語言模型的公司,竟然用 regex 來做情緒識別。
<div><div><div></div><span>scss</span></div><div><div> <span>體驗AI程式助手</span></div><div> <span>程式碼解讀</span></div><div>複製程式碼</div></div></div>```
<span>/\<span>b</span>(wtf|wth|ffs|omfg|shit(ty|tiest)?|dumbass|horrible|awful|</span>
<span><span>piss</span>(ed|ing)? off|piece of (shit|crap|junk)|what the (fuck|hell)|</span>
<span>fucking? (broken|useless|terrible|awful|horrible)|fuck you|</span>
<span>screw (this|you)|so frustrating|this sucks|damn it)\<span>b</span>/</span>
不過這麼做在工程上也算合理,因為如果只是為了判斷使用者是不是在罵工具,正則的成本和速度都遠優於再跑一輪模型推理。
這也能體現 Claude Code 的工程取向:不是所有問題都交給大型語言模型(LLM),很多地方還是在傳統的規則系統內完成。
Native client(原生客戶端驗證)
-------------
在 `system.ts` 裡,有一個 Native client attestation(原生客戶端憑證)的技術點,API 請求裡會先放一個 `cch=00000` 的佔位符,然後在請求真正發出前,透過 Bun 的原生 HTTP 堆疊(用 Zig 寫的)把這五個零替換成一個計算出來的雜湊值:
> 伺服器會根據這個來驗證請求是不是來自真正的 Claude Code 二進位檔,而不是偽造客戶端。
其中佔位符長度固定,所以替換不會影響 `Content-Length`,另外這步發生在 JS 之下的執行層,因此一般 JS 層的 hook 與改包不容易看到。
這也算是一種「API 呼叫的 DRM」,結合過去發生過的 OpenCode 事件,Anthropic 在技術與協議上確實在抵制第三方客戶端。
auto-compact
-----------
auto-compact 失敗會導致大量 API 浪費,在 `autoCompact.ts` 的註解裡有根據統計的描述:
> 「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.」
也就是截至 2026-03-10,有 1,279 個會話在單次 session 出現了 50 次以上連續失敗,極端值甚至達到 3,272 次,導致全球每天大約浪費 25 萬次 API 呼叫。
Anthropic 的解法也很樸實:設定 `MAX_CONSECUTIVE_AUTOCOMPACT_FAILURES = 3`,也就是連續失敗 3 次後,在本次會話剩餘期間禁用 compaction。
KAIROS
------
這算是原始碼中最有趣的東西,多處有對 KAIROS 這個 feature-gated 模式的引用。根據 `main.tsx` 的相關路徑推測,這像是一個尚未發佈的自治型後台代理模式(agent)。
例如有個 `/dream` 技能用於「夜間記憶蒸餾」、每日累增式日誌、GitHub webhook 訂閱、後台 daemon worker,以及每 5 分鐘的 cron 刷新。
從實作上看,這像是一個持續運行、長期累積上下文、自動回應外部事件的 agent 系統,也就是 Anthropic 正在把 Claude Code 往「常駐、自治、持續運作的代理」方向推進。
渲染
--
在原始碼裡,還發現了 `buddy/companion.ts`,看起來像是個愚人節彩蛋,內部實作了類似電子寵物/Tamagotchi 的 companion 系統,每個使用者根據 user ID 用偽隨機演算法產生一個固定的 creature,還有稀有度、閃光機率和 RPG 屬性。
另一個是終端渲染層用了很多偏遊戲引擎式的最佳化:例如 `Int32Array` 字元池、位元遮罩樣式的 metadata、合併游標移動的 patch optimizer、自我淘汰的行寬快取等,原始碼裡甚至有註解表示能把 `stringWidth` 呼叫減少約 50 倍。
> 可以看出,Claude Code 表面看起來只是個命令列介面(CLI),但在終端 token 流式渲染這件事上做了相當多的效能優化。
安全
--
Claude Code 的 bash 安全檢查非常嚴格,在 `bashSecurity.ts` 裡有 23 個編號檢查,涵蓋 18 個被封鎖的 Zsh builtin、防止 `=curl` 這類 Zsh 等號擴充繞過、Unicode 零寬字元注入、IFS 空字節注入,以及一個在 HackerOne 審計中發現的 malformed token 繞過。
這種專門針對 Zsh 威脅模型的細粒度防禦,在同類工具中並不常見,而且 prompt cache 幾乎滲透到架構每個角落:
> 程式碼裡追蹤了 14 種 cache-break 向量,還有為了不讓模式切換擠壓快取而設計的「sticky latches」,甚至有函式名直接叫 `DANGEROUS_uncachedSystemPromptSection()`,也就是 Claude Code 的很多設計不是純粹追求程式優雅,而是真的圍繞提示詞快取命中率與 token 成本來取捨。
多代理協調邏輯
-------
與偵測情緒相反的是,在 `coordinatorMode.ts` 裡,協調多個 worker agent 的「演算法」本身不是傳統程式邏輯,而是一組系統提示詞規則,例如:
- 「不要敷衍地認可薄弱的工作」
- 「在指導後續工作前必須先理解發現,不能把理解也外包給另一個 worker」
這表示 Claude Code 的多代理協作具有相當強的 prompt-driven orchestration(以提示詞驅動的協排)特徵。換句話說,Claude Code 的一些核心調度行為不是被硬編碼成確定性流程,而是由另一層 LLM 指令來編排。
> 因此,提示詞也是程式碼的一部分。這一點值得關注,因為它反映出 Anthropic 把提示詞當成「控制平面」的程度已經很深。
封號
--
也有人根據 Claude Code 分析 Anthropic 的封號邏輯,總結了五個最可能的情況:
| 排名 | 原因 | 風險等級 | 說明 |
|---:|---|---:|---|
| 1 | 訂閱濫用/共享帳號 | 極高 | 裝置 ID 跨裝置關聯,檢測多裝置共用同一帳號 |
| 2 | 速率限制違規 | 高 | 超出 rateLimitTier 配額,短時間高頻呼叫 |
| 3 | 內容政策違規 | 高 | 訊息內容指紋 + anti-distillation 偵測 |
| 4 | 自動化濫用 | 中 | CI/CD 環境偵測 + 非互動模式識別 + 異常 token 消耗 |
| 5 | 使用非官方客戶端/篡改 | 中 | 指紋校驗失敗 + 版本歸因 header 異常 |
因為 Claude Code 作為客戶端,裡面上報了不少資料識別,例如 Device ID(永久標識)+ 環境指紋(40+ 維度)+ 行為遙測(640+ 事件類型),這些資料可以形成完整的使用者圖譜,例如最直接的 ID 有:
| 標識符 | 生成方式 | 存放位置 | 生命週期 |
|---|---|---|---|
| Device ID | `randomBytes(32).toString('hex')` | `~/.claude.json` | 永久,除非手動刪除 |
| Account UUID | OAuth 登入時由伺服器下發 | `~/.claude.json` | 綁定帳號 |
| Organization UUID | OAuth 登入時下發 | 同上 | 綁定組織 |
| Session ID | `randomUUID()` | 內存 | 每次會話生成,單次會話 |
| Email | OAuth 或 `git config user.email` | 同上 | 綁定身份 |
Device ID 是 256 位隨機值,首次運行時生成並永久儲存,是所有事件上報的核心標識,Anthropic 可透過它精確關聯同一裝置上的所有活動。
同時,Claude Code 啟動時會對使用者環境做大量列舉:
| 採集維度 | 資料來源 | 範例值 |
|---|---|---|
| 作業系統 | `process.platform` | darwin / linux / win32 |
| CPU 架構 | `process.arch` | x64 / arm64 |
| Node.js 版本 | `process.version` | v20.x.x |
| Linux 發行版 | `/etc/os-release` | ubuntu 22.04 |
| Linux 核心 | `os.release()` | 6.5.0-xxx |
| WSL 版本 | `/proc/version` 解析 | WSL2 |
最重要的是,會有一些關鍵事件類型,看起來與封號有高度關聯:
| 事件名 | 上報內容 | 與封號相關性 |
|---|---|---|
| `tengu_init` | 完整環境指紋、裝置資訊 | 高 — 環境異常偵測 |
| `tengu_api_success` | 模型名、token 用量、耗時、成本(美元)、TTFT | 極高 — 用量監控 |
| `tengu_api_error` | 錯誤類型、HTTP 狀態碼、重試次數 | 中 — 異常模式 |
| `tengu_tool_use_*` | 工具名、執行耗時、成功/失敗 | 中 — 行為模式 |
| `tengu_exit` | 會話時長、總 token 用量 | 高 — 會話級統計 |
| `tengu_oauth_*` | 登入 / 刷新 / 失敗事件 | 高 — 帳號安全 |
| `tengu_cancel` | 取消操作 | 低 |
| `tengu_auto_mode_*` | 自動模式使用 | 中 — 自動化偵測 |
所以 Claude Code 的資料蒐集體系大致可以總結為三層模型:
| 層級 | 內容 | 目的 |
|---|---|---|
| 身份層 | Device ID + Account UUID + Email + 指紋 | 精確追蹤使用者 |
| 環境層 | OS + 架構 + 終端 + CI + 容器 + 部署環境 | 建構裝置指紋 |
| 行為層 | 640+ 事件 + Token 用量 + 工具呼叫 + 進程資源分析 | 分析使用模式 |
這三層資料透過三條通道(1P API、Datadog、GrowthBook)即時上報,伺服器端擁有對每個使用者完整的使用畫像,可以從多個維度偵測異常並觸發封號決策。
因此最安全的做法是使用 Vertex 等第三方提供商(自動停用所有分析),或設定 `DISABLE_TELEMETRY=1` + 控制使用頻率 + 一人一號。
> 當然,這次原始碼外洩也可能促使 Anthropic 做出一些策略調整,但整體思路應該仍會類似。
最後
--
實際上這次對 Anthropic 最重要的不是程式碼外洩本身,而是功能旗標(feature flags)與產品方向幾乎被曝光,這對企業的影響其實更大。另方面 Anthropic 在 2025 年底收購了 Bun,而 Bun 在 2026 年也有一個 issue,內容是生產模式下 source map 仍被輸出:
> Bun issue #28001 — “Bun's frontend development server - Source map incorrectly served when in production”
這就很有意思了:是否可以合理懷疑,這次事故在某種程度上等於 Anthropic 自己的工具鏈 bug 洩露了自家旗艦產品的原始碼。雖然這種情況看起來不太可能,但一旦和 AI 混在一起就說不準;Openclaw 發布也可能會漏出終端與會話模組,所以 AI 出狀況其實可以理解。
連結
--
[alex000kim.com/posts/2026-…](https://link.juejin.cn?target=https%3A%2F%2Falex000kim.com%2Fposts%2F2026-03-31-claude-code-source-leak%2F)
---
原文出處:https://juejin.cn/post/7623591391198953535