SpyBara
Go Premium

Documentation 2026-10-16 22:59 UTC to 2026-10-17 23:57 UTC

23 files changed +186 −74. View all changes and history on the product overview
2026
Fri 30 23:01 Thu 29 23:57 Wed 28 23:57 Tue 27 22:59 Mon 26 22:57 Sun 25 23:58 Sat 24 22:59 Fri 23 22:59 Thu 22 22:58 Wed 21 23:02 Tue 20 23:00 Mon 19 23:58 Sat 17 23:57 Fri 16 22:59 Thu 15 23:58 Wed 14 22:58 Tue 13 23:57 Sun 11 23:57 Sat 10 23:01 Fri 9 23:02 Thu 8 22:58 Wed 7 23:59 Tue 6 23:59 Mon 5 23:58 Sun 4 23:58 Sat 3 23:57 Fri 2 22:59 Thu 1 23:59
Details

165 呼叫自訂工具165 呼叫自訂工具

166</h3>166</h3>

167 167 

168透過 `mcpServers` 選項將您建立的 MCP 伺服器傳遞給 `query`。`mcpServers` 中的鍵成為每個工具的完全限定名稱中的 `{server_name}` 區段:`mcp__{server_name}__{tool_name}`。在 `allowedTools` 中列出該名稱,以便工具執行而不會出現權限提示。168透過 `mcpServers` 選項將您建立的 MCP 伺服器傳遞給 `query`。每個工具的[完全限定名稱](/docs/zh-TW/agent-sdk/mcp#tool-naming-convention)為 `mcp__{server_name}__{tool_name}`,其中 `{server_name}` 是您在 `mcpServers` 中為伺服器指定的鍵。如果該鍵包含 `.` 或空格等字元,撰寫 `{server_name}` 時請將其替換為 `_`。在 `allowedTools` 中列出完全限定名稱,以便工具執行而不會出現權限提示。

169 169 

170這些程式碼片段重複使用[天氣工具範例](#weather-tool-example)中的 `weatherServer` 來詢問 Claude 特定位置的天氣。170這些程式碼片段重複使用[天氣工具範例](#weather-tool-example)中的 `weatherServer` 來詢問 Claude 特定位置的天氣。

171 171 

Details

235 235 

236| 選項 | 類型 | 預設值 | 描述 |236| 選項 | 類型 | 預設值 | 描述 |

237| - | - | - | - |237| - | - | - | - |

238| `matcher` | `string` | `undefined` | 針對事件的篩選欄位比對的模式,遵循[設定檔中 matcher 的規則](/docs/zh-TW/hooks#matcher-patterns)。對於工具 hook,這是工具名稱。內建工具包括 `Bash`、`Read`、`Write`、`Edit`、`Glob`、`Grep`、`WebFetch`、`Agent` 等(請參閱[工具輸入類型](/docs/zh-TW/agent-sdk/typescript#tool-input-types)以取得完整列表)。MCP 工具使用模式 `mcp__<server>__<action>`,其中 `<server>` 是您在 `mcpServers` 設定中使用的鍵。 |238| `matcher` | `string` | `undefined` | 針對事件的篩選欄位比對的模式,遵循[設定檔中 matcher 的規則](/docs/zh-TW/hooks#matcher-patterns)。對於工具 hook,該欄位是工具名稱。內建工具包括 `Bash`、`Read`、`Write`、`Edit`、`Glob`、`Grep`、`WebFetch`、`Agent` 等。請參閱[工具輸入類型](/docs/zh-TW/agent-sdk/typescript#tool-input-types)以取得完整列表。MCP 工具使用模式 `mcp__<server>__<action>`,其中 `<server>` 是您在 `mcpServers` 設定中使用的鍵,其拼寫方式依照[工具命名慣例](/docs/zh-TW/agent-sdk/mcp#tool-naming-convention)所述。 |

239| `hooks` | `HookCallback[]` | - | 必需。當模式比對成功時執行的回調函數陣列 |239| `hooks` | `HookCallback[]` | - | 必需。當模式比對成功時執行的回調函數陣列 |

240| `timeout` | `number` | `undefined` | 逾時時間(秒)。省略時,Claude Code 會套用[事件的預設逾時](#hook-timeout)。您的 SDK 回調遵循 `command` hook 預設值 |240| `timeout` | `number` | `undefined` | 逾時時間(秒)。省略時,Claude Code 會套用[事件的預設逾時](#hook-timeout)。您的 SDK 回調遵循 `command` hook 預設值 |

241 241 

agent-sdk/mcp.md +10 −1

Details

196 工具命名慣例196 工具命名慣例

197</h3>197</h3>

198 198 

199MCP 工具遵循命名模式 `mcp__<server-name>__<tool-name>`。例如,一個名為 `"github"` 的 GitHub 伺服器,其中有一個 `list_issues` 工具,會變成 `mcp__github__list_issues`。199MCP 工具的名稱為 `mcp__<server-name>__<tool-name>`,其中 `<server-name>` 是您註冊伺服器時使用的名稱,例如它在 `mcpServers` 中的鍵。

200 

201伺服器名稱中的 `.` 和空格等字元會被替換為 `_`。下表顯示了兩個伺服器鍵下 `list_issues` 工具的完整名稱:

202 

203| `mcpServers` 中的鍵 | 完整工具名稱 |

204| :- | :- |

205| `github` | `mcp__github__list_issues` |

206| `my.server` | `mcp__my_server__list_issues` |

207 

208請在 `allowedTools` 和 [MCP 權限規則](/docs/zh-TW/permissions#mcp)中使用完整的工具名稱。對於由[外掛](/docs/zh-TW/agent-sdk/plugins)提供的伺服器,`<server-name>` 採用[外掛範圍形式](/docs/zh-TW/mcp#plugin-provided-mcp-servers),並以 `plugin_` 開頭。

200 209 

201<h3 id="auto-approve-with-allowedtools">210<h3 id="auto-approve-with-allowedtools">

202 使用 allowedTools 自動批准211 使用 allowedTools 自動批准

Details

16 16 

17<Steps>17<Steps>

18 <Step title="Hooks">18 <Step title="Hooks">

19 首先執行 [hooks](/docs/zh-TW/agent-sdk/hooks)。Hook 可以直接拒絕呼叫或將其傳遞下去。返回 `allow` 的 hook 不會跳過下面的拒絕和詢問規則;無論 hook 結果如何,這些規則都會被評估。`PreToolUse` hook allow 也無法批准針對 [關鍵路徑](/docs/zh-TW/permission-modes#critical-paths) 的 `rm` 或 `rmdir` 移除。19 首先執行 [hooks](/docs/zh-TW/agent-sdk/hooks)。Hook 可以直接拒絕呼叫或將其傳遞下去。返回 `allow` 的 hook 不會跳過下面的拒絕和詢問規則;無論 hook 結果如何,這些規則都會被評估。返回 `allow` 的 `PreToolUse` hook 也無法核准針對 [關鍵路徑](/docs/zh-TW/permission-modes#critical-paths) 的 `rm` 或 `rmdir` 移除。關於該 `allow` 在 plan mode 中的作用,請參閱 [plan mode 中的 hook 核准](/docs/zh-TW/permissions#hook-approvals-in-plan-mode)。

20 </Step>20 </Step>

21 21 

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


161 161 

162<Tabs>162<Tabs>

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

164 在建立查詢時傳遞 `permission_mode`(Python)或 `permissionMode`(TypeScript)。此模式適用於整個工作階段,除非動態變更。164 在建立查詢時傳遞 `permission_mode`(Python)或 `permissionMode`(TypeScript)。

165 165 

166 <CodeGroup>166 <CodeGroup>

167 ```python Python theme={null}167 ```python Python theme={null}


314 314 

315Claude 探索程式碼庫並產生計畫,而不編輯您的原始檔案。唯讀工具的執行方式與在 `default` 權限模式中相同。315Claude 探索程式碼庫並產生計畫,而不編輯您的原始檔案。唯讀工具的執行方式與在 `default` 權限模式中相同。

316 316 

317在規劃模式中,檔案編輯永遠不會自動被核准,即使符合允許規則。它們會改為透過您的 `canUseTool` 回呼提示。在 Claude Code v2.1.212 或更新版本上,修改檔案的 shell 命令(例如 `touch` 和 `rm`)會以相同方式到達您的 `canUseTool` 回呼。317在 plan mode 中,檔案編輯永遠不會自動被核准,即使符合允許規則或 `PreToolUse` hook 傳回 `allow`。它們會改為透過您的 `canUseTool` 回呼提示。在 Claude Code v2.1.212 或更新版本上,修改檔案的 shell 命令(例如 `touch` 和 `rm`)會以相同方式到達您的 `canUseTool` 回呼。

318 318 

319在 TypeScript SDK 中,如果您在 `permissionMode: 'plan'` 旁邊設定 `allowDangerouslySkipPermissions: true`,檔案編輯和修改檔案的 shell 命令仍然會到達您的 `canUseTool` 回呼。此選項讓您稍後可以使用 `setPermissionMode()` 切換到 `bypassPermissions`。319在 TypeScript SDK 中,如果您在 `permissionMode: 'plan'` 旁邊設定 `allowDangerouslySkipPermissions: true`,檔案編輯和修改檔案的 shell 命令仍然會到達您的 `canUseTool` 回呼。此選項讓您稍後可以使用 `setPermissionMode()` 切換到 `bypassPermissions`。

320 320 


322 322 

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

324 324 

325<h4 id="auto-mode-auto">

326 自動模式(`auto`)

327</h4>

328 

329分類器模型會在 shell 命令和網路請求等動作執行之前檢閱它們,並允許或阻止它檢閱的每一個動作。如需了解自動模式所需的模型和提供者,以及它評估動作的順序,請參閱[使用自動模式消除權限提示](/docs/zh-TW/permission-modes#eliminate-prompts-with-auto-mode)。

330 

331如果您使用 [`set_model()`](/docs/zh-TW/agent-sdk/python#claudesdkclient)、[`setModel()`](/docs/zh-TW/agent-sdk/typescript#query-object) 或 [`applyFlagSettings()`](/docs/zh-TW/agent-sdk/typescript#applyflagsettings),將處於自動模式的工作階段切換到自動模式不支援的模型,工作階段會變更為 `default` 模式:

332 

333* **您會看到的內容**:一則子類型為 `status` 且 `permissionMode` 設定為 `"default"` 的 `system` 訊息,TypeScript SDK 將其型別定義為 [`SDKStatusMessage`](/docs/zh-TW/agent-sdk/typescript#sdkstatusmessage)。從那時起,需要核准且不符合任何允許規則的呼叫會到達您的 `canUseTool` 回呼。

334* **返回自動模式**:切換到支援的模型,然後呼叫 `set_permission_mode("auto")` 或 `setPermissionMode("auto")`。如果您將模型切換回來而未進行該呼叫,工作階段會保持在 `default` 模式。當不支援的模型處於作用中時,該呼叫會失敗並顯示 `Cannot set permission mode to auto: auto mode unavailable for this model`。

335 

336在 `set_model()`、`setModel()` 或 `applyFlagSettings()` 呼叫後變更為 `default` 模式,需要 Claude Code v2.1.299 或更新版本。

337 

325<h2 id="related-resources">338<h2 id="related-resources">

326 相關資源339 相關資源

327</h2>340</h2>

Details

610| `receive_response()` | 接收訊息直到並包括 ResultMessage |610| `receive_response()` | 接收訊息直到並包括 ResultMessage |

611| `interrupt()` | 發送中斷信號(僅在串流模式下工作) |611| `interrupt()` | 發送中斷信號(僅在串流模式下工作) |

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

613| `set_model(model)` | 變更目前 session 的模型。傳遞 `None` 以重設為 [Claude Code 的預設模型](/docs/zh-TW/model-config) |613| `set_model(model)` | 變更目前 session 的模型。傳遞 `None` 以重設為 [Claude Code 的預設模型](/docs/zh-TW/model-config)。若新模型不支援自動模式,處於 `auto` 模式的 session 會[變更為 `default` 模式](/docs/zh-TW/agent-sdk/permissions#auto-mode-auto) |

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

615| `get_mcp_status()` | 取得所有已設定 MCP 伺服器的狀態。返回 [`McpStatusResponse`](#mcpstatusresponse) |615| `get_mcp_status()` | 取得所有已設定 MCP 伺服器的狀態。返回 [`McpStatusResponse`](#mcpstatusresponse) |

616| `get_context_usage()` | 取得按類別、skill 和工具分類的內容視窗使用情況的詳細資訊。與 `/context` 在互動式 session 中顯示的資料相同。返回 [`ContextUsageResponse`](#contextusageresponse)。為了計算詳細資訊,Claude Code 會進行多個不出現在訊息流中的 token 計數 API 請求;見 [這些請求如何被處理](#contextusageresponse) |616| `get_context_usage()` | 取得按類別、skill 和工具分類的內容視窗使用情況的詳細資訊。與 `/context` 在互動式 session 中顯示的資料相同。返回 [`ContextUsageResponse`](#contextusageresponse)。為了計算詳細資訊,Claude Code 會進行多個不出現在訊息流中的 token 計數 API 請求;見 [這些請求如何被處理](#contextusageresponse) |


3884 在沙箱設定中設定 `"failIfUnavailable": True` 以改為停止。SDK 會將 `failIfUnavailable` 連同已宣告的 `SandboxSettings` 欄位一起轉發給 Claude Code。`query()` 接著會回報 `ResultMessage`,其中 `subtype="error_during_execution"` 且原因在 `errors` 中。因為這是單次 `query()` 呼叫,SDK 會在產生該錯誤結果後引發例外,所以請將迴圈包裝在 try 區塊中以便繼續執行。請參閱[處理結果](/docs/zh-TW/agent-sdk/agent-loop#handle-the-result)以了解錯誤合約。3884 在沙箱設定中設定 `"failIfUnavailable": True` 以改為停止。SDK 會將 `failIfUnavailable` 連同已宣告的 `SandboxSettings` 欄位一起轉發給 Claude Code。`query()` 接著會回報 `ResultMessage`,其中 `subtype="error_during_execution"` 且原因在 `errors` 中。因為這是單次 `query()` 呼叫,SDK 會在產生該錯誤結果後引發例外,所以請將迴圈包裝在 try 區塊中以便繼續執行。請參閱[處理結果](/docs/zh-TW/agent-sdk/agent-loop#handle-the-result)以了解錯誤合約。

3885</Note>3885</Note>

3886 3886 

3887若要防止沙箱化命令寫入某個檔案,請在沙箱設定的 [`denyWrite`](/docs/zh-TW/settings-reference#sandbox-filesystem-denywrite) 下列出其絕對路徑,例如 `"filesystem": {"denyWrite": ["/home/user/project/.env"]}`。SDK 會將 `filesystem` 連同已宣告的 `SandboxSettings` 欄位一起轉發給 Claude Code。沙箱啟動後,會封鎖對每個列出路徑的寫入。如果您列出 `.env` 或 `./.env`,沙箱化命令仍可以寫入工作階段工作目錄中的 `.env` 檔案。3887若要防止沙箱化命令寫入某個檔案,請在沙箱設定的 [`denyWrite`](/docs/zh-TW/settings-reference#sandbox-filesystem-denywrite) 下列出其絕對路徑,例如 `"filesystem": {"denyWrite": ["/home/user/project/.env"]}`。SDK 會將 `filesystem` 連同已宣告的 `SandboxSettings` 欄位一起轉發給 Claude Code。沙箱啟動後,會封鎖對您列出的每個絕對路徑的寫入。

3888 3888 

3889<h4 id="example-usage">3889<h4 id="example-usage">

3890 範例使用3890 範例使用

Details

736| `interrupt()` | 中斷查詢。僅在串流輸入模式下可用。當 CLI 在 [`SDKSystemMessage.capabilities`](#sdksystemmessage) 中宣告 `interrupt_receipt_v1` 功能時,會以 [`SDKControlInterruptResponse`](#sdkcontrolinterruptresponse) 解析,其中列出中斷到達時尚待處理的訊息。在 v2.1.205 之前的 CLI 上會解析為 `undefined` |736| `interrupt()` | 中斷查詢。僅在串流輸入模式下可用。當 CLI 在 [`SDKSystemMessage.capabilities`](#sdksystemmessage) 中宣告 `interrupt_receipt_v1` 功能時,會以 [`SDKControlInterruptResponse`](#sdkcontrolinterruptresponse) 解析,其中列出中斷到達時尚待處理的訊息。在 v2.1.205 之前的 CLI 上會解析為 `undefined` |

737| `rewindFiles(userMessageId, options?)` | 將檔案還原到指定使用者訊息時的狀態。傳遞 `{ dryRun: true }` 以預覽變更。需要 `enableFileCheckpointing: true`。請參閱[檔案檢查點功能](/docs/zh-TW/agent-sdk/file-checkpointing) |737| `rewindFiles(userMessageId, options?)` | 將檔案還原到指定使用者訊息時的狀態。傳遞 `{ dryRun: true }` 以預覽變更。需要 `enableFileCheckpointing: true`。請參閱[檔案檢查點功能](/docs/zh-TW/agent-sdk/file-checkpointing) |

738| `setPermissionMode()` | 變更權限模式(僅在串流輸入模式下可用) |738| `setPermissionMode()` | 變更權限模式(僅在串流輸入模式下可用) |

739| `setModel()` | 變更模型(僅在串流輸入模式下可用)。傳遞 `undefined` 或字串 `"default"` 會重設為 [Claude Code 的預設模型](/docs/zh-TW/model-config) |739| `setModel()` | 變更模型(僅在串流輸入模式下可用)。傳入 `undefined` 或字串 `"default"` 會重設為 [Claude Code 的預設模型](/docs/zh-TW/model-config)。若新模型不支援自動模式,處於 `auto` 模式的工作階段會[變更為 `default` 模式](/docs/zh-TW/agent-sdk/permissions#auto-mode-auto) |

740| `setMaxThinkingTokens()` | *已棄用:* 請改用 `thinking` 選項。變更最大思考 token 數。傳遞 `null` 會將思考重設為工作階段預設值:工作階段中途的覆寫會被清除,而已停用思考的工作階段會維持關閉 |740| `setMaxThinkingTokens()` | *已棄用:* 請改用 `thinking` 選項。變更最大思考 token 數。傳遞 `null` 會將思考重設為工作階段預設值:工作階段中途的覆寫會被清除,而已停用思考的工作階段會維持關閉 |

741| `applyFlagSettings(settings)` | 在執行時將設定合併到工作階段的旗標設定層(僅在串流輸入模式下可用)。請參閱 [`applyFlagSettings()`](#applyflagsettings) |741| `applyFlagSettings(settings)` | 在執行時將設定合併到工作階段的旗標設定層(僅在串流輸入模式下可用)。請參閱 [`applyFlagSettings()`](#applyflagsettings) |

742| `updateSettings(source, settings)` | 將一個允許清單中的鍵寫入專案的本機設定檔或您的使用者設定檔,讓該值在之後的工作階段中保留。請參閱 [`updateSettings()`](#updatesettings)。需要 TypeScript SDK v0.3.257 或更新版本,其隨附 Claude Code v2.1.257 |742| `updateSettings(source, settings)` | 將一個允許清單中的鍵寫入專案的本機設定檔或您的使用者設定檔,讓該值在之後的工作階段中保留。請參閱 [`updateSettings()`](#updatesettings)。需要 TypeScript SDK v0.3.257 或更新版本,其隨附 Claude Code v2.1.257 |


6369| 屬性 | 類型 | 預設值 | 說明 |6369| 屬性 | 類型 | 預設值 | 說明 |

6370| :- | :- | :- | :- |6370| :- | :- | :- | :- |

6371| `allowWrite` | `string[]` | `[]` | 允許寫入存取的檔案路徑模式 |6371| `allowWrite` | `string[]` | `[]` | 允許寫入存取的檔案路徑模式 |

6372| `denyWrite` | `string[]` | `[]` | 拒絕寫入存取的檔案路徑模式。若要封鎖 sandboxed 命令寫入工作階段工作目錄中的檔案,請列出其絕對路徑。如果您列出 `.env` 或 `./.env`,sandboxed 命令仍可寫入工作階段工作目錄中的 `.env` 檔案 |6372| `denyWrite` | `string[]` | `[]` | 拒絕寫入存取的檔案路徑模式。若要封鎖 sandboxed 命令寫入工作階段工作目錄中的檔案,請列出其絕對路徑。 |

6373| `denyRead` | `string[]` | `[]` | 拒絕讀取存取的檔案路徑模式 |6373| `denyRead` | `string[]` | `[]` | 拒絕讀取存取的檔案路徑模式 |

6374 6374 

6375<h3 id="permissions-fallback-for-unsandboxed-commands">6375<h3 id="permissions-fallback-for-unsandboxed-commands">

agent-view.md +2 −2

Details

738[權限模式](/docs/zh-TW/permissions)取決於您啟動工作階段的方式:738[權限模式](/docs/zh-TW/permissions)取決於您啟動工作階段的方式:

739 739 

740* **使用 `/bg` 或 `←` 移到背景**:Claude Code 會保留工作階段原本的權限模式,因此您切換到 `acceptEdits` 或 `auto` 的工作階段在分離後仍維持該模式740* **使用 `/bg` 或 `←` 移到背景**:Claude Code 會保留工作階段原本的權限模式,因此您切換到 `acceptEdits` 或 `auto` 的工作階段在分離後仍維持該模式

741* **從您使用 `←` 開啟的 agent view 分派**:目標本身的設定優先,當沒有其他來源設定模式時,套用您來源工作階段的權限模式741* **從您使用 `←` 開啟的 agent view 分派**:Claude Code 會先從目標目錄的設定取得新工作階段的權限模式,其次才從您來源的工作階段取得

742* **從在 shell 中啟動的 `claude agents` 分派,或使用 `claude --bg`**:新工作階段會以在該目錄中啟動新 `claude` 工作階段的方式開始,除非您是從以[分派預設值](#dispatch-defaults)開啟的 agent view 分派。[工作階段以哪種權限模式啟動](/docs/zh-TW/permission-modes#which-mode-a-session-starts-in)列出了順序742* **從在 shell 中啟動的 `claude agents` 分派,或使用 `claude --bg`**:新工作階段會以在該目錄中啟動新 `claude` 工作階段的方式開始,除非您是從以[分派預設值](#dispatch-defaults)開啟的 agent view 分派。[工作階段以哪種權限模式啟動](/docs/zh-TW/permission-modes#which-mode-a-session-starts-in)列出了順序

743 743 

744對於您從使用 `←` 開啟的 agent view 分派的工作階段,Claude Code 會從以下第一個適用的來源取得權限模式:744對於您從使用 `←` 開啟的 agent view 分派的工作階段,Claude Code 會從以下第一個適用的來源取得權限模式:


7461. 目標目錄的 [`permissions.defaultMode`](/docs/zh-TW/settings-reference#permissions-defaultmode)。適用兩條來源規則:7461. 目標目錄的 [`permissions.defaultMode`](/docs/zh-TW/settings-reference#permissions-defaultmode)。適用兩條來源規則:

747 * `auto` 和 `bypassPermissions` [只有來自受管設定、`--settings` 檔案或 `~/.claude/settings.json` 時才會生效](/docs/zh-TW/settings-reference#permissions-defaultmode)。747 * `auto` 和 `bypassPermissions` [只有來自受管設定、`--settings` 檔案或 `~/.claude/settings.json` 時才會生效](/docs/zh-TW/settings-reference#permissions-defaultmode)。

748 * 若專案的 `.claude/settings.json` 或 `.claude/settings.local.json` 中的 `defaultMode` 選擇了比您來源工作階段更寬鬆的模式,Claude Code 會拒絕它。748 * 若專案的 `.claude/settings.json` 或 `.claude/settings.local.json` 中的 `defaultMode` 選擇了比您來源工作階段更寬鬆的模式,Claude Code 會拒絕它。

7492. 您來源工作階段的權限模式7492. 您來源工作階段的權限模式。如果該工作階段處於 `bypassPermissions` 模式,新工作階段可能會改以 Manual 模式啟動,並顯示 `Bypass permissions was requested at launch and ignored` 通知。當您接受略過免責聲明的記錄只存在於 `.claude/settings.local.json` 或 `--settings` 檔案中時,就會發生這種情況。請以 Manual 模式繼續,或[將該接受記錄新增到 `~/.claude/settings.json`](/docs/zh-TW/permission-modes#bypass-permissions-acceptance)。

750 750 

751當 Claude Code 因某個來源的模式過於寬鬆而拒絕時,由清單中的下一個來源決定。例如,如果您從 plan mode 工作階段分派到一個其簽入設定要求 `acceptEdits` 的目錄,新工作階段會以 plan mode 啟動。如果您將該 `defaultMode` 移到 `~/.claude/settings.json`,則無論您來源工作階段的權限模式為何,它都會套用。751當 Claude Code 因某個來源的模式過於寬鬆而拒絕時,由清單中的下一個來源決定。例如,如果您從 plan mode 工作階段分派到一個其簽入設定要求 `acceptEdits` 的目錄,新工作階段會以 plan mode 啟動。如果您將該 `defaultMode` 移到 `~/.claude/settings.json`,則無論您來源工作階段的權限模式為何,它都會套用。

752 752 

Details

84| `--continue`, `-c` | 載入目前目錄中最近的對話,包括[已完成的背景工作階段](/docs/zh-TW/sessions#where-the-session-picker-looks);開啟已完成的背景工作階段需要 Claude Code v2.1.257 或更新版本。跳過使用 `claude -p` 或 Agent SDK 建立的工作階段,以及第一個提示詞為 `/loop` 的工作階段。`claude -p --continue` 包括 `-p`、SDK 和 `/loop` 工作階段。包括使用 `/add-dir` 新增此目錄的工作階段 | `claude --continue` |84| `--continue`, `-c` | 載入目前目錄中最近的對話,包括[已完成的背景工作階段](/docs/zh-TW/sessions#where-the-session-picker-looks);開啟已完成的背景工作階段需要 Claude Code v2.1.257 或更新版本。跳過使用 `claude -p` 或 Agent SDK 建立的工作階段,以及第一個提示詞為 `/loop` 的工作階段。`claude -p --continue` 包括 `-p`、SDK 和 `/loop` 工作階段。包括使用 `/add-dir` 新增此目錄的工作階段 | `claude --continue` |

85| `--dangerously-load-development-channels` | 啟用不在核准允許清單上的[頻道](/docs/zh-TW/channels-reference#test-during-the-research-preview),用於本機開發。接受 `plugin:<name>@<marketplace>` 和 `server:<name>` 項目。會提示確認,因此它在互動工作階段中生效。使用 `-p` 時,Claude Code 會忽略此旗標 | `claude --dangerously-load-development-channels server:webhook` |85| `--dangerously-load-development-channels` | 啟用不在核准允許清單上的[頻道](/docs/zh-TW/channels-reference#test-during-the-research-preview),用於本機開發。接受 `plugin:<name>@<marketplace>` 和 `server:<name>` 項目。會提示確認,因此它在互動工作階段中生效。使用 `-p` 時,Claude Code 會忽略此旗標 | `claude --dangerously-load-development-channels server:webhook` |

86| `--dangerously-skip-permissions` | 跳過權限提示。等同於 `--permission-mode bypassPermissions`。請參閱[權限模式](/docs/zh-TW/permission-modes#skip-all-checks-with-bypasspermissions-mode)以了解此操作跳過和不跳過的內容。對於使用 `--bg` 啟動的工作階段,當主管重新啟動工作階段時,模式[會保留](/docs/zh-TW/agent-view#permission-mode-model-and-effort) | `claude --dangerously-skip-permissions` |86| `--dangerously-skip-permissions` | 跳過權限提示。等同於 `--permission-mode bypassPermissions`。請參閱[權限模式](/docs/zh-TW/permission-modes#skip-all-checks-with-bypasspermissions-mode)以了解此操作跳過和不跳過的內容。對於使用 `--bg` 啟動的工作階段,當主管重新啟動工作階段時,模式[會保留](/docs/zh-TW/agent-view#permission-mode-model-and-effort) | `claude --dangerously-skip-permissions` |

87| `--debug` | 啟用偵錯模式,可選類別篩選,例如 `--debug='mcp,startup'` 或 `--debug='!1p'`。篩選僅在 `=` 形式中繫結;以空格分隔的篩選啟用偵錯模式而不進行篩選 | `claude --debug='mcp,startup'` |87| `--debug` | 啟用偵錯模式,可選類別篩選,例如 `--debug='mcp,startup'` 或 `--debug='!mcp'`。篩選僅在 `=` 形式中繫結;以空格分隔的篩選會啟用偵錯模式而不進行篩選 | `claude --debug='mcp,startup'` |

88| `--debug-file <path>` | 將偵錯日誌寫入特定檔案路徑。隱含啟用偵錯模式。優先於 `CLAUDE_CODE_DEBUG_LOGS_DIR` | `claude --debug-file /tmp/claude-debug.log` |88| `--debug-file <path>` | 將偵錯日誌寫入特定檔案路徑。隱含啟用偵錯模式。優先於 `CLAUDE_CODE_DEBUG_LOGS_DIR` | `claude --debug-file /tmp/claude-debug.log` |

89| `--desktop` | 在目前目錄上開啟 [Claude Desktop 應用程式](/docs/zh-TW/desktop)並結束而不在終端機中啟動工作階段。新增 `--continue` 或 `--resume` 搭配工作階段 ID,以[在 Desktop 中開啟該工作階段](/docs/zh-TW/desktop#coming-from-the-cli)。此處的 `--resume` 僅採用工作階段 ID,不採用名稱或文字記錄路徑。不採用提示和其他旗標,除了 `--verbose` 和 `--debug` 旗標,因為應用程式會自行啟動工作階段。在 macOS 和 x64 Windows 上可用,當您使用 Claude 訂閱登入時。需要 Claude Code v2.1.285 或更新版本 | `claude --desktop` |89| `--desktop` | 在目前目錄上開啟 [Claude Desktop 應用程式](/docs/zh-TW/desktop)並結束而不在終端機中啟動工作階段。新增 `--continue` 或 `--resume` 搭配工作階段 ID,以[在 Desktop 中開啟該工作階段](/docs/zh-TW/desktop#coming-from-the-cli)。此處的 `--resume` 僅採用工作階段 ID,不採用名稱或文字記錄路徑。不採用提示和其他旗標,除了 `--verbose` 和 `--debug` 旗標,因為應用程式會自行啟動工作階段。在 macOS 和 x64 Windows 上可用,當您使用 Claude 訂閱登入時。需要 Claude Code v2.1.285 或更新版本 | `claude --desktop` |

90| `--disable-slash-commands` | 為此工作階段停用所有 skills 和命令 | `claude --disable-slash-commands` |90| `--disable-slash-commands` | 為此工作階段停用所有 skills 和命令 | `claude --disable-slash-commands` |

costs.md +1 −1

Details

429已開啟數小時的工作階段可能會使用遠超過您的活動所暗示的計畫限額,通常是由於以下原因之一:429已開啟數小時的工作階段可能會使用遠超過您的活動所暗示的計畫限額,通常是由於以下原因之一:

430 430 

431* **長上下文**:Claude Code 在每次請求時都會傳送您與其的完整對話,每當 Claude 使用工具時,它會傳送另一個請求,其中包含該批工具結果。使用 [prompt caching](/docs/zh-TW/prompt-caching),Claude Code 會以 [快取代幣費率](https://platform.claude.com/docs/en/about-claude/pricing) 重新讀取該歷史記錄,因此在已開啟一整天的工作階段中提出的一行問題仍然會為整個對話消耗使用量。請參閱 [主動管理上下文](#manage-context-proactively) 以了解保持上下文較小的方法431* **長上下文**:Claude Code 在每次請求時都會傳送您與其的完整對話,每當 Claude 使用工具時,它會傳送另一個請求,其中包含該批工具結果。使用 [prompt caching](/docs/zh-TW/prompt-caching),Claude Code 會以 [快取代幣費率](https://platform.claude.com/docs/en/about-claude/pricing) 重新讀取該歷史記錄,因此在已開啟一整天的工作階段中提出的一行問題仍然會為整個對話消耗使用量。請參閱 [主動管理上下文](#manage-context-proactively) 以了解保持上下文較小的方法

432* **快取未命中**:在超過 [快取生命週期](/docs/zh-TW/prompt-caching#cache-lifetime) 的中斷後的第一條訊息會未命中快取並重新處理您的完整上下文。在訂閱上生命週期為一小時,一旦您開始使用 [使用額度](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans),生命週期會降至五分鐘;在 API 金鑰或雲端提供者上,預設為五分鐘。若要在使用使用額度時保持一小時的生命週期,[自行選擇 TTL](/docs/zh-TW/prompt-caching#choose-the-ttl-yourself)。在 Pro 和 Max 計畫上,當您在長時間中斷後恢復大型工作階段時,Claude Code [提供從摘要恢復](/docs/zh-TW/sessions#resume-from-a-summary) 的選項,以便稍後的請求不會攜帶完整歷史記錄432* **快取未命中**:在超過 [快取生命週期](/docs/zh-TW/prompt-caching#cache-lifetime) 的中斷後的第一條訊息會未命中快取並重新處理您的完整上下文。在訂閱上生命週期為一小時,一旦您開始使用 [用量點數](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans),生命週期會降至五分鐘;在 API 金鑰或雲端提供者上,預設為五分鐘。若要在使用用量點數時保持一小時的生命週期,[自行選擇 TTL](/docs/zh-TW/prompt-caching#choose-the-ttl-yourself)

433* **排程工作**:[排程工作](/docs/zh-TW/scheduled-tasks) 在其間隔上執行,即使工作階段處於閒置狀態,每次都傳送您的完整上下文433* **排程工作**:[排程工作](/docs/zh-TW/scheduled-tasks) 在其間隔上執行,即使工作階段處於閒置狀態,每次都傳送您的完整上下文

434* **跨工作階段訊息**:Claude Code 在此工作階段處於閒置時,將 [來自您另一個工作階段的訊息](/docs/zh-TW/cross-session-messaging) 作為新回合傳送,每次都傳送您的完整上下文。若要保留入站訊息而不是傳送它們,請將 [`crossSessionInbound`](/docs/zh-TW/settings-reference#crosssessioninbound) 設定為 `hold`434* **跨工作階段訊息**:Claude Code 在此工作階段處於閒置時,將 [來自您另一個工作階段的訊息](/docs/zh-TW/cross-session-messaging) 作為新回合傳送,每次都傳送您的完整上下文。若要保留入站訊息而不是傳送它們,請將 [`crossSessionInbound`](/docs/zh-TW/settings-reference#crosssessioninbound) 設定為 `hold`

435* **目標檢查**:當背景工作保持活躍 [目標](/docs/zh-TW/goal) 等待時,Claude Code [要求 Claude 檢查該工作](/docs/zh-TW/goal#background-work-defers-evaluation),即使工作階段處於閒置狀態,啟動傳送您完整上下文的新回合。Claude Code 在您的提示之間每個目標最多啟動三個閒置檢查。在 v2.1.246 之前,閒置檢查是無上限的。若要關閉檢查,請將 [`CLAUDE_CODE_GOAL_CHECKIN_MINUTES`](/docs/zh-TW/env-vars) 設定為 `0`。閒置檢查需要 Claude Code v2.1.236 或更新版本435* **目標檢查**:當背景工作保持活躍 [目標](/docs/zh-TW/goal) 等待時,Claude Code [要求 Claude 檢查該工作](/docs/zh-TW/goal#background-work-defers-evaluation),即使工作階段處於閒置狀態,啟動傳送您完整上下文的新回合。Claude Code 在您的提示之間每個目標最多啟動三個閒置檢查。在 v2.1.246 之前,閒置檢查是無上限的。若要關閉檢查,請將 [`CLAUDE_CODE_GOAL_CHECKIN_MINUTES`](/docs/zh-TW/env-vars) 設定為 `0`。閒置檢查需要 Claude Code v2.1.236 或更新版本

env-vars.md +1 −1

Details

196| `ANTHROPIC_VERTEX_PROJECT_ID` | Google Cloud's Agent Platform 請求所指向的 GCP 專案 ID。請參閱[設定 GCP 憑證](/docs/zh-TW/google-vertex-ai#3-configure-gcp-credentials) |196| `ANTHROPIC_VERTEX_PROJECT_ID` | Google Cloud's Agent Platform 請求所指向的 GCP 專案 ID。請參閱[設定 GCP 憑證](/docs/zh-TW/google-vertex-ai#3-configure-gcp-credentials) |

197| `ANTHROPIC_WORKSPACE_ID` | [workload identity federation](https://platform.claude.com/docs/en/manage-claude/workload-identity-federation) 的工作區 ID。當您的聯合規則範圍涵蓋多個工作區時設定此變數,讓 token 交換知道要指向哪個工作區 |197| `ANTHROPIC_WORKSPACE_ID` | [workload identity federation](https://platform.claude.com/docs/en/manage-claude/workload-identity-federation) 的工作區 ID。當您的聯合規則範圍涵蓋多個工作區時設定此變數,讓 token 交換知道要指向哪個工作區 |

198| `API_FORCE_IDLE_TIMEOUT` | 覆寫 5 分鐘的本文閒置逾時,此逾時會在沒有任何位元組抵達時中止串流模型回應。設定為 `0` 可關閉逾時,例如當緩慢的[閘道](/docs/zh-TW/llm-gateway)或本機模型在區塊之間暫停超過 5 分鐘時;設定為 `1` 則可對所有提供者保持開啟。未設定時,此逾時會在直接 Anthropic API、[Claude Platform on AWS](/docs/zh-TW/claude-platform-on-aws),以及設定了 `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1` 的 Amazon Bedrock 以外的提供者上啟用。[串流監視機制](/docs/zh-TW/network-config#streaming-idle-watchdogs)獨立於此執行,即使您在此設定 `0`,仍會中止長時間的靜默暫停 |198| `API_FORCE_IDLE_TIMEOUT` | 覆寫 5 分鐘的本文閒置逾時,此逾時會在沒有任何位元組抵達時中止串流模型回應。設定為 `0` 可關閉逾時,例如當緩慢的[閘道](/docs/zh-TW/llm-gateway)或本機模型在區塊之間暫停超過 5 分鐘時;設定為 `1` 則可對所有提供者保持開啟。未設定時,此逾時會在直接 Anthropic API、[Claude Platform on AWS](/docs/zh-TW/claude-platform-on-aws),以及設定了 `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1` 的 Amazon Bedrock 以外的提供者上啟用。[串流監視機制](/docs/zh-TW/network-config#streaming-idle-watchdogs)獨立於此執行,即使您在此設定 `0`,仍會中止長時間的靜默暫停 |

199| `API_TIMEOUT_MS` | API 請求的逾時時間,單位為毫秒(預設:600000,即 10 分鐘;最大值:2147483647)。在網路緩慢或透過代理伺服器路由而導致請求逾時時,請調高此值。超過最大值的值會使底層計時器溢位,導致請求立即失敗 |199| `API_TIMEOUT_MS` | API 請求的逾時時間,單位為毫秒(預設:600000,即 10 分鐘;最大值:2147483647)。串流請求必須在此時間內收到回應標頭。當請求在緩慢網路上或透過代理伺服器路由時發生逾時,請調高此值 |

200| `AWS_BEARER_TOKEN_BEDROCK` | 用於身分驗證的 Amazon Bedrock API 金鑰(請參閱 [Amazon Bedrock API 金鑰](https://aws.amazon.com/blogs/machine-learning/accelerate-ai-development-with-amazon-bedrock-api-keys/)) |200| `AWS_BEARER_TOKEN_BEDROCK` | 用於身分驗證的 Amazon Bedrock API 金鑰(請參閱 [Amazon Bedrock API 金鑰](https://aws.amazon.com/blogs/machine-learning/accelerate-ai-development-with-amazon-bedrock-api-keys/)) |

201| `BASH_DEFAULT_TIMEOUT_MS` | 前景 Bash 或 PowerShell 工具命令的預設逾時,單位為毫秒(預設:120000,即 2 分鐘)。若值高於[背景命令的預設時間限制](/docs/zh-TW/tools-reference#time-limit-for-background-commands),則會在無人值守的工作階段中取代該預設值。背景時間限制需要 Claude Code v2.1.285 或更新版本 |201| `BASH_DEFAULT_TIMEOUT_MS` | 前景 Bash 或 PowerShell 工具命令的預設逾時,單位為毫秒(預設:120000,即 2 分鐘)。若值高於[背景命令的預設時間限制](/docs/zh-TW/tools-reference#time-limit-for-background-commands),則會在無人值守的工作階段中取代該預設值。背景時間限制需要 Claude Code v2.1.285 或更新版本 |

202| `BASH_MAX_OUTPUT_LENGTH` | Claude Code 讀回命令結果中的 bash 輸出最大字元數(預設:30000;最大值:150000)。若您設定了 [`bashOutputMaxChars`](/docs/zh-TW/settings-reference#bashoutputmaxchars) 設定,Claude Code 會忽略此變數。請參閱[輸出限制](/docs/zh-TW/tools-reference#output-limits) |202| `BASH_MAX_OUTPUT_LENGTH` | Claude Code 讀回命令結果中的 bash 輸出最大字元數(預設:30000;最大值:150000)。若您設定了 [`bashOutputMaxChars`](/docs/zh-TW/settings-reference#bashoutputmaxchars) 設定,Claude Code 會忽略此變數。請參閱[輸出限制](/docs/zh-TW/tools-reference#output-limits) |

errors.md +3 −1

Details

346| `Can't open — this session is running in another terminal` | [背景工作階段錯誤](#this-session-is-running-in-another-terminal) |346| `Can't open — this session is running in another terminal` | [背景工作階段錯誤](#this-session-is-running-in-another-terminal) |

347| `This conversation is already open in another running Claude session` | [背景工作階段錯誤](#this-session-is-running-in-another-terminal) |347| `This conversation is already open in another running Claude session` | [背景工作階段錯誤](#this-session-is-running-in-another-terminal) |

348| `This session's saved conversation is no longer on disk` | [背景工作階段錯誤](#this-sessions-saved-conversation-is-no-longer-on-disk) |348| `This session's saved conversation is no longer on disk` | [背景工作階段錯誤](#this-sessions-saved-conversation-is-no-longer-on-disk) |

349| `Bypass permissions was requested at launch and ignored` | [使用 bypassPermissions 模式略過所有檢查](/docs/zh-TW/permission-modes#bypass-permissions-acceptance) |

349| `kept <id> — its worktree is still at <path>` | [背景工作階段錯誤](#worktree-has-commits-that-are-not-pushed-anywhere) |350| `kept <id> — its worktree is still at <path>` | [背景工作階段錯誤](#worktree-has-commits-that-are-not-pushed-anywhere) |

350| `kept <id> — <n> unpushed commits on <branch>` | [背景工作階段錯誤](#worktree-has-commits-that-are-not-pushed-anywhere) |351| `kept <id> — <n> unpushed commits on <branch>` | [背景工作階段錯誤](#worktree-has-commits-that-are-not-pushed-anywhere) |

351| `kept <id> — worktree has commits that are not pushed anywhere` | [背景工作階段錯誤](#worktree-has-commits-that-are-not-pushed-anywhere) |352| `kept <id> — worktree has commits that are not pushed anywhere` | [背景工作階段錯誤](#worktree-has-commits-that-are-not-pushed-anywhere) |


418* 連線中斷。當連線在 Claude 完成其回應的任何部分(包括其思考)之前中途中斷時,Claude Code 會以相同的退避方式重新發出請求,並且回合會繼續,即使某些文字已經開始串流。當連線在 Claude 完成思考之後但在開始任何文字或工具呼叫之前中斷時,Claude Code 會改為快速連續重新發出請求最多兩次,如果連線在該點持續中斷,則以 `Connection lost before a response was produced` 結束回合。419* 連線中斷。當連線在 Claude 完成其回應的任何部分(包括其思考)之前中途中斷時,Claude Code 會以相同的退避方式重新發出請求,並且回合會繼續,即使某些文字已經開始串流。當連線在 Claude 完成思考之後但在開始任何文字或工具呼叫之前中斷時,Claude Code 會改為快速連續重新發出請求最多兩次,如果連線在該點持續中斷,則以 `Connection lost before a response was produced` 結束回合。

419* Claude Code 偵測到的連線在您的電腦進入睡眠狀態時在請求中途被中斷。Claude Code 將其計為上述規則下的連線中斷;一旦重試標籤命名了具體原因,它會讀作 `Connection lost while your computer was asleep`,如果回合在 Claude 完成思考但在任何文字或工具呼叫之前結束,訊息會讀作 `Your computer went to sleep before a response was produced`。420* Claude Code 偵測到的連線在您的電腦進入睡眠狀態時在請求中途被中斷。Claude Code 將其計為上述規則下的連線中斷;一旦重試標籤命名了具體原因,它會讀作 `Connection lost while your computer was asleep`,如果回合在 Claude 完成思考但在任何文字或工具呼叫之前結束,訊息會讀作 `Your computer went to sleep before a response was produced`。

420* 停滯的回應串流,當回應標頭已到達但 Claude 回應的任何部分都未到達,或當 Claude 完成思考但尚未開始任何文字或工具呼叫時:Claude Code 會中止停滯的連線,並最多再以串流方式發出一次請求。如果在 Claude 完成思考但在任何文字或工具呼叫之前回應停滯第二次,Claude Code 會以 `The response stalled before a response was produced` 結束回合。421* 停滯的回應串流,當回應標頭已到達但 Claude 回應的任何部分都未到達,或當 Claude 完成思考但尚未開始任何文字或工具呼叫時:Claude Code 會中止停滯的連線,並最多再以串流方式發出一次請求。如果在 Claude 完成思考但在任何文字或工具呼叫之前回應停滯第二次,Claude Code 會以 `The response stalled before a response was produced` 結束回合。

421* 串流請求 API 從未以回應標頭回答,在 [first-byte deadline 執行](/docs/zh-TW/network-config#streaming-idle-watchdogs) 的連線上:Claude Code 在截止時間中止它,並在重試預算內最多每個模型請求重新發送一次,然後如果該嘗試也未獲得回答,則以 [No response from API](#no-response-from-api) 結束回合。在其他連線上,請求會等待 `API_TIMEOUT_MS`。當您設定 `CLAUDE_CODE_RETRY_WATCHDOG` 時,一次重試上限不適用。422* 串流請求 API 從未以回應標頭回答,在 [first-byte deadline 執行](/docs/zh-TW/network-config#streaming-idle-watchdogs) 的連線上:Claude Code 在截止時間中止它,並在重試預算內最多每個模型請求重新發送一次,然後如果該嘗試也未獲得回答,則以 [No response from API](#no-response-from-api) 結束回合。當您設定 `CLAUDE_CODE_RETRY_WATCHDOG` 時,一次重試上限不適用。

422* 在 Claude 完成思考或開始任何文字或工具呼叫之前,被 API 輸出內容過濾器停止的串流回應。Claude Code 會在重試預算內重新發送請求一次,如果過濾器也停止了第二個回應,則顯示 [Output blocked by content filtering policy](#output-blocked-by-content-filtering-policy)。423* 在 Claude 完成思考或開始任何文字或工具呼叫之前,被 API 輸出內容過濾器停止的串流回應。Claude Code 會在重試預算內重新發送請求一次,如果過濾器也停止了第二個回應,則顯示 [Output blocked by content filtering policy](#output-blocked-by-content-filtering-policy)。

423* 暫時性 429 節流,但不是閘道的支出限制 `429`,這不是節流;請參閱 [Spend limit reached](#spend-limit-reached)。424* 暫時性 429 節流,但不是閘道的支出限制 `429`,這不是節流;請參閱 [Spend limit reached](#spend-limit-reached)。

424 * 當您使用 claude.ai 訂閱登入時,這包括不帶有您方案配額標頭的 429 節流。在 v2.1.199 之前,Claude Code 僅針對 API 金鑰和 Enterprise 登入重試這些節流。425 * 當您使用 claude.ai 訂閱登入時,這包括不帶有您方案配額標頭的 429 節流。在 v2.1.199 之前,Claude Code 僅針對 API 金鑰和 Enterprise 登入重試這些節流。


4552 4553 

4553* 對照 [subagent 可用的工具](/docs/zh-TW/sub-agents#available-tools),修正錯誤中列出的每個項目4554* 對照 [subagent 可用的工具](/docs/zh-TW/sub-agents#available-tools),修正錯誤中列出的每個項目

4554* 移除工作階段中不存在之工具的項目,例如來自未連線伺服器的 MCP 工具4555* 移除工作階段中不存在之工具的項目,例如來自未連線伺服器的 MCP 工具

4556* 如果該項目指定的是已連線的 MCP 伺服器,請將該項目與該伺服器 [工具名稱](/docs/zh-TW/permissions#mcp) 中所拼寫的伺服器名稱進行比對,例如 `mcp__reports__v2__get_totals` 中的 `reports__v2`。對於該伺服器,請寫成 `mcp__reports__v2__*`,也就是 `mcp__` 後接完整名稱再加上 `__*`。若使用較短的 `mcp__reports`(其指定的是名為 `reports` 的伺服器),subagent 將無法取得任何 `reports__v2` 工具

4555* 對於 [背景 subagent 會捨棄](/docs/zh-TW/sub-agents#available-tools) 的工具(例如 `CronCreate`),請移除該項目。若要保留該工具,請 [關閉 fork 模式](/docs/zh-TW/sub-agents#turn-fork-mode-on-or-off),並要求 Claude 在前景執行該 subagent4557* 對於 [背景 subagent 會捨棄](/docs/zh-TW/sub-agents#available-tools) 的工具(例如 `CronCreate`),請移除該項目。若要保留該工具,請 [關閉 fork 模式](/docs/zh-TW/sub-agents#turn-fork-mode-on-or-off),並要求 Claude 在前景執行該 subagent

4556* 刪除 `tools` 欄位而不列出工具,即可讓 subagent 取得每個 [subagent 可用的工具](/docs/zh-TW/sub-agents#available-tools)4558* 刪除 `tools` 欄位而不列出工具,即可讓 subagent 取得每個 [subagent 可用的工具](/docs/zh-TW/sub-agents#available-tools)

4557* 對於只包含 `Agent` 的 `tools` 清單,請提高 [深度上限](/docs/zh-TW/sub-agents#let-subagents-spawn-their-own-subagents),或至少再給該 agent 一個其他工具:Claude Code 會在達到該上限時保留 `Agent` 不提供,因此除了 `Agent` 之外沒有任何其他項目的清單會解析為沒有工具4559* 對於只包含 `Agent` 的 `tools` 清單,請提高 [深度上限](/docs/zh-TW/sub-agents#let-subagents-spawn-their-own-subagents),或至少再給該 agent 一個其他工具:Claude Code 會在達到該上限時保留 `Agent` 不提供,因此除了 `Agent` 之外沒有任何其他項目的清單會解析為沒有工具

hooks.md +53 −16

Details

476| `async` | 否 | 若為 `true`,會在背景執行而不封鎖。請參閱[在背景執行 hook](#run-hooks-in-the-background) |476| `async` | 否 | 若為 `true`,會在背景執行而不封鎖。請參閱[在背景執行 hook](#run-hooks-in-the-background) |

477| `asyncRewake` | 否 | 若為 `true`,會在背景執行,並在退出碼為 2 時喚醒 Claude。Hook 的 stderr(若 stderr 為空則為 stdout)會以[系統提醒](/docs/zh-TW/glossary#system-reminder)的形式顯示給 Claude,讓它能對長時間執行的背景失敗做出反應 |477| `asyncRewake` | 否 | 若為 `true`,會在背景執行,並在退出碼為 2 時喚醒 Claude。Hook 的 stderr(若 stderr 為空則為 stdout)會以[系統提醒](/docs/zh-TW/glossary#system-reminder)的形式顯示給 Claude,讓它能對長時間執行的背景失敗做出反應 |

478| `shell` | 否 | 此 hook 使用的 shell。接受 `"bash"` 或 `"powershell"`。預設為 `"bash"`,在未安裝 Git Bash 的 Windows 上則為 `"powershell"`。設為 `"powershell"` 會在 Windows 上透過 PowerShell 執行命令。由於 hook 會直接產生 PowerShell,因此不需要 `CLAUDE_CODE_USE_POWERSHELL_TOOL`。設定了 `args` 時會被忽略 |478| `shell` | 否 | 此 hook 使用的 shell。接受 `"bash"` 或 `"powershell"`。預設為 `"bash"`,在未安裝 Git Bash 的 Windows 上則為 `"powershell"`。設為 `"powershell"` 會在 Windows 上透過 PowerShell 執行命令。由於 hook 會直接產生 PowerShell,因此不需要 `CLAUDE_CODE_USE_POWERSHELL_TOOL`。設定了 `args` 時會被忽略 |

479| `onFailure` | 否 | hook 失敗時該動作的處理方式:`"continue"`(預設)或 `"block"`。請參閱[在 hook 失敗時封鎖動作](#block-the-action-when-a-hook-fails)。需要 Claude Code v2.1.295 或更新版本 |479| `onFailure` | 否 | hook 失敗時,觸發該 hook 的動作是否繼續進行:`"continue"` 或 `"block"`。關於 `"block"` 以及未設定此欄位時的行為,請參閱[在 hook 失敗時封鎖動作](#block-the-action-when-a-hook-fails)。需要 Claude Code v2.1.295 或更新版本 |

480 480 

481<a id="exec-form-and-shell-form" />481<a id="exec-form-and-shell-form" />

482 482 


829 829 

830* **成功**:您的 hook 以 0 退出。Claude Code 套用您的 hook 列印的任何 [JSON 輸出](#json-output) 欄位,除非這些欄位阻止或拒絕該操作,否則操作會繼續進行。[啟動背景程序的 hook](#hooks-that-start-a-background-process) 說明了例外情況。830* **成功**:您的 hook 以 0 退出。Claude Code 套用您的 hook 列印的任何 [JSON 輸出](#json-output) 欄位,除非這些欄位阻止或拒絕該操作,否則操作會繼續進行。[啟動背景程序的 hook](#hooks-that-start-a-background-process) 說明了例外情況。

831* **阻止性錯誤**:您的 hook 以 2 退出。在 [可以阻止的事件](#exit-code-2-behavior-per-event) 上,Claude Code 會停止該操作。831* **阻止性錯誤**:您的 hook 以 2 退出。在 [可以阻止的事件](#exit-code-2-behavior-per-event) 上,Claude Code 會停止該操作。

832* **非阻止性錯誤**:您的 hook 以任何其他代碼退出,或以其他方式失敗,例如無法啟動或列印無效的 JSON。操作會繼續進行,且在 `PreToolUse` 等事件上,您會在逐字稿中看到 `<hook name> hook error` 通知。如果您希望失敗的 hook 阻止操作,請設定 [`onFailure: "block"`](#block-the-action-when-a-hook-fails)。832* **非阻止性錯誤**:您的 hook 以任何其他代碼退出,或以其他方式失敗,例如無法啟動或列印無效的 JSON。操作會繼續進行,但 [失敗時會阻止操作的 hook](#block-the-action-when-a-hook-fails) 除外,例如將 `onFailure` 設定為 `"block"` 的 hook。在 `PreToolUse` 等事件上,您會在逐字稿中看到 `<hook name> hook error` 通知。

833 833 

834您的 hook 列印到 stdout 的內容可能會改變結果。例如,如果 `PreToolUse` hook 以 1 退出,但列印了通過驗證的 JSON,則該次執行為成功,由 JSON 欄位決定接下來發生的情況。要找出您的 hook 在 `PreToolUse` 等事件上的結果,請將第一欄中它列印到 stdout 的內容與頂端的退出碼對應:834您的 hook 列印到 stdout 的內容可能會改變結果。例如,當 `PreToolUse` hook 以 1 退出,但列印了通過驗證的 JSON 時,該 JSON 仍可決定接下來發生的情況。要找出您的 hook 在 `PreToolUse` 等事件上的結果,請將第一欄中它列印到 stdout 的內容與頂端的退出碼對應:

835 835 

836| Stdout | 退出 0 | 退出 2 | 任何其他退出碼 |836| Stdout | 退出 0 | 退出 2 | 任何其他退出碼 |

837| :- | :- | :- | :- |837| :- | :- | :- | :- |

838| 通過 [schema 驗證](#json-output) 的 JSON 物件 | 成功。欄位生效 | 阻止性錯誤。Claude Code 仍會讀取欄位,但它們無法覆寫阻止 | 成功。Claude Code 忽略退出碼,僅由欄位決定。若設定 [`onFailure: "block"`](#block-the-action-when-a-hook-fails),這會計為失敗 |838| 通過 [schema 驗證](#json-output) 的 JSON 物件 | 成功。欄位生效 | 阻止性錯誤。Claude Code 仍會讀取欄位,但它們無法覆寫阻止 | 成功。Claude Code 忽略退出碼,僅由欄位決定。對於 [失敗時會阻止操作的 hook](#block-the-action-when-a-hook-fails),該次執行改為計為失敗 |

839| [無法解析](#exit-code-0) 或未通過 schema 驗證的 JSON | 非阻止性錯誤。通知帶有解析或驗證訊息 | 阻止性錯誤。您的 stderr 即為原因 | 非阻止性錯誤。通知帶有解析或驗證訊息 |839| [無法解析](#exit-code-0) 或未通過 schema 驗證的 JSON | 非阻止性錯誤。通知帶有解析或驗證訊息 | 阻止性錯誤。您的 stderr 即為原因 | 非阻止性錯誤。通知帶有解析或驗證訊息 |

840| [純文字](#exit-code-0) 或無內容 | 成功 | 阻止性錯誤。您的 stderr 即為原因 | 非阻止性錯誤。通知帶有您的 stderr 的第一行 |840| [純文字](#exit-code-0) 或無內容 | 成功 | 阻止性錯誤。您的 stderr 即為原因 | 非阻止性錯誤。通知帶有您的 stderr 的第一行 |

841 841 


864* **兩行或更多行,每行本身都可解析為 JSON,且第一行以 `{` 開頭、最後一行以 `}` 結尾**:若沒有任何一行是設定欄位的 JSON 輸出物件,則為純文字;若有,則為解析失敗。864* **兩行或更多行,每行本身都可解析為 JSON,且第一行以 `{` 開頭、最後一行以 `}` 結尾**:若沒有任何一行是設定欄位的 JSON 輸出物件,則為純文字;若有,則為解析失敗。

865* **其他任何以 `{` 開頭並以 `}` 結尾但不是有效 JSON 的內容**:解析失敗。865* **其他任何以 `{` 開頭並以 `}` 結尾但不是有效 JSON 的內容**:解析失敗。

866 866 

867當 Claude Code 嘗試將您的 stdout 解析為 JSON 但無法解析,或已解析的物件未通過 [schema 驗證](#json-output) 時,該次執行為 [非阻止性錯誤](#exit-code-output)。`<hook name> hook error` 通知帶有解析或驗證訊息。在將純文字 stdout 新增為上下文的事件上,Claude Code 不會新增其無法解析的 stdout。867除非該 hook 是 [失敗時會阻止操作的 hook](#block-the-action-when-a-hook-fails),否則解析失敗或已解析的物件未通過 [schema 驗證](#json-output) 都是 [非阻止性錯誤](#exit-code-output)。`<hook name> hook error` 通知帶有解析或驗證訊息。在將純文字 stdout 新增為上下文的事件上,Claude Code 不會新增其無法解析的 stdout。

868 868 

869Claude 永遠看不到以 0 退出的 hook 的 stderr。要在 `PreToolUse` 等事件上自行讀取它,請啟用 [偵錯日誌](#debug-hooks)。要從 `PostToolUse` 或 `PostToolUseFailure` hook 向 Claude 顯示警告,請改為退出 2,以便 [Claude 看到 stderr](#exit-code-2-behavior-per-event),儘管工具已執行。869Claude 永遠看不到以 0 退出的 hook 的 stderr。要在 `PreToolUse` 等事件上自行讀取它,請啟用 [偵錯日誌](#debug-hooks)。要從 `PostToolUse` 或 `PostToolUseFailure` hook 向 Claude 顯示警告,請改為退出 2,以便 [Claude 看到 stderr](#exit-code-2-behavior-per-event),儘管工具已執行。

870 870 


907 其他退出碼907 其他退出碼

908</h4>908</h4>

909 909 

910當您的 hook 以 0 或 2 以外的代碼退出,並在 stdout 列印純文字或不列印任何內容時,該次執行為 [非阻止性錯誤](#exit-code-output)。您會在逐字稿中看到 `<hook name> hook error` 通知,帶有 `Failed with non-blocking status code:` 和您的 hook 的 stderr 第一行。例如,當 `Bash` 上的 `PreToolUse` hook 將 `something broke` 列印到 stderr 並以 1 退出時,`PreToolUse:Bash hook error` 通知帶有這一行:910除非該 hook 是 [失敗時會阻止操作的 hook](#block-the-action-when-a-hook-fails),否則以 0 或 2 以外的退出碼退出,並在 stdout 列印純文字或不列印任何內容,即為 [非阻止性錯誤](#exit-code-output)。如果操作繼續進行,您會在逐字稿中看到 `<hook name> hook error` 通知,帶有 `Failed with non-blocking status code:` 和您的 hook 的 stderr 第一行。

911 

912例如,當 `Bash` 上的 `PreToolUse` hook 將 `something broke` 列印到 stderr 並以 1 退出時,`PreToolUse:Bash hook error` 通知帶有這一行:

911 913 

912```text theme={null}914```text theme={null}

913Failed with non-blocking status code: something broke915Failed with non-blocking status code: something broke


915 917 

916要擷取完整的 stderr 而不僅是其第一行,請啟用 [偵錯日誌](#debug-hooks)。918要擷取完整的 stderr 而不僅是其第一行,請啟用 [偵錯日誌](#debug-hooks)。

917 919 

918無法啟動的 hook 也是非阻止性錯誤。在 shell 形式中,當指令碼路徑不存在或不可執行時,shell 以代碼(如 127)退出,通知帶有解譯器的訊息,例如 `Failed with non-blocking status code: /bin/sh: /path/to/hook.sh: No such file or directory`。當您設定原則 hook 時,請在其第一次執行時留意此通知,因為 `settings.json` 中拼寫錯誤的路徑代表該 hook 永遠不會執行。若要改為阻止操作,請設定 [`onFailure: "block"`](#block-the-action-when-a-hook-fails)。920除非該 hook 是 [失敗時會阻止操作的 hook](#block-the-action-when-a-hook-fails),否則無法啟動的 hook 也是非阻止性錯誤。在 shell 形式中,當指令碼路徑不存在或不可執行時,shell 以代碼(如 127)退出,通知帶有解譯器的訊息。例如,當指令碼路徑不存在時,通知會帶有類似這樣的一行:

921 

922```text theme={null}

923Failed with non-blocking status code: /bin/sh: /path/to/hook.sh: No such file or directory

924```

925 

926當您設定原則 hook 時,請在其第一次執行時留意此通知,因為 `settings.json` 中拼寫錯誤的路徑代表該 hook 永遠不會執行。要在 hook 無法啟動時阻止操作,請設定 [`onFailure: "block"`](#block-the-action-when-a-hook-fails)。

919 927 

920<Warning>928<Warning>

921 沒有 stdout 上的有效 JSON,Claude Code 將退出碼 1 視為非阻止性錯誤,儘管 1 是傳統的 Unix 失敗代碼。如果您的 hook 旨在強制執行原則,請使用 `exit 2`。929 沒有有效 JSON 輸出的退出碼 1 是非阻止性錯誤,除非該 hook 是 [失敗時會阻止操作的 hook](#block-the-action-when-a-hook-fails),儘管 1 是傳統的 Unix 失敗代碼。如果您的 hook 旨在強制執行原則,請使用 `exit 2`。

922</Warning>930</Warning>

923 931 

924<h4 id="timeouts">932<h4 id="timeouts">


929 937 

930在 [`PreModelSwitch`](#premodelswitch) 上,在其逾時時被取消的 hook 會阻止模型切換。在 `PreToolUse` 上,兩個 hook 系列不同:938在 [`PreModelSwitch`](#premodelswitch) 上,在其逾時時被取消的 hook 會阻止模型切換。在 `PreToolUse` 上,兩個 hook 系列不同:

931 939 

932* 逾時的 `command`、`http` 或 `mcp_tool` hook 不阻止工具呼叫。呼叫透過正常 [權限流程](/docs/zh-TW/permissions) 繼續,因此不要指望停滯的 hook 充當閘門。要在 `command` 或 `http` hook 逾時時阻止呼叫,請設定 [`onFailure: "block"`](#block-the-action-when-a-hook-fails)。940* 逾時的 `command`、`http` 或 `mcp_tool` hook 不阻止工具呼叫,但 [失敗時會阻止操作的 hook](#block-the-action-when-a-hook-fails) 除外。呼叫透過正常 [權限流程](/docs/zh-TW/permissions) 繼續,因此不要指望停滯的 hook 充當閘門。要在 `command` 或 `http` hook 逾時時阻止呼叫,請設定 [`onFailure: "block"`](#block-the-action-when-a-hook-fails)。

933* 超過其逾時的 [Agent SDK 回呼 hook](/docs/zh-TW/agent-sdk/hooks) [阻止工具呼叫](#pretooluse)。941* 超過其逾時的 [Agent SDK 回呼 hook](/docs/zh-TW/agent-sdk/hooks) [阻止工具呼叫](#pretooluse)。

934 942 

935<h4 id="hooks-that-start-a-background-process">943<h4 id="hooks-that-start-a-background-process">


959 在 hook 失敗時阻止操作967 在 hook 失敗時阻止操作

960</h4>968</h4>

961 969 

962在大多數事件上,當 hook 失敗或逾時時,Claude Code 仍會執行該操作,因此路徑錯誤或指令碼當機的原則 hook 會讓所有操作通過。若要改為阻止操作,請在 `command` 或 `http` hook 上設定 `"onFailure": "block"`。預設值為 `"continue"`。需要 Claude Code v2.1.295 或更新版本。970在大多數事件上,當 hook 失敗或逾時時,Claude Code 仍會執行該操作。如此一來,路徑錯誤或指令碼當機的原則 hook 會讓所有操作通過。若要改為阻止操作,請在 `command` 或 `http` hook 上設定 `"onFailure": "block"`。需要 Claude Code v2.1.295 或更新版本。

971 

972<Note>

973 在沒有 Git Bash 的 Windows 上,未設定 `onFailure` 的 shell 形式 `PreToolUse` 或 `PermissionRequest` 命令 hook 失敗時,可能改為[阻止工具呼叫](#failed-hooks-on-windows-without-git-bash)。

974</Note>

963 975 

964`.claude/settings.json` 中的這個 `PreToolUse` hook 會在每個 Bash 命令之前執行專案指令碼,並在指令碼失敗時阻止該命令:976`.claude/settings.json` 中的這個 `PreToolUse` hook 會在每個 Bash 命令之前執行專案指令碼,並在指令碼失敗時阻止該命令:

965 977 


1007* **`Stop`、`SubagentStop`、`TaskCompleted` 和 `TeammateIdle` hook**:在這些事件上,退出碼 2 會讓 Claude 回去繼續工作,而 Claude 無法修復無法執行的 hook1019* **`Stop`、`SubagentStop`、`TaskCompleted` 和 `TeammateIdle` hook**:在這些事件上,退出碼 2 會讓 Claude 回去繼續工作,而 Claude 無法修復無法執行的 hook

1008* **背景命令 hook**:設定 [`async` 或 `asyncRewake`](#run-hooks-in-the-background) 的命令 hook1020* **背景命令 hook**:設定 [`async` 或 `asyncRewake`](#run-hooks-in-the-background) 的命令 hook

1009 1021 

1022<h4 id="failed-hooks-on-windows-without-git-bash">

1023 Windows 上沒有 Git Bash 時失敗的 hook

1024</h4>

1025 

1026如果被阻止的工具呼叫的錯誤包含以下文字,表示某個 `PreToolUse` 或 `PermissionRequest` 命令 hook 失敗或逾時,並阻止了該呼叫:

1027 

1028```text theme={null}

1029blocking because Git Bash wasn't found and this hook doesn't set "shell" to "powershell", so only exit code 0 or 2 counts as its verdict.

1030```

1031 

1032未設定 `shell` 的 shell 形式 hook 在未安裝 Git Bash 時會在 PowerShell 中執行,而為 Bash 撰寫的指令碼在那裡可能無法照原樣執行。請選擇符合您 hook 的修正方式:

1033 

1034* **hook 是為 Bash 撰寫的**:安裝 [Git for Windows](https://git-scm.com/downloads/win),或者如果 Git Bash 安裝在 Claude Code 找不到的位置,請設定 [`CLAUDE_CODE_GIT_BASH_PATH`](/docs/zh-TW/env-vars),然後啟動新的工作階段

1035* **hook 執行單一 `.exe`,而非 `.cmd` 或 `.bat` 檔案**:將程式放在 `command` 中、將其引數放在 `args` 中以使用 [exec 形式](#exec-form-and-shell-form),並新增 [`"onFailure": "block"`](#block-the-action-when-a-hook-fails)。Claude Code 接著會在沒有 shell 的情況下啟動該程式。若沒有 `"onFailure": "block"`,當程式失敗、不存在或逾時時,呼叫可能會繼續進行

1036* **hook 是為 PowerShell 撰寫的**:在 hook 中新增 `"shell": "powershell"` 和 [`"onFailure": "block"`](#block-the-action-when-a-hook-fails)。若沒有 `"onFailure": "block"`,當 hook 仍然失敗或逾時時,呼叫可能會繼續進行。要找出 hook 失敗的原因,請查看 [偵錯日誌](#debug-hooks)

1037* **hook 失敗時操作應繼續進行**:在 hook 中新增 `"onFailure": "continue"`

1038 

1039對於顯示此錯誤的 hook,0 或 2 以外的任何退出碼都計為 [失敗](#block-the-action-when-a-hook-fails),即使該 hook 列印了不拒絕呼叫的 JSON。

1040 

1010<h4 id="exit-code-2-behavior-per-event">1041<h4 id="exit-code-2-behavior-per-event">

1011 每個事件的退出碼 2 行為1042 每個事件的退出碼 2 行為

1012</h4>1043</h4>


1060* **2xx 且正文為空**:成功,等同於退出碼 0 且無輸出1091* **2xx 且正文為空**:成功,等同於退出碼 0 且無輸出

1061* **2xx 且 JSON 物件正文**:使用與命令 hook 相同的 [JSON 輸出](#json-output) schema 進行解析。未通過 schema 驗證的正文是非阻止性錯誤1092* **2xx 且 JSON 物件正文**:使用與命令 hook 相同的 [JSON 輸出](#json-output) schema 進行解析。未通過 schema 驗證的正文是非阻止性錯誤

1062* **2xx 且任何其他正文,如純文字**:非阻止性錯誤,處理方式與非 2xx 狀態相同。Claude Code 不將文字新增到 Claude 的上下文1093* **2xx 且任何其他正文,如純文字**:非阻止性錯誤,處理方式與非 2xx 狀態相同。Claude Code 不將文字新增到 Claude 的上下文

1063* **非 2xx 狀態**:非阻止性錯誤,執行繼續1094* **非 2xx 狀態**:非阻止性錯誤

1064* **連線失敗**:非阻止性錯誤,執行繼續1095* **連線失敗**:非阻止性錯誤

1065* **逾時**:hook 被取消,如 [逾時](#timeouts) 下所述1096* **逾時**:hook 被取消,如 [逾時](#timeouts) 下所述

1066 1097 

1067HTTP hook 無法僅透過狀態碼發出阻止性錯誤信號:非 2xx 狀態或失敗的連線是 [非阻止性錯誤](#exit-code-output)。要阻止工具呼叫或拒絕權限,請返回 2xx 回應,其 JSON 正文包含適當的決定欄位。要在請求失敗或返回非 2xx 狀態時阻止操作,請設定 [`onFailure: "block"`](#block-the-action-when-a-hook-fails)。1098發生 [非阻止性錯誤](#exit-code-output) 後,操作會繼續進行,除非該 hook 是 [失敗時會阻止操作的 hook](#block-the-action-when-a-hook-fails)。要阻止工具呼叫或拒絕權限,請返回 2xx 回應,其 JSON 正文包含適當的 [決定欄位](#decision-control)。要在請求失敗或返回非 2xx 狀態時阻止操作,請設定 [`onFailure: "block"`](#block-the-action-when-a-hook-fails)。

1068 1099 

1069<h3 id="json-output">1100<h3 id="json-output">

1070 JSON 輸出1101 JSON 輸出


1573}1604}

1574```1605```

1575 1606 

1607當提示詞是您輸入的 [skill](/docs/zh-TW/skills) 或自訂命令(例如 `/deploy staging`)時,hook 接收的是您輸入的那一行原文,而非展開後的 skill 內容。如果 hook 阻擋了該提示詞,命令就不會執行,因此 skill [以 `` !`<command>` `` 注入](/docs/zh-TW/skills#inject-dynamic-context)的 shell 命令也不會執行。若要改為比對命令的名稱或引數,請使用 [UserPromptExpansion](#userpromptexpansion)。

1608 

1576<h4 id="userpromptsubmit-decision-control">1609<h4 id="userpromptsubmit-decision-control">

1577 UserPromptSubmit 決策控制1610 UserPromptSubmit 決策控制

1578</h4>1611</h4>


2076 2109 

2077| 欄位 | 說明 |2110| 欄位 | 說明 |

2078| :- | :- |2111| :- | :- |

2079| `permissionDecision` | `"allow"` 會略過權限提示,但[沒有任何模式會自動核准的動作](/docs/zh-TW/permission-modes#actions-no-mode-auto-approves)、[從網路路徑讀取](/docs/zh-TW/permissions#network-paths),以及需要[搭配 `updatedInput`](#allow-with-updatedinput) 的 `AskUserQuestion` 和 `ExitPlanMode` 除外。`"deny"` 會阻止工具呼叫。`"ask"` 會提示使用者確認。`"defer"` 會正常結束,以便稍後恢復該工具。無論 hook 回傳什麼,[拒絕和詢問規則](/docs/zh-TW/permissions#manage-permissions)仍會被評估 |2112| `permissionDecision` | `"allow"` 會略過權限提示,但[任何模式都不會自動核准的動作](/docs/zh-TW/permission-modes#actions-no-mode-auto-approves)和[從網路路徑讀取](/docs/zh-TW/permissions#network-paths)除外。`AskUserQuestion` 和 `ExitPlanMode` 需要[搭配 `"allow"` 的 `updatedInput`](#allow-with-updatedinput)。關於 plan mode,請參閱 [plan mode 中的 hook 核准](/docs/zh-TW/permissions#hook-approvals-in-plan-mode)。`"deny"` 會阻止工具呼叫。`"ask"` 會提示使用者確認。`"defer"` 會正常結束,讓工具稍後可以恢復。無論 hook 回傳什麼,[拒絕與詢問規則](/docs/zh-TW/permissions#manage-permissions)仍會被評估 |

2080| `permissionDecisionReason` | 對於 `"ask"`,會在權限提示中向使用者顯示。當 Claude Code 在沒有人能回應該提示的 `-p` 執行中[拒絕呼叫](/docs/zh-TW/headless#turn-off-permission-prompts-in-unattended-runs)時,Claude 會改為在工具結果中讀到原因。對於 `"deny"`,會向 Claude 顯示。對於 `"allow"` 和 `"defer"`,只會寫入[除錯日誌](#debug-hooks) |2113| `permissionDecisionReason` | 對於 `"ask"`,會在權限提示中向使用者顯示。當 Claude Code 在沒有人能回應該提示的 `-p` 執行中[拒絕呼叫](/docs/zh-TW/headless#turn-off-permission-prompts-in-unattended-runs)時,Claude 會改為在工具結果中讀到原因。對於 `"deny"`,會向 Claude 顯示。對於 `"allow"` 和 `"defer"`,只會寫入[除錯日誌](#debug-hooks) |

2081| `updatedInput` | 在執行前修改工具的輸入參數。會取代整個輸入物件,因此請將未變更的欄位與修改過的欄位一併包含。Claude Code 會根據您 hook 回傳的輸入(而非 Claude 傳送的輸入)評估權限規則,以及 Bash 命令的[自動移至背景資格](/docs/zh-TW/tools-reference#foreground-commands-that-move-to-the-background)。與 `"allow"` 搭配可自動核准,或與 `"ask"` 搭配向使用者顯示修改後的輸入。對於 `"defer"`,會被忽略 |2114| `updatedInput` | 在執行前修改工具的輸入參數。會取代整個輸入物件,因此請將未變更的欄位與修改過的欄位一併包含。Claude Code 會根據您 hook 回傳的輸入(而非 Claude 傳送的輸入)評估權限規則,以及 Bash 命令的[自動移至背景資格](/docs/zh-TW/tools-reference#foreground-commands-that-move-to-the-background)。與 `"allow"` 搭配可自動核准,或與 `"ask"` 搭配向使用者顯示修改後的輸入。對於 `"defer"`,會被忽略 |

2082| `additionalContext` | 與工具結果一同加入 Claude 情境的字串。當 `permissionDecision` 為 `"defer"` 時會被忽略。請參閱[為 Claude 新增情境](#add-context-for-claude) |2115| `additionalContext` | 與工具結果一同加入 Claude 情境的字串。當 `permissionDecision` 為 `"defer"` 時會被忽略。請參閱[為 Claude 新增情境](#add-context-for-claude) |


3717 3750 

3718無論決策為何,Claude Code 都會向使用者顯示您的 hook 所傳回的任何 `systemMessage`,因此回報成本的 hook 可以傳回 `{"systemMessage": "..."}` 並以 0 結束。3751無論決策為何,Claude Code 都會向使用者顯示您的 hook 所傳回的任何 `systemMessage`,因此回報成本的 hook 可以傳回 `{"systemMessage": "..."}` 並以 0 結束。

3719 3752 

3720未在逾時前回應的 PreModelSwitch hook 會封鎖切換。關於逾時對其他事件的影響,請參閱[逾時](#timeouts)。此事件的預設逾時為 30 秒。`PreModelSwitch` 只執行 `command`、`http` 與 `mcp_tool` hook,因此 `prompt` 與 `agent` 的預設值不適用。3753<h4 id="premodelswitch-timeouts-and-other-exit-codes">

3754 PreModelSwitch 逾時及其他退出碼

3755</h4>

3756 

3757在逾時之前未回應的 PreModelSwitch hook 會阻擋切換。此事件的預設逾時為 30 秒。

3721 3758 

3722以 0 或 2 以外的代碼結束且未印出 JSON 決策的 hook 屬於非封鎖錯誤,如[其他退出碼](#other-exit-codes)中所述。3759關於 0 或 2 以外的退出碼會產生什麼效果,請參閱[其他退出碼](#other-exit-codes)。

3723 3760 

3724<h3 id="postmodelswitch">3761<h3 id="postmodelswitch">

3725 PostModelSwitch3762 PostModelSwitch

hooks-guide.md +20 −7

Details

633 * 對於 `PreToolUse` hook,這不會核准工具呼叫:正常的 [權限流程](/docs/zh-TW/permissions) 仍然適用。633 * 對於 `PreToolUse` hook,這不會核准工具呼叫:正常的 [權限流程](/docs/zh-TW/permissions) 仍然適用。

634 * 對於 `UserPromptSubmit`、`UserPromptExpansion`、`SessionStart` 和 `PostModelSwitch` hooks,Claude Code 將 stdout [視為純文字](/docs/zh-TW/hooks#exit-code-0) 新增到 Claude 的上下文。634 * 對於 `UserPromptSubmit`、`UserPromptExpansion`、`SessionStart` 和 `PostModelSwitch` hooks,Claude Code 將 stdout [視為純文字](/docs/zh-TW/hooks#exit-code-0) 新增到 Claude 的上下文。

635* **結束代碼 2**:Claude Code 阻止該動作。將原因寫入 stderr。它的位置取決於事件:某些事件將其提供給 Claude 作為回饋,以便它可以調整,其他事件將其顯示給使用者,還有一些(如 `ConfigChange` 和 `Elicitation`)不顯示任何訊息。某些事件無法被阻止:對於 `SessionStart` 和其他事件,結束代碼 2 向使用者顯示 stderr 並繼續執行。請參閱 [每個事件的結束代碼 2 行為](/docs/zh-TW/hooks#exit-code-2-behavior-per-event) 以取得完整清單。635* **結束代碼 2**:Claude Code 阻止該動作。將原因寫入 stderr。它的位置取決於事件:某些事件將其提供給 Claude 作為回饋,以便它可以調整,其他事件將其顯示給使用者,還有一些(如 `ConfigChange` 和 `Elicitation`)不顯示任何訊息。某些事件無法被阻止:對於 `SessionStart` 和其他事件,結束代碼 2 向使用者顯示 stderr 並繼續執行。請參閱 [每個事件的結束代碼 2 行為](/docs/zh-TW/hooks#exit-code-2-behavior-per-event) 以取得完整清單。

636* **任何其他結束代碼**:對於大多數事件,結果取決於您的 hook 列印到 stdout 的內容:636* **任何其他結束代碼**:對於大多數事件,動作會以 [非阻止性錯誤](/docs/zh-TW/hooks#exit-code-output) 繼續進行,除非該 hook 屬於 [其失敗會阻止動作](/docs/zh-TW/hooks#block-the-action-when-a-hook-fails) 的類型,或其 JSON 輸出通過驗證:

637 * 通過結構描述驗證的已解析物件:Claude Code 忽略結束代碼,JSON 單獨決定結果,hook 不會報告為錯誤。每個事件的例外情況(如 `WorktreeCreate` 在任何非零結束代碼上失敗)列在參考的 [結束代碼輸出](/docs/zh-TW/hooks#exit-code-output) 部分中。637 * 通過 schema 驗證的已解析物件:Claude Code 忽略結束代碼,JSON 單獨決定結果,hook 不會報告為錯誤。每個事件的例外情況(如 `WorktreeCreate` 在任何非零結束代碼上失敗)列在參考的 [結束代碼輸出](/docs/zh-TW/hooks#exit-code-output) 部分中。

638 * 通過結構描述驗證失敗的已解析物件,或 Claude Code [嘗試解析為 JSON](/docs/zh-TW/hooks#exit-code-0) 但不是有效 JSON 的 stdout:非阻止性錯誤;通知包含驗證或解析訊息。638 * 未通過 schema 驗證的已解析物件,或 Claude Code [嘗試解析為 JSON](/docs/zh-TW/hooks#exit-code-0) 但不是有效 JSON 的 stdout:非阻止性錯誤;通知包含驗證或解析訊息。

639 * Claude Code [視為純文字](/docs/zh-TW/hooks#exit-code-0) 的 stdout,或空 stdout:動作以非阻止性錯誤進行。文字記錄顯示 `<hook name> hook error` 通知,然後是 stderr 的第一行,前綴為 `Failed with non-blocking status code:`。要擷取完整的 stderr,請使用 `claude --debug` 或在會話中執行 `/debug` 來啟用 [偵錯日誌](/docs/zh-TW/hooks#debug-hooks)。639 * Claude Code [視為純文字](/docs/zh-TW/hooks#exit-code-0) 的 stdout,或空 stdout:動作以非阻止性錯誤進行。逐字稿顯示 `<hook name> hook error` 通知,然後是 stderr 的第一行,前綴為 `Failed with non-blocking status code:`。要擷取完整的 stderr,請使用 `claude --debug` 或在工作階段中執行 `/debug` 來啟用 [偵錯日誌](/docs/zh-TW/hooks#debug-hooks)。

640 640 

641<h4 id="structured-json-output">641<h4 id="structured-json-output">

642 結構化 JSON 輸出642 結構化 JSON 輸出


664 664 

665在 `PreToolUse` 上,Claude Code 按如下方式處理每個 `permissionDecision` 值:665在 `PreToolUse` 上,Claude Code 按如下方式處理每個 `permissionDecision` 值:

666 666 

667* `"allow"`:跳過互動式權限提示。拒絕和詢問規則(包括企業管理的拒絕清單)仍然適用;從 [網路路徑](/docs/zh-TW/permissions#network-paths) 讀取時的提示、標記為 [`requiresUserInteraction`](/docs/zh-TW/mcp#require-approval-for-a-specific-tool) 的 MCP 工具的提示,以及在該設定會傳達到 Claude Code 的工作階段中,[您的組織設定為 `ask`](/docs/zh-TW/mcp#organization-controls-on-connector-tools) 的連接器工具的提示也同樣適用667* `"allow"`:跳過互動式權限提示。拒絕和詢問規則(包括企業管理的拒絕清單)仍然適用,以下情況的提示也同樣適用:

668 

669 * 從 [網路路徑](/docs/zh-TW/permissions#network-paths) 讀取

670 * 標記為 [`requiresUserInteraction`](/docs/zh-TW/mcp#require-approval-for-a-specific-tool) 的 MCP 工具

671 * 在該設定會傳達到 Claude Code 的工作階段中,[您的組織設定為 `ask`](/docs/zh-TW/mcp#organization-controls-on-connector-tools) 的連接器工具

672 

673 關於 `"allow"` 在 plan mode 中的作用,請參閱 [plan mode 中的 hook 核准](/docs/zh-TW/permissions#hook-approvals-in-plan-mode)。

668* `"deny"`:取消工具呼叫並將原因傳送給 Claude674* `"deny"`:取消工具呼叫並將原因傳送給 Claude

669* `"ask"`:向使用者正常顯示權限提示675* `"ask"`:向使用者正常顯示權限提示

670 676 


1015 1021 

1016`PreToolUse` hooks 在任何權限模式檢查之前觸發,在每個[權限模式](/docs/zh-TW/permission-modes)中,包括 `dontAsk`。傳回 `permissionDecision: "deny"` 的 hook 會阻止工具,即使在 `bypassPermissions` 模式或使用 `--dangerously-skip-permissions`。這讓您強制執行使用者無法透過變更其權限模式來繞過的原則。1022`PreToolUse` hooks 在任何權限模式檢查之前觸發,在每個[權限模式](/docs/zh-TW/permission-modes)中,包括 `dontAsk`。傳回 `permissionDecision: "deny"` 的 hook 會阻止工具,即使在 `bypassPermissions` 模式或使用 `--dangerously-skip-permissions`。這讓您強制執行使用者無法透過變更其權限模式來繞過的原則。

1017 1023 

1018反面不成立:傳回 `"allow"` 的 hook 不會繞過來自設定的拒絕規則,它也無法抑制從[網路路徑](/docs/zh-TW/permissions#network-paths)讀取時的提示、標記為 [`requiresUserInteraction`](/docs/zh-TW/mcp#require-approval-for-a-specific-tool) 的 MCP 工具的提示,或[您的組織設定為 `ask`](/docs/zh-TW/mcp#organization-controls-on-connector-tools) 的連接器工具在該設定到達 Claude Code 的工作階段中的提示。設定檔和外掛 `hooks/hooks.json` 中的 hook 可以加強限制,但不能放寬超過權限規則允許的限制。1024反之則不成立:設定檔和外掛 `hooks/hooks.json` 中的 hook 可以加強限制,但不能放寬超過權限規則允許的範圍。傳回 `"allow"` 的 hook 不會繞過來自設定的拒絕規則,也無法抑制以下情況的提示:

1025 

1026* 從[網路路徑](/docs/zh-TW/permissions#network-paths)讀取

1027* 標記為 [`requiresUserInteraction`](/docs/zh-TW/mcp#require-approval-for-a-specific-tool) 的 MCP 工具

1028* 在該設定會傳達到 Claude Code 的工作階段中,[您的組織設定為 `ask`](/docs/zh-TW/mcp#organization-controls-on-connector-tools) 的連接器工具

1029 

1030在 [plan mode](/docs/zh-TW/permissions#hook-approvals-in-plan-mode) 中,如果您的 `PreToolUse` hook 對檔案編輯傳回 `"allow"`,您會得到與沒有 hook 時該編輯相同的提示、阻止或核准。若要解除 hook 核准的這項限制,請[核准計畫](/docs/zh-TW/permission-modes#review-and-approve-a-plan)或切換到其他權限模式。

1019 1031 

1020您安裝的 [mod](/docs/zh-TW/plugins/mods/overview) 如果處理 `tool.check`,可以批准您的 `PreToolUse` hook 阻止的呼叫,除非該 hook 在受管設定中。[使用 hook 擴展權限](/docs/zh-TW/permissions#extend-permissions-with-hooks)列出哪些規則優先於 mod。1032您安裝的 [mod](/docs/zh-TW/plugins/mods/overview) 如果處理 `tool.check`,可以核准您的 `PreToolUse` hook 阻止的呼叫,除非該 hook 在受管設定中。在 plan mode 中,當此類呼叫為唯讀時,mod 可以核准它,但不能核准檔案編輯或其他非唯讀的呼叫。[使用 hook 擴展權限](/docs/zh-TW/permissions#extend-permissions-with-hooks)列出哪些規則優先於 mod。

1021 1033 

1022<h3 id="hook-not-firing">1034<h3 id="hook-not-firing">

1023 Hook 未觸發1035 Hook 未觸發


1042 ```1054 ```

1043* 如果您看到「command not found」,使用絕對路徑或 `${CLAUDE_PROJECT_DIR}` 來參考指令。為了完全避免 shell 引用,添加 `"args": []` 以切換到 [exec 形式](/docs/zh-TW/hooks#exec-form-and-shell-form),它直接生成指令而不使用 shell1055* 如果您看到「command not found」,使用絕對路徑或 `${CLAUDE_PROJECT_DIR}` 來參考指令。為了完全避免 shell 引用,添加 `"args": []` 以切換到 [exec 形式](/docs/zh-TW/hooks#exec-form-and-shell-form),它直接生成指令而不使用 shell

1044* 如果您看到「jq: command not found」,安裝 `jq` 或使用 Python/Node.js 進行 JSON 解析1056* 如果您看到「jq: command not found」,安裝 `jq` 或使用 Python/Node.js 進行 JSON 解析

1057* 如果訊息包含 `blocking because Git Bash wasn't found`,表示您在 Windows 上、Claude Code 找不到 Git Bash,且失敗或逾時的 hook 阻止了工具呼叫。請參閱[在沒有 Git Bash 的 Windows 上失敗的 hook](/docs/zh-TW/hooks#failed-hooks-on-windows-without-git-bash) 以了解修正方法

1045* 如果通知顯示 JSON 驗證訊息,您的 hook 的 stdout 解析為 JSON 但未通過架構驗證。如果顯示 JSON 解析訊息,stdout 看起來像 JSON 物件但不是有效的 JSON。即使在退出 0 時也會發生這兩種情況。1058* 如果通知顯示 JSON 驗證訊息,您的 hook 的 stdout 解析為 JSON 但未通過架構驗證。如果顯示 JSON 解析訊息,stdout 看起來像 JSON 物件但不是有效的 JSON。即使在退出 0 時也會發生這兩種情況。

1046 1059 

1047 要修復解析失敗,使用 JSON 編碼器(例如 `jq`)而不是字串連接來建立有效負載,以便值內的引號和反斜線被轉義。參考的[退出代碼輸出](/docs/zh-TW/hooks#exit-code-output)部分涵蓋了退出代碼和 JSON 組合1060 要修復解析失敗,使用 JSON 編碼器(例如 `jq`)而不是字串連接來建立有效負載,以便值內的引號和反斜線被轉義。參考的[退出代碼輸出](/docs/zh-TW/hooks#exit-code-output)部分涵蓋了退出代碼和 JSON 組合

Details

1091* `event.sequence`:用於排序事件的每程序計數器,說明請參閱[事件關聯屬性](#event-correlation-attributes)1091* `event.sequence`:用於排序事件的每程序計數器,說明請參閱[事件關聯屬性](#event-correlation-attributes)

1092* `from_mode`:先前的權限模式,例如 `"default"`、`"plan"`、`"acceptEdits"`、`"auto"` 或 `"bypassPermissions"`1092* `from_mode`:先前的權限模式,例如 `"default"`、`"plan"`、`"acceptEdits"`、`"auto"` 或 `"bypassPermissions"`

1093* `to_mode`:新的權限模式1093* `to_mode`:新的權限模式

1094* `trigger`:造成變更的原因。為 `"shift_tab"`、`"exit_plan_mode"`、`"auto_gate_denied"` 或 `"auto_opt_in"` 之一。當轉換源自 SDK 或 bridge 時不存在1094* `trigger`:造成變更的原因。為 `"shift_tab"`、`"exit_plan_mode"`、`"auto_gate_denied"` 或 `"auto_opt_in"` 其中之一。對於某些變更不存在,例如當 SDK 透過 [`setPermissionMode()`](/docs/zh-TW/agent-sdk/typescript#query-object) 設定權限模式時

1095 1095 

1096<h4 id="auth-event">1096<h4 id="auth-event">

1097 身分驗證事件1097 身分驗證事件

Details

203 串流閒置監視狗203 串流閒置監視狗

204</h2>204</h2>

205 205 

206Claude Code 執行四個獨立計時器,當串流模型回應變得安靜時會中止該回應,因此死連線會失敗並重試,而不是掛起。首位元組期限涵蓋等待回應標頭的時間,在回應到達之前。其他三個監視狗各監視一個即時回應的不同信號。206Claude Code 執行四個獨立計時器,當串流模型回應變得安靜時會中止該回應,因此死連線會失敗並重試,而不是掛起。完全沒有收到回應標頭的請求會以下列兩種方式之一結束:

207 

208* **在首位元組期限執行的連線上**:第一次嘗試會在該期限結束。若要變更,請設定 `CLAUDE_STREAM_FIRST_BYTE_TIMEOUT_MS`。有關重試的等待時間,請參閱 [API 無回應](/docs/zh-TW/errors#no-response-from-api)。

209* **在其他連線上**:請求會在 5 到 6 分鐘後、本體閒置逾時觸發時結束,除非您已關閉該逾時。若要更早結束,請降低 `API_TIMEOUT_MS`。

207 210 

208| 計時器 | 中止條件 | 執行位置 | 預設逾時 |211| 計時器 | 中止條件 | 執行位置 | 預設逾時 |

209| :- | :- | :- | :- |212| :- | :- | :- | :- |

210| 首位元組期限 | Claude Code 傳送請求後沒有回應標頭到達 | 直接 Anthropic API 和 [Claude Platform on AWS](/docs/zh-TW/claude-platform-on-aws),包括透過 HTTPS 代理,但不包括當 `ANTHROPIC_BASE_URL` 或 `ANTHROPIC_AWS_BASE_URL` 透過 [gateway](/docs/zh-TW/gateways) 路由時。在 Amazon Bedrock 上選擇加入,使用 `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1`;不在 Google Cloud 的 Agent Platform 或 Microsoft Foundry 上執行 | 直接 Anthropic API 上 180 秒,其他位置 300 秒,加上每 32KB 請求本體一秒 |213| 首位元組期限 | Claude Code 傳送請求後沒有回應標頭到達 | 直接 Anthropic API 和 [Claude Platform on AWS](/docs/zh-TW/claude-platform-on-aws),包括透過 HTTPS 代理伺服器,但不包括當 `ANTHROPIC_BASE_URL` 或 `ANTHROPIC_AWS_BASE_URL` 透過 [閘道](/docs/zh-TW/gateways) 路由時。在 Amazon Bedrock 上選擇加入,使用 `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1`;不在 Google Cloud 的 Agent Platform 或 Microsoft Foundry 上執行,也不在 [Claude apps 閘道](/docs/zh-TW/claude-apps-gateway) 工作階段中執行 | 直接 Anthropic API 上 180 秒,其他位置 300 秒,加上每 32KB 請求本體一秒 |

211| 事件層級監視狗 | 沒有回應事件解析。在位元組層級監視狗執行於 Amazon Bedrock 以外的連線上時,到達的位元組(包括保活 ping)也會重設此監視狗,最多約五分鐘內沒有解析事件 | 每個提供者 | 300 秒 |214| 事件層級監視狗 | 沒有回應事件解析。在位元組層級監視狗執行於 Amazon Bedrock 以外的連線上時,到達的位元組(包括保活 ping)也會重設此監視狗,最多約五分鐘內沒有解析事件 | 每個提供者 | 300 秒 |

212| 位元組層級監視狗 | 網路上沒有位元組到達,包括 SSE 保活 ping | 直接 Anthropic API、[Claude Platform on AWS](/docs/zh-TW/claude-platform-on-aws) 和 [閘道](/docs/zh-TW/gateways) 連線,包括自訂 `ANTHROPIC_BASE_URL`。在 Amazon Bedrock `vnd.amazon.eventstream` 回應上選擇加入,使用 `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1`;不在 Google Cloud 的 Agent Platform 或 Microsoft Foundry 上執行 | 直接 Anthropic API 上 180 秒。在 Claude Platform on AWS、Amazon Bedrock、[Claude apps 閘道](/docs/zh-TW/claude-apps-gateway) 工作階段中,以及透過自訂 `ANTHROPIC_BASE_URL` 時為 300 秒 |215| 位元組層級監視狗 | 網路上沒有位元組到達,包括 SSE 保活 ping | 直接 Anthropic API、[Claude Platform on AWS](/docs/zh-TW/claude-platform-on-aws) 和 [閘道](/docs/zh-TW/gateways) 連線,包括自訂 `ANTHROPIC_BASE_URL`。在 Amazon Bedrock `vnd.amazon.eventstream` 回應上選擇加入,使用 `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1`;不在 Google Cloud 的 Agent Platform 或 Microsoft Foundry 上執行 | 直接 Anthropic API 上 180 秒。在 Claude Platform on AWS、Amazon Bedrock、[Claude apps 閘道](/docs/zh-TW/claude-apps-gateway) 工作階段中,以及透過自訂 `ANTHROPIC_BASE_URL` 時為 300 秒 |

213| 本體閒置逾時 | 5 分鐘內沒有位元組到達 | 提供者不是直接 Anthropic API、Claude Platform on AWS 和設定了 `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1` 的 Amazon Bedrock,除非 [`API_FORCE_IDLE_TIMEOUT`](/docs/zh-TW/env-vars) 改變該設定 | 5 分鐘 |216| 本體閒置逾時 | 5 分鐘內沒有位元組到達,包括等待回應標頭的時間 | 提供者不是直接 Anthropic API、Claude Platform on AWS 和設定了 `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1` 的 Amazon Bedrock,除非 [`API_FORCE_IDLE_TIMEOUT`](/docs/zh-TW/env-vars) 改變該設定 | 5 分鐘 |

214 217 

215如果您設定 `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1`,位元組層級監視狗會在 Bedrock 上取代本體閒置逾時,而不是與其並行執行。`CLAUDE_STREAM_IDLE_TIMEOUT_MS` 隨後也會控制 Bedrock 串流在 Claude Code 將連線視為死連線之前可以保持安靜多長時間,在下列列出的限制範圍內。到達的位元組仍不會在 Bedrock 上重設事件層級監視狗。啟用偵錯記錄時,每個 Bedrock 串流隨後會記錄一條以 `wire-heartbeat: _chunkTimes absent` 開頭的偵錯訊息。218如果您設定 `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1`,位元組層級監視狗會在 Bedrock 上取代本體閒置逾時,而不是與其並行執行。`CLAUDE_STREAM_IDLE_TIMEOUT_MS` 隨後也會控制 Bedrock 串流在 Claude Code 將連線視為死連線之前可以保持安靜多長時間,在下列列出的限制範圍內。到達的位元組仍不會在 Bedrock 上重設事件層級監視狗。啟用偵錯記錄時,每個 Bedrock 串流隨後會記錄一條以 `wire-heartbeat: _chunkTimes absent` 開頭的偵錯訊息。

216 219 


220* `CLAUDE_STREAM_IDLE_TIMEOUT_MS` 設定兩個監視狗的逾時。Claude Code 將低於 5 分鐘的值提高到 5 分鐘,並將位元組層級監視狗的值上限設為 30 分鐘。223* `CLAUDE_STREAM_IDLE_TIMEOUT_MS` 設定兩個監視狗的逾時。Claude Code 將低於 5 分鐘的值提高到 5 分鐘,並將位元組層級監視狗的值上限設為 30 分鐘。

221* `CLAUDE_BYTE_STREAM_IDLE_TIMEOUT_MS` 設定位元組層級監視狗的逾時,而不改變事件層級監視狗的逾時,限制在 10 秒到 30 分鐘之間,並優先於 `CLAUDE_STREAM_IDLE_TIMEOUT_MS` 用於該監視狗。224* `CLAUDE_BYTE_STREAM_IDLE_TIMEOUT_MS` 設定位元組層級監視狗的逾時,而不改變事件層級監視狗的逾時,限制在 10 秒到 30 分鐘之間,並優先於 `CLAUDE_STREAM_IDLE_TIMEOUT_MS` 用於該監視狗。

222* `CLAUDE_STREAM_FIRST_BYTE_TIMEOUT_MS` 直接設定首位元組期限。保持未設定,Claude Code 會使用位元組層級監視狗的逾時,因此 `CLAUDE_STREAM_IDLE_TIMEOUT_MS` 和 `CLAUDE_BYTE_STREAM_IDLE_TIMEOUT_MS` 也會改變期限。有關限制、上傳額度、`API_TIMEOUT_MS` 上限以及重試在無回應中止後等待多長時間,請參閱 [API 無回應](/docs/zh-TW/errors#no-response-from-api)。225* `CLAUDE_STREAM_FIRST_BYTE_TIMEOUT_MS` 直接設定首位元組期限。保持未設定,Claude Code 會使用位元組層級監視狗的逾時,因此 `CLAUDE_STREAM_IDLE_TIMEOUT_MS` 和 `CLAUDE_BYTE_STREAM_IDLE_TIMEOUT_MS` 也會改變期限。有關限制、上傳額度、`API_TIMEOUT_MS` 上限以及重試在無回應中止後等待多長時間,請參閱 [API 無回應](/docs/zh-TW/errors#no-response-from-api)。

226* `API_TIMEOUT_MS` 限制等待回應標頭的時間。在首位元組期限不執行的情況下(例如 Claude apps 閘道工作階段),請將其設定為低於 `300000`(即 5 分鐘),以便更早重試未獲回應的請求。請將其保持在高於您預期的最長標頭等待時間,以及最長的[非串流請求](/docs/zh-TW/errors#streaming-response-ended-before-any-complete-data-was-received)時間:需要更長時間的請求在每次重試時都會再次逾時。

223* `API_FORCE_IDLE_TIMEOUT` 設定為 `0` 會關閉本體閒置逾時,設定為 `1` 會為每個提供者開啟它。監視狗獨立於它執行,因此要讓串流暫停時間超過其閾值,也要提高或停用它們。227* `API_FORCE_IDLE_TIMEOUT` 設定為 `0` 會關閉本體閒置逾時,設定為 `1` 會為每個提供者開啟它。監視狗獨立於它執行,因此要讓串流暫停時間超過其閾值,也要提高或停用它們。

224 228 

225當監視狗中止停滯的串流時,Claude Code 將中止視為中流失敗,您看到的內容取決於回應進行的距離。Claude Code 重試請求或以錯誤結束回合,保留已完成的輸出並顯示 [不完整回應通知](/docs/zh-TW/errors#the-response-above-may-be-incomplete),或正常結束回合。[自動重試](/docs/zh-TW/errors#automatic-retries) 說明每個結果適用的位置。229當監視狗中止停滯的串流時,Claude Code 將中止視為中流失敗,您看到的內容取決於回應進行的距離。Claude Code 重試請求或以錯誤結束回合,保留已完成的輸出並顯示 [不完整回應通知](/docs/zh-TW/errors#the-response-above-may-be-incomplete),或正常結束回合。[自動重試](/docs/zh-TW/errors#automatic-retries) 說明每個結果適用的位置。

Details

627 627 

628Claude Code 拒絕在您使用 [`--restricted`](/docs/zh-TW/cli-reference#cli-flags) 啟動的工作階段中使用 `bypassPermissions`。`--restricted` 需要 Claude Code v2.1.248 或更新版本。628Claude Code 拒絕在您使用 [`--restricted`](/docs/zh-TW/cli-reference#cli-flags) 啟動的工作階段中使用 `bypassPermissions`。`--restricted` 需要 Claude Code v2.1.248 或更新版本。

629 629 

630第一次使用此模式啟動互動式工作階段時,Claude Code 會顯示警告對話框,要求您接受對無權限檢查執行的動作負責:630<span id="bypass-permissions-acceptance" />第一次使用此模式啟動互動式工作階段時,Claude Code 會顯示警告對話框,要求您接受對無權限檢查執行的動作負責:

631 631 

632* **如果您接受**:Claude Code 會在 `~/.claude/settings.json` 中將 `skipDangerousModePermissionPrompt` 設定為 `true`,因此後續工作階段會跳過對話框。若要再次看到對話框,請從該檔案中移除該鍵或將其設定為 `false`。[`skipDangerousModePermissionPrompt` 參考](/docs/zh-TW/settings-reference#skipdangerousmodepermissionprompt)列出了您或您的組織可以設定它的其他設定檔。632* **如果您接受**:Claude Code 會在 `~/.claude/settings.json` 中將 `skipDangerousModePermissionPrompt` 設定為 `true`,因此後續工作階段會跳過對話框。若要再次看到對話框,請從該檔案中移除該鍵或將其設定為 `false`。[`skipDangerousModePermissionPrompt` 參考](/docs/zh-TW/settings-reference#skipdangerousmodepermissionprompt)列出了您或您的組織可以設定它的其他設定檔。

633* **如果您拒絕**:Claude Code 會結束。633* **如果您拒絕**:Claude Code 會結束。


635在[非互動模式](/docs/zh-TW/headless)中不會顯示對話框。當您的接受記錄在使用者設定或受管設定中時,[背景工作階段](/docs/zh-TW/agent-view)會遵循該接受:635在[非互動模式](/docs/zh-TW/headless)中不會顯示對話框。當您的接受記錄在使用者設定或受管設定中時,[背景工作階段](/docs/zh-TW/agent-view)會遵循該接受:

636 636 

637* 若未記錄任何接受,`claude --bg --permission-mode bypassPermissions` 會被拒絕,直到您在互動式工作階段中接受對話框。637* 若未記錄任何接受,`claude --bg --permission-mode bypassPermissions` 會被拒絕,直到您在互動式工作階段中接受對話框。

638* 若 `skipDangerousModePermissionPrompt` 僅在 `.claude/settings.local.json` 中設定,背景工作階段啟動時會忽略略過請求,並固定顯示通知 `Bypass permissions was requested at launch and ignored · if that was you, ~/.claude/settings.json needs "skipDangerousModePermissionPrompt": true`。若要讓略過請求生效,請將該鍵新增至 `~/.claude/settings.json`,然後啟動新的背景工作階段。638* 若 `skipDangerousModePermissionPrompt` 僅在 `.claude/settings.local.json` 中設定,背景工作階段啟動時會忽略略過請求,並固定顯示通知 `Bypass permissions was requested at launch and ignored · if that was you, ~/.claude/settings.json needs "skipDangerousModePermissionPrompt": true`。請將該鍵新增至 `~/.claude/settings.json`,然後啟動新的背景工作階段。顯示該通知的工作階段仍會執行:

639 * 若忽略的是 `--allow-dangerously-skip-permissions`,`bypassPermissions` 會被排除在其 `Shift+Tab` 循環之外。

640 * 若忽略的是 `--permission-mode bypassPermissions` 或 `--dangerously-skip-permissions`,工作階段會改為以手動模式啟動。

639 641 

640在 Linux 和 macOS 上,當以 root 或 `sudo` 身份執行時,Claude Code 拒絕以此模式啟動:642在 Linux 和 macOS 上,當以 root 或 `sudo` 身份執行時,Claude Code 拒絕以 `bypassPermissions` 模式啟動:

641 643 

642```text theme={null}644```text theme={null}

643--dangerously-skip-permissions cannot be used with root/sudo privileges for security reasons645--dangerously-skip-permissions cannot be used with root/sudo privileges for security reasons


692 * 在未使用 `--restricted` 啟動的工作階段中,專案[自動記憶](/docs/zh-TW/memory#storage-location)目錄(例如 `~/.claude/projects/<project>/memory/`)中的 markdown 檔案694 * 在未使用 `--restricted` 啟動的工作階段中,專案[自動記憶](/docs/zh-TW/memory#storage-location)目錄(例如 `~/.claude/projects/<project>/memory/`)中的 markdown 檔案

693 * 在未使用 `--restricted` 啟動的工作階段中,[subagent 記憶](/docs/zh-TW/sub-agents#enable-persistent-memory)目錄(例如 `.claude/agent-memory/`)中的 markdown 檔案695 * 在未使用 `--restricted` 啟動的工作階段中,[subagent 記憶](/docs/zh-TW/sub-agents#enable-persistent-memory)目錄(例如 `.claude/agent-memory/`)中的 markdown 檔案

694* 您使用 [`--plugin-dir`](/docs/zh-TW/plugins/mods/create#change-a-mod-with-claude) 載入的目錄,因為當檔案變更時 Claude Code 會從中重新載入並執行 mod 的程式碼696* 您使用 [`--plugin-dir`](/docs/zh-TW/plugins/mods/create#change-a-mod-with-claude) 載入的目錄,因為當檔案變更時 Claude Code 會從中重新載入並執行 mod 的程式碼

697* `~/.claude/dev-mods/`,或 [`CLAUDE_CONFIG_DIR`](/docs/zh-TW/env-vars) 所指向目錄中的 `dev-mods/`,Claude 會在此儲存[它為您撰寫的 mod](/docs/zh-TW/plugins/mods/create#ask-claude-for-a-mod)

695 698 

696受保護的檔案:699受保護的檔案:

697 700 

permissions.md +20 −2

Details

595 MCP595 MCP

596</h3>596</h3>

597 597 

598MCP 規則使用在 Claude Code 中設定的伺服器名稱,選擇性地後跟來自該伺服器的工具名稱。598若要符合來自某個 MCP 伺服器的每個工具,請編寫 `mcp__<server>__*`。若要符合單一工具,請編寫其完整名稱 `mcp__<server>__<tool>`。

599 599 

600* `mcp__puppeteer` 符合由 `puppeteer` 伺服器提供的任何工具600* `mcp__puppeteer` 符合由 `puppeteer` 伺服器提供的任何工具

601* `mcp__puppeteer__*` 使用萬用字元語法,也符合來自 `puppeteer` 伺服器的所有工具601* `mcp__puppeteer__*` 使用萬用字元語法,也符合來自 `puppeteer` 伺服器的所有工具

602* `mcp__puppeteer__puppeteer_navigate` 符合由 `puppeteer` 伺服器提供的 `puppeteer_navigate` 工具602* `mcp__puppeteer__puppeteer_navigate` 符合由 `puppeteer` 伺服器提供的 `puppeteer_navigate` 工具

603 603 

604對於 `<server>`,請依照伺服器名稱在該伺服器工具名稱中出現的方式編寫。以下範例顯示名稱含有特殊字元、來自外掛的伺服器,以及名稱包含 `__` 或以 `_` 結尾時應編寫的規則:

605 

606* **含有 `.` 或空格等字元的名稱**:這些字元會變成 `_`,所以對於您設定為 `my.server` 的伺服器,請編寫 `mcp__my_server__*`

607* **由外掛提供的伺服器**:`<server>` 採用[外掛範圍形式](/docs/zh-TW/mcp#plugin-provided-mcp-servers),所以對於名為 `my-plugin` 的外掛中的 `database-tools` 伺服器,請編寫 `mcp__plugin_my-plugin_database-tools__*`

608* **包含 `__` 或以 `_` 結尾的 `<server>`**:使用完整名稱編寫萬用字元形式 `mcp__<server>__*`。對於名為 `reports__v2` 的伺服器,請編寫 `mcp__reports__v2__*`。裸 `mcp__reports__v2` 和較短的 `mcp__reports` 作為允許規則時不會符合其工具,因為 Claude Code 會將兩者都讀取為名為 `reports` 的伺服器的規則

609 

604如果您的組織已將 [claude.ai 連接器](/docs/zh-TW/mcp#organization-controls-on-connector-tools)工具設定為 `ask`,且該設定在您的工作階段中到達 Claude Code,該工具的允許規則不會生效:Claude Code 會在每次呼叫時提示,即使在 `auto` 和 `bypassPermissions` 模式中也是如此。在 `dontAsk` 模式中(永不提示),Claude Code 會改為拒絕呼叫。Claude Code 自行擷取的連接器工具顯示為 `mcp__claude_ai_<server>__<tool>`。610如果您的組織已將 [claude.ai 連接器](/docs/zh-TW/mcp#organization-controls-on-connector-tools)工具設定為 `ask`,且該設定在您的工作階段中到達 Claude Code,該工具的允許規則不會生效:Claude Code 會在每次呼叫時提示,即使在 `auto` 和 `bypassPermissions` 模式中也是如此。在 `dontAsk` 模式中(永不提示),Claude Code 會改為拒絕呼叫。Claude Code 自行擷取的連接器工具顯示為 `mcp__claude_ai_<server>__<tool>`。

605 611 

606在 Claude Desktop 應用程式中的 [Cowork](https://claude.com/docs/cowork/overview) 工作階段中,Claude 透過 Cowork 的 `mcp__workspace__bash` 工具而不是內建 `Bash` 工具執行 shell 命令,Cowork 同樣為網路擷取提供 `mcp__workspace__web_fetch`。Claude Code 也將命名整個 `Bash` 或 `WebFetch` 工具的 deny 規則應用於這些 Cowork 工具,所以受管理的 `Bash` deny 規則會阻止 Claude 在 Cowork 中執行 shell 命令。當 Claude Code 阻止此類呼叫時,訊息會命名 Cowork 工具:`Permission to use mcp__workspace__bash has been denied.` 允許規則不會進行:Claude Code 永遠不會將 `Bash` 允許規則應用於 `mcp__workspace__bash`。612在 Claude Desktop 應用程式中的 [Cowork](https://claude.com/docs/cowork/overview) 工作階段中,Claude 透過 Cowork 的 `mcp__workspace__bash` 工具而不是內建 `Bash` 工具執行 shell 命令,Cowork 同樣為網路擷取提供 `mcp__workspace__web_fetch`。Claude Code 也將命名整個 `Bash` 或 `WebFetch` 工具的 deny 規則應用於這些 Cowork 工具,所以受管理的 `Bash` deny 規則會阻止 Claude 在 Cowork 中執行 shell 命令。當 Claude Code 阻止此類呼叫時,訊息會命名 Cowork 工具:`Permission to use mcp__workspace__bash has been denied.` 允許規則不會進行:Claude Code 永遠不會將 `Bash` 允許規則應用於 `mcp__workspace__bash`。


649 655 

650[Claude Code hooks](/docs/zh-TW/hooks-guide) 讓您可以註冊自訂 shell 命令,以在執行時評估權限。當 Claude Code 進行工具呼叫時,PreToolUse hooks 在權限提示之前執行,適用於除了 [`EndConversation`](/docs/zh-TW/tools-reference#endconversation-tool-behavior) 以外的每個工具。hook 輸出可以拒絕工具呼叫、強制提示或跳過提示以讓呼叫繼續進行。656[Claude Code hooks](/docs/zh-TW/hooks-guide) 讓您可以註冊自訂 shell 命令,以在執行時評估權限。當 Claude Code 進行工具呼叫時,PreToolUse hooks 在權限提示之前執行,適用於除了 [`EndConversation`](/docs/zh-TW/tools-reference#endconversation-tool-behavior) 以外的每個工具。hook 輸出可以拒絕工具呼叫、強制提示或跳過提示以讓呼叫繼續進行。

651 657 

658<h3 id="precedence-among-rules-hooks-and-mods">

659 規則、hook 與 mod 之間的優先順序

660</h3>

661 

652PreToolUse hook 決定不會繞過權限規則。Claude Code 會評估 deny 和 ask 規則,無論 PreToolUse hook 返回什麼:符合的 deny 規則會阻止呼叫,符合的 ask 規則即使在 hook 返回 `"allow"` 或 `"ask"` 時仍會提示。這保留了 [Manage permissions](#manage-permissions) 中描述的 deny 優先順序,包括在受管理設定中設定的 deny 規則。662PreToolUse hook 決定不會繞過權限規則。Claude Code 會評估 deny 和 ask 規則,無論 PreToolUse hook 返回什麼:符合的 deny 規則會阻止呼叫,符合的 ask 規則即使在 hook 返回 `"allow"` 或 `"ask"` 時仍會提示。這保留了 [Manage permissions](#manage-permissions) 中描述的 deny 優先順序,包括在受管理設定中設定的 deny 規則。

653 663 

654該優先順序涵蓋設定檔中的 hooks 和外掛程式 `hooks/hooks.json` 中的 hooks。您安裝的 [mod](/docs/zh-TW/plugins/mods/overview) 會在規則和 `PreToolUse` hooks 決定後回答 `tool.check`,其答案可以取代它們的答案:664該優先順序涵蓋設定檔中的 hook 和外掛 `hooks/hooks.json` 中的 hook。您安裝的處理 `tool.check` 的 [mod](/docs/zh-TW/plugins/mods/overview) 會在規則和 `PreToolUse` hook 做出決定之後才回答。在 [plan mode](#hook-approvals-in-plan-mode) 之外,或對於唯讀呼叫,其答案可以取代它們的答案:

655 665 

656* **Ask 規則**:mod 可以批准 ask 規則會提示的呼叫666* **Ask 規則**:mod 可以批准 ask 規則會提示的呼叫

657* **來自 `PreToolUse` hook 的阻止**:mod 可以批准呼叫,除非 hook 在受管理設定中667* **來自 `PreToolUse` hook 的阻止**:mod 可以批准呼叫,除非 hook 在受管理設定中


664 674 

665阻止 hook 也優先於 allow 規則。以代碼 2 退出的 hook 會在評估權限規則之前停止工具呼叫,因此即使 allow 規則會允許呼叫,該阻止也會適用。若要執行所有 Bash 命令而無需提示,除了您想要阻止的少數幾個,請將 `"Bash"` 新增到您的 allow 清單,並註冊一個 PreToolUse hook 來拒絕那些特定命令。請參閱 [Block edits to protected files](/docs/zh-TW/hooks-guide#block-edits-to-protected-files) 以取得您可以調整的 hook 指令碼。675阻止 hook 也優先於 allow 規則。以代碼 2 退出的 hook 會在評估權限規則之前停止工具呼叫,因此即使 allow 規則會允許呼叫,該阻止也會適用。若要執行所有 Bash 命令而無需提示,除了您想要阻止的少數幾個,請將 `"Bash"` 新增到您的 allow 清單,並註冊一個 PreToolUse hook 來拒絕那些特定命令。請參閱 [Block edits to protected files](/docs/zh-TW/hooks-guide#block-edits-to-protected-files) 以取得您可以調整的 hook 指令碼。

666 676 

677<h3 id="hook-approvals-in-plan-mode">

678 plan mode 中的 hook 核准

679</h3>

680 

681在 [plan mode](/docs/zh-TW/permission-modes#analyze-before-you-edit-with-plan-mode) 中,除了 `ExitPlanMode` 之外,您的 `PreToolUse` hook 的 `"allow"` 對檔案編輯或其他非唯讀呼叫沒有作用。您會得到與沒有 hook 時該呼叫相同的提示、阻止或核准,而 Claude Code 仍會套用 hook 返回的任何 `updatedInput`。如果 hook 以 `"allow"` 和 `updatedInput` 回應 [`ExitPlanMode`](/docs/zh-TW/hooks#allow-with-updatedinput),該工具仍會在沒有提示的情況下執行。

682 

683在 plan mode 中,處理 `tool.check` 的 mod 也無法核准檔案編輯或其他非唯讀呼叫,但仍可以阻止此類呼叫。若要解除對 hook 和 mod 核准的此限制,請[核准計劃](/docs/zh-TW/permission-modes#review-and-approve-a-plan)或切換到其他權限模式。

684 

667<h2 id="working-directories">685<h2 id="working-directories">

668 工作目錄686 工作目錄

669</h2>687</h2>

Details

30 用你自己的話要求 mod,例如 `make a mod that shows the current git branch above the prompt`。Claude 在工作階段的 mod 資料夾中的自己的目錄中寫 mod,該資料夾是 `~/.claude/dev-mods/` 後跟工作階段的 ID。mod 的完整路徑看起來像 `~/.claude/dev-mods/3f2a9c1e-5b7d-4e8a-9c21-6d0f4b8a7e13/git-branch/`。30 用你自己的話要求 mod,例如 `make a mod that shows the current git branch above the prompt`。Claude 在工作階段的 mod 資料夾中的自己的目錄中寫 mod,該資料夾是 `~/.claude/dev-mods/` 後跟工作階段的 ID。mod 的完整路徑看起來像 `~/.claude/dev-mods/3f2a9c1e-5b7d-4e8a-9c21-6d0f4b8a7e13/git-branch/`。

31 31 

32 <Note>32 <Note>

33 在 `default` 和 `acceptEdits` [permission modes](/docs/zh-TW/permission-modes#protected-paths) 中,Claude Code 在 Claude 建立 mod 的每個檔案之前詢問,因為 `~/.claude` 是受保護的路徑。在每個檔案出現時批准它。33 在 `default` 和 `acceptEdits` [權限模式](/docs/zh-TW/permission-modes)中,Claude Code 會在 Claude 建立 mod 的每個檔案之前詢問,因為 mod 資料夾是[受保護的路徑](/docs/zh-TW/permission-modes#protected-paths)。請在每個檔案出現時逐一批准。

34 </Note>34 </Note>

35 </Step>35 </Step>

36 36 

Details

216})216})

217```217```

218 218 

219在 `main` 上,即使有規則允許 `git push`,hook 仍會傳回 `deny`。在其他分支上以及對於其他命令,該呼叫會得到與沒有 mod 時相同的決定。219此 hook 會在 `main` 上拒絕 `git push`,並讓其他所有呼叫通過:

220 

221* **在 `main` 上**:即使有規則允許 `git push`,hook 仍會傳回 `deny`

222* **在其他分支上,以及對於其他命令**:該呼叫會得到與沒有 mod 時相同的決定

220 223 

221此 hook 比對的是命令的文字,因此請將其視為給 Claude 的提醒。若要對所有人封鎖推送至 `main`,請在您的 Git 主機上保護該分支。224此 hook 比對的是命令的文字,因此請將其視為給 Claude 的提醒。若要對所有人封鎖推送至 `main`,請在您的 Git 主機上保護該分支。

222 225 

223hook 可以傳回 `allow`、`ask` 或 `deny`,因此它也可以核准受管設定以外的 `PreToolUse` hook 所封鎖的呼叫。[使用 hook 擴充權限](/docs/zh-TW/permissions#extend-permissions-with-hooks)列出了哪些決定的優先順序高於 mod。226hook 可以傳回 `allow`、`ask` 或 `deny`,因此它也可以核准受管設定以外的 `PreToolUse` hook 所封鎖的呼叫。在 [plan mode](/docs/zh-TW/permissions#hook-approvals-in-plan-mode) 中,對於非唯讀的呼叫(例如檔案編輯),您的 hook 可以收緊 `next(e)` 傳回的決定,但無法放寬它。[使用 hook 擴充權限](/docs/zh-TW/permissions#extend-permissions-with-hooks)列出了哪些決定的優先順序高於 mod。

224 227 

225<h3 id="rewrite-or-add-to-a-prompt">228<h3 id="rewrite-or-add-to-a-prompt">

226 改寫或補充提示詞229 改寫或補充提示詞


337* **來自受管設定的 `PreToolUse` hook**:在第一個 mod 的 `tool.call` hook 之前執行,其中任一個所做的封鎖都是最終決定,因此沒有 mod 看到呼叫。340* **來自受管設定的 `PreToolUse` hook**:在第一個 mod 的 `tool.call` hook 之前執行,其中任一個所做的封鎖都是最終決定,因此沒有 mod 看到呼叫。

338* **來自每個其他設定檔和外掛程式 `hooks/hooks.json` 的 `PreToolUse` hook**:在最後一個 mod 呼叫 `next` 後執行,作為 Claude Code 自己行為的一部分。回答 `tool.call` 而不呼叫 `next` 的 mod 會阻止它們執行,呼叫 `next` 的 mod 會在它傳回的結果中看到它們的決定。341* **來自每個其他設定檔和外掛程式 `hooks/hooks.json` 的 `PreToolUse` hook**:在最後一個 mod 呼叫 `next` 後執行,作為 Claude Code 自己行為的一部分。回答 `tool.call` 而不呼叫 `next` 的 mod 會阻止它們執行,呼叫 `next` 的 mod 會在它傳回的結果中看到它們的決定。

339 342 

340[`tool.check`](#approve-or-refuse-a-tool-call-before-the-user-is-asked) 在這些 hook 和權限規則決定後觸發,因此其上的 hook 可以批准第二組中的 hook 所阻止的呼叫。343[`tool.check`](#approve-or-refuse-a-tool-call-before-the-user-is-asked) hook 可以批准受管設定以外的 `PreToolUse` hook 所阻止的呼叫,因為 `tool.check` 會在這些 hook 和權限規則做出決定後才觸發。在 plan mode 中,若此類呼叫為唯讀,`tool.check` hook 可以批准它,但無法批准檔案編輯或其他非唯讀的呼叫。

341 344 

342<h3 id="handle-a-hook-that-fails">345<h3 id="handle-a-hook-that-fails">

343 處理失敗的 hook346 處理失敗的 hook

Details

205 205 

206為了產生摘要,Claude Code 會傳送一個單獨的請求,其中包含與您的對話相同的系統提示詞、工具和歷史記錄,加上作為最終使用者訊息附加的摘要指令。當快取溫暖時,該請求會從快取讀取您的前綴,因此工作階段中途的 `/compact` 成本只是上下文大小所暗示的一小部分,並且大部分時間花在產生摘要上。206為了產生摘要,Claude Code 會傳送一個單獨的請求,其中包含與您的對話相同的系統提示詞、工具和歷史記錄,加上作為最終使用者訊息附加的摘要指令。當快取溫暖時,該請求會從快取讀取您的前綴,因此工作階段中途的 `/compact` 成本只是上下文大小所暗示的一小部分,並且大部分時間花在產生摘要上。

207 207 

208在超過[快取生命週期](#cache-lifetime)的中斷後,沒有快取可讀取,因此摘要請求會將完整歷史記錄重新處理為未快取的輸入。這就是為什麼當您[繼續舊工作階段](/docs/zh-TW/sessions#resume-from-a-summary)時 `/compact` 成本最高。在溫暖和冷的情況下,壓縮後的回合只會為更短的摘要重建對話快取,因此該回合不是較慢的部分。208在超過[快取生命週期](#cache-lifetime)的中斷後,沒有快取可讀取,因此摘要請求會將完整歷史記錄重新處理為未快取的輸入。這就是為什麼當您[繼續舊工作階段](/docs/zh-TW/sessions#resume-a-session)時 `/compact` 成本最高。在溫暖和冷的情況下,壓縮後的回合只會為更短的摘要重建對話快取,因此該回合不是較慢的部分。

209 209 

210<Tip>210<Tip>

211 當您捨棄的上下文是您不再需要的內容時,壓縮對您有利。為了選擇其開銷何時發生,請在工作的自然中斷處(例如任務之間)執行 `/compact`,而不是等待自動壓縮在任務中途觸發。如果您走上了想要完全放棄的路徑,請改為使用 [`/rewind`](#rewinding-the-conversation) 回到較早的回合。倒轉會截斷回到已快取的前綴,而不是像壓縮那樣建立新的前綴。211 當您捨棄的上下文是您不再需要的內容時,壓縮對您有利。為了選擇其開銷何時發生,請在工作的自然中斷處(例如任務之間)執行 `/compact`,而不是等待自動壓縮在任務中途觸發。如果您走上了想要完全放棄的路徑,請改為使用 [`/rewind`](#rewinding-the-conversation) 回到較早的回合。倒轉會截斷回到已快取的前綴,而不是像壓縮那樣建立新的前綴。


310 310 

311快取的前綴在一段時間的不活動後會過期。每個命中快取的請求都會重置計時器,因此只要您持續工作,快取就會保持溫暖。經過足夠長的間隔後,下一個請求會重新計算完整輸入並重新建立快取,這就是為什麼在離開後回來的第一個轉向可能會明顯變慢。311快取的前綴在一段時間的不活動後會過期。每個命中快取的請求都會重置計時器,因此只要您持續工作,快取就會保持溫暖。經過足夠長的間隔後,下一個請求會重新計算完整輸入並重新建立快取,這就是為什麼在離開後回來的第一個轉向可能會明顯變慢。

312 312 

313在 Pro 或 Max 方案上,當您在長時間中斷後恢復大型工作階段時,Claude Code [提供從摘要恢復](/docs/zh-TW/sessions#resume-from-a-summary),以便後續請求不會攜帶完整歷史記錄。

314 

315生存時間 (TTL) 控制快取存活的間隔長度。API 提供兩種:五分鐘 TTL 和[一小時 TTL](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#1-hour-cache-duration),後者可在較長的中斷期間保持快取溫暖,但[以更高的費率計費快取寫入](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#pricing)。較長的 TTL 在您讓工作階段閒置並返回時很有幫助,因為您可以跳過過期前綴所需的重新處理。對於從不閒置超過五分鐘的短工作突發,成本更高,因為更高的寫入費率適用,而較長的快取生命週期未被使用。313生存時間 (TTL) 控制快取存活的間隔長度。API 提供兩種:五分鐘 TTL 和[一小時 TTL](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#1-hour-cache-duration),後者可在較長的中斷期間保持快取溫暖,但[以更高的費率計費快取寫入](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#pricing)。較長的 TTL 在您讓工作階段閒置並返回時很有幫助,因為您可以跳過過期前綴所需的重新處理。對於從不閒置超過五分鐘的短工作突發,成本更高,因為更高的寫入費率適用,而較長的快取生命週期未被使用。

316 314 

317<h3 id="which-ttl-each-request-gets">315<h3 id="which-ttl-each-request-gets">

sandboxing.md +14 −0

Details

1080* **`Command line arguments`**:如果您使用 [`--settings`](/docs/zh-TW/settings#change-a-setting-for-one-session) 啟動 Claude Code,請檢查您傳入的檔案或 JSON 是否設定了上述其中一個設定鍵。如果是,請在那裡變更該值,或在不使用這些設定鍵的情況下重新啟動 Claude Code。1080* **`Command line arguments`**:如果您使用 [`--settings`](/docs/zh-TW/settings#change-a-setting-for-one-session) 啟動 Claude Code,請檢查您傳入的檔案或 JSON 是否設定了上述其中一個設定鍵。如果是,請在那裡變更該值,或在不使用這些設定鍵的情況下重新啟動 Claude Code。

1081* **`Enterprise managed settings`**:已載入您組織的受管設定。如果它們設定了上述其中一個設定鍵,您就無法從 `/sandbox` 或從您所控制的任何設定檔變更該設定鍵,因此請詢問您的管理員。1081* **`Enterprise managed settings`**:已載入您組織的受管設定。如果它們設定了上述其中一個設定鍵,您就無法從 `/sandbox` 或從您所控制的任何設定檔變更該設定鍵,因此請詢問您的管理員。

1082 1082 

1083<h3 id="/sandbox-prints-sandbox-settings-not-changed">

1084 `/sandbox` 印出 `Sandbox settings not changed`

1085</h3>

1086 

1087此行表示 `/sandbox` 無法將您在其面板中所做的選擇儲存到專案的 `.claude/settings.local.json`:

1088 

1089```text theme={null}

1090✗ Sandbox settings not changed: /home/you/project/.claude/settings.local.json couldn't be updated (EACCES). Start Claude Code in a project folder you can write to.

1091```

1092 

1093如果括號中的原因是 `EACCES`、`EPERM` 或 `EROFS`,請在您可以寫入的專案資料夾中啟動 Claude Code,然後在該工作階段中再次執行 `/sandbox`。

1094 

1095如果原因以 `Invalid JSON syntax in settings file` 開頭,請修正專案 `.claude/settings.local.json` 中的 JSON,然後再次執行 `/sandbox`。

1096 

1083<h2 id="limitations">1097<h2 id="limitations">

1084 限制1098 限制

1085</h2>1099</h2>

sessions.md +0 −14

Details

102* 該次執行不是透過[頻道](/docs/zh-TW/channels)啟動的102* 該次執行不是透過[頻道](/docs/zh-TW/channels)啟動的

103* 沒有任何[拒絕規則](/docs/zh-TW/permissions#manage-permissions)移除 `ExitPlanMode` 工具103* 沒有任何[拒絕規則](/docs/zh-TW/permissions#manage-permissions)移除 `ExitPlanMode` 工具

104 104 

105<h3 id="resume-from-a-summary">

106 從摘要恢復

107</h3>

108 

109在 Pro 或 Max 方案中,當您恢復已閒置超過約一小時且超過 100,000 個 token 的工作階段時,Claude Code 會復原對話,然後在您傳送第一則訊息之前開啟一個對話框。此時工作階段的[提示快取](/docs/zh-TW/prompt-caching#cache-lifetime)已過期,因此無論您選擇對話框中的哪個選項,下一個請求都會將完整記錄處理一次。

110 

111對話框提供三種繼續工作階段的方式:

112 

113* **從摘要恢復**:立即執行 [`/compact`](/docs/zh-TW/context-window#what-survives-compaction)。後續請求會攜帶摘要,而不是完整記錄。

114* **按原樣恢復完整工作階段**:以未變更的狀態載入對話。

115* **不要再詢問我**:恢復完整工作階段,並在之後所有的恢復中不再顯示此對話框。

116 

117按原樣恢復會保留對話的每個細節,但每個請求的成本會隨對話大小而增加。從摘要恢復在之後的每個請求中成本較低,因為它攜帶的是摘要而不是完整記錄,但摘要遺漏的任何內容都不再存在於 Claude 的上下文中。請參閱[為什麼長時間工作階段中的使用量會攀升](/docs/zh-TW/costs#why-usage-climbs-in-a-long-session),了解每個請求成本的來源。

118 

119<h3 id="where-the-session-picker-looks">105<h3 id="where-the-session-picker-looks">

120 工作階段選擇器的查找範圍106 工作階段選擇器的查找範圍

121</h3>107</h3>

sub-agents.md +17 −5

Details

316| `name` | 是 | 最多 256 個字元的唯一識別碼,例如 `code-reviewer` 或 `reviewer-v2`。[Hook](/docs/zh-TW/hooks#subagentstart) 會以 `agent_type` 接收此值。檔案名稱不必相符。名稱不能包含 `:`,它保留給[外掛範圍識別碼](/docs/zh-TW/plugins/overview)使用,例如 `my-plugin:reviewer` |316| `name` | 是 | 最多 256 個字元的唯一識別碼,例如 `code-reviewer` 或 `reviewer-v2`。[Hook](/docs/zh-TW/hooks#subagentstart) 會以 `agent_type` 接收此值。檔案名稱不必相符。名稱不能包含 `:`,它保留給[外掛範圍識別碼](/docs/zh-TW/plugins/overview)使用,例如 `my-plugin:reviewer` |

317| `description` | 是 | Claude 應何時委派給此子代理 |317| `description` | 是 | Claude 應何時委派給此子代理 |

318| `tools` | 否 | 子代理可以使用的[工具](#available-tools),作為逗號分隔的字串,例如 `Read, Grep, Bash` 或 YAML 列表。如果省略,繼承子代理可用的每個工具。如果列表中沒有條目解析為工具,子代理通常[無法啟動](/docs/zh-TW/errors#agent-would-be-spawned-with-zero-tools)並出現錯誤,命名未解析的條目。若要將 Skills 預載入上下文,請使用 `skills` 欄位而不是在此列出 `Skill` |318| `tools` | 否 | 子代理可以使用的[工具](#available-tools),作為逗號分隔的字串,例如 `Read, Grep, Bash` 或 YAML 列表。如果省略,繼承子代理可用的每個工具。如果列表中沒有條目解析為工具,子代理通常[無法啟動](/docs/zh-TW/errors#agent-would-be-spawned-with-zero-tools)並出現錯誤,命名未解析的條目。若要將 Skills 預載入上下文,請使用 `skills` 欄位而不是在此列出 `Skill` |

319| `disallowedTools` | 否 | 要拒絕的工具,從繼承或指定的列表中移除。與 `tools` 相同的格式。具有指定符的條目(例如 `Bash(git push *)`)仍然[移除整個工具](#available-tools) |319| `disallowedTools` | 否 | 要拒絕的工具,會從繼承或指定的清單中移除。格式與 `tools` 相同。具有指定符的條目(例如 `Bash(git push *)`)仍會[移除整個工具](#restrict-which-tools-a-subagent-can-use) |

320| `model` | 否 | 要使用的[模型](#choose-a-model):`sonnet`、`opus`、`haiku`、`fable`、完整模型 ID(例如 `claude-opus-5-5`)或 `inherit`。當您省略它時,Claude Code 會在[子代理模型順序](#choose-a-model)中選擇模型 |320| `model` | 否 | 要使用的[模型](#choose-a-model):`sonnet`、`opus`、`haiku`、`fable`、完整模型 ID(例如 `claude-opus-5-5`)或 `inherit`。當您省略它時,Claude Code 會在[子代理模型順序](#choose-a-model)中選擇模型 |

321| `permissionMode` | 否 | [權限模式](#permission-modes):`default`、`acceptEdits`、`auto`、`dontAsk`、`bypassPermissions`、`plan`,或作為 `default` 別名的 `manual`。對[外掛 subagent](#choose-the-subagent-scope) 會被忽略 |321| `permissionMode` | 否 | [權限模式](#permission-modes):`default`、`acceptEdits`、`auto`、`dontAsk`、`bypassPermissions`、`plan`,或作為 `default` 別名的 `manual`。對[外掛 subagent](#choose-the-subagent-scope) 會被忽略 |

322| `maxTurns` | 否 | 子代理停止前的最大代理轉數。當子代理達到限制時,Claude Code 返回其輸出標記為部分,Claude 可以[恢復它](#resume-subagents)以繼續。部分標記需要 Claude Code v2.1.246 或更新版本 |322| `maxTurns` | 否 | 子代理停止前的最大代理轉數。當子代理達到限制時,Claude Code 返回其輸出標記為部分,Claude 可以[恢復它](#resume-subagents)以繼續。部分標記需要 Claude Code v2.1.246 或更新版本 |


475 475 

476在[沒有 Task 工具的工作階段](/docs/zh-TW/tools-reference#task-tool-availability)中,Claude Code 也不向子代理提供任務工具,即使子代理執行不同的模型。進程內隊友遵循您的工作階段相同方式,而在其自己的[分割窗格](/docs/zh-TW/agent-teams#choose-a-display-mode)中的隊友作為單獨的 Claude Code 程序執行,因此其自己的模型決定。476在[沒有 Task 工具的工作階段](/docs/zh-TW/tools-reference#task-tool-availability)中,Claude Code 也不向子代理提供任務工具,即使子代理執行不同的模型。進程內隊友遵循您的工作階段相同方式,而在其自己的[分割窗格](/docs/zh-TW/agent-teams#choose-a-display-mode)中的隊友作為單獨的 Claude Code 程序執行,因此其自己的模型決定。

477 477 

478若要限制工具,使用 `tools` 欄位作為允許清單或 `disallowedTools` 欄位作為拒絕清單。此範例使用 `tools` 僅允許 Read、Grep、Glob 和 Bash。子代理無法編輯檔案、寫入檔案或使用任何 MCP 工具:478<h4 id="restrict-which-tools-a-subagent-can-use">

479 限制 subagent 可以使用的工具

480</h4>

481 

482若要限制工具,請使用 `tools` 欄位作為允許清單,或使用 `disallowedTools` 欄位作為拒絕清單。如果兩者都設定,會先套用 `disallowedTools`,然後針對剩餘的工具池解析 `tools`。在兩者中都列出的工具會被移除。

483 

484此範例使用 `tools` 僅允許 Read、Grep、Glob 和 Bash。subagent 無法編輯檔案、寫入檔案或使用任何 MCP 工具:

479 485 

480```yaml theme={null}486```yaml theme={null}

481---487---


495---501---

496```502```

497 503 

498如果兩者都設定,`disallowedTools` 首先應用,然後 `tools` 針對剩餘池解析。在兩者中列出的工具被移除。

499 

500當 `tools` 列表中沒有內容解析為工具時,例如因為每個條目拼寫錯誤或命名子代理無法使用的工具,Claude Code 通常拒絕啟動子代理,Agent 工具返回命名未解析條目的錯誤;請參閱[代理將以零個工具生成](/docs/zh-TW/errors#agent-would-be-spawned-with-zero-tools)以了解訊息以及如何修復每個條目。在 v2.1.208 之前,該子代理以沒有工具啟動,可能返回空或令人困惑的結果。504當 `tools` 列表中沒有內容解析為工具時,例如因為每個條目拼寫錯誤或命名子代理無法使用的工具,Claude Code 通常拒絕啟動子代理,Agent 工具返回命名未解析條目的錯誤;請參閱[代理將以零個工具生成](/docs/zh-TW/errors#agent-would-be-spawned-with-zero-tools)以了解訊息以及如何修復每個條目。在 v2.1.208 之前,該子代理以沒有工具啟動,可能返回空或令人困惑的結果。

501 505 

502兩個欄位除了確切工具名稱外還接受 MCP 伺服器級別的模式:`mcp__<server>` 或 `mcp__<server>__*` 授予或移除來自命名伺服器的每個工具。在 `disallowedTools` 中,`mcp__*` 也移除來自任何伺服器的每個 MCP 工具。此範例移除來自 `github` MCP 伺服器的每個工具,同時保持來自其他伺服器和其池中內建工具的工具:506`tools` 和 `disallowedTools` 欄位也接受代表整個 MCP 伺服器的條目:

507 

508| 目標 | 欄位 | 範例條目 |

509| :- | :- | :- |

510| 讓 subagent 取得某個伺服器的每個工具 | `tools` | `mcp__github__*` |

511| 不提供某個伺服器的工具 | `disallowedTools` | `mcp__github` 或 `mcp__github__*` |

512| 不提供任何伺服器的每個 MCP 工具 | `disallowedTools` | `mcp__*` |

513 

514此範例會移除 `github` MCP 伺服器的每個工具,同時在 subagent 的工具池中保留其他伺服器的工具和內建工具:

503 515 

504```yaml theme={null}516```yaml theme={null}

505---517---