6 6
7> 使用權限模式、hooks 和宣告式允許/拒絕規則來控制您的代理程式如何使用工具。7> 使用權限模式、hooks 和宣告式允許/拒絕規則來控制您的代理程式如何使用工具。
8 8
9Claude Agent SDK 提供權限控制來管理 Claude 如何使用工具。使用權限模式和規則來定義自動允許的內容,並使用 [`canUseTool` 回呼](/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<h2 id="how-permissions-are-evaluated">
12 權限如何被評估12 權限如何被評估
13</h2>13</h2>
14 14
15當 Claude 請求工具時,SDK 會按照以下順序檢查權限:15當 Claude 請求一個工具時,SDK 按照以下順序檢查權限:
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 結果如何,這些規則都會被評估。返回 `allow` 的 `PreToolUse` hook 也無法批准針對[關鍵路徑](/docs/zh-TW/permission-modes#critical-paths)的 `rm` 或 `rmdir` 移除。19 首先執行 [hooks](/docs/zh-TW/agent-sdk/hooks)。Hook 可以直接拒絕呼叫或將其傳遞下去。返回 `allow` 的 hook 不會跳過下面的拒絕和詢問規則;無論 hook 結果如何,這些規則都會被評估。`PreToolUse` hook allow 也無法批准針對 [關鍵路徑](/docs/zh-TW/permission-modes#critical-paths) 的 `rm` 或 `rmdir` 移除。
20 </Step>20 </Step>
21 21
22 <Step title="拒絕規則">22 <Step title="拒絕規則">
23 檢查 `deny` 規則(來自 `disallowed_tools` 和 [settings.json](/docs/zh-TW/settings-reference#permission-settings))。如果拒絕規則符合,工具會被阻止,即使在 `bypassPermissions` 模式下也是如此。裸名稱拒絕規則(如 `Bash`)會在此評估開始前將工具從 Claude 的上下文中移除,因此只有範圍規則(如 `Bash(rm *)`)會在此步驟中被檢查。23 檢查 `deny` 規則(來自 `disallowed_tools` 和 [settings.json](/docs/zh-TW/settings-reference#permission-settings))。如果拒絕規則匹配,工具會被阻止,即使在 `bypassPermissions` 模式下也是如此。裸名稱拒絕規則(如 `Bash`)會在此評估開始前將工具從 Claude 的上下文中移除,因此只有作用域規則(如 `Bash(rm *)`)會在此步驟中被檢查。
24 </Step>24 </Step>
25 25
26 <Step title="詢問規則">26 <Step title="詢問規則">
27 檢查來自 [settings.json](/docs/zh-TW/settings-reference#permission-settings) 的 `ask` 規則。如果詢問規則符合,呼叫會傳遞到您的 [`canUseTool` 回呼](/docs/zh-TW/agent-sdk/user-input) 以進行確認,即使在 `bypassPermissions` 模式下也是如此。27 檢查來自 [settings.json](/docs/zh-TW/settings-reference#permission-settings) 的 `ask` 規則。如果詢問規則匹配,呼叫會傳遞到您的 [`canUseTool` 回呼](/docs/zh-TW/agent-sdk/user-input) 以進行確認,即使在 `bypassPermissions` 模式下也是如此。
28 28
29 需要使用者互動的工具行為相同:`AskUserQuestion` 和 MCP 工具(其伺服器設定 [`_meta["anthropic/requiresUserInteraction"]`](/docs/zh-TW/mcp#require-approval-for-a-specific-tool))總是會傳遞到回呼,即使允許規則符合時也是如此。在 `dontAsk` 模式下,兩種情況都會被拒絕,因為該模式永遠不會提示。MCP 註解需要 Claude Code v2.1.199 或更新版本。29 需要使用者互動的工具行為相同:`AskUserQuestion` 和 MCP 工具(其伺服器設定了 [`_meta["anthropic/requiresUserInteraction"]`](/docs/zh-TW/mcp#require-approval-for-a-specific-tool))總是傳遞到回呼,即使當 allow 規則匹配時也是如此。在 `dontAsk` 模式下,兩種情況都會被拒絕,因為該模式永遠不會提示。MCP 註解需要 Claude Code v2.1.199 或更新版本。
30 30
31 [claude.ai 連接器](/docs/zh-TW/mcp#organization-controls-on-connector-tools) 工具(您的組織已設定為 `ask`)也會在此步驟離開流程。每個呼叫都會傳遞到回呼,即使在 `bypassPermissions` 模式下,即使允許規則符合時也是如此。回呼會收到原因 `Your organization requires approval for this tool`。在 `dontAsk` 模式下,呼叫會被拒絕,因為該模式永遠不會提示。31 您的組織設定為 `ask` 的 [claude.ai connector](/docs/zh-TW/mcp#organization-controls-on-connector-tools) 工具也會在此步驟離開流程。每個呼叫都會傳遞到回呼,即使在 `bypassPermissions` 模式下,即使當 allow 規則匹配時也是如此。回呼會收到原因 `Your organization requires approval for this tool`。在 `dontAsk` 模式下,呼叫會被拒絕,因為該模式永遠不會提示。
32 </Step>32 </Step>
33 33
34 <Step title="權限模式">34 <Step title="權限模式">
35 應用活躍的[權限模式](#permission-modes):35 應用活躍的 [權限模式](#permission-modes):
36 36
37 * 在 `bypassPermissions` 模式下,Claude Code 批准到達此步驟的所有內容,除了針對[關鍵路徑](/docs/zh-TW/permission-modes#critical-paths)的 `rm` 和 `rmdir` 移除,這些會傳遞到回呼。37 * 在 `bypassPermissions` 模式下,Claude Code 批准到達此步驟的所有內容,除了針對 [關鍵路徑](/docs/zh-TW/permission-modes#critical-paths) 的 `rm` 和 `rmdir` 移除,這些會傳遞下去。
38 * 在 `acceptEdits` 模式下,Claude Code 批准[接受編輯模式](#accept-edits-mode-acceptedits)下列出的檔案操作。38 * 在 `acceptEdits` 模式下,Claude Code 批准 [接受編輯模式](#accept-edits-mode-acceptedits) 下列出的檔案操作。
39 * 在 `plan` 模式下,Claude Code 將檔案編輯和 shell 寫入工具傳送到您的 `canUseTool` 回呼,無論允許規則如何,因此在規劃時寫入操作無法自動批准。39 * 在 `plan` 模式下,Claude Code 將檔案編輯和 shell 寫入工具發送到您的 `canUseTool` 回呼,無論 allow 規則如何,因此在規劃時寫入操作無法自動批准。
40 * 在其他模式下,請求會傳遞到回呼。40 * 在其他模式下,請求會傳遞下去。
41 </Step>41 </Step>
42 42
43 <Step title="允許規則">43 <Step title="允許規則">
44 檢查 `allow` 規則(來自 `allowed_tools` 和 settings.json)。如果規則符合,工具會被批准。呼叫工具本身批准的情況也會在此步驟解決,無需規則:例如在您的工作目錄內的檔案讀取或[唯讀 Bash 命令](/docs/zh-TW/permissions#read-only-commands)。針對[關鍵路徑](/docs/zh-TW/permission-modes#critical-paths)的 `rm` 和 `rmdir` 移除永遠不會被允許規則批准:它們在提示的模式下到達您的回呼,在 Claude Code v2.1.218 或更新版本的 `auto` 模式下進入[分類器](/docs/zh-TW/permission-modes#eliminate-prompts-with-auto-mode),並在 `dontAsk` 模式下被拒絕。44 檢查 `allow` 規則(來自 `allowed_tools` 和 settings.json)。如果規則匹配,工具會被批准。工具自行批准的呼叫也會在此步驟解決,無需規則:例如在您的工作目錄內的檔案讀取或 [唯讀 Bash 命令](/docs/zh-TW/permissions#read-only-commands)。針對 [關鍵路徑](/docs/zh-TW/permission-modes#critical-paths) 的 `rm` 和 `rmdir` 移除永遠不會被 allow 規則批准:它們在提示的模式下到達您的回呼,在 Claude Code v2.1.218 或更新版本的 `auto` 模式下進入 [分類器](/docs/zh-TW/permission-modes#eliminate-prompts-with-auto-mode),並在 `dontAsk` 模式下被拒絕。
45 </Step>45 </Step>
46 46
47 <Step title="canUseTool 回呼">47 <Step title="canUseTool 回呼">
48 如果上述任何步驟都未解決,請呼叫您的 [`canUseTool` 回呼](/docs/zh-TW/agent-sdk/user-input) 以做出決定。在 `dontAsk` 模式下,此步驟會被跳過,工具會被拒絕。48 如果上述任何步驟都未解決,請呼叫您的 [`canUseTool` 回呼](/docs/zh-TW/agent-sdk/user-input) 以獲得決定。在 `dontAsk` 模式下,此步驟會被跳過,工具會被拒絕。
49 49
50 在 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 或更新版本。50 在 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 或更新版本。
51 </Step>51 </Step>
52</Steps>52</Steps>
53 53
54<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" />54<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" />
55 55
56<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" />56<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" />
57 57
58如果您在 TypeScript SDK 預期評估順序會在諮詢回呼之前自動批准呼叫的配置中傳遞 `canUseTool` 回呼,SDK 會在建構查詢時發出一次 Node.js 程序警告。警告的代碼是 `CLAUDE_SDK_CAN_USE_TOOL_SHADOWED`。兩種配置會觸發它:58如果您在 TypeScript SDK 期望評估順序在諮詢回呼之前自動批准呼叫的設定中傳遞 `canUseTool` 回呼,SDK 會在構造查詢時發出一次 Node.js 程序警告。警告的代碼是 `CLAUDE_SDK_CAN_USE_TOOL_SHADOWED`。兩個設定會觸發它:
59 59
60* `permissionMode: 'bypassPermissions'`,它會自動批准到達權限模式步驟的每個呼叫,除了[任何模式都不會自動批准的動作](/docs/zh-TW/permission-modes#actions-no-mode-auto-approves)60* `permissionMode: 'bypassPermissions'`,它自動批准到達權限模式步驟的每個呼叫,除了 [任何模式都不自動批准的操作](/docs/zh-TW/permission-modes#actions-no-mode-auto-approves)
61* 每個裸 `allowedTools` 項目,例如 `"Read"`,它會在諮詢回呼之前自動批准整個工具,除了[任何模式都不會自動批准的動作](/docs/zh-TW/permission-modes#actions-no-mode-auto-approves)61* 每個裸 `allowedTools` 條目,例如 `"Read"`,它在諮詢回呼之前自動批准整個工具,除了 [任何模式都不自動批准的操作](/docs/zh-TW/permission-modes#actions-no-mode-auto-approves)
62 62
63具有指定符的項目(例如 `Bash(ls *)`)和 `acceptEdits` 模式不會觸發它,來自設定檔的允許規則對檢查不可見。63具有指定符的條目(如 `Bash(ls *)`)和 `acceptEdits` 模式不會觸發它,來自設定檔的 allow 規則對檢查不可見。
64 64
65使用 `process.on('warning', ...)` 進行監聽,並匹配代碼以記錄或抑制它。若要無論模式和規則如何都控制每個工具呼叫,請改用 [`PreToolUse` hook](/docs/zh-TW/agent-sdk/hooks)。65使用 `process.on('warning', ...)` 進行監聽並匹配代碼以記錄或抑制它。要無論模式和規則如何都控制每個工具呼叫,請改用 [`PreToolUse` hook](/docs/zh-TW/agent-sdk/hooks)。
66 66
67本頁重點關注 **允許和拒絕規則** 以及 **權限模式**。對於其他步驟:67此頁面重點關注 **allow 和 deny 規則** 以及 **權限模式**。對於其他步驟:
68 68
69* **Hooks:** 執行自訂程式碼以允許、拒絕或修改工具請求。請參閱 [使用 hooks 控制執行](/docs/zh-TW/agent-sdk/hooks)。69* **Hooks:** 執行自訂程式碼以允許、拒絕或修改工具請求。請參閱 [使用 hooks 控制執行](/docs/zh-TW/agent-sdk/hooks)。
70* **canUseTool 回呼:** 在執行時提示使用者核准,當沒有較早的步驟解決呼叫時。請參閱 [處理核准和使用者輸入](/docs/zh-TW/agent-sdk/user-input)。70* **canUseTool 回呼:** 在執行時提示使用者批准,當沒有較早的步驟解決呼叫時。請參閱 [處理批准和使用者輸入](/docs/zh-TW/agent-sdk/user-input)。
71 71
72<h2 id="allow-and-deny-rules">72<h2 id="allow-and-deny-rules">
73 允許和拒絕規則73 允許和拒絕規則
74</h2>74</h2>
75 75
76`allowed_tools` 和 `disallowed_tools`(TypeScript:`allowedTools` / `disallowedTools`)將條目新增到上述評估流程中的允許和拒絕規則清單。如果您在 `allowed_tools` 中命名其中一個[任務追蹤工具](/docs/zh-TW/agent-sdk/todo-tracking#model-availability),Claude Code 也會選擇加入工作階段。未列在 `allowed_tools` 中的任何其他工具仍然可供 Claude 使用,並且對其的呼叫若需要批准會通過權限模式。拒絕規則的行為取決於它們是命名工具還是在工具內限定模式。76`allowed_tools` 和 `disallowed_tools`(TypeScript:`allowedTools` / `disallowedTools`)在上述評估流程中新增允許和拒絕規則清單的項目。如果您在 `allowed_tools` 中命名其中一個[任務追蹤工具](/docs/zh-TW/agent-sdk/todo-tracking#model-availability),Claude Code 也會選擇加入該工作階段。任何未列在 `allowed_tools` 中的其他工具仍可供 Claude 使用,對其進行的需要批准的呼叫會進入權限模式。拒絕規則的行為取決於它們是命名工具還是在工具內限定模式。
77 77
78| 選項 | 效果 |78| 選項 | 效果 |
79| :-------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------ |79| :-------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------- |
80| `allowed_tools=["Read", "Grep"]` | `Read` 和 `Grep` 會自動批准。此處未列出的其他工具仍然存在,並且對其的呼叫若需要批准會通過權限模式和 `canUseTool`。 |80| `allowed_tools=["Read", "Grep"]` | `Read` 和 `Grep` 會自動批准。此處未列出的其他工具仍然存在,對它們進行的需要批准的呼叫會進入權限模式和 `canUseTool`。 |
81| `disallowed_tools=["Bash"]` | `Bash` 工具定義會從請求中移除。Claude 看不到該工具,無法嘗試使用它。 |81| `disallowed_tools=["Bash"]` | `Bash` 工具定義會從請求中移除。Claude 看不到該工具,無法嘗試使用它。 |
82| `disallowed_tools=["Bash(rm *)"]` | `Bash` 保持可用。符合 `rm *` [如所寫](/docs/zh-TW/permissions#bash-rule-limits) 的呼叫在每個權限模式中都會被拒絕,包括 `bypassPermissions`。其他 `Bash` 呼叫(包括 `/bin/rm`)會通過權限模式。 |82| `disallowed_tools=["Bash(rm *)"]` | `Bash` 保持可用。符合 `rm *` [如所寫](/docs/zh-TW/permissions#bash-rule-limits)的呼叫在每個權限模式中都會被拒絕,包括 `bypassPermissions`。其他 `Bash` 呼叫(包括 `/bin/rm`)會進入權限模式。 |
83| `disallowed_tools=["*"]` | 每個工具定義都會從請求中移除。工具名稱萬用字元在拒絕規則中受支援:`"*"` 符合每個工具,`"mcp__*"` 符合所有伺服器上的每個 MCP 工具。 |83| `disallowed_tools=["*"]` | 每個工具定義都會從請求中移除。拒絕規則支援工具名稱萬用字元:`"*"` 符合每個工具,`"mcp__*"` 符合所有伺服器上的每個 MCP 工具。 |
84 84
85允許規則只在字面 `mcp__<server>__` 前綴之後接受工具名稱萬用字元。伺服器段必須不含萬用字元,以便規則命名您設定的特定伺服器:`mcp__puppeteer__*` 符合來自 `puppeteer` 伺服器的每個工具,`mcp__github__get_*` 符合其 `get_` 工具。未錨定的條目(如 `allowed_tools=["*"]` 或 `allowed_tools=["mcp__*"]`)會被忽略並顯示啟動警告,不會自動批准任何內容。85允許規則僅在字面 `mcp__<server>__` 前綴之後接受工具名稱萬用字元。伺服器段必須無萬用字元,以便規則命名您設定的特定伺服器:`mcp__puppeteer__*` 符合來自 `puppeteer` 伺服器的每個工具,`mcp__github__get_*` 符合其 `get_` 工具。未錨定的項目(如 `allowed_tools=["*"]` 或 `allowed_tools=["mcp__*"]`)會被忽略並顯示啟動警告,不會自動批准任何內容。
86 86
87`Read` 和 `Edit` 的限定規則採用路徑模式。`Edit(path)` 規則管理所有寫入檔案的內建工具,包括 `Write` 和 `NotebookEdit`;`Write(path)` 規則永遠不會被檔案權限檢查符合。87`Read` 和 `Edit` 的限定規則採用路徑模式。`Edit(path)` 規則管理所有寫入檔案的內建工具,包括 `Write` 和 `NotebookEdit`;`Write(path)` 規則永遠不會被檔案權限檢查符合。
88 88
89使用 `//path` 表示絕對檔案系統路徑:`Edit(//secrets/**)` 的拒絕規則會阻止在磁碟上 `/secrets` 下任何位置的寫入。使用單個前導斜線,`Edit(/secrets/**)` 會在規則的來源處錨定。對於通過 `allowed_tools` 或 `disallowed_tools` 傳遞的規則,這表示工作階段的工作目錄,因此規則不會阻止磁碟上的 `/secrets`。請參閱 [Read 和 Edit 規則](/docs/zh-TW/permissions#read-and-edit) 以了解四種錨定形式以及來自設定檔案的規則如何解析。89使用 `//path` 表示絕對檔案系統路徑:`Edit(//secrets/**)` 的拒絕規則會阻止在磁碟上 `/secrets` 下任何位置的寫入。使用單個前導斜線時,`Edit(/secrets/**)` 會在規則的來源處錨定。對於透過 `allowed_tools` 或 `disallowed_tools` 傳遞的規則,這表示工作階段的工作目錄,因此規則不會阻止磁碟上的 `/secrets`。請參閱[讀取和編輯規則](/docs/zh-TW/permissions#read-and-edit)以了解四種錨定形式以及來自設定檔的規則如何解析。
90 90
91<Warning>91<Warning>
92 **自動批准的工具永遠不會到達 `canUseTool`。** 在任何較早步驟中批准的工具呼叫,由 `acceptEdits` 或 `bypassPermissions` 或允許規則批准,會跳過您的 `canUseTool` 回呼,因此您在那裡放置的權限檢查會被該工具無聲地略過。`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) 仍會到達回呼,即使允許規則符合時也是如此。在 `auto` 模式中,關鍵路徑移除會進入[分類器](/docs/zh-TW/permission-modes#eliminate-prompts-with-auto-mode) 而不是回呼,而此處列出的其他呼叫仍會到達它;分類器路由需要 Claude Code v2.1.218 或更新版本。在 `dontAsk` 模式中,這些呼叫會被拒絕,不會叫用回呼。92 **自動批准的工具永遠不會到達 `canUseTool`。** 在任何較早步驟中批准的工具呼叫,透過 `acceptEdits` 或 `bypassPermissions`,或透過允許規則,會跳過您的 `canUseTool` 回呼,因此您在那裡放置的權限檢查會被該工具無聲地繞過。`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)的移除仍會到達回呼,即使允許規則符合也是如此。在 `auto` 模式中,關鍵路徑移除會進入[分類器](/docs/zh-TW/permission-modes#eliminate-prompts-with-auto-mode)而不是回呼,而上面列出的其他呼叫仍會到達它;分類器路由需要 Claude Code v2.1.218 或更新版本。在 `dontAsk` 模式中,這些呼叫會被拒絕,不會呼叫回呼。
93 93
94 涵蓋範圍取決於條目的形式:像 `Read` 或 `mcp__github__get_issue` 這樣的裸名稱會自動批准對該工具的每個呼叫(除了上述例外),而像 `Bash(npm test *)` 這樣的限定規則只會自動批准符合的呼叫,其他 `Bash` 呼叫若需要批准仍會通過回呼。對於必須在每個工具呼叫上執行的檢查,請使用 [`PreToolUse` hook](/docs/zh-TW/agent-sdk/hooks):hook 在每個其他步驟之前執行,hook 拒絕甚至在 `bypassPermissions` 模式中也適用。94 涵蓋範圍取決於項目的形式:像 `Read` 或 `mcp__github__get_issue` 這樣的裸名稱會自動批准對該工具的每個呼叫,除了上述例外情況,而像 `Bash(npm test *)` 這樣的限定規則只會自動批准符合的呼叫,其他需要批准的 `Bash` 呼叫仍會進入回呼。對於必須在每個工具呼叫上執行的檢查,請使用 [`PreToolUse` hook](/docs/zh-TW/agent-sdk/hooks):hook 在每個其他步驟之前執行,hook 拒絕即使在 `bypassPermissions` 模式中也適用。
95</Warning>95</Warning>
96 96
97對於鎖定的代理程式,將 `allowedTools` 與 `permissionMode: "dontAsk"` 配對:97對於鎖定的代理,將 `allowedTools` 與 `permissionMode: "dontAsk"` 配對:
98 98
99```typescript theme={null}99```typescript theme={null}
100const options = {100const options = {
103};103};
104```104```
105 105
106列出的工具會被批准,除了[任何模式都不會自動批准的動作](/docs/zh-TW/permission-modes#actions-no-mode-auto-approves),並且其他任何會提示的呼叫都會被拒絕。在 `default` 模式中不需要批准的呼叫會執行,無論您是否列出它們,例如[唯讀 Bash 命令](/docs/zh-TW/permissions#read-only-commands)、不會在執行前詢問的工具(如 `Agent`),以及工作目錄內的檔案讀取。若要將工具完全置於 Claude 的範圍之外,請將其裸名稱新增到 `disallowedTools`。106列出的工具會被批准,除了[任何模式都不自動批准的動作](/docs/zh-TW/permission-modes#actions-no-mode-auto-approves),以及每個其他會提示的呼叫都會被拒絕。在 `default` 模式中不需要批准的呼叫會執行,無論您是否列出它們,例如[唯讀 Bash 命令](/docs/zh-TW/permissions#read-only-commands)、不在執行前詢問的工具(如 `Agent`),以及工作目錄內的檔案讀取。要將工具完全置於 Claude 的範圍之外,請將其裸名稱新增到 `disallowedTools`。
107 107
108<Warning>108<Warning>
109 **`allowed_tools` 不會限制 `bypassPermissions`。** `allowed_tools` 只會預先批准您列出的工具。未列出的工具不會被任何允許規則符合,並會通過權限模式,其中 `bypassPermissions` 會批准它們。將 `allowed_tools=["Read"]` 與 `permission_mode="bypassPermissions"` 一起設定仍然會批准每個工具,包括 `Bash`、`Write` 和 `Edit`。如果您需要 `bypassPermissions` 但想要阻止特定工具,請使用 `disallowed_tools`。109 **`allowed_tools` 不限制 `bypassPermissions`。** `allowed_tools` 預先批准您列出的工具。其他未列出的工具不符合任何允許規則,會進入權限模式,其中 `bypassPermissions` 會批准它們。將 `allowed_tools=["Read"]` 與 `permission_mode="bypassPermissions"` 一起設定仍會批准每個工具,包括 `Bash`、`Write` 和 `Edit`。如果您需要 `bypassPermissions` 但想要阻止特定工具,請使用 `disallowed_tools`。
110</Warning>110</Warning>
111 111
112您也可以在 `.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)以了解規則語法。
113 113
114<h2 id="permission-modes">114<h2 id="permission-modes">
115 權限模式115 權限模式
116</h2>116</h2>
117 117
118權限模式提供對 Claude 如何使用工具的全域控制。您可以在呼叫 `query()` 時設定權限模式,或在串流會話期間動態更改它。118權限模式提供對 Claude 如何使用工具的全域控制。您可以在呼叫 `query()` 時設定權限模式,或在串流工作階段期間動態變更它。
119 119
120<h3 id="available-modes">120<h3 id="available-modes">
121 可用模式121 可用模式
123 123
124SDK 支援這些權限模式:124SDK 支援這些權限模式:
125 125
126| 模式 | 描述 | 工具行為 |126| 模式 | 說明 | 工具行為 |
127| :------------------ | :------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |127| :------------------ | :------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
128| `default` | 標準權限行為 | 無模式型自動批准;不符合允許規則的呼叫會觸發您的 `canUseTool` 回呼 |128| `default` | 標準權限行為 | 無模式型自動核准;需要核准且不符合任何允許規則的呼叫會觸發您的 `canUseTool` 回呼 |
129| `dontAsk` | 拒絕而不是提示 | 任何會提示的呼叫都會被拒絕。由 `allowed_tools` 或規則批准的呼叫會執行,在 `default` 模式中不需要批准的呼叫也會執行;連接器工具[您的組織設定為 `ask`](/docs/zh-TW/mcp#organization-controls-on-connector-tools)和需要使用者互動的工具即使您已預先批准它們也會被拒絕,`rm` 和 `rmdir` 移除針對[關鍵路徑](/docs/zh-TW/permission-modes#critical-paths)的操作也會被拒絕。`canUseTool` 永遠不會被呼叫 |129| `dontAsk` | 拒絕而非提示 | 任何原本會提示的呼叫都會被拒絕。由 `allowed_tools` 或規則核准的呼叫會執行,在 `default` 模式中不需要核准的呼叫也會執行;您的組織[設定為 `ask`](/docs/zh-TW/mcp#organization-controls-on-connector-tools) 的連接器工具和需要使用者互動的工具會被拒絕,即使您已預先核准它們,針對[關鍵路徑](/docs/zh-TW/permission-modes#critical-paths)的 `rm` 和 `rmdir` 移除也會被拒絕。`canUseTool` 永遠不會被呼叫 |
130| `acceptEdits` | 自動接受檔案編輯 | 檔案編輯和[檔案系統操作](#accept-edits-mode-acceptedits)(`mkdir`、`rm`、`mv` 等)會自動被批准 |130| `acceptEdits` | 自動接受檔案編輯 | 檔案編輯和[檔案系統操作](#accept-edits-mode-acceptedits)(`mkdir`、`rm`、`mv` 等)會自動被核准 |
131| `bypassPermissions` | 繞過權限檢查 | 工具執行時無需權限提示,除了[任何模式都不會自動批准的操作](/docs/zh-TW/permission-modes#actions-no-mode-auto-approves)。謹慎使用 |131| `bypassPermissions` | 略過權限檢查 | 工具執行時不會出現權限提示,除了[沒有任何模式自動核准的動作](/docs/zh-TW/permission-modes#actions-no-mode-auto-approves)。請謹慎使用 |
132| `plan` | 規劃模式 | Claude 在不編輯您的原始檔案的情況下探索和規劃;檔案編輯永遠不會自動批准,並透過您的 `canUseTool` 回呼提示 |132| `plan` | 規劃模式 | Claude 在不編輯您的原始檔案的情況下探索和規劃;檔案編輯永遠不會自動被核准,並透過您的 `canUseTool` 回呼提示 |
133| `auto` | 模型分類批准 | 模型分類器批准或拒絕權限提示。請參閱 [Auto 模式](/docs/zh-TW/permission-modes#eliminate-prompts-with-auto-mode)以了解可用性 |133| `auto` | 模型分類核准 | 模型分類器核准或拒絕權限提示。請參閱 [Auto 模式](/docs/zh-TW/permission-modes#eliminate-prompts-with-auto-mode)以了解可用性 |
134 134
135<Warning>135<Warning>
136 **子代理程式繼承:** 子代理程式在父會話的權限模式中執行,除非您在其 [`AgentDefinition`](/docs/zh-TW/agent-sdk/typescript#agentdefinition) 上設定 `permissionMode`,且父會話處於 `default`、`dontAsk` 或 `plan` 模式。即使如此,Claude Code 也永遠不會套用 `"bypassPermissions"` 值。子代理程式僅在父會話本身處於 `bypassPermissions` 模式時才會在該模式中執行。`bypassPermissions` 例外需要 Claude Code v2.1.267 或更新版本。136 **子代理繼承:** 子代理在父工作階段的權限模式中執行,除非您在其 [`AgentDefinition`](/docs/zh-TW/agent-sdk/typescript#agentdefinition) 上設定 `permissionMode`,且父工作階段處於 `default`、`dontAsk` 或 `plan` 模式。即使如此,Claude Code 也永遠不會套用 `"bypassPermissions"` 值。子代理只有在父工作階段本身處於 `bypassPermissions` 模式時,才會在該模式中執行。`bypassPermissions` 例外需要 Claude Code v2.1.267 或更新版本。
137 137
138 子代理程式可能有不同的系統提示和行為限制較少,因此繼承 `bypassPermissions` 會授予它們完整的自主系統存取權。[任何模式都不會自動批准的操作](/docs/zh-TW/permission-modes#actions-no-mode-auto-approves)仍然適用。138 子代理可能具有不同的系統提示和比您的主代理更少受限的行為,因此繼承 `bypassPermissions` 會授予它們完整的自主系統存取權。[沒有任何模式自動核准的動作](/docs/zh-TW/permission-modes#actions-no-mode-auto-approves)仍然適用。
139</Warning>139</Warning>
140 140
141<h3 id="set-permission-mode">141<h3 id="set-permission-mode">
142 設定權限模式142 設定權限模式
143</h3>143</h3>
144 144
145您可以在開始查詢時設定一次權限模式,或在會話活躍時動態更改它。145您可以在開始查詢時設定一次權限模式,或在工作階段進行中動態變更它。
146 146
147<Tabs>147<Tabs>
148 <Tab title="在查詢時">148 <Tab title="在查詢時">
149 在建立查詢時傳遞 `permission_mode`(Python)或 `permissionMode`(TypeScript)。此模式適用於整個會話,除非動態更改。149 在建立查詢時傳遞 `permission_mode`(Python)或 `permissionMode`(TypeScript)。此模式適用於整個工作階段,除非動態變更。
150 150
151 <CodeGroup>151 <CodeGroup>
152 ```python Python theme={null}152 ```python Python theme={null}
190 </Tab>190 </Tab>
191 191
192 <Tab title="在串流期間">192 <Tab title="在串流期間">
193 呼叫 `set_permission_mode()`(Python)或 `setPermissionMode()`(TypeScript)以在會話中途更改模式。新模式會立即對所有後續工具請求生效。這讓您可以從限制性開始,並隨著信任建立而放寬權限,例如在檢查 Claude 的初始方法後切換到 `acceptEdits`。193 呼叫 `set_permission_mode()`(Python)或 `setPermissionMode()`(TypeScript)以在工作階段中途變更模式。新模式會立即對所有後續工具請求生效。這讓您可以從限制性開始,並隨著信任建立而放寬權限,例如在檢閱 Claude 的初始方法後切換到 `acceptEdits`。
194 194
195 <CodeGroup>195 <CodeGroup>
196 ```python Python theme={null}196 ```python Python theme={null}
254 接受編輯模式(`acceptEdits`)254 接受編輯模式(`acceptEdits`)
255</h4>255</h4>
256 256
257自動批准檔案操作,以便 Claude 可以編輯程式碼而無需提示。其他工具(例如不是檔案系統操作的 Bash 命令)仍然需要正常權限。257自動核准檔案操作,讓 Claude 可以編輯程式碼而不會提示。其他工具(例如不是檔案系統操作的 Bash 命令)仍然需要正常權限。
258 258
259**自動批准的操作:**259**自動核准的操作:**
260 260
261* 檔案編輯(Edit、Write 工具)261* 檔案編輯(Edit、Write 工具)
262* 檔案系統命令:`mkdir`、`touch`、`rm`、`rmdir`、`mv`、`cp`、`sed`262* 檔案系統命令:`mkdir`、`touch`、`rm`、`rmdir`、`mv`、`cp`、`sed`
263 263
264兩者都只適用於工作目錄或 `additionalDirectories` 內的路徑。在 `acceptEdits` 模式中,當 Claude 執行以下操作時,Claude Code 不會自動批准請求:264兩者都只適用於工作目錄或 `additionalDirectories` 內的路徑。在 `acceptEdits` 模式中,當 Claude 執行以下操作時,Claude Code 不會自動核准請求:
265 265
266* 在該範圍外的路徑上工作266* 在該範圍外的路徑上工作
267* 寫入受保護的路徑267* 寫入受保護的路徑
270**使用時機:** 您信任 Claude 的編輯並想要更快的迭代,例如在原型設計期間或在隔離目錄中工作時。270**使用時機:** 您信任 Claude 的編輯並想要更快的迭代,例如在原型設計期間或在隔離目錄中工作時。
271 271
272<h4 id="don’t-ask-mode-dontask">272<h4 id="don’t-ask-mode-dontask">
273 不詢問模式(`dontAsk`)273 不要詢問模式(`dontAsk`)
274</h4>274</h4>
275 275
276將任何會提示的呼叫轉換為拒絕,而不呼叫 `canUseTool`。由 `allowed_tools`、`settings.json` 允許規則或 hook 預先批准的工具會正常執行,在 `default` 模式中不需要批准的呼叫(例如在您的工作目錄內的檔案讀取和對 `Agent` 的呼叫)也會執行。連接器工具[您的組織設定為 `ask`](/docs/zh-TW/mcp#organization-controls-on-connector-tools)、需要使用者互動的工具,以及 `rm` 和 `rmdir` 移除針對[關鍵路徑](/docs/zh-TW/permission-modes#critical-paths)的操作即使允許規則符合也會被拒絕。`PreToolUse` hook 允許也不會清除關鍵路徑移除。276將任何權限提示轉換為拒絕,而不呼叫 `canUseTool`。由 `allowed_tools`、`settings.json` 允許規則或鉤子預先核准的工具會正常執行,在 `default` 模式中不需要核准的呼叫也會執行,例如在您的工作目錄內的檔案讀取和對 `Agent` 的呼叫。您的組織[設定為 `ask`](/docs/zh-TW/mcp#organization-controls-on-connector-tools) 的連接器工具、需要使用者互動的工具,以及針對[關鍵路徑](/docs/zh-TW/permission-modes#critical-paths)的 `rm` 和 `rmdir` 移除即使符合允許規則也會被拒絕。`PreToolUse` 鉤子允許也不會清除關鍵路徑移除。
277 277
278**使用時機:** 您想要為無頭代理程式提供固定的明確工具表面,並且更喜歡硬拒絕而不是無聲依賴 `canUseTool` 不存在。278**使用時機:** 您想要為無頭代理提供固定、明確的工具表面,並偏好硬拒絕而非無聲依賴 `canUseTool` 不存在。
279 279
280<h4 id="bypass-permissions-mode-bypasspermissions">280<h4 id="bypass-permissions-mode-bypasspermissions">
281 繞過權限模式(`bypassPermissions`)281 略過權限模式(`bypassPermissions`)
282</h4>282</h4>
283 283
284自動批准工具使用而無需提示,除了下方警告中列出的情況。Hooks 仍然執行,如果需要可以阻止操作。284自動核准工具使用而不提示,除了下面警告中列出的情況。鉤子仍然執行,如果需要可以阻止操作。
285 285
286<Warning>286<Warning>
287 謹慎使用。Claude 在此模式下具有完整的系統存取權。僅在您信任所有可能操作的受控環境中使用。287 請極其謹慎使用。Claude 在此模式中具有完整的系統存取權。僅在您信任所有可能操作的受控環境中使用。
288 288
289 `allowed_tools` 不會限制此模式。每個工具都會被批准,而不僅僅是您列出的工具。這些控制仍然適用:289 `allowed_tools` 不會限制此模式。每個工具都會被核准,而不僅僅是您列出的工具。這些控制仍然適用:
290 290
291 * 拒絕規則、明確的 `ask` 規則和 hooks 會在模式檢查之前被評估,仍然可以阻止工具。291 * 拒絕規則、明確的 `ask` 規則和鉤子在模式檢查之前被評估,仍然可以阻止工具。
292 * 連接器工具[您的組織設定為 `ask`](/docs/zh-TW/mcp#organization-controls-on-connector-tools)、需要使用者互動的工具,以及 `rm` 和 `rmdir` 移除針對[關鍵路徑](/docs/zh-TW/permission-modes#critical-paths)的操作仍然會透過您的 `canUseTool` 回呼進行。292 * 您的組織[設定為 `ask`](/docs/zh-TW/mcp#organization-controls-on-connector-tools) 的連接器工具、需要使用者互動的工具,以及針對[關鍵路徑](/docs/zh-TW/permission-modes#critical-paths)的 `rm` 和 `rmdir` 移除仍然會進入您的 `canUseTool` 回呼。
293 * [跨會話訊息安全防護](/docs/zh-TW/permission-modes#skip-all-checks-with-bypasspermissions-mode)仍然適用。293 * [跨工作階段訊息保護措施](/docs/zh-TW/permission-modes#skip-all-checks-with-bypasspermissions-mode)仍然適用。
294</Warning>294</Warning>
295 295
296<h4 id="plan-mode-plan">296<h4 id="plan-mode-plan">
297 規劃模式(`plan`)297 規劃模式(`plan`)
298</h4>298</h4>
299 299
300Claude 探索程式碼庫並產生計畫而不編輯您的原始檔案。唯讀工具在 `default` 權限模式中執行。300Claude 探索程式碼庫並產生計畫,而不編輯您的原始檔案。唯讀工具的執行方式與在 `default` 權限模式中相同。
301 301
302檔案編輯在規劃模式下永遠不會自動批准,即使允許規則符合。它們改為透過您的 `canUseTool` 回呼提示。在 Claude Code v2.1.212 或更新版本上,修改檔案的 shell 命令(例如 `touch` 和 `rm`)會以相同方式到達您的 `canUseTool` 回呼。302在規劃模式中,檔案編輯永遠不會自動被核准,即使符合允許規則。它們會改為透過您的 `canUseTool` 回呼提示。在 Claude Code v2.1.212 或更新版本上,修改檔案的 shell 命令(例如 `touch` 和 `rm`)會以相同方式到達您的 `canUseTool` 回呼。
303 303
304Claude 可能會使用 `AskUserQuestion` 在最終確定計畫之前澄清需求。請參閱[處理核准和使用者輸入](/docs/zh-TW/agent-sdk/user-input#handle-clarifying-questions)以處理這些提示。304Claude 可能會使用 `AskUserQuestion` 在最終確定計畫之前澄清需求。請參閱[處理核准和使用者輸入](/docs/zh-TW/agent-sdk/user-input#handle-clarifying-questions)以處理這些提示。
305 305
306**使用時機:** 您想要 Claude 提出變更建議而不執行它們,例如在程式碼審查期間或當您需要在進行變更之前核准變更時。306**使用時機:** 您想要 Claude 提議變更而不執行它們,例如在程式碼審查期間或當您需要在進行變更之前核准變更時。
307 307
308<h2 id="related-resources">308<h2 id="related-resources">
309 相關資源309 相關資源
310</h2>310</h2>
311 311
312對於權限評估流程中的其他步驟:312如需了解權限評估流程中的其他步驟:
313 313
314* [處理核准和使用者輸入](/docs/zh-TW/agent-sdk/user-input):互動式核准提示和澄清問題314* [處理核准和使用者輸入](/docs/zh-TW/agent-sdk/user-input):互動式核准提示和澄清問題
315* [Hooks 指南](/docs/zh-TW/agent-sdk/hooks):在代理程式生命週期中的關鍵點執行自訂程式碼315* [Hooks 指南](/docs/zh-TW/agent-sdk/hooks):在代理程式生命週期中的關鍵點執行自訂程式碼