8 8
9Claude Agent SDK 提供权限控制来管理 Claude 如何使用工具。使用权限模式和规则来定义自动允许的内容,以及使用 [`canUseTool` 回调](/docs/zh-CN/agent-sdk/user-input) 在运行时处理其他所有情况。9Claude Agent SDK 提供权限控制来管理 Claude 如何使用工具。使用权限模式和规则来定义自动允许的内容,以及使用 [`canUseTool` 回调](/docs/zh-CN/agent-sdk/user-input) 在运行时处理其他所有情况。
10 10
11<Note>
12 本页面涵盖权限模式和规则。要构建交互式批准流程,其中用户在运行时批准或拒绝工具请求,请参阅 [处理批准和用户输入](/docs/zh-CN/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-CN/agent-sdk/hooks)。一个 hook 可以直接拒绝调用或将其传递下去。返回 `allow` 的 hook 不会跳过下面的拒绝和询问规则;无论 hook 结果如何,这些规则都会被评估。19 首先运行 [hooks](/docs/zh-CN/agent-sdk/hooks)。一个 hook 可以直接拒绝调用或将其传递下去。返回 `allow` 的 hook 不会跳过下面的拒绝和询问规则;无论 hook 结果如何,这些规则都会被评估。一个 `PreToolUse` hook allow 也不能批准针对 [关键路径](/docs/zh-CN/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-CN/settings#permission-settings))。如果拒绝规则匹配,工具被阻止,即使在 `bypassPermissions` 模式下也是如此。裸名称拒绝规则(如 `Bash`)在此评估开始之前将工具从 Claude 的上下文中移除,因此只有作用域规则(如 `Bash(rm *)`)在此步骤中被检查。23 检查 `deny` 规则(来自 `disallowed_tools` 和 [settings.json](/docs/zh-CN/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-CN/settings#permission-settings) 的 `ask` 规则。如果询问规则匹配,调用会传递到您的 [`canUseTool` 回调](/docs/zh-CN/agent-sdk/user-input) 以获得确认,即使在 `bypassPermissions` 模式下也是如此。27 检查来自 [settings.json](/docs/zh-CN/settings-reference#permission-settings) 的 `ask` 规则。如果询问规则匹配,调用会传递到您的 [`canUseTool` 回调](/docs/zh-CN/agent-sdk/user-input) 以获得确认,即使在 `bypassPermissions` 模式下也是如此。
32 28
33 需要用户交互的工具行为相同:`AskUserQuestion` 和 MCP 工具,其服务器设置 [`_meta["anthropic/requiresUserInteraction"]`](/docs/zh-CN/mcp#require-approval-for-a-specific-tool) 总是传递到回调,即使当允许规则匹配时。在 `dontAsk` 模式下,两种情况都被拒绝,因为该模式从不提示。MCP 注解需要 Claude Code v2.1.199 或更高版本。29 需要用户交互的工具行为相同:`AskUserQuestion` 和 MCP 工具,其服务器设置 [`_meta["anthropic/requiresUserInteraction"]`](/docs/zh-CN/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-CN/permission-modes#critical-paths) 的 `rm` 和 `rmdir` 删除,这些会传递下去。
38 * 在 `acceptEdits` 模式下,Claude Code 批准 [Accept edits mode](#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-CN/permission-modes#critical-paths) 的 `rm` 和 `rmdir` 删除永远不会被允许规则批准:它们在提示的模式下到达您的回调,在 Claude Code v2.1.218 或更高版本的 `auto` 模式下进入 [分类器](/docs/zh-CN/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-CN/agent-sdk/user-input) 以获得决定。在 `dontAsk` 模式下,此步骤被跳过,工具被拒绝。48 如果上述任何步骤都未解决,调用您的 [`canUseTool` 回调](/docs/zh-CN/agent-sdk/user-input) 以获得决定。在 `dontAsk` 模式下,此步骤被跳过,工具被拒绝。
49
50 在 TypeScript SDK 中,如果您设置 [`permissionPrompts: 'none'`](/docs/zh-CN/agent-sdk/typescript#options),您的回调在此步骤不会被调用。一个 [`PermissionRequest` hook](/docs/zh-CN/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-CN/permission-modes#actions-no-mode-auto-approves)
61* 每个裸 `allowedTools` 条目,如 `"Read"`,它在咨询回调之前自动批准整个工具,除了 [任何模式都不自动批准的操作](/docs/zh-CN/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-CN/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-CN/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-CN/permissions#read-and-edit) 了解四种锚定形式以及来自设置文件的规则如何解析。89使用 `//path` 表示绝对文件系统路径:`Edit(//secrets/**)` 的拒绝规则阻止在磁盘上 `/secrets` 下任何位置的写入。使用单个前导斜杠,`Edit(/secrets/**)` 在规则的源处锚定。对于通过 `allowed_tools` 或 `disallowed_tools` 传递的规则,这意味着会话的工作目录,因此规则不会阻止磁盘上的 `/secrets`。请参阅 [Read 和 Edit 规则](/docs/zh-CN/permissions#read-and-edit) 了解四种锚定形式以及来自设置文件的规则如何解析。
85 90
86<Warning>91<Warning>
87 **自动批准的工具永远不会到达 `canUseTool`。** 在任何早期步骤中批准的工具调用,通过 `acceptEdits` 或 `bypassPermissions`,或通过允许规则,会跳过您的 `canUseTool` 回调,因此您在那里放置的权限检查对该工具被静默绕过。`AskUserQuestion`、标记有 [`_meta["anthropic/requiresUserInteraction"]`](/docs/zh-CN/mcp#require-approval-for-a-specific-tool) 的 MCP 工具,以及连接器工具[您的组织设置为 `ask`](/docs/zh-CN/mcp#organization-controls-on-connector-tools) 仍然到达回调,即使允许规则匹配。92 **自动批准的工具永远不会到达 `canUseTool`。** 在任何早期步骤中批准的工具调用,通过 `acceptEdits` 或 `bypassPermissions`,或通过允许规则,会跳过您的 `canUseTool` 回调,因此您在那里放置的权限检查对该工具被静默绕过。`AskUserQuestion`、标记有 [`_meta["anthropic/requiresUserInteraction"]`](/docs/zh-CN/mcp#require-approval-for-a-specific-tool) 的 MCP 工具、连接器工具[您的组织设置为 `ask`](/docs/zh-CN/mcp#organization-controls-on-connector-tools) 以及 `rm` 和 `rmdir` 移除针对[关键路径](/docs/zh-CN/permission-modes#critical-paths) 仍然到达回调,即使允许规则匹配。在 `auto` 模式中,关键路径移除转到[分类器](/docs/zh-CN/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-CN/agent-sdk/hooks):hooks 在每个其他步骤之前运行,hook 拒绝甚至在 `bypassPermissions` 模式中也适用。94 覆盖范围取决于条目的形式:像 `Read` 或 `mcp__github__get_issue` 这样的裸名称自动批准对该工具的每个调用,除了上面异常之外,而像 `Bash(ls *)` 这样的范围化规则仅自动批准匹配的调用,其他 `Bash` 调用仍然继续进行回调。对于必须在每个工具调用上运行的检查,请使用 [`PreToolUse` hook](/docs/zh-CN/agent-sdk/hooks):hooks 在每个其他步骤之前运行,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-CN/settings#permission-settings) 了解规则语法。110您也可以在 `.claude/settings.json` 中声明式地配置允许、拒绝和询问规则。当启用 `project` 设置源时,这些规则被读取,默认 `query()` 选项就是这样。如果您显式设置 `setting_sources`(TypeScript:`settingSources`),请包含 `"project"` 以使其应用。请参阅 [权限设置](/docs/zh-CN/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-CN/mcp#organization-controls-on-connector-tools)和需要用户交互的工具即使您已预批准它们也被拒绝。`canUseTool` 永远不会被调用 |127| `dontAsk` | 拒绝而不是提示 | 任何未被 `allowed_tools` 或规则预批准的内容都被拒绝;连接器工具[您的组织设置为 `ask`](/docs/zh-CN/mcp#organization-controls-on-connector-tools)和需要用户交互的工具即使您已预批准它们也被拒绝,`rm` 和 `rmdir` 移除针对[关键路径](/docs/zh-CN/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-CN/mcp#organization-controls-on-connector-tools)和需要用户交互的工具(谨慎使用) |129| `bypassPermissions` | 绕过权限检查 | 工具运行而无需权限提示,除了[任何模式都不自动批准的操作](/docs/zh-CN/permission-modes#actions-no-mode-auto-approves)。谨慎使用 |
125| `plan` | 规划模式 | Claude 在不编辑源文件的情况下探索和规划;文件编辑永远不会自动批准,并通过您的 `canUseTool` 回调提示 |130| `plan` | 规划模式 | Claude 在不编辑源文件的情况下探索和规划;文件编辑永远不会自动批准,并通过您的 `canUseTool` 回调提示 |
126| `auto` | 模型分类批准 | 模型分类器批准或拒绝每个工具调用。请参阅 [Auto 模式](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode) 了解可用性 |131| `auto` | 模型分类批准 | 模型分类器批准或拒绝权限提示。请参阅[Auto 模式](/docs/zh-CN/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-CN/mcp#organization-controls-on-connector-tools)和需要用户交互的工具仍然会强制提示。134 **子代理继承:** 子代理在父会话的权限模式下运行,除非您在其[`AgentDefinition`](/docs/zh-CN/agent-sdk/typescript#agentdefinition)上设置 `permissionMode`,且父会话处于 `default`、`dontAsk` 或 `plan` 模式。即使这样,Claude Code 也永远不会应用 `"bypassPermissions"` 值。子代理仅在父会话本身处于 `bypassPermissions` 模式时才在该模式下运行。`bypassPermissions` 异常需要 Claude Code v2.1.267 或更高版本。
135
136 子代理可能有不同的系统提示和行为约束较少,比您的主代理,所以继承 `bypassPermissions` 授予它们完整的、自主的系统访问权限。[任何模式都不自动批准的操作](/docs/zh-CN/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-CN/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-CN/mcp#organization-controls-on-connector-tools)和需要用户交互的工具即使允许规则匹配也被拒绝。其他所有内容都被拒绝,无需调用 `canUseTool`。274将任何权限提示转换为拒绝。由 `allowed_tools`、`settings.json` 允许规则或作为 hook 运行的工具正常运行。连接器工具[您的组织设置为 `ask`](/docs/zh-CN/mcp#organization-controls-on-connector-tools)、需要用户交互的工具,以及 `rm` 和 `rmdir` 移除针对[关键路径](/docs/zh-CN/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-CN/mcp#organization-controls-on-connector-tools)和需要用户交互的工具仍然会通过您的 `canUseTool` 回调。287 `allowed_tools` 不约束此模式。每个工具都被批准,而不仅仅是您列出的工具。这些控制仍然适用:
288
289 * 拒绝规则、显式 `ask` 规则和 hooks 在模式检查之前被评估,仍然可以阻止工具。
290 * 连接器工具[您的组织设置为 `ask`](/docs/zh-CN/mcp#organization-controls-on-connector-tools)、需要用户交互的工具,以及 `rm` 和 `rmdir` 移除针对[关键路径](/docs/zh-CN/permission-modes#critical-paths)仍然会通过您的 `canUseTool` 回调。
291 * [跨会话消息保护](/docs/zh-CN/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-CN/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-CN/agent-sdk/user-input#handle-clarifying-questions)以处理这些提示。
284 303
285**使用时机:** 您想要 Claude 提议更改而不执行它们,例如在代码审查期间或当您需要在进行更改之前批准更改时。304**使用时机:** 您想要 Claude 提议更改而不执行它们,例如在代码审查期间或当您需要在进行更改之前批准更改时。
286 305
292 311
293* [处理批准和用户输入](/docs/zh-CN/agent-sdk/user-input):交互式批准提示和澄清问题312* [处理批准和用户输入](/docs/zh-CN/agent-sdk/user-input):交互式批准提示和澄清问题
294* [Hooks 指南](/docs/zh-CN/agent-sdk/hooks):在代理生命周期中的关键点运行自定义代码313* [Hooks 指南](/docs/zh-CN/agent-sdk/hooks):在代理生命周期中的关键点运行自定义代码
295* [权限规则](/docs/zh-CN/settings#permission-settings):`settings.json` 中的声明式允许/拒绝规则314* [权限规则](/docs/zh-CN/settings-reference#permission-settings):`settings.json` 中的声明式允许/拒绝规则