Claude Code 的強大之處遠超你的想像

@marcusyul
西語4 週前 · 2026年6月18日
217K
318
53
30
366

TL;DR

本指南深入探討 Claude Code 的內部架構,涵蓋 Agent 循環、記憶體管理、子 Agent 以及 MCP,協助你將開發工作流程轉型為全自動化的強大引擎。

當我開始使用 Claude Code 時,我把它當作一個聊天工具來用。

我會提出需求,它會回應,然後就這樣結束。

雖然這樣也能用,但隨著時間推移,我開始發現我並沒有完全發揮它的潛力。

我不斷重複相同的提示詞,執行同樣的指令。我並不確定該如何充分利用它。

所以我停了下來,問了自己一個問題:

Claude Code 內部到底是怎麼運作的?

我開始閱讀文件、進行實驗和測試。

而我發現的是:

它並不是靠魔法。它是由一個個具體的元件建構而成,每個元件都有明確的角色。當你理解了它們,其他一切就都說得通了。

→ 如果你總是在重複相同的指令,就把它們變成一個技能

→ 如果它在處理長時間任務時迷失方向,就委派給一個子 Agent

→ 如果有你重複操作的手動步驟,就用鉤子來自動化它們。

理解基本元件,你才會知道該用什麼、何時用、以及為什麼用。

現在,我擁有超過 100 個技能、能自動化過去耗費我數小時的流程,還有能執行程式碼審查和研究我感興趣主題的 agent。

我寫這篇文章是為了與你分享我所學到的一切。

讓我們開始吧。

Agent 迴圈:Claude Code 的核心

Claude Code 是一個 agent。

你給它一個目標,它會持續運作直到達成目標。

它與聊天不同。在聊天中,你問 「如何為我的應用程式加入身分驗證?」,它會解釋步驟。

但你必須自己前往專案、修改程式碼,並測試是否可行。

工作由你來做。

有了 Claude Code,你告訴它 「為我的應用程式加入身分驗證」,它就會處理一切。

它會讀取程式碼、選擇函式庫、撰寫變更,並在完成時通知你。

它有一個目標:加入身分驗證。

它會持續運作直到達成目標。

但它是如何知道每一步之後要做什麼?它如何知道某件事是否成功?它需要某個東西來協調這些決策。

那就是迴圈。

marcus - inline image

一個不斷重複的循環。

Claude Code 執行一個動作、觀察結果、決定下一步要做什麼,然後重新開始。它會一直持續直到目標達成。

如果某件事失敗了,它會回頭、修正,然後繼續。

這個迴圈有 3 個階段:

收集上下文 → 了解它必須做什麼。讀取檔案、分析程式碼、探索專案結構。

採取行動 → 執行變更。編輯檔案、執行指令、安裝依賴項。

驗證結果 → 檢查它做的事是否有效。執行測試、檢查錯誤、如果出錯則修正。

這個迴圈會根據你的要求而調整。

一個簡單的問題可能只需要收集上下文。修復一個錯誤可能需要完整經歷所有三個階段好幾次。

Claude Code 會根據從上一步學到的資訊,來決定每一步需要什麼。而你也是這個迴圈的一部分。

你可以隨時中斷它來重新引導方向、補充上下文,或要求它嘗試另一種方法。

這就是 Claude Code 的核心。

接下來的一切,都是為了讓這個迴圈更強大。

工具:Claude Code 如何在世界中行動

一個大型語言模型(LLM),就設計上來說,只能處理文字。

它接收文字並產生文字。它無法存取你的檔案系統,不能執行指令,也不知道你的專案裡有什麼。

它是孤立的。

那麼,Claude Code 要如何開啟或修改一個檔案?

它使用工具。

工具是 Claude Code 可以呼叫的函式,用來與真實世界互動。

你可以把它想像成手機應用程式。手機本身什麼都不能做:是應用程式賦予它特定能力:拍照、傳送訊息、導航。

工具對 Claude Code 來說也是一樣的。

每次它使用一個工具,就會向系統發送一個包含其需求的請求。系統會執行它並回傳結果。

Claude Code 使用那個結果來決定下一步要做什麼。

text
1你的請求
2
3Claude Code 決定使用哪個工具
4
5┌─────────────────────────────────┐
6│ 讀取 · 編輯 · 寫入 · Bash │
7│ Grep · Glob · WebFetch · WebSearch │
8└─────────────────────────────────┘
9
10系統執行該工具
11
12結果回傳給 Claude Code
13
14完成了嗎? → 否 → 使用另一個工具
15 是 → 回應

Claude Code 內建了針對最常見操作的原生工具:

讀取 / 編輯 / 寫入 → 讀取、修改和建立檔案。最常用的工具。每次 Claude Code 「理解你的程式碼」或「做出變更」時,都是在使用這三個工具。

Bash → 完整存取終端機。如果你能從命令列做的,Claude Code 也能做:安裝依賴項、執行測試、提交程式碼。

Grep 和 Glob → 在專案內搜尋。Glob 依名稱或模式尋找檔案。Grep 在檔案中搜尋特定內容。

WebFetch 和 WebSearch → 網際網路存取。查閱文件、讀取 API、調查它從未見過的錯誤。

回到登入按鈕錯誤的例子。

當 Claude Code 處理那個問題時,它會同時使用多個工具:

→ 它使用 Glob 來尋找元件檔案

→ 它使用 Read 來讀取程式碼並了解發生什麼事

→ 它使用 Edit 來修正錯誤

→ 它使用 Bash 來執行測試並驗證修正成功

這一切都不需要你介入。這就是聊天與 agent 的差別。

上下文與記憶:Claude Code 記住什麼

Claude Code 運作、執行動作、取得結果,並決定下一步。

但是,它要如何知道自己在進程中做過什麼?

這都要歸功於上下文。

上下文是 Claude Code 在當下可用的資訊。每次它執行動作,結果都會累積在上下文中。

不只是你最初的提示詞,還包括它發現的一切:它開啟過的檔案、它在程式碼中發現的東西、它執行的動作以及它們的結果。

這就是為什麼它可以串聯步驟、自我修正,並獨自完成任務。

這個上下文有 2 個問題。

1. 容量有限。 如果會話時間很長,上下文會被填滿,Claude Code 就會開始忘記之前發生的事。稍後你會看到 SubAgent 如何解決這個問題。

2. 每次開啟新的對話就會被清空。 Claude Code 不知道你在哪個專案中、你的團隊如何運作,或是你們已經做過哪些決定。如果你不告訴它,它會推測或詢問你。

記憶體解決了第二個問題。

它是一個 Markdown 檔案系統,你可以在其中儲存 Claude Code 需要知道的一切:你的技術棧、團隊慣例、專案的結構方式。

Claude Code 在每次會話開始時讀取這些檔案,並在你輸入第一行文字之前,將這些資訊注入到上下文中。

沒有記憶:你告訴它「新增一個建立使用者的端點」,Claude Code 會問你:「你用什麼框架?你設定好資料庫了嗎?路由是怎麼結構的?」

有記憶:你告訴它同樣的事,它已經知道你使用 Express 搭配 Prisma,路由放在 /src/routes 下,錯誤由一個集中的中介軟體處理。它會直接開始工作,無需提問。

Claude Code 有 2 個記憶系統:

→ CLAUDE.md - 你撰寫的 Markdown 檔案,包含 Claude Code 需要知道的一切。它們可以存在於不同層級:

→ ~/.claude/CLAUDE.md - 適用於你所有的專案。你個人的偏好放在這裡:你希望它如何撰寫程式碼、你總是使用的慣例。指令必須具體:「使用 2 個空格縮排」比「格式化程式碼」更清楚。

→ /your-project/CLAUDE.md - 專屬於該儲存庫。架構、團隊慣例和重要指令放在這裡。當你開始一個新專案時,執行 /init,Claude Code 會自動產生它。保持在 200 行以內:如果變得太長,Claude Code 會開始忽略指令。而且如果你把它提交到儲存庫,整個團隊就能共享相同的上下文。

→ .claude/rules/ - 模組化規則,會根據檔案類型啟用。當專案成長且你不想把所有東西都放在單一檔案中時很有用。

自動記憶 - Claude Code 自行建立的記憶。當你工作時,它會自己記下筆記:它偵測到的模式、你做的修正、你們一起做的決定。它會儲存在

~/.claude/projects/<project>/memory/ 中,並在每次會話開始時載入。

marcus - inline image

經常檢閱它:Claude Code 可能在你不注意時儲存了不良的實作方式。

提示:你可以執行 /memory 來查看和編輯 Claude Code 記住的所有內容。

鉤子與技能:掌握控制權

1. 鉤子

Claude Code 可以自主運作。

它執行動作、做出決定、向前推進。

但這種自主性有一個比較少被提及的面向:Claude Code 會執行它在每一步認為正確的事情。

如果出了問題,或是它做了你不希望發生的事,事情就已經發生了。

你要如何控制它?使用鉤子。

一個鉤子是一個指令,會在循環中的特定時間點自動執行。在 Claude Code 使用工具之前、在它使用工具之後、當會話結束時。

你可以定義在每個時刻發生什麼事。

關鍵在於鉤子是確定性的。

它們不依賴 Claude Code 「記得」去做某件事。它們總是被執行,沒有例外。

四個主要的鉤子是:

PreToolUse - 在 Claude Code 使用工具之前執行。這是唯一可以阻止動作的鉤子。範例:封鎖任何試圖修改 .env 檔案的指令。

PostToolUse - 在 Claude Code 使用工具之後執行。範例:每次 Claude Code 編輯檔案時自動執行 Prettier。

Notification - 當 Claude Code 需要你的注意時執行。範例:當 Claude Code 完成一個長時間任務時,在你的 Mac 上收到通知。

Stop - 當 Claude Code 完成回應時執行。範例:當 agent 完成工作時自動推送到 staging 環境。

它們在 .claude/settings.json 中設定:

text
1{
2 "hooks": {
3 "PostToolUse": [
4 {
5 "matcher": "Edit|Write",
6 "hooks": [
7 {
8 "type": "command",
9 "command": "npx prettier --write $file_path"
10 }
11 ]
12 }
13 ]
14 }
15}

這個鉤子會在每次 Claude Code 編輯或建立檔案時自動執行 Prettier。

不需要你要求。不需要 Claude Code 記得去做。

沒有鉤子:Claude Code 編輯一個檔案,程式碼保持未格式化狀態,你在下一次提交時才發現。

有鉤子:Claude Code 編輯一個檔案,PostToolUse 自動觸發,Prettier 格式化該檔案,程式碼永遠保持整潔。

鉤子讓你能夠在 agent 的循環中增加保證會發生的行為。不是建議,不是模型可以忽略的指令。而是始終會被執行的規則。

2. 技能

還有另一個問題:一致性。

你要求它做同樣的任務兩次,卻得到不同的結果。每次開啟新的對話,Claude Code 都是從頭開始,不知道你上次是怎麼做的。

要如何解決?使用技能。

一個技能是一個 Markdown 檔案,你可以在其中向 Claude Code 解釋一個任務的確切流程:要檢查什麼、按什麼順序、使用什麼格式、要忽略什麼。

每次那個任務出現時,Claude Code 就會遵循那些指令。

沒有技能:你要求它記錄一個 API,它會產生一些內容,但每次格式都不同。有時包含範例,有時沒有。

有技能:你要求它記錄一個 API,它會遵循你定義的確切流程。永遠有相同的步驟、相同的格式、相同的標準。每次都是一樣的。

要建立一個技能,你需要定義一個具有以下結構的資料夾:

text
1my-skill/
2├── SKILL.md # 主要指令(必要)
3├── template.md # Claude 會完成的模板
4├── examples/
5│ └── sample.md # 預期輸出的範例
6└── scripts/
7 └── validate.sh # Claude 可以執行的腳本

唯一必要的檔案是 SKILL.md。其餘的都是選用的,你可以根據任務需求來添加。

SKILL.md 有 2 個部分:

Frontmatter - 一個包含名稱和說明的 YAML 區塊。名稱是用來手動呼叫它的指令。說明是 Claude Code 用來決定何時自動啟用它的依據。

主體 - 以 Markdown 撰寫的指令。工作流程、標準、輸出格式。

text
1---
2name: api-docs
3description: 記錄 API 端點。當使用者要求記錄 API
4 或提及 "swagger" 或 "端點" 時使用。
5---
6
7## 流程
81. 識別所有端點
92. 針對每個端點:方法、路徑、參數、預期回應
103. 包含一個請求和回應範例
114. 以摘要表格結尾

一旦建立完成,你可以用兩種方式呼叫它。

直接在聊天中輸入 /api-docs,或者直接用自然語言要求 Claude Code。

如果描述符合你的要求,它會自行啟用。

你可以為任何你重複執行且有明確流程的任務建立技能:API 文件、更新日誌、會議摘要、程式碼遷移。

SubAgent:當問題擴大時進行委派

我們已經看到上下文容量有限。

會話時間越長,它就會被填得越滿。當它被填滿時,Claude Code 就會開始遺失關於之前發生過的資訊。

想像你要求它審查整個專案的安全性問題。它讀取數十個檔案、分析程式碼、產生一份詳細報告。

這一切會迅速填滿上下文。

而在它執行這個任務的同時,你的主要對話是被封鎖的。

要如何解決? 使用 SubAgent。

一個 SubAgent 是 Claude Code 的一個獨立實例,它有自己的上下文。

主要 agent 將一個任務委派給它,SubAgent 獨立執行,完成時會回傳一份包含結果的摘要。

主要 agent 的上下文不會被整個過程填滿,只會包含結論。

text
1主要 Agent
2
3"審查專案的安全性問題"
4
5┌─────────────────────────────┐
6│ SubAgent:security-reviewer │
7│ │
8│ 讀取專案檔案 │
9│ 分析程式碼 │
10│ 偵測漏洞 │
11│ 產生報告 │
12└─────────────────────────────┘
13
14將摘要回傳給主要 agent
15
16主要 agent 繼續執行迴圈

不僅如此。

SubAgent 還可以並行執行。

無需依序分析程式碼的三個部分,Claude Code 可以同時將這三個任務都委派出去。

過去需要幾分鐘的事情,現在可能只需要幾秒鐘。

text
1主要 Agent
2
3將工作分割成獨立的任務
4
5┌──────────────┐ ┌──────────────┐ ┌──────────────┐
6│ SubAgent 1 │ │ SubAgent 2 │ │ SubAgent 3 │
7│ │ │ │ │ │
8│ 審查驗證 │ │ 審查資料庫 │ │ 審查外部 │
9│ │ │ │ │ API │
10└──────────────┘ └──────────────┘ └──────────────┘
11 ↓ ↓ ↓
12 主要 agent 收到三個摘要
13
14 繼續執行迴圈

Claude Code 有 3 個會自動使用的原生 SubAgent:

探索 - 一個快速、唯讀的 agent,專門用於搜尋和分析專案。結果會留在 SubAgent 的上下文中,而不是你的。

計畫 - 在規劃模式中啟用。在向你呈現計畫之前,Claude Code 會將專案調查委派給這個 agent。

通用型 - 用於需要同時進行探索和修改的複雜任務。

你也可以建立自己的 SubAgent。

SubAgent 以帶有 YAML frontmatter 的 Markdown 檔案定義,並儲存在 .claude/agents/ 中。

text
1---
2name: security-reviewer
3description: 審查程式碼是否有安全漏洞。
4 當使用者要求進行安全審查時使用。
5tools: Read, Grep, Glob
6---
7
8你是一位安全專家。分析程式碼以找出:
9- SQL 注入
10- 敏感資料暴露
11- 驗證漏洞
12
13最後以一份按嚴重程度排序的發現摘要結尾。

請注意,在 frontmatter 中,我們將工具限制為 Read、Grep 和 Glob。

這個 agent 可以分析,但絕不能修改任何東西。

當你需要精細控制每個 agent 能做的事時,這種工具限制是關鍵。

一旦建立完成,Claude Code 會透過描述自動偵測它,並在任務相符時呼叫它。或者你也可以明確地呼叫它:「使用 security-reviewer agent 來審查這個 PR。」

何時該使用 SubAgent,何時不該?

在任務很長且會產生大量輸出時、當你可以將工作分割成可以並行執行的獨立部分時,或者當你需要一個具有有限工具集的專業 agent 時,使用 SubAgent 是合理的。

對於不會填滿上下文的短任務來說,則不值得這麼做。 協調 SubAgent 會增加複雜性,如果主要 agent 能在兩分鐘內解決任務,就沒有必要這樣做。

MCP:將 Agent 與外部世界連結

工具賦予 Claude Code 在你的機器上行動的能力。

但有一個限制:所有發生的事,都發生在機器內部。

它無法在 GitHub 上開啟 PR、查詢生產資料庫,或在 Jira 中建立工單。要做到這些,你以前必須離開 agent,然後手動完成。

要如何解決? 使用 MCP。

MCP(模型上下文協定) 是一個開放協定,定義了 Claude Code 如何與外部服務連線。

它採用客戶端-伺服器架構運作:Claude Code 是客戶端,而每個外部服務都有自己的 MCP 伺服器,該伺服器會公開它能做的事情。

當你連接一個 MCP 伺服器時,Claude Code 會收到一份可用工具的清單,包含其名稱和說明。

從那時起,它使用這些工具的方式就跟使用原生工具一模一樣。唯一的區別是,動作發生在外部服務中,而不是在你的機器上。

text
1Claude Code
2
3決定使用 GitHub MCP 伺服器的一個工具
4
5┌─────────────────────────────┐
6│ GitHub MCP 伺服器 │
7│ │
8│ 開啟 PR │
9│ 指派審查者 │
10│ 回傳確認 │
11└─────────────────────────────┘
12
13Claude Code 收到結果並繼續

沒有 MCP:你告訴它「我完成變更了,開啟 PR」,但 Claude Code 無法做到。你必須前往 GitHub、填寫表單、指派審查者,然後自己合併。

有 MCP:你告訴它同樣的事,Claude Code 就會開啟 PR、撰寫描述、指派審查者,並在準備好時通知你。這一切都不需要你離開 agent。

一些你今天可以連接的 MCP 伺服器:

GitHub - PR、審查、議題

Postgres / Supabase - 查詢和修改資料庫

Slack - 訊息和頻道

Jira - 工單和專案

針對本機環境的原生工具。針對外部世界的 MCP。

所有部分如何協同運作

Claude Code 是一個 agent:一個接收目標並在自主迴圈中運作直到達成目標的系統。

你在這篇文章中看到的每一個部分,都是為了讓那個迴圈更強大而存在。但理解它們的最佳方式是觀察它們如何相互互動。

案例 1:審查並合併一個 PR

你要求 Claude Code:「審查 PR #42,如果一切正常就合併它。」

→ 它使用 GitHub MCP 來讀取修改過的檔案並了解變更

→ 它將安全性分析委派給一個專門的 SubAgent,以免填滿主要上下文

→ 一個鉤子在本地執行測試並驗證所有測試都通過

→ 如果測試通過,它使用 GitHub MCP 執行合併,你無需碰觸介面

你只寫了一行。Claude Code 協調了四個系統。

案例 2:記錄一個 API 並通知團隊

你要求 Claude Code:「記錄新的端點並讓團隊知道。」

→ 它啟動一個文件技能,該技能定義了確切的格式:要包含什麼、如何組織結構、要加入哪些範例

→ 它使用工具來讀取程式碼並提取端點

→ 一個鉤子在儲存輸出前先格式化它

→ 它使用 Slack MCP 將摘要傳送到團隊頻道

每次你這麼做,結果都會一樣。沒有變化,不需要你解釋任何東西。

一切圍繞著迴圈運轉。

記憶讓每次會話開始時資訊充足。工具用於行動。鉤子用於控制。技能用於標準化。SubAgent 用於擴展。MCP 用於與外部世界連結。

當你理解了這一點,你就理解了 Claude Code。

而且不只是 Claude Code:Cursor、Copilot 以及你從現在開始使用的任何 agent,都建立在相同的基礎上。

名稱會變,介面會變,但迴圈是一樣的。

AI 正在快速進步。

每週都有新東西。但基礎不會那麼頻繁地改變。把這些基礎搞清楚,將能讓你更快地適應,並從未來的發展中獲得更多。

不要只是為了提問而使用 Claude Code。留意它底層發生的事。機會就在那裡。

一些今天就可以開始的起點:

→ 檢閱你的自動記憶,並改善 Claude Code 儲存的內容

→ 如果你的專案還沒有 CLAUDE.md,就建立一個

→ 連接 GitHub MCP

→ 為那些會填滿上下文的任務建立一個 SubAgent

→ 設定一個在每次變更後執行測試的鉤子

就這樣,明天見。

Marcus

一鍵儲存

使用 YouMind AI 深度閱讀爆款文章

保存原文、追問細節、總結觀點,並在一個 AI 工作空間裡把爆款文章沉澱成可複用筆記。

了解 YouMind
寫給創作者

把你的 Markdown 變成乾淨的 𝕏 文章

圖片上傳、表格、程式碼區塊,往 𝕏 上手動重排太痛苦。YouMind 把整篇 Markdown 一鍵轉成乾淨、可直接發佈的 𝕏 文章草稿。

試試 Markdown 轉 𝕏

更多可拆解樣本

近期爆款文章

探索更多爆款文章