大多數人打開 Claude Code,輸入提示詞,等回應,再輸入下一個提示詞。
這就像買了一台法拉利,卻只開一檔。
我想搞懂為什麼有些人用 Claude Code 的效率比其他人高出 10 倍。所以我做了任何正常人會做的事:讀了整個原始碼(當然,所謂的「我」其實是指 Claude Code 啦)。
11 層架構。數千行程式碼。一個偽裝成終端機聊天的 Agent 編排平台。
以下是原始碼揭露的,關於如何真正使用這個東西的秘訣。
1. CLAUDE.md 會在每次迭代時被讀取。是「每一次」。
這是你所能做杠杆效應最高的事,但幾乎沒有人做對。
大多數人要嘛 CLAUDE.md 檔案裡什麼都沒有,要嘛寫了一整本聖經進去。
原始碼顯示,Claude Code 在「每次」查詢迭代時都會讀取你的 CLAUDE.md 檔案。不是在會話開始時。是每一次。這意味著每次你發送訊息,它都會重新讀取你的指示。
它有一套完整的層級結構:
- ~/.claude/CLAUDE.md — 全域設定(你的編碼風格、偏好)
- ./CLAUDE.md — 專案層級(架構決策、慣例)
- .claude/rules/*.md — 模組化規則
- CLAUDE.local.md — 私人筆記(已被 gitignore)
你有 40,000 個字元可用。這非常多。但大多數人大概只用了 200 個。
把你的架構決策放進去。你的檔案慣例。你的測試模式。你的「永遠不要這樣做」規則。模型在每一次迭代都會讀取它們。這就是 Claude Code 從一個通用助手,變成「你的」助手、了解「你的」程式碼庫的關鍵。
如果你讀完這篇只打算做一件事,那就是這個。
2. 子 Agent 共享提示詞快取(平行處理基本上零成本)
這是最讓我震驚的事。
當 Claude Code 分支出一個子 Agent 時,它會創建一個與父上下文位元組完全相同的副本。API 會快取這個副本。所以,生成 5 個 Agent 來同時處理你程式碼庫的不同部分,成本幾乎只比一個 Agent 順序執行多一點點。
再讀一次這句話。
5 個 Agent。成本等同於 1 個。因為它們都命中同一個提示詞快取。
大多數人把 Claude Code 當成單一工人來用。一次做一件事。等它完成。再給下一個任務。
原始碼中清楚顯示子 Agent 有三種執行模型:
- fork — 繼承父上下文,快取最優化
- teammate — 在 tmux 或 iTerm 中開啟獨立面板,透過基於檔案的郵件信箱溝通
- worktree — 擁有自己的 git worktree,每個 Agent 有獨立分支
你可以讓 Claude Code 同時啟動 5 個 Agent:一個做安全稽核,一個重構認證模組,一個寫測試,一個更新文件,一個修 bug。全部同時進行。全部共享快取。
這個架構就是為了這個目的打造的。只用單執行緒來跑它簡直是暴殄天物。
3. 權限系統的設計目的是「設定好」,而不是「逐一點擊」
每次 Claude Code 問「允許這個動作?」然後你按「是」,這不是功能,而是設定失敗。
原始碼揭示了一個 5 層級的設定串聯:
1policy > flag > local > project > user
在 ~/.claude/settings.json 中,你可以設定全域比對模式來定義總是允許的動作:
1{2 "permissions": {3 "allow": [4 "Bash(npm *)",5 "Bash(git *)",6 "Edit(src/**)",7 "Write(src/**)"8 ]9 }10}
有三種權限模式:
- bypass — 完全不做權限檢查(危險但快速)
- allowEdits — 自動允許在你的工作目錄中編輯檔案
- auto(這是新的)— 對每個動作執行 LLM 分類器。這是甜蜜點。
auto 模式有它自己可設定的允許/拒絕清單。原始碼顯示它會平行執行多個解析器:用戶點擊、鉤子分類器、橋接器,哪個先回應就用哪個。
每次你停下來點擊「允許」都是在浪費時間。設定一次,從此不用再點。
4. 有五種壓縮策略。上下文壓力是真實存在的問題
原始碼有五種不同的方法來壓縮當對話變得過長時的內容:
- microcompact — 基於時間清除舊的工具結果
- context collapse — 摘要對話段落
- session memory — 將關鍵上下文提取到檔案中
- full compact — 摘要整個歷史紀錄
- PTL truncation — 丟棄最舊的訊息群組
這告訴你一個重要訊息:上下文溢出是工程師花費大量時間處理的核心問題。
這對你的意義是:
- 主動使用
/compact。不要等到系統自動壓縮,然後失去你在意的上下文。 - 預設視窗是 200K tokens。但你可以透過使用
[1m]模型後綴來選擇 1M tokens。對於跨越多個檔案的大型重構,這點很重要。 - 長時間的會話會累積「session memory(會話記憶)」——包含任務規格、檔案列表、工作流程狀態、錯誤和學習心得等結構化摘要。這就是為什麼恢復會話比重新開始更好。
- 大型工具結果會儲存到磁碟,只傳送 8KB 的預覽給模型。如果你貼上一個巨大的檔案,模型可能只會看到一小部分。保持輸入專注。
那些最善用 Claude Code 的人,把 /compact 當成電玩遊戲裡的手動存檔點。保留重要的,清除無關的,繼續前進。
5. 鉤子系統才是真正的擴充 API(超過 25 個生命週期事件)
這是幾乎沒人知道的達人級功能。
原始碼揭示了超過 25 個你可以掛鉤的生命週期事件:
- PreToolUse — 在任何工具執行前觸發
- PostToolUse — 在任何工具執行後觸發
- UserPromptSubmit — 在你發送訊息時觸發
- SessionStart / SessionEnd — 會話生命週期
- 以及其他 20 多個
搭配 5 種類型的鉤子:
- command — 執行 shell 命令
- prompt — 透過 LLM 注入上下文
- agent — 執行完整的 Agent 驗證迴圈
- HTTP — 呼叫網頁鉤子
- function — 執行 JavaScript
實際應用範例:
- 每次檔案寫入前自動執行 linting
- 每次編輯後自動執行測試
- 自動將相關文件注入每個提示詞
- 任務完成時發送 Slack 通知
- 在程式碼發布前驗證安全模式是否遵循
UserPromptSubmit 鉤子尤其驚人。你可以將 additionalContext 注入到你發送的「每一條」訊息中。想像一下,自動將測試輸出、最近的 git diff 或專案狀態附加到每個提示詞,而完全不需要手動輸入。
這就是你在 Claude Code 之上建立自訂開發環境的方法。不是靠更好的提示詞技巧,而是透過掛鉤到系統本身。
6. 會話是持久且可恢復的(別再每次都重新開始)
每一次對話都會以 JSONL 格式儲存在
1~/.claude/projects/{hash}/{sessionId}.jsonl
原始碼支援:
- --continue — 恢復你上一次的會話
- --resume — 選擇一個特定的過去會話
- --fork-session — 從過去的對話分支出來(我個人很喜歡這個)
會話記憶提取能在壓縮過程中保留關鍵上下文:任務規格、檔案列表、工作流程狀態、錯誤和學習心得。
大多數人每次打開 Claude Code 都開始一個新會話。這就像每小時關閉你的 IDE 再重新打開一樣。所有關於你在做什麼、哪裡失敗了、學到了什麼的上下文——全都沒了。
使用 --continue。永遠這麼做。讓上下文累積。讓會話記憶隨著時間累積學習心得。原始碼裡有完整的基礎設施支援這個功能,去用它。
7. 工具系統以智慧批次處理執行超過 60 種工具
Claude Code 有超過 60 種內建工具。但有趣的部分在於「如何」執行它們。
原始碼將工具呼叫分為兩類:
- concurrent — 唯讀操作(讀取檔案、搜尋、glob 匹配)可以平行執行
- serial — 會改變狀態的操作(編輯、寫入、bash 命令)一次只執行一個
這意味著當 Claude Code 需要讀取 10 個檔案來了解你的程式碼庫時,它會同時讀取全部 10 個檔案。但當它需要編輯 3 個檔案時,它會一個接一個地做,以避免衝突。
在內建工具之上,你可以連接 MCP 伺服器來添加更多工具。原始碼使用延遲載入。MCP 工具只在需要時才載入,所以連接 5 個 MCP 伺服器並不會拖慢每個請求的速度。
還有 ToolSearch 用於延遲發現 Agent 還不知道的工具。
實用的結論是:如果你的工作流程涉及外部系統(資料庫、雲端供應商、CI/CD),為它們連接 MCP 伺服器。這個架構會處理所有複雜性。你只會得到更多能力。
8. 串流架構讓中斷幾乎零成本
整個管線使用非同步生成器來產生個別事件。按下 Escape 鍵可以乾淨地中止當前的串流,而不會遺失先前的上下文。
這看起來很小,但它會改變你使用 Claude Code 的方式。
當你發現回應方向錯誤時,不要等它完成。立刻中斷並重新導向。原始碼就是為此設計的。你之前的上下文被保留下來。被中斷的回應被乾淨地丟棄。零成本。
把它想成是結對程式設計。如果你的夥伴開始往錯的方向走,你不會等他完成。你會說:「呃,我們還是往這邊走吧。」同樣的道理。
9. 重試系統比你想像的更精密
原始碼揭示了:
- 10 次重試,採用指數退避和抖動(基準 500 毫秒)
- 在遇到 401/403 錯誤時自動重新整理 OAuth Token
- 模型備援:如果 Opus 連續 3 次因 529 錯誤失敗,會自動備援到 Sonnet
- 串流有 90 秒閒置看門狗計時器——如果串流停滯,會備援到非串流模式
- 持久模式有無限重試,最長退避時間為 5 分鐘
這意味著 Claude Code 被設計成可以讓它一直運行。它能優雅地處理 API 的小問題、速率限制和中斷。你不需要一直在旁邊看著。讓它在背景運行,然後回來看結果就好。
總結:從原始碼中得到的最高杠杆效應行動
• 寫一個真正的 CLAUDE.md → 每次迭代都讀取。40K 字元。杠杆效應最高的設定。
• 使用子 Agent 進行平行化 → fork 模型共享提示詞快取。5 個 Agent ≈ 1 個的成本。
• 在 settings.json 中設定好權限 → 永遠告別點擊疲勞。
• 主動使用 /compact → 有五種壓縮策略就說明了上下文壓力是真實的。
• 設定鉤子 → 超過 25 個事件、5 種類型。這才是真正的擴充 API。
• 永遠使用 --continue 恢復會話 → JSONL 持久化 + 會話記憶 = 累積的上下文。
• 連接 MCP 伺服器 → 延遲載入意味著使用前零成本。
• 自由地中斷 → 非同步生成器代表重新導向的懲罰為零。
重點是:Claude Code 是一個披著終端機 UI 外衣的 Agent 編排平台。
那些從中獲得 10 倍輸出的人,不是因為他們更會寫提示詞。他們設定好了它。他們讓它平行運作。他們掛鉤進去了。他們讓上下文跨會話累積。
原始碼讓這一點變得顯而易見。現在你知道了它實際上在底層是怎麼運作的。
覺得有幫助的話就按個轉發吧 🫶





