8 8
9Claude Agent SDK 提供權限控制來管理 Claude 如何使用工具。使用權限模式和規則來定義自動允許的內容,以及使用 [`canUseTool` callback](/docs/zh-TW/agent-sdk/user-input) 來在執行時處理其他所有情況。9Claude Agent SDK 提供權限控制來管理 Claude 如何使用工具。使用權限模式和規則來定義自動允許的內容,以及使用 [`canUseTool` callback](/docs/zh-TW/agent-sdk/user-input) 來在執行時處理其他所有情況。
10 10
11<h2 id="how-permissions-are-evaluated">11## 權限如何被評估
12 權限如何被評估
13</h2>
14 12
15當 Claude 請求一個工具時,SDK 按照以下順序檢查權限:13當 Claude 請求一個工具時,SDK 按照以下順序檢查權限:
16 14
17<Steps>15**1. Hooks**
18 <Step title="Hooks">
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>
21 16
22 <Step title="拒絕規則">17首先執行 [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)。
23 檢查 `deny` 規則(來自 `disallowed_tools` 和 [settings.json](/docs/zh-TW/settings-reference#permission-settings))。如果拒絕規則匹配,工具會被阻止,即使在 `bypassPermissions` 模式下也是如此。裸名稱拒絕規則(如 `Bash`)會在此評估開始前將工具從 Claude 的上下文中移除,因此只有作用域規則(如 `Bash(rm *)`)會在此步驟中被檢查。
24 </Step>
25 18
26 <Step title="詢問規則">19**2. 拒絕規則**
27 檢查來自 [settings.json](/docs/zh-TW/settings-reference#permission-settings) 的 `ask` 規則。如果詢問規則匹配,呼叫會傳遞到您的 [`canUseTool` 回呼](/docs/zh-TW/agent-sdk/user-input) 以進行確認,即使在 `bypassPermissions` 模式下也是如此。
28 20
29 需要使用者互動的工具行為相同:`AskUserQuestion` 和 MCP 工具(其伺服器設定了 [`_meta["anthropic/requiresUserInteraction"]`](/docs/zh-TW/mcp#require-approval-for-a-specific-tool))總是傳遞到回呼,即使當 allow 規則匹配時也是如此。在 `dontAsk` 模式下,兩種情況都會被拒絕,因為該模式永遠不會提示。MCP 註解需要 Claude Code v2.1.199 或更新版本。21檢查 `deny` 規則(來自 `disallowed_tools` 和 [settings.json](/docs/zh-TW/settings-reference#permission-settings))。如果拒絕規則匹配,工具會被阻止,即使在 `bypassPermissions` 模式下也是如此。裸名稱拒絕規則(如 `Bash`)會在此評估開始前將工具從 Claude 的上下文中移除,因此只有作用域規則(如 `Bash(rm *)`)會在此步驟中被檢查。
30 22
31 您的組織設定為 `ask` 的 [claude.ai connector](/docs/zh-TW/mcp#organization-controls-on-connector-tools) 工具也會在此步驟離開流程。每個呼叫都會傳遞到回呼,即使在 `bypassPermissions` 模式下,即使當 allow 規則匹配時也是如此。回呼會收到原因 `Your organization requires approval for this tool`。在 `dontAsk` 模式下,呼叫會被拒絕,因為該模式永遠不會提示。23**3. 詢問規則**
32 </Step>
33 24
34 <Step title="權限模式">25檢查來自 [settings.json](/docs/zh-TW/settings-reference#permission-settings) 的 `ask` 規則。如果詢問規則匹配,呼叫會傳遞到您的 [`canUseTool` 回呼](/docs/zh-TW/agent-sdk/user-input) 以進行確認,即使在 `bypassPermissions` 模式下也是如此。
35 應用活躍的 [權限模式](#permission-modes):
36 26
37 * 在 `bypassPermissions` 模式下,Claude Code 批准到達此步驟的所有內容,除了針對 [關鍵路徑](/docs/zh-TW/permission-modes#critical-paths) 的 `rm` 和 `rmdir` 移除,這些會傳遞下去。27需要使用者互動的工具行為相同:`AskUserQuestion` 和 MCP 工具(其伺服器設定了 [`_meta["anthropic/requiresUserInteraction"]`](/docs/zh-TW/mcp#require-approval-for-a-specific-tool))總是傳遞到回呼,即使當 allow 規則匹配時也是如此。在 `dontAsk` 模式下,兩種情況都會被拒絕,因為該模式永遠不會提示。MCP 註解需要 Claude Code v2.1.199 或更新版本。
38 * 在 `acceptEdits` 模式下,Claude Code 批准 [接受編輯模式](#accept-edits-mode-acceptedits) 下列出的檔案操作。
39 * 在 `plan` 模式下,Claude Code 將檔案編輯和 shell 寫入工具發送到您的 `canUseTool` 回呼,無論 allow 規則如何,因此在規劃時寫入操作無法自動批准。
40 * 在其他模式下,請求會傳遞下去。
41 </Step>
42 28
43 <Step title="允許規則">29您的組織設定為 `ask` 的 [claude.ai connector](/docs/zh-TW/mcp#organization-controls-on-connector-tools) 工具也會在此步驟離開流程。每個呼叫都會傳遞到回呼,即使在 `bypassPermissions` 模式下,即使當 allow 規則匹配時也是如此。回呼會收到原因 `Your organization requires approval for this tool`。在 `dontAsk` 模式下,呼叫會被拒絕,因為該模式永遠不會提示。
44 檢查 `allow` 規則(來自 `allowed_tools` 和 settings.json)。如果規則匹配,工具會被批准。工具自行批准的呼叫也會在此步驟解決,無需規則:例如在您的工作目錄內的檔案讀取或 [唯讀 Bash 命令](/docs/zh-TW/permissions#read-only-commands)。
45 30
46 針對 [關鍵路徑](/docs/zh-TW/permission-modes#critical-paths) 的 `rm` 和 `rmdir` 移除永遠不會被 allow 規則核准。它們是否隨後到達您的回呼取決於權限模式:例如在 `auto` 模式的 Agent SDK 工作階段中,Claude Code 預設會拒絕它們而不呼叫它。[關鍵路徑](/docs/zh-TW/permission-modes#critical-paths) 模式表列出了每個模式對它們的處理方式。31**4. 權限模式**
47 32
48 Allow 規則不會核准從 [網路路徑](/docs/zh-TW/permissions#network-paths) 進行的讀取。33應用活躍的 [權限模式](#permission-modes):
49 </Step>
50 34
51 <Step title="canUseTool 回呼">35* 在 `bypassPermissions` 模式下,Claude Code 批准到達此步驟的所有內容,除了針對 [關鍵路徑](/docs/zh-TW/permission-modes#critical-paths) 的 `rm` 和 `rmdir` 移除,這些會傳遞下去。
52 如果上述任何步驟都未解決,請呼叫您的 [`canUseTool` 回呼](/docs/zh-TW/agent-sdk/user-input) 以獲得決定。在 `dontAsk` 模式下,此步驟會被跳過,工具會被拒絕。36* 在 `acceptEdits` 模式下,Claude Code 批准 [接受編輯模式](#accept-edits-mode-acceptedits) 下列出的檔案操作。
37* 在 `plan` 模式下,Claude Code 將檔案編輯和 shell 寫入工具發送到您的 `canUseTool` 回呼,無論 allow 規則如何,因此在規劃時寫入操作無法自動批准。
38* 在其他模式下,請求會傳遞下去。
53 39
54 在 TypeScript SDK 中,如果您設定了 [`permissionPrompts: 'none'`](/docs/zh-TW/agent-sdk/typescript#options),您的回呼在此步驟不會被呼叫。[`PermissionRequest` hook](/docs/zh-TW/hooks#permissionrequest) 仍然有機會決定,如果它不決定,Claude Code 會拒絕呼叫。此選項需要 Claude Code v2.1.259 或更新版本。40**5. 允許規則**
55 </Step>
56</Steps>
57 41
58<img src="https://mintcdn.com/claude-code/jYgs7qigNjO1Badj/images/agent-sdk/permissions-flow.svg?fit=max&auto=format&n=jYgs7qigNjO1Badj&q=85&s=c771ad9085b1277d3708027a49c744bc" className="dark:hidden" alt="六步權限評估流程的圖表,與上述步驟相符:工具請求通過 hooks、拒絕規則、詢問規則、權限模式、允許規則和 canUseTool。Hooks、拒絕規則和 canUseTool 可以路由到被阻止;權限模式繞過、允許規則和 canUseTool 可以路由到執行;詢問規則路由到 canUseTool。" width="1180" height="260" data-path="images/agent-sdk/permissions-flow.svg" />42檢查 `allow` 規則(來自 `allowed_tools` 和 settings.json)。如果規則匹配,工具會被批准。工具自行批准的呼叫也會在此步驟解決,無需規則:例如在您的工作目錄內的檔案讀取或 [唯讀 Bash 命令](/docs/zh-TW/permissions#read-only-commands)。
59 43
60<img src="https://mintcdn.com/claude-code/_xqph1dUOslCOwsj/images/agent-sdk/permissions-flow-dark.svg?fit=max&auto=format&n=_xqph1dUOslCOwsj&q=85&s=e53a91e9059cbf51852b7cedb4dd4251" className="hidden dark:block" alt="六步權限評估流程的圖表,與上述步驟相符:工具請求通過 hooks、拒絕規則、詢問規則、權限模式、允許規則和 canUseTool。Hooks、拒絕規則和 canUseTool 可以路由到被阻止;權限模式繞過、允許規則和 canUseTool 可以路由到執行;詢問規則路由到 canUseTool。" width="1180" height="260" data-path="images/agent-sdk/permissions-flow-dark.svg" />44針對 [關鍵路徑](/docs/zh-TW/permission-modes#critical-paths) 的 `rm` 和 `rmdir` 移除永遠不會被 allow 規則核准。它們是否隨後到達您的回呼取決於權限模式:例如在 `auto` 模式的 Agent SDK 工作階段中,Claude Code 預設會拒絕它們而不呼叫它。[關鍵路徑](/docs/zh-TW/permission-modes#critical-paths) 模式表列出了每個模式對它們的處理方式。
45
46Allow 規則不會核准從 [網路路徑](/docs/zh-TW/permissions#network-paths) 進行的讀取。
47
48**6. canUseTool 回呼**
49
50如果上述任何步驟都未解決,請呼叫您的 [`canUseTool` 回呼](/docs/zh-TW/agent-sdk/user-input) 以獲得決定。在 `dontAsk` 模式下,此步驟會被跳過,工具會被拒絕,不過您安裝的 [mod](/docs/zh-TW/plugins/mods/overview) 仍可核准[部分此類呼叫](/docs/zh-TW/permissions#precedence-among-rules-hooks-and-mods)。
51
52在 TypeScript SDK 中,如果您設定了 [`permissionPrompts: 'none'`](/docs/zh-TW/agent-sdk/typescript#options),您的回呼在此步驟不會被呼叫。[`PermissionRequest` hook](/docs/zh-TW/hooks#permissionrequest) 仍然有機會決定,如果它不決定,Claude Code 會拒絕呼叫。此選項需要 Claude Code v2.1.259 或更新版本。
53
54
61 55
62如果您在 TypeScript SDK 期望評估順序在諮詢回呼之前自動批准呼叫的設定中傳遞 `canUseTool` 回呼,SDK 會在構造查詢時發出一次 Node.js 程序警告。警告的代碼是 `CLAUDE_SDK_CAN_USE_TOOL_SHADOWED`。兩個設定會觸發它:56如果您在 TypeScript SDK 期望評估順序在諮詢回呼之前自動批准呼叫的設定中傳遞 `canUseTool` 回呼,SDK 會在構造查詢時發出一次 Node.js 程序警告。警告的代碼是 `CLAUDE_SDK_CAN_USE_TOOL_SHADOWED`。兩個設定會觸發它:
63 57
73* **Hooks:** 執行自訂程式碼以允許、拒絕或修改工具請求。請參閱 [使用 hooks 控制執行](/docs/zh-TW/agent-sdk/hooks)。67* **Hooks:** 執行自訂程式碼以允許、拒絕或修改工具請求。請參閱 [使用 hooks 控制執行](/docs/zh-TW/agent-sdk/hooks)。
74* **canUseTool 回呼:** 在執行時提示使用者批准,當沒有較早的步驟解決呼叫時。請參閱 [處理批准和使用者輸入](/docs/zh-TW/agent-sdk/user-input)。68* **canUseTool 回呼:** 在執行時提示使用者批准,當沒有較早的步驟解決呼叫時。請參閱 [處理批准和使用者輸入](/docs/zh-TW/agent-sdk/user-input)。
75 69
76<h2 id="allow-and-deny-rules">70## 允許和拒絕規則
77 允許和拒絕規則
78</h2>
79 71
80`allowed_tools` 和 `disallowed_tools`(TypeScript:`allowedTools` / `disallowedTools`)在上述評估流程中新增允許和拒絕規則清單的項目。如果您在 `allowed_tools` 中命名其中一個[任務追蹤工具](/docs/zh-TW/agent-sdk/todo-tracking#model-availability),Claude Code 也會選擇加入該工作階段。任何未列在 `allowed_tools` 中的其他工具仍可供 Claude 使用,對其進行的需要批准的呼叫會進入權限模式。拒絕規則的行為取決於它們是命名工具還是在工具內限定模式。72`allowed_tools` 和 `disallowed_tools`(TypeScript:`allowedTools` / `disallowedTools`)在上述評估流程中新增允許和拒絕規則清單的項目。如果您在 `allowed_tools` 中命名其中一個[任務追蹤工具](/docs/zh-TW/agent-sdk/todo-tracking#model-availability),Claude Code 也會選擇加入該工作階段。任何未列在 `allowed_tools` 中的其他工具仍可供 Claude 使用,對其進行的需要批准的呼叫會進入權限模式。拒絕規則的行為取決於它們是命名工具還是在工具內限定模式。
81 73
92 84
93使用 `//path` 表示絕對檔案系統路徑:`Edit(//secrets/**)` 的拒絕規則會阻止在磁碟上 `/secrets` 下任何位置的寫入。使用單個前導斜線時,`Edit(/secrets/**)` 會在規則的來源處錨定。對於透過 `allowed_tools` 或 `disallowed_tools` 傳遞的規則,這表示工作階段的工作目錄,因此規則不會阻止磁碟上的 `/secrets`。請參閱[讀取和編輯規則](/docs/zh-TW/permissions#read-and-edit)以了解四種錨定形式以及來自設定檔的規則如何解析。85使用 `//path` 表示絕對檔案系統路徑:`Edit(//secrets/**)` 的拒絕規則會阻止在磁碟上 `/secrets` 下任何位置的寫入。使用單個前導斜線時,`Edit(/secrets/**)` 會在規則的來源處錨定。對於透過 `allowed_tools` 或 `disallowed_tools` 傳遞的規則,這表示工作階段的工作目錄,因此規則不會阻止磁碟上的 `/secrets`。請參閱[讀取和編輯規則](/docs/zh-TW/permissions#read-and-edit)以了解四種錨定形式以及來自設定檔的規則如何解析。
94 86
95<Warning>87> [!WARNING]
96 **自動批准的工具永遠不會到達 `canUseTool`。** 在任何較早步驟中批准的工具呼叫,透過 `acceptEdits` 或 `bypassPermissions`,或透過允許規則,會跳過您的 `canUseTool` 回呼,因此您在那裡放置的權限檢查會被該工具無聲地繞過。88>
97 89> **自動批准的工具永遠不會到達 `canUseTool`。** 在任何較早步驟中批准的工具呼叫,透過 `acceptEdits` 或 `bypassPermissions`,或透過允許規則,會跳過您的 `canUseTool` 回呼,因此您在那裡放置的權限檢查會被該工具無聲地繞過。
98 允許規則永遠不會自動批准 `AskUserQuestion`、標記為 [`_meta["anthropic/requiresUserInteraction"]`](/docs/zh-TW/mcp#require-approval-for-a-specific-tool) 的 MCP 工具、連接器工具[您的組織設定為 `ask`](/docs/zh-TW/mcp#organization-controls-on-connector-tools),或 `rm` 和 `rmdir` 移除針對[關鍵路徑](/docs/zh-TW/permission-modes#critical-paths)的移除。在 `dontAsk` 模式中,Claude Code 會拒絕這些呼叫而不呼叫回呼。在其他模式中,前三個會到達回呼。根據[權限模式](/docs/zh-TW/permission-modes#critical-paths),關鍵路徑移除會到達回呼,或 Claude Code 會拒絕它而不呼叫它,就像預設情況下對 Agent SDK 工作階段在 `auto` 模式中所做的那樣。90>
99 91> 允許規則永遠不會自動批准 `AskUserQuestion`、標記為 [`_meta["anthropic/requiresUserInteraction"]`](/docs/zh-TW/mcp#require-approval-for-a-specific-tool) 的 MCP 工具、連接器工具[您的組織設定為 `ask`](/docs/zh-TW/mcp#organization-controls-on-connector-tools),或 `rm` 和 `rmdir` 移除針對[關鍵路徑](/docs/zh-TW/permission-modes#critical-paths)的移除。在 `dontAsk` 模式中,Claude Code 會拒絕這些呼叫而不呼叫回呼。在其他模式中,前三個會到達回呼。根據[權限模式](/docs/zh-TW/permission-modes#critical-paths),關鍵路徑移除會到達回呼,或 Claude Code 會拒絕它而不呼叫它,就像預設情況下對 Agent SDK 工作階段在 `auto` 模式中所做的那樣。
100 涵蓋範圍取決於項目的形式:像 `Read` 或 `mcp__github__get_issue` 這樣的裸名稱會自動核准對該工具的每個呼叫,除了上述例外情況和[從網路路徑讀取](/docs/zh-TW/permissions#network-paths),而像 `Bash(npm test *)` 這樣的限定規則只會自動核准符合的呼叫,其他需要核准的 `Bash` 呼叫仍會進入回呼。對於必須在每個工具呼叫上執行的檢查,請使用 [`PreToolUse` hook](/docs/zh-TW/agent-sdk/hooks):hook 在每個其他步驟之前執行,hook 拒絕即使在 `bypassPermissions` 模式中也適用。92>
101</Warning>93> 涵蓋範圍取決於項目的形式:像 `Read` 或 `mcp__github__get_issue` 這樣的裸名稱會自動核准對該工具的每個呼叫,除了上述例外情況和[從網路路徑讀取](/docs/zh-TW/permissions#network-paths),而像 `Bash(npm test *)` 這樣的限定規則只會自動核准符合的呼叫,其他需要核准的 `Bash` 呼叫仍會進入回呼。對於必須在每個工具呼叫上執行的檢查,請使用 [`PreToolUse` hook](/docs/zh-TW/agent-sdk/hooks):hook 在每個其他步驟之前執行,hook 拒絕即使在 `bypassPermissions` 模式中也適用。
102 94
103對於鎖定的代理,將 `allowedTools` 與 `permissionMode: "dontAsk"` 配對:95對於鎖定的代理,將 `allowedTools` 與 `permissionMode: "dontAsk"` 配對:
104 96
109};101};
110```102```
111 103
112列出的工具會被核准,但[任何模式都不自動核准的動作](/docs/zh-TW/permission-modes#actions-no-mode-auto-approves)和[從網路路徑讀取](/docs/zh-TW/permissions#network-paths)除外,而其他每個原本會提示的呼叫則會被拒絕。在 `default` 模式中不需要核准的呼叫無論您是否列出都會執行,例如[唯讀 Bash 命令](/docs/zh-TW/permissions#read-only-commands)、不在執行前詢問的工具(如 `Agent`),以及工作目錄內的檔案讀取。要將工具從請求中完全移除,請將其裸名稱新增到 `disallowedTools`。104列出的工具會被核准,但[任何模式都不自動核准的動作](/docs/zh-TW/permission-modes#actions-no-mode-auto-approves)和[從網路路徑讀取](/docs/zh-TW/permissions#network-paths)除外。其他每個原本會提示的呼叫則會被拒絕,不過您安裝的 [mod](/docs/zh-TW/plugins/mods/overview) 仍可核准[其中部分呼叫](/docs/zh-TW/permissions#precedence-among-rules-hooks-and-mods)。
105
106在 `default` 模式中不需要核准的呼叫無論您是否列出都會執行。這些呼叫包括[唯讀 Bash 命令](/docs/zh-TW/permissions#read-only-commands)、不在執行前詢問的工具(如 `Agent`),以及工作目錄內的檔案讀取。要將工具從請求中完全移除,請將其裸名稱新增到 `disallowedTools`。
113 107
114<Warning>108> [!WARNING]
115 **`allowed_tools` 不限制 `bypassPermissions`。** `allowed_tools` 預先批准您列出的工具。其他未列出的工具不符合任何允許規則,會進入權限模式,其中 `bypassPermissions` 會批准它們。將 `allowed_tools=["Read"]` 與 `permission_mode="bypassPermissions"` 一起設定仍會批准每個工具,包括 `Bash`、`Write` 和 `Edit`。如果您需要 `bypassPermissions` 但想要阻止特定工具,請使用 `disallowed_tools`。109>
116</Warning>110> **`allowed_tools` 不限制 `bypassPermissions`。** `allowed_tools` 預先批准您列出的工具。其他未列出的工具不符合任何允許規則,會進入權限模式,其中 `bypassPermissions` 會批准它們。將 `allowed_tools=["Read"]` 與 `permission_mode="bypassPermissions"` 一起設定仍會批准每個工具,包括 `Bash`、`Write` 和 `Edit`。如果您需要 `bypassPermissions` 但想要阻止特定工具,請使用 `disallowed_tools`。
117 111
118您也可以在 `.claude/settings.json` 中以宣告方式設定允許、拒絕和詢問規則。當啟用 `project` 設定來源時會讀取這些規則,預設 `query()` 選項就是這樣。如果您明確設定 `setting_sources`(TypeScript:`settingSources`),請包含 `"project"` 以便它們適用。請參閱[權限設定](/docs/zh-TW/settings-reference#permission-settings)以了解規則語法。112您也可以在 `.claude/settings.json` 中以宣告方式設定允許、拒絕和詢問規則。當啟用 `project` 設定來源時會讀取這些規則,預設 `query()` 選項就是這樣。如果您明確設定 `setting_sources`(TypeScript:`settingSources`),請包含 `"project"` 以便它們適用。請參閱[權限設定](/docs/zh-TW/settings-reference#permission-settings)以了解規則語法。
119 113
120<h2 id="permission-modes">114## 權限模式
121 權限模式
122</h2>
123 115
124權限模式提供對 Claude 如何使用工具的全域控制。您可以在呼叫 `query()` 時設定權限模式,或在串流工作階段期間動態變更它。116權限模式提供對 Claude 如何使用工具的全域控制。您可以在呼叫 `query()` 時設定權限模式,或在串流工作階段期間動態變更它。
125 117
126在 Claude Code v2.1.302 或更新版本中,除非您設定了權限模式,或應用程式從其設定檔中的 [`permissions.defaultMode`](/docs/zh-TW/settings-reference#permissions-defaultmode) 取得權限模式,否則您的應用程式會以 `default` 模式啟動。在 `default` 模式中,除非您透過允許規則、hook、`canUseTool` 回呼或權限提示工具核准,否則 Claude Code 會拒絕任何需要核准的工具呼叫。如果工具呼叫遭到拒絕,請參閱[在 `claude -p` 和 Agent SDK 執行中工具呼叫遭拒](/docs/zh-TW/permission-modes#which-mode-a-non-interactive-run-starts-in)。118在 Claude Code v2.1.302 或更新版本中,除非您設定了權限模式,或應用程式從其設定檔中的 [`permissions.defaultMode`](/docs/zh-TW/settings-reference#permissions-defaultmode) 取得權限模式,否則您的應用程式會以 `default` 模式啟動。在 `default` 模式中,除非您透過允許規則、hook、`canUseTool` 回呼或權限提示工具核准,否則 Claude Code 會拒絕任何需要核准的工具呼叫。如果工具呼叫遭到拒絕,請參閱[在 `claude -p` 和 Agent SDK 執行中工具呼叫遭拒](/docs/zh-TW/permission-modes#which-mode-a-non-interactive-run-starts-in)。
127 119
128<h3 id="available-modes">120### 可用模式
129 可用模式
130</h3>
131 121
132SDK 支援這些權限模式:122SDK 支援這些權限模式:
133 123
134| 模式 | 說明 | 工具行為 |124| 模式 | 說明 | 工具行為 |
135| :- | :- | :- |125| :- | :- | :- |
136| `default` | 標準權限行為 | 無模式型自動核准;需要核准且不符合任何允許規則的呼叫會觸發您的 `canUseTool` 回呼 |126| `default` | 標準權限行為 | 無模式型自動核准;需要核准且不符合任何允許規則的呼叫會觸發您的 `canUseTool` 回呼 |
137| `dontAsk` | 拒絕而非提示 | 任何原本會提示的呼叫都會被拒絕。由 `allowed_tools` 或規則核准的呼叫會執行,在 `default` 模式中不需要核准的呼叫也會執行;您的組織[設定為 `ask`](/docs/zh-TW/mcp#organization-controls-on-connector-tools) 的連接器工具和需要使用者互動的工具會被拒絕,即使您已預先核准它們,[從網路路徑讀取](/docs/zh-TW/permissions#network-paths)以及針對[關鍵路徑](/docs/zh-TW/permission-modes#critical-paths)的 `rm` 和 `rmdir` 移除也會被拒絕。`canUseTool` 永遠不會被呼叫 |127| `dontAsk` | 拒絕而非提示 | 任何原本會提示的呼叫都會被拒絕,不過您安裝的 [mod](/docs/zh-TW/plugins/mods/overview) 仍可核准[其中部分呼叫](/docs/zh-TW/permissions#precedence-among-rules-hooks-and-mods)。由 `allowed_tools` 或規則核准的呼叫會執行,在 `default` 模式中不需要核准的呼叫也會執行。您的組織[設定為 `ask`](/docs/zh-TW/mcp#organization-controls-on-connector-tools) 的連接器工具和需要使用者互動的工具會被拒絕,即使您已預先核准它們。[從網路路徑讀取](/docs/zh-TW/permissions#network-paths)以及針對[關鍵路徑](/docs/zh-TW/permission-modes#critical-paths)的 `rm` 和 `rmdir` 移除也會被拒絕,即使您已預先核准它們。`canUseTool` 永遠不會被呼叫 |
138| `acceptEdits` | 自動接受檔案編輯 | 檔案編輯和[檔案系統操作](#accept-edits-mode-acceptedits)(`mkdir`、`rm`、`mv` 等)會自動被核准 |128| `acceptEdits` | 自動接受檔案編輯 | 檔案編輯和[檔案系統操作](#accept-edits-mode-acceptedits)(`mkdir`、`rm`、`mv` 等)會自動被核准 |
139| `bypassPermissions` | 略過權限檢查 | 工具執行時不會出現權限提示,除了[沒有任何模式自動核准的動作](/docs/zh-TW/permission-modes#actions-no-mode-auto-approves)。請謹慎使用 |129| `bypassPermissions` | 略過權限檢查 | 工具執行時不會出現權限提示,除了[沒有任何模式自動核准的動作](/docs/zh-TW/permission-modes#actions-no-mode-auto-approves)。請謹慎使用 |
140| `plan` | 規劃模式 | Claude 在不編輯您的原始檔案的情況下探索和規劃;檔案編輯永遠不會自動被核准,並透過您的 `canUseTool` 回呼提示 |130| `plan` | 規劃模式 | Claude 在不編輯您的原始檔案的情況下探索和規劃;檔案編輯永遠不會自動被核准,並透過您的 `canUseTool` 回呼提示 |
141| `auto` | 模型分類核准 | 模型分類器檢閱殼層命令和網路請求等動作,允許或阻止它檢閱的每一個。請參閱 [Auto 模式](/docs/zh-TW/permission-modes#eliminate-prompts-with-auto-mode)以了解可用性和決策順序 |131| `auto` | 模型分類核准 | 模型分類器檢閱殼層命令和網路請求等動作,允許或阻止它檢閱的每一個。請參閱 [Auto 模式](/docs/zh-TW/permission-modes#eliminate-prompts-with-auto-mode)以了解可用性和決策順序 |
142 132
143<Warning>133> [!WARNING]
144 **Subagent 繼承:** subagent 在父工作階段的權限模式中執行,除非您在其 [`AgentDefinition`](/docs/zh-TW/agent-sdk/typescript#agentdefinition) 上設定 `permissionMode`,且父工作階段處於 `default`、`dontAsk` 或 `plan` 模式。即使如此,Claude Code 也永遠不會套用 `"bypassPermissions"` 值,且只有在該 subagent [可使用自動模式](/docs/zh-TW/permission-modes#eliminate-prompts-with-auto-mode)時才會套用 `"auto"` 值。subagent 只有在父工作階段本身處於 `bypassPermissions` 模式時,才會在該模式中執行。`bypassPermissions` 例外需要 Claude Code v2.1.267 或更新版本。134>
135> **Subagent 繼承:** subagent 在父工作階段的權限模式中執行,除非您在其 [`AgentDefinition`](/docs/zh-TW/agent-sdk/typescript#agentdefinition) 上設定 `permissionMode`,且父工作階段處於 `default`、`dontAsk` 或 `plan` 模式。即使如此,Claude Code 也永遠不會套用 `"bypassPermissions"` 值,且只有在該 subagent [可使用自動模式](/docs/zh-TW/permission-modes#eliminate-prompts-with-auto-mode)時才會套用 `"auto"` 值。subagent 只有在父工作階段本身處於 `bypassPermissions` 模式時,才會在該模式中執行。`bypassPermissions` 例外需要 Claude Code v2.1.267 或更新版本。
136>
137> 子代理可能具有不同的系統提示和比您的主代理更少受限的行為,因此繼承 `bypassPermissions` 會授予它們完整的自主系統存取權。[沒有任何模式自動核准的動作](/docs/zh-TW/permission-modes#actions-no-mode-auto-approves)仍然適用。
145 138
146 子代理可能具有不同的系統提示和比您的主代理更少受限的行為,因此繼承 `bypassPermissions` 會授予它們完整的自主系統存取權。[沒有任何模式自動核准的動作](/docs/zh-TW/permission-modes#actions-no-mode-auto-approves)仍然適用。139### 設定權限模式
147</Warning>
148
149<h3 id="set-permission-mode">
150 設定權限模式
151</h3>
152 140
153您可以在開始查詢時設定一次權限模式,或在工作階段進行中動態變更它。141您可以在開始查詢時設定一次權限模式,或在工作階段進行中動態變更它。
154 142
155<Tabs>143**在查詢時**
156 <Tab title="在查詢時">144
157 在建立查詢時傳遞 `permission_mode`(Python)或 `permissionMode`(TypeScript)。145在建立查詢時傳遞 `permission_mode`(Python)或 `permissionMode`(TypeScript)。
158 146
159 <CodeGroup>147```python Python theme={null}
160 ```python Python theme={null}148import asyncio
161 import asyncio149from claude_agent_sdk import query, ClaudeAgentOptions
162 from claude_agent_sdk import query, ClaudeAgentOptions
163 150
164 151
165 async def main():152async def main():
166 async for message in query(153 async for message in query(
167 prompt="Help me refactor this code",154 prompt="Help me refactor this code",
168 options=ClaudeAgentOptions(155 options=ClaudeAgentOptions(
173 print(message.result)160 print(message.result)
174 161
175 162
176 asyncio.run(main())163asyncio.run(main())
177 ```164```
178 165
179 ```typescript TypeScript theme={null}166```typescript TypeScript theme={null}
180 import { query } from "@anthropic-ai/claude-agent-sdk";167import { query } from "@anthropic-ai/claude-agent-sdk";
181 168
182 async function main() {169async function main() {
183 for await (const message of query({170 for await (const message of query({
184 prompt: "Help me refactor this code",171 prompt: "Help me refactor this code",
185 options: {172 options: {
190 console.log(message.result);177 console.log(message.result);
191 }178 }
192 }179 }
193 }180}
194 181
195 main();182main();
196 ```183```
197 </CodeGroup>
198 </Tab>
199 184
200 <Tab title="在串流期間">185**在串流期間**
201 呼叫 `set_permission_mode()`(Python)或 `setPermissionMode()`(TypeScript)以在工作階段中途變更模式。新模式會立即對所有後續工具請求生效。這讓您可以從限制性開始,並隨著信任建立而放寬權限,例如在檢閱 Claude 的初始方法後切換到 `acceptEdits`。
202 186
203 <CodeGroup>187呼叫 `set_permission_mode()`(Python)或 `setPermissionMode()`(TypeScript)以在工作階段中途變更模式。新模式會立即對所有後續工具請求生效。這讓您可以從限制性開始,並隨著信任建立而放寬權限,例如在檢閱 Claude 的初始方法後切換到 `acceptEdits`。
204 ```python Python theme={null}
205 import asyncio
206 from claude_agent_sdk import ClaudeSDKClient, ClaudeAgentOptions
207 188
189```python Python theme={null}
190import asyncio
191from claude_agent_sdk import ClaudeSDKClient, ClaudeAgentOptions
208 192
209 async def main():193
194async def main():
210 async with ClaudeSDKClient(195 async with ClaudeSDKClient(
211 options=ClaudeAgentOptions(196 options=ClaudeAgentOptions(
212 permission_mode="default", # Start in default mode197 permission_mode="default", # Start in default mode
223 print(message.result)208 print(message.result)
224 209
225 210
226 asyncio.run(main())211asyncio.run(main())
227 ```212```
228 213
229 ```typescript TypeScript theme={null}214```typescript TypeScript theme={null}
230 import { query } from "@anthropic-ai/claude-agent-sdk";215import { query } from "@anthropic-ai/claude-agent-sdk";
231 216
232 async function main() {217async function main() {
233 const q = query({218 const q = query({
234 prompt: "Help me refactor this code",219 prompt: "Help me refactor this code",
235 options: {220 options: {
246 console.log(message.result);231 console.log(message.result);
247 }232 }
248 }233 }
249 }234}
250 235
251 main();236main();
252 ```237```
253 </CodeGroup>
254 </Tab>
255</Tabs>
256 238
257<h3 id="mode-details">239### 模式詳細資訊
258 模式詳細資訊
259</h3>
260 240
261<h4 id="accept-edits-mode-acceptedits">241#### 接受編輯模式(`acceptEdits`)
262 接受編輯模式(`acceptEdits`)
263</h4>
264 242
265自動核准檔案操作,讓 Claude 可以編輯程式碼而不會提示。其他工具(例如不是檔案系統操作的 Bash 命令)仍然需要正常權限。243自動核准檔案操作,讓 Claude 可以編輯程式碼而不會提示。其他工具(例如不是檔案系統操作的 Bash 命令)仍然需要正常權限。
266 244
277 255
278**使用時機:** 您信任 Claude 的編輯並想要更快的迭代,例如在原型設計期間或在隔離目錄中工作時。256**使用時機:** 您信任 Claude 的編輯並想要更快的迭代,例如在原型設計期間或在隔離目錄中工作時。
279 257
280<h4 id="don’t-ask-mode-dontask">258#### 不要詢問模式(`dontAsk`)
281 不要詢問模式(`dontAsk`)259
282</h4>260將任何權限提示轉換為拒絕,而不呼叫 `canUseTool`,不過您安裝的 [mod](/docs/zh-TW/plugins/mods/overview) 仍可核准[其中部分呼叫](/docs/zh-TW/permissions#precedence-among-rules-hooks-and-mods)。由 `allowed_tools`、`settings.json` 允許規則或 hook 預先核准的工具會正常執行。在 `default` 模式中不需要核准的呼叫也會執行,例如在您的工作目錄內的檔案讀取和對 `Agent` 的呼叫。
283 261
284將任何權限提示轉換為拒絕,而不呼叫 `canUseTool`。由 `allowed_tools`、`settings.json` 允許規則或 hook 預先核准的工具會正常執行,在 `default` 模式中不需要核准的呼叫也會執行,例如在您的工作目錄內的檔案讀取和對 `Agent` 的呼叫。您的組織[設定為 `ask`](/docs/zh-TW/mcp#organization-controls-on-connector-tools) 的連接器工具、需要使用者互動的工具、[從網路路徑讀取](/docs/zh-TW/permissions#network-paths),以及針對[關鍵路徑](/docs/zh-TW/permission-modes#critical-paths)的 `rm` 和 `rmdir` 移除即使符合允許規則也會被拒絕。`PreToolUse` hook 允許也不會清除關鍵路徑移除或從網路路徑讀取。262您的組織[設定為 `ask`](/docs/zh-TW/mcp#organization-controls-on-connector-tools) 的連接器工具、需要使用者互動的工具、[從網路路徑讀取](/docs/zh-TW/permissions#network-paths),以及針對[關鍵路徑](/docs/zh-TW/permission-modes#critical-paths)的 `rm` 和 `rmdir` 移除即使符合允許規則也會被拒絕。`PreToolUse` hook 允許也不會清除關鍵路徑移除或從網路路徑讀取。
285 263
286**使用時機:** 您想要為無頭代理提供固定、明確的工具表面,並偏好硬拒絕而非無聲依賴 `canUseTool` 不存在。264**使用時機:** 您想要為無頭代理提供固定、明確的工具表面,並偏好硬拒絕而非無聲依賴 `canUseTool` 不存在。
287 265
288<h4 id="bypass-permissions-mode-bypasspermissions">266#### 略過權限模式(`bypassPermissions`)
289 略過權限模式(`bypassPermissions`)
290</h4>
291 267
292自動核准工具使用而不提示,除了下面警告中列出的情況。鉤子仍然執行,如果需要可以阻止操作。在 Linux 和 macOS 上,Claude Code 拒絕在此模式下以 root 身份或在[已識別的沙箱](/docs/zh-TW/permission-modes#skip-all-checks-with-bypasspermissions-mode)外的 `sudo` 下啟動,查詢在第一個回合之前失敗。268自動核准工具使用而不提示,除了下面警告中列出的情況。鉤子仍然執行,如果需要可以阻止操作。在 Linux 和 macOS 上,Claude Code 拒絕在此模式下以 root 身份或在[已識別的沙箱](/docs/zh-TW/permission-modes#skip-all-checks-with-bypasspermissions-mode)外的 `sudo` 下啟動,查詢在第一個回合之前失敗。
293 269
294<Warning>270> [!WARNING]
295 請極其謹慎使用。Claude 在此模式中具有完整的系統存取權。僅在您信任所有可能操作的受控環境中使用。271>
296 272> 請極其謹慎使用。Claude 在此模式中具有完整的系統存取權。僅在您信任所有可能操作的受控環境中使用。
297 `allowed_tools` 不會限制此模式。每個工具都會被核准,而不僅僅是您列出的工具。這些控制仍然適用:273>
298 274> `allowed_tools` 不會限制此模式。每個工具都會被核准,而不僅僅是您列出的工具。這些控制仍然適用:
299 * 拒絕規則、明確的 `ask` 規則和鉤子在模式檢查之前被評估,仍然可以阻止工具。275>
300 * 您的組織[設定為 `ask`](/docs/zh-TW/mcp#organization-controls-on-connector-tools) 的連接器工具、需要使用者互動的工具,以及針對[關鍵路徑](/docs/zh-TW/permission-modes#critical-paths)的 `rm` 和 `rmdir` 移除仍然會進入您的 `canUseTool` 回呼。276> * 拒絕規則、明確的 `ask` 規則和鉤子在模式檢查之前被評估,仍然可以阻止工具。
301 * [跨工作階段訊息保護措施](/docs/zh-TW/permission-modes#skip-all-checks-with-bypasspermissions-mode)仍然適用。277> * 您的組織[設定為 `ask`](/docs/zh-TW/mcp#organization-controls-on-connector-tools) 的連接器工具、需要使用者互動的工具,以及針對[關鍵路徑](/docs/zh-TW/permission-modes#critical-paths)的 `rm` 和 `rmdir` 移除仍然會進入您的 `canUseTool` 回呼。
302</Warning>278> * [跨工作階段訊息保護措施](/docs/zh-TW/permission-modes#skip-all-checks-with-bypasspermissions-mode)仍然適用。
303 279
304<h4 id="plan-mode-plan">280#### 規劃模式(`plan`)
305 規劃模式(`plan`)
306</h4>
307 281
308Claude 探索程式碼庫並產生計畫,而不編輯您的原始檔案。唯讀工具的執行方式與在 `default` 權限模式中相同。282Claude 探索程式碼庫並產生計畫,而不編輯您的原始檔案。唯讀工具的執行方式與在 `default` 權限模式中相同。
309 283
315 289
316**使用時機:** 您想要 Claude 提議變更而不執行它們,例如在程式碼審查期間或當您需要在進行變更之前核准變更時。290**使用時機:** 您想要 Claude 提議變更而不執行它們,例如在程式碼審查期間或當您需要在進行變更之前核准變更時。
317 291
318<h4 id="auto-mode-auto">292#### 自動模式(`auto`)
319 自動模式(`auto`)
320</h4>
321 293
322分類器模型會在 shell 命令和網路請求等動作執行之前檢閱它們,並允許或阻止它檢閱的每一個動作。如需了解自動模式所需的模型和提供者,以及它評估動作的順序,請參閱[使用自動模式消除權限提示](/docs/zh-TW/permission-modes#eliminate-prompts-with-auto-mode)。294分類器模型會在 shell 命令和網路請求等動作執行之前檢閱它們,並允許或阻止它檢閱的每一個動作。如需了解自動模式所需的模型和提供者,以及它評估動作的順序,請參閱[使用自動模式消除權限提示](/docs/zh-TW/permission-modes#eliminate-prompts-with-auto-mode)。
323 295
328 300
329在 `set_model()`、`setModel()` 或 `applyFlagSettings()` 呼叫後變更為 `default` 模式,需要 Claude Code v2.1.299 或更新版本。301在 `set_model()`、`setModel()` 或 `applyFlagSettings()` 呼叫後變更為 `default` 模式,需要 Claude Code v2.1.299 或更新版本。
330 302
331<h2 id="related-resources">303## 相關資源
332 相關資源
333</h2>
334 304
335如需了解權限評估流程中的其他步驟:305如需了解權限評估流程中的其他步驟:
336 306