Claude Code 洩漏全解讀 2 — 讓你用起來很順的秘密
上一篇我們講了 Claude Code 那些還沒上線的功能
結尾提到 Harness 這個詞
這篇就來拆解 Harness 到底是什麼
以及 Claude Code 的 500,000 行原始碼怎麼把它蓋出來的
什麼是 Harness
簡單來說
Harness 就是規劃一個讓 AI 可以自由活動的系統
並限制系統中 AI 可以做跟不能做的事
如果 AI 模型是引擎
那 Harness 就是底盤、煞車、方向盤和儀表板
讓 AI 可以穩定可靠地運作
LangChain 曾做過實驗
僅靠改變 Harness 而非更換模型
Coding 表現就從 52.8% 提升到 66.5%
最早提出這個概念是 HashiCorp 的共同創辦人 Mitchell Hashimoto
HashiCorp 就是開發出 Terraform(IaC)跟 Vault(密鑰管理)的那家
離開 HashiCorp 後,他個人還開發了 Ghostty
2026 年 2 月 5 日
他發表了一篇叫 「My AI Adoption Journey」 的部落格
描述他個人採用 AI 工具的六個階段
第五階段就叫「Engineer the Harness」
每當你發現 agent 犯了一個錯誤
你就花時間去設計一個解決方案
讓 agent 再也不會犯同樣的錯
幾天之後
OpenAI 也發表了他們對 Harness 的看法
讓這個名詞迅速走紅
一個完整的 Harness 系統通常包含:
護欄與權限控制(防止 AI 做出危險操作)
記憶與上下文管理
錯誤自動修復機制
以及輸出品質的自我評估
這些聽起來很抽象
不過 Claude Code 的原始碼剛好給了我們一個可以拆解的樣本
呼叫 API 只要 200 行,剩下 499,800 行在幹嘛?
Claude Code 的原始碼大約 500,000 行 TypeScript
其中真正呼叫 Anthropic API 的只有 200 行
剩下的 499,800 行在做什麼?
Anthropic 內部有一個詞來形容這些東西:harness
簡單一點的翻譯是「韁繩」
模型是馬,你需要韁繩去駕馭它
大家談 AI coding tool 的時候只看模型
「用 Opus 還是 Sonnet?」「GPT 還是 Claude?」
但看完原始碼之後會發現
模型反而是最容易替換的零件
真正的產品是模型以外的所有東西
那這個韁繩有什麼功能?
讓你聊一整天不會崩的壓縮系統
不讓你炸掉自己電腦的安全檢查
甚至連防止別人抄襲的反蒸餾
這些都是 harness 的一部分
每一個「用起來很順」的體驗
背後都有幾千行 code 在撐
如何讓模型聊一整天也不會崩
每個 LLM 都有 context window 的上限
當你跟 coding agent 工作超過一定時間
對話歷史會塞爆
模型開始忘記前面講過什麼
這問題怎麼解?
Claude Code 用了四層防線:
第一層:主動壓縮
每次送 API 之前先算 token 數
快到上限就把舊的對話摘要壓縮
使用者完全不會感覺到
第二層:被動壓縮
如果第一層沒攔住(race condition 或是 token 估算不準)
API 回傳 prompt_too_long 錯誤時啟動
事後壓縮再重試
使用者只會感覺到短暫延遲,不會看到錯誤
第三層:截斷壓縮
SDK 和 headless 模式專用
不做摘要,直接在定義好的邊界砍斷
第四層:Context collapse
針對的不是整段對話,而是單一工具的輸出
三個回合前某個工具吐了 500 行輸出,你已經不需要了
這層會把它壓縮成更短的版本
這個壓縮紀錄會被保存,之後可以選擇性還原
四層防線,每一層都是因為前一層有可能失敗
Shell 保護,讓你不會炸掉自己的電腦
bashSecurity.ts 這個檔案有 2,592 行
這 2,592 行程式碼只做一件事:
確保你不會用 shell 指令炸掉自己的電腦
每一個 shell 指令都要通過 23 項安全檢查
有一些簡單的原則
讀取檔案 → 安全、可逆 → 自動放行
grep 搜尋 → 自動放行
git push → 影響遠端 → 要求確認
刪除分支 → 不可逆 → 需要明確權限
聽起來很直覺對吧?
但魔鬼在細節裡
Zsh 的 =cmd 展開:
如果你跑 curl,Claude Code 知道這是網路請求,會攔住問你
但在 Zsh 中 =curl 會被自動展開成 /usr/bin/curl
權限檢查看到的是 =curl 這個字串
覺得不認識就放行了
但實際執行的還是 curl
zmodload:
Zsh 可以動態載入模組
載入 zsh/mapfile 之後
你可以直接用變數讀寫檔案
完全不需要 cat、echo 這些指令
因為不是指令呼叫
權限系統根本看不到有檔案操作發生
等於開了一個隱形的後門
Shell ANSI-C 引號:
$‘\x41’ 在 shell 中等於字母 A
你可以用這種方式把任何指令拆成十六進位碼來拼
權限系統搜尋 rm 這個字串找不到
但 $‘\x72\x6d’ 執行起來就是 rm
等於用編碼繞過了關鍵字黑名單
這些一看就知道有人真的被搞過才會寫出來的
體感加速
其實不是模型變快
是它提前開始跑
推測執行:
當你還在打字的時候
Claude Code 已經在猜你可能會問什麼
並開始預先計算回應
比如你剛跑完一個工具
接下來很可能會問「結果怎樣」
回應在你按下 Enter 之前就已經準備好了
記憶預取:
當模型正在回答時
系統同時在背景讀取 CLAUDE.md 中可能相關的記憶
正常流程:模型回答完 → 決定要用什麼工具 → 載入相關記憶 → 執行工具
Claude Code 把「載入記憶」提前到「模型還在回答」的時候並行做了
等到工具要開始執行時
記憶已經在手邊
不用再等磁碟 I/O
這跟 Google 在 2005 年做的 Prefetch 是一樣的邏輯
Google 會趁用戶還在看搜尋結果頁的時候
偷偷把最可能被點擊的第一筆結果預先載入
用戶覺得「點進去好快」
其實是 Google 提前幫你跑了
全球共享的 3000 個 token
Claude Code 的 system prompt 由大約 15 個可組合的函式拼接而成
中間有一個標記叫 SYSTEM_PROMPT_DYNAMIC_BOUNDARY
這個標記把 prompt 分成兩半:
上半:靜態內容
行為指示、coding style 規則、安全規範
這些不會因為使用者不同而改變
標記為 scope: ‘global’
這 3,000 token 將送進 API 快取
全球幾百萬個使用者共享
使用者不需要為這些 token 付費
對 Anthropic 來說 也可以省GPU
算是雙贏
下半:動態內容
你的 CLAUDE.md、MCP server 指示、環境資訊
每個人不同,每次重新注入
Claude 知道你在罵它
userPromptKeywords.ts 中
有一段正規表達式匹配髒話和負面短語
wtf、horrible、this sucks
一家 LLM 公司不用 LLM 而用 regex 做情感分析
很諷刺但很實用
用 LLM 等於每次都要額外 call 一次 API
regex 幾微秒搞定
合理的推測是這些挫折標記會被傳給模型
讓 AI 知道使用者現在不開心
調整回應的語氣
或是用於分析指標
追蹤使用者在什麼場景下最容易感到挫折
幫助團隊改進產品
不過也有缺點
中文罵人偵測不到
罵人不帶髒字的也抓不到
「我已經第五次要求你不要這樣做了」不會觸發
但在討論包含髒話的程式碼時反而會誤觸發
harness 也保護產品本身
到這裡為止講的都是讓你「用起來更順」的 harness
但 harness 還有另一面
反蒸餾,防止別人偷你的 API 流量訓練模型
原始碼裡有兩層反蒸餾機制
第一層:假工具注入
API 請求帶一個 anti_distillation: ['fake_tools'] 的參數
伺服器端在 system prompt 裡注入虛假的工具定義
如果有人錄製 API 流量來訓練自己的模型
假工具會污染訓練資料
第二層:原生客戶端認證
API 請求裡有一個固定長度的 hash placeholder
在請求離開程序之前
Bun 會用計算出的 hash 覆蓋這串數字
伺服器端驗證 hash 是否正確
確認請求來自真正的 Claude Code 二進位檔
不過繞過難度不高
MITM 代理剝除 anti_distillation 欄位就能繞過假工具
設定環境變數也能停用
真正的保護是法律手段,而非技術手段
但它的意義不是擋住所有人
而是提高門檻、留下痕跡、讓法律追訴有技術證據
這也是 harness 的一部分
25 萬次 API 的 BUG
auto-compact 功能有一個 bug
1,279 個 session 曾經連續失敗 50 次以上
最高到 3,272 次
全球每天浪費約 25 萬次 API 呼叫
修復方式很簡單
加上一個「連續失敗超過 3 次就停止」的限制就搞定了
3 行 code 修好每天 25 萬次的浪費
Claude code 跟 Codex 架構上的差別
Claude Code 的原始碼剛好可以拿來跟 OpenAI 開源的 Codex 比
壓縮策略:
Claude Code 蓋了四層防線
Codex 只有兩層
但 Codex 會追蹤每一回合的設定快照,只送有變化的部分
Claude Code 每次都重送完整的 system prompt,靠快取來省成本
安全機制:
Claude Code 在應用層一條一條攔,2,592 行逐項檢查
Codex 直接用 OS 層的 sandbox
危險指令根本沒機會執行
省 token 的方式:
Claude Code 把 3,000 token 的靜態指示做全域快取
Codex 的 system prompt 本身就短,直接把 sandbox policy 塞進去
這是兩種設計哲學:
Claude Code 寧可多蓋防線,也不讓使用者看到一次錯誤
Codex 寧可精簡傳輸,也不浪費一個 token
所以剩下的「499,800 行在幹嘛」
在讓你覺得什麼事情都沒發生
這些隱藏在 Claude code 水面下的原理
都發生在你看不到的地方
壓縮在你注意到之前就處理完了
快取在你不知道的情況下幫你省了錢
挫折偵測在你沒察覺的情況下安撫你的情緒
只有 0.04% 的程式碼跟模型有關
其他都是在做 harness
模型是最貴的零件
但也是最容易被替換的零件
那真正難被替換的是什麼
下一篇我們來聊這個
究竟未來的 AI 護城河是在模型本身
還是在周邊的架構
如果你覺得這篇有幫助,我每週會發類似的分析到信箱。
訂閱電子報