# 策展 · X (Twitter) 🔥

> 作者：mal (@mal_shaik) · 平台：X (Twitter) · 日期：2026-03-31

> 原始來源：https://x.com/i/article/2038911623902224384

## 中文摘要

# 我讀完了 Claude Code 的原始碼，這樣你就不用讀了。

大多數人打開 Claude Code，輸入一個 Prompt，等待回應，然後再輸入下一個 Prompt。

這就像買了一輛法拉利，卻只用一檔開車一樣。

我想要了解為什麼有些人從 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. Subagent 共享 Prompt 快取（平行處理幾乎是免費的）

這點讓我大開眼界。

當 Claude Code 派生（fork）一個 Subagent 時，它會建立父層 Context 的位元組相同副本。API 會快取這個副本。因此，產生 5 個 Agent 來處理你程式庫的不同部分，其成本幾乎與 1 個 Agent 循序處理相同。

再讀一遍。

5 個 Agent。成本與 1 個相同。因為它們都命中了 Prompt 快取。

大多數人把 Claude Code 當作單一工作者使用。一次一個任務。等待它完成。給它下一個任務。

原始碼中確實有三種 Subagent 的執行模型：

- `fork` — 繼承父層 Context，快取優化

- `teammate` — 在 tmux 或 iterm 的獨立視窗中，透過基於檔案的信箱進行溝通

- `worktree` — 擁有自己的 git worktree，每個 Agent 擁有獨立的分支

你可以指示 Claude Code 啟動 5 個 Agent：一個進行安全性稽核，一個重構驗證模組，一個編寫測試，一個更新文件，一個修復 Bug。全部同時進行。全部共享快取。

這套架構就是為此而「建立」的。單執行緒使用它簡直是暴殄天物。

---

## 3. 權限系統設計為「配置」，而不是「點擊」

每次 Claude Code 問你「允許此操作嗎？」而你點擊「是」時，那都是配置上的失敗，而不是一項功能。

原始碼揭示了一個 5 層級的設定串聯：

```
policy > flag > local > project > user
```

在 `~/.claude/settings.json` 中，你可以為始終允許的操作設定 glob 模式：

```json
{
  "permissions": {
    "allow": [
      "Bash(npm *)",
      "Bash(git *)", 
      "Edit(src/**)",
      "Write(src/**)"
    ]
  }
}
```

有三種權限模式：

- `bypass` — 完全沒有權限檢查（危險但快速）

- `allowEdits` — 自動允許在你的工作目錄中進行檔案編輯

- `auto`（這是新的） — 對每個操作執行 LLM 分類器。這是最佳平衡點。

`auto` 模式有你可以配置的允許/拒絕清單。原始碼顯示它會平行執行多個解析器：使用者點擊、Hook 分類器、Bridge，最先回應的勝出。

每次你停下來點擊「允許」都是在浪費時間。配置一次。永遠不用再點擊。

---

## 4. 有 5 種壓縮策略。Context 壓力是一個真正的問題

原始碼有五種不同的方式來壓縮你的對話，以防它變得太長：

1. `microcompact` — 基於時間清除舊的工具結果

2. `context collapse` — 總結對話片段

3. `session memory` — 將關鍵 Context 提取到檔案中

4. `full compact` — 總結整個歷史記錄

5. `PTL truncation` — 刪除最舊的訊息群組

這告訴你一件重要的事：Context 溢出是工程師花費「大量」時間解決的核心問題。

這對你意味著什麼：

- 主動使用 `/compact`。不要等到系統自動壓縮並丟失你在意的 Context。

- 預設視窗是 200K token。但你可以透過使用 `[1m]` 模型後綴來選擇 1M token。對於跨多個檔案的大型重構，這很重要。

- 長時間的工作階段會累積「工作階段記憶」——包含任務規格、檔案清單、工作流程狀態、錯誤和學習心得的結構化摘要。這就是為什麼恢復工作階段比重新開始更好的原因。

- 大型工具結果會儲存到磁碟，只有 8KB 的預覽會發送給模型。如果你貼上一個巨大的檔案，模型可能只會看到一小部分。保持輸入的重點。

那些從 Claude Code 獲得最大效益的人，會像在電子遊戲中手動存檔一樣使用 `/compact`。保留重要的，清除不重要的，繼續前進。

---

## 5. Hook 系統才是真正的擴充 API（25+ 生命週期事件）

這是幾乎沒人知道的高階使用者功能。

原始碼揭示了 25 個以上你可以 Hook 進去的生命週期事件：

- `PreToolUse` — 在任何工具執行前執行

- `PostToolUse` — 在任何工具執行後執行

- `UserPromptSubmit` — 當你發送訊息時執行

- `SessionStart` / `SessionEnd` — 工作階段生命週期

- 以及其他 20 多個

有 5 種 Hook 類型：

- `command` — 執行 Shell 指令

- `prompt` — 透過 LLM 注入 Context

- `agent` — 執行完整的 Agent 驗證迴圈

- `HTTP` — 呼叫 Webhook

- `function` — 執行 JS

你可以做到的實際範例：

- 在每次檔案寫入前自動執行 Linting

- 在每次編輯後執行測試

- 自動將相關文件注入到每個 Prompt 中

- 當任務完成時發送 Slack 通知

- 在程式碼發佈前驗證是否遵循安全性模式

`UserPromptSubmit` Hook 特別瘋狂。你可以在你發送的每一條訊息中注入 `additionalContext`。想像一下，在不輸入的情況下，自動將測試輸出、最近的 git diff 或專案狀態附加到每個 Prompt 中。

這就是你如何在 Claude Code 之上建立自訂開發環境的方法。不是透過寫出更好的 Prompt，而是透過 Hook 進系統本身。

---

## 6. 工作階段是持久且可恢復的（停止重新開始）

每個對話都以 JSONL 格式儲存在：

```
~/.claude/projects/{hash}/{sessionId}.jsonl
```

原始碼支援：

- `--continue` — 恢復你上一個工作階段

- `--resume` — 選擇一個特定的過去工作階段

- `--fork-session` — 從過去的對話中分支（我個人很喜歡這個）

工作階段記憶提取會在壓縮過程中保留關鍵 Context：任務規格、檔案清單、工作流程狀態、錯誤和學習心得。

大多數人每次打開 Claude Code 時都會開始一個新的工作階段。這就像每小時關閉你的 IDE 並從頭重新打開一樣。所有關於你在做什麼、什麼失敗了、你學到了什麼的 Context —— 全都消失了。

使用 `--continue`。永遠使用。讓 Context 累積。讓工作階段記憶隨著時間的推移建立學習心得。原始碼中確實有這方面的基礎設施。請使用它。

---

## 7. 工具系統執行 60+ 種工具，並具備智慧批次處理

Claude Code 有 60 多種內建工具。但有趣的是它「如何」執行它們。

原始碼將工具呼叫分為兩類：

- `concurrent` — 唯讀操作（讀取檔案、搜尋、globbing）平行執行

- `serial` — 變更操作（編輯、寫入、bash 指令）一次執行一個

這意味著當 Claude Code 需要讀取 10 個檔案來了解你的程式庫時，它會同時讀取所有 10 個檔案。但當它需要編輯 3 個檔案時，它會一次處理一個以避免衝突。

除了內建工具外，你還可以連接 MCP Server 來增加更多工具。原始碼使用了延遲載入。MCP 工具僅在需要時才載入，因此連接 5 個 MCP Server 不會拖慢每個請求。

此外還有 `ToolSearch`，用於延遲發現 Agent 尚未知道的工具。

實際的收穫：如果你的工作流程涉及外部系統（資料庫、雲端供應商、CI/CD），請為它們連接 MCP Server。架構處理了複雜性。你只是獲得了更多能力。

---

## 8. 串流架構意味著中斷成本很低

整個管線使用非同步產生器（async generators）來產生個別事件。按下 Escape 鍵可以乾淨地中止當前的串流，而不會丟失之前的 Context。

這看起來很小，但它改變了你應該如何使用 Claude Code 的方式。

不要等待你知道會出錯的回應。立即中斷並重新導向。原始碼就是為此設計的。你之前的 Context 會被保留。被中斷的回應會被乾淨地丟棄。零懲罰。

把它想像成結對程式設計（pair programming）。如果你的夥伴開始走錯方向，你不會等他們完成。你會說「其實，改走這邊」。同樣的道理。

## 9. 重試系統比你想像的更複雜

原始碼揭示了：

- 10 次重試，採用指數退避（exponential backoff）和抖動（jitter）（500ms 為基準）

- 在 401/403 錯誤時自動重新整理 OAuth token

- 模型回退（fallback）：如果 Opus 因 529 錯誤失敗 3 次，它會自動回退到 Sonnet

- 串流上有 90 秒的閒置監控 — 如果串流停滯，它會回退到非串流模式

- 持久模式具有無限重試，最大退避時間為 5 分鐘

這意味著 Claude Code 被設計為可以一直執行。它能優雅地處理 API 異常、速率限制和中斷。你不需要隨時盯著它。讓它在背景執行，然後回來查看結果。

TL;DR：從原始碼中獲得最高槓桿的操作：

• 撰寫一個真正的 `CLAUDE.md` → 每次對話都會載入。40K 字元。最高槓桿的配置。

• 使用 Subagent 平行處理 → `fork` 模型共享 Prompt 快取。5 個 Agent ≈ 1 個的成本。

• 在 `settings.json` 中配置權限 → 永遠消除點擊疲勞。

• 主動使用 `/compact` → 存在 5 種壓縮策略是因為 Context 壓力是真實存在的。

• 設定 Hook → 25+ 事件，5 種類型。這是真正的擴充 API。

• 永遠使用 `--continue` 工作階段 → JSONL 持久化 + 工作階段記憶 = 累積的 Context。

• 連接 MCP Server → 延遲載入意味著在使用前零成本。

• 自由中斷 → 非同步產生器意味著重新導向零懲罰。

---

總結：Claude Code 是一個穿著終端機 UI 的 Agent 編排平台。

那些從中獲得 10 倍產出的人並不是更會寫 Prompt。他們配置了它。他們平行化了它。他們 Hook 進了它。他們讓 Context 在工作階段之間累積。

原始碼讓這一切變得顯而易見。現在你知道它在底層實際上做了什麼。

如果你覺得這很有幫助，請轉發 🫶

## 標籤

Claude Code, Skills, 教學資源, Agent, Anthropic, Claude
