10 10
11## 權限如何被評估11## 權限如何被評估
12 12
13> [!NOTE]
14>
15> 如果您載入包含 [mod](https://code.claude.com/docs/zh-TW/plugins/mods/overview.md) 的外掛,請參閱 [mod 的決定在規則與 hook 之間的位置](https://code.claude.com/docs/zh-TW/permissions.md#precedence-among-rules-hooks-and-mods)。
16
13當 Claude 請求一個工具時,SDK 按照以下順序檢查權限:17當 Claude 請求一個工具時,SDK 按照以下順序檢查權限:
14 18
15**1. Hooks**19**1. Hooks**
20 24
21**2. 拒絕規則**25**2. 拒絕規則**
22 26
23檢查 `deny` 規則(來自 `disallowed_tools` 和 [settings.json](https://code.claude.com/docs/zh-TW/settings-reference.md#permission-settings))。如果拒絕規則匹配,工具會被阻止,即使在 `bypassPermissions` 模式下也是如此。裸名稱拒絕規則(如 `Bash`)會在此評估開始前將工具從 Claude 的上下文中移除,因此只有作用域規則(如 `Bash(rm *)`)會在此步驟中被檢查。27如果來自 `disallowed_tools` 或 [settings.json](https://code.claude.com/docs/zh-TW/settings-reference.md#permission-settings) 的拒絕規則匹配,呼叫會被拒絕,且不會呼叫 [`canUseTool`](https://code.claude.com/docs/zh-TW/agent-sdk/user-input),即使在 [`bypassPermissions`](#bypass-permissions-mode-bypasspermissions) 模式下,以及即使 hook 返回了 `allow` 也是如此。
28
29在 TypeScript SDK 中,如果您將[自訂工具](https://code.claude.com/docs/zh-TW/agent-sdk/custom-tools.md#require-approval-for-specific-tools)的 `permission_policy` 設定為 [`always_deny`](https://code.claude.com/docs/zh-TW/agent-sdk/typescript#mcpservertoolpolicy),對該工具的呼叫會在此步驟被拒絕。
24 30
25**3. 詢問規則**31**3. 詢問規則**
26 32
30 36
31您的組織設定為 `ask` 的 [claude.ai connector](https://code.claude.com/docs/zh-TW/mcp.md#organization-controls-on-connector-tools) 工具也會在此步驟離開流程。每個呼叫都會傳遞到回呼,即使在 `bypassPermissions` 模式下,即使當 allow 規則匹配時也是如此。回呼會收到原因 `Your organization requires approval for this tool`。在 `dontAsk` 模式下,呼叫會被拒絕,因為該模式永遠不會提示。37您的組織設定為 `ask` 的 [claude.ai connector](https://code.claude.com/docs/zh-TW/mcp.md#organization-controls-on-connector-tools) 工具也會在此步驟離開流程。每個呼叫都會傳遞到回呼,即使在 `bypassPermissions` 模式下,即使當 allow 規則匹配時也是如此。回呼會收到原因 `Your organization requires approval for this tool`。在 `dontAsk` 模式下,呼叫會被拒絕,因為該模式永遠不會提示。
32 38
39在 TypeScript SDK 中,如果您將自訂工具的 `permission_policy` 設定為 [`always_ask`](https://code.claude.com/docs/zh-TW/agent-sdk/custom-tools#require-approval-for-specific-tools),任何 allow 規則都不會核准其呼叫,即使是 `allowedTools` 條目也不會。在 `dontAsk` 模式下,Claude Code 會拒絕這些呼叫;而在 `auto`、`plan` 或 `bypassPermissions` 模式下,它[可以在您的回呼執行之前核准它們](https://code.claude.com/docs/zh-TW/agent-sdk/typescript.md#permission-modes-that-can-approve-an-always_ask-call)。
40
33**4. 權限模式**41**4. 權限模式**
34 42
35應用活躍的 [權限模式](#permission-modes):43應用活躍的 [權限模式](#permission-modes):
36 44
37* 在 `bypassPermissions` 模式下,Claude Code 核准到達此步驟的所有內容,但經識別的[關鍵路徑移除](https://code.claude.com/docs/zh-TW/permission-modes.md#critical-paths)除外,這些會改為傳遞下去。45* 在 `bypassPermissions` 模式下,Claude Code 核准到達此步驟的所有內容,但經識別的[關鍵路徑移除](https://code.claude.com/docs/zh-TW/permission-modes.md#critical-paths)以及被標記為 [`Dangerous rm operation not ruled out`](https://code.claude.com/docs/zh-TW/permission-modes#dangerous-rm-operation-not-ruled-out) 的 Bash 命令除外,這些會改為傳遞下去。
38* 在 `acceptEdits` 模式下,Claude Code 核准 [接受編輯模式](#accept-edits-mode-acceptedits) 下列出的檔案操作。46* 在 `acceptEdits` 模式下,Claude Code 核准 [接受編輯模式](#accept-edits-mode-acceptedits) 下列出的檔案操作。
39* 在 `plan` 模式下,Claude Code 將檔案編輯和 shell 寫入工具發送到您的 `canUseTool` 回呼,無論 allow 規則如何,因此在規劃時寫入操作無法自動核准。47* 在 `plan` 模式下,Claude Code 將檔案編輯工具發送到您的 `canUseTool` 回呼,無論 allow 規則如何。
40* 在其他模式下,請求會傳遞下去。48* 在其他模式下,請求會傳遞下去。
41 49
42**5. 允許規則**50**5. 允許規則**
43 51
44檢查 `allow` 規則(來自 `allowed_tools` 和 settings.json)。如果規則匹配,工具會被核准。工具自行核准的呼叫也會在此步驟解決,無需規則:例如在您的工作目錄內的檔案讀取或 [唯讀 Bash 命令](https://code.claude.com/docs/zh-TW/permissions.md#read-only-commands)。52檢查 `allow` 規則(來自 `allowed_tools` 和 settings.json)。如果規則匹配,工具會被核准。工具自行核准的呼叫也會在此步驟解決,無需規則:例如在您的工作目錄內的檔案讀取或 [唯讀 Bash 命令](https://code.claude.com/docs/zh-TW/permissions.md#read-only-commands)。
45 53
46經識別的[關鍵路徑移除](https://code.claude.com/docs/zh-TW/permission-modes.md#critical-paths)不會被 allow 規則核准。它們是否隨後到達您的回呼取決於權限模式:例如在 `auto` 模式的 Agent SDK 工作階段中,Claude Code 預設會拒絕它們而不呼叫它。[關鍵路徑模式表](https://code.claude.com/docs/zh-TW/permission-modes.md#critical-path-removals-in-each-permission-mode)列出了每個模式對它們的處理方式。54經識別的[關鍵路徑移除](https://code.claude.com/docs/zh-TW/permission-modes.md#critical-paths)不會被 allow 規則核准,而被標記為 `Dangerous rm operation not ruled out` 的命令也不會被 `Bash` 或 `Bash(*)` 規則核准。它們是否隨後到達您的回呼取決於權限模式:例如在 `auto` 模式的 Agent SDK 工作階段中,Claude Code 預設會拒絕它們而不呼叫它。[關鍵路徑模式表](https://code.claude.com/docs/zh-TW/permission-modes.md#critical-path-removals-in-each-permission-mode)列出了每個模式對它們的處理方式。
47 55
48Allow 規則不會核准從 [網路路徑](https://code.claude.com/docs/zh-TW/permissions.md#network-paths) 進行的讀取。56Allow 規則不會核准從 [網路路徑](https://code.claude.com/docs/zh-TW/permissions.md#network-paths) 進行的讀取。
49 57
57 65
58如果您在 TypeScript SDK 期望評估順序在諮詢回呼之前自動批准呼叫的設定中傳遞 `canUseTool` 回呼,SDK 會在構造查詢時發出一次 Node.js 程序警告。警告的代碼是 `CLAUDE_SDK_CAN_USE_TOOL_SHADOWED`。兩個設定會觸發它:66如果您在 TypeScript SDK 期望評估順序在諮詢回呼之前自動批准呼叫的設定中傳遞 `canUseTool` 回呼,SDK 會在構造查詢時發出一次 Node.js 程序警告。警告的代碼是 `CLAUDE_SDK_CAN_USE_TOOL_SHADOWED`。兩個設定會觸發它:
59 67
60* `permissionMode: 'bypassPermissions'`,它自動核准到達權限模式步驟的每個呼叫,除了 [任何模式都不自動核准的操作](https://code.claude.com/docs/zh-TW/permission-modes.md#actions-no-mode-auto-approves)68* `permissionMode: 'bypassPermissions'`:警告文字以 `canUseTool will not be invoked: permissionMode 'bypassPermissions'` 開頭。工具呼叫會在諮詢 `canUseTool` 之前被核准,因此您的回呼只會針對少數呼叫執行,例如 [Bypass permissions 模式](#bypass-permissions-mode-bypasspermissions)下列出的呼叫。若也要檢查已核准的呼叫,請將回呼的檢查放在 [`PreToolUse` hook](https://code.claude.com/docs/zh-TW/agent-sdk/hooks) 中
61* 每個裸 `allowedTools` 條目,例如 `"Read"`,它在諮詢回呼之前自動核准整個工具,除了 [任何模式都不自動核准的操作](https://code.claude.com/docs/zh-TW/permission-modes.md#actions-no-mode-auto-approves) 和 [從網路路徑進行的讀取](https://code.claude.com/docs/zh-TW/permissions.md#network-paths)69* 僅為工具名稱的 `allowedTools` 條目,例如 `"Read"`:警告會在 `canUseTool will not be invoked for:` 之後列出每個此類條目。對所列工具的呼叫會在諮詢 `canUseTool` 之前被核准,但 [allow 規則永遠不會核准的呼叫](#calls-an-allow-rule-never-approves)除外。若要讓您的回呼針對所列工具中需要核准的呼叫執行,請從 `allowedTools` 中移除該工具的條目
62 70
63具有指定符的條目(如 `Bash(ls *)`)和 `acceptEdits` 模式不會觸發它,來自設定檔的 allow 規則對檢查不可見。71具有指定符的條目(如 `Bash(ls *)`)和 `acceptEdits` 模式不會觸發它,來自設定檔的 allow 規則對檢查不可見。
64 72
65使用 `process.on('warning', ...)` 進行監聽並匹配代碼以記錄或抑制它。要無論模式和規則如何都控制每個工具呼叫,請改用 [`PreToolUse` hook](https://code.claude.com/docs/zh-TW/agent-sdk/hooks)。73此警告不會阻擋任何呼叫,也不會變更任何選項。如果您的回呼已經會收到您想檢查的每個呼叫,請維持設定不變。若要記錄此警告,請使用 `process.on('warning', ...)` 進行監聽並匹配 `CLAUDE_SDK_CAN_USE_TOOL_SHADOWED` 代碼。
66 74
67此頁面重點關注 **allow 和 deny 規則** 以及 **權限模式**。對於其他步驟:75此頁面重點關注 **allow 和 deny 規則** 以及 **權限模式**。對於其他步驟:
68 76
90>98>
91> **自動批准的工具永遠不會到達 `canUseTool`。** 在任何較早步驟中批准的工具呼叫,透過 `acceptEdits` 或 `bypassPermissions`,或透過允許規則,會跳過您的 `canUseTool` 回呼,因此您在那裡放置的權限檢查會被該工具無聲地繞過。99> **自動批准的工具永遠不會到達 `canUseTool`。** 在任何較早步驟中批准的工具呼叫,透過 `acceptEdits` 或 `bypassPermissions`,或透過允許規則,會跳過您的 `canUseTool` 回呼,因此您在那裡放置的權限檢查會被該工具無聲地繞過。
92>100>
93> 允許規則永遠不會自動核准 `AskUserQuestion`、標記為 [`_meta["anthropic/requiresUserInteraction"]`](https://code.claude.com/docs/zh-TW/mcp#require-approval-for-a-specific-tool) 的 MCP 工具、[您的組織設定為 `ask`](https://code.claude.com/docs/zh-TW/mcp#organization-controls-on-connector-tools) 的連接器工具,或經辨識的 `rm` 和 `rmdir` [關鍵路徑移除](https://code.claude.com/docs/zh-TW/permission-modes.md#critical-paths)。在 `dontAsk` 模式中,Claude Code 會拒絕這些呼叫而不呼叫回呼。在其他模式中,前三個會到達回呼。[關鍵路徑模式表](https://code.claude.com/docs/zh-TW/permission-modes.md#critical-path-removals-in-each-permission-mode)列出每個模式對關鍵路徑移除的處理方式。辨識這些移除的檢查[可能會遺漏某些命令](https://code.claude.com/docs/zh-TW/permission-modes.md#critical-paths)。101> 如果對 `allowed_tools` 中某個工具的呼叫仍會到達您的 `canUseTool` 回呼,或在 `dontAsk` 模式中遭到拒絕,請檢查它們是否為[從網路路徑讀取](https://code.claude.com/docs/zh-TW/permissions.md#network-paths),或屬於下列呼叫。沒有任何允許規則會核准這些呼叫。在永不提示的 `dontAsk` 模式中,Claude Code 會拒絕這些呼叫而不呼叫 `canUseTool`;在其他權限模式中,請依各項目的說明處理:
102>
103> * `AskUserQuestion`、標記為 [`_meta["anthropic/requiresUserInteraction"]`](https://code.claude.com/docs/zh-TW/mcp#require-approval-for-a-specific-tool) 的 MCP 工具,以及[您的組織設定為 `ask`](https://code.claude.com/docs/zh-TW/mcp#organization-controls-on-connector-tools) 的連接器工具:在回呼中回應它們。[處理釐清問題](https://code.claude.com/docs/zh-TW/agent-sdk/user-input.md#handle-clarifying-questions)說明如何回應 `AskUserQuestion`,而連接器呼叫抵達時會附帶原因 `Your organization requires approval for this tool`
104>
105> * 您的應用程式標記為 [`always_ask`](https://code.claude.com/docs/zh-TW/agent-sdk/custom-tools#require-approval-for-specific-tools) 的自訂工具:在回呼中決定該呼叫。若要停止這些呼叫抵達,請[在工作階段中途變更政策](https://code.claude.com/docs/zh-TW/agent-sdk/typescript.md#mcpsdkserverconfigwithinstance)。在 `auto`、`plan` 和 `bypassPermissions` 模式中,該呼叫也可能在回呼之前就被核准,相關情況列於[可核准 `always_ask` 呼叫的權限模式](https://code.claude.com/docs/zh-TW/agent-sdk/typescript#permission-modes-that-can-approve-an-always_ask-call)
94>106>
95> 涵蓋範圍取決於項目的形式:像 `Read` 或 `mcp__github__get_issue` 這樣的裸名稱會自動核准對該工具的每個呼叫,除了上述例外情況和[從網路路徑讀取](https://code.claude.com/docs/zh-TW/permissions.md#network-paths),而像 `Bash(npm test *)` 這樣的限定規則只會自動核准符合的呼叫,其他需要核准的 `Bash` 呼叫仍會進入回呼。對於必須在每個工具呼叫上執行的檢查,請使用 [`PreToolUse` hook](https://code.claude.com/docs/zh-TW/agent-sdk/hooks):hook 在每個其他步驟之前執行,hook 拒絕即使在 `bypassPermissions` 模式中也適用。107> * 經辨識的 `rm` 和 `rmdir` [關鍵路徑移除](https://code.claude.com/docs/zh-TW/permission-modes.md#critical-paths):在 `default`、`acceptEdits` 和 `bypassPermissions` 模式中,請在回呼中允許或拒絕該移除,此時 [`decisionReason`](https://code.claude.com/docs/zh-TW/agent-sdk/typescript#canusetool) 會以 `Dangerous rm` 開頭。關於 `auto` 和 `plan` 模式,請參閱[各權限模式中的關鍵路徑移除](https://code.claude.com/docs/zh-TW/permission-modes.md#critical-path-removals-in-each-permission-mode)。辨識這些移除的檢查[可能會遺漏某些命令](https://code.claude.com/docs/zh-TW/permission-modes.md#critical-paths)
108>
109> * **裸名稱**:像 `Read` 或 `mcp__github__get_issue` 這樣的項目會自動核准對該工具的每個呼叫,但[任何模式都不自動核准的動作](https://code.claude.com/docs/zh-TW/permission-modes.md#actions-no-mode-auto-approves)和[從網路路徑讀取](https://code.claude.com/docs/zh-TW/permissions.md#network-paths)除外。
110>
111> * **限定規則**:像 `Bash(npm test *)` 這樣的項目只會自動核准符合的呼叫,其他需要核准的 `Bash` 呼叫仍會進入回呼。
112>
113> 對於必須在每個工具呼叫上執行的檢查,請使用 [`PreToolUse` hook](https://code.claude.com/docs/zh-TW/agent-sdk/hooks):hook 在每個其他步驟之前執行,hook 拒絕即使在 `bypassPermissions` 模式中也適用。
96 114
97對於鎖定的代理,將 `allowedTools` 與 `permissionMode: "dontAsk"` 配對:115對於鎖定的代理,將 `allowedTools` 與 `permissionMode: "dontAsk"` 配對:
98 116
103};121};
104```122```
105 123
106列出的工具會被核准,但[任何模式都不自動核准的動作](https://code.claude.com/docs/zh-TW/permission-modes.md#actions-no-mode-auto-approves)和[從網路路徑讀取](https://code.claude.com/docs/zh-TW/permissions.md#network-paths)除外。其他每個原本會提示的呼叫則會被拒絕,不過您安裝的 [mod](https://code.claude.com/docs/zh-TW/plugins/mods/overview.md) 仍可核准[其中部分呼叫](https://code.claude.com/docs/zh-TW/permissions.md#precedence-among-rules-hooks-and-mods)。124列出的 `Read`、`Glob` 和 `Grep` 呼叫會被核准,但[任何模式都不自動核准的動作](https://code.claude.com/docs/zh-TW/permission-modes.md#actions-no-mode-auto-approves)和[從網路路徑讀取](https://code.claude.com/docs/zh-TW/permissions.md#network-paths)除外。其他每個原本會提示的呼叫則會被拒絕,不過您安裝的 [mod](https://code.claude.com/docs/zh-TW/plugins/mods/overview.md) 仍可核准[其中部分呼叫](https://code.claude.com/docs/zh-TW/permissions.md#precedence-among-rules-hooks-and-mods)。
107 125
108在 `default` 模式中不需要核准的呼叫無論您是否列出都會執行。這些呼叫包括[唯讀 Bash 命令](https://code.claude.com/docs/zh-TW/permissions.md#read-only-commands)、不在執行前詢問的工具(如 `Agent`),以及工作目錄內的檔案讀取。要將工具從請求中完全移除,請將其裸名稱新增到 `disallowedTools`。126在 `default` 模式中不需要核准的呼叫無論您是否列出都會執行。這些呼叫包括[唯讀 Bash 命令](https://code.claude.com/docs/zh-TW/permissions.md#read-only-commands)、不在執行前詢問的工具(如 `Agent`),以及工作目錄內的檔案讀取。若要對 Claude 完全隱藏某個內建工具,而非拒絕其呼叫,請將其裸名稱新增到 `disallowedTools`。
109 127
110> [!WARNING]128> [!WARNING]
111>129>
115 133
116## 權限模式134## 權限模式
117 135
118權限模式提供對 Claude 如何使用工具的全域控制。您可以在呼叫 `query()` 時設定權限模式,或在串流工作階段期間動態變更它。136權限模式可全域控制 Claude 使用工具的方式。您可以在呼叫 `query()` 時設定權限模式,或在串流工作階段期間動態變更。
119 137
120在 Claude Code v2.1.302 或更新版本中,除非您設定了權限模式,或應用程式從其設定檔中的 [`permissions.defaultMode`](https://code.claude.com/docs/zh-TW/settings-reference#permissions-defaultmode) 取得權限模式,否則您的應用程式會以 `default` 模式啟動。在 `default` 模式中,除非您透過允許規則、hook、`canUseTool` 回呼或權限提示工具核准,否則 Claude Code 會拒絕任何需要核准的工具呼叫。如果工具呼叫遭到拒絕,請參閱[在 `claude -p` 和 Agent SDK 執行中工具呼叫遭拒](https://code.claude.com/docs/zh-TW/permission-modes#which-mode-a-non-interactive-run-starts-in)。138使用 Claude Code v2.1.302 或更新版本時,除非您設定了權限模式,或應用程式從其設定檔中的 [`permissions.defaultMode`](https://code.claude.com/docs/zh-TW/settings-reference#permissions-defaultmode) 取得權限模式,否則應用程式會以 `default` 模式啟動。在 `default` 模式下,Claude Code 會拒絕任何需要核准的工具呼叫,除非您透過 allow 規則、hook、`canUseTool` 回呼或權限提示工具核准該呼叫。如果工具呼叫遭到拒絕,請參閱[在 `claude -p` 和 Agent SDK 執行中工具呼叫遭到拒絕](https://code.claude.com/docs/zh-TW/permission-modes#which-mode-a-non-interactive-run-starts-in)。
121 139
122### 可用模式140### 可用模式
123 141
124SDK 支援這些權限模式:142SDK 支援以下權限模式:
125 143
126| 模式 | 說明 | 工具行為 |144| 模式 | 說明 | 工具行為 |
127| :- | :- | :- |145| :- | :- | :- |
128| `default` | 標準權限行為 | 無模式型自動核准;需要核准且不符合任何允許規則的呼叫會觸發您的 `canUseTool` 回呼 |146| `default` | 標準權限行為 | 沒有基於模式的自動核准;需要核准且不符合任何 allow 規則的呼叫會觸發您的 `canUseTool` 回呼 |
129| `dontAsk` | 拒絕而非提示 | 任何原本會提示的呼叫都會被拒絕,且不會呼叫 `canUseTool`,不過您安裝的 [mod](https://code.claude.com/docs/zh-TW/plugins/mods/overview.md) 仍可核准[其中部分呼叫](https://code.claude.com/docs/zh-TW/permissions.md#precedence-among-rules-hooks-and-mods)。由 `allowed_tools` 或 `settings.json` 允許規則核准的呼叫會執行,在 `default` 模式中不需要核准的呼叫也會執行。某些呼叫,例如[從網路路徑讀取](https://code.claude.com/docs/zh-TW/permissions.md#network-paths),即使符合 `allowed_tools` 或允許規則也會被拒絕。如需完整清單,請參閱[不要詢問模式](#don’t-ask-mode-dontask) |147| `dontAsk` | 拒絕而非提示 | 任何原本會提示的呼叫都會被拒絕,且不會呼叫 `canUseTool`,不過您安裝的 [mod](https://code.claude.com/docs/zh-TW/plugins/mods/overview.md) 仍可核准[其中部分呼叫](https://code.claude.com/docs/zh-TW/permissions.md#precedence-among-rules-hooks-and-mods)。由 `allowed_tools` 或 `settings.json` allow 規則核准的呼叫會執行,在 `default` 模式下不需要核准的呼叫也會執行。某些呼叫,例如[從網路路徑讀取](https://code.claude.com/docs/zh-TW/permissions.md#network-paths),即使符合 `allowed_tools` 或 allow 規則也會被拒絕。如需清單,請參閱 [Don't ask 模式](#don’t-ask-mode-dontask) |
130| `acceptEdits` | 自動接受檔案編輯 | 檔案編輯和[檔案系統操作](#accept-edits-mode-acceptedits)(`mkdir`、`rm`、`mv` 等)會自動被核准 |148| `acceptEdits` | 自動接受檔案編輯 | 檔案編輯和[檔案系統操作](#accept-edits-mode-acceptedits)(`mkdir`、`rm`、`mv` 等)會自動核准 |
131| `bypassPermissions` | 略過權限檢查 | 工具執行時不會出現權限提示,除了[沒有任何模式自動核准的動作](https://code.claude.com/docs/zh-TW/permission-modes.md#actions-no-mode-auto-approves)。請謹慎使用 |149| `bypassPermissions` | 略過權限檢查 | 工具會在沒有權限提示的情況下執行,但[任何模式都不會自動核准的動作](https://code.claude.com/docs/zh-TW/permission-modes.md#actions-no-mode-auto-approves)除外;此外,在[雲端工作階段](https://code.claude.com/docs/zh-TW/claude-code-on-the-web.md)之外,您的應用程式[標記為 `always_ask`](https://code.claude.com/docs/zh-TW/agent-sdk/custom-tools#require-approval-for-specific-tools) 的自訂工具也除外。請謹慎使用 |
132| `plan` | 規劃模式 | Claude 在不編輯您的原始檔案的情況下探索和規劃;檔案編輯永遠不會自動被核准,並透過您的 `canUseTool` 回呼提示 |150| `plan` | 規劃模式 | Claude 會探索並規劃,但不會編輯您的原始檔;檔案編輯永遠不會自動核准,而是透過您的 `canUseTool` 回呼提示 |
133| `auto` | 模型分類核准 | 模型分類器檢閱殼層命令和網路請求等動作,允許或阻止它檢閱的每一個。請參閱 [Auto 模式](https://code.claude.com/docs/zh-TW/permission-modes.md#eliminate-prompts-with-auto-mode)以了解可用性和決策順序 |151| `auto` | 由模型分類的核准 | 模型分類器會審查 shell 命令和網路請求等動作,對其審查的每個動作予以允許或封鎖。如需可用性與決策順序,請參閱[自動模式](https://code.claude.com/docs/zh-TW/permission-modes.md#eliminate-prompts-with-auto-mode) |
134 152
135> [!WARNING]153> [!WARNING]
136>154>
137> **Subagent 繼承:** 如果您的主工作階段處於 [plan mode](https://code.claude.com/docs/zh-TW/permission-modes.md#analyze-before-you-edit-with-plan-mode),其 [`AgentDefinition`](https://code.claude.com/docs/zh-TW/agent-sdk/typescript#agentdefinition) 設定 `permissionMode: "acceptEdits"` 的 subagent 仍會在 plan mode 中執行。該 subagent 對您原始檔案的 `Edit` 和 `Write` 呼叫仍會送往您的 `canUseTool` 回呼。plan mode 對您定義的 subagent 同樣有效,因此將工作交給 subagent 並不能繞過先檢閱計畫的步驟。155> **Subagent 繼承:** 如果您的主要工作階段處於 [plan mode](https://code.claude.com/docs/zh-TW/permission-modes.md#analyze-before-you-edit-with-plan-mode),即使 subagent 的 [`AgentDefinition`](https://code.claude.com/docs/zh-TW/agent-sdk/typescript#agentdefinition) 設定了 `permissionMode: "acceptEdits"`,該 subagent 仍會在 plan mode 中執行。該 subagent 對您原始檔的 `Edit` 和 `Write` 呼叫仍會送往您的 `canUseTool` 回呼。Plan mode 對您定義的 subagent 同樣有效,因此將工作交給 subagent 並不能繞過先審查計劃的步驟。
138>156>
139> subagent 會從主工作階段繼承 `plan`、`acceptEdits`、`auto` 或 `bypassPermissions`,而在 `default` 或 `dontAsk` 模式的主工作階段下,它會以您設定的模式執行。即使如此,Claude Code 也永遠不會套用 `"bypassPermissions"` 值,且只有在該 subagent [可使用自動模式](https://code.claude.com/docs/zh-TW/permission-modes.md#eliminate-prompts-with-auto-mode)時才會套用 `"auto"` 值。`bypassPermissions` 例外需要 Claude Code v2.1.267 或更新版本。157> Subagent 會從主要工作階段繼承 `plan`、`acceptEdits`、`auto` 或 `bypassPermissions`;而在 `default` 或 `dontAsk` 模式的主要工作階段下,subagent 會以您設定的模式執行。即便如此,Claude Code 永遠不會套用 `"bypassPermissions"` 值,且只有在該 subagent [可使用自動模式](https://code.claude.com/docs/zh-TW/permission-modes.md#eliminate-prompts-with-auto-mode)時才會套用 `"auto"` 值。`bypassPermissions` 例外需要 Claude Code v2.1.267 或更新版本。
140>158>
141> 子代理可能具有不同的系統提示和比您的主代理更少受限的行為,因此繼承 `bypassPermissions` 會授予它們完整的自主系統存取權。[沒有任何模式自動核准的動作](https://code.claude.com/docs/zh-TW/permission-modes.md#actions-no-mode-auto-approves)仍然適用。159> Subagent 可能具有不同的系統提示詞,且行為限制比您的主要 agent 更少,因此繼承 `bypassPermissions` 會授予它們完整、自主的系統存取權。[任何模式都不會自動核准的動作](https://code.claude.com/docs/zh-TW/permission-modes.md#actions-no-mode-auto-approves)仍然適用。
142 160
143### 設定權限模式161### 設定權限模式
144 162
145您可以在開始查詢時設定一次權限模式,或在工作階段進行中動態變更它。163您可以在開始查詢時設定一次權限模式,也可以在工作階段進行中動態變更。
146 164
147**在查詢時**165**查詢時**
148 166
149在建立查詢時傳遞 `permission_mode`(Python)或 `permissionMode`(TypeScript)。167在建立查詢時傳入 `permission_mode`(Python)或 `permissionMode`(TypeScript)。
150 168
151```python Python theme={null}169```python Python theme={null}
152import asyncio170import asyncio
186main();204main();
187```205```
188 206
189**在串流期間**207**串流期間**
190 208
191呼叫 `set_permission_mode()`(Python)或 `setPermissionMode()`(TypeScript)以在工作階段中途變更模式。新模式會立即對所有後續工具請求生效。這讓您可以從限制性開始,並隨著信任建立而放寬權限,例如在檢閱 Claude 的初始方法後切換到 `acceptEdits`。209呼叫 `set_permission_mode()`(Python)或 `setPermissionMode()`(TypeScript)即可在工作階段中途變更模式。新模式會立即對所有後續的工具請求生效。這讓您可以從嚴格的限制開始,隨著信任建立再逐步放寬權限,例如在審查 Claude 的初步做法後切換至 `acceptEdits`。
192 210
193```python Python theme={null}211```python Python theme={null}
194import asyncio212import asyncio
242 260
243### 模式詳細資訊261### 模式詳細資訊
244 262
245#### 接受編輯模式(`acceptEdits`)263#### Accept edits 模式(`acceptEdits`)
246 264
247自動核准檔案操作,讓 Claude 可以編輯程式碼而不會提示。其他工具(例如不是檔案系統操作的 Bash 命令)仍然需要正常權限。265自動核准檔案操作,讓 Claude 無需提示即可編輯程式碼。其他工具(例如非檔案系統操作的 Bash 命令)仍需一般權限。
248 266
249**自動核准的操作:**267**自動核准的操作:**
250 268
251* 檔案編輯(Edit、Write 工具)269* 檔案編輯(Edit、Write 工具)
252* 檔案系統命令:`mkdir`、`touch`、`rm`、`rmdir`、`mv`、`cp`、`sed`270* 檔案系統命令:`mkdir`、`touch`、`rm`、`rmdir`、`mv`、`cp`、`sed`
253 271
254兩者都只適用於工作目錄或 `additionalDirectories` 內的路徑。在 `acceptEdits` 模式中,當 Claude 執行以下操作時,Claude Code 不會自動核准請求:272兩者都僅適用於工作目錄或 `additionalDirectories` 內的路徑。在 `acceptEdits` 模式下,當 Claude 進行以下操作時,Claude Code 不會自動核准該請求:
255 273
256* 在該範圍外的路徑上工作274* 處理該範圍之外的路徑
257* 寫入受保護的路徑275* 寫入受保護的路徑
258* 使用 `rm` 或 `rmdir` 移除 Claude Code 識別為[關鍵路徑](https://code.claude.com/docs/zh-TW/permission-modes.md#critical-paths)的路徑276* 使用 `rm` 或 `rmdir` 移除 Claude Code 識別為[關鍵路徑](https://code.claude.com/docs/zh-TW/permission-modes.md#critical-paths)的路徑
277* 執行帶有選項、glob,或 `timeout 5`、`LANG=C` 等前綴的 [`touch`](https://code.claude.com/docs/zh-TW/permission-modes#auto-approve-file-edits-with-acceptedits-mode)
259 278
260**使用時機:** 您信任 Claude 的編輯並想要更快的迭代,例如在原型設計期間或在隔離目錄中工作時。279**適用時機:** 您信任 Claude 的編輯並希望加快反覆開發的速度,例如在製作原型期間或在隔離的目錄中工作時。
261 280
262#### 不要詢問模式(`dontAsk`)281#### Don't ask 模式(`dontAsk`)
263 282
264將任何權限提示轉換為拒絕,而不呼叫 `canUseTool`,不過您安裝的 [mod](https://code.claude.com/docs/zh-TW/plugins/mods/overview.md) 仍可核准[其中部分呼叫](https://code.claude.com/docs/zh-TW/permissions.md#precedence-among-rules-hooks-and-mods)。由 `allowed_tools`、`settings.json` 允許規則或 hook 預先核准的工具會正常執行。在 `default` 模式中不需要核准的呼叫也會執行,例如在您的工作目錄內的檔案讀取和對 `Agent` 的呼叫。283將任何權限提示轉換為拒絕,且不會呼叫 `canUseTool`,不過您安裝的 [mod](https://code.claude.com/docs/zh-TW/plugins/mods/overview.md) 仍可核准[其中部分呼叫](https://code.claude.com/docs/zh-TW/permissions.md#precedence-among-rules-hooks-and-mods)。由 `allowed_tools`、`settings.json` allow 規則或 hook 預先核准的工具會正常執行。在 `default` 模式下不需要核准的呼叫也會正常執行,例如讀取您工作目錄內的檔案以及對 `Agent` 的呼叫。
265 284
266您的組織[設定為 `ask`](https://code.claude.com/docs/zh-TW/mcp#organization-controls-on-connector-tools) 的連接器工具、需要使用者互動的工具、[從網路路徑讀取](https://code.claude.com/docs/zh-TW/permissions.md#network-paths),以及已識別的[關鍵路徑移除](https://code.claude.com/docs/zh-TW/permission-modes.md#critical-paths)即使符合允許規則也會被拒絕。`PreToolUse` hook 允許也不會清除已識別的關鍵路徑移除或從網路路徑讀取。識別這些移除的檢查[可能會遺漏某些命令](https://code.claude.com/docs/zh-TW/permission-modes.md#critical-paths)。285以下呼叫即使符合 allow 規則也會被拒絕:
267 286
268**使用時機:** 您想要為無頭代理提供固定、明確的工具表面,並偏好硬拒絕而非無聲依賴 `canUseTool` 不存在。287* [您的組織設為 `ask`](https://code.claude.com/docs/zh-TW/mcp#organization-controls-on-connector-tools) 的連接器工具
288* 需要使用者互動的工具,例如 `AskUserQuestion`,以及其伺服器設定了 [`_meta["anthropic/requiresUserInteraction"]`](https://code.claude.com/docs/zh-TW/mcp#require-approval-for-a-specific-tool) 的 MCP 工具
289* 您的應用程式將其 `permission_policy` 設為 [`always_ask`](https://code.claude.com/docs/zh-TW/agent-sdk/custom-tools#require-approval-for-specific-tools) 的自訂工具
290* [從網路路徑讀取](https://code.claude.com/docs/zh-TW/permissions.md#network-paths)
291* 經識別的[關鍵路徑移除](https://code.claude.com/docs/zh-TW/permission-modes.md#critical-paths)
269 292
270#### 略過權限模式(`bypassPermissions`)293如果您的 `PreToolUse` hook 對經識別的關鍵路徑移除、從網路路徑讀取,或對標記為 `always_ask` 之工具的呼叫傳回 `allow`,該呼叫仍會被拒絕。識別這些移除操作的檢查[可能會遺漏某些命令](https://code.claude.com/docs/zh-TW/permission-modes.md#critical-paths)。
271 294
272自動核准工具使用而不提示,除了下面警告中列出的情況。鉤子仍然執行,如果需要可以阻止操作。在 Linux 和 macOS 上,Claude Code 拒絕在此模式下以 root 身份或在[已識別的沙箱](https://code.claude.com/docs/zh-TW/permission-modes.md#skip-all-checks-with-bypasspermissions-mode)外的 `sudo` 下啟動,查詢在第一個回合之前失敗。295**適用時機:** 您希望為 headless agent 提供固定且明確的工具範圍,並偏好直接拒絕,而非默默依賴 `canUseTool` 不存在的情況。
296
297#### Bypass permissions 模式(`bypassPermissions`)
298
299無需提示即自動核准工具使用,但[任何模式都不會自動核准的動作](https://code.claude.com/docs/zh-TW/permission-modes.md#actions-no-mode-auto-approves)除外。Hook 仍會執行,並可在必要時封鎖操作。在 Linux 和 macOS 上,若不在[受認可的沙箱](https://code.claude.com/docs/zh-TW/permission-modes.md#skip-all-checks-with-bypasspermissions-mode)中,無論是以 root 身分或透過 `sudo`,Claude Code 都會拒絕以此模式啟動,且查詢會在第一個回合之前失敗。
273 300
274> [!WARNING]301> [!WARNING]
275>302>
276> 請極其謹慎使用。Claude 在此模式中具有完整的系統存取權。僅在您信任所有可能操作的受控環境中使用。303> 請極度謹慎使用。在此模式下,Claude 擁有完整的系統存取權。僅在您信任所有可能操作的受控環境中使用。
277>304>
278> `allowed_tools` 不會限制此模式。每個工具都會被核准,而不僅僅是您列出的工具。這些控制仍然適用:305> `allowed_tools` 不會限制此模式。所有工具都會被核准,而不僅是您列出的工具。以下控制措施仍然適用:
279>306>
280> * 拒絕規則、明確的 `ask` 規則和鉤子在模式檢查之前被評估,仍然可以阻止工具。307> * Deny 規則、明確的 `ask` 規則和 hook 會在模式檢查之前進行評估,且仍可封鎖工具。
281> * 您的組織[設定為 `ask`](https://code.claude.com/docs/zh-TW/mcp#organization-controls-on-connector-tools) 的連接器工具、需要使用者互動的工具,以及已識別的[關鍵路徑移除](https://code.claude.com/docs/zh-TW/permission-modes.md#critical-paths)仍然會進入您的 `canUseTool` 回呼。識別這些移除的檢查[可能會遺漏某些命令](https://code.claude.com/docs/zh-TW/permission-modes.md#critical-paths)。308> * [您的組織設為 `ask`](https://code.claude.com/docs/zh-TW/mcp#organization-controls-on-connector-tools) 的連接器工具、需要使用者互動的工具,以及經識別的[關鍵路徑移除](https://code.claude.com/docs/zh-TW/permission-modes.md#critical-paths),仍會交由您的 `canUseTool` 回呼處理。識別這些移除操作的檢查[可能會遺漏某些命令](https://code.claude.com/docs/zh-TW/permission-modes.md#critical-paths)。在[雲端工作階段](https://code.claude.com/docs/zh-TW/claude-code-on-the-web.md)之外,對您的應用程式[標記為 `always_ask`](https://code.claude.com/docs/zh-TW/agent-sdk/custom-tools#require-approval-for-specific-tools) 之自訂工具的呼叫也會交由該回呼處理。
282> * [跨工作階段訊息保護措施](https://code.claude.com/docs/zh-TW/permission-modes.md#skip-all-checks-with-bypasspermissions-mode)仍然適用。309> * [跨工作階段訊息傳遞防護措施](https://code.claude.com/docs/zh-TW/permission-modes.md#skip-all-checks-with-bypasspermissions-mode)仍然適用。
283 310
284#### 規劃模式(`plan`)311#### Plan mode(`plan`)
285 312
286Claude 探索程式碼庫並產生計畫,而不編輯您的原始檔案。唯讀工具的執行方式與在 `default` 權限模式中相同。313Claude 會探索程式碼庫並產生計劃,但不會編輯您的原始檔。在 plan mode 中,檔案編輯永遠不會自動核准,即使符合 allow 規則或 `PreToolUse` hook 傳回 `allow` 也一樣。這些編輯會改為透過您的 `canUseTool` 回呼提示。
287 314
288在 plan mode 中,檔案編輯永遠不會自動被核准,即使符合允許規則或 `PreToolUse` hook 傳回 `allow`。它們會改為透過您的 `canUseTool` 回呼提示。在 Claude Code v2.1.212 或更新版本上,修改檔案的 shell 命令(例如 `touch` 和 `rm`)會以相同方式到達您的 `canUseTool` 回呼。315當工作階段可使用自動模式時,Claude 在規劃期間執行的命令預設不會送達您的回呼,因為[自動模式](https://code.claude.com/docs/zh-TW/permission-modes.md#eliminate-prompts-with-auto-mode)所使用的分類器模型會[改為審查這些命令](https://code.claude.com/docs/zh-TW/permission-modes.md#analyze-before-you-edit-with-plan-mode)。啟用該審查時,分類器也可以核准原本會送達您回呼的唯讀呼叫,例如沒有 allow 規則的 `WebFetch` 呼叫。
289 316
290在 TypeScript SDK 中,如果您在 `permissionMode: 'plan'` 旁邊設定 `allowDangerouslySkipPermissions: true`,檔案編輯和修改檔案的 shell 命令仍然會到達您的 `canUseTool` 回呼。此選項讓您稍後可以使用 `setPermissionMode()` 切換到 `bypassPermissions`。317> [!NOTE]
318>
319> 在 TypeScript SDK 中,如果您將 `allowDangerouslySkipPermissions: true` 與 `permissionMode: 'plan'` 一起設定,檔案編輯仍會送達您的 `canUseTool` 回呼。若要之後使用 `setPermissionMode()` 將以 plan mode 啟動的工作階段切換為 `bypassPermissions`,您需要從一開始就設定 `allowDangerouslySkipPermissions`。
291 320
292Claude 可能會使用 `AskUserQuestion` 在最終確定計畫之前澄清需求。請參閱[處理核准和使用者輸入](https://code.claude.com/docs/zh-TW/agent-sdk/user-input.md#handle-clarifying-questions)以處理這些提示。321Claude 可能會在定案計劃之前使用 `AskUserQuestion` 釐清需求。如需處理這些提示的方式,請參閱[處理核准與使用者輸入](https://code.claude.com/docs/zh-TW/agent-sdk/user-input.md#handle-clarifying-questions)。
293 322
294**使用時機:** 您想要 Claude 提議變更而不執行它們,例如在程式碼審查期間或當您需要在進行變更之前核准變更時。323**適用時機:** 您希望 Claude 提出變更建議但不執行,例如在程式碼審查期間,或在變更進行之前需要您核准時。
295 324
296#### 自動模式(`auto`)325#### 自動模式(`auto`)
297 326
298分類器模型會在 shell 命令和網路請求等動作執行之前檢閱它們,並允許或阻止它檢閱的每一個動作。如需了解自動模式所需的模型和提供者,以及它評估動作的順序,請參閱[使用自動模式消除權限提示](https://code.claude.com/docs/zh-TW/permission-modes.md#eliminate-prompts-with-auto-mode)。327分類器模型會在 shell 命令和網路請求等動作執行之前進行審查,並對其審查的每個動作予以允許或封鎖。如需自動模式所需的模型與供應商,以及其評估動作的順序,請參閱[使用自動模式消除權限提示](https://code.claude.com/docs/zh-TW/permission-modes.md#eliminate-prompts-with-auto-mode)。
299 328
300如果您使用 [`set_model()`](https://code.claude.com/docs/zh-TW/agent-sdk/python#claudesdkclient)、[`setModel()`](https://code.claude.com/docs/zh-TW/agent-sdk/typescript#query-object) 或 [`applyFlagSettings()`](https://code.claude.com/docs/zh-TW/agent-sdk/typescript#applyflagsettings),將處於自動模式的工作階段切換到自動模式不支援的模型,工作階段會變更為 `default` 模式:329如果您使用 [`set_model()`](https://code.claude.com/docs/zh-TW/agent-sdk/python#claudesdkclient)、[`setModel()`](https://code.claude.com/docs/zh-TW/agent-sdk/typescript#query-object) 或 [`applyFlagSettings()`](https://code.claude.com/docs/zh-TW/agent-sdk/typescript#applyflagsettings),將處於自動模式的工作階段切換至自動模式不支援的模型,工作階段會變更為 `default` 模式:
301 330
302* **您會看到的內容**:一則子類型為 `status` 且 `permissionMode` 設定為 `"default"` 的 `system` 訊息,TypeScript SDK 將其型別定義為 [`SDKStatusMessage`](https://code.claude.com/docs/zh-TW/agent-sdk/typescript#sdkstatusmessage)。從那時起,需要核准且不符合任何允許規則的呼叫會到達您的 `canUseTool` 回呼。331* **您會看到的內容**:一則 subtype 為 `status`、且 `permissionMode` 設為 `"default"` 的 `system` 訊息,TypeScript SDK 將其型別定義為 [`SDKStatusMessage`](https://code.claude.com/docs/zh-TW/agent-sdk/typescript#sdkstatusmessage)。從此之後,需要核准且不符合任何 allow 規則的呼叫會送達您的 `canUseTool` 回呼。
303* **返回自動模式**:切換到支援的模型,然後呼叫 `set_permission_mode("auto")` 或 `setPermissionMode("auto")`。如果您將模型切換回來而未進行該呼叫,工作階段會保持在 `default` 模式。當不支援的模型處於作用中時,該呼叫會失敗並顯示 `Cannot set permission mode to auto: auto mode unavailable for this model`。332* **若要回到自動模式**:切換至受支援的模型,然後呼叫 `set_permission_mode("auto")` 或 `setPermissionMode("auto")`。如果您將模型切換回來但未進行該呼叫,工作階段會維持在 `default` 模式。當不受支援的模型處於作用中時,該呼叫會失敗並顯示 `Cannot set permission mode to auto: auto mode unavailable for this model`。
304 333
305在 `set_model()`、`setModel()` 或 `applyFlagSettings()` 呼叫後變更為 `default` 模式,需要 Claude Code v2.1.299 或更新版本。334在呼叫 `set_model()`、`setModel()` 或 `applyFlagSettings()` 之後變更為 `default` 模式的行為,需要 Claude Code v2.1.299 或更新版本。
306 335
307## 相關資源336## 相關資源
308 337