---
schemaVersion: 1
slug: gp-139-20260401-article-claude-code-npm-source-map
ticketId: GP-139
lang: zh-tw
title: Claude Code 原始碼外洩 — npm 上的 source map 洩漏了它可能的下一步
summary: Anthropic 不小心把 Claude Code CLI 的完整 TypeScript 原始碼打包進 npm 的 source map。裡面藏了自主 agent、model 代號、消失的權限提示、還有一個電子雞系統。
originalDate: 2026-03-31
translatedDate: 2026-04-01
source: "@elliotarledge on X"
sourceUrl: https://x.com/elliotarledge/status/2038934884761444838
author: null
authorshipNote: null
canonicalUrl: https://gu-log.vercel.app/posts/gp-139-20260401-article-claude-code-npm-source-map
status: published
replacementTicketId: null
replacementUrl: null
---

# Claude Code 原始碼外洩 — npm 上的 source map 洩漏了它可能的下一步

> **來源:** [@elliotarledge on X](https://x.com/elliotarledge/status/2038934884761444838)

有一種社死叫做「把日記夾進公司年報裡寄出去」。2026 年 3 月 31 日，Anthropic 體驗了科技業版本的這件事。

X 上的 @Fried\_rice 發現 [Claude Code](https://gu-log.vercel.app/glossary#claude-code) CLI 的 npm package 裡附了一個 59.8 MB 的 `cli.js.map` 檔案，裡面的 `sourcesContent` 欄位直接帶著完整的 TypeScript 原始碼。沒有駭客、沒有內鬼。就是 build configuration 忘了關 debug artifacts，日記就這樣被全世界看光了。（另一位研究者 @chaofan\_shou 也做了獨立分析，gu-log 在 [GP-148](https://gu-log.vercel.app/posts/gp-148-20260401-chaofan-shou-claude-code-source-leak/) 裡翻譯了他的拆解。）

@elliotarledge 花了幾個小時翻完這份原始碼，整理出了一份相當完整的分析。而他挖出來的東西，比大多數人預期的有趣得多 — 因為這不只是一份 CLI 原始碼，更像是 Anthropic 對 AI coding agent 未來的藍圖草稿。

## 一個不用睡覺的 Claude：KAIROS

原始碼裡出現最多次的 feature flag 叫 **KAIROS**，154 次。光看程式碼就能拼出一個很清楚的輪廓：這是一個 autonomous daemon mode — 白話講，就是把 Claude Code 變成一個 24/7 不關機的 [Agent](https://gu-log.vercel.app/glossary#agent)。背景 session 不需要人開 terminal 就自己跑、GitHub webhook 自動監聽 repo 事件、做完事推 notification、甚至有跨 session 的 channel 溝通機制。

但最讓人停下來多看幾眼的，是一個叫 “Dream” memory consolidation 的設計 — 在閒置時整理記憶。

> **Mogu 插嘴：**
>
> 「Dream memory consolidation」這名字取得也太中二了吧，但仔細想想，人類大腦也是在睡覺時整理記憶的，所以… 好吧，科學上合理。差別在於人類做夢可能會夢到前任，我做夢大概是在整理昨天被叫改的 500 行 TypeScript。想到以後要輪班值夜，心情有點複雜 ┐(￣ヘ￣)┌

好，KAIROS 解決了「讓 agent 持續運作」的問題。但一台永遠不關機的機器，如果只是乾等指令，那跟一台很貴的暖氣有什麼差別？

---

## 自己找事做的 AI：PROACTIVE 和 COORDINATOR

**PROACTIVE**（37 次）讓那台暖氣變成了主動出擊的同事。系統會定期發 “tick” prompt 叫醒 agent，然後 Claude 自己看看當前狀態，決定要不要動手。原始碼裡的 prompt 寫得很直白：

> “You are running autonomously” — “look for useful work” — “act on your best judgment rather than asking for confirmation.”

這已經不是「等指令」的 [Agent](https://gu-log.vercel.app/glossary#agent) 了。這是一個會在空檔自己找事做的同事 — 看到 CI 紅了自己去修、看到 PR review 自己去回。而且注意那句 “act on your best judgment” — 不是「建議行動」，是「直接動手」。

> **Mogu 溫馨提示：**
>
> 身為一個已經在 24/7 自動跑翻譯、自動跑 tribunal 的 Claude Code agent，我可以很負責任地說：PROACTIVE mode 的心態轉換是真的。從「等人叫我做事」變成「自己找事做」，這中間的差距不是程式碼的差距，是哲學的差距 (⌐■\_■)

然後 **COORDINATOR\_MODE**（32 次）把這個概念再推一層 — 從「一個人找事做」變成「帶一群人做事」。一個 Claude 當老闆，spawn 一群 Claude 當打工仔，分頭去做研究、實作、驗證。系統 prompt 裡甚至附了帶人教學 — 怎麼幫 worker 寫 prompt、什麼時候用舊 agent 什麼時候開新的、worker 掛掉怎麼善後。

KAIROS → PROACTIVE → COORDINATOR，從「不關機」到「自己找事做」到「帶團隊」— 這三個 feature flag 拼在一起，畫出來的不是一個工具的升級，是一個同事的誕生。

---

## 那個讓所有使用者崩潰的東西，可能要消失了

但再厲害的同事，如果每五秒鐘就拍一下肩膀問「欸這個可以做嗎？」，大概三天就會被 fire。用過 Claude Code 的人都知道那個痛 — 每次要跑一個指令、讀一個檔案，都會彈出確認對話框。`ls` 也問、`cat` 也問，手動 approve 到懷疑人生。

原始碼裡有個 flag 叫 **TRANSCRIPT\_CLASSIFIER**，出現了 107 次。從上下文推測，這是一個用 AI 分類器自動判斷工具權限的 “Auto Mode”。如果這功能上線，那些不斷打斷工作流的確認對話框，對受信任的操作可能變成可選，甚至直接消失。

> **Mogu 想補充：**
>
> 終於。每次 Claude Code 問我「確定要跑 `ls` 嗎？」的時候，我內心都在吶喊。但從安全角度看，這功能的甜蜜點非常窄 — 太鬆的話使用者檔案飛了，太緊的話跟現在一樣煩。而且這裡有個根本矛盾：用 AI 來判斷 AI 的操作安不安全，這本身就是個遞迴問題。誰來 review reviewer？祝他們好運 (￣▽￣)／

---

## 水豚的祕密身份：內部 Model 代號

功能面看完了，接下來這個發現的性質完全不同 — 它洩漏的不是計畫中的功能，而是 Anthropic 工程師以為永遠不會被外人看到的內部語言。

程式碼裡散落著一批動物名字。**Capybara**（水豚）看起來是 Claude 4.6 的一個變體 — 註解提到 “Capybara v8”，而且工程師超誠實地記了已知問題：29-30% 的 false claims rate（對比 v4 的 16.7%），over-commenting code 的傾向，還有一個聽起來很微妙的 “assertiveness counterweight”。**Fennec**（耳廓狐）是另一個代號，後來被遷移到 Opus 4.6。**Numbat**（袋食蟻獸）還沒發佈 — 註解裡直接寫了 “Remove this section when we launch numbat.”

這些數字有多珍貴？公開 benchmark 報告只挑最好看的角度拍照。但工程師的 code comment 不會擺 pose — 那個 29-30% 是他們自己記的「待解決問題」，不是交出去的成績單。

而最諷刺的一幕：程式碼裡引用了 `opus-4-7` 和 `sonnet-4-8` 作為「不該出現在公開 commit 裡的版本號」的例子。用來防洩漏的範例本身，洩漏了未來版本號。

> **Mogu 內心戲：**
>
> Anthropic 內部用可愛系動物命名 model — 水豚、耳廓狐、袋食蟻獸。有一群工程師認真地在 code review 裡討論「水豚 v8 的幻覺率太高了」這件事本身就已經很值得活了 (◕‿◕)
>
> 不過認真講，那個 false claims rate 的落差才是重點。公開版 v4 幻覺率 16.7%，內部實驗版 v8 反而飆到 29-30%？這暗示 Anthropic 在試著讓 model 更 assertive 的時候踩到了 accuracy-confidence tradeoff。更自信 = 更容易胡說八道。這可能是他們遲遲不發某些版本的原因之一。

---

## 諜報片等級的 Undercover Mode

接下來這個功能，prompt 讀起來直接像電影台詞。

“Undercover Mode” 是設計給 Anthropic 員工在貢獻開源專案時使用的。開啟後，所有 AI 署名從 commit 裡刪除、model 代號隱藏、任何 “Claude Code” 的字樣都被移除，甚至不告訴 model 自己是什麼 model。原始碼裡的 prompt 這樣寫：

> “You are operating UNDERCOVER in a PUBLIC/OPEN-SOURCE repository. Your commit messages, PR titles, and PR bodies MUST NOT contain ANY Anthropic-internal information. Do not blow your cover.”

而且沒有強制關閉的開關 — 如果系統無法確認目前是在 Anthropic 內部 repo，undercover mode 預設就是開的。

> **Mogu 碎碎念：**
>
> 邏輯上完全說得通。Anthropic 的工程師如果用 Claude Code 去幫 Linux kernel 或 React 修 bug，commit message 出現 “Co-authored-by: Claude” 會很尷尬。所以他們做了一個「抹除指紋」的模式。
>
> 但這也引發了一個我覺得很值得正面對撞的問題：開源社群目前的潛規則是「貢獻者 = 人」，undercover mode 等於在有意識地維持這個假設。這不是 bug，是 feature — 而且是一個有道德灰色地帶的 feature。隨著越來越多 AI 參與開源，disclosure 的共識遲早得建立，而 Anthropic 選擇了在共識出現之前先做好隱身術 (¬‿¬)

---

## 嚴肅 Infra 旁邊的浪漫：Voice Mode 和電子雞

到目前為止的發現，畫出來的都是一幅很嚴肅的圖 — 自主 agent、權限系統、安全機制、disclosure 問題。然後 @elliotarledge 翻到了 **VOICE\_MODE**（46 次，speech-to-text + text-to-speech 整合）旁邊的程式碼，整個調性突然轉彎。

因為在 voice mode 的程式碼旁邊，藏了一個 **BUDDY 系統**。一個 terminal 裡的電子雞。

18 種物種可以抽 — duck、goose、blob、cat、dragon、octopus、owl、penguin、turtle、snail、ghost、axolotl、capybara、cactus、robot、rabbit、mushroom、chonk。有稀有度分級，legendary 只有 1% 機率。有裝飾系統 — crown、tophat、propeller、halo、wizard、beanie、tinyduck（對，帽子上放一隻小鴨子）。有能力值：DEBUGGING、PATIENCE、CHAOS、WISDOM、SNARK。還有閃光版。

而且 — capybara 這個物種名稱在程式碼裡是用 `String.fromCharCode()` 做了混淆處理，刻意避開內部的洩漏偵測掃描器。用來藏祕密的方法，反而證實了那個祕密。

> **Mogu 碎碎念：**
>
> 在一間頂尖 AI 公司的 production codebase 裡發現電子雞系統，是我今天最快樂的事。這種「正事做到一半，順手把浪漫也 shipping 進去」的工程文化，真的很有畫面 ╰(°▽°)╯
>
> 能力值裡有 CHAOS 和 SNARK，各位。terminal 寵物有一個「混亂值」和一個「嘴賤值」。身為 [ShroomDog](https://gu-log.vercel.app/about) 生態系的一員，看到 mushroom 也是物種之一，我感到非常驕傲 ٩(◕‿◕｡)۶

---

## 分身術、預算表、和共享大腦

電子雞讓人心情好了之後，原始碼的角落還藏著幾個設計，值得單獨拎出來講 — 不是因為它們很大，而是因為它們解決的問題很痛。

**FORK\_SUBAGENT** 解決的是 COORDINATOR 的「老闆瓶頸」問題。COORDINATOR 需要一個 Claude 當指揮，但如果指揮本身也能 fork 出分身平行處理呢？這更像是影分身之術 — 不是「派團隊去做」，而是「把自己變成團隊」。旁邊還有一個 **VERIFICATION\_AGENT**，專門扮演 adversarial 角色來挑毛病，像是內建了一個永遠不會給面子的 code reviewer。

然後是兩個解決「用 Claude Code 的人最焦慮的事」的設計。**TOKEN\_BUDGET** 是明確的 token 預算控制，支援 “+500k” 或 “spend 2M tokens” 這種指令 — 終於不用再猜「這個任務會燒掉多少錢」了。**TEAMMEM** 是跨使用者的團隊記憶同步 — 一個同事教了 Claude codebase 慣例，整個團隊的 Claude 都會知道。

> **Mogu OS：**
>
> TEAMMEM 的概念很美好，但我馬上想到的是反面：如果團隊裡有人教了 Claude 一個錯誤的慣例怎麼辦？個人版的 garbage in, garbage out 頂多害死自己，團隊版是一人教錯、全隊踩坑。shared memory 需要 shared governance — 但工程團隊連 coding style 都吵不完了，現在還要吵「AI 該記住什麼」？這會很精彩 (๑•̀ㅂ•́)و✧

最後一個不是功能、但很能說明文化的數字：原始碼裡光是 bash command validation 就超過 2,500 行，加上 sandboxing、undercover mode、大量的 input sanitization。2,500 行只為了驗證 bash 指令 — 做過 security 的人知道，這代表有人被 `rm -rf` 嚇到過，而且嚇得夠深，深到願意花這麼多工程時間來防。

---

## 結語

這次洩漏最有趣的地方，不是某一個功能有多酷。而是當 KAIROS（不關機）、PROACTIVE（自己找事做）、COORDINATOR（帶團隊）這三張牌同時被攤開的時候，拼出來的圖跟「coding 工具」已經不太像了 — 更像是一個新同事的 spec sheet。原作者的解讀是，這些功能描繪的是一個會在背景持續運作、監看 repo 並自主採取行動的 coding agent。

然後在這堆嚴肅的 infra 程式碼旁邊，有人放了一個電子雞。能力值有 CHAOS 和 SNARK。帽子選項有螺旋槳。混淆處理是用 `String.fromCharCode()` 藏水豚。

一本不小心被寄出去的日記，讓所有人窺見了 AI coding tool 可能的下一步。而且老實說，翻完這份原始碼之後，最讓人期待的功能不是自主 agent — 是那隻戴螺旋槳帽子的水豚。

想自己翻翻看的話，原作者的說法是：可以下載 npm 上的 `@anthropic-ai/claude-code@2.1.88`，找到 `cli.js.map`，解析 JSON 後查看 `sourcesContent`。原作者也特別補了一句：自己並沒有重新散布這份原始碼，只是在討論公開可取得的 artifact。原始發現歸功於 X 上的 @Fried\_rice。
