Claude Code 原始碼洩露後,我們能學到什麼:系統提示詞、權限分級和記憶系統
這兩天關於 Claude Code 的討論,已經有點從“技術新聞”變成“技術圍觀現場”了。起因大家大概都知道了:Anthropic 的公開 npm 釋出包裡誤帶了除錯相關檔案,結果內部原始碼被人順著 source map 很快扒了出來。隨後 GitHub 上又冒出鏡像儲存庫,社群傳播速度非常快,話題一下就炸開了。
但我看這件事,真正值得寫下來的部分其實不是八卦本身,而是它把一個頂級 AI 程式設計工具的工程底座掀開了一角。平時我們都在用 Claude Code,也都在說它“整體手感很好”,可這種“好用”到底有多少來自模型本身,又有多少來自模型外面那層工程系統,平常其實很難看清。
我自己是長期付費在用 Claude Code 的。寫程式碼、寫文章、搭部落格、整理流程,經常都在終端裡掛著好幾個視窗一起跑。所以這次我真正在意的不是“Anthropic 出糗了沒有”,而是另一件事:一個已經被證明很好用的 AI coding 產品,背後到底是怎麼把模型馴成可交付工具的。
先把事實說清楚
先把能確認的事實說清楚。Axios 的報道里提到,Anthropic 對外承認確實有內部原始碼被包含進了公開包裡,但沒有客戶資料和憑據洩露。另一個我自己順手核過的點是,npm 當前公開版本列表裡已經看不到外界討論最集中的那個 2.1.88 版本了,只能看到它前後的版本號:
npm view @anthropic-ai/claude-code versions --json
對應我本地查到的結果,結尾是這樣的:
[
"2.1.87",
"2.1.89"
]
這個細節本身其實挺說明問題。它至少說明兩件事:第一,這不是一個“網友瞎傳的不存在版本”;第二,事情出來以後,官方側很可能已經做了收口動作。至於網上流傳的“1900 多個檔案、五十多萬行 TypeScript、幾小時多少 star 和 fork”這些數字,我更願意把它們當成公開分析裡的量級參考,而不是寫成鐵證。因為這種數字變化太快,文章一旦寫死,很容易第二天就失真。
真正讓我覺得有價值的,是公開拆解裡反覆指向了同一個結論:Claude Code 之所以手感比很多同類工具穩,不只是因為模型更強,而是因為它外面那層 harness 也做得夠厚。你可以把模型理解成發動機,但真正決定這臺車能不能安全、穩定、持續跑的,是轉向、剎車、儀表盤、限位器和整套車架。AI 程式設計工具這兩年越往下做,這個感覺越明顯。單獨盯著模型分數看,已經不太夠了。
系統提示詞:分層拼裝,而非大字報
我先講第一個我覺得特別值得學的點:系統提示詞不是一整段大字報,而更像一個分層拼裝系統。根據這次公開出來的多份拆解,Claude Code 不是靠一份靜態 system prompt 撐全場,而是把全域性規則和使用者上下文拆開了。上面那層是所有人共享的行為約束,比如不要編造、不要亂刪檔案、優先用專用工具、別做過度工程、別偷偷加使用者沒要求的功能。下面那層才是動態內容,比如專案裡的 CLAUDE.md、使用者偏好、接入的 MCP、儲存庫狀態之類。
這個思路我覺得特別像真正做過大規模產品的人會定出來的東西。因為只要你使用者足夠多,就一定會碰到一個老問題:既想個性化,又想省上下文成本。靜態部分共享快取,動態部分按使用者載入,這種切法其實很聰明。它不是在追求“提示詞寫得多厲害”,而是在解決一個更現實的問題,怎麼把昂貴的上下文預算花在對當前任務真正有用的地方。
而且這也順手解釋了另一個很多人這兩個月越來越能感受到的現象:為什麼 skill 往往比 MCP 工具開太多更輕。公開討論裡有人提到,一個 MCP 工具定義本身就會吃掉可觀的 token 預算。如果你一口氣掛很多個,模型還沒開始幹活,上下文視窗先被工具說明書佔掉一大截。這件事放在 Claude Code 這類產品上看就很清楚了,工具不是越多越先進,關鍵是哪些能力該被預置,哪些該被按需載入。
權限分級:把「會不會做」和「該不該做」拆開
第二個讓我覺得非常像“工程成熟度差異”的點,是權限和安全邊界沒有交給同一個 agent 一把抓。公開影片和分析裡反覆提到一個 yoloClassifier,意思不是讓它更 YOLO,而是讓真正執行動作的主 agent 之外,再有一層單獨的判斷邏輯去看這個操作應不應該放行。Allow、Soft Deny、Hard Deny 這種分級,本質上是在把“會不會做”和“該不該做”拆開。
這個拆法我非常認同。因為 AI 程式設計工具最麻煩的事故,很多不是它不會寫,而是它太敢寫,太敢刪,太敢一口氣改掉你沒讓它動的東西。你如果把所有決定都交給同一個 agent,體驗會很爽,但事故成本會越來越高。Claude Code 這類工具現在之所以讓很多人敢開更高權限,本質上依賴的就是這種分層信任。你表面上是在和一個 agent 協作,實際上後面還有一層“別真的胡來”的剎車系統。
我自己用下來也越來越覺得,這件事比“模型答得漂不漂亮”更重要。因為對日常開發來說,信任不是一句口號,信任是我敢不敢把權限開大一點,敢不敢讓它連續做幾步,敢不敢把一個快要收尾的目錄交給它繼續跑。如果一款工具總讓你擔心它下一秒把資料夾清空,那它再聰明,你也不可能真把它納入工作流程。
記憶系統:知道什麼不該記
第三個讓我印象很深的是記憶系統的取捨。公開拆解裡最妙的一點,不是它會記憶,而是它知道什麼不該記。像使用者偏好、行為反饋、專案級約定、外部資源引用這些東西,確實適合存進 memory,因為它們相對穩定,而且能長期影響互動質量。但程式碼事實本身其實不適合記憶化。函式在哪一行、某個模組現在長什麼樣,這些東西一旦寫死到記憶裡,專案一重構就會立刻變成誤導。
這一點我非常認同。因為很多人一提到“更聰明的 AI”,第一反應就是讓它記住更多。但真正長期用工具的人都知道,記錯比記不住更麻煩。Claude Code 公開出來的這類設計,反而像是在刻意避免這種看起來聰明、實際很容易翻車的路子。偏好和判斷交給記憶,程式碼事實回到原始碼即時讀取。這其實是一種很剋制,但非常工程化的做法。
還有一個細節也挺有意思,就是它看起來並沒有把所有東西都壓到“更復雜的檢索系統”上。公開分析裡很多人提到,Claude Code 在程式碼查詢上大量依賴的還是文字搜尋能力,本質上就是 grep 這一類樸素方法,而不是所有問題都先走向量資料庫、語義索引或者厚重的 RAG。這個選擇我覺得特別值得獨立開發者看一眼,因為它背後的意思很明確:不是每個環節都值得被做成最複雜的那一版。模型越強,越應該把那些沒必要複雜化的環節先壓簡單。
說到這裡,這次事件對 AI 程式設計賽道的意義其實也慢慢清楚了。它真正公開出來的,不只是一份“別人怎麼寫 CLI”的程式碼,而是一套行業裡已經被驗證過的產品觀:模型只是底盤的一部分,真正拉開體驗差距的,是提示詞系統、工具邊界、安全機制、上下文壓縮、記憶提取、權限分級,以及這些東西怎麼被拼成一個持續可用的工作流程。
所以我現在反而覺得,這次洩露對開源社群和後來者最大的價值,不是“大家突然拿到了一個 1:1 可復刻的 Claude Code”,而是很多以前只能靠猜的工程決策,現在終於有了更接近實物的參照。為什麼某些工具看起來功能沒少,但總是沒有 Claude Code 順手?很多時候不是少了某個按鈕,而是少了那套把模型馴服成產品的中間層。
當然,這裡也得潑一點冷水。就算真有很多團隊因此少走彎路,也不代表下個月就會憑空冒出一個完全同級別的替代品。原始碼就算攤開了,建置速度、團隊迭代、模型配合、產品判斷,這些東西也不是 copy 一份目錄結構就能補齊的。你能抄到結構,未必能抄到節奏;你能復刻某個模組,未必能復刻他們 50 多天裡高頻釋出幾十次的那種推進能力。
但對獨立開發者來說,這件事依然很值得看。因為它把一個這兩年越來越重要的判斷擺到了檯面上:下一階段 AI 程式設計工具的競爭,已經不只是模型誰更強,而是誰更會做 harness engineering。誰能把 agent 的工具、權限、記憶、上下文和安全邊界編排得更穩,誰就更有機會把“會回答問題的模型”做成“真能天天用的開發搭子”。
如果你對這種“模型之外的工程層”也有興趣,可以接著看這兩篇:新版 Codex 有什麼變化:為什麼它現在更像一個開發環境 和 AI Agent Orchestration 是什麼:為什麼單個 Agent 之後,下一個重點是編排。前一篇更偏產品層,後一篇更偏系統層,和這次 Claude Code 事件其實剛好能接上。
如果你希望我把這類 AI coding 工具、工作流程拆解和可複用設定繼續寫深一點,可以直接去 About 頁拿我的社交入口。後面如果我繼續跟這條線,會優先整理成同一個主題簇,不會散著寫。