14 14
15**1. Hooks**15**1. Hooks**
16 16
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)。17首先執行 [hooks](/docs/zh-TW/agent-sdk/hooks.md)。Hook 可以直接拒絕呼叫或將其傳遞下去。返回 `allow` 的 hook 不會跳過下面的拒絕和詢問規則;無論 hook 結果如何,這些規則都會被評估。
18
19返回 `allow` 的 `PreToolUse` hook 也無法核准目標被 Claude Code 識別為[關鍵路徑](/docs/zh-TW/permission-modes.md#critical-paths)的 `rm` 或 `rmdir` 命令,例如 `rm -rf ~`。關於該 `allow` 在 plan mode 中的作用,請參閱 [plan mode 中的 hook 核准](/docs/zh-TW/permissions.md#hook-approvals-in-plan-mode)。
18 20
19**2. 拒絕規則**21**2. 拒絕規則**
20 22
21檢查 `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.md#permission-settings))。如果拒絕規則匹配,工具會被阻止,即使在 `bypassPermissions` 模式下也是如此。裸名稱拒絕規則(如 `Bash`)會在此評估開始前將工具從 Claude 的上下文中移除,因此只有作用域規則(如 `Bash(rm *)`)會在此步驟中被檢查。
22 24
23**3. 詢問規則**25**3. 詢問規則**
24 26
25檢查來自 [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.md#permission-settings) 的 `ask` 規則。如果詢問規則匹配,呼叫會傳遞到您的 [`canUseTool` 回呼](/docs/zh-TW/agent-sdk/user-input) 以進行確認,即使在 `bypassPermissions` 模式下也是如此。
26 28
27需要使用者互動的工具行為相同:`AskUserQuestion` 和 MCP 工具(其伺服器設定了 [`_meta["anthropic/requiresUserInteraction"]`](/docs/zh-TW/mcp#require-approval-for-a-specific-tool))總是傳遞到回呼,即使當 allow 規則匹配時也是如此。在 `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 或更新版本。
28 30
29您的組織設定為 `ask` 的 [claude.ai connector](/docs/zh-TW/mcp#organization-controls-on-connector-tools) 工具也會在此步驟離開流程。每個呼叫都會傳遞到回呼,即使在 `bypassPermissions` 模式下,即使當 allow 規則匹配時也是如此。回呼會收到原因 `Your organization requires approval for this tool`。在 `dontAsk` 模式下,呼叫會被拒絕,因為該模式永遠不會提示。31您的組織設定為 `ask` 的 [claude.ai connector](/docs/zh-TW/mcp.md#organization-controls-on-connector-tools) 工具也會在此步驟離開流程。每個呼叫都會傳遞到回呼,即使在 `bypassPermissions` 模式下,即使當 allow 規則匹配時也是如此。回呼會收到原因 `Your organization requires approval for this tool`。在 `dontAsk` 模式下,呼叫會被拒絕,因為該模式永遠不會提示。
30 32
31**4. 權限模式**33**4. 權限模式**
32 34
33應用活躍的 [權限模式](#permission-modes):35應用活躍的 [權限模式](#permission-modes):
34 36
35* 在 `bypassPermissions` 模式下,Claude Code 批准到達此步驟的所有內容,除了針對 [關鍵路徑](/docs/zh-TW/permission-modes#critical-paths) 的 `rm` 和 `rmdir` 移除,這些會傳遞下去。37* 在 `bypassPermissions` 模式下,Claude Code 核准到達此步驟的所有內容,但經識別的[關鍵路徑移除](/docs/zh-TW/permission-modes.md#critical-paths)除外,這些會改為傳遞下去。
36* 在 `acceptEdits` 模式下,Claude Code 批准 [接受編輯模式](#accept-edits-mode-acceptedits) 下列出的檔案操作。38* 在 `acceptEdits` 模式下,Claude Code 核准 [接受編輯模式](#accept-edits-mode-acceptedits) 下列出的檔案操作。
37* 在 `plan` 模式下,Claude Code 將檔案編輯和 shell 寫入工具發送到您的 `canUseTool` 回呼,無論 allow 規則如何,因此在規劃時寫入操作無法自動批准。39* 在 `plan` 模式下,Claude Code 將檔案編輯和 shell 寫入工具發送到您的 `canUseTool` 回呼,無論 allow 規則如何,因此在規劃時寫入操作無法自動核准。
38* 在其他模式下,請求會傳遞下去。40* 在其他模式下,請求會傳遞下去。
39 41
40**5. 允許規則**42**5. 允許規則**
41 43
42檢查 `allow` 規則(來自 `allowed_tools` 和 settings.json)。如果規則匹配,工具會被批准。工具自行批准的呼叫也會在此步驟解決,無需規則:例如在您的工作目錄內的檔案讀取或 [唯讀 Bash 命令](/docs/zh-TW/permissions#read-only-commands)。44檢查 `allow` 規則(來自 `allowed_tools` 和 settings.json)。如果規則匹配,工具會被核准。工具自行核准的呼叫也會在此步驟解決,無需規則:例如在您的工作目錄內的檔案讀取或 [唯讀 Bash 命令](/docs/zh-TW/permissions.md#read-only-commands)。
43 45
44針對 [關鍵路徑](/docs/zh-TW/permission-modes#critical-paths) 的 `rm` 和 `rmdir` 移除永遠不會被 allow 規則核准。它們是否隨後到達您的回呼取決於權限模式:例如在 `auto` 模式的 Agent SDK 工作階段中,Claude Code 預設會拒絕它們而不呼叫它。[關鍵路徑](/docs/zh-TW/permission-modes#critical-paths) 模式表列出了每個模式對它們的處理方式。46經識別的[關鍵路徑移除](/docs/zh-TW/permission-modes.md#critical-paths)不會被 allow 規則核准。它們是否隨後到達您的回呼取決於權限模式:例如在 `auto` 模式的 Agent SDK 工作階段中,Claude Code 預設會拒絕它們而不呼叫它。[關鍵路徑模式表](/docs/zh-TW/permission-modes.md#critical-path-removals-in-each-permission-mode)列出了每個模式對它們的處理方式。
45 47
46Allow 規則不會核准從 [網路路徑](/docs/zh-TW/permissions#network-paths) 進行的讀取。48Allow 規則不會核准從 [網路路徑](/docs/zh-TW/permissions.md#network-paths) 進行的讀取。
47 49
48**6. canUseTool 回呼**50**6. canUseTool 回呼**
49 51
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)。52如果上述任何步驟都未解決,請呼叫您的 [`canUseTool` 回呼](/docs/zh-TW/agent-sdk/user-input) 以獲得決定。在 `dontAsk` 模式下,此步驟會被跳過,工具會被拒絕,不過您安裝的 [mod](/docs/zh-TW/plugins/mods/overview.md) 仍可核准[部分此類呼叫](/docs/zh-TW/permissions.md#precedence-among-rules-hooks-and-mods)。
51 53
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 或更新版本。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 或更新版本。
53 55
55 57
56如果您在 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`。兩個設定會觸發它:
57 59
58* `permissionMode: 'bypassPermissions'`,它自動批准到達權限模式步驟的每個呼叫,除了 [任何模式都不自動批准的操作](/docs/zh-TW/permission-modes#actions-no-mode-auto-approves)60* `permissionMode: 'bypassPermissions'`,它自動批准到達權限模式步驟的每個呼叫,除了 [任何模式都不自動批准的操作](/docs/zh-TW/permission-modes.md#actions-no-mode-auto-approves)
59* 每個裸 `allowedTools` 條目,例如 `"Read"`,它在諮詢回呼之前自動核准整個工具,除了 [任何模式都不自動核准的操作](/docs/zh-TW/permission-modes#actions-no-mode-auto-approves) 和 [從網路路徑進行的讀取](/docs/zh-TW/permissions#network-paths)61* 每個裸 `allowedTools` 條目,例如 `"Read"`,它在諮詢回呼之前自動核准整個工具,除了 [任何模式都不自動核准的操作](/docs/zh-TW/permission-modes.md#actions-no-mode-auto-approves) 和 [從網路路徑進行的讀取](/docs/zh-TW/permissions.md#network-paths)
60 62
61具有指定符的條目(如 `Bash(ls *)`)和 `acceptEdits` 模式不會觸發它,來自設定檔的 allow 規則對檢查不可見。63具有指定符的條目(如 `Bash(ls *)`)和 `acceptEdits` 模式不會觸發它,來自設定檔的 allow 規則對檢查不可見。
62 64
64 66
65此頁面重點關注 **allow 和 deny 規則** 以及 **權限模式**。對於其他步驟:67此頁面重點關注 **allow 和 deny 規則** 以及 **權限模式**。對於其他步驟:
66 68
67* **Hooks:** 執行自訂程式碼以允許、拒絕或修改工具請求。請參閱 [使用 hooks 控制執行](/docs/zh-TW/agent-sdk/hooks)。69* **Hooks:** 執行自訂程式碼以允許、拒絕或修改工具請求。請參閱 [使用 hooks 控制執行](/docs/zh-TW/agent-sdk/hooks.md)。
68* **canUseTool 回呼:** 在執行時提示使用者批准,當沒有較早的步驟解決呼叫時。請參閱 [處理批准和使用者輸入](/docs/zh-TW/agent-sdk/user-input)。70* **canUseTool 回呼:** 在執行時提示使用者批准,當沒有較早的步驟解決呼叫時。請參閱 [處理批准和使用者輸入](/docs/zh-TW/agent-sdk/user-input.md)。
69 71
70## 允許和拒絕規則72## 允許和拒絕規則
71 73
72`allowed_tools` 和 `disallowed_tools`(TypeScript:`allowedTools` / `disallowedTools`)在上述評估流程中新增允許和拒絕規則清單的項目。如果您在 `allowed_tools` 中命名其中一個[任務追蹤工具](/docs/zh-TW/agent-sdk/todo-tracking#model-availability),Claude Code 也會為該工作階段啟用這些工具。任何未列在 `allowed_tools` 中的其他工具仍可供 Claude 使用,對其進行的需要批准的呼叫會進入權限模式。拒絕規則的行為取決於它們是命名工具還是在工具內限定模式。74`allowed_tools` 和 `disallowed_tools`(TypeScript:`allowedTools` / `disallowedTools`)在上述評估流程中新增允許和拒絕規則清單的項目。如果您在 `allowed_tools` 中命名其中一個[任務追蹤工具](/docs/zh-TW/agent-sdk/todo-tracking.md#model-availability),Claude Code 也會為該工作階段啟用這些工具。任何未列在 `allowed_tools` 中的其他工具仍可供 Claude 使用,對其進行的需要批准的呼叫會進入權限模式。拒絕規則的行為取決於它們是命名工具還是在工具內限定模式。
73 75
74| 選項 | 效果 |76| 選項 | 效果 |
75| :- | :- |77| :- | :- |
76| `allowed_tools=["Read", "Grep"]` | `Read` 和 `Grep` 會自動核准,但[從網路路徑讀取](/docs/zh-TW/permissions#network-paths)除外。此處未列出的其他工具仍然存在,對它們進行的需要核准的呼叫會進入權限模式和 `canUseTool`。 |78| `allowed_tools=["Read", "Grep"]` | `Read` 和 `Grep` 會自動核准,但[從網路路徑讀取](/docs/zh-TW/permissions.md#network-paths)除外。此處未列出的其他工具仍然存在,對它們進行的需要核准的呼叫會進入權限模式和 `canUseTool`。 |
77| `disallowed_tools=["Bash"]` | `Bash` 工具定義會從請求中移除。Claude 看不到該工具,無法嘗試使用它。 |79| `disallowed_tools=["Bash"]` | `Bash` 工具定義會從請求中移除。Claude 看不到該工具,無法嘗試使用它。 |
78| `disallowed_tools=["Bash(rm *)"]` | `Bash` 保持可用。符合 `rm *` [如所寫](/docs/zh-TW/permissions#bash-rule-limits)的呼叫在每個權限模式中都會被拒絕,包括 `bypassPermissions`。其他 `Bash` 呼叫(包括 `/bin/rm`)會進入權限模式。 |80| `disallowed_tools=["Bash(rm *)"]` | `Bash` 保持可用。符合 `rm *` [如所寫](/docs/zh-TW/permissions.md#bash-rule-limits)的呼叫在每個權限模式中都會被拒絕,包括 `bypassPermissions`。其他 `Bash` 呼叫(包括 `/bin/rm`)會進入權限模式。 |
79| `disallowed_tools=["*"]` | 每個工具定義都會從請求中移除。拒絕規則支援工具名稱萬用字元:`"*"` 符合每個工具,`"mcp__*"` 符合所有伺服器上的每個 MCP 工具。 |81| `disallowed_tools=["*"]` | 每個工具定義都會從請求中移除。拒絕規則支援工具名稱萬用字元:`"*"` 符合每個工具,`"mcp__*"` 符合所有伺服器上的每個 MCP 工具。 |
80 82
81允許規則僅在字面 `mcp__<server>__` 前綴之後接受工具名稱萬用字元。伺服器段必須無萬用字元,以便規則命名您設定的特定伺服器:`mcp__puppeteer__*` 符合來自 `puppeteer` 伺服器的每個工具,`mcp__github__get_*` 符合其 `get_` 工具。未錨定的項目(如 `allowed_tools=["*"]` 或 `allowed_tools=["mcp__*"]`)會被忽略,不會自動核准任何內容。83允許規則僅在字面 `mcp__<server>__` 前綴之後接受工具名稱萬用字元。伺服器段必須無萬用字元,以便規則命名您設定的特定伺服器:`mcp__puppeteer__*` 符合來自 `puppeteer` 伺服器的每個工具,`mcp__github__get_*` 符合其 `get_` 工具。未錨定的項目(如 `allowed_tools=["*"]` 或 `allowed_tools=["mcp__*"]`)會被忽略,不會自動核准任何內容。
82 84
83`Read` 和 `Edit` 的限定規則採用路徑模式。`Edit(path)` 規則管理所有寫入檔案的內建工具,包括 `Write` 和 `NotebookEdit`;`Write(path)` 規則永遠不會被檔案權限檢查符合。85`Read` 和 `Edit` 的限定規則採用路徑模式。`Edit(path)` 規則管理所有寫入檔案的內建工具,包括 `Write` 和 `NotebookEdit`;`Write(path)` 規則永遠不會被檔案權限檢查符合。
84 86
85使用 `//path` 表示絕對檔案系統路徑:`Edit(//secrets/**)` 的拒絕規則會阻止在磁碟上 `/secrets` 下任何位置的寫入。使用單個前導斜線時,`Edit(/secrets/**)` 會在規則的來源處錨定。對於透過 `allowed_tools` 或 `disallowed_tools` 傳遞的規則,這表示工作階段的工作目錄,因此規則不會阻止磁碟上的 `/secrets`。請參閱[讀取和編輯規則](/docs/zh-TW/permissions#read-and-edit)以了解四種錨定形式以及來自設定檔的規則如何解析。87使用 `//path` 表示絕對檔案系統路徑:`Edit(//secrets/**)` 的拒絕規則會阻止在磁碟上 `/secrets` 下任何位置的寫入。使用單個前導斜線時,`Edit(/secrets/**)` 會在規則的來源處錨定。對於透過 `allowed_tools` 或 `disallowed_tools` 傳遞的規則,這表示工作階段的工作目錄,因此規則不會阻止磁碟上的 `/secrets`。請參閱[讀取和編輯規則](/docs/zh-TW/permissions.md#read-and-edit)以了解四種錨定形式以及來自設定檔的規則如何解析。
86 88
87> [!WARNING]89> [!WARNING]
88>90>
89> **自動批准的工具永遠不會到達 `canUseTool`。** 在任何較早步驟中批准的工具呼叫,透過 `acceptEdits` 或 `bypassPermissions`,或透過允許規則,會跳過您的 `canUseTool` 回呼,因此您在那裡放置的權限檢查會被該工具無聲地繞過。91> **自動批准的工具永遠不會到達 `canUseTool`。** 在任何較早步驟中批准的工具呼叫,透過 `acceptEdits` 或 `bypassPermissions`,或透過允許規則,會跳過您的 `canUseTool` 回呼,因此您在那裡放置的權限檢查會被該工具無聲地繞過。
90>92>
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` 模式中所做的那樣。93> 允許規則永遠不會自動核准 `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.md#critical-paths)。在 `dontAsk` 模式中,Claude Code 會拒絕這些呼叫而不呼叫回呼。在其他模式中,前三個會到達回呼。[關鍵路徑模式表](/docs/zh-TW/permission-modes.md#critical-path-removals-in-each-permission-mode)列出每個模式對關鍵路徑移除的處理方式。辨識這些移除的檢查[可能會遺漏某些命令](/docs/zh-TW/permission-modes.md#critical-paths)。
92>94>
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` 模式中也適用。95> 涵蓋範圍取決於項目的形式:像 `Read` 或 `mcp__github__get_issue` 這樣的裸名稱會自動核准對該工具的每個呼叫,除了上述例外情況和[從網路路徑讀取](/docs/zh-TW/permissions.md#network-paths),而像 `Bash(npm test *)` 這樣的限定規則只會自動核准符合的呼叫,其他需要核准的 `Bash` 呼叫仍會進入回呼。對於必須在每個工具呼叫上執行的檢查,請使用 [`PreToolUse` hook](/docs/zh-TW/agent-sdk/hooks):hook 在每個其他步驟之前執行,hook 拒絕即使在 `bypassPermissions` 模式中也適用。
94 96
95對於鎖定的代理,將 `allowedTools` 與 `permissionMode: "dontAsk"` 配對:97對於鎖定的代理,將 `allowedTools` 與 `permissionMode: "dontAsk"` 配對:
96 98
101};103};
102```104```
103 105
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)。106列出的工具會被核准,但[任何模式都不自動核准的動作](/docs/zh-TW/permission-modes.md#actions-no-mode-auto-approves)和[從網路路徑讀取](/docs/zh-TW/permissions.md#network-paths)除外。其他每個原本會提示的呼叫則會被拒絕,不過您安裝的 [mod](/docs/zh-TW/plugins/mods/overview.md) 仍可核准[其中部分呼叫](/docs/zh-TW/permissions.md#precedence-among-rules-hooks-and-mods)。
105 107
106在 `default` 模式中不需要核准的呼叫無論您是否列出都會執行。這些呼叫包括[唯讀 Bash 命令](/docs/zh-TW/permissions#read-only-commands)、不在執行前詢問的工具(如 `Agent`),以及工作目錄內的檔案讀取。要將工具從請求中完全移除,請將其裸名稱新增到 `disallowedTools`。108在 `default` 模式中不需要核准的呼叫無論您是否列出都會執行。這些呼叫包括[唯讀 Bash 命令](/docs/zh-TW/permissions.md#read-only-commands)、不在執行前詢問的工具(如 `Agent`),以及工作目錄內的檔案讀取。要將工具從請求中完全移除,請將其裸名稱新增到 `disallowedTools`。
107 109
108> [!WARNING]110> [!WARNING]
109>111>
110> **`allowed_tools` 不限制 `bypassPermissions`。** `allowed_tools` 預先批准您列出的工具。其他未列出的工具不符合任何允許規則,會進入權限模式,其中 `bypassPermissions` 會批准它們。將 `allowed_tools=["Read"]` 與 `permission_mode="bypassPermissions"` 一起設定仍會批准每個工具,包括 `Bash`、`Write` 和 `Edit`。如果您需要 `bypassPermissions` 但想要阻止特定工具,請使用 `disallowed_tools`。112> **`allowed_tools` 不限制 `bypassPermissions`。** `allowed_tools` 預先批准您列出的工具。其他未列出的工具不符合任何允許規則,會進入權限模式,其中 `bypassPermissions` 會批准它們。將 `allowed_tools=["Read"]` 與 `permission_mode="bypassPermissions"` 一起設定仍會批准每個工具,包括 `Bash`、`Write` 和 `Edit`。如果您需要 `bypassPermissions` 但想要阻止特定工具,請使用 `disallowed_tools`。
111 113
112您也可以在 `.claude/settings.json` 中以宣告方式設定允許、拒絕和詢問規則。當啟用 `project` 設定來源時會讀取這些規則,預設 `query()` 選項就是這樣。如果您明確設定 `setting_sources`(TypeScript:`settingSources`),請包含 `"project"` 以便它們適用。請參閱[權限設定](/docs/zh-TW/settings-reference#permission-settings)以了解規則語法。114您也可以在 `.claude/settings.json` 中以宣告方式設定允許、拒絕和詢問規則。當啟用 `project` 設定來源時會讀取這些規則,預設 `query()` 選項就是這樣。如果您明確設定 `setting_sources`(TypeScript:`settingSources`),請包含 `"project"` 以便它們適用。請參閱[權限設定](/docs/zh-TW/settings-reference.md#permission-settings)以了解規則語法。
113 115
114## 權限模式116## 權限模式
115 117
124| 模式 | 說明 | 工具行為 |126| 模式 | 說明 | 工具行為 |
125| :- | :- | :- |127| :- | :- | :- |
126| `default` | 標準權限行為 | 無模式型自動核准;需要核准且不符合任何允許規則的呼叫會觸發您的 `canUseTool` 回呼 |128| `default` | 標準權限行為 | 無模式型自動核准;需要核准且不符合任何允許規則的呼叫會觸發您的 `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` 永遠不會被呼叫 |129| `dontAsk` | 拒絕而非提示 | 任何原本會提示的呼叫都會被拒絕,且不會呼叫 `canUseTool`,不過您安裝的 [mod](/docs/zh-TW/plugins/mods/overview.md) 仍可核准[其中部分呼叫](/docs/zh-TW/permissions.md#precedence-among-rules-hooks-and-mods)。由 `allowed_tools` 或 `settings.json` 允許規則核准的呼叫會執行,在 `default` 模式中不需要核准的呼叫也會執行。某些呼叫,例如[從網路路徑讀取](/docs/zh-TW/permissions.md#network-paths),即使符合 `allowed_tools` 或允許規則也會被拒絕。如需完整清單,請參閱[不要詢問模式](#don’t-ask-mode-dontask) |
128| `acceptEdits` | 自動接受檔案編輯 | 檔案編輯和[檔案系統操作](#accept-edits-mode-acceptedits)(`mkdir`、`rm`、`mv` 等)會自動被核准 |130| `acceptEdits` | 自動接受檔案編輯 | 檔案編輯和[檔案系統操作](#accept-edits-mode-acceptedits)(`mkdir`、`rm`、`mv` 等)會自動被核准 |
129| `bypassPermissions` | 略過權限檢查 | 工具執行時不會出現權限提示,除了[沒有任何模式自動核准的動作](/docs/zh-TW/permission-modes#actions-no-mode-auto-approves)。請謹慎使用 |131| `bypassPermissions` | 略過權限檢查 | 工具執行時不會出現權限提示,除了[沒有任何模式自動核准的動作](/docs/zh-TW/permission-modes.md#actions-no-mode-auto-approves)。請謹慎使用 |
130| `plan` | 規劃模式 | Claude 在不編輯您的原始檔案的情況下探索和規劃;檔案編輯永遠不會自動被核准,並透過您的 `canUseTool` 回呼提示 |132| `plan` | 規劃模式 | Claude 在不編輯您的原始檔案的情況下探索和規劃;檔案編輯永遠不會自動被核准,並透過您的 `canUseTool` 回呼提示 |
131| `auto` | 模型分類核准 | 模型分類器檢閱殼層命令和網路請求等動作,允許或阻止它檢閱的每一個。請參閱 [Auto 模式](/docs/zh-TW/permission-modes#eliminate-prompts-with-auto-mode)以了解可用性和決策順序 |133| `auto` | 模型分類核准 | 模型分類器檢閱殼層命令和網路請求等動作,允許或阻止它檢閱的每一個。請參閱 [Auto 模式](/docs/zh-TW/permission-modes.md#eliminate-prompts-with-auto-mode)以了解可用性和決策順序 |
132 134
133> [!WARNING]135> [!WARNING]
134>136>
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 或更新版本。137> **Subagent 繼承:** subagent 在父工作階段的權限模式中執行,除非您在其 [`AgentDefinition`](/docs/zh-TW/agent-sdk/typescript#agentdefinition) 上設定 `permissionMode`,且父工作階段處於 `default`、`dontAsk` 或 `plan` 模式。即使如此,Claude Code 也永遠不會套用 `"bypassPermissions"` 值,且只有在該 subagent [可使用自動模式](/docs/zh-TW/permission-modes.md#eliminate-prompts-with-auto-mode)時才會套用 `"auto"` 值。subagent 只有在父工作階段本身處於 `bypassPermissions` 模式時,才會在該模式中執行。`bypassPermissions` 例外需要 Claude Code v2.1.267 或更新版本。
136>138>
137> 子代理可能具有不同的系統提示和比您的主代理更少受限的行為,因此繼承 `bypassPermissions` 會授予它們完整的自主系統存取權。[沒有任何模式自動核准的動作](/docs/zh-TW/permission-modes#actions-no-mode-auto-approves)仍然適用。139> 子代理可能具有不同的系統提示和比您的主代理更少受限的行為,因此繼承 `bypassPermissions` 會授予它們完整的自主系統存取權。[沒有任何模式自動核准的動作](/docs/zh-TW/permission-modes.md#actions-no-mode-auto-approves)仍然適用。
138 140
139### 設定權限模式141### 設定權限模式
140 142
251 253
252* 在該範圍外的路徑上工作254* 在該範圍外的路徑上工作
253* 寫入受保護的路徑255* 寫入受保護的路徑
254* 使用 `rm` 或 `rmdir` 移除[關鍵路徑](/docs/zh-TW/permission-modes#critical-paths)256* 使用 `rm` 或 `rmdir` 移除 Claude Code 識別為[關鍵路徑](/docs/zh-TW/permission-modes.md#critical-paths)的路徑
255 257
256**使用時機:** 您信任 Claude 的編輯並想要更快的迭代,例如在原型設計期間或在隔離目錄中工作時。258**使用時機:** 您信任 Claude 的編輯並想要更快的迭代,例如在原型設計期間或在隔離目錄中工作時。
257 259
258#### 不要詢問模式(`dontAsk`)260#### 不要詢問模式(`dontAsk`)
259 261
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` 的呼叫。262將任何權限提示轉換為拒絕,而不呼叫 `canUseTool`,不過您安裝的 [mod](/docs/zh-TW/plugins/mods/overview.md) 仍可核准[其中部分呼叫](/docs/zh-TW/permissions.md#precedence-among-rules-hooks-and-mods)。由 `allowed_tools`、`settings.json` 允許規則或 hook 預先核准的工具會正常執行。在 `default` 模式中不需要核准的呼叫也會執行,例如在您的工作目錄內的檔案讀取和對 `Agent` 的呼叫。
261 263
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 允許也不會清除關鍵路徑移除或從網路路徑讀取。264您的組織[設定為 `ask`](/docs/zh-TW/mcp#organization-controls-on-connector-tools) 的連接器工具、需要使用者互動的工具、[從網路路徑讀取](/docs/zh-TW/permissions.md#network-paths),以及已識別的[關鍵路徑移除](/docs/zh-TW/permission-modes.md#critical-paths)即使符合允許規則也會被拒絕。`PreToolUse` hook 允許也不會清除已識別的關鍵路徑移除或從網路路徑讀取。識別這些移除的檢查[可能會遺漏某些命令](/docs/zh-TW/permission-modes.md#critical-paths)。
263 265
264**使用時機:** 您想要為無頭代理提供固定、明確的工具表面,並偏好硬拒絕而非無聲依賴 `canUseTool` 不存在。266**使用時機:** 您想要為無頭代理提供固定、明確的工具表面,並偏好硬拒絕而非無聲依賴 `canUseTool` 不存在。
265 267
266#### 略過權限模式(`bypassPermissions`)268#### 略過權限模式(`bypassPermissions`)
267 269
268自動核准工具使用而不提示,除了下面警告中列出的情況。鉤子仍然執行,如果需要可以阻止操作。在 Linux 和 macOS 上,Claude Code 拒絕在此模式下以 root 身份或在[已識別的沙箱](/docs/zh-TW/permission-modes#skip-all-checks-with-bypasspermissions-mode)外的 `sudo` 下啟動,查詢在第一個回合之前失敗。270自動核准工具使用而不提示,除了下面警告中列出的情況。鉤子仍然執行,如果需要可以阻止操作。在 Linux 和 macOS 上,Claude Code 拒絕在此模式下以 root 身份或在[已識別的沙箱](/docs/zh-TW/permission-modes.md#skip-all-checks-with-bypasspermissions-mode)外的 `sudo` 下啟動,查詢在第一個回合之前失敗。
269 271
270> [!WARNING]272> [!WARNING]
271>273>
274> `allowed_tools` 不會限制此模式。每個工具都會被核准,而不僅僅是您列出的工具。這些控制仍然適用:276> `allowed_tools` 不會限制此模式。每個工具都會被核准,而不僅僅是您列出的工具。這些控制仍然適用:
275>277>
276> * 拒絕規則、明確的 `ask` 規則和鉤子在模式檢查之前被評估,仍然可以阻止工具。278> * 拒絕規則、明確的 `ask` 規則和鉤子在模式檢查之前被評估,仍然可以阻止工具。
277> * 您的組織[設定為 `ask`](/docs/zh-TW/mcp#organization-controls-on-connector-tools) 的連接器工具、需要使用者互動的工具,以及針對[關鍵路徑](/docs/zh-TW/permission-modes#critical-paths)的 `rm` 和 `rmdir` 移除仍然會進入您的 `canUseTool` 回呼。279> * 您的組織[設定為 `ask`](/docs/zh-TW/mcp#organization-controls-on-connector-tools) 的連接器工具、需要使用者互動的工具,以及已識別的[關鍵路徑移除](/docs/zh-TW/permission-modes.md#critical-paths)仍然會進入您的 `canUseTool` 回呼。識別這些移除的檢查[可能會遺漏某些命令](/docs/zh-TW/permission-modes.md#critical-paths)。
278> * [跨工作階段訊息保護措施](/docs/zh-TW/permission-modes#skip-all-checks-with-bypasspermissions-mode)仍然適用。280> * [跨工作階段訊息保護措施](/docs/zh-TW/permission-modes.md#skip-all-checks-with-bypasspermissions-mode)仍然適用。
279 281
280#### 規劃模式(`plan`)282#### 規劃模式(`plan`)
281 283
285 287
286在 TypeScript SDK 中,如果您在 `permissionMode: 'plan'` 旁邊設定 `allowDangerouslySkipPermissions: true`,檔案編輯和修改檔案的 shell 命令仍然會到達您的 `canUseTool` 回呼。此選項讓您稍後可以使用 `setPermissionMode()` 切換到 `bypassPermissions`。288在 TypeScript SDK 中,如果您在 `permissionMode: 'plan'` 旁邊設定 `allowDangerouslySkipPermissions: true`,檔案編輯和修改檔案的 shell 命令仍然會到達您的 `canUseTool` 回呼。此選項讓您稍後可以使用 `setPermissionMode()` 切換到 `bypassPermissions`。
287 289
288Claude 可能會使用 `AskUserQuestion` 在最終確定計畫之前澄清需求。請參閱[處理核准和使用者輸入](/docs/zh-TW/agent-sdk/user-input#handle-clarifying-questions)以處理這些提示。290Claude 可能會使用 `AskUserQuestion` 在最終確定計畫之前澄清需求。請參閱[處理核准和使用者輸入](/docs/zh-TW/agent-sdk/user-input.md#handle-clarifying-questions)以處理這些提示。
289 291
290**使用時機:** 您想要 Claude 提議變更而不執行它們,例如在程式碼審查期間或當您需要在進行變更之前核准變更時。292**使用時機:** 您想要 Claude 提議變更而不執行它們,例如在程式碼審查期間或當您需要在進行變更之前核准變更時。
291 293
292#### 自動模式(`auto`)294#### 自動模式(`auto`)
293 295
294分類器模型會在 shell 命令和網路請求等動作執行之前檢閱它們,並允許或阻止它檢閱的每一個動作。如需了解自動模式所需的模型和提供者,以及它評估動作的順序,請參閱[使用自動模式消除權限提示](/docs/zh-TW/permission-modes#eliminate-prompts-with-auto-mode)。296分類器模型會在 shell 命令和網路請求等動作執行之前檢閱它們,並允許或阻止它檢閱的每一個動作。如需了解自動模式所需的模型和提供者,以及它評估動作的順序,請參閱[使用自動模式消除權限提示](/docs/zh-TW/permission-modes.md#eliminate-prompts-with-auto-mode)。
295 297
296如果您使用 [`set_model()`](/docs/zh-TW/agent-sdk/python#claudesdkclient)、[`setModel()`](/docs/zh-TW/agent-sdk/typescript#query-object) 或 [`applyFlagSettings()`](/docs/zh-TW/agent-sdk/typescript#applyflagsettings),將處於自動模式的工作階段切換到自動模式不支援的模型,工作階段會變更為 `default` 模式:298如果您使用 [`set_model()`](/docs/zh-TW/agent-sdk/python#claudesdkclient)、[`setModel()`](/docs/zh-TW/agent-sdk/typescript#query-object) 或 [`applyFlagSettings()`](/docs/zh-TW/agent-sdk/typescript#applyflagsettings),將處於自動模式的工作階段切換到自動模式不支援的模型,工作階段會變更為 `default` 模式:
297 299
304 306
305如需了解權限評估流程中的其他步驟:307如需了解權限評估流程中的其他步驟:
306 308
307* [處理核准和使用者輸入](/docs/zh-TW/agent-sdk/user-input):互動式核准提示和澄清問題309* [處理核准和使用者輸入](/docs/zh-TW/agent-sdk/user-input.md):互動式核准提示和澄清問題
308* [Hooks 指南](/docs/zh-TW/agent-sdk/hooks):在代理程式生命週期中的關鍵點執行自訂程式碼310* [Hooks 指南](/docs/zh-TW/agent-sdk/hooks.md):在代理程式生命週期中的關鍵點執行自訂程式碼
309* [權限規則](/docs/zh-TW/settings-reference#permission-settings):`settings.json` 中的宣告式允許/拒絕規則311* [權限規則](/docs/zh-TW/settings-reference.md#permission-settings):`settings.json` 中的宣告式允許/拒絕規則