8 8
9Claude Agent SDK 提供權限控制來管理 Claude 如何使用工具。使用權限模式和規則來定義自動允許的內容,並使用 [`canUseTool` 回呼](/docs/zh-TW/agent-sdk/user-input) 在執行時處理其他所有情況。9Claude Agent SDK 提供權限控制來管理 Claude 如何使用工具。使用權限模式和規則來定義自動允許的內容,並使用 [`canUseTool` 回呼](/docs/zh-TW/agent-sdk/user-input) 在執行時處理其他所有情況。
10 10
11<Note>
12 本頁涵蓋權限模式和規則。若要建立互動式核准流程,讓使用者在執行時核准或拒絕工具請求,請參閱 [處理核准和使用者輸入](/docs/zh-TW/agent-sdk/user-input)。
13</Note>
14
15<h2 id="how-permissions-are-evaluated">11<h2 id="how-permissions-are-evaluated">
16 權限如何被評估12 權限如何被評估
17</h2>13</h2>
20 16
21<Steps>17<Steps>
22 <Step title="Hooks">18 <Step title="Hooks">
23 首先執行 [hooks](/docs/zh-TW/agent-sdk/hooks)。Hook 可以直接拒絕呼叫或將其傳遞。返回 `allow` 的 hook 不會跳過下面的拒絕和詢問規則;無論 hook 結果如何,這些規則都會被評估。19 首先執行 [hooks](/docs/zh-TW/agent-sdk/hooks)。Hook 可以直接拒絕呼叫或將其傳遞。返回 `allow` 的 hook 不會跳過下面的拒絕和詢問規則;無論 hook 結果如何,這些規則都會被評估。返回 `allow` 的 `PreToolUse` hook 也無法批准針對[關鍵路徑](/docs/zh-TW/permission-modes#critical-paths)的 `rm` 或 `rmdir` 移除。
24 </Step>20 </Step>
25 21
26 <Step title="拒絕規則">22 <Step title="拒絕規則">
27 檢查 `deny` 規則(來自 `disallowed_tools` 和 [settings.json](/docs/zh-TW/settings#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 *)`)會在此步驟中被檢查。
28 </Step>24 </Step>
29 25
30 <Step title="詢問規則">26 <Step title="詢問規則">
31 檢查來自 [settings.json](/docs/zh-TW/settings#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` 模式下也是如此。
32 28
33 需要使用者互動的工具行為相同:`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))總是會傳遞到回呼,即使允許規則符合時也是如此。在 `dontAsk` 模式下,兩種情況都會被拒絕,因為該模式永遠不會提示。MCP 註解需要 Claude Code v2.1.199 或更新版本。
34 30
36 </Step>32 </Step>
37 33
38 <Step title="權限模式">34 <Step title="權限模式">
39 應用活躍的 [權限模式](#permission-modes)。`bypassPermissions` 批准到達此步驟的所有內容。`acceptEdits` 批准檔案操作。`plan` 將檔案編輯和 shell 寫入工具路由到您的 `canUseTool` 回呼,無論允許規則如何,因此在規劃時寫入操作無法自動批准。其他模式會通過。35 應用活躍的[權限模式](#permission-modes):
36
37 * 在 `bypassPermissions` 模式下,Claude Code 批准到達此步驟的所有內容,除了針對[關鍵路徑](/docs/zh-TW/permission-modes#critical-paths)的 `rm` 和 `rmdir` 移除,這些會傳遞到回呼。
38 * 在 `acceptEdits` 模式下,Claude Code 批准[接受編輯模式](#accept-edits-mode-acceptedits)下列出的檔案操作。
39 * 在 `plan` 模式下,Claude Code 將檔案編輯和 shell 寫入工具傳送到您的 `canUseTool` 回呼,無論允許規則如何,因此在規劃時寫入操作無法自動批准。
40 * 在其他模式下,請求會傳遞到回呼。
40 </Step>41 </Step>
41 42
42 <Step title="允許規則">43 <Step title="允許規則">
43 檢查 `allow` 規則(來自 `allowed_tools` 和 settings.json)。如果規則符合,工具會被批准。44 檢查 `allow` 規則(來自 `allowed_tools` 和 settings.json)。如果規則符合,工具會被批准。針對[關鍵路徑](/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 </Step>45 </Step>
45 46
46 <Step title="canUseTool 回呼">47 <Step title="canUseTool 回呼">
47 如果上述任何步驟都未解決,請呼叫您的 [`canUseTool` 回呼](/docs/zh-TW/agent-sdk/user-input) 以做出決定。在 `dontAsk` 模式下,此步驟會被跳過,工具會被拒絕。48 如果上述任何步驟都未解決,請呼叫您的 [`canUseTool` 回呼](/docs/zh-TW/agent-sdk/user-input) 以做出決定。在 `dontAsk` 模式下,此步驟會被跳過,工具會被拒絕。
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 或更新版本。
48 </Step>51 </Step>
49</Steps>52</Steps>
50 53
51<img src="https://mintcdn.com/claude-code/jYgs7qigNjO1Badj/images/agent-sdk/permissions-flow.svg?fit=max&auto=format&n=jYgs7qigNjO1Badj&q=85&s=c771ad9085b1277d3708027a49c744bc" 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" />
52 55
53自 v2.1.198 起,如果您傳遞一個 `canUseTool` 回呼,而此評估順序永遠無法到達,TypeScript SDK 會在建構查詢時發出一次 Node.js 程序警告。警告的代碼是 `CLAUDE_SDK_CAN_USE_TOOL_SHADOWED`。兩種配置會觸發它: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" />
54 57
55* `permissionMode: 'bypassPermissions'`,它會自動批准到達權限模式步驟的每個呼叫58如果您在 TypeScript SDK 預期評估順序會在諮詢回呼之前自動批准呼叫的配置中傳遞 `canUseTool` 回呼,SDK 會在建構查詢時發出一次 Node.js 程序警告。警告的代碼是 `CLAUDE_SDK_CAN_USE_TOOL_SHADOWED`。兩種配置會觸發它:
56* 每個裸 `allowedTools` 項目,例如 `"Read"`,它會在諮詢回呼之前自動批准整個工具59
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)
57 62
58具有指定符的項目(例如 `Bash(ls *)`)和 `acceptEdits` 模式不會觸發它,來自設定檔的允許規則對檢查不可見。63具有指定符的項目(例如 `Bash(ls *)`)和 `acceptEdits` 模式不會觸發它,來自設定檔的允許規則對檢查不可見。
59 64
68 允許和拒絕規則73 允許和拒絕規則
69</h2>74</h2>
70 75
71`allowed_tools` 和 `disallowed_tools`(TypeScript:`allowedTools` / `disallowedTools`)將條目新增到上述評估流程中的允許和拒絕規則清單。允許規則只影響批准:未列在 `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 使用,並會通過權限模式。拒絕規則的行為取決於它們是命名工具還是在工具內限定模式。
72 77
73| 選項 | 效果 |78| 選項 | 效果 |
74| :-------------------------------- | :--------------------------------------------------------------------------------- |79| :-------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------ |
75| `allowed_tools=["Read", "Grep"]` | `Read` 和 `Grep` 會自動批准。此處未列出的工具仍然存在,並會通過權限模式和 `canUseTool`。 |80| `allowed_tools=["Read", "Grep"]` | `Read` 和 `Grep` 會自動批准。此處未列出的其他工具仍然存在,並會通過權限模式和 `canUseTool`。 |
76| `disallowed_tools=["Bash"]` | `Bash` 工具定義會從請求中移除。Claude 看不到該工具,無法嘗試使用它。 |81| `disallowed_tools=["Bash"]` | `Bash` 工具定義會從請求中移除。Claude 看不到該工具,無法嘗試使用它。 |
77| `disallowed_tools=["Bash(rm *)"]` | `Bash` 保持可用。符合 `rm *` 的呼叫在每個權限模式中都會被拒絕,包括 `bypassPermissions`。其他 `Bash` 呼叫會通過權限模式。 |82| `disallowed_tools=["Bash(rm *)"]` | `Bash` 保持可用。符合 `rm *` [如所寫](/docs/zh-TW/permissions#bash-rule-limits) 的呼叫在每個權限模式中都會被拒絕,包括 `bypassPermissions`。其他 `Bash` 呼叫(包括 `/bin/rm`)會通過權限模式。 |
78| `disallowed_tools=["*"]` | 每個工具定義都會從請求中移除。工具名稱萬用字元在拒絕規則中受支援:`"*"` 符合每個工具,`"mcp__*"` 符合所有伺服器上的每個 MCP 工具。 |83| `disallowed_tools=["*"]` | 每個工具定義都會從請求中移除。工具名稱萬用字元在拒絕規則中受支援:`"*"` 符合每個工具,`"mcp__*"` 符合所有伺服器上的每個 MCP 工具。 |
79 84
80允許規則只在字面 `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__*"]`)會被忽略並顯示啟動警告,不會自動批准任何內容。
84使用 `//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`。請參閱 [Read 和 Edit 規則](/docs/zh-TW/permissions#read-and-edit) 以了解四種錨定形式以及來自設定檔案的規則如何解析。
85 90
86<Warning>91<Warning>
87 **自動批准的工具永遠不會到達 `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) 仍會到達回呼,即使允許規則符合時也是如此。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` 模式中,這些呼叫會被拒絕,不會叫用回呼。
88 93
89 涵蓋範圍取決於條目的形式:像 `Read` 或 `mcp__github__get_issue` 這樣的裸名稱會自動批准對該工具的每個呼叫,而像 `Bash(ls *)` 這樣的限定規則只會自動批准符合的呼叫,其他 `Bash` 呼叫仍會通過回呼。對於必須在每個工具呼叫上執行的檢查,請使用 [`PreToolUse` hook](/docs/zh-TW/agent-sdk/hooks):hook 在每個其他步驟之前執行,hook 拒絕甚至在 `bypassPermissions` 模式中也適用。94 涵蓋範圍取決於條目的形式:像 `Read` 或 `mcp__github__get_issue` 這樣的裸名稱會自動批准對該工具的每個呼叫(除了上述例外),而像 `Bash(ls *)` 這樣的限定規則只會自動批准符合的呼叫,其他 `Bash` 呼叫仍會通過回呼。對於必須在每個工具呼叫上執行的檢查,請使用 [`PreToolUse` hook](/docs/zh-TW/agent-sdk/hooks):hook 在每個其他步驟之前執行,hook 拒絕甚至在 `bypassPermissions` 模式中也適用。
90</Warning>95</Warning>
91 96
92對於鎖定的代理程式,將 `allowedTools` 與 `permissionMode: "dontAsk"` 配對。列出的工具會被批准,除了上述警告中的始終提示工具外;其他任何工具都會被直接拒絕,而不是提示:97對於鎖定的代理程式,將 `allowedTools` 與 `permissionMode: "dontAsk"` 配對。列出的工具會被批准,除了上述警告中的始終提示工具外;其他任何工具都會被直接拒絕,而不是提示:
102 **`allowed_tools` 不會限制 `bypassPermissions`。** `allowed_tools` 只會預先批准您列出的工具。未列出的工具不會被任何允許規則符合,並會通過權限模式,其中 `bypassPermissions` 會批准它們。將 `allowed_tools=["Read"]` 與 `permission_mode="bypassPermissions"` 一起設定仍然會批准每個工具,包括 `Bash`、`Write` 和 `Edit`。如果您需要 `bypassPermissions` 但想要阻止特定工具,請使用 `disallowed_tools`。107 **`allowed_tools` 不會限制 `bypassPermissions`。** `allowed_tools` 只會預先批准您列出的工具。未列出的工具不會被任何允許規則符合,並會通過權限模式,其中 `bypassPermissions` 會批准它們。將 `allowed_tools=["Read"]` 與 `permission_mode="bypassPermissions"` 一起設定仍然會批准每個工具,包括 `Bash`、`Write` 和 `Edit`。如果您需要 `bypassPermissions` 但想要阻止特定工具,請使用 `disallowed_tools`。
103</Warning>108</Warning>
104 109
105您也可以在 `.claude/settings.json` 中宣告式地設定允許、拒絕和詢問規則。當啟用 `project` 設定來源時,這些規則會被讀取,預設 `query()` 選項就是這樣。如果您明確設定 `setting_sources`(TypeScript:`settingSources`),請包含 `"project"` 以便它們適用。請參閱 [權限設定](/docs/zh-TW/settings#permission-settings) 以了解規則語法。110您也可以在 `.claude/settings.json` 中宣告式地設定允許、拒絕和詢問規則。當啟用 `project` 設定來源時,這些規則會被讀取,預設 `query()` 選項就是這樣。如果您明確設定 `setting_sources`(TypeScript:`settingSources`),請包含 `"project"` 以便它們適用。請參閱 [權限設定](/docs/zh-TW/settings-reference#permission-settings) 以了解規則語法。
106 111
107<h2 id="permission-modes">112<h2 id="permission-modes">
108 權限模式113 權限模式
117SDK 支援這些權限模式:122SDK 支援這些權限模式:
118 123
119| 模式 | 描述 | 工具行為 |124| 模式 | 描述 | 工具行為 |
120| :------------------ | :------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------ |125| :------------------ | :------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
121| `default` | 標準權限行為 | 無自動批准;不符合的工具會觸發您的 `canUseTool` 回呼 |126| `default` | 標準權限行為 | 無自動批准;不符合的工具會觸發您的 `canUseTool` 回呼 |
122| `dontAsk` | 拒絕而不是提示 | 任何未被 `allowed_tools` 或規則預先批准的內容都會被拒絕;連接器工具[您的組織設定為 `ask`](/docs/zh-TW/mcp#organization-controls-on-connector-tools)和需要使用者互動的工具即使您已預先批准它們也會被拒絕。`canUseTool` 永遠不會被呼叫 |127| `dontAsk` | 拒絕而不是提示 | 任何未被 `allowed_tools` 或規則預先批准的內容都會被拒絕;連接器工具[您的組織設定為 `ask`](/docs/zh-TW/mcp#organization-controls-on-connector-tools)和需要使用者互動的工具即使您已預先批准它們也會被拒絕,`rm` 和 `rmdir` 移除針對[關鍵路徑](/docs/zh-TW/permission-modes#critical-paths)的操作也會被拒絕。`canUseTool` 永遠不會被呼叫 |
123| `acceptEdits` | 自動接受檔案編輯 | 檔案編輯和[檔案系統操作](#accept-edits-mode-acceptedits)(`mkdir`、`rm`、`mv` 等)會自動被批准 |128| `acceptEdits` | 自動接受檔案編輯 | 檔案編輯和[檔案系統操作](#accept-edits-mode-acceptedits)(`mkdir`、`rm`、`mv` 等)會自動被批准 |
124| `bypassPermissions` | 繞過權限檢查 | 工具執行時無需權限提示,除了明確的[`ask` 規則](#how-permissions-are-evaluated)符合的工具、連接器工具[您的組織設定為 `ask`](/docs/zh-TW/mcp#organization-controls-on-connector-tools)和需要使用者互動的工具(謹慎使用) |129| `bypassPermissions` | 繞過權限檢查 | 工具執行時無需權限提示,除了[任何模式都不會自動批准的操作](/docs/zh-TW/permission-modes#actions-no-mode-auto-approves)。謹慎使用 |
125| `plan` | 規劃模式 | Claude 在不編輯您的原始檔案的情況下探索和規劃;檔案編輯永遠不會自動批准,並透過您的 `canUseTool` 回呼提示 |130| `plan` | 規劃模式 | Claude 在不編輯您的原始檔案的情況下探索和規劃;檔案編輯永遠不會自動批准,並透過您的 `canUseTool` 回呼提示 |
126| `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)以了解可用性 |
127 132
128<Warning>133<Warning>
129 **子代理程式繼承:** 當父代理程式使用 `bypassPermissions`、`acceptEdits` 或 `auto` 時,所有子代理程式都會繼承該模式,且無法按子代理程式覆蓋。子代理程式可能有不同的系統提示和行為限制較少,因此繼承 `bypassPermissions` 會授予它們完整的自主系統存取權。明確的[`ask` 規則](#how-permissions-are-evaluated)、連接器工具[您的組織設定為 `ask`](/docs/zh-TW/mcp#organization-controls-on-connector-tools)和需要使用者互動的工具仍然會強制提示。134 **子代理程式繼承:** 子代理程式在父會話的權限模式中執行,除非您在其 [`AgentDefinition`](/docs/zh-TW/agent-sdk/typescript#agentdefinition) 上設定 `permissionMode`,且父會話處於 `default`、`dontAsk` 或 `plan` 模式。即使如此,Claude Code 也永遠不會套用 `"bypassPermissions"` 值。子代理程式僅在父會話本身處於 `bypassPermissions` 模式時才會在該模式中執行。`bypassPermissions` 例外需要 Claude Code v2.1.267 或更新版本。
135
136 子代理程式可能有不同的系統提示和行為限制較少,因此繼承 `bypassPermissions` 會授予它們完整的自主系統存取權。[任何模式都不會自動批准的操作](/docs/zh-TW/permission-modes#actions-no-mode-auto-approves)仍然適用。
130</Warning>137</Warning>
131 138
132<h3 id="set-permission-mode">139<h3 id="set-permission-mode">
252* 檔案編輯(Edit、Write 工具)259* 檔案編輯(Edit、Write 工具)
253* 檔案系統命令:`mkdir`、`touch`、`rm`、`rmdir`、`mv`、`cp`、`sed`260* 檔案系統命令:`mkdir`、`touch`、`rm`、`rmdir`、`mv`、`cp`、`sed`
254 261
255兩者都只適用於工作目錄或 `additionalDirectories` 內的路徑。該範圍外的路徑和對受保護路徑的寫入仍然會提示。262兩者都只適用於工作目錄或 `additionalDirectories` 內的路徑。在 `acceptEdits` 模式中,當 Claude 執行以下操作時,Claude Code 不會自動批准請求:
263
264* 在該範圍外的路徑上工作
265* 寫入受保護的路徑
266* 使用 `rm` 或 `rmdir` 移除[關鍵路徑](/docs/zh-TW/permission-modes#critical-paths)
256 267
257**使用時機:** 您信任 Claude 的編輯並想要更快的迭代,例如在原型設計期間或在隔離目錄中工作時。268**使用時機:** 您信任 Claude 的編輯並想要更快的迭代,例如在原型設計期間或在隔離目錄中工作時。
258 269
260 不詢問模式(`dontAsk`)271 不詢問模式(`dontAsk`)
261</h4>272</h4>
262 273
263將任何權限提示轉換為拒絕。由 `allowed_tools`、`settings.json` 允許規則或作為 hook 執行的工具會正常執行。連接器工具[您的組織設定為 `ask`](/docs/zh-TW/mcp#organization-controls-on-connector-tools)和需要使用者互動的工具即使允許規則符合也會被拒絕。其他所有內容都會被拒絕,而不呼叫 `canUseTool`。274將任何權限提示轉換為拒絕。由 `allowed_tools`、`settings.json` 允許規則或作為 hook 執行的工具會正常執行。連接器工具[您的組織設定為 `ask`](/docs/zh-TW/mcp#organization-controls-on-connector-tools)、需要使用者互動的工具,以及 `rm` 和 `rmdir` 移除針對[關鍵路徑](/docs/zh-TW/permission-modes#critical-paths)的操作即使允許規則符合也會被拒絕。`PreToolUse` hook 允許也不會清除關鍵路徑移除。其他所有內容都會被拒絕,而不呼叫 `canUseTool`。
264 275
265**使用時機:** 您想要為無頭代理程式提供固定的明確工具表面,並且更喜歡硬拒絕而不是無聲依賴 `canUseTool` 不存在。276**使用時機:** 您想要為無頭代理程式提供固定的明確工具表面,並且更喜歡硬拒絕而不是無聲依賴 `canUseTool` 不存在。
266 277
268 繞過權限模式(`bypassPermissions`)279 繞過權限模式(`bypassPermissions`)
269</h4>280</h4>
270 281
271自動批准所有工具使用而無需提示。Hooks 仍然執行,如果需要可以阻止操作。282自動批准工具使用而無需提示,除了下方警告中列出的情況。Hooks 仍然執行,如果需要可以阻止操作。
272 283
273<Warning>284<Warning>
274 謹慎使用。Claude 在此模式下具有完整的系統存取權。僅在您信任所有可能操作的受控環境中使用。285 謹慎使用。Claude 在此模式下具有完整的系統存取權。僅在您信任所有可能操作的受控環境中使用。
275 286
276 `allowed_tools` 不會限制此模式。每個工具都會被批准,而不僅僅是您列出的工具。拒絕規則(`disallowed_tools`)、明確的 `ask` 規則和 hooks 會在模式檢查之前被評估,仍然可以阻止工具。連接器工具[您的組織設定為 `ask`](/docs/zh-TW/mcp#organization-controls-on-connector-tools)和需要使用者互動的工具仍然會透過您的 `canUseTool` 回呼進行。287 `allowed_tools` 不會限制此模式。每個工具都會被批准,而不僅僅是您列出的工具。這些控制仍然適用:
288
289 * 拒絕規則、明確的 `ask` 規則和 hooks 會在模式檢查之前被評估,仍然可以阻止工具。
290 * 連接器工具[您的組織設定為 `ask`](/docs/zh-TW/mcp#organization-controls-on-connector-tools)、需要使用者互動的工具,以及 `rm` 和 `rmdir` 移除針對[關鍵路徑](/docs/zh-TW/permission-modes#critical-paths)的操作仍然會透過您的 `canUseTool` 回呼進行。
291 * [跨會話訊息安全防護](/docs/zh-TW/permission-modes#skip-all-checks-with-bypasspermissions-mode)仍然適用。
277</Warning>292</Warning>
278 293
279<h4 id="plan-mode-plan">294<h4 id="plan-mode-plan">
280 規劃模式(`plan`)295 規劃模式(`plan`)
281</h4>296</h4>
282 297
283Claude 探索程式碼庫並產生計畫而不編輯您的原始檔案。唯讀工具在預設模式下執行。檔案編輯在規劃模式下永遠不會自動批准,即使允許規則符合。它們改為透過您的 `canUseTool` 回呼提示。Claude 可能會使用 `AskUserQuestion` 在最終確定計畫之前澄清需求。請參閱[處理核准和使用者輸入](/docs/zh-TW/agent-sdk/user-input#handle-clarifying-questions)以處理這些提示。298Claude 探索程式碼庫並產生計畫而不編輯您的原始檔案。唯讀工具在 `default` 權限模式中執行。
299
300檔案編輯在規劃模式下永遠不會自動批准,即使允許規則符合。它們改為透過您的 `canUseTool` 回呼提示。在 Claude Code v2.1.212 或更新版本上,修改檔案的 shell 命令(例如 `touch` 和 `rm`)會以相同方式到達您的 `canUseTool` 回呼。
301
302Claude 可能會使用 `AskUserQuestion` 在最終確定計畫之前澄清需求。請參閱[處理核准和使用者輸入](/docs/zh-TW/agent-sdk/user-input#handle-clarifying-questions)以處理這些提示。
284 303
285**使用時機:** 您想要 Claude 提出變更建議而不執行它們,例如在程式碼審查期間或當您需要在進行變更之前核准變更時。304**使用時機:** 您想要 Claude 提出變更建議而不執行它們,例如在程式碼審查期間或當您需要在進行變更之前核准變更時。
286 305
292 311
293* [處理核准和使用者輸入](/docs/zh-TW/agent-sdk/user-input):互動式核准提示和澄清問題312* [處理核准和使用者輸入](/docs/zh-TW/agent-sdk/user-input):互動式核准提示和澄清問題
294* [Hooks 指南](/docs/zh-TW/agent-sdk/hooks):在代理程式生命週期中的關鍵點執行自訂程式碼313* [Hooks 指南](/docs/zh-TW/agent-sdk/hooks):在代理程式生命週期中的關鍵點執行自訂程式碼
295* [權限規則](/docs/zh-TW/settings#permission-settings):`settings.json` 中的宣告式允許/拒絕規則314* [權限規則](/docs/zh-TW/settings-reference#permission-settings):`settings.json` 中的宣告式允許/拒絕規則