SpyBara
Go Premium

Documentation 2026-05-04 22:58 UTC to 2026-05-05 23:00 UTC

20 files changed +1,756 −137. View all changes and history on the product overview
2026
Sun 31 06:39 Sat 30 06:23 Fri 29 06:38 Thu 28 06:37 Wed 27 06:42 Tue 26 06:33 Sun 24 06:25 Sat 23 06:18 Fri 22 06:33 Thu 21 06:36 Wed 20 06:35 Tue 19 06:34 Mon 18 23:59 Sun 17 01:01 Fri 15 22:58 Thu 14 17:02 Wed 13 23:01 Tue 12 22:57 Mon 11 23:00 Sun 10 23:03 Sat 9 04:57 Fri 8 22:00 Thu 7 22:59 Tue 5 23:00 Mon 4 22:58 Sat 2 18:14 Fri 1 18:19

agent-sdk/agent-loop.md +395 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# 代理程式迴圈如何運作

6 

7> 了解訊息生命週期、工具執行、上下文視窗和支援 SDK 代理程式的架構。

8 

9Agent SDK 讓您可以在自己的應用程式中嵌入 Claude Code 的自主代理程式迴圈。SDK 是一個獨立套件,可讓您以程式設計方式控制工具、權限、成本限制和輸出。您不需要安裝 Claude Code CLI 即可使用它。

10 

11當您啟動代理程式時,SDK 會執行與 [Claude Code 相同的執行迴圈](/zh-TW/how-claude-code-works#the-agentic-loop):Claude 評估您的提示、呼叫工具採取行動、接收結果,並重複直到任務完成。本頁說明該迴圈內發生的情況,以便您可以有效地建立、除錯和最佳化代理程式。

12 

13## 迴圈概覽

14 

15每個代理程式工作階段都遵循相同的週期:

16 

17<img src="https://mintcdn.com/claude-code/gvy2DIUELtNA8qD3/images/agent-loop-diagram.svg?fit=max&auto=format&n=gvy2DIUELtNA8qD3&q=85&s=192e1bd6c8a2950a16e5ee0b94e27e26" alt="代理程式迴圈:提示進入、Claude 評估、分支到工具呼叫或最終答案" width="680" height="150" data-path="images/agent-loop-diagram.svg" />

18 

191. **接收提示。** Claude 接收您的提示,以及系統提示、工具定義和對話歷史記錄。SDK 會產生一個 [`SystemMessage`](#message-types),其子類型為 `"init"`,包含工作階段中繼資料。

202. **評估並回應。** Claude 評估目前狀態並決定如何進行。它可能會以文字回應、要求一個或多個工具呼叫,或兩者都有。SDK 會產生一個 [`AssistantMessage`](#message-types),包含文字和任何工具呼叫要求。

213. **執行工具。** SDK 執行每個要求的工具並收集結果。每組工具結果都會回饋給 Claude 以進行下一個決定。您可以使用 [hooks](/zh-TW/agent-sdk/hooks) 在工具執行前攔截、修改或阻止工具呼叫。

224. **重複。** 步驟 2 和 3 重複為一個週期。每個完整週期是一個回合。Claude 繼續呼叫工具並處理結果,直到它產生沒有工具呼叫的回應。

235. **返回結果。** SDK 會產生最終的 [`AssistantMessage`](#message-types),包含文字回應(無工具呼叫),然後是 [`ResultMessage`](#message-types),包含最終文字、代幣使用量、成本和工作階段 ID。

24 

25一個快速問題(「這裡有什麼檔案?」)可能需要一到兩個回合的 `Glob` 呼叫和結果回應。一個複雜的任務(「重構驗證模組並更新測試」)可以在許多回合中鏈接數十個工具呼叫,讀取檔案、編輯程式碼和執行測試,Claude 根據每個結果調整其方法。

26 

27## 回合和訊息

28 

29回合是迴圈內的一個往返:Claude 產生包含工具呼叫的輸出,SDK 執行這些工具,結果自動回饋給 Claude。這發生在不將控制權交回給您的程式碼的情況下。回合繼續進行,直到 Claude 產生沒有工具呼叫的輸出,此時迴圈結束並傳遞最終結果。

30 

31考慮提示「修復 auth.ts 中失敗的測試」的完整工作階段可能是什麼樣子。

32 

33首先,SDK 將您的提示發送給 Claude 並產生一個 [`SystemMessage`](#message-types),包含工作階段中繼資料。然後迴圈開始:

34 

351. **回合 1:** Claude 呼叫 `Bash` 執行 `npm test`。SDK 產生一個 [`AssistantMessage`](#message-types),包含工具呼叫,執行命令,然後產生一個 [`UserMessage`](#message-types),包含輸出(三個失敗)。

362. **回合 2:** Claude 在 `auth.ts` 和 `auth.test.ts` 上呼叫 `Read`。SDK 返回檔案內容並產生一個 `AssistantMessage`。

373. **回合 3:** Claude 呼叫 `Edit` 修復 `auth.ts`,然後呼叫 `Bash` 重新執行 `npm test`。所有三個測試都通過。SDK 產生一個 `AssistantMessage`。

384. **最終回合:** Claude 產生一個純文字回應,沒有工具呼叫:「修復了驗證錯誤,所有三個測試現在都通過了。」SDK 產生最終的 `AssistantMessage`,包含此文字,然後是 [`ResultMessage`](#message-types),包含相同的文字加上成本和使用量。

39 

40那是四個回合:三個有工具呼叫,一個最終純文字回應。

41 

42您可以使用 `max_turns` / `maxTurns` 限制迴圈,它只計算工具使用回合。例如,上面迴圈中的 `max_turns=2` 會在編輯步驟之前停止。您也可以使用 `max_budget_usd` / `maxBudgetUsd` 根據支出閾值限制回合。

43 

44沒有限制,迴圈會執行到 Claude 自己完成為止,這對於範圍明確的任務很好,但對於開放式提示(「改進此程式碼庫」)可能會執行很長時間。設定預算是生產代理程式的好預設值。請參閱下面的 [回合和預算](#turns-and-budget) 以了解選項參考。

45 

46## 訊息類型

47 

48當迴圈執行時,SDK 會產生一串訊息。每個訊息都帶有一個類型,告訴您它來自迴圈的哪個階段。五個核心類型是:

49 

50* **`SystemMessage`:** 工作階段生命週期事件。`subtype` 欄位區分它們:`"init"` 是第一個訊息(工作階段中繼資料),`"compact_boundary"` 在 [壓縮](#automatic-compaction) 後觸發。在 TypeScript 中,壓縮邊界是其自己的 [`SDKCompactBoundaryMessage`](/zh-TW/agent-sdk/typescript#sdkcompactboundarymessage) 類型,而不是 `SDKSystemMessage` 的子類型。

51* **`AssistantMessage`:** 在每個 Claude 回應後發出,包括最終純文字回應。包含該回合的文字內容區塊和工具呼叫區塊。

52* **`UserMessage`:** 在每個工具執行後發出,包含發送回 Claude 的工具結果內容。也針對您在迴圈中期串流的任何使用者輸入發出。

53* **`StreamEvent`:** 僅在啟用部分訊息時發出。包含原始 API 串流事件(文字增量、工具輸入區塊)。請參閱 [串流回應](/zh-TW/agent-sdk/streaming-output)。

54* **`ResultMessage`:** 標記代理程式迴圈的結束。包含最終文字結果、代幣使用量、成本和工作階段 ID。檢查 `subtype` 欄位以確定任務是否成功或達到限制。少數尾隨系統事件(例如 `prompt_suggestion`)可能在其後到達,因此請迭代串流至完成,而不是在結果時中斷。請參閱 [處理結果](#handle-the-result)。

55 

56這五種類型涵蓋了兩個 SDK 中完整的代理程式迴圈生命週期。TypeScript SDK 還會產生額外的可觀測性事件(hook 事件、工具進度、速率限制、任務通知),提供額外詳細資訊,但不需要驅動迴圈。請參閱 [Python 訊息類型參考](/zh-TW/agent-sdk/python#message-types) 和 [TypeScript 訊息類型參考](/zh-TW/agent-sdk/typescript#message-types) 以了解完整清單。

57 

58### 處理訊息

59 

60您處理哪些訊息取決於您正在建立的內容:

61 

62* **僅最終結果:** 處理 `ResultMessage` 以取得輸出、成本以及任務是否成功或達到限制。

63* **進度更新:** 處理 `AssistantMessage` 以查看 Claude 在每個回合中做什麼,包括它呼叫了哪些工具。

64* **即時串流:** 啟用部分訊息(Python 中的 `include_partial_messages`、TypeScript 中的 `includePartialMessages`)以實時取得 `StreamEvent` 訊息。請參閱 [即時串流回應](/zh-TW/agent-sdk/streaming-output)。

65 

66您檢查訊息類型的方式取決於 SDK:

67 

68* **Python:** 使用從 `claude_agent_sdk` 匯入的類別檢查訊息類型,使用 `isinstance()`(例如,`isinstance(message, ResultMessage)`)。

69* **TypeScript:** 檢查 `type` 字串欄位(例如,`message.type === "result"`)。`AssistantMessage` 和 `UserMessage` 將原始 API 訊息包裝在 `.message` 欄位中,因此內容區塊位於 `message.message.content`,而不是 `message.content`。

70 

71<Accordion title="範例:檢查訊息類型並處理結果">

72 <CodeGroup>

73 ```python Python theme={null}

74 from claude_agent_sdk import query, AssistantMessage, ResultMessage

75 

76 async for message in query(prompt="Summarize this project"):

77 if isinstance(message, AssistantMessage):

78 print(f"Turn completed: {len(message.content)} content blocks")

79 if isinstance(message, ResultMessage):

80 if message.subtype == "success":

81 print(message.result)

82 else:

83 print(f"Stopped: {message.subtype}")

84 ```

85 

86 ```typescript TypeScript theme={null}

87 import { query } from "@anthropic-ai/claude-agent-sdk";

88 

89 for await (const message of query({ prompt: "Summarize this project" })) {

90 if (message.type === "assistant") {

91 console.log(`Turn completed: ${message.message.content.length} content blocks`);

92 }

93 if (message.type === "result") {

94 if (message.subtype === "success") {

95 console.log(message.result);

96 } else {

97 console.log(`Stopped: ${message.subtype}`);

98 }

99 }

100 }

101 ```

102 </CodeGroup>

103</Accordion>

104 

105## 工具執行

106 

107工具讓您的代理程式能夠採取行動。沒有工具,Claude 只能以文字回應。有了工具,Claude 可以讀取檔案、執行命令、搜尋程式碼並與外部服務互動。

108 

109### 內建工具

110 

111SDK 包含與 Claude Code 相同的工具:

112 

113| 類別 | 工具 | 它們的作用 |

114| :------- | :-------------------------------------------- | :---------------------- |

115| **檔案操作** | `Read`、`Edit`、`Write` | 讀取、修改和建立檔案 |

116| **搜尋** | `Glob`、`Grep` | 按模式查找檔案、使用正規表達式搜尋內容 |

117| **執行** | `Bash` | 執行 shell 命令、指令碼、git 操作 |

118| **Web** | `WebSearch`、`WebFetch` | 搜尋網路、擷取和解析頁面 |

119| **探索** | `ToolSearch` | 動態查找和按需加載工具,而不是預先加載所有工具 |

120| **協調** | `Agent`、`Skill`、`AskUserQuestion`、`TodoWrite` | 生成子代理程式、呼叫技能、詢問使用者、追蹤任務 |

121 

122除了內建工具,您還可以:

123 

124* **使用 [MCP 伺服器](/zh-TW/agent-sdk/mcp) 連接外部服務**(資料庫、瀏覽器、API)

125* **使用 [自訂工具處理程式](/zh-TW/agent-sdk/custom-tools) 定義自訂工具**

126* **透過 [設定來源](/zh-TW/agent-sdk/claude-code-features) 加載專案技能**以實現可重複使用的工作流程

127 

128### 工具權限

129 

130Claude 根據任務決定呼叫哪些工具,但您控制這些呼叫是否允許執行。您可以自動批准特定工具、完全阻止其他工具,或要求對所有工具進行批准。三個選項一起工作以確定運行的內容:

131 

132* **`allowed_tools` / `allowedTools`** 自動批准列出的工具。具有 `["Read", "Glob", "Grep"]` 在其允許工具清單中的唯讀代理程式會執行這些工具而不提示。未列出的工具仍然可用,但需要權限。

133* **`disallowed_tools` / `disallowedTools`** 阻止列出的工具,無論其他設定如何。請參閱 [權限](/zh-TW/agent-sdk/permissions) 以了解在工具執行前檢查規則的順序。

134* **`permission_mode` / `permissionMode`** 控制對不受允許或拒絕規則涵蓋的工具會發生什麼。請參閱 [權限模式](#permission-mode) 以了解可用的模式。

135 

136您也可以使用 `"Bash(npm *)"` 之類的規則來限定個別工具,以僅允許特定命令。請參閱 [權限](/zh-TW/agent-sdk/permissions) 以了解完整的規則語法。

137 

138當工具被拒絕時,Claude 會收到一條拒絕訊息作為工具結果,通常會嘗試不同的方法或報告它無法繼續。

139 

140### 平行工具執行

141 

142當 Claude 在單個回合中要求多個工具呼叫時,兩個 SDK 可以根據工具同時或順序執行它們。唯讀工具(如 `Read`、`Glob`、`Grep` 和標記為唯讀的 MCP 工具)可以同時執行。修改狀態的工具(如 `Edit`、`Write` 和 `Bash`)順序執行以避免衝突。

143 

144自訂工具預設為順序執行。要為自訂工具啟用平行執行,請在其註釋中設定 `readOnlyHint`。[TypeScript](/zh-TW/agent-sdk/typescript#tool) 和 [Python](/zh-TW/agent-sdk/python#tool) SDK 都使用 MCP SDK 中的此欄位名稱。

145 

146## 控制迴圈如何執行

147 

148您可以限制迴圈執行的回合數、成本、Claude 推理的深度,以及工具是否需要在執行前獲得批准。所有這些都是 [`ClaudeAgentOptions`](/zh-TW/agent-sdk/python#claudeagentoptions)(Python)/ [`Options`](/zh-TW/agent-sdk/typescript#options)(TypeScript)上的欄位。

149 

150### 回合和預算

151 

152| 選項 | 它控制什麼 | 預設值 |

153| :-------------------------------------- | :--------- | :-- |

154| 最大回合(`max_turns` / `maxTurns`) | 最大工具使用往返次數 | 無限制 |

155| 最大預算(`max_budget_usd` / `maxBudgetUsd`) | 停止前的最大成本 | 無限制 |

156 

157當達到任一限制時,SDK 會返回一個 `ResultMessage`,其中包含相應的錯誤子類型(`error_max_turns` 或 `error_max_budget_usd`)。請參閱 [處理結果](#handle-the-result) 以了解如何檢查這些子類型,以及 [`ClaudeAgentOptions`](/zh-TW/agent-sdk/python#claudeagentoptions) / [`Options`](/zh-TW/agent-sdk/typescript#options) 以了解語法。

158 

159### 努力等級

160 

161`effort` 選項控制 Claude 應用多少推理。較低的努力等級每個回合使用更少的代幣並降低成本。並非所有模型都支援努力參數。請參閱 [努力](https://platform.claude.com/docs/en/build-with-claude/effort) 以了解哪些模型支援它。

162 

163| 等級 | 行為 | 適合 |

164| :--------- | :-------- | :----------------------- |

165| `"low"` | 最少推理、快速回應 | 檔案查找、列出目錄 |

166| `"medium"` | 平衡推理 | 常規編輯、標準任務 |

167| `"high"` | 徹底分析 | 重構、除錯 |

168| `"xhigh"` | 擴展推理深度 | 編碼和代理任務;建議在 Opus 4.7 上使用 |

169| `"max"` | 最大推理深度 | 需要深入分析的多步驟問題 |

170 

171如果您不設定 `effort`,Python SDK 會保留參數未設定,並遵循模型的預設行為。TypeScript SDK 預設為 `"high"`。

172 

173<Note>

174 `effort` 在每個回應內交換延遲和代幣成本以獲得推理深度。[擴展思考](https://platform.claude.com/docs/en/build-with-claude/extended-thinking) 是一個單獨的功能,在輸出中產生可見的思考鏈區塊。它們是獨立的:您可以設定 `effort: "low"` 並啟用擴展思考,或 `effort: "max"` 而不啟用它。

175</Note>

176 

177對於執行簡單、範圍明確的任務(如列出檔案或執行單個 grep)的代理程式,使用較低的努力來降低成本和延遲。在頂級 `query()` 選項中設定 `effort` 以用於整個工作階段,或在 [`AgentDefinition`](/zh-TW/agent-sdk/subagents#agentdefinition-configuration) 上使用 `effort` 欄位以每個子代理程式為基礎覆蓋工作階段等級。

178 

179### 權限模式

180 

181權限模式選項(Python 中的 `permission_mode`、TypeScript 中的 `permissionMode`)控制代理程式是否在使用工具前要求批准:

182 

183| 模式 | 行為 |

184| :--------------------- | :------------------------------------------------------------------------------------------------ |

185| `"default"` | 不受允許規則涵蓋的工具會觸發您的批准回呼;沒有回呼意味著拒絕 |

186| `"acceptEdits"` | 自動批准檔案編輯和常見的檔案系統命令(`mkdir`、`touch`、`mv`、`cp` 等);其他 Bash 命令遵循預設規則 |

187| `"plan"` | 唯讀工具執行;Claude 探索並產生計畫而不編輯您的原始檔案 |

188| `"dontAsk"` | 永不提示。由 [權限規則](/zh-TW/settings#permission-settings) 預先批准的工具執行,其他所有工具都被拒絕 |

189| `"auto"`(僅 TypeScript) | 使用模型分類器批准或拒絕每個工具呼叫。請參閱 [自動模式](/zh-TW/permission-modes#eliminate-prompts-with-auto-mode) 以了解可用性和行為 |

190| `"bypassPermissions"` | 執行所有允許的工具而不詢問。在 Unix 上以 root 身份執行時無法使用。僅在隔離環境中使用,其中代理程式的操作無法影響您關心的系統 |

191 

192對於互動式應用程式,使用 `"default"` 和工具批准回呼來顯示批准提示。對於開發機器上的自主代理程式,`"acceptEdits"` 自動批准檔案編輯和常見的檔案系統命令(`mkdir`、`touch`、`mv`、`cp` 等),同時仍然在允許規則後面限制其他 `Bash` 命令。為 CI、容器或其他隔離環境保留 `"bypassPermissions"`。請參閱 [權限](/zh-TW/agent-sdk/permissions) 以了解完整詳細資訊。

193 

194### 模型

195 

196如果您不設定 `model`,SDK 會使用 Claude Code 的預設值,這取決於您的驗證方法和訂閱。明確設定它(例如,`model="claude-sonnet-4-6"`)以固定特定模型或使用較小的模型以獲得更快、更便宜的代理程式。請參閱 [模型](https://platform.claude.com/docs/en/about-claude/models) 以了解可用的 ID。

197 

198## 上下文視窗

199 

200上下文視窗是工作階段期間可用於 Claude 的資訊總量。它不會在工作階段內的回合之間重置。所有內容都會累積:系統提示、工具定義、對話歷史記錄、工具輸入和工具輸出。在回合之間保持相同的內容(系統提示、工具定義、CLAUDE.md)會自動 [提示快取](https://platform.claude.com/docs/en/build-with-claude/prompt-caching),這會減少重複前綴的成本和延遲。

201 

202### 什麼消耗上下文

203 

204以下是每個元件如何影響 SDK 中上下文的方式:

205 

206| 來源 | 何時加載 | 影響 |

207| :--------------- | :------------------------------------------------------------------ | :----------------------------------------------------------------------------- |

208| **系統提示** | 每個請求 | 小的固定成本,始終存在 |

209| **CLAUDE.md 檔案** | 工作階段開始,透過 [`settingSources`](/zh-TW/agent-sdk/claude-code-features) | 每個請求中的完整內容(但提示快取,因此只有第一個請求支付完整成本) |

210| **工具定義** | 每個請求 | 每個工具添加其架構;使用 [MCP 工具搜尋](/zh-TW/agent-sdk/mcp#mcp-tool-search) 按需加載工具,而不是一次全部加載 |

211| **對話歷史記錄** | 在回合中累積 | 隨著每個回合增長:提示、回應、工具輸入、工具輸出 |

212| **技能描述** | 工作階段開始,透過設定來源 | 簡短摘要;完整內容僅在呼叫時加載 |

213 

214大型工具輸出消耗大量上下文。讀取大檔案或執行具有詳細輸出的命令可以在單個回合中使用數千個代幣。上下文在回合中累積,因此具有許多工具呼叫的較長工作階段比短工作階段建立更多上下文。

215 

216### 自動壓縮

217 

218當上下文視窗接近其限制時,SDK 會自動壓縮對話:它總結較舊的歷史記錄以釋放空間,保持您最近的交換和關鍵決定完整。SDK 在串流中發出一個 `type: "system"` 和 `subtype: "compact_boundary"` 的訊息(在 Python 中這是一個 `SystemMessage`;在 TypeScript 中它是一個單獨的 `SDKCompactBoundaryMessage` 類型)。

219 

220壓縮用摘要替換較舊的訊息,因此對話早期的特定指示可能不會被保留。持久規則應該在 CLAUDE.md 中(透過 [`settingSources`](/zh-TW/agent-sdk/claude-code-features) 加載),而不是在初始提示中,因為 CLAUDE.md 內容在每個請求時重新注入。

221 

222您可以透過多種方式自訂壓縮行為:

223 

224* **CLAUDE.md 中的摘要指示:** 壓縮器像任何其他上下文一樣讀取您的 CLAUDE.md,因此您可以包含一個部分,告訴它在摘要時要保留什麼。部分標題是自由格式的(不是魔法字串);壓縮器根據意圖匹配。

225* **`PreCompact` hook:** 在壓縮發生前執行自訂邏輯,例如存檔完整成績單。hook 接收一個 `trigger` 欄位(`manual` 或 `auto`)。請參閱 [hooks](/zh-TW/agent-sdk/hooks)。

226* **手動壓縮:** 將 `/compact` 作為提示字串發送以按需觸發壓縮。(以這種方式發送的斜線命令是 SDK 輸入,而不是僅限 CLI 的快捷方式。請參閱 [SDK 中的斜線命令](/zh-TW/agent-sdk/slash-commands)。)

227 

228<Accordion title="範例:CLAUDE.md 中的摘要指示">

229 將一個部分添加到您的專案的 CLAUDE.md,告訴壓縮器要保留什麼。標題名稱不是特殊的;使用任何清晰的標籤。

230 

231 ```markdown CLAUDE.md theme={null}

232 # Summary instructions

233 

234 When summarizing this conversation, always preserve:

235 - The current task objective and acceptance criteria

236 - File paths that have been read or modified

237 - Test results and error messages

238 - Decisions made and the reasoning behind them

239 ```

240</Accordion>

241 

242### 保持上下文高效

243 

244長時間執行代理程式的幾個策略:

245 

246* **為子任務使用子代理程式。** 每個子代理程式以新鮮的對話開始(沒有先前的訊息歷史記錄,儘管它確實加載自己的系統提示和專案級上下文,如 CLAUDE.md)。它看不到父級的回合,只有其最終回應作為工具結果返回給父級。主代理程式的上下文增長該摘要,而不是完整的子任務成績單。請參閱 [子代理程式繼承什麼](/zh-TW/agent-sdk/subagents#what-subagents-inherit) 以了解詳細資訊。

247* **選擇性地使用工具。** 每個工具定義都佔用上下文空間。在 [`AgentDefinition`](/zh-TW/agent-sdk/subagents#agentdefinition-configuration) 上使用 `tools` 欄位將子代理程式限制在它們需要的最小集合,並使用 [MCP 工具搜尋](/zh-TW/agent-sdk/mcp#mcp-tool-search) 按需加載工具,而不是預先加載所有工具。

248* **監視 MCP 伺服器成本。** 每個 MCP 伺服器將其所有工具架構添加到每個請求。具有許多工具的幾個伺服器可以在代理程式執行任何工作之前消耗大量上下文。`ToolSearch` 工具可以透過按需加載工具而不是預先加載所有工具來幫助。請參閱 [MCP 工具搜尋](/zh-TW/agent-sdk/mcp#mcp-tool-search) 以了解配置。

249* **為常規任務使用較低的努力。** 為僅需要讀取檔案或列出目錄的代理程式設定 [努力](#effort-level) 為 `"low"`。這會減少代幣使用量和成本。

250 

251有關每個功能上下文成本的詳細分解,請參閱 [了解上下文成本](/zh-TW/features-overview#understand-context-costs)。

252 

253## 工作階段和連續性

254 

255與 SDK 的每次互動都會建立或繼續一個工作階段。從 `ResultMessage.session_id`(在兩個 SDK 中都可用)捕獲工作階段 ID 以稍後恢復。TypeScript SDK 也將其公開為初始化 `SystemMessage` 上的直接欄位;在 Python 中,它嵌套在 `SystemMessage.data` 中。

256 

257當您恢復時,先前回合的完整上下文會被恢復:讀取的檔案、執行的分析和採取的操作。您也可以分叉一個工作階段以分支到不同的方法,而不修改原始工作階段。

258 

259請參閱 [工作階段管理](/zh-TW/agent-sdk/sessions) 以了解恢復、繼續和分叉模式的完整指南。

260 

261<Note>

262 在 Python 中,`ClaudeSDKClient` 在多個呼叫中自動處理工作階段 ID。請參閱 [Python SDK 參考](/zh-TW/agent-sdk/python#choosing-between-query-and-claudesdkclient) 以了解詳細資訊。

263</Note>

264 

265## 處理結果

266 

267當迴圈結束時,`ResultMessage` 告訴您發生了什麼並給您輸出。`subtype` 欄位(在兩個 SDK 中都可用)是檢查終止狀態的主要方式。

268 

269| 結果子類型 | 發生了什麼 | `result` 欄位可用? |

270| :------------------------------------ | :----------------------- | :------------: |

271| `success` | Claude 正常完成了任務 | 是 |

272| `error_max_turns` | 在完成前達到 `maxTurns` 限制 | 否 |

273| `error_max_budget_usd` | 在完成前達到 `maxBudgetUsd` 限制 | 否 |

274| `error_during_execution` | 錯誤中斷了迴圈(例如,API 失敗或取消的請求) | 否 |

275| `error_max_structured_output_retries` | 結構化輸出驗證在配置的重試限制後失敗 | 否 |

276 

277`result` 欄位(最終文字輸出)僅在 `success` 變體上存在,因此在讀取它之前始終檢查子類型。所有結果子類型都帶有 `total_cost_usd`、`usage`、`num_turns` 和 `session_id`,因此您可以追蹤成本並在錯誤後恢復。在 Python 中,`total_cost_usd` 和 `usage` 被類型化為可選的,在某些錯誤路徑上可能是 `None`,因此在格式化它們之前進行保護。請參閱 [追蹤成本和使用量](/zh-TW/agent-sdk/cost-tracking) 以了解有關解釋 `usage` 欄位的詳細資訊。

278 

279結果還包括一個 `stop_reason` 欄位(TypeScript 中的 `string | null`、Python 中的 `str | None`),指示模型為什麼在最後一個回合停止生成。常見值是 `end_turn`(模型正常完成)、`max_tokens`(達到輸出代幣限制)和 `refusal`(模型拒絕了請求)。在錯誤結果子類型上,`stop_reason` 帶有迴圈結束前最後一個助手回應的值。要檢測拒絕,請檢查 `stop_reason === "refusal"`(TypeScript)或 `stop_reason == "refusal"`(Python)。請參閱 [`SDKResultMessage`](/zh-TW/agent-sdk/typescript#sdkresultmessage)(TypeScript)或 [`ResultMessage`](/zh-TW/agent-sdk/python#resultmessage)(Python)以了解完整類型。

280 

281## Hooks

282 

283[Hooks](/zh-TW/agent-sdk/hooks) 是在迴圈中的特定點觸發的回呼:在工具執行前、執行後、代理程式完成時等。一些常用的 hooks 是:

284 

285| Hook | 何時觸發 | 常見用途 |

286| :------------------------------- | :----------- | :------------ |

287| `PreToolUse` | 在工具執行前 | 驗證輸入、阻止危險命令 |

288| `PostToolUse` | 在工具返回後 | 審計輸出、觸發副作用 |

289| `UserPromptSubmit` | 當提示被發送時 | 將額外上下文注入提示 |

290| `Stop` | 當代理程式完成時 | 驗證結果、保存工作階段狀態 |

291| `SubagentStart` / `SubagentStop` | 當子代理程式生成或完成時 | 追蹤和聚合平行任務結果 |

292| `PreCompact` | 在上下文壓縮前 | 在摘要前存檔完整成績單 |

293 

294Hooks 在您的應用程式進程中執行,而不是在代理程式的上下文視窗內,因此它們不消耗上下文。Hooks 也可以短路迴圈:拒絕工具呼叫的 `PreToolUse` hook 會阻止它執行,Claude 會收到拒絕訊息。

295 

296兩個 SDK 都支援上述所有事件。TypeScript SDK 包含 Python 尚不支援的額外事件。請參閱 [使用 hooks 控制執行](/zh-TW/agent-sdk/hooks) 以了解完整的事件清單、每個 SDK 的可用性和完整的回呼 API。

297 

298## 將其全部整合在一起

299 

300此範例將本頁的關鍵概念組合成一個修復失敗測試的單個代理程式。它使用允許的工具(自動批准,以便代理程式自主執行)、專案設定和回合和推理努力的安全限制來配置代理程式。當迴圈執行時,它捕獲工作階段 ID 以進行潛在恢復、處理最終結果並列印總成本。

301 

302<CodeGroup>

303 ```python Python theme={null}

304 import asyncio

305 from claude_agent_sdk import query, ClaudeAgentOptions, ResultMessage

306 

307 

308 async def run_agent():

309 session_id = None

310 

311 async for message in query(

312 prompt="Find and fix the bug causing test failures in the auth module",

313 options=ClaudeAgentOptions(

314 allowed_tools=[

315 "Read",

316 "Edit",

317 "Bash",

318 "Glob",

319 "Grep",

320 ], # Listing tools here auto-approves them (no prompting)

321 setting_sources=[

322 "project"

323 ], # Load CLAUDE.md, skills, hooks from current directory

324 max_turns=30, # Prevent runaway sessions

325 effort="high", # Thorough reasoning for complex debugging

326 ),

327 ):

328 # Handle the final result

329 if isinstance(message, ResultMessage):

330 session_id = message.session_id # Save for potential resumption

331 

332 if message.subtype == "success":

333 print(f"Done: {message.result}")

334 elif message.subtype == "error_max_turns":

335 # Agent ran out of turns. Resume with a higher limit.

336 print(f"Hit turn limit. Resume session {session_id} to continue.")

337 elif message.subtype == "error_max_budget_usd":

338 print("Hit budget limit.")

339 else:

340 print(f"Stopped: {message.subtype}")

341 if message.total_cost_usd is not None:

342 print(f"Cost: ${message.total_cost_usd:.4f}")

343 

344 

345 asyncio.run(run_agent())

346 ```

347 

348 ```typescript TypeScript theme={null}

349 import { query } from "@anthropic-ai/claude-agent-sdk";

350 

351 let sessionId: string | undefined;

352 

353 for await (const message of query({

354 prompt: "Find and fix the bug causing test failures in the auth module",

355 options: {

356 allowedTools: ["Read", "Edit", "Bash", "Glob", "Grep"], // Listing tools here auto-approves them (no prompting)

357 settingSources: ["project"], // Load CLAUDE.md, skills, hooks from current directory

358 maxTurns: 30, // Prevent runaway sessions

359 effort: "high" // Thorough reasoning for complex debugging

360 }

361 })) {

362 // Save the session ID to resume later if needed

363 if (message.type === "system" && message.subtype === "init") {

364 sessionId = message.session_id;

365 }

366 

367 // Handle the final result

368 if (message.type === "result") {

369 if (message.subtype === "success") {

370 console.log(`Done: ${message.result}`);

371 } else if (message.subtype === "error_max_turns") {

372 // Agent ran out of turns. Resume with a higher limit.

373 console.log(`Hit turn limit. Resume session ${sessionId} to continue.`);

374 } else if (message.subtype === "error_max_budget_usd") {

375 console.log("Hit budget limit.");

376 } else {

377 console.log(`Stopped: ${message.subtype}`);

378 }

379 console.log(`Cost: $${message.total_cost_usd.toFixed(4)}`);

380 }

381 }

382 ```

383</CodeGroup>

384 

385## 後續步驟

386 

387現在您了解了迴圈,以下是根據您正在建立的內容去往何處:

388 

389* **還沒有執行代理程式?** 從 [快速入門](/zh-TW/agent-sdk/quickstart) 開始,以安裝 SDK 並查看完整範例端到端執行。

390* **準備好連接到您的專案?** [加載 CLAUDE.md、技能和檔案系統 hooks](/zh-TW/agent-sdk/claude-code-features),以便代理程式自動遵循您的專案約定。

391* **建立互動式 UI?** 啟用 [串流](/zh-TW/agent-sdk/streaming-output) 以在迴圈執行時顯示即時文字和工具呼叫。

392* **需要對代理程式可以做什麼進行更嚴格的控制?** 使用 [權限](/zh-TW/agent-sdk/permissions) 鎖定工具存取,並使用 [hooks](/zh-TW/agent-sdk/hooks) 在工具執行前審計、阻止或轉換工具呼叫。

393* **執行長期或昂貴的任務?** 將隔離的工作卸載到 [子代理程式](/zh-TW/agent-sdk/subagents) 以保持主上下文精簡。

394 

395有關代理程式迴圈的更廣泛概念圖片(不是 SDK 特定的),請參閱 [Claude Code 如何運作](/zh-TW/how-claude-code-works)。

agent-sdk/hooks.md +11 −11

Details

236您的回調返回一個具有兩類欄位的物件:236您的回調返回一個具有兩類欄位的物件:

237 237 

238* **頂級欄位**控制對話:`systemMessage` 將訊息注入對話中,模型可見,`continue`(Python 中的 `continue_`)決定此 hook 後代理是否繼續執行。238* **頂級欄位**控制對話:`systemMessage` 將訊息注入對話中,模型可見,`continue`(Python 中的 `continue_`)決定此 hook 後代理是否繼續執行。

239* **`hookSpecificOutput`** 控制目前操作。內部的欄位取決於 hook 事件類型。對於 `PreToolUse` hooks,這是您設定 `permissionDecision`(`"allow"`、`"deny"` 或 `"ask"`)、`permissionDecisionReason` 和 `updatedInput` 的地方。在 TypeScript SDK 中,`permissionDecision` 也接受 `"defer"` 以結束查詢並[稍後繼續](/zh-TW/hooks#defer-a-tool-call-for-later);此值在 Python SDK 中不可用。對於 `PostToolUse` hooks,您可以設定 `additionalContext` 以將資訊附加到工具結果。239* **`hookSpecificOutput`** 控制目前操作。內部的欄位取決於 hook 事件類型。對於 `PreToolUse` hooks,這是您設定 `permissionDecision`(`"allow"`、`"deny"` 或 `"ask"`)、`permissionDecisionReason` 和 `updatedInput` 的地方。在 TypeScript SDK 中,`permissionDecision` 也接受 `"defer"` 以結束查詢並[稍後繼續](/zh-TW/hooks#defer-a-tool-call-for-later);此值在 Python SDK 中不可用。對於 `PostToolUse` hooks,您可以設定 `additionalContext` 以將資訊附加到工具結果,或設定 `updatedToolOutput` 以在 Claude 看到之前完全替換工具的輸出

240 240 

241返回 `{}` 以允許操作而不進行變更。SDK 回調 hooks 使用與 [Claude Code shell 命令 hooks](/zh-TW/hooks#json-output) 相同的 JSON 輸出格式,其記錄每個欄位和事件特定選項。對於 SDK 類型定義,請參閱 [TypeScript](/zh-TW/agent-sdk/typescript#sync-hook-json-output) 和 [Python](/zh-TW/agent-sdk/python#sync-hook-json-output) SDK 參考。241返回 `{}` 以允許操作而不進行變更。SDK 回調 hooks 使用與 [Claude Code shell 命令 hooks](/zh-TW/hooks#json-output) 相同的 JSON 輸出格式,其記錄每個欄位和事件特定選項。對於 SDK 類型定義,請參閱 [TypeScript](/zh-TW/agent-sdk/typescript#sync-hook-json-output) 和 [Python](/zh-TW/agent-sdk/python#sync-hook-json-output) SDK 參考。

242 242 


417 ```417 ```

418</CodeGroup>418</CodeGroup>

419 419 

420### 鏈接多個 hooks420### 註冊多個 hooks

421 421 

422Hooks 按它們在陣列中出現的順序執行保持每個 hook 專注於單一責任並為複雜邏輯鏈接多個 hooks422當事件觸發時,所有匹配的 hooks 並行執行對於權限決定,最嚴格的結果獲勝:單個 `deny` 會阻止工具呼叫無論其他 hooks 返回什麼。由於完成順序是不確定的,請編寫每個 hook 以獨立行動,而不是依賴另一個 hook 已執行。

423 

424下面的範例為每個工具呼叫註冊三個獨立檢查:

423 425 

424<CodeGroup>426<CodeGroup>

425 ```python Python theme={null}427 ```python Python theme={null}

426 options = ClaudeAgentOptions(428 options = ClaudeAgentOptions(

427 hooks={429 hooks={

428 "PreToolUse": [430 "PreToolUse": [

429 HookMatcher(hooks=[rate_limiter]), # 首先:檢查速率限制431 HookMatcher(hooks=[authorization_check]),

430 HookMatcher(hooks=[authorization_check]), # 其次:驗證權限432 HookMatcher(hooks=[input_validator]),

431 HookMatcher(hooks=[input_sanitizer]), # 第三:清理輸入433 HookMatcher(hooks=[audit_logger]),

432 HookMatcher(hooks=[audit_logger]), # 最後:記錄操作

433 ]434 ]

434 }435 }

435 )436 )


439 const options = {440 const options = {

440 hooks: {441 hooks: {

441 PreToolUse: [442 PreToolUse: [

442 { hooks: [rateLimiter] }, // 首先:檢查速率限制443 { hooks: [authorizationCheck] },

443 { hooks: [authorizationCheck] }, // 其次:驗證權限444 { hooks: [inputValidator] },

444 { hooks: [inputSanitizer] }, // 第三:清理輸入445 { hooks: [auditLogger] }

445 { hooks: [auditLogger] } // 最後:記錄操作

446 ]446 ]

447 }447 }

448 };448 };

agent-sdk/migration-guide.md +289 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# 遷移至 Claude Agent SDK

6 

7> 將 Claude Code TypeScript 和 Python SDK 遷移至 Claude Agent SDK 的指南

8 

9## 概述

10 

11Claude Code SDK 已重新命名為 **Claude Agent SDK**,其文檔已重新組織。此變更反映了該 SDK 在構建超越編碼任務的 AI 代理方面的更廣泛功能。

12 

13## 變更內容

14 

15| 方面 | 舊版 | 新版 |

16| :--------------- | :-------------------------- | :------------------------------- |

17| **套件名稱 (TS/JS)** | `@anthropic-ai/claude-code` | `@anthropic-ai/claude-agent-sdk` |

18| **Python 套件** | `claude-code-sdk` | `claude-agent-sdk` |

19| **文檔位置** | Claude Code 文檔 | API 指南 → Agent SDK 部分 |

20 

21<Note>

22 **文檔變更:** Agent SDK 文檔已從 Claude Code 文檔移至 API 指南下的專用 [Agent SDK](/zh-TW/agent-sdk/overview) 部分。Claude Code 文檔現在專注於 CLI 工具和自動化功能。

23</Note>

24 

25## 遷移步驟

26 

27### 針對 TypeScript/JavaScript 專案

28 

29**1. 卸載舊套件:**

30 

31```bash theme={null}

32npm uninstall @anthropic-ai/claude-code

33```

34 

35**2. 安裝新套件:**

36 

37```bash theme={null}

38npm install @anthropic-ai/claude-agent-sdk

39```

40 

41**3. 更新您的匯入:**

42 

43將所有匯入從 `@anthropic-ai/claude-code` 變更為 `@anthropic-ai/claude-agent-sdk`:

44 

45```typescript theme={null}

46// 之前

47import { query, tool, createSdkMcpServer } from "@anthropic-ai/claude-code";

48 

49// 之後

50import { query, tool, createSdkMcpServer } from "@anthropic-ai/claude-agent-sdk";

51```

52 

53**4. 更新 package.json 依賴項:**

54 

55如果您在 `package.json` 中列出了該套件,請更新它:

56 

57之前:

58 

59```json theme={null}

60{

61 "dependencies": {

62 "@anthropic-ai/claude-code": "^0.0.42"

63 }

64}

65```

66 

67之後:

68 

69```json theme={null}

70{

71 "dependencies": {

72 "@anthropic-ai/claude-agent-sdk": "^0.2.0"

73 }

74}

75```

76 

77就這樣!無需進行其他代碼變更。

78 

79### 針對 Python 專案

80 

81**1. 卸載舊套件:**

82 

83```bash theme={null}

84pip uninstall claude-code-sdk

85```

86 

87**2. 安裝新套件:**

88 

89```bash theme={null}

90pip install claude-agent-sdk

91```

92 

93**3. 更新您的匯入:**

94 

95將所有匯入從 `claude_code_sdk` 變更為 `claude_agent_sdk`:

96 

97```python theme={null}

98# 之前

99from claude_code_sdk import query, ClaudeCodeOptions

100 

101# 之後

102from claude_agent_sdk import query, ClaudeAgentOptions

103```

104 

105**4. 更新類型名稱:**

106 

107將 `ClaudeCodeOptions` 變更為 `ClaudeAgentOptions`:

108 

109```python theme={null}

110# 之前

111from claude_code_sdk import query, ClaudeCodeOptions

112 

113options = ClaudeCodeOptions(model="claude-opus-4-7")

114 

115# 之後

116from claude_agent_sdk import query, ClaudeAgentOptions

117 

118options = ClaudeAgentOptions(model="claude-opus-4-7")

119```

120 

121**5. 檢查 [重大變更](#breaking-changes)**

122 

123進行完成遷移所需的任何代碼變更。

124 

125## 重大變更

126 

127<Warning>

128 為了改進隔離和明確配置,Claude Agent SDK v0.1.0 為從 Claude Code SDK 遷移的用戶引入了重大變更。在遷移前請仔細檢查本部分。

129</Warning>

130 

131### Python:ClaudeCodeOptions 重新命名為 ClaudeAgentOptions

132 

133**變更內容:** Python SDK 類型 `ClaudeCodeOptions` 已重新命名為 `ClaudeAgentOptions`。

134 

135**遷移:**

136 

137```python theme={null}

138# 之前 (claude-code-sdk)

139from claude_code_sdk import query, ClaudeCodeOptions

140 

141options = ClaudeCodeOptions(model="claude-opus-4-7", permission_mode="acceptEdits")

142 

143# 之後 (claude-agent-sdk)

144from claude_agent_sdk import query, ClaudeAgentOptions

145 

146options = ClaudeAgentOptions(model="claude-opus-4-7", permission_mode="acceptEdits")

147```

148 

149**為什麼變更:** 類型名稱現在與「Claude Agent SDK」品牌相符,並在 SDK 的命名約定中提供一致性。

150 

151### 系統提示不再是預設值

152 

153**變更內容:** SDK 不再預設使用 Claude Code 的系統提示。

154 

155**遷移:**

156 

157<CodeGroup>

158 ```typescript TypeScript theme={null}

159 // 之前 (v0.0.x) - 預設使用 Claude Code 的系統提示

160 const result = query({ prompt: "Hello" });

161 

162 // 之後 (v0.1.0) - 預設使用最小系統提示

163 // 要獲得舊行為,明確請求 Claude Code 的預設值:

164 const result = query({

165 prompt: "Hello",

166 options: {

167 systemPrompt: { type: "preset", preset: "claude_code" }

168 }

169 });

170 

171 // 或使用自訂系統提示:

172 const result = query({

173 prompt: "Hello",

174 options: {

175 systemPrompt: "You are a helpful coding assistant"

176 }

177 });

178 ```

179 

180 ```python Python theme={null}

181 # 之前 (v0.0.x) - 預設使用 Claude Code 的系統提示

182 async for message in query(prompt="Hello"):

183 print(message)

184 

185 # 之後 (v0.1.0) - 預設使用最小系統提示

186 # 要獲得舊行為,明確請求 Claude Code 的預設值:

187 from claude_agent_sdk import query, ClaudeAgentOptions

188 

189 async for message in query(

190 prompt="Hello",

191 options=ClaudeAgentOptions(

192 system_prompt={"type": "preset", "preset": "claude_code"} # 使用預設值

193 ),

194 ):

195 print(message)

196 

197 # 或使用自訂系統提示:

198 async for message in query(

199 prompt="Hello",

200 options=ClaudeAgentOptions(system_prompt="You are a helpful coding assistant"),

201 ):

202 print(message)

203 ```

204</CodeGroup>

205 

206**為什麼變更:** 為 SDK 應用程式提供更好的控制和隔離。您現在可以構建具有自訂行為的代理,而無需繼承 Claude Code 的 CLI 焦點指令。

207 

208### 設定來源預設值

209 

210此預設值在 v0.1.0 中曾短暫變更,然後被還原,因此無需進行遷移操作。

211 

212**目前行為:** 在 `query()` 上省略 `settingSources` 會載入用戶、專案和本地檔案系統設定,與 CLI 相符。這包括 `~/.claude/settings.json`、`.claude/settings.json`、`.claude/settings.local.json`、CLAUDE.md 檔案和自訂命令。

213 

214要從檔案系統設定中隔離運行,請傳遞空陣列:

215 

216<CodeGroup>

217 ```typescript TypeScript theme={null}

218 const result = query({

219 prompt: "Hello",

220 options: {

221 settingSources: [] // 未載入檔案系統設定

222 }

223 });

224 

225 // 或僅載入特定來源:

226 const result = query({

227 prompt: "Hello",

228 options: {

229 settingSources: ["project"] // 僅專案設定

230 }

231 });

232 ```

233 

234 ```python Python theme={null}

235 from claude_agent_sdk import query, ClaudeAgentOptions

236 

237 async for message in query(

238 prompt="Hello",

239 options=ClaudeAgentOptions(setting_sources=[]), # 未載入檔案系統設定

240 ):

241 print(message)

242 

243 # 或僅載入特定來源:

244 async for message in query(

245 prompt="Hello",

246 options=ClaudeAgentOptions(

247 setting_sources=["project"] # 僅專案設定

248 ),

249 ):

250 print(message)

251 ```

252</CodeGroup>

253 

254隔離對於 CI/CD 管道、已部署的應用程式、測試環境和多租戶系統特別重要,其中本地自訂不應洩露。

255 

256<Note>

257 SDK v0.1.0 曾短暫預設為未載入任何設定;這在後續版本中被還原。Python SDK 0.1.59 及更早版本將空清單視為與省略選項相同,因此在依賴 `setting_sources=[]` 之前請升級。請參閱 [settingSources 不控制的內容](/zh-TW/agent-sdk/claude-code-features#what-settingsources-does-not-control) 以了解即使 `settingSources` 為 `[]` 時也會讀取的輸入。

258</Note>

259 

260## 為什麼重新命名?

261 

262Claude Code SDK 最初是為編碼任務設計的,但它已發展成為構建所有類型 AI 代理的強大框架。新名稱「Claude Agent SDK」更好地反映了其功能:

263 

264* 構建業務代理(法律助手、財務顧問、客戶支援)

265* 建立專門的編碼代理(SRE 機器人、安全審查員、代碼審查代理)

266* 為任何領域開發自訂代理,具有工具使用、MCP 整合等功能

267 

268## 獲取幫助

269 

270如果您在遷移過程中遇到任何問題:

271 

272**針對 TypeScript/JavaScript:**

273 

2741. 檢查所有匯入是否已更新為使用 `@anthropic-ai/claude-agent-sdk`

2752. 驗證您的 package.json 具有新套件名稱

2763. 執行 `npm install` 以確保依賴項已更新

277 

278**針對 Python:**

279 

2801. 檢查所有匯入是否已更新為使用 `claude_agent_sdk`

2812. 驗證您的 requirements.txt 或 pyproject.toml 具有新套件名稱

2823. 執行 `pip install claude-agent-sdk` 以確保套件已安裝

283 

284## 後續步驟

285 

286* 探索 [Agent SDK 概述](/zh-TW/agent-sdk/overview) 以了解可用功能

287* 查看 [TypeScript SDK 參考](/zh-TW/agent-sdk/typescript) 以取得詳細的 API 文檔

288* 檢查 [Python SDK 參考](/zh-TW/agent-sdk/python) 以取得 Python 特定文檔

289* 了解 [自訂工具](/zh-TW/agent-sdk/custom-tools) 和 [MCP 整合](/zh-TW/agent-sdk/mcp)

agent-sdk/permissions.md +242 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# 設定權限

6 

7> 使用權限模式、hooks 和宣告式允許/拒絕規則來控制您的代理程式如何使用工具。

8 

9Claude Agent SDK 提供權限控制來管理 Claude 如何使用工具。使用權限模式和規則來定義自動允許的內容,並使用 [`canUseTool` 回呼](/zh-TW/agent-sdk/user-input) 在執行時處理其他所有情況。

10 

11<Note>

12 本頁涵蓋權限模式和規則。若要建立互動式核准流程,讓使用者在執行時核准或拒絕工具請求,請參閱 [處理核准和使用者輸入](/zh-TW/agent-sdk/user-input)。

13</Note>

14 

15## 權限如何被評估

16 

17當 Claude 請求工具時,SDK 會按照以下順序檢查權限:

18 

19<Steps>

20 <Step title="Hooks">

21 首先執行 [hooks](/zh-TW/agent-sdk/hooks)。Hook 可以直接拒絕呼叫或將其傳遞。返回 `allow` 的 hook 不會跳過下面的拒絕和詢問規則;無論 hook 結果如何,這些規則都會被評估。

22 </Step>

23 

24 <Step title="拒絕規則">

25 檢查 `deny` 規則(來自 `disallowed_tools` 和 [settings.json](/zh-TW/settings#permission-settings))。如果拒絕規則符合,工具會被阻止,即使在 `bypassPermissions` 模式下也是如此。

26 </Step>

27 

28 <Step title="權限模式">

29 應用活躍的 [權限模式](#permission-modes)。`bypassPermissions` 批准到達此步驟的所有內容。`acceptEdits` 批准檔案操作。其他模式會通過。

30 </Step>

31 

32 <Step title="允許規則">

33 檢查 `allow` 規則(來自 `allowed_tools` 和 settings.json)。如果規則符合,工具會被批准。

34 </Step>

35 

36 <Step title="canUseTool 回呼">

37 如果上述任何步驟都未解決,請呼叫您的 [`canUseTool` 回呼](/zh-TW/agent-sdk/user-input) 以做出決定。在 `dontAsk` 模式下,此步驟會被跳過,工具會被拒絕。

38 </Step>

39</Steps>

40 

41<img src="https://mintcdn.com/claude-code/FEspvVUyRuaWjm0s/images/agent-sdk/permissions-flow.svg?fit=max&auto=format&n=FEspvVUyRuaWjm0s&q=85&s=a1759b0cf4541281a9fdd8f5348228e8" alt="Permission evaluation flow diagram" width="920" height="260" data-path="images/agent-sdk/permissions-flow.svg" />

42 

43本頁重點關注 **允許和拒絕規則** 以及 **權限模式**。對於其他步驟:

44 

45* **Hooks:** 執行自訂程式碼以允許、拒絕或修改工具請求。請參閱 [使用 hooks 控制執行](/zh-TW/agent-sdk/hooks)。

46* **canUseTool 回呼:** 在執行時提示使用者核准。請參閱 [處理核准和使用者輸入](/zh-TW/agent-sdk/user-input)。

47 

48## 允許和拒絕規則

49 

50`allowed_tools` 和 `disallowed_tools`(TypeScript:`allowedTools` / `disallowedTools`)將條目新增到上述評估流程中的允許和拒絕規則清單。它們控制工具呼叫是否被批准,而不是工具是否可供 Claude 使用。

51 

52| 選項 | 效果 |

53| :------------------------------- | :----------------------------------------------------------- |

54| `allowed_tools=["Read", "Grep"]` | `Read` 和 `Grep` 會自動批准。此處未列出的工具仍然存在,並會通過權限模式和 `canUseTool`。 |

55| `disallowed_tools=["Bash"]` | `Bash` 始終被拒絕。拒絕規則會首先被檢查,並在每個權限模式中都有效,包括 `bypassPermissions`。 |

56 

57對於鎖定的代理程式,將 `allowedTools` 與 `permissionMode: "dontAsk"` 配對。列出的工具會被批准;其他任何工具都會被直接拒絕,而不是提示:

58 

59```typescript theme={null}

60const options = {

61 allowedTools: ["Read", "Glob", "Grep"],

62 permissionMode: "dontAsk"

63};

64```

65 

66<Warning>

67 **`allowed_tools` 不會限制 `bypassPermissions`。** `allowed_tools` 只會預先批准您列出的工具。未列出的工具不會被任何允許規則符合,並會通過權限模式,其中 `bypassPermissions` 會批准它們。將 `allowed_tools=["Read"]` 與 `permission_mode="bypassPermissions"` 一起設定仍然會批准每個工具,包括 `Bash`、`Write` 和 `Edit`。如果您需要 `bypassPermissions` 但想要阻止特定工具,請使用 `disallowed_tools`。

68</Warning>

69 

70您也可以在 `.claude/settings.json` 中宣告式地設定允許、拒絕和詢問規則。當啟用 `project` 設定來源時,這些規則會被讀取,預設 `query()` 選項就是這樣。如果您明確設定 `setting_sources`(TypeScript:`settingSources`),請包含 `"project"` 以便它們適用。請參閱 [權限設定](/zh-TW/settings#permission-settings) 以了解規則語法。

71 

72## 權限模式

73 

74權限模式提供對 Claude 如何使用工具的全域控制。您可以在呼叫 `query()` 時設定權限模式,或在串流會話期間動態更改它。

75 

76### 可用模式

77 

78SDK 支援這些權限模式:

79 

80| 模式 | 描述 | 工具行為 |

81| :------------------- | :------- | :---------------------------------------------------------------------------------------------- |

82| `default` | 標準權限行為 | 無自動批准;不符合的工具會觸發您的 `canUseTool` 回呼 |

83| `dontAsk` | 拒絕而不是提示 | 任何未被 `allowed_tools` 或規則預先批准的內容都會被拒絕;`canUseTool` 永遠不會被呼叫 |

84| `acceptEdits` | 自動接受檔案編輯 | 檔案編輯和 [檔案系統操作](#accept-edits-mode-acceptedits)(`mkdir`、`rm`、`mv` 等)會自動被批准 |

85| `bypassPermissions` | 繞過所有權限檢查 | 所有工具執行時無需權限提示(謹慎使用) |

86| `plan` | 規劃模式 | 唯讀工具執行;Claude 分析和規劃而不編輯您的原始檔案 |

87| `auto`(僅 TypeScript) | 模型分類批准 | 模型分類器批准或拒絕每個工具呼叫。請參閱 [Auto 模式](/zh-TW/permission-modes#eliminate-prompts-with-auto-mode) 以了解可用性 |

88 

89<Warning>

90 **子代理程式繼承:** 當父代理程式使用 `bypassPermissions`、`acceptEdits` 或 `auto` 時,所有子代理程式都會繼承該模式,且無法按子代理程式覆蓋。子代理程式可能有不同的系統提示和行為限制較少,因此繼承 `bypassPermissions` 會授予它們完整的自主系統存取權,無需任何核准提示。

91</Warning>

92 

93### 設定權限模式

94 

95您可以在開始查詢時設定一次權限模式,或在會話活躍時動態更改它。

96 

97<Tabs>

98 <Tab title="在查詢時">

99 在建立查詢時傳遞 `permission_mode`(Python)或 `permissionMode`(TypeScript)。此模式適用於整個會話,除非動態更改。

100 

101 <CodeGroup>

102 ```python Python theme={null}

103 import asyncio

104 from claude_agent_sdk import query, ClaudeAgentOptions

105 

106 

107 async def main():

108 async for message in query(

109 prompt="Help me refactor this code",

110 options=ClaudeAgentOptions(

111 permission_mode="default", # Set the mode here

112 ),

113 ):

114 if hasattr(message, "result"):

115 print(message.result)

116 

117 

118 asyncio.run(main())

119 ```

120 

121 ```typescript TypeScript theme={null}

122 import { query } from "@anthropic-ai/claude-agent-sdk";

123 

124 async function main() {

125 for await (const message of query({

126 prompt: "Help me refactor this code",

127 options: {

128 permissionMode: "default" // Set the mode here

129 }

130 })) {

131 if ("result" in message) {

132 console.log(message.result);

133 }

134 }

135 }

136 

137 main();

138 ```

139 </CodeGroup>

140 </Tab>

141 

142 <Tab title="在串流期間">

143 呼叫 `set_permission_mode()`(Python)或 `setPermissionMode()`(TypeScript)以在會話中途更改模式。新模式會立即對所有後續工具請求生效。這讓您可以從限制性開始,並隨著信任建立而放寬權限,例如在檢查 Claude 的初始方法後切換到 `acceptEdits`。

144 

145 <CodeGroup>

146 ```python Python theme={null}

147 import asyncio

148 from claude_agent_sdk import ClaudeSDKClient, ClaudeAgentOptions

149 

150 

151 async def main():

152 async with ClaudeSDKClient(

153 options=ClaudeAgentOptions(

154 permission_mode="default", # Start in default mode

155 )

156 ) as client:

157 await client.query("Help me refactor this code")

158 

159 # Change mode dynamically mid-session

160 await client.set_permission_mode("acceptEdits")

161 

162 # Process messages with the new permission mode

163 async for message in client.receive_response():

164 if hasattr(message, "result"):

165 print(message.result)

166 

167 

168 asyncio.run(main())

169 ```

170 

171 ```typescript TypeScript theme={null}

172 import { query } from "@anthropic-ai/claude-agent-sdk";

173 

174 async function main() {

175 const q = query({

176 prompt: "Help me refactor this code",

177 options: {

178 permissionMode: "default" // Start in default mode

179 }

180 });

181 

182 // Change mode dynamically mid-session

183 await q.setPermissionMode("acceptEdits");

184 

185 // Process messages with the new permission mode

186 for await (const message of q) {

187 if ("result" in message) {

188 console.log(message.result);

189 }

190 }

191 }

192 

193 main();

194 ```

195 </CodeGroup>

196 </Tab>

197</Tabs>

198 

199### 模式詳細資訊

200 

201#### 接受編輯模式(`acceptEdits`)

202 

203自動批准檔案操作,以便 Claude 可以編輯程式碼而無需提示。其他工具(例如不是檔案系統操作的 Bash 命令)仍然需要正常權限。

204 

205**自動批准的操作:**

206 

207* 檔案編輯(Edit、Write 工具)

208* 檔案系統命令:`mkdir`、`touch`、`rm`、`rmdir`、`mv`、`cp`、`sed`

209 

210兩者都只適用於工作目錄或 `additionalDirectories` 內的路徑。該範圍外的路徑和對受保護路徑的寫入仍然會提示。

211 

212**使用時機:** 您信任 Claude 的編輯並想要更快的迭代,例如在原型設計期間或在隔離目錄中工作時。

213 

214#### 不詢問模式(`dontAsk`)

215 

216將任何權限提示轉換為拒絕。由 `allowed_tools`、`settings.json` 允許規則或作為 hook 執行的工具會正常執行。其他所有內容都會被拒絕,而不呼叫 `canUseTool`。

217 

218**使用時機:** 您想要為無頭代理程式提供固定的明確工具表面,並且更喜歡硬拒絕而不是無聲依賴 `canUseTool` 不存在。

219 

220#### 繞過權限模式(`bypassPermissions`)

221 

222自動批准所有工具使用而無需提示。Hooks 仍然執行,如果需要可以阻止操作。

223 

224<Warning>

225 謹慎使用。Claude 在此模式下具有完整的系統存取權。僅在您信任所有可能操作的受控環境中使用。

226 

227 `allowed_tools` 不會限制此模式。每個工具都會被批准,而不僅僅是您列出的工具。拒絕規則(`disallowed_tools`)、明確的 `ask` 規則和 hooks 會在模式檢查之前被評估,仍然可以阻止工具。

228</Warning>

229 

230#### 規劃模式(`plan`)

231 

232將 Claude 限制為唯讀工具。Claude 可以讀取檔案並執行唯讀 shell 命令來探索程式碼庫,但不編輯您的原始檔案。Claude 可能會使用 `AskUserQuestion` 在最終確定計畫之前澄清需求。請參閱 [處理核准和使用者輸入](/zh-TW/agent-sdk/user-input#handle-clarifying-questions) 以處理這些提示。

233 

234**使用時機:** 您想要 Claude 提出變更建議而不執行它們,例如在程式碼審查期間或當您需要在進行變更之前核准變更時。

235 

236## 相關資源

237 

238對於權限評估流程中的其他步驟:

239 

240* [處理核准和使用者輸入](/zh-TW/agent-sdk/user-input):互動式核准提示和澄清問題

241* [Hooks 指南](/zh-TW/agent-sdk/hooks):在代理程式生命週期中的關鍵點執行自訂程式碼

242* [權限規則](/zh-TW/settings#permission-settings):`settings.json` 中的宣告式允許/拒絕規則

Details

113#### 參數113#### 參數

114 114 

115| 參數 | 類型 | 描述 |115| 參數 | 類型 | 描述 |

116| :------------- | :----------------------------------------------- | :------------------------- |116| :------------- | :---------------------------------------------- | :------------------------- |

117| `name` | `str` | tool 的唯一識別碼 |117| `name` | `str` | tool 的唯一識別碼 |

118| `description` | `str` | tool 功能的人類可讀描述 |118| `description` | `str` | tool 功能的人類可讀描述 |

119| `input_schema` | `type \| dict[str, Any]` | 定義 tool 輸入參數的架構(見下文) |119| `input_schema` | `type \| dict[str, Any]` | 定義 tool 輸入參數的架構(見下文) |

120| `annotations` | [`ToolAnnotations`](#tool-annotations)` \| None` | 可選的 MCP tool 註解,為客戶端提供行為提示 |120| `annotations` | [`ToolAnnotations`](#toolannotations)` \| None` | 可選的 MCP tool 註解,為客戶端提供行為提示 |

121 121 

122#### 輸入架構選項122#### 輸入架構選項

123 123 


250#### 參數250#### 參數

251 251 

252| 參數 | 類型 | 預設 | 描述 |252| 參數 | 類型 | 預設 | 描述 |

253| :------------------ | :------------ | :----- | :---------------------------------------------------- |253| :------------------ | :------------ | :----- | :----------------------------------------------------- |

254| `directory` | `str \| None` | `None` | 列出 sessions 的目錄。省略時,返回所有專案中的 sessions |254| `directory` | `str \| None` | `None` | 列出 sessions 的目錄。省略時,返回所有專案中的 sessions |

255| `limit` | `int \| None` | `None` | 返回的最大 sessions 數 |255| `limit` | `int \| None` | `None` | 返回的最大 sessions 數 |

256| `include_worktrees` | `bool` | `True` | 當 `directory` 在 git 儲存庫內時,包括所有 worktree 路徑中的 sessions |256| `include_worktrees` | `bool` | `True` | 當 `directory` 在 git 儲存庫內時,包括所有 worktrees 路徑中的 sessions |

257 257 

258#### 返回類型:`SDKSessionInfo`258#### 返回類型:`SDKSessionInfo`

259 259 


267| `first_prompt` | `str \| None` | session 中的第一個有意義的使用者提示 |267| `first_prompt` | `str \| None` | session 中的第一個有意義的使用者提示 |

268| `git_branch` | `str \| None` | session 結束時的 Git 分支 |268| `git_branch` | `str \| None` | session 結束時的 Git 分支 |

269| `cwd` | `str \| None` | session 的工作目錄 |269| `cwd` | `str \| None` | session 的工作目錄 |

270| `tag` | `str \| None` | 使用者設定的 session 標籤(見 [`tag_session()`](#tag-session)) |270| `tag` | `str \| None` | 使用者設定的 session 標籤(見 [`tag_session()`](#tag_session)) |

271| `created_at` | `int \| None` | session 建立時間(自紀元以來的毫秒數) |271| `created_at` | `int \| None` | session 建立時間(自紀元以來的毫秒數) |

272 272 

273#### 範例273#### 範例


343| `session_id` | `str` | 必需 | 要查詢的 session 的 UUID |343| `session_id` | `str` | 必需 | 要查詢的 session 的 UUID |

344| `directory` | `str \| None` | `None` | 專案目錄路徑。省略時,搜尋所有專案目錄 |344| `directory` | `str \| None` | `None` | 專案目錄路徑。省略時,搜尋所有專案目錄 |

345 345 

346返回 [`SDKSessionInfo`](#return-type-sdk-session-info),如果找不到 session,則返回 `None`。346返回 [`SDKSessionInfo`](#return-type-sdksessioninfo),如果找不到 session,則返回 `None`。

347 347 

348#### 範例348#### 範例

349 349 


381 381 

382#### 範例382#### 範例

383 383 

384重新命名最近的 session,以便稍後更容易找到。新標題在後續讀取時出現在 [`SDKSessionInfo.custom_title`](#return-type-sdk-session-info) 中。384重新命名最近的 session,以便稍後更容易找到。新標題在後續讀取時出現在 [`SDKSessionInfo.custom_title`](#return-type-sdksessioninfo) 中。

385 385 

386```python theme={null}386```python theme={null}

387from claude_agent_sdk import list_sessions, rename_session387from claude_agent_sdk import list_sessions, rename_session


476| `set_permission_mode(mode)` | 變更目前 session 的權限模式 |476| `set_permission_mode(mode)` | 變更目前 session 的權限模式 |

477| `set_model(model)` | 變更目前 session 的模型。傳遞 `None` 以重設為預設值 |477| `set_model(model)` | 變更目前 session 的模型。傳遞 `None` 以重設為預設值 |

478| `rewind_files(user_message_id)` | 將檔案還原到指定使用者消息時的狀態。需要 `enable_file_checkpointing=True`。見 [檔案 checkpointing](/zh-TW/agent-sdk/file-checkpointing) |478| `rewind_files(user_message_id)` | 將檔案還原到指定使用者消息時的狀態。需要 `enable_file_checkpointing=True`。見 [檔案 checkpointing](/zh-TW/agent-sdk/file-checkpointing) |

479| `get_mcp_status()` | 取得所有已配置 MCP 伺服器的狀態。返回 [`McpStatusResponse`](#mcp-status-response) |479| `get_mcp_status()` | 取得所有已配置 MCP 伺服器的狀態。返回 [`McpStatusResponse`](#mcpstatusresponse) |

480| `reconnect_mcp_server(server_name)` | 重試連接到失敗或斷開連接的 MCP 伺服器 |480| `reconnect_mcp_server(server_name)` | 重試連接到失敗或斷開連接的 MCP 伺服器 |

481| `toggle_mcp_server(server_name, enabled)` | 在 session 中途啟用或停用 MCP 伺服器。停用會移除其 tools |481| `toggle_mcp_server(server_name, enabled)` | 在 session 中途啟用或停用 MCP 伺服器。停用會移除其 tools |

482| `stop_task(task_id)` | 停止執行中的背景任務。[`TaskNotificationMessage`](#task-notification-message) 的狀態為 `"stopped"` 在消息流中跟隨 |482| `stop_task(task_id)` | 停止執行中的背景任務。[`TaskNotificationMessage`](#tasknotificationmessage) 的狀態為 `"stopped"` 在消息流中跟隨 |

483| `get_server_info()` | 取得伺服器資訊,包括 session ID 和功能 |483| `get_server_info()` | 取得伺服器資訊,包括 session ID 和功能 |

484| `disconnect()` | 從 Claude 斷開連接 |484| `disconnect()` | 從 Claude 斷開連接 |

485 485 


791 effort: Literal["low", "medium", "high", "max"] | None = None791 effort: Literal["low", "medium", "high", "max"] | None = None

792 enable_file_checkpointing: bool = False792 enable_file_checkpointing: bool = False

793 session_store: SessionStore | None = None793 session_store: SessionStore | None = None

794 session_store_flush: SessionStoreFlushMode = "batched"

794```795```

795 796 

796| 屬性 | 類型 | 預設 | 描述 |797| 屬性 | 類型 | 預設 | 描述 |

797| :---------------------------- | :---------------------------------------------------------------------------------------- | :------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |798| :---------------------------- | :--------------------------------------------------------------------------------------- | :------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

798| `tools` | `list[str] \| ToolsPreset \| None` | `None` | Tools 配置。使用 `{"type": "preset", "preset": "claude_code"}` 以取得 Claude Code 的預設 tools |799| `tools` | `list[str] \| ToolsPreset \| None` | `None` | Tools 配置。使用 `{"type": "preset", "preset": "claude_code"}` 以取得 Claude Code 的預設 tools |

799| `allowed_tools` | `list[str]` | `[]` | 自動批准的 tools,無需提示。這不會限制 Claude 僅使用這些 tools;未列出的 tools 會進入 `permission_mode` 和 `can_use_tool`。使用 `disallowed_tools` 來阻止 tools。見 [權限](/zh-TW/agent-sdk/permissions#allow-and-deny-rules) |800| `allowed_tools` | `list[str]` | `[]` | 自動批准的 tools,無需提示。這不會限制 Claude 僅使用這些 tools;未列出的 tools 會進入 `permission_mode` 和 `can_use_tool`。使用 `disallowed_tools` 來阻止 tools。見 [權限](/zh-TW/agent-sdk/permissions#allow-and-deny-rules) |

800| `system_prompt` | `str \| SystemPromptPreset \| None` | `None` | 系統提示配置。傳遞字串以取得自訂提示,或使用 `{"type": "preset", "preset": "claude_code"}` 以取得 Claude Code 的系統提示。新增 `"append"` 以擴展預設 |801| `system_prompt` | `str \| SystemPromptPreset \| None` | `None` | 系統提示配置。傳遞字串以取得自訂提示,或使用 `{"type": "preset", "preset": "claude_code"}` 以取得 Claude Code 的系統提示。新增 `"append"` 以擴展預設 |


808| `enable_file_checkpointing` | `bool` | `False` | 啟用檔案變更追蹤以進行倒帶。見 [檔案 checkpointing](/zh-TW/agent-sdk/file-checkpointing) |809| `enable_file_checkpointing` | `bool` | `False` | 啟用檔案變更追蹤以進行倒帶。見 [檔案 checkpointing](/zh-TW/agent-sdk/file-checkpointing) |

809| `model` | `str \| None` | `None` | 要使用的 Claude 模型 |810| `model` | `str \| None` | `None` | 要使用的 Claude 模型 |

810| `fallback_model` | `str \| None` | `None` | 如果主模型失敗,使用的備用模型 |811| `fallback_model` | `str \| None` | `None` | 如果主模型失敗,使用的備用模型 |

811| `betas` | `list[SdkBeta]` | `[]` | 要啟用的測試版功能。見 [`SdkBeta`](#sdk-beta) 以了解可用選項 |812| `betas` | `list[SdkBeta]` | `[]` | 要啟用的測試版功能。見 [`SdkBeta`](#sdkbeta) 以了解可用選項 |

812| `output_format` | `dict[str, Any] \| None` | `None` | 結構化回應的輸出格式(例如 `{"type": "json_schema", "schema": {...}}`)。見 [結構化輸出](/zh-TW/agent-sdk/structured-outputs) 以了解詳情 |813| `output_format` | `dict[str, Any] \| None` | `None` | 結構化回應的輸出格式(例如 `{"type": "json_schema", "schema": {...}}`)。見 [結構化輸出](/zh-TW/agent-sdk/structured-outputs) 以了解詳情 |

813| `permission_prompt_tool_name` | `str \| None` | `None` | 權限提示的 MCP tool 名稱 |814| `permission_prompt_tool_name` | `str \| None` | `None` | 權限提示的 MCP tool 名稱 |

814| `cwd` | `str \| Path \| None` | `None` | 目前工作目錄 |815| `cwd` | `str \| Path \| None` | `None` | 目前工作目錄 |


820| `max_buffer_size` | `int \| None` | `None` | 緩衝 CLI stdout 時的最大位元組數 |821| `max_buffer_size` | `int \| None` | `None` | 緩衝 CLI stdout 時的最大位元組數 |

821| `debug_stderr` | `Any` | `sys.stderr` | *已棄用* - 用於偵錯輸出的類似檔案的物件。改用 `stderr` 回呼 |822| `debug_stderr` | `Any` | `sys.stderr` | *已棄用* - 用於偵錯輸出的類似檔案的物件。改用 `stderr` 回呼 |

822| `stderr` | `Callable[[str], None] \| None` | `None` | 用於 CLI stderr 輸出的回呼函數 |823| `stderr` | `Callable[[str], None] \| None` | `None` | 用於 CLI stderr 輸出的回呼函數 |

823| `can_use_tool` | [`CanUseTool`](#can-use-tool) ` \| None` | `None` | tool 權限回呼函數。見 [權限類型](#can-use-tool) 以了解詳情 |824| `can_use_tool` | [`CanUseTool`](#canusetool) ` \| None` | `None` | tool 權限回呼函數。見 [權限類型](#canusetool) 以了解詳情 |

824| `hooks` | `dict[HookEvent, list[HookMatcher]] \| None` | `None` | 用於攔截事件的 hook 配置 |825| `hooks` | `dict[HookEvent, list[HookMatcher]] \| None` | `None` | 用於攔截事件的 hook 配置 |

825| `user` | `str \| None` | `None` | 使用者識別碼 |826| `user` | `str \| None` | `None` | 使用者識別碼 |

826| `include_partial_messages` | `bool` | `False` | 包括部分消息串流事件。啟用時,[`StreamEvent`](#stream-event) 消息會被產生 |827| `include_partial_messages` | `bool` | `False` | 包括部分消息串流事件。啟用時,[`StreamEvent`](#streamevent) 消息會被產生 |

827| `fork_session` | `bool` | `False` | 使用 `resume` 繼續時,分叉到新 session ID 而不是繼續原始 session |828| `fork_session` | `bool` | `False` | 使用 `resume` 繼續時,分叉到新 session ID 而不是繼續原始 session |

828| `agents` | `dict[str, AgentDefinition] \| None` | `None` | 以程式設計方式定義的子代理 |829| `agents` | `dict[str, AgentDefinition] \| None` | `None` | 以程式設計方式定義的子代理 |

829| `plugins` | `list[SdkPluginConfig]` | `[]` | 從本地路徑載入自訂外掛程式。見 [外掛程式](/zh-TW/agent-sdk/plugins) 以了解詳情 |830| `plugins` | `list[SdkPluginConfig]` | `[]` | 從本地路徑載入自訂外掛程式。見 [外掛程式](/zh-TW/agent-sdk/plugins) 以了解詳情 |

830| `sandbox` | [`SandboxSettings`](#sandbox-settings) ` \| None` | `None` | 以程式設計方式配置沙箱行為。見 [沙箱設定](#sandbox-settings) 以了解詳情 |831| `sandbox` | [`SandboxSettings`](#sandboxsettings) ` \| None` | `None` | 以程式設計方式配置沙箱行為。見 [沙箱設定](#sandboxsettings) 以了解詳情 |

831| `setting_sources` | `list[SettingSource] \| None` | `None`(CLI 預設值:所有來源) | 控制要載入哪些檔案系統設定。傳遞 `[]` 以停用使用者、專案和本地設定。無論如何都會載入受管原則設定。見 [使用 Claude Code 功能](/zh-TW/agent-sdk/claude-code-features#what-settingsources-does-not-control) |832| `setting_sources` | `list[SettingSource] \| None` | `None`(CLI 預設值:所有來源) | 控制要載入哪些檔案系統設定。傳遞 `[]` 以停用使用者、專案和本地設定。無論如何都會載入受管原則設定。見 [使用 Claude Code 功能](/zh-TW/agent-sdk/claude-code-features#what-settingsources-does-not-control) |

832| `max_thinking_tokens` | `int \| None` | `None` | *已棄用* - 思考區塊的最大令牌數。改用 `thinking` |833| `max_thinking_tokens` | `int \| None` | `None` | *已棄用* - 思考區塊的最大令牌數。改用 `thinking` |

833| `thinking` | [`ThinkingConfig`](#thinking-config) ` \| None` | `None` | 控制擴展思考行為。優先於 `max_thinking_tokens` |834| `thinking` | [`ThinkingConfig`](#thinkingconfig) ` \| None` | `None` | 控制擴展思考行為。優先於 `max_thinking_tokens` |

834| `effort` | `Literal["low", "medium", "high", "max"] \| None` | `None` | 思考深度的努力級別 |835| `effort` | `Literal["low", "medium", "high", "max"] \| None` | `None` | 思考深度的努力級別 |

835| `session_store` | [`SessionStore`](/zh-TW/agent-sdk/session-storage#the-session-store-interface) ` \| None` | `None` | 將 session 記錄鏡像到外部後端,以便任何主機都可以繼續它們。見 [將 sessions 持久化到外部儲存](/zh-TW/agent-sdk/session-storage) |836| `session_store` | [`SessionStore`](/zh-TW/agent-sdk/session-storage#the-sessionstore-interface) ` \| None` | `None` | 將 session 記錄鏡像到外部後端,以便任何主機都可以繼續它們。見 [將 sessions 持久化到外部儲存](/zh-TW/agent-sdk/session-storage) |

837| `session_store_flush` | `Literal["batched", "eager"]` | `"batched"` | 何時將鏡像的記錄項目刷新到 `session_store`。`"batched"` 每轉一次或當緩衝區填滿時刷新;`"eager"` 在每個框架後觸發背景刷新。當 `session_store` 為 `None` 時忽略 |

836 838 

837### `OutputFormat`839### `OutputFormat`

838 840 


1031| `maxTurns` | 否 | 代理停止前的最大代理轉數 |1033| `maxTurns` | 否 | 代理停止前的最大代理轉數 |

1032| `background` | 否 | 當呼叫時將此代理作為非阻塞背景任務執行 |1034| `background` | 否 | 當呼叫時將此代理作為非阻塞背景任務執行 |

1033| `effort` | 否 | 此代理的推理努力級別。接受命名級別或整數 |1035| `effort` | 否 | 此代理的推理努力級別。接受命名級別或整數 |

1034| `permissionMode` | 否 | 此代理內 tool 執行的權限模式。見 [`PermissionMode`](#permission-mode) |1036| `permissionMode` | 否 | 此代理內 tool 執行的權限模式。見 [`PermissionMode`](#permissionmode) |

1035 1037 

1036<Note>1038<Note>

1037 `AgentDefinition` 欄位名稱使用 camelCase,例如 `disallowedTools`、`permissionMode` 和 `maxTurns`。這些名稱直接對應到與 TypeScript SDK 共享的線路格式。這與 `ClaudeAgentOptions` 不同,後者對等頂級欄位(例如 `disallowed_tools` 和 `permission_mode`)使用 Python snake\_case。因為 `AgentDefinition` 是 dataclass,傳遞 snake\_case 關鍵字在構造時會引發 `TypeError`。1039 `AgentDefinition` 欄位名稱使用 camelCase,例如 `disallowedTools`、`permissionMode` 和 `maxTurns`。這些名稱直接對應到與 TypeScript SDK 共享的線路格式。這與 `ClaudeAgentOptions` 不同,後者對等頂級欄位(例如 `disallowed_tools` 和 `permission_mode`)使用 Python snake\_case。因為 `AgentDefinition` 是 dataclass,傳遞 snake\_case 關鍵字在構造時會引發 `TypeError`。


1045PermissionMode = Literal[1047PermissionMode = Literal[

1046 "default", # Standard permission behavior1048 "default", # Standard permission behavior

1047 "acceptEdits", # Auto-accept file edits1049 "acceptEdits", # Auto-accept file edits

1048 "plan", # Planning mode - no execution1050 "plan", # Planning mode - read-only tools only

1049 "dontAsk", # Deny anything not pre-approved instead of prompting1051 "dontAsk", # Deny anything not pre-approved instead of prompting

1050 "bypassPermissions", # Bypass all permission checks (use with caution)1052 "bypassPermissions", # Bypass all permission checks (use with caution)

1051]1053]


1081```1083```

1082 1084 

1083| 欄位 | 類型 | 描述 |1085| 欄位 | 類型 | 描述 |

1084| :------------ | :----------------------- | :------------- |1086| :------------ | :----------------------- | :------------------------------------------------------------------------------------------------------------------------------------- |

1085| `signal` | `Any \| None` | 保留供未來中止信號支援 |1087| `signal` | `Any \| None` | 保留供未來中止信號支援 |

1086| `suggestions` | `list[PermissionUpdate]` | 來自 CLI 的權限更新建議 |1088| `suggestions` | `list[PermissionUpdate]` | 來自 CLI 的權限更新建議。Bash 提示包括具有 `localSettings` 目的地的建議,因此在 `updated_permissions` 中返回它會將規則寫入 `.claude/settings.local.json` 並在 sessions 中持久化。 |

1087 1089 

1088### `PermissionResult`1090### `PermissionResult`

1089 1091 


1289 1291 

1290### `McpServerStatusConfig`1292### `McpServerStatusConfig`

1291 1293 

1292MCP 伺服器的配置,如 [`get_mcp_status()`](#methods) 所報告。這是所有 [`McpServerConfig`](#mcp-server-config) 傳輸變體加上用於透過 claude.ai 代理的伺服器的僅輸出 `claudeai-proxy` 變體的聯合。1294MCP 伺服器的配置,如 [`get_mcp_status()`](#methods) 所報告。這是所有 [`McpServerConfig`](#mcpserverconfig) 傳輸變體加上用於透過 claude.ai 代理的伺服器的僅輸出 `claudeai-proxy` 變體的聯合。

1293 1295 

1294```python theme={null}1296```python theme={null}

1295McpServerStatusConfig = (1297McpServerStatusConfig = (


1301)1303)

1302```1304```

1303 1305 

1304`McpSdkServerConfigStatus` 是 [`McpSdkServerConfig`](#mcp-sdk-server-config) 的可序列化形式,僅具有 `type`(`"sdk"`)和 `name`(`str`)欄位;進程內 `instance` 被省略。`McpClaudeAIProxyServerConfig` 具有 `type`(`"claudeai-proxy"`)、`url`(`str`)和 `id`(`str`)欄位。1306`McpSdkServerConfigStatus` 是 [`McpSdkServerConfig`](#mcpsdkserverconfig) 的可序列化形式,僅具有 `type`(`"sdk"`)和 `name`(`str`)欄位;進程內 `instance` 被省略。`McpClaudeAIProxyServerConfig` 具有 `type`(`"claudeai-proxy"`)、`url`(`str`)和 `id`(`str`)欄位。

1305 1307 

1306### `McpStatusResponse`1308### `McpStatusResponse`

1307 1309 


1314 1316 

1315### `McpServerStatus`1317### `McpServerStatus`

1316 1318 

1317連接的 MCP 伺服器的狀態,包含在 [`McpStatusResponse`](#mcp-status-response) 中。1319連接的 MCP 伺服器的狀態,包含在 [`McpStatusResponse`](#mcpstatusresponse) 中。

1318 1320 

1319```python theme={null}1321```python theme={null}

1320class McpServerStatus(TypedDict):1322class McpServerStatus(TypedDict):


1328```1330```

1329 1331 

1330| 欄位 | 類型 | 描述 |1332| 欄位 | 類型 | 描述 |

1331| :----------- | :------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------- |1333| :----------- | :---------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------- |

1332| `name` | `str` | 伺服器名稱 |1334| `name` | `str` | 伺服器名稱 |

1333| `status` | `str` | `"connected"`、`"failed"`、`"needs-auth"`、`"pending"` 或 `"disabled"` 之一 |1335| `status` | `str` | `"connected"`、`"failed"`、`"needs-auth"`、`"pending"` 或 `"disabled"` 之一 |

1334| `serverInfo` | `dict`(可選) | 伺服器名稱和版本(`{"name": str, "version": str}`) |1336| `serverInfo` | `dict`(可選) | 伺服器名稱和版本(`{"name": str, "version": str}`) |

1335| `error` | `str`(可選) | 伺服器連接失敗時的錯誤消息 |1337| `error` | `str`(可選) | 伺服器連接失敗時的錯誤消息 |

1336| `config` | [`McpServerStatusConfig`](#mcp-server-status-config)(可選) | 伺服器配置。與 [`McpServerConfig`](#mcp-server-config) 相同的形狀(stdio、SSE、HTTP 或 SDK),加上用於透過 claude.ai 連接的伺服器的 `claudeai-proxy` 變體 |1338| `config` | [`McpServerStatusConfig`](#mcpserverstatusconfig)(可選) | 伺服器配置。與 [`McpServerConfig`](#mcpserverconfig) 相同的形狀(stdio、SSE、HTTP 或 SDK),加上用於透過 claude.ai 連接的伺服器的 `claudeai-proxy` 變體 |

1337| `scope` | `str`(可選) | 配置範圍 |1339| `scope` | `str`(可選) | 配置範圍 |

1338| `tools` | `list`(可選) | 此伺服器提供的 tools,每個都具有 `name`、`description` 和 `annotations` 欄位 |1340| `tools` | `list`(可選) | 此伺服器提供的 tools,每個都具有 `name`、`description` 和 `annotations` 欄位 |

1339 1341 


1416```1418```

1417 1419 

1418| 欄位 | 類型 | 描述 |1420| 欄位 | 類型 | 描述 |

1419| :------------------- | :------------------------------------------------------------- | :--------------------------------------------------------- |1421| :------------------- | :----------------------------------------------------------- | :-------------------------------------------------------- |

1420| `content` | `list[ContentBlock]` | 回應中的內容區塊清單 |1422| `content` | `list[ContentBlock]` | 回應中的內容區塊清單 |

1421| `model` | `str` | 產生回應的模型 |1423| `model` | `str` | 產生回應的模型 |

1422| `parent_tool_use_id` | `str \| None` | 如果這是嵌套回應,則為 tool 使用 ID |1424| `parent_tool_use_id` | `str \| None` | 如果這是嵌套回應,則為 tool 使用 ID |

1423| `error` | [`AssistantMessageError`](#assistant-message-error) ` \| None` | 如果回應遇到錯誤,則為錯誤類型 |1425| `error` | [`AssistantMessageError`](#assistantmessageerror) ` \| None` | 如果回應遇到錯誤,則為錯誤類型 |

1424| `usage` | `dict[str, Any] \| None` | 每消息令牌使用情況(與 [`ResultMessage.usage`](#result-message) 相同的鍵) |1426| `usage` | `dict[str, Any] \| None` | 每消息令牌使用情況(與 [`ResultMessage.usage`](#resultmessage) 相同的鍵) |

1425| `message_id` | `str \| None` | API 消息 ID。來自一個轉的多個消息共享相同的 ID |1427| `message_id` | `str \| None` | API 消息 ID。來自一個轉的多個消息共享相同的 ID |

1426 1428 

1427### `AssistantMessageError`1429### `AssistantMessageError`


1481| `cache_creation_input_tokens` | `int` | 用於建立新快取項目的令牌。 |1483| `cache_creation_input_tokens` | `int` | 用於建立新快取項目的令牌。 |

1482| `cache_read_input_tokens` | `int` | 從現有快取項目讀取的令牌。 |1484| `cache_read_input_tokens` | `int` | 從現有快取項目讀取的令牌。 |

1483 1485 

1484`model_usage` 字典將模型名稱對應到每個模型的使用情況。內部字典鍵使用 camelCase,因為該值從基礎 CLI 程序未修改地傳遞,符合 TypeScript [`ModelUsage`](/zh-TW/agent-sdk/typescript#model-usage) 類型:1486`model_usage` 字典將模型名稱對應到每個模型的使用情況。內部字典鍵使用 camelCase,因為該值從基礎 CLI 程序未修改地傳遞,符合 TypeScript [`ModelUsage`](/zh-TW/agent-sdk/typescript#modelusage) 類型:

1485 1487 

1486| 鍵 | 類型 | 描述 |1488| 鍵 | 類型 | 描述 |

1487| -------------------------- | ------- | ----------------------------------------------------------------------------------- |1489| -------------------------- | ------- | ----------------------------------------------------------------------------------- |


1527```1529```

1528 1530 

1529| 欄位 | 類型 | 描述 |1531| 欄位 | 類型 | 描述 |

1530| :---------------- | :---------------------------------- | :---------- |1532| :---------------- | :-------------------------------- | :---------- |

1531| `rate_limit_info` | [`RateLimitInfo`](#rate-limit-info) | 目前速率限制狀態 |1533| `rate_limit_info` | [`RateLimitInfo`](#ratelimitinfo) | 目前速率限制狀態 |

1532| `uuid` | `str` | 唯一事件識別碼 |1534| `uuid` | `str` | 唯一事件識別碼 |

1533| `session_id` | `str` | session 識別碼 |1535| `session_id` | `str` | session 識別碼 |

1534 1536 

1535### `RateLimitInfo`1537### `RateLimitInfo`

1536 1538 

1537由 [`RateLimitEvent`](#rate-limit-event) 攜帶的速率限制狀態。1539由 [`RateLimitEvent`](#ratelimitevent) 攜帶的速率限制狀態。

1538 1540 

1539```python theme={null}1541```python theme={null}

1540RateLimitStatus = Literal["allowed", "allowed_warning", "rejected"]1542RateLimitStatus = Literal["allowed", "allowed_warning", "rejected"]


1812 1814 

1813參數:1815參數:

1814 1816 

1815* `input`:強類型 hook 輸入,具有基於 `hook_event_name` 的判別聯合(見 [`HookInput`](#hook-input))1817* `input`:強類型 hook 輸入,具有基於 `hook_event_name` 的判別聯合(見 [`HookInput`](#hookinput))

1816* `tool_use_id`:可選 tool 使用識別碼(用於 tool 相關 hooks)1818* `tool_use_id`:可選 tool 使用識別碼(用於 tool 相關 hooks)

1817* `context`:具有其他資訊的 hook 上下文1819* `context`:具有其他資訊的 hook 上下文

1818 1820 

1819返回可能包含以下內容的 [`HookJSONOutput`](#hook-json-output):1821返回可能包含以下內容的 [`HookJSONOutput`](#hookjsonoutput):

1820 1822 

1821* `decision`:`"block"` 以阻止動作1823* `decision`:`"block"` 以阻止動作

1822* `systemMessage`:要新增到記錄的系統消息1824* `systemMessage`:要新增到記錄的系統消息


3109```3111```

3110 3112 

3111| 屬性 | 類型 | 預設 | 描述 |3113| 屬性 | 類型 | 預設 | 描述 |

3112| :-------------------------- | :------------------------------------------------------ | :------ | :---------------------------------------------------------------------------------------------------------------------------------- |3114| :-------------------------- | :---------------------------------------------------- | :------ | :---------------------------------------------------------------------------------------------------------------------------------- |

3113| `enabled` | `bool` | `False` | 為命令執行啟用沙箱模式 |3115| `enabled` | `bool` | `False` | 為命令執行啟用沙箱模式 |

3114| `autoAllowBashIfSandboxed` | `bool` | `True` | 啟用沙箱時自動批准 bash 命令 |3116| `autoAllowBashIfSandboxed` | `bool` | `True` | 啟用沙箱時自動批准 bash 命令 |

3115| `excludedCommands` | `list[str]` | `[]` | 始終繞過沙箱限制的命令(例如 `["docker"]`)。這些自動執行沙箱外,無需模型參與 |3117| `excludedCommands` | `list[str]` | `[]` | 始終繞過沙箱限制的命令(例如 `["docker"]`)。這些自動執行沙箱外,無需模型參與 |

3116| `allowUnsandboxedCommands` | `bool` | `True` | 允許模型請求在沙箱外執行命令。當為 `True` 時,模型可以在 tool 輸入中設定 `dangerouslyDisableSandbox`,這會回退到[權限系統](#permissions-fallback-for-unsandboxed-commands) |3118| `allowUnsandboxedCommands` | `bool` | `True` | 允許模型請求在沙箱外執行命令。當為 `True` 時,模型可以在 tool 輸入中設定 `dangerouslyDisableSandbox`,這會回退到[權限系統](#permissions-fallback-for-unsandboxed-commands) |

3117| `network` | [`SandboxNetworkConfig`](#sandbox-network-config) | `None` | 網路特定的沙箱配置 |3119| `network` | [`SandboxNetworkConfig`](#sandboxnetworkconfig) | `None` | 網路特定的沙箱配置 |

3118| `ignoreViolations` | [`SandboxIgnoreViolations`](#sandbox-ignore-violations) | `None` | 配置要忽略的沙箱違規 |3120| `ignoreViolations` | [`SandboxIgnoreViolations`](#sandboxignoreviolations) | `None` | 配置要忽略的沙箱違規 |

3119| `enableWeakerNestedSandbox` | `bool` | `False` | 啟用較弱的嵌套沙箱以相容性 |3121| `enableWeakerNestedSandbox` | `bool` | `False` | 啟用較弱的嵌套沙箱以相容性 |

3120 3122 

3121#### 範例使用3123#### 範例使用

agent-sdk/streaming-output.md +396 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# 即時串流回應

6 

7> 當文字和工具呼叫串流進來時,從 Agent SDK 取得即時回應

8 

9根據預設,Agent SDK 會在 Claude 完成生成每個回應後產生完整的 `AssistantMessage` 物件。若要在文字和工具呼叫生成時接收增量更新,請在選項中將 `include_partial_messages`(Python)或 `includePartialMessages`(TypeScript)設定為 `true` 來啟用部分訊息串流。

10 

11<Tip>

12 本頁涵蓋輸出串流(即時接收權杖)。如需輸入模式(如何傳送訊息),請參閱[傳送訊息給代理](/zh-TW/agent-sdk/streaming-vs-single-mode)。您也可以[透過 CLI 使用 Agent SDK 串流回應](/zh-TW/headless)。

13</Tip>

14 

15## 啟用串流輸出

16 

17若要啟用串流,請在選項中將 `include_partial_messages`(Python)或 `includePartialMessages`(TypeScript)設定為 `true`。這會導致 SDK 產生包含原始 API 事件的 `StreamEvent` 訊息(當它們到達時),以及通常的 `AssistantMessage` 和 `ResultMessage`。

18 

19您的程式碼需要:

20 

211. 檢查每個訊息的類型以區分 `StreamEvent` 和其他訊息類型

222. 對於 `StreamEvent`,提取 `event` 欄位並檢查其 `type`

233. 尋找 `content_block_delta` 事件,其中 `delta.type` 是 `text_delta`,其中包含實際的文字區塊

24 

25下面的範例啟用串流並在文字區塊到達時列印它們。注意巢狀類型檢查:首先是 `StreamEvent`,然後是 `content_block_delta`,然後是 `text_delta`:

26 

27<CodeGroup>

28 ```python Python theme={null}

29 from claude_agent_sdk import query, ClaudeAgentOptions

30 from claude_agent_sdk.types import StreamEvent

31 import asyncio

32 

33 

34 async def stream_response():

35 options = ClaudeAgentOptions(

36 include_partial_messages=True,

37 allowed_tools=["Bash", "Read"],

38 )

39 

40 async for message in query(prompt="List the files in my project", options=options):

41 if isinstance(message, StreamEvent):

42 event = message.event

43 if event.get("type") == "content_block_delta":

44 delta = event.get("delta", {})

45 if delta.get("type") == "text_delta":

46 print(delta.get("text", ""), end="", flush=True)

47 

48 

49 asyncio.run(stream_response())

50 ```

51 

52 ```typescript TypeScript theme={null}

53 import { query } from "@anthropic-ai/claude-agent-sdk";

54 

55 for await (const message of query({

56 prompt: "List the files in my project",

57 options: {

58 includePartialMessages: true,

59 allowedTools: ["Bash", "Read"]

60 }

61 })) {

62 if (message.type === "stream_event") {

63 const event = message.event;

64 if (event.type === "content_block_delta") {

65 if (event.delta.type === "text_delta") {

66 process.stdout.write(event.delta.text);

67 }

68 }

69 }

70 }

71 ```

72</CodeGroup>

73 

74## StreamEvent 參考

75 

76啟用部分訊息時,您會收到包裝在物件中的原始 Claude API 串流事件。該類型在每個 SDK 中有不同的名稱:

77 

78* **Python**:`StreamEvent`(從 `claude_agent_sdk.types` 匯入)

79* **TypeScript**:`SDKPartialAssistantMessage`,其中 `type: 'stream_event'`

80 

81兩者都包含原始 Claude API 事件,而不是累積的文字。您需要自己提取和累積文字增量。以下是每種類型的結構:

82 

83<CodeGroup>

84 ```python Python theme={null}

85 @dataclass

86 class StreamEvent:

87 uuid: str # Unique identifier for this event

88 session_id: str # Session identifier

89 event: dict[str, Any] # The raw Claude API stream event

90 parent_tool_use_id: str | None # Parent tool ID if from a subagent

91 ```

92 

93 ```typescript TypeScript theme={null}

94 type SDKPartialAssistantMessage = {

95 type: "stream_event";

96 event: BetaRawMessageStreamEvent; // From Anthropic SDK

97 parent_tool_use_id: string | null;

98 uuid: UUID;

99 session_id: string;

100 };

101 ```

102</CodeGroup>

103 

104`event` 欄位包含來自 [Claude API](https://platform.claude.com/docs/en/build-with-claude/streaming#event-types) 的原始串流事件。常見的事件類型包括:

105 

106| 事件類型 | 說明 |

107| :-------------------- | :----------------- |

108| `message_start` | 新訊息的開始 |

109| `content_block_start` | 新內容區塊的開始(文字或工具使用) |

110| `content_block_delta` | 內容的增量更新 |

111| `content_block_stop` | 內容區塊的結束 |

112| `message_delta` | 訊息層級的更新(停止原因、使用情況) |

113| `message_stop` | 訊息的結束 |

114 

115## 訊息流

116 

117啟用部分訊息後,您會按此順序接收訊息:

118 

119```text theme={null}

120StreamEvent (message_start)

121StreamEvent (content_block_start) - text block

122StreamEvent (content_block_delta) - text chunks...

123StreamEvent (content_block_stop)

124StreamEvent (content_block_start) - tool_use block

125StreamEvent (content_block_delta) - tool input chunks...

126StreamEvent (content_block_stop)

127StreamEvent (message_delta)

128StreamEvent (message_stop)

129AssistantMessage - complete message with all content

130... tool executes ...

131... more streaming events for next turn ...

132ResultMessage - final result

133```

134 

135未啟用部分訊息(Python 中的 `include_partial_messages`、TypeScript 中的 `includePartialMessages`)時,您會收到除 `StreamEvent` 外的所有訊息類型。常見類型包括 `SystemMessage`(工作階段初始化)、`AssistantMessage`(完整回應)、`ResultMessage`(最終結果)和指示何時壓縮對話歷史記錄的緊湊邊界訊息(TypeScript 中的 `SDKCompactBoundaryMessage`;Python 中具有子類型 `"compact_boundary"` 的 `SystemMessage`)。

136 

137## 串流文字回應

138 

139若要在生成文字時顯示它,請尋找 `content_block_delta` 事件,其中 `delta.type` 是 `text_delta`。這些包含增量文字區塊。下面的範例在每個區塊到達時列印它:

140 

141<CodeGroup>

142 ```python Python theme={null}

143 from claude_agent_sdk import query, ClaudeAgentOptions

144 from claude_agent_sdk.types import StreamEvent

145 import asyncio

146 

147 

148 async def stream_text():

149 options = ClaudeAgentOptions(include_partial_messages=True)

150 

151 async for message in query(prompt="Explain how databases work", options=options):

152 if isinstance(message, StreamEvent):

153 event = message.event

154 if event.get("type") == "content_block_delta":

155 delta = event.get("delta", {})

156 if delta.get("type") == "text_delta":

157 # Print each text chunk as it arrives

158 print(delta.get("text", ""), end="", flush=True)

159 

160 print() # Final newline

161 

162 

163 asyncio.run(stream_text())

164 ```

165 

166 ```typescript TypeScript theme={null}

167 import { query } from "@anthropic-ai/claude-agent-sdk";

168 

169 for await (const message of query({

170 prompt: "Explain how databases work",

171 options: { includePartialMessages: true }

172 })) {

173 if (message.type === "stream_event") {

174 const event = message.event;

175 if (event.type === "content_block_delta" && event.delta.type === "text_delta") {

176 process.stdout.write(event.delta.text);

177 }

178 }

179 }

180 

181 console.log(); // Final newline

182 ```

183</CodeGroup>

184 

185## 串流工具呼叫

186 

187工具呼叫也會增量串流。您可以追蹤工具何時開始、在生成時接收其輸入,以及查看何時完成。下面的範例追蹤目前被呼叫的工具並在串流進來時累積 JSON 輸入。它使用三種事件類型:

188 

189* `content_block_start`:工具開始

190* `content_block_delta`,其中 `input_json_delta`:輸入區塊到達

191* `content_block_stop`:工具呼叫完成

192 

193<CodeGroup>

194 ```python Python theme={null}

195 from claude_agent_sdk import query, ClaudeAgentOptions

196 from claude_agent_sdk.types import StreamEvent

197 import asyncio

198 

199 

200 async def stream_tool_calls():

201 options = ClaudeAgentOptions(

202 include_partial_messages=True,

203 allowed_tools=["Read", "Bash"],

204 )

205 

206 # Track the current tool and accumulate its input JSON

207 current_tool = None

208 tool_input = ""

209 

210 async for message in query(prompt="Read the README.md file", options=options):

211 if isinstance(message, StreamEvent):

212 event = message.event

213 event_type = event.get("type")

214 

215 if event_type == "content_block_start":

216 # New tool call is starting

217 content_block = event.get("content_block", {})

218 if content_block.get("type") == "tool_use":

219 current_tool = content_block.get("name")

220 tool_input = ""

221 print(f"Starting tool: {current_tool}")

222 

223 elif event_type == "content_block_delta":

224 delta = event.get("delta", {})

225 if delta.get("type") == "input_json_delta":

226 # Accumulate JSON input as it streams in

227 chunk = delta.get("partial_json", "")

228 tool_input += chunk

229 print(f" Input chunk: {chunk}")

230 

231 elif event_type == "content_block_stop":

232 # Tool call complete - show final input

233 if current_tool:

234 print(f"Tool {current_tool} called with: {tool_input}")

235 current_tool = None

236 

237 

238 asyncio.run(stream_tool_calls())

239 ```

240 

241 ```typescript TypeScript theme={null}

242 import { query } from "@anthropic-ai/claude-agent-sdk";

243 

244 // Track the current tool and accumulate its input JSON

245 let currentTool: string | null = null;

246 let toolInput = "";

247 

248 for await (const message of query({

249 prompt: "Read the README.md file",

250 options: {

251 includePartialMessages: true,

252 allowedTools: ["Read", "Bash"]

253 }

254 })) {

255 if (message.type === "stream_event") {

256 const event = message.event;

257 

258 if (event.type === "content_block_start") {

259 // New tool call is starting

260 if (event.content_block.type === "tool_use") {

261 currentTool = event.content_block.name;

262 toolInput = "";

263 console.log(`Starting tool: ${currentTool}`);

264 }

265 } else if (event.type === "content_block_delta") {

266 if (event.delta.type === "input_json_delta") {

267 // Accumulate JSON input as it streams in

268 const chunk = event.delta.partial_json;

269 toolInput += chunk;

270 console.log(` Input chunk: ${chunk}`);

271 }

272 } else if (event.type === "content_block_stop") {

273 // Tool call complete - show final input

274 if (currentTool) {

275 console.log(`Tool ${currentTool} called with: ${toolInput}`);

276 currentTool = null;

277 }

278 }

279 }

280 }

281 ```

282</CodeGroup>

283 

284## 建立串流 UI

285 

286此範例將文字和工具串流結合成一個有凝聚力的 UI。它追蹤代理目前是否正在執行工具(使用 `in_tool` 旗標)以顯示狀態指示器,例如在工具執行時顯示 `[Using Read...]`。文字在不在工具中時正常串流,工具完成會觸發「完成」訊息。此模式對於需要在多步驟代理任務期間顯示進度的聊天介面很有用。

287 

288<CodeGroup>

289 ```python Python theme={null}

290 from claude_agent_sdk import query, ClaudeAgentOptions, ResultMessage

291 from claude_agent_sdk.types import StreamEvent

292 import asyncio

293 import sys

294 

295 

296 async def streaming_ui():

297 options = ClaudeAgentOptions(

298 include_partial_messages=True,

299 allowed_tools=["Read", "Bash", "Grep"],

300 )

301 

302 # Track whether we're currently in a tool call

303 in_tool = False

304 

305 async for message in query(

306 prompt="Find all TODO comments in the codebase", options=options

307 ):

308 if isinstance(message, StreamEvent):

309 event = message.event

310 event_type = event.get("type")

311 

312 if event_type == "content_block_start":

313 content_block = event.get("content_block", {})

314 if content_block.get("type") == "tool_use":

315 # Tool call is starting - show status indicator

316 tool_name = content_block.get("name")

317 print(f"\n[Using {tool_name}...]", end="", flush=True)

318 in_tool = True

319 

320 elif event_type == "content_block_delta":

321 delta = event.get("delta", {})

322 # Only stream text when not executing a tool

323 if delta.get("type") == "text_delta" and not in_tool:

324 sys.stdout.write(delta.get("text", ""))

325 sys.stdout.flush()

326 

327 elif event_type == "content_block_stop":

328 if in_tool:

329 # Tool call finished

330 print(" done", flush=True)

331 in_tool = False

332 

333 elif isinstance(message, ResultMessage):

334 # Agent finished all work

335 print(f"\n\n--- Complete ---")

336 

337 

338 asyncio.run(streaming_ui())

339 ```

340 

341 ```typescript TypeScript theme={null}

342 import { query } from "@anthropic-ai/claude-agent-sdk";

343 

344 // Track whether we're currently in a tool call

345 let inTool = false;

346 

347 for await (const message of query({

348 prompt: "Find all TODO comments in the codebase",

349 options: {

350 includePartialMessages: true,

351 allowedTools: ["Read", "Bash", "Grep"]

352 }

353 })) {

354 if (message.type === "stream_event") {

355 const event = message.event;

356 

357 if (event.type === "content_block_start") {

358 if (event.content_block.type === "tool_use") {

359 // Tool call is starting - show status indicator

360 process.stdout.write(`\n[Using ${event.content_block.name}...]`);

361 inTool = true;

362 }

363 } else if (event.type === "content_block_delta") {

364 // Only stream text when not executing a tool

365 if (event.delta.type === "text_delta" && !inTool) {

366 process.stdout.write(event.delta.text);

367 }

368 } else if (event.type === "content_block_stop") {

369 if (inTool) {

370 // Tool call finished

371 console.log(" done");

372 inTool = false;

373 }

374 }

375 } else if (message.type === "result") {

376 // Agent finished all work

377 console.log("\n\n--- Complete ---");

378 }

379 }

380 ```

381</CodeGroup>

382 

383## 已知限制

384 

385某些 SDK 功能與串流不相容:

386 

387* **Extended thinking**:當您明確設定 `max_thinking_tokens`(Python)或 `maxThinkingTokens`(TypeScript)時,不會發出 `StreamEvent` 訊息。您只會在每個回合後收到完整訊息。請注意,思考在 SDK 中預設是停用的,因此串流有效,除非您啟用它。

388* **Structured output**:JSON 結果僅出現在最終 `ResultMessage.structured_output` 中,而不是作為串流增量。如需詳細資訊,請參閱[結構化輸出](/zh-TW/agent-sdk/structured-outputs)。

389 

390## 後續步驟

391 

392現在您可以即時串流文字和工具呼叫,請探索這些相關主題:

393 

394* [互動式與一次性查詢](/zh-TW/agent-sdk/streaming-vs-single-mode):為您的使用案例選擇輸入模式

395* [結構化輸出](/zh-TW/agent-sdk/structured-outputs):從代理取得類型化的 JSON 回應

396* [權限](/zh-TW/agent-sdk/permissions):控制代理可以使用哪些工具

agent-sdk/todo-tracking.md +189 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# 待辦事項清單

6 

7> 使用 Claude Agent SDK 追蹤和顯示待辦事項,以實現有組織的任務管理

8 

9待辦事項追蹤提供了一種結構化的方式來管理任務並向用戶顯示進度。Claude Agent SDK 包含內置的待辦事項功能,可幫助組織複雜的工作流程並讓用戶了解任務進度。

10 

11### 待辦事項生命週期

12 

13待辦事項遵循可預測的生命週期:

14 

151. **建立**為 `pending` 當任務被識別時

162. **啟動**為 `in_progress` 當工作開始時

173. **完成**當任務成功完成時

184. **移除**當群組中的所有任務都完成時

19 

20### 何時使用待辦事項

21 

22SDK 會自動為以下情況建立待辦事項:

23 

24* **複雜的多步驟任務**需要 3 個或更多不同的操作

25* **用戶提供的任務清單**當提及多個項目時

26* **非平凡的操作**受益於進度追蹤

27* **明確的請求**當用戶要求待辦事項組織時

28 

29## 範例

30 

31### 監控待辦事項變更

32 

33<CodeGroup>

34 ```typescript TypeScript theme={null}

35 import { query } from "@anthropic-ai/claude-agent-sdk";

36 

37 for await (const message of query({

38 prompt: "Optimize my React app performance and track progress with todos",

39 options: { maxTurns: 15 }

40 })) {

41 // Todo updates are reflected in the message stream

42 if (message.type === "assistant") {

43 for (const block of message.message.content) {

44 if (block.type === "tool_use" && block.name === "TodoWrite") {

45 const todos = block.input.todos;

46 

47 console.log("Todo Status Update:");

48 todos.forEach((todo, index) => {

49 const status =

50 todo.status === "completed" ? "✅" : todo.status === "in_progress" ? "🔧" : "❌";

51 console.log(`${index + 1}. ${status} ${todo.content}`);

52 });

53 }

54 }

55 }

56 }

57 ```

58 

59 ```python Python theme={null}

60 from claude_agent_sdk import query, ClaudeAgentOptions, AssistantMessage, ToolUseBlock

61 

62 async for message in query(

63 prompt="Optimize my React app performance and track progress with todos",

64 options=ClaudeAgentOptions(max_turns=15),

65 ):

66 # Todo updates are reflected in the message stream

67 if isinstance(message, AssistantMessage):

68 for block in message.content:

69 if isinstance(block, ToolUseBlock) and block.name == "TodoWrite":

70 todos = block.input["todos"]

71 

72 print("Todo Status Update:")

73 for i, todo in enumerate(todos):

74 status = (

75 "✅"

76 if todo["status"] == "completed"

77 else "🔧"

78 if todo["status"] == "in_progress"

79 else "❌"

80 )

81 print(f"{i + 1}. {status} {todo['content']}")

82 ```

83</CodeGroup>

84 

85### 實時進度顯示

86 

87<CodeGroup>

88 ```typescript TypeScript theme={null}

89 import { query } from "@anthropic-ai/claude-agent-sdk";

90 

91 class TodoTracker {

92 private todos: any[] = [];

93 

94 displayProgress() {

95 if (this.todos.length === 0) return;

96 

97 const completed = this.todos.filter((t) => t.status === "completed").length;

98 const inProgress = this.todos.filter((t) => t.status === "in_progress").length;

99 const total = this.todos.length;

100 

101 console.log(`\nProgress: ${completed}/${total} completed`);

102 console.log(`Currently working on: ${inProgress} task(s)\n`);

103 

104 this.todos.forEach((todo, index) => {

105 const icon =

106 todo.status === "completed" ? "✅" : todo.status === "in_progress" ? "🔧" : "❌";

107 const text = todo.status === "in_progress" ? todo.activeForm : todo.content;

108 console.log(`${index + 1}. ${icon} ${text}`);

109 });

110 }

111 

112 async trackQuery(prompt: string) {

113 for await (const message of query({

114 prompt,

115 options: { maxTurns: 20 }

116 })) {

117 if (message.type === "assistant") {

118 for (const block of message.message.content) {

119 if (block.type === "tool_use" && block.name === "TodoWrite") {

120 this.todos = block.input.todos;

121 this.displayProgress();

122 }

123 }

124 }

125 }

126 }

127 }

128 

129 // Usage

130 const tracker = new TodoTracker();

131 await tracker.trackQuery("Build a complete authentication system with todos");

132 ```

133 

134 ```python Python theme={null}

135 from claude_agent_sdk import query, ClaudeAgentOptions, AssistantMessage, ToolUseBlock

136 from typing import List, Dict

137 

138 

139 class TodoTracker:

140 def __init__(self):

141 self.todos: List[Dict] = []

142 

143 def display_progress(self):

144 if not self.todos:

145 return

146 

147 completed = len([t for t in self.todos if t["status"] == "completed"])

148 in_progress = len([t for t in self.todos if t["status"] == "in_progress"])

149 total = len(self.todos)

150 

151 print(f"\nProgress: {completed}/{total} completed")

152 print(f"Currently working on: {in_progress} task(s)\n")

153 

154 for i, todo in enumerate(self.todos):

155 icon = (

156 "✅"

157 if todo["status"] == "completed"

158 else "🔧"

159 if todo["status"] == "in_progress"

160 else "❌"

161 )

162 text = (

163 todo["activeForm"]

164 if todo["status"] == "in_progress"

165 else todo["content"]

166 )

167 print(f"{i + 1}. {icon} {text}")

168 

169 async def track_query(self, prompt: str):

170 async for message in query(prompt=prompt, options=ClaudeAgentOptions(max_turns=20)):

171 if isinstance(message, AssistantMessage):

172 for block in message.content:

173 if isinstance(block, ToolUseBlock) and block.name == "TodoWrite":

174 self.todos = block.input["todos"]

175 self.display_progress()

176 

177 

178 # Usage

179 tracker = TodoTracker()

180 await tracker.track_query("Build a complete authentication system with todos")

181 ```

182</CodeGroup>

183 

184## 相關文檔

185 

186* [TypeScript SDK 參考](/zh-TW/agent-sdk/typescript)

187* [Python SDK 參考](/zh-TW/agent-sdk/python)

188* [串流與單一模式](/zh-TW/agent-sdk/streaming-vs-single-mode)

189* [自訂工具](/zh-TW/agent-sdk/custom-tools)

Details

41#### 參數41#### 參數

42 42 

43| 參數 | 類型 | 描述 |43| 參數 | 類型 | 描述 |

44| :-------- | :---------------------------------------------------------------- | :------------------------ |44| :-------- | :--------------------------------------------------------------- | :------------------------ |

45| `prompt` | `string \| AsyncIterable<`[`SDKUserMessage`](#sdkuser-message)`>` | 輸入提示,可以是字符串或異步可迭代對象用於流式模式 |45| `prompt` | `string \| AsyncIterable<`[`SDKUserMessage`](#sdkusermessage)`>` | 輸入提示,可以是字符串或異步可迭代對象用於流式模式 |

46| `options` | [`Options`](#options) | 可選配置對象(見下面的 Options 類型) |46| `options` | [`Options`](#options) | 可選配置對象(見下面的 Options 類型) |

47 47 

48#### 返回值48#### 返回值

49 49 

50返回一個 [`Query`](#query-object) 對象,它擴展了 `AsyncGenerator<`[`SDKMessage`](#sdk-message)`, void>` 並具有額外的方法。50返回一個 [`Query`](#query-object) 對象,它擴展了 `AsyncGenerator<`[`SDKMessage`](#sdkmessage)`, void>` 並具有額外的方法。

51 51 

52### `startup()`52### `startup()`

53 53 

54通過生成 CLI 子進程並在提示可用之前完成初始化握手來預熱 CLI 子進程。返回的 [`WarmQuery`](#warm-query) 句柄稍後接受提示並將其寫入已準備好的進程,因此第一個 `query()` 調用解析時無需支付子進程生成和初始化成本。54通過生成 CLI 子進程並在提示可用之前完成初始化握手來預熱 CLI 子進程。返回的 [`WarmQuery`](#warmquery) 句柄稍後接受提示並將其寫入已準備好的進程,因此第一個 `query()` 調用解析時無需支付子進程生成和初始化成本。

55 55 

56```typescript theme={null}56```typescript theme={null}

57function startup(params?: {57function startup(params?: {


69 69 

70#### 返回值70#### 返回值

71 71 

72返回一個 `Promise<`[`WarmQuery`](#warm-query)`>`,在子進程生成並完成其初始化握手後解析。72返回一個 `Promise<`[`WarmQuery`](#warmquery)`>`,在子進程生成並完成其初始化握手後解析。

73 73 

74#### 示例74#### 示例

75 75 


104#### 參數104#### 參數

105 105 

106| 參數 | 類型 | 描述 |106| 參數 | 類型 | 描述 |

107| :------------ | :------------------------------------------------------------------ | :--------------------------------- |107| :------------ | :---------------------------------------------------------------- | :--------------------------------- |

108| `name` | `string` | 工具的名稱 |108| `name` | `string` | 工具的名稱 |

109| `description` | `string` | 工具功能的描述 |109| `description` | `string` | 工具功能的描述 |

110| `inputSchema` | `Schema extends AnyZodRawShape` | 定義工具輸入參數的 Zod 架構(支持 Zod 3 和 Zod 4) |110| `inputSchema` | `Schema extends AnyZodRawShape` | 定義工具輸入參數的 Zod 架構(支持 Zod 3 和 Zod 4) |

111| `handler` | `(args, extra) => Promise<`[`CallToolResult`](#call-tool-result)`>` | 執行工具邏輯的異步函數 |111| `handler` | `(args, extra) => Promise<`[`CallToolResult`](#calltoolresult)`>` | 執行工具邏輯的異步函數 |

112| `extras` | `{ annotations?: `[`ToolAnnotations`](#tool-annotations)` }` | 可選的 MCP 工具註釋,為客戶端提供行為提示 |112| `extras` | `{ annotations?: `[`ToolAnnotations`](#toolannotations)` }` | 可選的 MCP 工具註釋,為客戶端提供行為提示 |

113 113 

114#### `ToolAnnotations`114#### `ToolAnnotations`

115 115 


177#### 返回類型:`SDKSessionInfo`177#### 返回類型:`SDKSessionInfo`

178 178 

179| 屬性 | 類型 | 描述 |179| 屬性 | 類型 | 描述 |

180| :------------- | :-------------------- | :------------------------------------------ |180| :------------- | :-------------------- | :----------------------------------------- |

181| `sessionId` | `string` | 唯一會話標識符(UUID) |181| `sessionId` | `string` | 唯一會話標識符(UUID) |

182| `summary` | `string` | 顯示標題:自定義標題、自動生成的摘要或第一個提示 |182| `summary` | `string` | 顯示標題:自定義標題、自動生成的摘要或第一個提示 |

183| `lastModified` | `number` | 上次修改時間(自紀元以來的毫秒數) |183| `lastModified` | `number` | 上次修改時間(自紀元以來的毫秒數) |


186| `firstPrompt` | `string \| undefined` | 會話中的第一個有意義的用戶提示 |186| `firstPrompt` | `string \| undefined` | 會話中的第一個有意義的用戶提示 |

187| `gitBranch` | `string \| undefined` | 會話結束時的 Git 分支 |187| `gitBranch` | `string \| undefined` | 會話結束時的 Git 分支 |

188| `cwd` | `string \| undefined` | 會話的工作目錄 |188| `cwd` | `string \| undefined` | 會話的工作目錄 |

189| `tag` | `string \| undefined` | 用戶設置的會話標籤(見 [`tagSession()`](#tag-session)) |189| `tag` | `string \| undefined` | 用戶設置的會話標籤(見 [`tagSession()`](#tagsession)) |

190| `createdAt` | `number \| undefined` | 創建時間(自紀元以來的毫秒數),來自第一個條目的時間戳 |190| `createdAt` | `number \| undefined` | 創建時間(自紀元以來的毫秒數),來自第一個條目的時間戳 |

191 191 

192#### 示例192#### 示例


270| `sessionId` | `string` | 必需 | 要查找的會話 UUID |270| `sessionId` | `string` | 必需 | 要查找的會話 UUID |

271| `options.dir` | `string` | `undefined` | 項目目錄路徑。省略時,搜索所有項目目錄 |271| `options.dir` | `string` | `undefined` | 項目目錄路徑。省略時,搜索所有項目目錄 |

272 272 

273返回 [`SDKSessionInfo`](#return-type-sdk-session-info),如果找不到會話則返回 `undefined`。273返回 [`SDKSessionInfo`](#return-type-sdksessioninfo),如果找不到會話則返回 `undefined`。

274 274 

275### `renameSession()`275### `renameSession()`

276 276 


323| `abortController` | `AbortController` | `new AbortController()` | 用於取消操作的控制器 |323| `abortController` | `AbortController` | `new AbortController()` | 用於取消操作的控制器 |

324| `additionalDirectories` | `string[]` | `[]` | Claude 可以訪問的其他目錄 |324| `additionalDirectories` | `string[]` | `[]` | Claude 可以訪問的其他目錄 |

325| `agent` | `string` | `undefined` | 主線程的代理名稱。代理必須在 `agents` 選項或設置中定義 |325| `agent` | `string` | `undefined` | 主線程的代理名稱。代理必須在 `agents` 選項或設置中定義 |

326| `agents` | `Record<string, [`AgentDefinition`](#agent-definition)>` | `undefined` | 以編程方式定義子代理 |326| `agents` | `Record<string, [`AgentDefinition`](#agentdefinition)>` | `undefined` | 以編程方式定義子代理 |

327| `allowDangerouslySkipPermissions` | `boolean` | `false` | 啟用繞過權限。使用 `permissionMode: 'bypassPermissions'` 時需要 |327| `allowDangerouslySkipPermissions` | `boolean` | `false` | 啟用繞過權限。使用 `permissionMode: 'bypassPermissions'` 時需要 |

328| `allowedTools` | `string[]` | `[]` | 無需提示即可自動批准的工具。這不會將 Claude 限制為僅這些工具;未列出的工具會進入 `permissionMode` 和 `canUseTool`。使用 `disallowedTools` 來阻止工具。見 [權限](/zh-TW/agent-sdk/permissions#allow-and-deny-rules) |328| `allowedTools` | `string[]` | `[]` | 無需提示即可自動批准的工具。這不會將 Claude 限制為僅這些工具;未列出的工具會進入 `permissionMode` 和 `canUseTool`。使用 `disallowedTools` 來阻止工具。見 [權限](/zh-TW/agent-sdk/permissions#allow-and-deny-rules) |

329| `betas` | [`SdkBeta`](#sdk-beta)`[]` | `[]` | 啟用測試功能 |329| `betas` | [`SdkBeta`](#sdkbeta)`[]` | `[]` | 啟用測試功能 |

330| `canUseTool` | [`CanUseTool`](#can-use-tool) | `undefined` | 工具使用的自定義權限函數 |330| `canUseTool` | [`CanUseTool`](#canusetool) | `undefined` | 工具使用的自定義權限函數 |

331| `continue` | `boolean` | `false` | 繼續最近的對話 |331| `continue` | `boolean` | `false` | 繼續最近的對話 |

332| `cwd` | `string` | `process.cwd()` | 當前工作目錄 |332| `cwd` | `string` | `process.cwd()` | 當前工作目錄 |

333| `debug` | `boolean` | `false` | 為 Claude Code 進程啟用調試模式 |333| `debug` | `boolean` | `false` | 為 Claude Code 進程啟用調試模式 |


341| `extraArgs` | `Record<string, string \| null>` | `{}` | 其他參數 |341| `extraArgs` | `Record<string, string \| null>` | `{}` | 其他參數 |

342| `fallbackModel` | `string` | `undefined` | 主模型失敗時使用的模型 |342| `fallbackModel` | `string` | `undefined` | 主模型失敗時使用的模型 |

343| `forkSession` | `boolean` | `false` | 使用 `resume` 恢復時,分叉到新會話 ID 而不是繼續原始會話 |343| `forkSession` | `boolean` | `false` | 使用 `resume` 恢復時,分叉到新會話 ID 而不是繼續原始會話 |

344| `hooks` | `Partial<Record<`[`HookEvent`](#hook-event)`, `[`HookCallbackMatcher`](#hook-callback-matcher)`[]>>` | `{}` | 事件的 Hook 回調 |344| `hooks` | `Partial<Record<`[`HookEvent`](#hookevent)`, `[`HookCallbackMatcher`](#hookcallbackmatcher)`[]>>` | `{}` | 事件的 Hook 回調 |

345| `includePartialMessages` | `boolean` | `false` | 包括部分消息事件 |345| `includePartialMessages` | `boolean` | `false` | 包括部分消息事件 |

346| `maxBudgetUsd` | `number` | `undefined` | 當客戶端成本估計達到此 USD 值時停止查詢。與 `total_cost_usd` 的相同估計進行比較;見 [跟蹤成本和使用情況](/zh-TW/agent-sdk/cost-tracking) 了解準確性注意事項 |346| `maxBudgetUsd` | `number` | `undefined` | 當客戶端成本估計達到此 USD 值時停止查詢。與 `total_cost_usd` 的相同估計進行比較;見 [跟蹤成本和使用情況](/zh-TW/agent-sdk/cost-tracking) 了解準確性注意事項 |

347| `maxThinkingTokens` | `number` | `undefined` | *已棄用:* 改用 `thinking`。思考過程的最大令牌數 |347| `maxThinkingTokens` | `number` | `undefined` | *已棄用:* 改用 `thinking`。思考過程的最大令牌數 |

348| `maxTurns` | `number` | `undefined` | 最大代理轉數(工具使用往返) |348| `maxTurns` | `number` | `undefined` | 最大代理轉數(工具使用往返) |

349| `mcpServers` | `Record<string, [`McpServerConfig`](#mcp-server-config)>` | `{}` | MCP 服務器配置 |349| `mcpServers` | `Record<string, [`McpServerConfig`](#mcpserverconfig)>` | `{}` | MCP 服務器配置 |

350| `model` | `string` | CLI 默認值 | 要使用的 Claude 模型 |350| `model` | `string` | CLI 默認值 | 要使用的 Claude 模型 |

351| `outputFormat` | `{ type: 'json_schema', schema: JSONSchema }` | `undefined` | 為代理結果定義輸出格式。見 [結構化輸出](/zh-TW/agent-sdk/structured-outputs) 了解詳情 |351| `outputFormat` | `{ type: 'json_schema', schema: JSONSchema }` | `undefined` | 為代理結果定義輸出格式。見 [結構化輸出](/zh-TW/agent-sdk/structured-outputs) 了解詳情 |

352| `pathToClaudeCodeExecutable` | `string` | 從捆綁的原生二進制文件自動解析 | Claude Code 可執行文件的路徑。僅在安裝期間跳過可選依賴項或您的平台不在支持的集合中時需要 |352| `pathToClaudeCodeExecutable` | `string` | 從捆綁的原生二進制文件自動解析 | Claude Code 可執行文件的路徑。僅在安裝期間跳過可選依賴項或您的平台不在支持的集合中時需要 |

353| `permissionMode` | [`PermissionMode`](#permission-mode) | `'default'` | 會話的權限模式 |353| `permissionMode` | [`PermissionMode`](#permissionmode) | `'default'` | 會話的權限模式 |

354| `permissionPromptToolName` | `string` | `undefined` | 權限提示的 MCP 工具名稱 |354| `permissionPromptToolName` | `string` | `undefined` | 權限提示的 MCP 工具名稱 |

355| `persistSession` | `boolean` | `true` | 當為 `false` 時,禁用會話持久化到磁盤。會話之後無法恢復 |355| `persistSession` | `boolean` | `true` | 當為 `false` 時,禁用會話持久化到磁盤。會話之後無法恢復 |

356| `plugins` | [`SdkPluginConfig`](#sdk-plugin-config)`[]` | `[]` | 從本地路徑加載自定義插件。見 [Plugins](/zh-TW/agent-sdk/plugins) 了解詳情 |356| `plugins` | [`SdkPluginConfig`](#sdkpluginconfig)`[]` | `[]` | 從本地路徑加載自定義插件。見 [Plugins](/zh-TW/agent-sdk/plugins) 了解詳情 |

357| `promptSuggestions` | `boolean` | `false` | 啟用提示建議。在每個轉數後發出 `prompt_suggestion` 消息,帶有預測的下一個用戶提示 |357| `promptSuggestions` | `boolean` | `false` | 啟用提示建議。在每個轉數後發出 `prompt_suggestion` 消息,帶有預測的下一個用戶提示 |

358| `resume` | `string` | `undefined` | 要恢復的會話 ID |358| `resume` | `string` | `undefined` | 要恢復的會話 ID |

359| `resumeSessionAt` | `string` | `undefined` | 在特定消息 UUID 處恢復會話 |359| `resumeSessionAt` | `string` | `undefined` | 在特定消息 UUID 處恢復會話 |

360| `sandbox` | [`SandboxSettings`](#sandbox-settings) | `undefined` | 以編程方式配置沙箱行為。見 [沙箱設置](#sandbox-settings) 了解詳情 |360| `sandbox` | [`SandboxSettings`](#sandboxsettings) | `undefined` | 以編程方式配置沙箱行為。見 [沙箱設置](#sandboxsettings) 了解詳情 |

361| `sessionId` | `string` | 自動生成 | 使用特定 UUID 作為會話,而不是自動生成一個 |361| `sessionId` | `string` | 自動生成 | 使用特定 UUID 作為會話,而不是自動生成一個 |

362| `sessionStore` | [`SessionStore`](/zh-TW/agent-sdk/session-storage#the-session-store-interface) | `undefined` | 將會話記錄鏡像到外部後端,以便任何主機都可以恢復它們。見 [將會話持久化到外部存儲](/zh-TW/agent-sdk/session-storage) |362| `sessionStore` | [`SessionStore`](/zh-TW/agent-sdk/session-storage#the-sessionstore-interface) | `undefined` | 將會話記錄鏡像到外部後端,以便任何主機都可以恢復它們。見 [將會話持久化到外部存儲](/zh-TW/agent-sdk/session-storage) |

363| `settingSources` | [`SettingSource`](#setting-source)`[]` | CLI 默認值(所有源) | 控制加載哪些文件系統設置。傳遞 `[]` 以禁用用戶、項目和本地設置。無論如何都會加載託管策略設置。見 [使用 Claude Code 功能](/zh-TW/agent-sdk/claude-code-features#what-settingsources-does-not-control) |363| `settingSources` | [`SettingSource`](#settingsource)`[]` | CLI 默認值(所有源) | 控制加載哪些文件系統設置。傳遞 `[]` 以禁用用戶、項目和本地設置。無論如何都會加載託管策略設置。見 [使用 Claude Code 功能](/zh-TW/agent-sdk/claude-code-features#what-settingsources-does-not-control) |

364| `spawnClaudeCodeProcess` | `(options: SpawnOptions) => SpawnedProcess` | `undefined` | 用於生成 Claude Code 進程的自定義函數。用於在 VM、容器或遠程環境中運行 Claude Code |364| `spawnClaudeCodeProcess` | `(options: SpawnOptions) => SpawnedProcess` | `undefined` | 用於生成 Claude Code 進程的自定義函數。用於在 VM、容器或遠程環境中運行 Claude Code |

365| `stderr` | `(data: string) => void` | `undefined` | stderr 輸出的回調 |365| `stderr` | `(data: string) => void` | `undefined` | stderr 輸出的回調 |

366| `strictMcpConfig` | `boolean` | `false` | 強制執行嚴格的 MCP 驗證 |366| `strictMcpConfig` | `boolean` | `false` | 強制執行嚴格的 MCP 驗證 |

367| `systemPrompt` | `string \| { type: 'preset'; preset: 'claude_code'; append?: string; excludeDynamicSections?: boolean }` | `undefined`(最小提示) | 系統提示配置。傳遞字符串以獲得自定義提示,或 `{ type: 'preset', preset: 'claude_code' }` 以使用 Claude Code 的系統提示。使用預設對象形式時,添加 `append` 以使用其他指令擴展它,並設置 `excludeDynamicSections: true` 以將每個會話上下文移到第一個用戶消息中以獲得 [跨機器更好的提示緩存重用](/zh-TW/agent-sdk/modifying-system-prompts#improve-prompt-caching-across-users-and-machines) |367| `systemPrompt` | `string \| { type: 'preset'; preset: 'claude_code'; append?: string; excludeDynamicSections?: boolean }` | `undefined`(最小提示) | 系統提示配置。傳遞字符串以獲得自定義提示,或 `{ type: 'preset', preset: 'claude_code' }` 以使用 Claude Code 的系統提示。使用預設對象形式時,添加 `append` 以使用其他指令擴展它,並設置 `excludeDynamicSections: true` 以將每個會話上下文移到第一個用戶消息中以獲得 [跨機器更好的提示緩存重用](/zh-TW/agent-sdk/modifying-system-prompts#improve-prompt-caching-across-users-and-machines) |

368| `thinking` | [`ThinkingConfig`](#thinking-config) | 支持的模型為 `{ type: 'adaptive' }` | 控制 Claude 的思考/推理行為。見 [`ThinkingConfig`](#thinking-config) 了解選項 |368| `thinking` | [`ThinkingConfig`](#thinkingconfig) | 支持的模型為 `{ type: 'adaptive' }` | 控制 Claude 的思考/推理行為。見 [`ThinkingConfig`](#thinkingconfig) 了解選項 |

369| `toolConfig` | [`ToolConfig`](#tool-config) | `undefined` | 內置工具行為的配置。見 [`ToolConfig`](#tool-config) 了解詳情 |369| `toolConfig` | [`ToolConfig`](#toolconfig) | `undefined` | 內置工具行為的配置。見 [`ToolConfig`](#toolconfig) 了解詳情 |

370| `tools` | `string[] \| { type: 'preset'; preset: 'claude_code' }` | `undefined` | 工具配置。傳遞工具名稱數組或使用預設以獲得 Claude Code 的默認工具 |370| `tools` | `string[] \| { type: 'preset'; preset: 'claude_code' }` | `undefined` | 工具配置。傳遞工具名稱數組或使用預設以獲得 Claude Code 的默認工具 |

371 371 

372### `Query` 對象372### `Query` 對象


410| `initializationResult()` | 返回完整的初始化結果,包括支持的命令、模型、帳戶信息和輸出樣式配置 |410| `initializationResult()` | 返回完整的初始化結果,包括支持的命令、模型、帳戶信息和輸出樣式配置 |

411| `supportedCommands()` | 返回可用的 slash commands |411| `supportedCommands()` | 返回可用的 slash commands |

412| `supportedModels()` | 返回具有顯示信息的可用模型 |412| `supportedModels()` | 返回具有顯示信息的可用模型 |

413| `supportedAgents()` | 返回可通過 Agent 工具調用的可用子代理,作為 [`AgentInfo`](#agent-info)`[]` |413| `supportedAgents()` | 返回可通過 Agent 工具調用的可用子代理,作為 [`AgentInfo`](#agentinfo)`[]` |

414| `mcpServerStatus()` | 返回連接的 MCP 服務器的狀態 |414| `mcpServerStatus()` | 返回連接的 MCP 服務器的狀態 |

415| `accountInfo()` | 返回帳戶信息 |415| `accountInfo()` | 返回帳戶信息 |

416| `reconnectMcpServer(serverName)` | 按名稱重新連接 MCP 服務器 |416| `reconnectMcpServer(serverName)` | 按名稱重新連接 MCP 服務器 |


493| `background` | 否 | 當調用時,將此代理作為非阻塞後台任務運行 |493| `background` | 否 | 當調用時,將此代理作為非阻塞後台任務運行 |

494| `memory` | 否 | 此代理的內存源:`'user'`、`'project'` 或 `'local'` |494| `memory` | 否 | 此代理的內存源:`'user'`、`'project'` 或 `'local'` |

495| `effort` | 否 | 此代理的推理努力級別。接受命名級別或整數 |495| `effort` | 否 | 此代理的推理努力級別。接受命名級別或整數 |

496| `permissionMode` | 否 | 此代理內工具執行的權限模式。見 [`PermissionMode`](#permission-mode) |496| `permissionMode` | 否 | 此代理內工具執行的權限模式。見 [`PermissionMode`](#permissionmode) |

497| `criticalSystemReminder_EXPERIMENTAL` | 否 | 實驗性:添加到系統提示的關鍵提醒 |497| `criticalSystemReminder_EXPERIMENTAL` | 否 | 實驗性:添加到系統提示的關鍵提醒 |

498 498 

499### `AgentMcpServerSpec`499### `AgentMcpServerSpec`


651```651```

652 652 

653| 選項 | 類型 | 描述 |653| 選項 | 類型 | 描述 |

654| :--------------- | :------------------------------------------- | :--------------------- |654| :--------------- | :------------------------------------------ | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

655| `signal` | `AbortSignal` | 如果應中止操作則發出信號 |655| `signal` | `AbortSignal` | 如果應中止操作則發出信號 |

656| `suggestions` | [`PermissionUpdate`](#permission-update)`[]` | 建議的權限更新,以便用戶不會再次被提示此工具 |656| `suggestions` | [`PermissionUpdate`](#permissionupdate)`[]` | 建議的權限更新,以便用戶不會再次被提示此工具。Bash 提示包括帶有 `localSettings` [目標](#permissionupdatedestination) 的建議,因此在 `updatedPermissions` 中返回它會將規則寫入 `.claude/settings.local.json` 並在會話中持久化。 |

657| `blockedPath` | `string` | 觸發權限請求的文件路徑(如果適用) |657| `blockedPath` | `string` | 觸發權限請求的文件路徑(如果適用) |

658| `decisionReason` | `string` | 解釋為什麼觸發此權限請求 |658| `decisionReason` | `string` | 解釋為什麼觸發此權限請求 |

659| `toolUseID` | `string` | 此特定工具調用在助手消息中的唯一標識符 |659| `toolUseID` | `string` | 此特定工具調用在助手消息中的唯一標識符 |


2379 | McpClaudeAIProxyServerConfig;2379 | McpClaudeAIProxyServerConfig;

2380```2380```

2381 2381 

2382見 [`McpServerConfig`](#mcp-server-config) 了解每種傳輸類型的詳情。2382見 [`McpServerConfig`](#mcpserverconfig) 了解每種傳輸類型的詳情。

2383 2383 

2384### `AccountInfo`2384### `AccountInfo`

2385 2385 


2825```2825```

2826 2826 

2827| 屬性 | 類型 | 默認值 | 描述 |2827| 屬性 | 類型 | 默認值 | 描述 |

2828| :-------------------------- | :------------------------------------------------------ | :---------- | :------------------------------------------------------------------------------------------------------------------------------- |2828| :-------------------------- | :---------------------------------------------------- | :---------- | :------------------------------------------------------------------------------------------------------------------------------- |

2829| `enabled` | `boolean` | `false` | 為命令執行啟用沙箱模式 |2829| `enabled` | `boolean` | `false` | 為命令執行啟用沙箱模式 |

2830| `autoAllowBashIfSandboxed` | `boolean` | `true` | 啟用沙箱時自動批准 bash 命令 |2830| `autoAllowBashIfSandboxed` | `boolean` | `true` | 啟用沙箱時自動批准 bash 命令 |

2831| `excludedCommands` | `string[]` | `[]` | 始終繞過沙箱限制的命令(例如,`['docker']`)。這些自動運行在沙箱外,無需模型參與 |2831| `excludedCommands` | `string[]` | `[]` | 始終繞過沙箱限制的命令(例如,`['docker']`)。這些自動運行在沙箱外,無需模型參與 |

2832| `allowUnsandboxedCommands` | `boolean` | `true` | 允許模型請求在沙箱外運行命令。當為 `true` 時,模型可以在工具輸入中設置 `dangerouslyDisableSandbox`,這會回退到 [權限系統](#permissions-fallback-for-unsandboxed-commands) |2832| `allowUnsandboxedCommands` | `boolean` | `true` | 允許模型請求在沙箱外運行命令。當為 `true` 時,模型可以在工具輸入中設置 `dangerouslyDisableSandbox`,這會回退到 [權限系統](#permissions-fallback-for-unsandboxed-commands) |

2833| `network` | [`SandboxNetworkConfig`](#sandbox-network-config) | `undefined` | 網絡特定的沙箱配置 |2833| `network` | [`SandboxNetworkConfig`](#sandboxnetworkconfig) | `undefined` | 網絡特定的沙箱配置 |

2834| `filesystem` | [`SandboxFilesystemConfig`](#sandbox-filesystem-config) | `undefined` | 文件系統特定的沙箱配置,用於讀/寫限制 |2834| `filesystem` | [`SandboxFilesystemConfig`](#sandboxfilesystemconfig) | `undefined` | 文件系統特定的沙箱配置,用於讀/寫限制 |

2835| `ignoreViolations` | `Record<string, string[]>` | `undefined` | 違規類別到要忽略的模式的映射(例如,`{ file: ['/tmp/*'], network: ['localhost'] }`) |2835| `ignoreViolations` | `Record<string, string[]>` | `undefined` | 違規類別到要忽略的模式的映射(例如,`{ file: ['/tmp/*'], network: ['localhost'] }`) |

2836| `enableWeakerNestedSandbox` | `boolean` | `false` | 為兼容性啟用較弱的嵌套沙箱 |2836| `enableWeakerNestedSandbox` | `boolean` | `false` | 為兼容性啟用較弱的嵌套沙箱 |

2837| `ripgrep` | `{ command: string; args?: string[] }` | `undefined` | 沙箱環境中的自定義 ripgrep 二進制配置 |2837| `ripgrep` | `{ command: string; args?: string[] }` | `undefined` | 沙箱環境中的自定義 ripgrep 二進制配置 |

data-usage.md +1 −1

Details

67 67 

68下圖顯示 Claude Code 在安裝和正常操作期間如何連接到外部服務。實線表示必需的連接,而虛線表示可選或使用者啟動的資料流。68下圖顯示 Claude Code 在安裝和正常操作期間如何連接到外部服務。實線表示必需的連接,而虛線表示可選或使用者啟動的資料流。

69 69 

70<img src="https://mintcdn.com/claude-code/YcBW2H7CArGcduPb/images/claude-code-data-flow.svg?fit=max&auto=format&n=YcBW2H7CArGcduPb&q=85&s=b600a89f84fc86f9ff7be00a466c0635" alt="顯示 Claude Code 外部連接的圖表:安裝/更新連接到發佈伺服器,使用者請求連接到 Anthropic 服務,包括 Console 驗證、public-api,以及可選的 Statsig、Sentry 和錯誤報告" width="720" height="520" data-path="images/claude-code-data-flow.svg" />70<img src="https://mintcdn.com/claude-code/RcOyXc06Ja8cuvMZ/images/claude-code-data-flow.svg?fit=max&auto=format&n=RcOyXc06Ja8cuvMZ&q=85&s=b5be40abf333defe984993af89546c19" alt="顯示 Claude Code 外部連接的圖表:安裝/更新連接到發佈伺服器,使用者請求連接到 Anthropic 服務,包括 Console 驗證、public-api,以及可選的 Statsig、Sentry 和錯誤報告" width="720" height="520" data-path="images/claude-code-data-flow.svg" />

71 71 

72Claude Code 在本機執行。為了與 LLM 互動,Claude Code 透過網路發送資料。此資料包括所有使用者提示和模型輸出,在傳輸中透過 TLS 1.2+ 加密。Claude Code 與大多數流行的 VPN 和 LLM 代理相容。72Claude Code 在本機執行。為了與 LLM 互動,Claude Code 透過網路發送資料。此資料包括所有使用者提示和模型輸出,在傳輸中透過 TLS 1.2+ 加密。Claude Code 與大多數流行的 VPN 和 LLM 代理相容。

73 73 

desktop.md +5 −3

Details

282 282 

283### 使用會話並行工作283### 使用會話並行工作

284 284 

285點擊側邊欄中的 **+ New session**,或在 macOS 上按 **Cmd+N** 或在 Windows 上按 **Ctrl+N**,以並行處理多個任務。按 **Ctrl+Tab** 和 **Ctrl+Shift+Tab** 以循環瀏覽側邊欄中的會話。對於 Git 儲存庫,每個會話都會使用 [Git worktrees](/zh-TW/common-workflows#run-parallel-claude-code-sessions-with-git-worktrees) 獲得自己的隔離專案副本,因此一個會話中的變更不會影響其他會話,直到您提交它們。285點擊側邊欄中的 **+ New session**,或在 macOS 上按 **Cmd+N** 或在 Windows 上按 **Ctrl+N**,以並行處理多個任務。按 **Ctrl+Tab** 和 **Ctrl+Shift+Tab** 以循環瀏覽側邊欄中的會話。對於 Git 儲存庫,每個會話都會使用 [Git worktrees](/zh-TW/worktrees) 獲得自己的隔離專案副本,因此一個會話中的變更不會影響其他會話,直到您提交它們。

286 

287若要同時檢視兩個會話,請在 macOS 上按住 **Cmd** 或在 Windows 上按住 **Ctrl**,然後點擊側邊欄中的會話。會話會在您已開啟的會話旁邊的第二個窗格中開啟。當分割處於活動狀態時,點擊另一個側邊欄會話會取代具有焦點的窗格。在 macOS 上按 **Cmd+\\** 或在 Windows 上按 **Ctrl+\\** 以關閉焦點窗格並返回單一會話。

286 288 

287Worktrees 預設儲存在 `<project-root>/.claude/worktrees/` 中。您可以在「設定」→「Claude Code」下的「Worktree location」中將其變更為自訂目錄。您也可以設定一個分支前綴,該前綴會被加在每個 worktree 分支名稱前面,這對於保持 Claude 建立的分支井然有序很有用。若要在完成後移除 worktree,請將滑鼠懸停在側邊欄中的會話上,然後點擊存檔圖示。若要在 PR 合併或關閉後自動存檔會話,請在「設定」→「Claude Code」中開啟 **Auto-archive after PR merge or close**。自動存檔僅適用於已完成執行的本機會話。289Worktrees 預設儲存在 `<project-root>/.claude/worktrees/` 中。您可以在「設定」→「Claude Code」下的「Worktree location」中將其變更為自訂目錄。您也可以設定一個分支前綴,該前綴會被加在每個 worktree 分支名稱前面,這對於保持 Claude 建立的分支井然有序很有用。若要在完成後移除 worktree,請將滑鼠懸停在側邊欄中的會話上,然後點擊存檔圖示。若要在 PR 合併或關閉後自動存檔會話,請在「設定」→「Claude Code」中開啟 **Auto-archive after PR merge or close**。自動存檔僅適用於已完成執行的本機會話。

288 290 

289若要在新 worktrees 中包含 gitignored 檔案(如 `.env`),請在您的專案根目錄中建立 [`.worktreeinclude` 檔案](/zh-TW/common-workflows#copy-gitignored-files-to-worktrees)。291若要在新 worktrees 中包含 gitignored 檔案(如 `.env`),請在您的專案根目錄中建立 [`.worktreeinclude` 檔案](/zh-TW/worktrees#copy-gitignored-files-into-worktrees)。

290 292 

291<Note>293<Note>

292 會話隔離需要 [Git](https://git-scm.com/downloads)。大多數 Mac 預設包含 Git。在終端機中執行 `git --version` 進行檢查。在 Windows 上,Code 標籤需要 Git 才能運作:[下載 Git for Windows](https://git-scm.com/downloads/win)、安裝它,然後重新啟動應用程式。如果您遇到 Git 錯誤,請在 [Cowork 標籤](https://claude.com/product/cowork) 中詢問 Claude 以幫助排除您的設定問題。294 會話隔離需要 [Git](https://git-scm.com/downloads)。大多數 Mac 預設包含 Git。在終端機中執行 `git --version` 進行檢查。在 Windows 上,Code 標籤需要 Git 才能運作:[下載 Git for Windows](https://git-scm.com/downloads/win)、安裝它,然後重新啟動應用程式。如果您遇到 Git 錯誤,請在 [Cowork 標籤](https://claude.com/product/cowork) 中詢問 Claude 以幫助排除您的設定問題。


516 518 

517若要在任何平台上為本機會話和開發伺服器設定環境變數,請在提示框中開啟環境下拉式選單,將滑鼠懸停在 **Local** 上,然後點擊齒輪圖示以開啟本機環境編輯器。您在此處儲存的變數會在您的機器上加密儲存,並適用於您啟動的每個本機會話和預覽伺服器。您也可以將變數新增到 `~/.claude/settings.json` 檔案中的 `env` 金鑰,儘管這些僅到達 Claude 會話而不是開發伺服器。有關支援的變數的完整清單,請參閱[環境變數](/zh-TW/env-vars)。519若要在任何平台上為本機會話和開發伺服器設定環境變數,請在提示框中開啟環境下拉式選單,將滑鼠懸停在 **Local** 上,然後點擊齒輪圖示以開啟本機環境編輯器。您在此處儲存的變數會在您的機器上加密儲存,並適用於您啟動的每個本機會話和預覽伺服器。您也可以將變數新增到 `~/.claude/settings.json` 檔案中的 `env` 金鑰,儘管這些僅到達 Claude 會話而不是開發伺服器。有關支援的變數的完整清單,請參閱[環境變數](/zh-TW/env-vars)。

518 520 

519[擴展思考](/zh-TW/common-workflows#use-extended-thinking-thinking-mode)預設啟用,這改進了複雜推理任務的效能,但使用額外的 tokens。若要完全停用思考,請在本機環境編輯器中將 `MAX_THINKING_TOKENS` 設定為 `0`。在具有[自適應推理](/zh-TW/model-config#adjust-effort-level)的模型上,任何其他 `MAX_THINKING_TOKENS` 值都會被忽略,因為自適應推理控制思考深度。在 Opus 4.6 和 Sonnet 4.6 上,將 `CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING` 設定為 `1` 以使用固定思考預算;Opus 4.7 始終使用自適應推理,沒有固定預算模式。521[擴展思考](/zh-TW/model-config#extended-thinking)預設啟用,這改進了複雜推理任務的效能,但使用額外的 tokens。若要完全停用思考,請在本機環境編輯器中將 `MAX_THINKING_TOKENS` 設定為 `0`。在具有[自適應推理](/zh-TW/model-config#adjust-effort-level)的模型上,任何其他 `MAX_THINKING_TOKENS` 值都會被忽略,因為自適應推理控制思考深度。在 Opus 4.6 和 Sonnet 4.6 上,將 `CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING` 設定為 `1` 以使用固定思考預算;Opus 4.7 始終使用自適應推理,沒有固定預算模式。

520 522 

521### 遠端會話523### 遠端會話

522 524 

Details

12 有關核心代理迴圈如何運作的資訊,請參閱[Claude Code 如何運作](/zh-TW/how-claude-code-works)。12 有關核心代理迴圈如何運作的資訊,請參閱[Claude Code 如何運作](/zh-TW/how-claude-code-works)。

13</Note>13</Note>

14 14 

15**初次使用 Claude Code?** 從[CLAUDE.md](/zh-TW/memory)開始了解專案約定。根據需要添加其他擴展15**初次使用 Claude Code?** 從[CLAUDE.md](/zh-TW/memory)開始了解專案約定,然後根據特定觸發器添加其他擴展

16 16 

17## 概述17## 概述

18 18 


23* **[MCP](/zh-TW/mcp)** 將 Claude 連接到外部服務和工具23* **[MCP](/zh-TW/mcp)** 將 Claude 連接到外部服務和工具

24* **[Subagents](/zh-TW/sub-agents)** 在隔離的上下文中運行自己的迴圈,返回摘要24* **[Subagents](/zh-TW/sub-agents)** 在隔離的上下文中運行自己的迴圈,返回摘要

25* **[Agent teams](/zh-TW/agent-teams)** 協調多個獨立會話,具有共享任務和點對點訊息傳遞25* **[Agent teams](/zh-TW/agent-teams)** 協調多個獨立會話,具有共享任務和點對點訊息傳遞

26* **[Hooks](/zh-TW/hooks)** 完全在迴圈外運行作為確定性指令碼26* **[Hooks](/zh-TW/hooks-guide)** 在生命週期事件上觸發,可以運行指令碼、HTTP 請求、提示或 subagent

27* **[Plugins](/zh-TW/plugins)** 和 **[marketplaces](/zh-TW/plugin-marketplaces)** 打包和分發這些功能27* **[Plugins](/zh-TW/plugins)** 和 **[marketplaces](/zh-TW/plugin-marketplaces)** 打包和分發這些功能

28 28 

29[Skills](/zh-TW/skills)是最靈活的擴展。Skill 是一個包含知識、工作流程或指令的 markdown 檔案。您可以使用像 `/deploy` 這樣的命令調用 skills,或者 Claude 可以在相關時自動載入它們。Skills 可以在您目前的對話中運行,或通過 subagents 在隔離的上下文中運行。29[Skills](/zh-TW/skills)是最靈活的擴展。Skill 是一個包含知識、工作流程或指令的 markdown 檔案。您可以使用像 `/deploy` 這樣的命令調用 skills,或者 Claude 可以在相關時自動載入它們。Skills 可以在您目前的對話中運行,或通過 subagents 在隔離的上下文中運行。


33功能範圍從 Claude 在每個會話中看到的始終開啟的上下文,到您或 Claude 可以調用的按需功能,再到在特定事件上運行的背景自動化。下表顯示了可用的功能以及何時使用每一個。33功能範圍從 Claude 在每個會話中看到的始終開啟的上下文,到您或 Claude 可以調用的按需功能,再到在特定事件上運行的背景自動化。下表顯示了可用的功能以及何時使用每一個。

34 34 

35| 功能 | 它的作用 | 何時使用 | 範例 |35| 功能 | 它的作用 | 何時使用 | 範例 |

36| ------------------------------------- | ---------------------- | --------------------- | ----------------------------------------- |36| ------------------------------------- | ------------------------------ | --------------------- | ----------------------------------------- |

37| **CLAUDE.md** | 每次對話載入的持久上下文 | 專案約定、「始終執行 X」規則 | 「使用 pnpm,而不是 npm。在提交前運行測試。」 |37| **CLAUDE.md** | 每次對話載入的持久上下文 | 專案約定、「始終執行 X」規則 | 「使用 pnpm,而不是 npm。在提交前運行測試。」 |

38| **Skill** | Claude 可以使用的指令、知識和工作流程 | 可重複使用的內容、參考文件、可重複的任務 | `/deploy` 運行您的部署檢查清單;包含端點模式的 API 文件 skill |38| **Skill** | Claude 可以使用的指令、知識和工作流程 | 可重複使用的內容、參考文件、可重複的任務 | `/deploy` 運行您的部署檢查清單;包含端點模式的 API 文件 skill |

39| **Subagent** | 返回摘要結果的隔離執行上下文 | 上下文隔離、並行任務、專門的工作者 | 讀取許多檔案但僅返回關鍵發現的研究任務 |39| **Subagent** | 返回摘要結果的隔離執行上下文 | 上下文隔離、並行任務、專門的工作者 | 讀取許多檔案但僅返回關鍵發現的研究任務 |

40| **[Agent teams](/zh-TW/agent-teams)** | 協調多個獨立的 Claude Code 會話 | 並行研究、新功能開發、使用競爭假設進行除錯 | 生成審查者以同時檢查安全性、效能和測試 |40| **[Agent teams](/zh-TW/agent-teams)** | 協調多個獨立的 Claude Code 會話 | 並行研究、新功能開發、使用競爭假設進行除錯 | 生成審查者以同時檢查安全性、效能和測試 |

41| **MCP** | 連接到外部服務 | 外部資料或操作 | 查詢您的資料庫、發佈到 Slack、控制瀏覽器 |41| **MCP** | 連接到外部服務 | 外部資料或操作 | 查詢您的資料庫、發佈到 Slack、控制瀏覽器 |

42| **Hook** | 在事件上運行的確定性指令碼 | 可預測的自動化,不涉及 LLM | 在每次檔案編輯後運行 ESLint |42| **Hook** | 由事件觸發的指令碼、HTTP 請求、提示或 subagent | 必須在每個匹配事件上運行的自動化 | 在每次檔案編輯後運行 ESLint |

43 43 

44**[Plugins](/zh-TW/plugins)** 是打包層。Plugin 將 skills、hooks、subagents 和 MCP servers 捆綁到單個可安裝單元中。Plugin skills 是命名空間的(如 `/my-plugin:review`),因此多個 plugins 可以共存。當您想在多個儲存庫中重複使用相同的設置或通過 **[marketplace](/zh-TW/plugin-marketplaces)** 分發給他人時,使用 plugins。44**[Plugins](/zh-TW/plugins)** 是打包層。Plugin 將 skills、hooks、subagents 和 MCP servers 捆綁到單個可安裝單元中。Plugin skills 是命名空間的(如 `/my-plugin:review`),因此多個 plugins 可以共存。當您想在多個儲存庫中重複使用相同的設置或通過 **[marketplace](/zh-TW/plugin-marketplaces)** 分發給他人時,使用 plugins。

45 45 

46### 隨著時間推移構建您的設置

47 

48您不需要預先配置所有內容。每個功能都有一個可識別的觸發器,大多數團隊大致按以下順序添加它們:

49 

50| 觸發器 | 添加 |

51| :--------------------------- | :----------------------------------- |

52| Claude 兩次出錯的約定或命令 | 將其添加到 [CLAUDE.md](/zh-TW/memory) |

53| 您一直在輸入相同的提示來啟動任務 | 將其保存為使用者可調用的 [skill](/zh-TW/skills) |

54| 您第三次將相同的劇本或多步驟程序粘貼到聊天中 | 將其捕獲為 [skill](/zh-TW/skills) |

55| 您一直在從 Claude 無法看到的瀏覽器選項卡複製資料 | 將該系統連接為 [MCP server](/zh-TW/mcp) |

56| 一個附帶任務用您不會再次參考的輸出淹沒您的對話 | 通過 [subagent](/zh-TW/sub-agents) 路由它 |

57| 您希望每次都發生某事而無需詢問 | 編寫 [hook](/zh-TW/hooks-guide) |

58| 第二個儲存庫需要相同的設置 | 將其打包為 [plugin](/zh-TW/plugins) |

59 

60相同的觸發器告訴您何時更新您已經擁有的內容。重複的錯誤或反覆出現的審查評論是 CLAUDE.md 編輯,而不是聊天中的一次性更正。您一直手動調整的工作流程是需要另一次修訂的 skill。

61 

46### 比較相似的功能62### 比較相似的功能

47 63 

48某些功能可能看起來相似。以下是如何區分它們。64某些功能可能看起來相似。以下是如何區分它們。


55 * **Subagents** 是與您的主要對話分開運行的隔離工作者71 * **Subagents** 是與您的主要對話分開運行的隔離工作者

56 72 

57 | 方面 | Skill | Subagent |73 | 方面 | Skill | Subagent |

58 | -------- | ---------------- | --------------------- |74 | ------------------------------------ | ---------------- | --------------------- |

59 | **它是什麼** | 可重複使用的指令、知識或工作流程 | 具有自己上下文的隔離工作者 |75 | **它是什麼** | 可重複使用的指令、知識或工作流程 | 具有自己上下文的隔離工作者 |

60 | **主要優勢** | 在上下文之間共享內容 | 上下文隔離。工作單獨進行,僅返回摘要 |76 | **主要優勢** | 在上下文之間共享內容 | 上下文隔離。工作單獨進行,僅返回摘要 |

77 | **[上下文視窗](/zh-TW/context-window)影響** | 添加到您的主視窗 | 使用具有自己輸入和輸出令牌的單獨視窗 |

61 | **最適合** | 參考資料、可調用的工作流程 | 讀取許多檔案的任務、並行工作、專門的工作者 |78 | **最適合** | 參考資料、可調用的工作流程 | 讀取許多檔案的任務、並行工作、專門的工作者 |

62 79 

63 **Skills 可以是參考或操作。** 參考 skills 提供 Claude 在整個會話中使用的知識(如您的 API 風格指南)。操作 skills 告訴 Claude 執行特定操作(如運行您的部署工作流程的 `/deploy`)。80 **Skills 可以是參考或操作。** 參考 skills 提供 Claude 在整個會話中使用的知識(如您的 API 風格指南)。操作 skills 告訴 Claude 執行特定操作(如運行您的部署工作流程的 `/deploy`)。


142 159 

143 範例:MCP 伺服器將 Claude 連接到您的資料庫。Skill 教導 Claude 您的資料模型、常見查詢模式,以及用於不同任務的表格。160 範例:MCP 伺服器將 Claude 連接到您的資料庫。Skill 教導 Claude 您的資料模型、常見查詢模式,以及用於不同任務的表格。

144 </Tab>161 </Tab>

162 

163 <Tab title="Hook vs Skill">

164 Hook 在生命週期事件上觸發;skill 被載入上下文供 Claude 應用。

165 

166 | 方面 | Hook | Skill |

167 | --------- | -------------------------------------------------------------------- | ---------------------------------- |

168 | **運行** | 殼層命令、HTTP 請求、LLM 提示或 subagent | Claude 讀取並遵循的指令 |

169 | **由以下觸發** | [生命週期事件](/zh-TW/hooks#hook-events),例如 `PostToolUse` 或 `SessionStart` | 您輸入 `/<name>`,或 Claude 將描述與您的任務相匹配 |

170 | **確定性** | 始終在其事件上觸發;觸發器是有保證的 | Claude 解釋指令;結果可能會有所不同 |

171 | **上下文成本** | 零,除非 hook 返回輸出 | 描述在每個會話載入;使用時完整內容載入 |

172 | **最適合** | 每次都以相同方式發生且不需要 Claude 思考的操作 | 需要推理的工作流程、參考資料、多步驟任務 |

173 

174 **當操作必須每次都以相同方式發生且不需要 Claude 思考時,使用 hook**。例如:保存時格式化、拒絕 `rm -rf /`、在會話結束時發佈 Slack 訊息。

175 

176 **當 Claude 應該決定如何應用步驟或內容是知識而不是指令碼時,使用 skill**。例如:`/release` 檢查清單、您的 API 風格指南、除錯劇本。

177 

178 **將護欄放在 hooks 中。** CLAUDE.md 或 skill 中的「永遠不要編輯 `.env`」之類的指令是請求,而不是保證。阻止編輯的 `PreToolUse` hook 是強制執行。如果規則必須每次都成立,將其作為 hook 而不是提示指令。

179 

180 **Hook 輸出進入上下文。** 運行您的 linter 的 `PostToolUse` hook 將結果作為 Claude 讀取的文本反饋;`/fix-lint` skill 告訴 Claude 如何解決它們。

181 </Tab>

145</Tabs>182</Tabs>

146 183 

147### 了解功能如何分層184### 了解功能如何分層


151* **CLAUDE.md 檔案** 是累加的:所有級別同時對 Claude 的上下文貢獻內容。來自您的工作目錄及以上的檔案在啟動時載入;子目錄在您在其中工作時載入。當指令衝突時,Claude 使用判斷來協調它們,更具體的指令通常優先。請參閱 [CLAUDE.md 檔案如何載入](/zh-TW/memory#how-claudemd-files-load)。188* **CLAUDE.md 檔案** 是累加的:所有級別同時對 Claude 的上下文貢獻內容。來自您的工作目錄及以上的檔案在啟動時載入;子目錄在您在其中工作時載入。當指令衝突時,Claude 使用判斷來協調它們,更具體的指令通常優先。請參閱 [CLAUDE.md 檔案如何載入](/zh-TW/memory#how-claudemd-files-load)。

152* **Skills 和 subagents** 按名稱覆蓋:當相同名稱存在於多個級別時,一個定義根據優先級獲勝(skills 為受管理 > 使用者 > 專案;subagents 為受管理 > CLI 標誌 > 專案 > 使用者 > plugin)。Plugin skills 是[命名空間](/zh-TW/plugins#add-skills-to-your-plugin)的,以避免衝突。請參閱 [skill 發現](/zh-TW/skills#where-skills-live) 和 [subagent 範圍](/zh-TW/sub-agents#choose-the-subagent-scope)。189* **Skills 和 subagents** 按名稱覆蓋:當相同名稱存在於多個級別時,一個定義根據優先級獲勝(skills 為受管理 > 使用者 > 專案;subagents 為受管理 > CLI 標誌 > 專案 > 使用者 > plugin)。Plugin skills 是[命名空間](/zh-TW/plugins#add-skills-to-your-plugin)的,以避免衝突。請參閱 [skill 發現](/zh-TW/skills#where-skills-live) 和 [subagent 範圍](/zh-TW/sub-agents#choose-the-subagent-scope)。

153* **MCP 伺服器** 按名稱覆蓋:本地 > 專案 > 使用者。請參閱 [MCP 範圍](/zh-TW/mcp#scope-hierarchy-and-precedence)。190* **MCP 伺服器** 按名稱覆蓋:本地 > 專案 > 使用者。請參閱 [MCP 範圍](/zh-TW/mcp#scope-hierarchy-and-precedence)。

154* **Hooks** 合併:所有註冊的 hooks 為其匹配事件觸發,無論來源如何。請參閱 [hooks](/zh-TW/hooks)。191* **Hooks** 合併:所有註冊的 hooks 為其匹配事件觸發,無論來源如何。請參閱 [hooks](/zh-TW/hooks-guide)。

155 192 

156### 結合功能193### 結合功能

157 194 


163| ---------------------- | -------------------------------------- | ---------------------------------------------- |200| ---------------------- | -------------------------------------- | ---------------------------------------------- |

164| **Skill + MCP** | MCP 提供連接;skill 教導 Claude 如何很好地使用它 | MCP 連接到您的資料庫,skill 記錄您的架構和查詢模式 |201| **Skill + MCP** | MCP 提供連接;skill 教導 Claude 如何很好地使用它 | MCP 連接到您的資料庫,skill 記錄您的架構和查詢模式 |

165| **Skill + Subagent** | Skill 生成 subagents 進行並行工作 | `/audit` skill 啟動在隔離上下文中工作的安全性、效能和風格 subagents |202| **Skill + Subagent** | Skill 生成 subagents 進行並行工作 | `/audit` skill 啟動在隔離上下文中工作的安全性、效能和風格 subagents |

166| **CLAUDE.md + Skills** | CLAUDE.md 保持始終開啟的規則;skills 保持按需載入的參考資料 | CLAUDE.md 說'遵循我們的 API 約定',skill 包含完整的 API 風格指南 |203| **CLAUDE.md + Skills** | CLAUDE.md 保持始終開啟的規則;skills 保持按需載入的參考資料 | CLAUDE.md 說遵循我們的 API 約定,skill 包含完整的 API 風格指南 |

167| **Hook + MCP** | Hook 通過 MCP 觸發外部操作 | 編輯後 hook 在 Claude 修改關鍵檔案時發送 Slack 通知 |204| **Hook + MCP** | Hook 通過 MCP 觸發外部操作 | 編輯後 hook 在 Claude 修改關鍵檔案時發送 Slack 通知 |

168 205 

169## 了解上下文成本206## 了解上下文成本

170 207 

171您添加的每個功能都消耗 Claude 的一些上下文。太多可能會填滿您的上下文視窗,但它也可能添加噪聲,使 Claude 效率降低;skills 可能無法正確觸發,或 Claude 可能會失去對您的約定的追蹤。了解這些權衡有助於您構建有效的設置。208您添加的每個功能都消耗 Claude 的一些上下文。太多可能會填滿您的上下文視窗,但它也可能添加噪聲,使 Claude 效率降低;skills 可能無法正確觸發,或 Claude 可能會失去對您的約定的追蹤。了解這些權衡有助於您構建有效的設置。有關這些功能如何在運行會話中結合的互動式視圖,請參閱[探索上下文視窗](/zh-TW/context-window)。

172 209 

173### 按功能的上下文成本210### 按功能的上下文成本

174 211 


178| ------------- | ---------- | ------------------ | ----------------- |215| ------------- | ---------- | ------------------ | ----------------- |

179| **CLAUDE.md** | 會話開始 | 完整內容 | 每個請求 |216| **CLAUDE.md** | 會話開始 | 完整內容 | 每個請求 |

180| **Skills** | 會話開始 + 使用時 | 啟動時的描述,使用時的完整內容 | 低(每個請求的描述)\* |217| **Skills** | 會話開始 + 使用時 | 啟動時的描述,使用時的完整內容 | 低(每個請求的描述)\* |

181| **MCP 伺服器** | 會話開始 | 所有工具定義和架構 | 每個請求 |218| **MCP 伺服器** | 會話開始 | 工具名稱;完整架構按需 | 低,直到使用工具 |

182| **Subagents** | 生成時 | 具有指定 skills 的新鮮上下文 | 與主會話隔離 |219| **Subagents** | 生成時 | 具有指定 skills 的新鮮上下文 | 與主會話隔離 |

183| **Hooks** | 觸發時 | 無(外部運行) | 零,除非 hook 返回額外上下文 |220| **Hooks** | 觸發時 | 無(外部運行) | 零,除非 hook 返回額外上下文 |

184 221 


188 225 

189每個功能在您的會話中的不同點載入。下面的選項卡說明每個功能何時載入以及什麼進入上下文。226每個功能在您的會話中的不同點載入。下面的選項卡說明每個功能何時載入以及什麼進入上下文。

190 227 

191<img src="https://mintcdn.com/claude-code/6yTCYq1p37ZB8-CQ/images/context-loading.svg?fit=max&auto=format&n=6yTCYq1p37ZB8-CQ&q=85&s=5a58ce953a35a2412892015e2ad6cb67" alt="上下文載入:CLAUDE.md MCP 在會話開始時載入並保留在每個請求中。Skills 在啟動時載入描述,在調用時載入完整內容。Subagents 獲得隔離的上下文。Hooks 外部運行。" width="720" height="410" data-path="images/context-loading.svg" />228<img src="https://mintcdn.com/claude-code/6yTCYq1p37ZB8-CQ/images/context-loading.svg?fit=max&auto=format&n=6yTCYq1p37ZB8-CQ&q=85&s=5a58ce953a35a2412892015e2ad6cb67" alt="上下文載入:CLAUDE.md 在會話開始時載入並保留在每個請求中。MCP 工具名稱在啟動時載入,完整架構延遲到使用。Skills 在啟動時載入描述,在調用時載入完整內容。Subagents 獲得隔離的上下文。Hooks 外部運行。" width="720" height="410" data-path="images/context-loading.svg" />

192 229 

193<Tabs>230<Tabs>

194 <Tab title="CLAUDE.md">231 <Tab title="CLAUDE.md">


202 </Tab>239 </Tab>

203 240 

204 <Tab title="Skills">241 <Tab title="Skills">

205 Skills 是 Claude 工具包中的額外功能。它們可以是參考資料(如 API 風格指南)或可調用的工作流程,您可以使用 `/<name>` 觸發(如 `/deploy`)。Claude Code 附帶[捆綁的 skills](/zh-TW/skills#bundled-skills),如 `/simplify`、`/batch` 和 `/debug`,開箱即用。您也可以創建自己的。Claude 在適當時使用 skills,或者您可以直接調用一個。242 Skills 是 Claude 工具包中的額外功能。它們可以是參考資料(如 API 風格指南)或可調用的工作流程,您可以使用 `/<name>` 觸發(如 `/deploy`)。Claude Code 附帶[捆綁的 skills](/zh-TW/commands),如 `/simplify`、`/batch` 和 `/debug`,開箱即用。您也可以創建自己的。Claude 在適當時使用 skills,或者您可以直接調用一個。

206 243 

207 **何時:** 取決於 skill 的配置。預設情況下,描述在會話開始時載入,完整內容在使用時載入。對於僅使用者 skills(`disable-model-invocation: true`),在您調用它們之前不會載入任何內容。244 **何時:** 取決於 skill 的配置。預設情況下,描述在會話開始時載入,完整內容在使用時載入。對於僅使用者 skills(`disable-model-invocation: true`),在您調用它們之前不會載入任何內容。

208 245 


220 <Tab title="MCP 伺服器">257 <Tab title="MCP 伺服器">

221 **何時:** 會話開始。258 **何時:** 會話開始。

222 259 

223 **什麼載入:** 來自連接伺服器的所有工具定義和 JSON 架構260 **什麼載入:** 來自連接伺服器的工具名稱。完整 JSON 架構保持延遲,直到 Claude 需要特定工具

224 261 

225 **上下文成本:** [工具搜尋](/zh-TW/mcp#scale-with-mcp-tool-search)預設啟用)將 MCP 工具載入到上下文的 10%,並延遲其餘部分直到需要262 **上下文成本:** [工具搜尋](/zh-TW/mcp#scale-with-mcp-tool-search)預設啟用,因此閒置 MCP 工具消耗最少上下文

226 263 

227 **可靠性注意:** MCP 連接可能在會話中途無聲地失敗。如果伺服器斷開連接,其工具會無警告地消失。Claude 可能嘗試使用不再存在的工具。如果您注意到 Claude 無法使用它之前可以存取的 MCP 工具,請使用 `/mcp` 檢查連接。264 **可靠性注意:** MCP 連接可能在會話中途無聲地失敗。如果伺服器斷開連接,其工具會無警告地消失。Claude 可能嘗試使用不再存在的工具。如果您注意到 Claude 無法使用它之前可以存取的 MCP 工具,請使用 `/mcp` 檢查連接。

228 265 


245 </Tab>282 </Tab>

246 283 

247 <Tab title="Hooks">284 <Tab title="Hooks">

248 **何時:** 觸發時。Hooks 在特定生命週期事件(如工具執行、會話邊界、提示提交、權限請求和壓縮)時觸發。有關完整清單,請參閱 [Hooks](/zh-TW/hooks)。285 **何時:** 觸發時。Hooks 在特定生命週期事件(如工具執行、會話邊界、提示提交、權限請求和壓縮)時觸發。有關完整清單,請參閱 [Hooks](/zh-TW/hooks-guide)。

249 286 

250 **什麼載入:** 預設情況下無。Hooks 作為外部指令碼運行。287 **什麼載入:** 預設情況下無。Hooks 作為外部指令碼運行。

251 288 

hooks.md +4 −4

Details

974| `decision` | `"block"` 防止提示被處理並從上下文中清除它。省略以允許提示進行 |974| `decision` | `"block"` 防止提示被處理並從上下文中清除它。省略以允許提示進行 |

975| `reason` | 當 `decision` 為 `"block"` 時向使用者顯示。不新增到上下文 |975| `reason` | 當 `decision` 為 `"block"` 時向使用者顯示。不新增到上下文 |

976| `additionalContext` | 新增到 Claude 上下文的字串,與提交的提示一起。請參閱 [為 Claude 新增上下文](#add-context-for-claude) |976| `additionalContext` | 新增到 Claude 上下文的字串,與提交的提示一起。請參閱 [為 Claude 新增上下文](#add-context-for-claude) |

977| `sessionTitle` | 設定工作階段標題,與 `/rename` 相同的效果。使用此項根據提示內容自動命名工作階段 |977| `sessionTitle` | 設定工作階段標題。使用此項根據提示內容自動命名工作階段 |

978 978 

979```json theme={null}979```json theme={null}

980{980{


2412```2412```

2413 2413 

2414| 欄位 | 描述 |2414| 欄位 | 描述 |

2415| :------- | :------------------------- |2415| :------- | :----------------------------------- |

2416| `ok` | `true` 允許操作,`false` 防止它 |2416| `ok` | `true` 允許操作,`false` 防止它。請參閱下面的每個事件行為 |

2417| `reason` | 當 `ok` 為 `false` 時必需。阻止的解釋 |2417| `reason` | 當 `ok` 為 `false` 時必需。決定的解釋 |

2418 2418 

2419`ok: false` 時發生的情況取決於事件:2419`ok: false` 時發生的情況取決於事件:

2420 2420 

permissions.md +4 −4

Details

36| :------------------ | :------------------------------------------------------------------------------- |36| :------------------ | :------------------------------------------------------------------------------- |

37| `default` | 標準行為:在首次使用每個工具時提示權限 |37| `default` | 標準行為:在首次使用每個工具時提示權限 |

38| `acceptEdits` | 自動接受工作目錄或 `additionalDirectories` 中路徑的檔案編輯和常見檔案系統命令(`mkdir`、`touch`、`mv`、`cp` 等) |38| `acceptEdits` | 自動接受工作目錄或 `additionalDirectories` 中路徑的檔案編輯和常見檔案系統命令(`mkdir`、`touch`、`mv`、`cp` 等) |

39| `plan` | Plan Mode:Claude 可以分析但不能修改檔案或執行命令 |39| `plan` | Plan Mode:Claude 讀取檔案並執行唯讀 shell 命令以探索,但不編輯您的原始檔案 |

40| `auto` | 自動批准工具呼叫,並進行背景安全檢查以驗證操作是否符合您的要求。目前為研究預覽版 |40| `auto` | 自動批准工具呼叫,並進行背景安全檢查以驗證操作是否符合您的要求。目前為研究預覽版 |

41| `dontAsk` | 自動拒絕工具,除非透過 `/permissions` 或 `permissions.allow` 規則預先批准 |41| `dontAsk` | 自動拒絕工具,除非透過 `/permissions` 或 `permissions.allow` 規則預先批准 |

42| `bypassPermissions` | 跳過所有權限提示。根目錄和主目錄移除(例如 `rm -rf /`)仍會作為斷路器提示 |42| `bypassPermissions` | 跳過所有權限提示。根目錄和主目錄移除(例如 `rm -rf /`)仍會作為斷路器提示 |


296 296 

297* 權限 deny 規則阻止 Claude 甚至嘗試存取受限資源297* 權限 deny 規則阻止 Claude 甚至嘗試存取受限資源

298* 沙箱限制防止 Bash 命令到達定義邊界外的資源,即使提示注入繞過 Claude 的決策制定298* 沙箱限制防止 Bash 命令到達定義邊界外的資源,即使提示注入繞過 Claude 的決策制定

299* 沙箱中的檔案系統限制使用 Read 和 Edit deny 規則,而不是單獨的沙箱設定299* 沙箱中的檔案系統限制結合 [`sandbox.filesystem`](/zh-TW/sandboxing) 設定與 Read 和 Edit deny 規則;兩者都合併到最終沙箱邊界中

300* 網路限制結合 WebFetch 權限規則與沙箱的 `allowedDomains` 和 `deniedDomains` 清單300* 網路限制結合 WebFetch 權限規則與沙箱的 `allowedDomains` 和 `deniedDomains` 清單

301 301 

302當沙箱啟用 `autoAllowBashIfSandboxed: true`(預設值)時,沙箱化 Bash 命令無需提示即可執行,即使您的權限包括 `ask: Bash(*)`。沙箱邊界替代每個命令提示。明確的 deny 規則仍然適用,以及針對 `/`、您的主目錄或其他關鍵系統路徑的 `rm` 或 `rmdir` 命令仍然會觸發提示。請參閱 [sandbox modes](/zh-TW/sandboxing#sandbox-modes) 以變更此行為。302當沙箱啟用 `autoAllowBashIfSandboxed: true`(預設值)時,沙箱化 Bash 命令無需提示即可執行,即使您的權限包括 `ask: Bash(*)`。沙箱邊界替代每個命令提示。明確的 deny 規則仍然適用,以及針對 `/`、您的主目錄或其他關鍵系統路徑的 `rm` 或 `rmdir` 命令仍然會觸發提示。請參閱 [sandbox modes](/zh-TW/sandboxing#sandbox-modes) 以變更此行為。


316| `allowManagedMcpServersOnly` | 當為 `true` 時,僅尊重受管理設定中的 `allowedMcpServers`。`deniedMcpServers` 仍然從所有來源合併。請參閱 [Managed MCP configuration](/zh-TW/mcp#managed-mcp-configuration) |316| `allowManagedMcpServersOnly` | 當為 `true` 時,僅尊重受管理設定中的 `allowedMcpServers`。`deniedMcpServers` 仍然從所有來源合併。請參閱 [Managed MCP configuration](/zh-TW/mcp#managed-mcp-configuration) |

317| `allowManagedPermissionRulesOnly` | 當為 `true` 時,防止使用者和專案設定定義 `allow`、`ask` 或 `deny` 權限規則。僅套用受管理設定中的規則 |317| `allowManagedPermissionRulesOnly` | 當為 `true` 時,防止使用者和專案設定定義 `allow`、`ask` 或 `deny` 權限規則。僅套用受管理設定中的規則 |

318| `blockedMarketplaces` | 市場來源的封鎖清單。在下載前檢查被封鎖的來源,因此它們永遠不會接觸檔案系統。請參閱 [managed marketplace restrictions](/zh-TW/plugin-marketplaces#managed-marketplace-restrictions) |318| `blockedMarketplaces` | 市場來源的封鎖清單。在下載前檢查被封鎖的來源,因此它們永遠不會接觸檔案系統。請參閱 [managed marketplace restrictions](/zh-TW/plugin-marketplaces#managed-marketplace-restrictions) |

319| `channelsEnabled` | 允許 Team 和 Enterprise 使用者使用 [channels](/zh-TW/channels)。未設定或 `false` 會阻止頻道訊息傳遞,無論使用者傳遞什麼給 `--channels` |319| `channelsEnabled` | 允許組織使用 [channels](/zh-TW/channels)。請參閱 [enterprise controls](/zh-TW/channels#enterprise-controls) 以了解每個方案的預設值 |

320| `forceRemoteSettingsRefresh` | 當為 `true` 時,阻止 CLI 啟動直到遠端受管理設定被新鮮擷取,如果擷取失敗則退出。請參閱 [fail-closed enforcement](/zh-TW/server-managed-settings#enforce-fail-closed-startup) |320| `forceRemoteSettingsRefresh` | 當為 `true` 時,阻止 CLI 啟動直到遠端受管理設定被新鮮擷取,如果擷取失敗則退出。請參閱 [fail-closed enforcement](/zh-TW/server-managed-settings#enforce-fail-closed-startup) |

321| `pluginTrustMessage` | 自訂訊息,附加到安裝前顯示的外掛信任警告 |321| `pluginTrustMessage` | 自訂訊息,附加到安裝前顯示的外掛信任警告 |

322| `sandbox.filesystem.allowManagedReadPathsOnly` | 當為 `true` 時,僅尊重受管理設定中的 `filesystem.allowRead` 路徑。`denyRead` 仍然從所有來源合併 |322| `sandbox.filesystem.allowManagedReadPathsOnly` | 當為 `true` 時,僅尊重受管理設定中的 `filesystem.allowRead` 路徑。`denyRead` 仍然從所有來源合併 |


327`disableBypassPermissionsMode` 通常放在受管理設定中以強制執行組織原則,但它可以從任何範圍工作。使用者可以在自己的設定中設定它以鎖定自己的繞過模式。327`disableBypassPermissionsMode` 通常放在受管理設定中以強制執行組織原則,但它可以從任何範圍工作。使用者可以在自己的設定中設定它以鎖定自己的繞過模式。

328 328 

329<Note>329<Note>

330 [Remote Control](/zh-TW/remote-control) 和 [web sessions](/zh-TW/claude-code-on-the-web) 的存取不由受管理設定金鑰控制在 Team 和 Enterprise 方案上,管理員在 [Claude Code admin settings](https://claude.ai/admin-settings/claude-code) 中啟用或停用這些功能330 在 Team 和 Enterprise 方案上,管理員在 [Claude Code admin settings](https://claude.ai/admin-settings/claude-code) 中啟用或停用 [Remote Control](/zh-TW/remote-control) 和 [web sessions](/zh-TW/claude-code-on-the-web)。Remote Control 可以另外透過 [`disableRemoteControl`](/zh-TW/settings#available-settings) 受管理設定按裝置停用Web sessions 沒有按裝置受管理設定金鑰。

331</Note>331</Note>

332 332 

333## 設定優先順序333## 設定優先順序

platforms.md +7 −4

Details

13根據您喜歡的工作方式和專案所在位置選擇平台。13根據您喜歡的工作方式和專案所在位置選擇平台。

14 14 

15| 平台 | 最適合 | 您將獲得 |15| 平台 | 最適合 | 您將獲得 |

16| :----------------------------------- | :------------------------------------------------ | :--------------------------------------------------------------------------------------------------------------------------------- |16| :----------------------------------- | :------------------------------------------------ | :-------------------------------------------------------------------------------------------------------------------------------------------------------- |

17| [CLI](/zh-TW/quickstart) | 終端工作流程、指令碼、遠端伺服器 | 完整功能集、[Agent SDK](/zh-TW/headless)、第三方提供商 |17| [CLI](/zh-TW/quickstart) | 終端工作流程、指令碼、遠端伺服器 | 完整功能集、[Agent SDK](/zh-TW/headless)、macOS 上的[電腦使用](/zh-TW/computer-use)(Pro 和 Max)、第三方提供商 |

18| [Desktop](/zh-TW/desktop) | 視覺審查、並行會話、託管設定 | Diff 檢視器、應用程式預覽、Pro 和 Max 上的[電腦使用](/zh-TW/desktop#let-claude-use-your-computer)和 [Dispatch](/zh-TW/desktop#sessions-from-dispatch) |18| [Desktop](/zh-TW/desktop) | 視覺審查、並行會話、託管設定 | Diff 檢視器、應用程式預覽、Pro 和 Max 上的[電腦使用](/zh-TW/desktop#let-claude-use-your-computer)和 [Dispatch](/zh-TW/desktop#sessions-from-dispatch) |

19| [VS Code](/zh-TW/vs-code) | 在 VS Code 內工作而無需切換到終端 | 內聯 diff、整合終端、檔案上下文 |19| [VS Code](/zh-TW/vs-code) | 在 VS Code 內工作而無需切換到終端 | 內聯 diff、整合終端、檔案上下文 |

20| [JetBrains](/zh-TW/jetbrains) | 在 IntelliJ、PyCharm、WebStorm 或其他 JetBrains IDE 內工作 | Diff 檢視器、選擇共享、終端會話 |20| [JetBrains](/zh-TW/jetbrains) | 在 IntelliJ、PyCharm、WebStorm 或其他 JetBrains IDE 內工作 | Diff 檢視器、選擇共享、終端會話 |

21| [Web](/zh-TW/claude-code-on-the-web) | 不需要太多操控的長時間執行任務,或應該在您離線時繼續進行的工作 | Anthropic 託管雲端、在您斷開連接後繼續 |21| [Web](/zh-TW/claude-code-on-the-web) | 不需要太多操控的長時間執行任務,或應該在您離線時繼續進行的工作 | Anthropic 託管雲端、在您斷開連接後繼續 |

22| Mobile | 在遠離電腦時啟動和監控任務 | iOS 和 Android 版 Claude 應用程式的雲端會話、用於本地會話的 [Remote Control](/zh-TW/remote-control)、Pro 和 Max 上的 [Dispatch](/zh-TW/desktop#sessions-from-dispatch) 到 Desktop |

22 23 

23CLI 是終端原生工作的最完整介面:指令碼、第三方提供商和 Agent SDK 僅限 CLI。Desktop 和 IDE 擴充功能用視覺審查和更緊密的編輯器整合來交換一些僅限 CLI 的功能。Web 在 Anthropic 的雲端中執行,因此任務在您斷開連接後會繼續進行。24CLI 是終端原生工作的最完整介面:指令碼和 Agent SDK 僅限 CLI。第三方提供商也可在 [VS Code](/zh-TW/vs-code#use-third-party-providers) 中使用。企業 [Desktop](/zh-TW/desktop) 部署支援 Vertex AI 和閘道提供商;對於 Bedrock 或 Foundry,請改用 CLI 或 VS Code 而不是 Desktop。Desktop 和 IDE 擴充功能用視覺審查和更緊密的編輯器整合來交換一些僅限 CLI 的功能。Web 在 Anthropic 的雲端中執行,因此任務在您斷開連接後會繼續進行。Mobile 是進入這些相同雲端會話或透過 Remote Control 進入本地會話的瘦用戶端,並可以透過 Dispatch 將任務發送到 Desktop。

24 25 

25您可以在同一專案上混合使用介面。配置、專案記憶體和 MCP 伺服器在本地介面之間共享。26您可以在同一專案上混合使用介面。配置、專案記憶體和 MCP 伺服器在本地介面之間共享。

26 27 


36| [Code Review](/zh-TW/code-review) | 自動審查每個 PR | 在人工審查之前捕捉錯誤 |37| [Code Review](/zh-TW/code-review) | 自動審查每個 PR | 在人工審查之前捕捉錯誤 |

37| [Slack](/zh-TW/slack) | 回應您的頻道中的 `@Claude` 提及 | 將錯誤報告轉換為團隊聊天中的拉取請求 |38| [Slack](/zh-TW/slack) | 回應您的頻道中的 `@Claude` 提及 | 將錯誤報告轉換為團隊聊天中的拉取請求 |

38 39 

39對於此處未列出的整合,[MCP 伺服器](/zh-TW/mcp)和[連接器](/zh-TW/desktop#connect-external-tools)讓您連接幾乎任何東西:Linear、Notion、Google Drive 或您自己的內部 API。40對於此處未列出的整合,[MCP servers](/zh-TW/mcp) 和[連接器](/zh-TW/desktop#connect-external-tools)讓您連接幾乎任何東西:Linear、Notion、Google Drive 或您自己的內部 API。

40 41 

41## 當您遠離終端時工作42## 當您遠離終端時工作

42 43 


61* [VS Code](/zh-TW/vs-code):編輯器內的 Claude Code 擴充功能62* [VS Code](/zh-TW/vs-code):編輯器內的 Claude Code 擴充功能

62* [JetBrains](/zh-TW/jetbrains):IntelliJ、PyCharm 和其他 JetBrains IDE 的擴充功能63* [JetBrains](/zh-TW/jetbrains):IntelliJ、PyCharm 和其他 JetBrains IDE 的擴充功能

63* [Web 上的 Claude Code](/zh-TW/claude-code-on-the-web):在您斷開連接時繼續執行的雲端會話64* [Web 上的 Claude Code](/zh-TW/claude-code-on-the-web):在您斷開連接時繼續執行的雲端會話

65* Mobile:用於在遠離電腦時啟動和監控任務的 [iOS](https://apps.apple.com/us/app/claude-by-anthropic/id6473753684) 和 [Android](https://play.google.com/store/apps/details?id=com.anthropic.claude) 版 Claude 應用程式

64 66 

65### 整合67### 整合

66 68 

67* [Chrome](/zh-TW/chrome):使用您已登入的會話自動化瀏覽器任務69* [Chrome](/zh-TW/chrome):使用您已登入的會話自動化瀏覽器任務

70* [Computer use](/zh-TW/computer-use):讓 Claude 在 macOS 上開啟應用程式並控制您的螢幕

68* [GitHub Actions](/zh-TW/github-actions):在您的 CI 管道中執行 Claude71* [GitHub Actions](/zh-TW/github-actions):在您的 CI 管道中執行 Claude

69* [GitLab CI/CD](/zh-TW/gitlab-ci-cd):GitLab 的相同功能72* [GitLab CI/CD](/zh-TW/gitlab-ci-cd):GitLab 的相同功能

70* [Code Review](/zh-TW/code-review):每個拉取請求上的自動審查73* [Code Review](/zh-TW/code-review):每個拉取請求上的自動審查

Details

23 23 

24## 逐步解說:建立本機 marketplace24## 逐步解說:建立本機 marketplace

25 25 

26此範例建立一個包含一個 plugin 的 marketplace:用於程式碼審查的 `/quality-review` skill。您將建立目錄結構、新增 skill、建立 plugin manifest 和 marketplace 目錄,然後安裝並測試它。26此範例建立一個包含一個 plugin 的 marketplace:用於程式碼審查的 `quality-review` skill。您將建立目錄結構、新增 skill、建立 plugin manifest 和 marketplace 目錄,然後安裝並測試它。

27 27 

28<Steps>28<Steps>

29 <Step title="建立目錄結構">29 <Step title="建立目錄結構">


35 </Step>35 </Step>

36 36 

37 <Step title="建立 skill">37 <Step title="建立 skill">

38 建立 `SKILL.md` 檔案,定義 `/quality-review` skill 的功能。38 建立 `SKILL.md` 檔案,定義 `quality-review` skill 的功能。

39 39 

40 ```markdown my-marketplace/plugins/quality-review-plugin/skills/quality-review/SKILL.md theme={null}40 ```markdown my-marketplace/plugins/quality-review-plugin/skills/quality-review/SKILL.md theme={null}

41 ---41 ---


59 ```json my-marketplace/plugins/quality-review-plugin/.claude-plugin/plugin.json theme={null}59 ```json my-marketplace/plugins/quality-review-plugin/.claude-plugin/plugin.json theme={null}

60 {60 {

61 "name": "quality-review-plugin",61 "name": "quality-review-plugin",

62 "description": "新增 /quality-review skill 以進行快速程式碼審查",62 "description": "新增 quality-review skill 以進行快速程式碼審查",

63 "version": "1.0.0"63 "version": "1.0.0"

64 }64 }

65 ```65 ```


82 {82 {

83 "name": "quality-review-plugin",83 "name": "quality-review-plugin",

84 "source": "./plugins/quality-review-plugin",84 "source": "./plugins/quality-review-plugin",

85 "description": "新增 /quality-review skill 以進行快速程式碼審查"85 "description": "新增 quality-review skill 以進行快速程式碼審查"

86 }86 }

87 ]87 ]

88 }88 }


99 </Step>99 </Step>

100 100 

101 <Step title="試試看">101 <Step title="試試看">

102 在編輯器中選擇一些程式碼並執行您的新 skill。102 在編輯器中選擇一些程式碼並執行您的新 skill。Plugin skills 使用 plugin 名稱進行命名空間。

103 103 

104 ```shell theme={null}104 ```shell theme={null}

105 /quality-review105 /quality-review-plugin:quality-review

106 ```106 ```

107 </Step>107 </Step>

108</Steps>108</Steps>


693* 對於 `hostPattern` 來源:marketplace 主機與正規表達式模式相符693* 對於 `hostPattern` 來源:marketplace 主機與正規表達式模式相符

694* 對於 `pathPattern` 來源:marketplace 的檔案系統路徑與正規表達式模式相符694* 對於 `pathPattern` 來源:marketplace 的檔案系統路徑與正規表達式模式相符

695 695 

696精確匹配不會正規化 URL:尾部斜線、`.git` 後綴或 `ssh://` 與 `https://` 形式被視為不同的值。如果您的組織 marketplace 可以透過多個 URL 形式複製,請優先使用 `hostPattern` 項目而不是字面 URL,以便所有形式都相符。

697 

696因為 `strictKnownMarketplaces` 在[受管設定](/zh-TW/settings#settings-files)中設定,個別使用者和專案配置無法覆蓋這些限制。698因為 `strictKnownMarketplaces` 在[受管設定](/zh-TW/settings#settings-files)中設定,個別使用者和專案配置無法覆蓋這些限制。

697 699 

698有關完整的配置詳細資訊,包括所有支援的來源類型和與 `extraKnownMarketplaces` 的比較,請參閱 [strictKnownMarketplaces 參考](/zh-TW/settings#strictknownmarketplaces)。700有關完整的配置詳細資訊,包括所有支援的來源類型和與 `extraKnownMarketplaces` 的比較,請參閱 [strictKnownMarketplaces 參考](/zh-TW/settings#strictknownmarketplaces)。

Details

262**可用的 LSP plugins:**262**可用的 LSP plugins:**

263 263 

264| Plugin | 語言伺服器 | 安裝命令 |264| Plugin | 語言伺服器 | 安裝命令 |

265| :--------------- | :------------------------- | :------------------------------------------------------------------------------ |265| :------------------ | :------------------------- | :------------------------------------------------------------------------------ |

266| `pyright-lsp` | Pyright (Python) | `pip install pyright` 或 `npm install -g pyright` |266| `pyright-lsp` | Pyright (Python) | `pip install pyright` 或 `npm install -g pyright` |

267| `typescript-lsp` | TypeScript Language Server | `npm install -g typescript-language-server typescript` |267| `typescript-lsp` | TypeScript Language Server | `npm install -g typescript-language-server typescript` |

268| `rust-lsp` | rust-analyzer | [參閱 rust-analyzer 安裝](https://rust-analyzer.github.io/manual.html#installation) |268| `rust-analyzer-lsp` | rust-analyzer | [參閱 rust-analyzer 安裝](https://rust-analyzer.github.io/manual.html#installation) |

269 269 

270先安裝語言伺服器,然後從 marketplace 安裝 plugin。270先安裝語言伺服器,然後從 marketplace 安裝 plugin。

271 271 


531 531 

532Claude Code 提供兩個變數用於參考 plugin 路徑。兩者都在 skill 內容、agent 內容、hook 命令、monitor 命令以及 MCP 或 LSP server 設定中出現的任何地方內聯替換。兩者也會匯出為環境變數到 hook 程序和 MCP 或 LSP server 子程序。532Claude Code 提供兩個變數用於參考 plugin 路徑。兩者都在 skill 內容、agent 內容、hook 命令、monitor 命令以及 MCP 或 LSP server 設定中出現的任何地方內聯替換。兩者也會匯出為環境變數到 hook 程序和 MCP 或 LSP server 子程序。

533 533 

534**`${CLAUDE_PLUGIN_ROOT}`**:plugin 安裝目錄的絕對路徑。使用此方法參考與 plugin 捆綁的指令碼、二進位檔和設定檔。此路徑在 plugin 更新時會變更,因此您在此處寫入的檔案不會在更新後保留534**`${CLAUDE_PLUGIN_ROOT}`**:plugin 安裝目錄的絕對路徑。使用此方法參考與 plugin 捆綁的指令碼、二進位檔和設定檔。此路徑在 plugin 更新時會變更。前一個版本的目錄在更新後約七天內保留在磁碟上然後才進行清理,但應將其視為暫時性的,不要在此處寫入狀態

535 

536當 plugin 在工作階段中途更新時,hook 命令、monitors、MCP servers 和 LSP servers 會繼續使用前一個版本的路徑。執行 `/reload-plugins` 以將 hooks、MCP servers 和 LSP servers 切換到新路徑;monitors 需要工作階段重新啟動。

535 537 

536**`${CLAUDE_PLUGIN_DATA}`**:用於在更新後保留的 plugin 狀態的持久目錄。使用此方法用於已安裝的依賴項,例如 `node_modules` 或 Python 虛擬環境、生成的程式碼、快取和任何應在 plugin 版本之間保留的其他檔案。首次參考此變數時會自動建立目錄。538**`${CLAUDE_PLUGIN_DATA}`**:用於在更新後保留的 plugin 狀態的持久目錄。使用此方法用於已安裝的依賴項,例如 `node_modules` 或 Python 虛擬環境、生成的程式碼、快取和任何應在 plugin 版本之間保留的其他檔案。首次參考此變數時會自動建立目錄。

537 539 


677 `.claude-plugin/` 目錄包含 `plugin.json` 檔案。所有其他目錄(commands/、agents/、skills/、output-styles/、themes/、monitors/、hooks/)必須位於 plugin 根目錄,而不是在 `.claude-plugin/` 內。679 `.claude-plugin/` 目錄包含 `plugin.json` 檔案。所有其他目錄(commands/、agents/、skills/、output-styles/、themes/、monitors/、hooks/)必須位於 plugin 根目錄,而不是在 `.claude-plugin/` 內。

678</Warning>680</Warning>

679 681 

682plugin 根目錄的 `CLAUDE.md` 檔案不會作為專案內容載入。Plugin 透過 skills、agents 和 hooks 貢獻內容,而不是透過 CLAUDE.md。若要提供載入到 Claude 內容中的指示,請將其放在 [skill](#skills) 中。

683 

680### 檔案位置參考684### 檔案位置參考

681 685 

682| 元件 | 預設位置 | 用途 |686| 元件 | 預設位置 | 用途 |

security.md +1 −1

Details

27* **沙箱化 bash 工具**:[Sandbox](/zh-TW/sandboxing) bash 命令具有檔案系統和網路隔離,減少權限提示同時保持安全性。使用 `/sandbox` 啟用以定義 Claude Code 可以自主工作的邊界27* **沙箱化 bash 工具**:[Sandbox](/zh-TW/sandboxing) bash 命令具有檔案系統和網路隔離,減少權限提示同時保持安全性。使用 `/sandbox` 啟用以定義 Claude Code 可以自主工作的邊界

28* **寫入存取限制**:Claude Code 只能寫入啟動它的資料夾及其子資料夾——它無法在沒有明確權限的情況下修改父目錄中的檔案。雖然 Claude Code 可以讀取工作目錄外的檔案(對於存取系統庫和依賴項很有用),但寫入操作嚴格限制在專案範圍內,建立了清晰的安全邊界28* **寫入存取限制**:Claude Code 只能寫入啟動它的資料夾及其子資料夾——它無法在沒有明確權限的情況下修改父目錄中的檔案。雖然 Claude Code 可以讀取工作目錄外的檔案(對於存取系統庫和依賴項很有用),但寫入操作嚴格限制在專案範圍內,建立了清晰的安全邊界

29* **提示疲勞緩解**:支援按使用者、按程式碼庫或按組織允許列表常用的安全命令29* **提示疲勞緩解**:支援按使用者、按程式碼庫或按組織允許列表常用的安全命令

30* **Accept Edits 模式**:批量接受多個編輯同時為具有副作用的命令保持權限提示30* **Accept Edits 模式**:自動批准檔案編輯和一組固定的檔案系統 Bash 命令如 `mkdir`、`touch`、`rm`、`mv`、`cp` 和 `sed`,適用於工作目錄中的路徑。其他 Bash 命令和超出範圍的路徑仍會提示

31 31 

32### 使用者責任32### 使用者責任

33 33 

settings.md +26 −3

Details

71| **Plugins** | `~/.claude/settings.json` | `.claude/settings.json` | `.claude/settings.local.json` |71| **Plugins** | `~/.claude/settings.json` | `.claude/settings.json` | `.claude/settings.local.json` |

72| **CLAUDE.md** | `~/.claude/CLAUDE.md` | `CLAUDE.md` 或 `.claude/CLAUDE.md` | `CLAUDE.local.md` |72| **CLAUDE.md** | `~/.claude/CLAUDE.md` | `CLAUDE.md` 或 `.claude/CLAUDE.md` | `CLAUDE.local.md` |

73 73 

74在 Windows 上,顯示為 `~/.claude` 的路徑會解析為 `%USERPROFILE%\.claude`。

75 

74***76***

75 77 

76## 設定檔案78## 設定檔案


166| `apiKeyHelper` | 自訂指令碼,在 `/bin/sh` 中執行,以產生驗證值。此值將作為 `X-Api-Key` 和 `Authorization: Bearer` 標頭傳送以進行模型請求 | `/bin/generate_temp_api_key.sh` |168| `apiKeyHelper` | 自訂指令碼,在 `/bin/sh` 中執行,以產生驗證值。此值將作為 `X-Api-Key` 和 `Authorization: Bearer` 標頭傳送以進行模型請求 | `/bin/generate_temp_api_key.sh` |

167| `attribution` | 自訂 git 提交和拉取請求的歸屬。請參閱[歸屬設定](#attribution-settings) | `{"commit": "🤖 Generated with Claude Code", "pr": ""}` |169| `attribution` | 自訂 git 提交和拉取請求的歸屬。請參閱[歸屬設定](#attribution-settings) | `{"commit": "🤖 Generated with Claude Code", "pr": ""}` |

168| `autoMemoryDirectory` | [自動記憶](/zh-TW/memory#storage-location)儲存的自訂目錄。接受絕對路徑或 `~/` 前綴的路徑。從政策和使用者設定以及 `--settings` 旗標接受。不從專案或本機設定接受,因為複製的儲存庫可能提供任一檔案以將記憶寫入重定向到敏感位置 | `"~/my-memory-dir"` |170| `autoMemoryDirectory` | [自動記憶](/zh-TW/memory#storage-location)儲存的自訂目錄。接受絕對路徑或 `~/` 前綴的路徑。從政策和使用者設定以及 `--settings` 旗標接受。不從專案或本機設定接受,因為複製的儲存庫可能提供任一檔案以將記憶寫入重定向到敏感位置 | `"~/my-memory-dir"` |

171| `autoMemoryEnabled` | 啟用[自動記憶](/zh-TW/memory#enable-or-disable-auto-memory)。當為 `false` 時,Claude 不會從自動記憶目錄讀取或寫入。預設:`true`。您也可以在工作階段期間使用 `/memory` 切換此設定 | `false` |

169| `autoMode` | 自訂[自動模式](/zh-TW/permission-modes#eliminate-prompts-with-auto-mode)分類器阻止和允許的內容。包含 `environment`、`allow` 和 `soft_deny` 陣列的散文規則。在陣列中包含字面字串 `"$defaults"` 以在該位置繼承內建規則。請參閱[設定自動模式](/zh-TW/auto-mode-config)。不從共享專案設定讀取 | `{"soft_deny": ["$defaults", "Never run terraform apply"]}` |172| `autoMode` | 自訂[自動模式](/zh-TW/permission-modes#eliminate-prompts-with-auto-mode)分類器阻止和允許的內容。包含 `environment`、`allow` 和 `soft_deny` 陣列的散文規則。在陣列中包含字面字串 `"$defaults"` 以在該位置繼承內建規則。請參閱[設定自動模式](/zh-TW/auto-mode-config)。不從共享專案設定讀取 | `{"soft_deny": ["$defaults", "Never run terraform apply"]}` |

170| `autoScrollEnabled` | 在[全螢幕渲染](/zh-TW/fullscreen)中,跟隨新輸出到對話的底部。預設:`true`。在 `/config` 中顯示為**自動捲軸**。當此設定關閉時,權限提示仍會捲軸進入檢視 | `false` |173| `autoScrollEnabled` | 在[全螢幕渲染](/zh-TW/fullscreen)中,跟隨新輸出到對話的底部。預設:`true`。在 `/config` 中顯示為**自動捲軸**。當此設定關閉時,權限提示仍會捲軸進入檢視 | `false` |

171| `autoUpdatesChannel` | 遵循更新的發行頻道。使用 `"stable"` 以取得通常約一週舊的版本並跳過有重大迴歸的版本,或 `"latest"`(預設)以取得最新版本 | `"stable"` |174| `autoUpdatesChannel` | 遵循更新的發行頻道。使用 `"stable"` 以取得通常約一週舊的版本並跳過有重大迴歸的版本,或 `"latest"`(預設)以取得最新版本 | `"stable"` |


174| `awsAuthRefresh` | 修改 `.aws` 目錄的自訂指令碼(請參閱[進階認證設定](/zh-TW/amazon-bedrock#advanced-credential-configuration)) | `aws sso login --profile myprofile` |177| `awsAuthRefresh` | 修改 `.aws` 目錄的自訂指令碼(請參閱[進階認證設定](/zh-TW/amazon-bedrock#advanced-credential-configuration)) | `aws sso login --profile myprofile` |

175| `awsCredentialExport` | 輸出包含 AWS 認證的 JSON 的自訂指令碼(請參閱[進階認證設定](/zh-TW/amazon-bedrock#advanced-credential-configuration)) | `/bin/generate_aws_grant.sh` |178| `awsCredentialExport` | 輸出包含 AWS 認證的 JSON 的自訂指令碼(請參閱[進階認證設定](/zh-TW/amazon-bedrock#advanced-credential-configuration)) | `/bin/generate_aws_grant.sh` |

176| `blockedMarketplaces` | (Managed 設定僅限)marketplace 來源的黑名單。在下載前檢查被阻止的來源,因此它們永遠不會接觸檔案系統。請參閱 [Managed marketplace 限制](/zh-TW/plugin-marketplaces#managed-marketplace-restrictions) | `[{ "source": "github", "repo": "untrusted/plugins" }]` |179| `blockedMarketplaces` | (Managed 設定僅限)marketplace 來源的黑名單。在下載前檢查被阻止的來源,因此它們永遠不會接觸檔案系統。請參閱 [Managed marketplace 限制](/zh-TW/plugin-marketplaces#managed-marketplace-restrictions) | `[{ "source": "github", "repo": "untrusted/plugins" }]` |

177| `channelsEnabled` | (Managed 設定僅限)允許 Team 和 Enterprise 使用者使用[頻道](/zh-TW/channels)。未設定或 `false` 會阻止頻道訊息傳遞無論使用者傳遞什麼給 `--channels` | `true` |180| `channelsEnabled` | (Managed 設定僅限)允許組織使用[頻道](/zh-TW/channels)。 claude.ai Team 和 Enterprise 方案上,當此設定未設定或為 `false` 頻道會被阻止。對於使用 API 金鑰驗證的 [Anthropic Console](/zh-TW/authentication#claude-console-authentication) 帳戶,除非您的組織部署 managed 設定(在這種情況下此金鑰必須設定為 `true`),否則預設允許頻道 | `true` |

178| `cleanupPeriodDays` | 非使用中超過此期間的工作階段在啟動時刪除(預設:30 天,最少 1 天)。設定為 `0` 會被拒絕並出現驗證錯誤。也控制[孤立 subagent worktrees](/zh-TW/worktrees#clean-up-worktrees) 在啟動時自動移除的年齡截止。若要完全停用文字記錄寫入,請設定 [`CLAUDE_CODE_SKIP_PROMPT_HISTORY`](/zh-TW/env-vars) 環境變數,或在非互動模式(`-p`)中使用 `--no-session-persistence` 旗標或 `persistSession: false` SDK 選項。 | `20` |181| `cleanupPeriodDays` | 非使用中超過此期間的工作階段在啟動時刪除(預設:30 天,最少 1 天)。設定為 `0` 會被拒絕並出現驗證錯誤。也控制[孤立 subagent worktrees](/zh-TW/worktrees#clean-up-worktrees) 在啟動時自動移除的年齡截止。若要完全停用文字記錄寫入,請設定 [`CLAUDE_CODE_SKIP_PROMPT_HISTORY`](/zh-TW/env-vars) 環境變數,或在非互動模式(`-p`)中使用 `--no-session-persistence` 旗標或 `persistSession: false` SDK 選項。 | `20` |

179| `companyAnnouncements` | 在啟動時向使用者顯示的公告。如果提供多個公告,它們將隨機循環。 | `["Welcome to Acme Corp! Review our code guidelines at docs.acme.com"]` |182| `companyAnnouncements` | 在啟動時向使用者顯示的公告。如果提供多個公告,它們將隨機循環。 | `["Welcome to Acme Corp! Review our code guidelines at docs.acme.com"]` |

180| `defaultShell` | 輸入框 `!` 命令的預設 shell。接受 `"bash"`(預設)或 `"powershell"`。設定 `"powershell"` 會在 Windows 上透過 PowerShell 路由互動式 `!` 命令。需要 `CLAUDE_CODE_USE_POWERSHELL_TOOL=1`。請參閱 [PowerShell tool](/zh-TW/tools-reference#powershell-tool) | `"powershell"` |183| `defaultShell` | 輸入框 `!` 命令的預設 shell。接受 `"bash"`(預設)或 `"powershell"`。設定 `"powershell"` 會在 Windows 上透過 PowerShell 路由互動式 `!` 命令。需要 `CLAUDE_CODE_USE_POWERSHELL_TOOL=1`。請參閱 [PowerShell tool](/zh-TW/tools-reference#powershell-tool) | `"powershell"` |


183| `disableAutoMode` | 設定為 `"disable"` 以防止[自動模式](/zh-TW/permission-modes#eliminate-prompts-with-auto-mode)被啟用。從 `Shift+Tab` 循環中移除 `auto` 並在啟動時拒絕 `--permission-mode auto`。在[managed 設定](/zh-TW/permissions#managed-settings)中最有用,使用者無法覆蓋它 | `"disable"` |186| `disableAutoMode` | 設定為 `"disable"` 以防止[自動模式](/zh-TW/permission-modes#eliminate-prompts-with-auto-mode)被啟用。從 `Shift+Tab` 循環中移除 `auto` 並在啟動時拒絕 `--permission-mode auto`。在[managed 設定](/zh-TW/permissions#managed-settings)中最有用,使用者無法覆蓋它 | `"disable"` |

184| `disableDeepLinkRegistration` | 設定為 `"disable"` 以防止 Claude Code 在啟動時向作業系統註冊 `claude-cli://` 協議處理程式。[深層連結](/zh-TW/deep-links)讓外部工具透過預先填入的提示開啟 Claude Code 工作階段。在協議處理程式註冊受限或單獨管理的環境中很有用 | `"disable"` |187| `disableDeepLinkRegistration` | 設定為 `"disable"` 以防止 Claude Code 在啟動時向作業系統註冊 `claude-cli://` 協議處理程式。[深層連結](/zh-TW/deep-links)讓外部工具透過預先填入的提示開啟 Claude Code 工作階段。在協議處理程式註冊受限或單獨管理的環境中很有用 | `"disable"` |

185| `disabledMcpjsonServers` | 要拒絕的 `.mcp.json` 檔案中特定 MCP servers 的清單 | `["filesystem"]` |188| `disabledMcpjsonServers` | 要拒絕的 `.mcp.json` 檔案中特定 MCP servers 的清單 | `["filesystem"]` |

189| `disableRemoteControl` | {/* min-version: 2.1.128 */}停用[遠端控制](/zh-TW/remote-control):阻止 `claude remote-control`、`--remote-control` 旗標、自動啟動和工作階段內切換。通常放在[managed 設定](/zh-TW/permissions#managed-settings)中以進行每個裝置的 MDM 強制執行,但適用於任何範圍。需要 Claude Code v2.1.128 或更新版本 | `true` |

186| `disableSkillShellExecution` | 停用 [skills](/zh-TW/skills) 和來自使用者、專案、plugin 或其他目錄來源的自訂命令中的內嵌 shell 執行(`` !`...` `` 和 ` ```! ` 區塊)。命令會被替換為 `[shell command execution disabled by policy]` 而不是被執行。Bundled 和 managed skills 不受影響。在[managed 設定](/zh-TW/permissions#managed-settings)中最有用,使用者無法覆蓋它 | `true` |190| `disableSkillShellExecution` | 停用 [skills](/zh-TW/skills) 和來自使用者、專案、plugin 或其他目錄來源的自訂命令中的內嵌 shell 執行(`` !`...` `` 和 ` ```! ` 區塊)。命令會被替換為 `[shell command execution disabled by policy]` 而不是被執行。Bundled 和 managed skills 不受影響。在[managed 設定](/zh-TW/permissions#managed-settings)中最有用,使用者無法覆蓋它 | `true` |

187| `editorMode` | 輸入提示的快捷鍵模式:`"normal"` 或 `"vim"`。預設:`"normal"`。在 `/config` 中顯示為**編輯器模式** | `"vim"` |191| `editorMode` | 輸入提示的快捷鍵模式:`"normal"` 或 `"vim"`。預設:`"normal"`。在 `/config` 中顯示為**編輯器模式** | `"vim"` |

188| `effortLevel` | 跨工作階段持久化[努力等級](/zh-TW/model-config#adjust-effort-level)。接受 `"low"`、`"medium"`、`"high"` 或 `"xhigh"`。當您執行 `/effort` 時自動寫入,其中包含其中一個值。請參閱[調整努力等級](/zh-TW/model-config#adjust-effort-level)以了解支援的模型 | `"xhigh"` |192| `effortLevel` | 跨工作階段持久化[努力等級](/zh-TW/model-config#adjust-effort-level)。接受 `"low"`、`"medium"`、`"high"` 或 `"xhigh"`。當您執行 `/effort` 時自動寫入,其中包含其中一個值。請參閱[調整努力等級](/zh-TW/model-config#adjust-effort-level)以了解支援的模型 | `"xhigh"` |


550 },554 },

551 "extraKnownMarketplaces": {555 "extraKnownMarketplaces": {

552 "acme-tools": {556 "acme-tools": {

557 "source": {

553 "source": "github",558 "source": "github",

554 "repo": "acme-corp/claude-plugins"559 "repo": "acme-corp/claude-plugins"

555 }560 }

556 }561 }

562 }

557}563}

558```564```

559 565 


568* **本機設定**(`.claude/settings.local.json`):每台機器的覆蓋(未提交)574* **本機設定**(`.claude/settings.local.json`):每台機器的覆蓋(未提交)

569* **Managed 設定**(`managed-settings.json`):組織範圍的政策覆蓋,在所有範圍阻止安裝並從 marketplace 隱藏 plugin575* **Managed 設定**(`managed-settings.json`):組織範圍的政策覆蓋,在所有範圍阻止安裝並從 marketplace 隱藏 plugin

570 576 

577<Note>

578 專案設定優先於使用者設定,因此在 `~/.claude/settings.json` 中將 plugin 設定為 `false` 不會停用專案的 `.claude/settings.json` 啟用的 plugin。若要在您的機器上選擇退出專案啟用的 plugin,請改在 `.claude/settings.local.json` 中將其設定為 `false`。

579 

580 由 managed 設定強制啟用的 plugins 無法以此方式停用,因為 managed 設定會覆蓋本機設定。

581</Note>

582 

571**範例**:583**範例**:

572 584 

573```json theme={null}585```json theme={null}


659* 僅在 managed 設定(`managed-settings.json`)中可用671* 僅在 managed 設定(`managed-settings.json`)中可用

660* 無法被使用者或專案設定覆蓋(最高優先順序)672* 無法被使用者或專案設定覆蓋(最高優先順序)

661* 在網路/檔案系統操作之前強制執行(被阻止的來源永遠不會執行)673* 在網路/檔案系統操作之前強制執行(被阻止的來源永遠不會執行)

662* 對來源規格使用精確匹配(包括 git 來源的 `ref`、`path`),除了 `hostPattern`,它使用正規表達式匹配674* 對來源規格使用精確匹配(包括 git 來源的 `ref`、`path`),除了 `hostPattern` 和 `pathPattern`它們使用正規表達式匹配

663 675 

664**白名單行為**:676**白名單行為**:

665 677 


669 681 

670**所有支援的來源類型**:682**所有支援的來源類型**:

671 683 

672白名單支援多種 marketplace 來源類型。大多數來源使用精確匹配,而 `hostPattern` 使用正規表達式匹配 marketplace 主機684白名單支援多種 marketplace 來源類型。大多數來源使用精確匹配,而 `hostPattern` `pathPattern` 分別使用正規表達式匹配 marketplace 主機和檔案系統路徑

673 685 

6741. **GitHub 儲存庫**:6861. **GitHub 儲存庫**:

675 687 


749* `url`:從 URL 提取主機名稱761* `url`:從 URL 提取主機名稱

750* `npm`、`file`、`directory`:不支援主機模式匹配762* `npm`、`file`、`directory`:不支援主機模式匹配

751 763 

7648. **路徑模式匹配**:

765 

766```json theme={null}

767{ "source": "pathPattern", "pathPattern": "^/opt/approved/" }

768{ "source": "pathPattern", "pathPattern": ".*" }

769```

770 

771欄位:`pathPattern`(必需:與 `file` 和 `directory` 來源的 `path` 欄位相符的正規表達式模式)

772 

773使用路徑模式匹配來允許檔案系統型 marketplaces 與網路來源的 `hostPattern` 限制並行。設定 `".*"` 以允許所有本機路徑,或設定更窄的模式以限制到特定目錄。

774 

752**設定範例**:775**設定範例**:

753 776 

754範例:僅允許特定 marketplaces:777範例:僅允許特定 marketplaces:

sub-agents.md +36 −11

Details

51 </Tab>51 </Tab>

52 52 

53 <Tab title="Plan">53 <Tab title="Plan">

54 一個研究代理,在 [plan mode](/zh-TW/common-workflows#use-plan-mode-for-safe-code-analysis) 期間使用,以在呈現計畫之前收集上下文。54 一個研究代理,在 [plan mode](/zh-TW/permission-modes#analyze-before-you-edit-with-plan-mode) 期間使用,以在呈現計畫之前收集上下文。

55 55 

56 * **Model**:從主要對話繼承56 * **Model**:從主要對話繼承

57 * **Tools**:唯讀工具(拒絕存取 Write 和 Edit 工具)57 * **Tools**:唯讀工具(拒絕存取 Write 和 Edit 工具)


76 | Agent | Model | Claude 何時使用它 |76 | Agent | Model | Claude 何時使用它 |

77 | :---------------- | :----- | :--------------------------- |77 | :---------------- | :----- | :--------------------------- |

78 | statusline-setup | Sonnet | 當您執行 `/statusline` 來配置您的狀態行時 |78 | statusline-setup | Sonnet | 當您執行 `/statusline` 來配置您的狀態行時 |

79 | Claude Code Guide | Haiku | 當您提出有關 Claude Code 功能的問題時 |79 | claude-code-guide | Haiku | 當您提出有關 Claude Code 功能的問題時 |

80 </Tab>80 </Tab>

81</Tabs>81</Tabs>

82 82 


180 180 

181**CLI 定義的 subagents** 在啟動 Claude Code 時作為 JSON 傳遞。它們僅存在於該工作階段,不會儲存到磁碟,使其適用於快速測試或自動化指令碼。您可以在單一 `--agents` 呼叫中定義多個 subagents:181**CLI 定義的 subagents** 在啟動 Claude Code 時作為 JSON 傳遞。它們僅存在於該工作階段,不會儲存到磁碟,使其適用於快速測試或自動化指令碼。您可以在單一 `--agents` 呼叫中定義多個 subagents:

182 182 

183```bash theme={null}183<Tabs>

184claude --agents '{184 <Tab title="macOS, Linux, WSL">

185 ```bash theme={null}

186 claude --agents '{

185 "code-reviewer": {187 "code-reviewer": {

186 "description": "Expert code reviewer. Use proactively after code changes.",188 "description": "Expert code reviewer. Use proactively after code changes.",

187 "prompt": "You are a senior code reviewer. Focus on code quality, security, and best practices.",189 "prompt": "You are a senior code reviewer. Focus on code quality, security, and best practices.",


192 "description": "Debugging specialist for errors and test failures.",194 "description": "Debugging specialist for errors and test failures.",

193 "prompt": "You are an expert debugger. Analyze errors, identify root causes, and provide fixes."195 "prompt": "You are an expert debugger. Analyze errors, identify root causes, and provide fixes."

194 }196 }

195}'197 }'

196```198 ```

199 </Tab>

200 

201 <Tab title="Windows PowerShell">

202 ```powershell theme={null}

203 claude --agents @'

204 {

205 "code-reviewer": {

206 "description": "Expert code reviewer. Use proactively after code changes.",

207 "prompt": "You are a senior code reviewer. Focus on code quality, security, and best practices.",

208 "tools": ["Read", "Grep", "Glob", "Bash"],

209 "model": "sonnet"

210 },

211 "debugger": {

212 "description": "Debugging specialist for errors and test failures.",

213 "prompt": "You are an expert debugger. Analyze errors, identify root causes, and provide fixes."

214 }

215 }

216 '@

217 ```

218 </Tab>

219</Tabs>

197 220 

198`--agents` 標誌接受 JSON,具有與基於檔案的 subagents 相同的 [frontmatter](#supported-frontmatter-fields) 欄位:`description`、`prompt`、`tools`、`disallowedTools`、`model`、`permissionMode`、`mcpServers`、`hooks`、`maxTurns`、`skills`、`initialPrompt`、`memory`、`effort`、`background`、`isolation` 和 `color`。使用 `prompt` 作為系統提示,等同於基於檔案的 subagents 中的 markdown 主體。221`--agents` 標誌接受 JSON,具有與基於檔案的 subagents 相同的 [frontmatter](#supported-frontmatter-fields) 欄位:`description`、`prompt`、`tools`、`disallowedTools`、`model`、`permissionMode`、`mcpServers`、`hooks`、`maxTurns`、`skills`、`initialPrompt`、`memory`、`effort`、`background`、`isolation` 和 `color`。使用 `prompt` 作為系統提示,等同於基於檔案的 subagents 中的 markdown 主體。

199 222 


212Subagent 檔案使用 YAML frontmatter 進行配置,後面跟著 Markdown 中的系統提示:235Subagent 檔案使用 YAML frontmatter 進行配置,後面跟著 Markdown 中的系統提示:

213 236 

214<Note>237<Note>

215 Subagents 在工作階段開始時載入。如果您透過手動新增檔案來建立 subagent,請重新啟動您的工作階段或使用 `/agents` 立即載入它238 Subagents 在工作階段開始時載入。如果您直接在磁碟上新增或編輯 subagent 檔案請重新啟動您的工作階段以載入它。透過 `/agents` 介面建立的 Subagents 會立即生效,無需重新啟動

216</Note>239</Note>

217 240 

218```markdown theme={null}241```markdown theme={null}


250| `memory` | No | [Persistent memory scope](#enable-persistent-memory):`user`、`project` 或 `local`。啟用跨工作階段學習 |273| `memory` | No | [Persistent memory scope](#enable-persistent-memory):`user`、`project` 或 `local`。啟用跨工作階段學習 |

251| `background` | No | 設定為 `true` 以始終將此 subagent 作為 [background task](#run-subagents-in-foreground-or-background) 執行。預設:`false` |274| `background` | No | 設定為 `true` 以始終將此 subagent 作為 [background task](#run-subagents-in-foreground-or-background) 執行。預設:`false` |

252| `effort` | No | 此 subagent 活動時的努力程度。覆蓋工作階段努力程度。預設:從工作階段繼承。選項:`low`、`medium`、`high`、`xhigh`、`max`;可用的層級取決於模型 |275| `effort` | No | 此 subagent 活動時的努力程度。覆蓋工作階段努力程度。預設:從工作階段繼承。選項:`low`、`medium`、`high`、`xhigh`、`max`;可用的層級取決於模型 |

253| `isolation` | No | 設定為 `worktree` 以在臨時 [git worktree](/zh-TW/common-workflows#run-parallel-claude-code-sessions-with-git-worktrees) 中執行 subagent,為其提供儲存庫的隔離副本。如果 subagent 不進行任何更改,worktree 會自動清理 |276| `isolation` | No | 設定為 `worktree` 以在臨時 [git worktree](/zh-TW/worktrees) 中執行 subagent,為其提供儲存庫的隔離副本。如果 subagent 不進行任何更改,worktree 會自動清理 |

254| `color` | No | Subagent 在任務清單和文字中的顯示顏色。接受 `red`、`blue`、`green`、`yellow`、`purple`、`orange`、`pink` 或 `cyan` |277| `color` | No | Subagent 在任務清單和文字中的顯示顏色。接受 `red`、`blue`、`green`、`yellow`、`purple`、`orange`、`pink` 或 `cyan` |

255| `initialPrompt` | No | 當此代理作為主工作階段代理執行時(透過 `--agent` 或 `agent` 設定),自動提交為第一個使用者轉數。[Commands](/zh-TW/commands) 和 [skills](/zh-TW/skills) 會被處理。前置於任何使用者提供的提示 |278| `initialPrompt` | No | 當此代理作為主工作階段代理執行時(透過 `--agent` 或 `agent` 設定),自動提交為第一個使用者轉數。[Commands](/zh-TW/commands) 和 [skills](/zh-TW/skills) 會被處理。前置於任何使用者提供的提示 |

256 279 


484exit 0507exit 0

485```508```

486 509 

487請參閱 [Hook input](/zh-TW/hooks#pretooluse-input) 以了解完整的輸入架構,以及 [exit codes](/zh-TW/hooks#exit-code-output) 以了解退出代碼如何影響行為。510請參閱 [Hook input](/zh-TW/hooks#pretooluse-input) 以了解完整的輸入架構,以及 [exit codes](/zh-TW/hooks#exit-code-output) 以了解退出代碼如何影響行為。在 Windows 上,在 PowerShell 中編寫 hook 指令碼,並在 hook 條目中新增 `shell: powershell`,如 [在 PowerShell 中執行 hooks](/zh-TW/hooks#windows-powershell-tool) 所示。

488 511 

489#### 禁用特定 subagents512#### 禁用特定 subagents

490 513 


994exit 01017exit 0

995```1018```

996 1019 

997使指令碼可執行:1020在 macOS 和 Linux 上,使指令碼可執行:

998 1021 

999```bash theme={null}1022```bash theme={null}

1000chmod +x ./scripts/validate-readonly-query.sh1023chmod +x ./scripts/validate-readonly-query.sh

1001```1024```

1002 1025 

1003Hook 透過 stdin 接收 JSONBash 命令在 `tool_input.command` 中。退出代碼 2 阻止操作並將錯誤訊息反饋給 Claude。請參閱 [Hooks](/zh-TW/hooks#exit-code-output) 以了解退出代碼詳細資訊,以及 [Hook input](/zh-TW/hooks#pretooluse-input) 以了解完整的輸入架構1026 Windows 上,使用 PowerShell 編寫驗證指令碼並將 `shell: powershell` 新增至 hook 項目。請參閱 [ PowerShell 中執行 hooks](/zh-TW/hooks#windows-powershell-tool)。

1027 

1028Hook 透過 stdin 接收 JSON,Bash 命令在 `tool_input.command` 中。退出代碼 2 阻止操作並將錯誤訊息反饋給 Claude。請參閱 [Hooks](/zh-TW/hooks#exit-code-output) 以了解退出代碼和 [Hook input](/zh-TW/hooks#pretooluse-input) 以了解完整的輸入架構。

1004 1029 

1005## 後續步驟1030## 後續步驟

1006 1031 

vs-code.md +14 −4

Details

93提示框支援多項功能:93提示框支援多項功能:

94 94 

95* **許可模式**:點擊提示框底部的模式指示器以切換模式。在正常模式下,Claude 在每個操作前要求許可。在 Plan Mode 中,Claude 描述它將做什麼,並在進行變更前等待批准。VS Code 會自動將計畫作為完整 markdown 文件開啟,您可以在其中添加內聯評論以在 Claude 開始前提供反饋。在自動接受模式下,Claude 進行編輯而不詢問。在 VS Code 設定中的 `claudeCode.initialPermissionMode` 下設定預設值。95* **許可模式**:點擊提示框底部的模式指示器以切換模式。在正常模式下,Claude 在每個操作前要求許可。在 Plan Mode 中,Claude 描述它將做什麼,並在進行變更前等待批准。VS Code 會自動將計畫作為完整 markdown 文件開啟,您可以在其中添加內聯評論以在 Claude 開始前提供反饋。在自動接受模式下,Claude 進行編輯而不詢問。在 VS Code 設定中的 `claudeCode.initialPermissionMode` 下設定預設值。

96* **命令菜單**:點擊 `/` 或輸入 `/` 以開啟命令菜單。選項包括附加檔案、切換模型、切換擴展思考、查看計畫使用情況(`/usage`)以及啟動 [Remote Control](/zh-TW/remote-control) 工作階段(`/remote-control`)。'自訂'部分提供對 MCP servers、hooks、memory、permissions 和 plugins 的存取。帶有終端機圖示的項目在整合終端機中開啟。96* **命令菜單**:點擊 `/` 或輸入 `/` 以開啟命令菜單。選項包括附加檔案、切換模型、切換擴展思考、查看計畫使用情況(`/usage`)以及啟動 [Remote Control](/zh-TW/remote-control) 工作階段(`/remote-control`)。自訂部分提供對 MCP servers、hooks、memory、permissions 和 plugins 的存取。帶有終端機圖示的項目在整合終端機中開啟。

97* **上下文指示器**:提示框顯示您使用了多少 Claude 的 context window。Claude 在需要時會自動壓縮,或您可以手動執行 `/compact`。97* **上下文指示器**:提示框顯示您使用了多少 Claude 的 context window。Claude 在需要時會自動壓縮,或您可以手動執行 `/compact`。

98* **擴展思考**:讓 Claude 花更多時間推理複雜問題。透過命令菜單(`/`)切換它。Claude 的推理在對話中顯示為摺疊的區塊:點擊一個區塊以讀取它,或按 `Ctrl+O` 以展開或摺疊工作階段中的每個思考區塊。有關詳細資訊,請參閱[擴展思考](/zh-TW/common-workflows#use-extended-thinking-thinking-mode)。98* **擴展思考**:讓 Claude 花更多時間推理複雜問題。透過命令菜單(`/`)切換它。Claude 的推理在對話中顯示為摺疊的區塊:點擊一個區塊以讀取它,或按 `Ctrl+O` 以展開或摺疊工作階段中的每個思考區塊。有關詳細資訊,請參閱 [Extended thinking](/zh-TW/model-config#extended-thinking)。

99* **多行輸入**:按 `Shift+Enter` 以添加新行而不傳送。這也適用於問題對話框的'其他'自由文字輸入。99* **多行輸入**:按 `Shift+Enter` 以添加新行而不傳送。這也適用於問題對話框的'其他'自由文字輸入。

100 100 

101### 參考檔案和資料夾101### 參考檔案和資料夾


115 115 

116### 恢復過去的對話116### 恢復過去的對話

117 117 

118點擊 Claude Code 面板頂部的**工作階段歷史記錄**按鈕以存取您的對話歷史記錄。您可以按關鍵字搜尋或按時間瀏覽(今天、昨天、過去 7 天等)。點擊任何對話以使用完整訊息歷史記錄恢復它。新工作階段會根據您的第一條訊息接收 AI 生成的標題。將滑鼠懸停在工作階段上以顯示重新命名和移除操作:重新命名以給它一個描述性標題,或移除以將其從清單中刪除。有關恢復工作階段的更多資訊,請參閱[常見工作流程](/zh-TW/common-workflows#resume-previous-conversations)。118點擊 Claude Code 面板頂部的**工作階段歷史記錄**按鈕以存取您的對話歷史記錄。您可以按關鍵字搜尋或按時間瀏覽(今天、昨天、過去 7 天等)。點擊任何對話以使用完整訊息歷史記錄恢復它。新工作階段會根據您的第一條訊息接收 AI 生成的標題。將滑鼠懸停在工作階段上以顯示重新命名和移除操作:重新命名以給它一個描述性標題,或移除以將其從清單中刪除。有關恢復工作階段的更多資訊,請參閱 [Manage sessions](/zh-TW/sessions)。

119 119 

120### 從 Claude.ai 恢復遠端工作階段120### 從 Claude.ai 恢復遠端工作階段

121 121 


399claude --worktree feature-auth399claude --worktree feature-auth

400```400```

401 401 

402每個 worktree 維護獨立的檔案狀態,同時共享 git 歷史記錄。這可防止 Claude 實例在處理不同任務時相互干擾。有關更多詳細資訊,請參閱[使用 Git worktrees 執行並行 Claude Code 工作階段](/zh-TW/common-workflows#run-parallel-claude-code-sessions-with-git-worktrees)。402每個 worktree 維護獨立的檔案狀態,同時共享 git 歷史記錄。這可防止 Claude 實例在處理不同任務時相互干擾。有關更多詳細資訊,請參閱[使用 Git worktrees 執行並行工作階段](/zh-TW/worktrees)。

403 403 

404## 使用第三方提供者404## 使用第三方提供者

405 405 


476 476 

477或者,點擊**狀態列**(右下角)中的「✱ Claude Code」。即使沒有開啟檔案,這也有效。您也可以使用**命令面板**(`Cmd+Shift+P` / `Ctrl+Shift+P`)並輸入「Claude Code」。477或者,點擊**狀態列**(右下角)中的「✱ Claude Code」。即使沒有開啟檔案,這也有效。您也可以使用**命令面板**(`Cmd+Shift+P` / `Ctrl+Shift+P`)並輸入「Claude Code」。

478 478 

479### macOS 上的 Cmd+Esc 無法執行任何操作

480 

481在 macOS Tahoe 及更新版本上,系統遊戲覆蓋快捷鍵預設綁定到 `Cmd+Esc`,並在按鍵到達 VS Code 之前攔截它。若要釋放快捷鍵:

482 

4831. 開啟系統設定

4842. 前往鍵盤,然後鍵盤快捷鍵,然後遊戲控制器

4853. 清除遊戲覆蓋核取方塊

486 

487或者,將擴充功能重新綁定到不同的鍵:開啟 VS Code [鍵盤快捷鍵編輯器](https://code.visualstudio.com/docs/configure/keybindings)(`Cmd+K Cmd+S`),搜尋 `Claude Code: Focus input`,並指派新的綁定。

488 

479### Claude Code 從不回應489### Claude Code 從不回應

480 490 

481如果 Claude Code 沒有回應您的提示:491如果 Claude Code 沒有回應您的提示: