Claude · Code · 解體新書
西元 1774 年,杉田玄白與前野良澤譯完《解體新書》—— 日本第一部西洋人體解剖圖譜。他們的動機很簡單:若要醫治一具身體,就必須先看清楚它內部的每一條經絡。本卷沿用此意,對象換成 Claude Code —— 由 Anthropic 開發、此刻正在你終端機裡執行的 CLI 型 AI 代理 harness。
Claude Code 的表層是一個對話視窗,底層卻是一整套精密的工程系統:它組裝上下文、路由工具、審核權限、觸發 hook、載入 skill、派遣 subagent、橋接 MCP server、壓縮歷史、持續記憶 —— 全部在每一次你按下 Enter 的瞬間同步運轉。本卷分十回章節,逐器官拆解。
這份解剖圖不是外觀素描,而是功能路徑圖。看懂它,你對 Claude Code 的使用就從「命令對話框」進化成「駕駛艙」。
迴圈之魂
The Agentic Loop · how one turn becomes many
Claude Code 的一次對話並不是一次模型呼叫。當模型決定要用工具(Bash、Edit、Agent…),harness 會執行工具、把 tool_result 注回上下文、再呼叫模型一次,直到模型只吐純文字為止。這就是 Claude Code 的 agentic loop — 「自主行動」就是從這個迴圈裡長出來的。六站一環,反覆推進。
UserPromptSubmit hook 可注入額外脈絡(例如時刻、專案狀態)。tool_use 區塊。tool_use 則交給下一站處理。tool_result 塞回對話歷史,然後 — 再次進入 iii 推演,直到模型不再請求工具。脈絡編織
Context Assembly · what the model actually sees在你每次按下 Enter 之前,harness 會在幕後悄悄「重新寫完整份 prompt」— 把七八層東西壓進同一個 context window 再遞給模型。模型看見的從來不是你打的那一行字,而是這整疊紙。
ToolSearch 才載入全貌。UserPromptSubmit 等事件可執行 shell 指令,將額外資訊塞入此輪 prompt。工具之鞘
Tool Dispatch · permission gate & sandbox
當模型說「我想 Write 這個檔案」,Claude Code 並不會馬上照辦 — 它先讀 settings.json 裡的 permissions(含 allow / deny 兩份字串模式清單 + defaultMode)決定走哪條路:命中 allow 直接執行、命中 deny 直接拒絕、兩者皆無則依 defaultMode 提示使用者。執行期在沙箱內、捕捉錯誤。這是 harness 風險最集中的地方,也是它最關鍵的「安全之鞘」。
risk · 風險集中處
tool dispatch 是 harness 唯一會產生副作用的環節。檔案寫入、shell 命令、網路請求、對外訊息 — 所有「不可逆」的動作都必須穿過這裡。設計權限模型時寧嚴勿寬。
failure · 失敗回流
執行失敗不等於流程崩潰。錯誤會被包成 tool_result 的 error 形式回注 — 模型在下一 turn 看見錯誤訊息,自行決定是重試、更改參數,或回報給使用者。
鉤子織時
Hook Timeline · where users can splice in their own codeHook 是 harness 允許你「在特定時間點插入自己程式碼」的接縫。它們不是 Claude 在執行 — 是 harness 在執行。當你說「從現在起每次 X 都要 Y」,那不是模型要記住的事,而是一條 hook 設定。
PostToolUseFailure 專門捕捉執行失敗。StopFailure 專門捕捉異常結束。記憶二界
Memory Worlds · the context-bound and the persistent
Claude Code 的記憶分為兩層:短暫的「context 記憶」活在這次對話的 token 預算裡,會隨 turn 與 auto-compression 消逝;永續的「file 記憶」主要靠 CLAUDE.md 階層(全域 ~/.claude/CLAUDE.md 與專案 ./.claude/CLAUDE.md)每 session 開頭自動注入,其餘狀態則存於 ~/.claude.json、~/.claude/projects/ 等位置。harness 的工作是決定 — 何時寫、何時讀、何時忘。
budget · 預算紀律
working memory 的容量是固定的(例如 200K token)。harness 會監控使用量 — 一旦接近上限,就會把最舊的若干 turn 換成摘要,以空出位置給新內容。這稱為 auto-compression。
decay · 記憶衰減
永續記憶看似不會忘 — 但會過期。寫入時要記錄 為什麼 存這件事,讀取時要先驗證現況仍然符合。stale memory 比沒有記憶更危險。
棲所之圖
The .claude Directory · where Claude Code keeps its organs
Claude Code 的狀態不是放在某個黑盒資料庫裡 — 它全部都是純文字檔,散落在兩個目錄:~/.claude/(全域,跟著你這個使用者)與專案下的 .claude/(跟著這個 repo)。兩者結構相同但作用範圍不同;專案設定覆蓋全域設定,像兩張透明賽璐珞片疊起來看。
~/.claude/CLAUDE.md,專案版放 ./.claude/CLAUDE.md。兩份會 疊加進每一次對話的 system prompt — 注意:陣列類設定(如 allow)會合併,scalar 類(如 model)則用最具體值。"$schema": "https://json.schemastore.org/claude-code-settings.json" 啟用 IDE 自動補齊與驗證。SKILL.md;agent / command 為 Markdown 附 YAML frontmatter;output-styles 覆寫回覆語氣。plugins 目錄裡包裝的也是這些。settings.json 裡的 hooks.* 欄位以 regex matcher + { type: "command", command, timeout } 形式指向這裡的檔案。設定之書
settings.json · the dissection of a configuration file
Claude Code 行為的幾乎一切 — 工具可否執行、hook 何時觸發、用哪個模型、要不要帶 Co-Authored-By — 都寫在 settings.json 這個純文字 JSON 檔裡。它是 harness 的「遺傳密碼」,一改就變體質。本章把它攤開、逐段標註。
default · 預設模式
permissions.defaultMode 決定「沒列在 allow/deny 的工具」怎麼處理。共六值:default(首次使用時提示)· plan(僅允許分析、不允許修改)· acceptEdits(自動接受本次 session 的檔案編輯)· auto(自動通過基礎安全檢查)· dontAsk(未預先核准者一律拒絕)· bypassPermissions(跳過所有審核,除了受保護目錄)。
override · 覆蓋順序
由外而內:enterprise → 全域 → 專案 → 專案 local。每一層都可以只寫自己想改的欄位,上層其他設定保留。這讓團隊可以把 repo 通用設定簽進版控,個人機器的偏好另放 settings.local.json。
技能之術
Skills · the art of progressive disclosure
Claude Code 的 skill 系統是一套「漸進揭露」(progressive disclosure)機制 — 不把所有 skill 內容塞進 context(那會爆 token),而是分三層揭開:平時只看見 skill 的名字與一行描述;一旦判斷需要,才呼叫 Skill 工具把整份 SKILL.md 載入。每層都有自己的 token 預算,層層加深。
name、description、argument-hint、allowed-tools、model、effort、context(可設 "fork" 用 subagent 跑)、agent、disable-model-invocation、user-invocable、hooks 共 11 個。Skill(skill: "name")。這是一次標準的 tool call。SKILL.md 本體被載入當前 turn,包含完整指示、範例、檢查清單、流程圖 — Claude 依此執行。plugin:name 形式命名,與全域 / 專案 skill 共存於同一份目錄。分身之法
Subagents · parallel dispatch & context isolation
當任務需要大量探索、或包含數個彼此獨立的子問題,Claude Code 可以透過 Agent 工具「分身」— 呼叫一個或多個 subagent 平行工作。每個分身有自己的 system prompt、自己的 context window、自己的工具集;它們彼此看不見,最後只傳回一則文字結果給主 agent。這既是效率手段,也是保護主 context 的手段。
isolation · 為何隔離
Subagent 有自己的 context 是為了保護主對話 — 若一個 Explore 要讀 50 個檔案,那些中間結果若全塞主 context 就爆了。主 agent 只收到最後的「摘要報告」。isolation: "worktree" 更進一步,建立獨立 git worktree 讓分身在自己的檔案副本上工作。
parallelism · 何時並行
當子任務彼此無依賴 — 例如「審查三個檔案」或「同時調查三個 repo」— 可以在同一則訊息裡發出多個 Agent 呼叫。harness 會並行執行,所有結果幾乎同時回來。相依的任務則必須序列化。
協議之橋
MCP & Deferred Tools · the open bridge to external tools
Claude Code 的工具不全是內建的。透過 MCP(Model Context Protocol)— 由 Anthropic 提出的開放協議 — 任何外部程序都能向 harness 註冊自己的工具,被 Claude 當作「原生工具」呼叫。但若所有 MCP 工具的 schema 都一次塞進 context 會爆 token — 於是 Claude Code 又引入了 deferred tools:只把工具「名字」掛在清單,用 ToolSearch 才把完整 schema 拉下來。雙層機制,共同維持 token 紀律。
mcp__{server}__{tool} 的前綴,避免與內建工具衝突。select:)或關鍵字搜尋。