
AI 語音朗讀 · Edge TTS
Claude Code 的源程式碼揭示了一個完全不同的使用方式:它不是單純的聊天介面,而是一個 Agent 編排平台。大多數人只用了它的冰山一角,而掌握源程式碼中的 9 個關鍵設計就能達到 10 倍的生產力提升。
CLAUDE.md 在每個回合都被重新讀取——最高槓桿操作
這是最容易被忽視卻影響最大的優化。源程式碼顯示 Claude Code 不是在工作階段開始時讀取 CLAUDE.md,而是在「每一次」查詢迭代時重新讀取。大多數人要嘛 CLAUDE.md 檔案是空的,要嘛寫了一整本聖經進去,兩者都沒有善用這個機制。
檔案讀取遵循層級結構:
- ~/.claude/CLAUDE.md — 全域層級(編碼風格、個人偏好)
- ./CLAUDE.md — 專案層級(架構決策、命名慣例)
- .claude/rules/*.md — 模組化規則
- CLAUDE.local.md — 私人筆記(gitignore 列出)
你有 40,000 個字符的預算,但大多數人只用了 200 個。正確做法是在檔案中詳細記錄架構決策、檔案命名慣例、測試模式和「絕對不要做」的規則。模型每次都會讀這些內容,這就是讓 Claude Code 從通用助手變成「了解你的程式碼庫、符合你習慣的個人助手」的關鍵差異。
子 Agent 共享提示快取——並行化幾乎免費
當 Claude Code 衍生子 Agent 時,它建立一份位元組完全相同的父層級 context 副本,API 會快取這份副本。因此同時啟動 5 個 Agent 處理程式碼庫的不同部分,成本幾乎等於 1 個 Agent 順序執行的成本。
源程式碼中的子 Agent 有三種執行模型:
- fork — 繼承父層級 context,最佳化快取
- teammate — 在 tmux 或 iterm 中的獨立窗格,透過檔案型信箱通訊
- worktree — 擁有自己的 git worktree,每個 Agent 一個隔離分支
大多數人單執行緒使用 Claude Code,一次一個任務,等待完成再給下一個。正確用法是同時啟動 5 個 Agent:一個進行安全審計、一個重構認證模組、一個撰寫測試、一個更新文件、一個修複 bug。架構本身就是為並行設計的。
權限系統應該被設定而非逐個點擊
每次 Claude Code 詢問「允許此操作?」並且你點擊是時,那其實代表設定不完整。源程式碼揭露一個 5 層設定級聯:
policy > flag > local > project > user
在 ~/.claude/settings.json 中,你可以設定 glob 模式來自動允許什麼動作:
{
"permissions": {
"allow": [
"Bash(npm *)",
"Bash(git *)",
"Edit(src/**)",
"Write(src/**)"
]
}
}
有三種權限模式:
- bypass — 完全跳過權限檢查(快但危險)
- allowEdits — 自動允許工作目錄內的檔案編輯
- auto — 對每個動作執行 LLM 分類器(新功能,最佳平衡點)
Auto 模式有自己的允許/拒絕列表可配置。源程式碼顯示它並行執行多個解析器:使用者點擊、hook 分類器、bridge,第一個回應的獲勝。每次停下來點擊「允許」都是浪費時間。設定一次,永遠別再點。
五種壓縮策略——context 壓力是真實問題
源程式碼包含五種對話壓縮方法:
- microcompact — 基於時間清除舊工具結果
- context collapse — 對話片段摘要
- session memory — 提取關鍵 context 到檔案
- full compact — 整個歷史摘要
- PTL truncation — 刪除最舊的訊息群組
這透露了一個重要事實:context 溢出是工程師團隊花費大量時間解決的核心問題。
實際含義:
- 主動使用
/compact指令,別等到系統自動壓縮導致重要 context 丟失 - 預設視窗是 200K token,但使用
[1m]模型後綴可選擇 1M token。對跨多個檔案的大規模重構很重要 - 長工作階段會累積「session memory」——包含任務規格、檔案清單、工作流狀態、錯誤和學習心得的結構化摘要。這是為什麼恢復工作階段比重新開始更有效
- 大型工具結果存到磁碟,只有 8KB 預覽傳給模型。如果貼上巨大檔案,模型可能只看到一小部分。保持輸入集中
經驗豐富的使用者會像玩電子遊戲存檔一樣使用 /compact:保存重要內容、清除不需要的、繼續推進。
Hook 系統是真正的擴充 API——25 個以上的生命週期事件
這是幾乎沒人知道的進階功能。源程式碼揭露 25 個以上可掛入的生命週期事件:
- PreToolUse — 任何工具執行前
- PostToolUse — 任何工具執行後
- UserPromptSubmit — 發送訊息時
- SessionStart / SessionEnd — 工作階段生命週期
- 還有 20 多個
支援 5 種 hook 型別:
- command — 執行 shell 指令
- prompt — 透過 LLM 注入 context
- agent — 執行完整 Agent 驗證迴圈
- HTTP — 呼叫 webhook
- function — 執行 JavaScript
實務例子:
- 檔案寫入前自動執行 linting
- 每次編輯後執行測試
- 自動將相關文件注入到每個提示
- 任務完成時發送 Slack 通知
- 程式碼發佈前驗證安全模式
UserPromptSubmit hook 特別強大。你可以將 additionalContext 注入到每條訊息,無需手動輸入就能自動附加測試結果、最近 git diff 或專案狀態。這是在 Claude Code 基礎上構建客製化開發環境的方式——不是透過更好的提示,而是掛入系統本身。
工作階段持久化且可恢復——停止每次重新開始
每個對話都儲存為 JSONL 在 ~/.claude/projects/{hash}/{sessionId}.jsonl。源程式碼支援:
- --continue — 恢復上次工作階段
- --resume — 選擇特定過去工作階段
- --fork-session — 從過去對話分支(特別實用)
Session memory 提取在壓縮過程中保留關鍵 context:任務規格、檔案清單、工作流狀態、錯誤和學習。大多數人每次開啟 Claude Code 都新建工作階段,就像每小時關閉 IDE 重新開啟一樣,所有關於你在做什麼、什麼失敗、學到什麼的 context 全消失。使用 --continue,讓 context 不斷累積,讓 session memory 隨時間累積學習。源程式碼明確為此設計了基礎設施。
工具系統執行 60 個以上工具的智慧批次處理
Claude Code 內建 60 多個工具,有趣的是「如何執行它們」。源程式碼將工具呼叫分為兩類:
- concurrent — 唯讀操作(讀取檔案、搜尋、globbing)並行執行
- serial — 修改操作(編輯、寫入、bash 指令)順序執行
當 Claude Code 需要讀取 10 個檔案理解程式碼庫時,它同時讀取全部 10 個。當需要編輯 3 個檔案時,順序執行避免衝突。內建工具之外,可連接 MCP 伺服器增加更多工具。源程式碼使用延遲載入——MCP 工具只在需要時載入,連接 5 個 MCP 伺服器不會拖累每個請求。
實務建議:如果工作流涉及外部系統(資料庫、雲端提供商、CI/CD),為它們連接 MCP 伺服器。架構會處理複雜性,你只需獲得更多功能。
串流架構意味中斷成本極低
整個管線使用非同步生成器產出個別事件。按 Escape 可乾淨中止當前串流,不會遺失先前 context。
這看似微小卻改變了使用方式。別等著看你知道會出錯的回應。立即中斷並改變方向。源程式碼就是為此設計的,先前 context 保留,中斷的回應乾淨丟棄,零成本。
像結對程式設計一樣:如果搭檔開始走錯路,你不會等他完成,你會說「其實改這樣」。同樣的邏輯。
重試系統比你想像更複雜
源程式碼揭露:
- 10 次重試,指數退避加抖動(500ms 基礎)
- 401/403 時自動 OAuth token 重新整理
- 模型遞補:Opus 失敗 3 次 529 錯誤時自動降級到 Sonnet
- 串流上 90 秒空閒監視——如果串流卡住自動降級為非串流
- 持續模式無限重試,最大 5 分鐘退避
Claude Code 設計成可放著跑
— mal (@mal_shaik) March 31, 2026