6 6
7> 使用权限模式、hooks 和声明式允许/拒绝规则来控制您的代理如何使用工具。7> 使用权限模式、hooks 和声明式允许/拒绝规则来控制您的代理如何使用工具。
8 8
9Claude Agent SDK 提供权限控制来管理 Claude 如何使用工具。使用权限模式和规则来定义自动允许的内容,以及使用 [`canUseTool` 回调](/docs/zh-CN/agent-sdk/user-input) 在运行时处理其他所有情况。9Claude Agent SDK 提供权限控制来管理 Claude 如何使用工具。使用权限模式和规则来定义自动允许的内容,以及使用 [`canUseTool` 回调](https://code.claude.com/docs/zh-CN/agent-sdk/user-input) 在运行时处理其他所有情况。
10 10
11## 权限如何被评估11## 权限如何被评估
12 12
14 14
15**1. Hooks**15**1. Hooks**
16 16
17首先运行 [hooks](/docs/zh-CN/agent-sdk/hooks.md)。Hook 可以直接拒绝调用或将其传递下去。返回 `allow` 的 hook 不会跳过下面的拒绝和询问规则;无论 hook 结果如何,这些规则都会被评估。17首先运行 [hooks](https://code.claude.com/docs/zh-CN/agent-sdk/hooks.md)。Hook 可以直接拒绝调用或将其传递下去。返回 `allow` 的 hook 不会跳过下面的拒绝和询问规则;无论 hook 结果如何,这些规则都会被评估。
18 18
19返回 `allow` 的 `PreToolUse` hook 也不能批准目标被 Claude Code 识别为 [关键路径](/docs/zh-CN/permission-modes.md#critical-paths) 的 `rm` 或 `rmdir` 命令,例如 `rm -rf ~`。关于该 `allow` 在计划模式下的作用,请参阅 [计划模式下的 hook 批准](/docs/zh-CN/permissions.md#hook-approvals-in-plan-mode)。19返回 `allow` 的 `PreToolUse` hook 也不能批准目标被 Claude Code 识别为 [关键路径](https://code.claude.com/docs/zh-CN/permission-modes.md#critical-paths) 的 `rm` 或 `rmdir` 命令,例如 `rm -rf ~`。关于该 `allow` 在计划模式下的作用,请参阅 [计划模式下的 hook 批准](https://code.claude.com/docs/zh-CN/permissions.md#hook-approvals-in-plan-mode)。
20 20
21**2. 拒绝规则**21**2. 拒绝规则**
22 22
23检查 `deny` 规则(来自 `disallowed_tools` 和 [settings.json](/docs/zh-CN/settings-reference.md#permission-settings))。如果拒绝规则匹配,工具被阻止,即使在 `bypassPermissions` 模式下也是如此。裸名称拒绝规则如 `Bash` 在此评估开始之前将工具从 Claude 的上下文中移除,因此只有作用域规则如 `Bash(rm *)` 在此步骤被检查。23检查 `deny` 规则(来自 `disallowed_tools` 和 [settings.json](https://code.claude.com/docs/zh-CN/settings-reference.md#permission-settings))。如果拒绝规则匹配,工具被阻止,即使在 `bypassPermissions` 模式下也是如此。裸名称拒绝规则如 `Bash` 在此评估开始之前将工具从 Claude 的上下文中移除,因此只有作用域规则如 `Bash(rm *)` 在此步骤被检查。
24 24
25**3. 询问规则**25**3. 询问规则**
26 26
27检查来自 [settings.json](/docs/zh-CN/settings-reference.md#permission-settings) 的 `ask` 规则。如果询问规则匹配,调用会传递到您的 [`canUseTool` 回调](/docs/zh-CN/agent-sdk/user-input) 以获得确认,即使在 `bypassPermissions` 模式下也是如此。27检查来自 [settings.json](https://code.claude.com/docs/zh-CN/settings-reference.md#permission-settings) 的 `ask` 规则。如果询问规则匹配,调用会传递到您的 [`canUseTool` 回调](https://code.claude.com/docs/zh-CN/agent-sdk/user-input) 以获得确认,即使在 `bypassPermissions` 模式下也是如此。
28 28
29需要用户交互的工具行为相同:`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"]`](https://code.claude.com/docs/zh-CN/mcp#require-approval-for-a-specific-tool),总是传递到回调,即使当允许规则匹配时也是如此。在 `dontAsk` 模式下,两种情况都被拒绝,因为该模式从不提示。MCP 注解需要 Claude Code v2.1.199 或更高版本。
30 30
31您的组织设置为 `ask` 的 [claude.ai connector](/docs/zh-CN/mcp.md#organization-controls-on-connector-tools) 工具也在此步骤离开流程。每个调用都传递到回调,即使在 `bypassPermissions` 模式下,即使当允许规则匹配时也是如此。回调接收原因 `Your organization requires approval for this tool`。在 `dontAsk` 模式下,调用被拒绝,因为该模式从不提示。31您的组织设置为 `ask` 的 [claude.ai connector](https://code.claude.com/docs/zh-CN/mcp.md#organization-controls-on-connector-tools) 工具也在此步骤离开流程。每个调用都传递到回调,即使在 `bypassPermissions` 模式下,即使当允许规则匹配时也是如此。回调接收原因 `Your organization requires approval for this tool`。在 `dontAsk` 模式下,调用被拒绝,因为该模式从不提示。
32 32
33**4. 权限模式**33**4. 权限模式**
34 34
35应用活跃的 [权限模式](#permission-modes):35应用活跃的 [权限模式](#permission-modes):
36 36
37* 在 `bypassPermissions` 模式下,Claude Code 批准到达此步骤的所有内容,除了被识别出的 [关键路径删除](/docs/zh-CN/permission-modes.md#critical-paths),这些会传递下去。37* 在 `bypassPermissions` 模式下,Claude Code 批准到达此步骤的所有内容,除了被识别出的 [关键路径删除](https://code.claude.com/docs/zh-CN/permission-modes.md#critical-paths),这些会传递下去。
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` 回调,无论允许规则如何,因此在规划时写入操作无法自动批准。
40* 在其他模式下,请求传递下去。40* 在其他模式下,请求传递下去。
41 41
42**5. 允许规则**42**5. 允许规则**
43 43
44检查 `allow` 规则(来自 `allowed_tools` 和 settings.json)。如果规则匹配,工具被批准。工具自己批准的调用也在此步骤被解决,无需规则:例如在您的工作目录内的文件读取或 [只读 Bash 命令](/docs/zh-CN/permissions.md#read-only-commands)。44检查 `allow` 规则(来自 `allowed_tools` 和 settings.json)。如果规则匹配,工具被批准。工具自己批准的调用也在此步骤被解决,无需规则:例如在您的工作目录内的文件读取或 [只读 Bash 命令](https://code.claude.com/docs/zh-CN/permissions.md#read-only-commands)。
45 45
46被识别出的 [关键路径删除](/docs/zh-CN/permission-modes.md#critical-paths) 不会被允许规则批准。它们是否随后到达您的回调取决于权限模式:例如在 `auto` 模式的 Agent SDK 会话中,Claude Code 默认拒绝它们而不调用它。[关键路径模式表](/docs/zh-CN/permission-modes.md#critical-path-removals-in-each-permission-mode) 列出了每种模式对它们的处理方式。46被识别出的 [关键路径删除](https://code.claude.com/docs/zh-CN/permission-modes.md#critical-paths) 不会被允许规则批准。它们是否随后到达您的回调取决于权限模式:例如在 `auto` 模式的 Agent SDK 会话中,Claude Code 默认拒绝它们而不调用它。[关键路径模式表](https://code.claude.com/docs/zh-CN/permission-modes.md#critical-path-removals-in-each-permission-mode) 列出了每种模式对它们的处理方式。
47 47
48允许规则不会批准从 [网络路径](/docs/zh-CN/permissions.md#network-paths) 进行的读取。48允许规则不会批准从 [网络路径](https://code.claude.com/docs/zh-CN/permissions.md#network-paths) 进行的读取。
49 49
50**6. canUseTool 回调**50**6. canUseTool 回调**
51 51
52如果上述任何步骤都未解决,调用您的 [`canUseTool` 回调](/docs/zh-CN/agent-sdk/user-input) 以获得决定。在 `dontAsk` 模式下,此步骤被跳过,工具被拒绝,不过您安装的 [mod](/docs/zh-CN/plugins/mods/overview.md) 仍然可以批准[部分此类调用](/docs/zh-CN/permissions.md#precedence-among-rules-hooks-and-mods)。52如果上述任何步骤都未解决,调用您的 [`canUseTool` 回调](https://code.claude.com/docs/zh-CN/agent-sdk/user-input) 以获得决定。在 `dontAsk` 模式下,此步骤被跳过,工具被拒绝,不过您安装的 [mod](https://code.claude.com/docs/zh-CN/plugins/mods/overview.md) 仍然可以批准[部分此类调用](https://code.claude.com/docs/zh-CN/permissions.md#precedence-among-rules-hooks-and-mods)。
53 53
54在 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 或更高版本。54在 TypeScript SDK 中,如果您设置了 [`permissionPrompts: 'none'`](https://code.claude.com/docs/zh-CN/agent-sdk/typescript#options),您的回调在此步骤不会被调用。[`PermissionRequest` hook](https://code.claude.com/docs/zh-CN/hooks#permissionrequest) 仍然有机会决定,如果它不决定,Claude Code 拒绝调用。该选项需要 Claude Code v2.1.259 或更高版本。
55 55
5656
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-CN/permission-modes.md#actions-no-mode-auto-approves)60* `permissionMode: 'bypassPermissions'`,它自动批准到达权限模式步骤的每个调用,除了 [任何模式都不自动批准的操作](https://code.claude.com/docs/zh-CN/permission-modes.md#actions-no-mode-auto-approves)
61* 每个裸 `allowedTools` 条目,如 `"Read"`,它在回调被咨询之前自动批准整个工具,除了 [任何模式都不自动批准的操作](/docs/zh-CN/permission-modes.md#actions-no-mode-auto-approves) 和 [从网络路径进行的读取](/docs/zh-CN/permissions.md#network-paths)61* 每个裸 `allowedTools` 条目,如 `"Read"`,它在回调被咨询之前自动批准整个工具,除了 [任何模式都不自动批准的操作](https://code.claude.com/docs/zh-CN/permission-modes.md#actions-no-mode-auto-approves) 和 [从网络路径进行的读取](https://code.claude.com/docs/zh-CN/permissions.md#network-paths)
62 62
63带有说明符的条目,如 `Bash(ls *)` 和 `acceptEdits` 模式不会触发它,来自设置文件的允许规则对检查不可见。63带有说明符的条目,如 `Bash(ls *)` 和 `acceptEdits` 模式不会触发它,来自设置文件的允许规则对检查不可见。
64 64
65使用 `process.on('warning', ...)` 监听并匹配代码以记录或抑制它。要对所有工具调用进行门控,无论模式和规则如何,请改用 [`PreToolUse` hook](/docs/zh-CN/agent-sdk/hooks)。65使用 `process.on('warning', ...)` 监听并匹配代码以记录或抑制它。要对所有工具调用进行门控,无论模式和规则如何,请改用 [`PreToolUse` hook](https://code.claude.com/docs/zh-CN/agent-sdk/hooks)。
66 66
67此页面重点关注 **允许和拒绝规则** 和 **权限模式**。对于其他步骤:67此页面重点关注 **允许和拒绝规则** 和 **权限模式**。对于其他步骤:
68 68
69* **Hooks:** 运行自定义代码以允许、拒绝或修改工具请求。请参阅 [使用 hooks 控制执行](/docs/zh-CN/agent-sdk/hooks.md)。69* **Hooks:** 运行自定义代码以允许、拒绝或修改工具请求。请参阅 [使用 hooks 控制执行](https://code.claude.com/docs/zh-CN/agent-sdk/hooks.md)。
70* **canUseTool 回调:** 在运行时提示用户批准,当没有更早的步骤解决调用时。请参阅 [处理批准和用户输入](/docs/zh-CN/agent-sdk/user-input.md)。70* **canUseTool 回调:** 在运行时提示用户批准,当没有更早的步骤解决调用时。请参阅 [处理批准和用户输入](https://code.claude.com/docs/zh-CN/agent-sdk/user-input.md)。
71 71
72## 允许和拒绝规则72## 允许和拒绝规则
73 73
74`allowed_tools` 和 `disallowed_tools`(TypeScript:`allowedTools` / `disallowedTools`)在上述评估流程中向允许和拒绝规则列表添加条目。如果你在 `allowed_tools` 中命名了某个[任务跟踪工具](/docs/zh-CN/agent-sdk/todo-tracking.md#model-availability),Claude Code 也会为该会话启用这些工具。任何其他未在 `allowed_tools` 中列出的工具仍然可供 Claude 使用,对其的调用如果需要批准,则会进入权限模式。拒绝规则的行为取决于它们是命名工具还是在工具内限定模式。74`allowed_tools` 和 `disallowed_tools`(TypeScript:`allowedTools` / `disallowedTools`)在上述评估流程中向允许和拒绝规则列表添加条目。如果你在 `allowed_tools` 中命名了某个[任务跟踪工具](https://code.claude.com/docs/zh-CN/agent-sdk/todo-tracking.md#model-availability),Claude Code 也会为该会话启用这些工具。任何其他未在 `allowed_tools` 中列出的工具仍然可供 Claude 使用,对其的调用如果需要批准,则会进入权限模式。拒绝规则的行为取决于它们是命名工具还是在工具内限定模式。
75 75
76| 选项 | 效果 |76| 选项 | 效果 |
77| :- | :- |77| :- | :- |
78| `allowed_tools=["Read", "Grep"]` | `Read` 和 `Grep` 被自动批准,[从网络路径读取](/docs/zh-CN/permissions.md#network-paths)除外。此处未列出的其他工具仍然存在,对它们的调用如果需要批准,则会进入权限模式和 `canUseTool`。 |78| `allowed_tools=["Read", "Grep"]` | `Read` 和 `Grep` 被自动批准,[从网络路径读取](https://code.claude.com/docs/zh-CN/permissions.md#network-paths)除外。此处未列出的其他工具仍然存在,对它们的调用如果需要批准,则会进入权限模式和 `canUseTool`。 |
79| `disallowed_tools=["Bash"]` | `Bash` 工具定义从请求中移除。Claude 看不到该工具,无法尝试使用它。 |79| `disallowed_tools=["Bash"]` | `Bash` 工具定义从请求中移除。Claude 看不到该工具,无法尝试使用它。 |
80| `disallowed_tools=["Bash(rm *)"]` | `Bash` 保持可用。匹配 `rm *` [如所写](/docs/zh-CN/permissions.md#bash-rule-limits) 的调用在每种权限模式中都被拒绝,包括 `bypassPermissions`。其他 `Bash` 调用(包括 `/bin/rm`)会进入权限模式。 |80| `disallowed_tools=["Bash(rm *)"]` | `Bash` 保持可用。匹配 `rm *` [如所写](https://code.claude.com/docs/zh-CN/permissions.md#bash-rule-limits) 的调用在每种权限模式中都被拒绝,包括 `bypassPermissions`。其他 `Bash` 调用(包括 `/bin/rm`)会进入权限模式。 |
81| `disallowed_tools=["*"]` | 每个工具定义都从请求中移除。拒绝规则中支持工具名称通配符:`"*"` 匹配每个工具,`"mcp__*"` 匹配所有服务器中的每个 MCP 工具。 |81| `disallowed_tools=["*"]` | 每个工具定义都从请求中移除。拒绝规则中支持工具名称通配符:`"*"` 匹配每个工具,`"mcp__*"` 匹配所有服务器中的每个 MCP 工具。 |
82 82
83允许规则仅在字面 `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__*"]`)会被忽略,不会自动批准任何内容。
84 84
85`Read` 和 `Edit` 的限定规则采用路径模式。`Edit(path)` 规则管理所有写入文件的内置工具,包括 `Write` 和 `NotebookEdit`;`Write(path)` 规则永远不会被文件权限检查匹配。85`Read` 和 `Edit` 的限定规则采用路径模式。`Edit(path)` 规则管理所有写入文件的内置工具,包括 `Write` 和 `NotebookEdit`;`Write(path)` 规则永远不会被文件权限检查匹配。
86 86
87使用 `//path` 表示绝对文件系统路径:`Edit(//secrets/**)` 的拒绝规则会阻止在磁盘上 `/secrets` 下任何位置的写入。使用单个前导斜杠时,`Edit(/secrets/**)` 在规则的源处锚定。对于通过 `allowed_tools` 或 `disallowed_tools` 传递的规则,这意味着会话的工作目录,因此规则不会阻止磁盘上的 `/secrets`。请参阅 [Read 和 Edit 规则](/docs/zh-CN/permissions.md#read-and-edit) 了解四种锚定形式以及来自设置文件的规则如何解析。87使用 `//path` 表示绝对文件系统路径:`Edit(//secrets/**)` 的拒绝规则会阻止在磁盘上 `/secrets` 下任何位置的写入。使用单个前导斜杠时,`Edit(/secrets/**)` 在规则的源处锚定。对于通过 `allowed_tools` 或 `disallowed_tools` 传递的规则,这意味着会话的工作目录,因此规则不会阻止磁盘上的 `/secrets`。请参阅 [Read 和 Edit 规则](https://code.claude.com/docs/zh-CN/permissions.md#read-and-edit) 了解四种锚定形式以及来自设置文件的规则如何解析。
88 88
89> [!WARNING]89> [!WARNING]
90>90>
91> **自动批准的工具永远不会到达 `canUseTool`。** 在任何早期步骤中被批准的工具调用,通过 `acceptEdits` 或 `bypassPermissions`,或通过允许规则,会跳过你的 `canUseTool` 回调,因此你在那里放置的权限检查会被该工具无声地绕过。91> **自动批准的工具永远不会到达 `canUseTool`。** 在任何早期步骤中被批准的工具调用,通过 `acceptEdits` 或 `bypassPermissions`,或通过允许规则,会跳过你的 `canUseTool` 回调,因此你在那里放置的权限检查会被该工具无声地绕过。
92>92>
93> 允许规则永远不会自动批准 `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.md#critical-paths)。在 `dontAsk` 模式中,Claude Code 拒绝这些调用而不调用回调。在其他模式中,前三个会到达回调。[关键路径模式表](/docs/zh-CN/permission-modes.md#critical-path-removals-in-each-permission-mode)列出了每种模式如何处理关键路径移除。识别这些移除操作的检查[可能会遗漏某些命令](/docs/zh-CN/permission-modes.md#critical-paths)。93> 允许规则永远不会自动批准 `AskUserQuestion`、标记为 [`_meta["anthropic/requiresUserInteraction"]`](https://code.claude.com/docs/zh-CN/mcp#require-approval-for-a-specific-tool) 的 MCP 工具、[您的组织设置为 `ask`](https://code.claude.com/docs/zh-CN/mcp#organization-controls-on-connector-tools) 的连接器工具,或被识别出的 `rm` 和 `rmdir` [关键路径移除](https://code.claude.com/docs/zh-CN/permission-modes.md#critical-paths)。在 `dontAsk` 模式中,Claude Code 拒绝这些调用而不调用回调。在其他模式中,前三个会到达回调。[关键路径模式表](https://code.claude.com/docs/zh-CN/permission-modes.md#critical-path-removals-in-each-permission-mode)列出了每种模式如何处理关键路径移除。识别这些移除操作的检查[可能会遗漏某些命令](https://code.claude.com/docs/zh-CN/permission-modes.md#critical-paths)。
94>94>
95> 覆盖范围取决于条目的形式:像 `Read` 或 `mcp__github__get_issue` 这样的裸名称会自动批准对该工具的每个调用,上述例外和[从网络路径读取](/docs/zh-CN/permissions.md#network-paths)除外,而像 `Bash(npm test *)` 这样的限定规则仅自动批准匹配的调用,其他需要批准的 `Bash` 调用仍然会进入回调。对于必须在每个工具调用上运行的检查,使用 [`PreToolUse` hook](/docs/zh-CN/agent-sdk/hooks):hook 在每个其他步骤之前运行,hook 拒绝即使在 `bypassPermissions` 模式中也适用。95> 覆盖范围取决于条目的形式:像 `Read` 或 `mcp__github__get_issue` 这样的裸名称会自动批准对该工具的每个调用,上述例外和[从网络路径读取](https://code.claude.com/docs/zh-CN/permissions.md#network-paths)除外,而像 `Bash(npm test *)` 这样的限定规则仅自动批准匹配的调用,其他需要批准的 `Bash` 调用仍然会进入回调。对于必须在每个工具调用上运行的检查,使用 [`PreToolUse` hook](https://code.claude.com/docs/zh-CN/agent-sdk/hooks):hook 在每个其他步骤之前运行,hook 拒绝即使在 `bypassPermissions` 模式中也适用。
96 96
97对于锁定的代理,将 `allowedTools` 与 `permissionMode: "dontAsk"` 配对:97对于锁定的代理,将 `allowedTools` 与 `permissionMode: "dontAsk"` 配对:
98 98
103};103};
104```104```
105 105
106列出的工具被批准,[任何模式都不自动批准的操作](/docs/zh-CN/permission-modes.md#actions-no-mode-auto-approves)和[从网络路径读取](/docs/zh-CN/permissions.md#network-paths)除外。每个其他会提示的调用则会被拒绝,不过您安装的 [mod](/docs/zh-CN/plugins/mods/overview.md) 仍然可以批准[其中的部分调用](/docs/zh-CN/permissions.md#precedence-among-rules-hooks-and-mods)。106列出的工具被批准,[任何模式都不自动批准的操作](https://code.claude.com/docs/zh-CN/permission-modes.md#actions-no-mode-auto-approves)和[从网络路径读取](https://code.claude.com/docs/zh-CN/permissions.md#network-paths)除外。每个其他会提示的调用则会被拒绝,不过您安装的 [mod](https://code.claude.com/docs/zh-CN/plugins/mods/overview.md) 仍然可以批准[其中的部分调用](https://code.claude.com/docs/zh-CN/permissions.md#precedence-among-rules-hooks-and-mods)。
107 107
108在 `default` 模式中不需要批准的调用会运行,无论您是否列出它们。其中包括[只读 Bash 命令](/docs/zh-CN/permissions.md#read-only-commands)、不在运行前询问的 `Agent` 等工具,以及工作目录内的文件读取。要将工具从请求中完全移除,请将其裸名称添加到 `disallowedTools`。108在 `default` 模式中不需要批准的调用会运行,无论您是否列出它们。其中包括[只读 Bash 命令](https://code.claude.com/docs/zh-CN/permissions.md#read-only-commands)、不在运行前询问的 `Agent` 等工具,以及工作目录内的文件读取。要将工具从请求中完全移除,请将其裸名称添加到 `disallowedTools`。
109 109
110> [!WARNING]110> [!WARNING]
111>111>
112> **`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`。
113 113
114你也可以在 `.claude/settings.json` 中声明式地配置允许、拒绝和询问规则。当启用 `project` 设置源时会读取这些规则,默认 `query()` 选项就是这样。如果你显式设置 `setting_sources`(TypeScript:`settingSources`),请包含 `"project"` 以使其应用。请参阅[权限设置](/docs/zh-CN/settings-reference.md#permission-settings)了解规则语法。114你也可以在 `.claude/settings.json` 中声明式地配置允许、拒绝和询问规则。当启用 `project` 设置源时会读取这些规则,默认 `query()` 选项就是这样。如果你显式设置 `setting_sources`(TypeScript:`settingSources`),请包含 `"project"` 以使其应用。请参阅[权限设置](https://code.claude.com/docs/zh-CN/settings-reference.md#permission-settings)了解规则语法。
115 115
116## 权限模式116## 权限模式
117 117
118权限模式提供对 Claude 如何使用工具的全局控制。您可以在调用 `query()` 时设置权限模式,或在流式会话期间动态更改它。118权限模式为 Claude 使用工具的方式提供全局控制。您可以在调用 `query()` 时设置权限模式,也可以在流式会话期间动态更改。
119 119
120在 Claude Code v2.1.302 或更高版本中,您的应用会以 `default` 模式启动,除非您设置了权限模式,或者应用从其设置文件中的 [`permissions.defaultMode`](/docs/zh-CN/settings-reference#permissions-defaultmode) 获取权限模式。在 `default` 模式下,Claude Code 会拒绝任何需要批准的工具调用,除非您通过允许规则、hook、`canUseTool` 回调或权限提示工具批准它。如果工具调用被拒绝,请参阅[在 `claude -p` 和 Agent SDK 运行中工具调用被拒绝](/docs/zh-CN/permission-modes#which-mode-a-non-interactive-run-starts-in)。120在 Claude Code v2.1.302 或更高版本中,除非您设置了权限模式,或应用从其设置文件中的 [`permissions.defaultMode`](https://code.claude.com/docs/zh-CN/settings-reference#permissions-defaultmode) 获取了权限模式,否则应用会以 `default` 模式启动。在 `default` 模式下,对于任何需要批准的工具调用,除非您通过允许规则、hook、`canUseTool` 回调或权限提示工具批准它,否则 Claude Code 都会拒绝。如果工具调用被拒绝,请参阅 [`claude -p` 和 Agent SDK 运行中的工具调用被拒绝](https://code.claude.com/docs/zh-CN/permission-modes#which-mode-a-non-interactive-run-starts-in)。
121 121
122### 可用模式122### 可用模式
123 123
125 125
126| 模式 | 描述 | 工具行为 |126| 模式 | 描述 | 工具行为 |
127| :- | :- | :- |127| :- | :- | :- |
128| `default` | 标准权限行为 | 无基于模式的自动批准;需要批准且不匹配任何允许规则的调用会触发您的 `canUseTool` 回调 |128| `default` | 标准权限行为 | 没有基于模式的自动批准;需要批准且不匹配任何允许规则的调用会触发您的 `canUseTool` 回调 |
129| `dontAsk` | 拒绝而不是提示 | 任何原本会提示的调用都会被拒绝,且不调用 `canUseTool`,不过您安装的 [mod](/docs/zh-CN/plugins/mods/overview.md) 仍可以批准[其中部分调用](/docs/zh-CN/permissions.md#precedence-among-rules-hooks-and-mods)。由 `allowed_tools` 或 `settings.json` 允许规则批准的调用会运行,`default` 模式下不需要批准的调用也会运行。某些调用,例如[来自网络路径的读取](/docs/zh-CN/permissions.md#network-paths),即使 `allowed_tools` 或允许规则与之匹配也会被拒绝。有关完整列表,请参阅[不要询问模式](#don’t-ask-mode-dontask) |129| `dontAsk` | 拒绝而不是提示 | 任何原本会提示的调用都会被拒绝,且不调用 `canUseTool`,不过您安装的 [mod](https://code.claude.com/docs/zh-CN/plugins/mods/overview.md) 仍可批准[其中部分调用](https://code.claude.com/docs/zh-CN/permissions.md#precedence-among-rules-hooks-and-mods)。由 `allowed_tools` 或 `settings.json` 允许规则批准的调用会运行,在 `default` 模式下无需批准的调用也会运行。某些调用,例如[从网络路径读取](https://code.claude.com/docs/zh-CN/permissions.md#network-paths),即使 `allowed_tools` 或允许规则与其匹配也会被拒绝。完整列表请参阅[不询问模式](#don’t-ask-mode-dontask) |
130| `acceptEdits` | 自动接受文件编辑 | 文件编辑和[文件系统操作](#accept-edits-mode-acceptedits)(`mkdir`、`rm`、`mv` 等)会自动批准 |130| `acceptEdits` | 自动接受文件编辑 | 文件编辑和[文件系统操作](#accept-edits-mode-acceptedits)(`mkdir`、`rm`、`mv` 等)会被自动批准 |
131| `bypassPermissions` | 绕过权限检查 | 工具运行时无需权限提示,除了[任何模式都不自动批准的操作](/docs/zh-CN/permission-modes.md#actions-no-mode-auto-approves)。请谨慎使用 |131| `bypassPermissions` | 绕过权限检查 | 工具无需权限提示即可运行,但[任何模式都不会自动批准的操作](https://code.claude.com/docs/zh-CN/permission-modes.md#actions-no-mode-auto-approves)除外。请谨慎使用 |
132| `plan` | 规划模式 | Claude 在不编辑您的源文件的情况下探索和规划;文件编辑永远不会自动批准,而是通过您的 `canUseTool` 回调提示 |132| `plan` | 计划模式 | Claude 进行探索和规划,但不编辑您的源文件;文件编辑永远不会被自动批准,而是通过您的 `canUseTool` 回调进行提示 |
133| `auto` | 模型分类批准 | 模型分类器审查 shell 命令和网络请求等操作,允许或阻止它审查的每一个操作。有关可用性和决策顺序,请参阅[自动模式](/docs/zh-CN/permission-modes.md#eliminate-prompts-with-auto-mode) |133| `auto` | 由模型分类的批准 | 模型分类器会审查 shell 命令和网络请求等操作,对其审查的每个操作予以允许或阻止。有关可用性和决策顺序,请参阅[自动模式](https://code.claude.com/docs/zh-CN/permission-modes.md#eliminate-prompts-with-auto-mode) |
134 134
135> [!WARNING]135> [!WARNING]
136>136>
137> **子代理继承:** 子代理在父会话的权限模式下运行,除非您在其[`AgentDefinition`](/docs/zh-CN/agent-sdk/typescript#agentdefinition)上设置 `permissionMode`,且父会话处于 `default`、`dontAsk` 或 `plan` 模式。即使这样,Claude Code 也永远不会应用 `"bypassPermissions"` 值,并且仅当该子代理[可以使用自动模式](/docs/zh-CN/permission-modes.md#eliminate-prompts-with-auto-mode)时才会应用 `"auto"` 值。子代理仅在父会话本身处于 `bypassPermissions` 模式时才在该模式下运行。 `bypassPermissions` 异常需要 Claude Code v2.1.267 或更高版本。137> **子代理继承:** 如果您的主会话处于[计划模式](https://code.claude.com/docs/zh-CN/permission-modes.md#analyze-before-you-edit-with-plan-mode),那么即使某个子代理的 [`AgentDefinition`](https://code.claude.com/docs/zh-CN/agent-sdk/typescript#agentdefinition) 设置了 `permissionMode: "acceptEdits"`,它仍会在计划模式下运行。该子代理对您源文件的 `Edit` 和 `Write` 调用仍会交给您的 `canUseTool` 回调。计划模式同样适用于您定义的子代理,这样将工作交给子代理就无法绕过先审查计划这一步。
138>138>
139> 子代理可能具有不同的系统提示和比主代理更少受限的行为,因此继承 `bypassPermissions` 会授予它们完整的自主系统访问权限。[任何模式都不自动批准的操作](/docs/zh-CN/permission-modes.md#actions-no-mode-auto-approves)仍然适用。139> 子代理会从主会话继承 `plan`、`acceptEdits`、`auto` 或 `bypassPermissions`;当主会话处于 `default` 或 `dontAsk` 模式时,子代理会以您设置的模式运行。即便如此,Claude Code 也永远不会应用 `"bypassPermissions"` 值,并且仅当该子代理[可以使用自动模式](https://code.claude.com/docs/zh-CN/permission-modes.md#eliminate-prompts-with-auto-mode)时才会应用 `"auto"` 值。`bypassPermissions` 这一例外需要 Claude Code v2.1.267 或更高版本。
140>
141> 子代理可能具有与主 Agent 不同的系统提示词和更少约束的行为,因此继承 `bypassPermissions` 会授予它们完全、自主的系统访问权限。[任何模式都不会自动批准的操作](https://code.claude.com/docs/zh-CN/permission-modes.md#actions-no-mode-auto-approves)仍然适用。
140 142
141### 设置权限模式143### 设置权限模式
142 144
143您可以在启动查询时设置一次权限模式,或在会话活跃时动态更改它。145您可以在启动查询时一次性设置权限模式,也可以在会话活动期间动态更改。
144 146
145**在查询时**147**查询时**
146 148
147在创建查询时传递 `permission_mode`(Python)或 `permissionMode`(TypeScript)。149在创建查询时传入 `permission_mode`(Python)或 `permissionMode`(TypeScript)。
148 150
149```python Python theme={null}151```python Python theme={null}
150import asyncio152import asyncio
184main();186main();
185```187```
186 188
187**在流式传输期间**189**流式传输期间**
188 190
189调用 `set_permission_mode()`(Python)或 `setPermissionMode()`(TypeScript)以在会话中途更改模式。新模式立即对所有后续工具请求生效。这让您可以从限制性开始,随着信任建立而放宽权限,例如在审查 Claude 的初始方法后切换到 `acceptEdits`。191调用 `set_permission_mode()`(Python)或 `setPermissionMode()`(TypeScript)可在会话中途更改模式。新模式会立即对所有后续工具请求生效。这样您可以先采用严格限制,随着信任建立再放宽权限,例如在审查 Claude 的初始方案后切换到 `acceptEdits`。
190 192
191```python Python theme={null}193```python Python theme={null}
192import asyncio194import asyncio
242 244
243#### 接受编辑模式(`acceptEdits`)245#### 接受编辑模式(`acceptEdits`)
244 246
245自动批准文件操作,以便 Claude 可以编辑代码而无需提示。其他工具(如不是文件系统操作的 Bash 命令)仍需要正常权限。247自动批准文件操作,使 Claude 无需提示即可编辑代码。其他工具(例如不属于文件系统操作的 Bash 命令)仍需要常规权限。
246 248
247**自动批准的操作:**249**自动批准的操作:**
248 250
249* 文件编辑(Edit、Write 工具)251* 文件编辑(Edit、Write 工具)
250* 文件系统命令:`mkdir`、`touch`、`rm`、`rmdir`、`mv`、`cp`、`sed`252* 文件系统命令:`mkdir`、`touch`、`rm`、`rmdir`、`mv`、`cp`、`sed`
251 253
252两者都仅适用于工作目录或 `additionalDirectories` 内的路径。在 `acceptEdits` 模式下,当 Claude 执行以下操作时,Claude Code 不会自动批准请求:254两者都仅适用于工作目录或 `additionalDirectories` 内的路径。在 `acceptEdits` 模式下,当 Claude 执行以下操作时,Claude Code 不会自动批准该请求:
253 255
254* 在该范围之外的路径上工作256* 处理该范围之外的路径
255* 写入受保护的路径257* 写入受保护的路径
256* 使用 `rm` 或 `rmdir` 删除 Claude Code 识别为[关键路径](/docs/zh-CN/permission-modes.md#critical-paths)的路径258* 使用 `rm` 或 `rmdir` 删除 Claude Code 识别为[关键路径](https://code.claude.com/docs/zh-CN/permission-modes.md#critical-paths)的路径
257 259
258**使用场景:** 您信任 Claude 的编辑并希望更快地迭代,例如在原型设计期间或在隔离目录中工作时。260**适用场景:** 您信任 Claude 的编辑并希望加快迭代速度,例如在原型开发期间或在隔离目录中工作时。
259 261
260#### 不要询问模式(`dontAsk`)262#### 不询问模式(`dontAsk`)
261 263
262将任何权限提示转换为拒绝,而不调用 `canUseTool`,不过您安装的 [mod](/docs/zh-CN/plugins/mods/overview.md) 仍可以批准[其中部分调用](/docs/zh-CN/permissions.md#precedence-among-rules-hooks-and-mods)。由 `allowed_tools`、`settings.json` 允许规则或 hook 预先批准的工具会正常运行。`default` 模式下不需要批准的调用也会运行,例如在您的工作目录内的文件读取和对 `Agent` 的调用。264将任何权限提示转换为拒绝,且不调用 `canUseTool`,不过您安装的 [mod](https://code.claude.com/docs/zh-CN/plugins/mods/overview.md) 仍可批准[其中部分调用](https://code.claude.com/docs/zh-CN/permissions.md#precedence-among-rules-hooks-and-mods)。由 `allowed_tools`、`settings.json` 允许规则或 hook 预先批准的工具会正常运行。在 `default` 模式下无需批准的调用也会运行,例如在工作目录内读取文件以及调用 `Agent`。
263 265
264[您的组织设置为 `ask`](/docs/zh-CN/mcp#organization-controls-on-connector-tools) 的连接器工具、需要用户交互的工具、[来自网络路径的读取](/docs/zh-CN/permissions.md#network-paths),以及已识别的[关键路径删除](/docs/zh-CN/permission-modes.md#critical-paths)即使允许规则匹配也会被拒绝。`PreToolUse` hook 允许也不会放行已识别的关键路径删除或来自网络路径的读取。识别这些删除操作的检查[可能会遗漏某些命令](/docs/zh-CN/permission-modes.md#critical-paths)。266[您的组织设置为 `ask`](https://code.claude.com/docs/zh-CN/mcp#organization-controls-on-connector-tools) 的连接器工具、需要用户交互的工具、[从网络路径读取](https://code.claude.com/docs/zh-CN/permissions.md#network-paths)以及被识别出的[关键路径删除](https://code.claude.com/docs/zh-CN/permission-modes.md#critical-paths)即使匹配允许规则也会被拒绝。`PreToolUse` hook 的允许结果同样无法放行被识别出的关键路径删除或从网络路径读取。识别这些删除操作的检查[可能会漏掉某些命令](https://code.claude.com/docs/zh-CN/permission-modes.md#critical-paths)。
265 267
266**使用场景:** 您希望为无头代理提供固定的、明确的工具表面,并且更喜欢硬拒绝而不是依赖 `canUseTool` 不存在的无声依赖。268**适用场景:** 您希望为无头 Agent 提供一组固定、明确的工具,并且更倾向于硬性拒绝,而不是默默依赖 `canUseTool` 的缺失。
267 269
268#### 绕过权限模式(`bypassPermissions`)270#### 绕过权限模式(`bypassPermissions`)
269 271
270自动批准工具使用而无需提示,除了下面警告中列出的情况。钩子仍会执行,如果需要可以阻止操作。在 Linux 和 macOS 上,Claude Code 拒绝在此模式下以 root 身份或在[已识别的沙箱](/docs/zh-CN/permission-modes.md#skip-all-checks-with-bypasspermissions-mode)外的 `sudo` 下启动,查询在第一轮之前失败。272无需提示即可自动批准工具使用,但下方警告中列出的情况除外。hook 仍会执行,并可在需要时阻止操作。在 Linux 和 macOS 上,如果不在[可识别的沙箱](https://code.claude.com/docs/zh-CN/permission-modes.md#skip-all-checks-with-bypasspermissions-mode)中,无论是以 root 身份还是在 `sudo` 下,Claude Code 都会拒绝以此模式启动,查询会在第一轮之前失败。
271 273
272> [!WARNING]274> [!WARNING]
273>275>
274> 请极其谨慎使用。Claude 在此模式下具有完整的系统访问权限。仅在您信任所有可能操作的受控环境中使用。276> 请极其谨慎地使用。在此模式下,Claude 拥有完全的系统访问权限。仅在您信任所有可能操作的受控环境中使用。
275>277>
276> `allowed_tools` 不会限制此模式。每个工具都被批准,而不仅仅是您列出的工具。这些控制仍然适用:278> `allowed_tools` 不会约束此模式。每个工具都会被批准,而不仅仅是您列出的工具。以下控制措施仍然适用:
277>279>
278> * 拒绝规则、显式 `ask` 规则和钩子在模式检查之前被评估,仍然可以阻止工具。280> * 拒绝规则、显式 `ask` 规则和 hook 会在模式检查之前进行评估,仍然可以阻止工具。
279> * [您的组织设置为 `ask`](/docs/zh-CN/mcp#organization-controls-on-connector-tools) 的连接器工具、需要用户交互的工具,以及已识别的[关键路径删除](/docs/zh-CN/permission-modes.md#critical-paths)仍然会转到您的 `canUseTool` 回调。识别这些删除操作的检查[可能会遗漏某些命令](/docs/zh-CN/permission-modes.md#critical-paths)。281> * [您的组织设置为 `ask`](https://code.claude.com/docs/zh-CN/mcp#organization-controls-on-connector-tools) 的连接器工具、需要用户交互的工具以及被识别出的[关键路径删除](https://code.claude.com/docs/zh-CN/permission-modes.md#critical-paths)仍会交给您的 `canUseTool` 回调处理。识别这些删除操作的检查[可能会漏掉某些命令](https://code.claude.com/docs/zh-CN/permission-modes.md#critical-paths)。
280> * [跨会话消息保护措施](/docs/zh-CN/permission-modes.md#skip-all-checks-with-bypasspermissions-mode)仍然适用。282> * [跨会话消息传递保护措施](https://code.claude.com/docs/zh-CN/permission-modes.md#skip-all-checks-with-bypasspermissions-mode)仍然适用。
281 283
282#### 规划模式(`plan`)284#### 计划模式(`plan`)
283 285
284Claude 探索代码库并生成计划,而不编辑您的源文件。只读工具的运行方式与 `default` 权限模式相同。286Claude 会探索代码库并制定计划,而不编辑您的源文件。只读工具的运行方式与 `default` 权限模式相同。
285 287
286在计划模式下,文件编辑永远不会自动批准,即使允许规则匹配或 `PreToolUse` hook 返回 `allow`。它们会通过您的 `canUseTool` 回调提示。 在 Claude Code v2.1.212 或更高版本上,修改文件的 shell 命令(如 `touch` 和 `rm`)会以相同方式到达您的 `canUseTool` 回调。288在计划模式下,文件编辑永远不会被自动批准,即使某条允许规则与之匹配或 `PreToolUse` hook 返回 `allow` 也是如此。它们会改为通过您的 `canUseTool` 回调进行提示。在 Claude Code v2.1.212 或更高版本中,修改文件的 shell 命令(例如 `touch` 和 `rm`)也会以同样的方式交给您的 `canUseTool` 回调。
287 289
288在 TypeScript SDK 中,如果您在 `permissionMode: 'plan'` 旁边设置 `allowDangerouslySkipPermissions: true`,文件编辑和修改文件的 shell 命令仍然会到达您的 `canUseTool` 回调。该选项让您稍后可以使用 `setPermissionMode()` 切换到 `bypassPermissions`。290在 TypeScript SDK 中,如果您在设置 `permissionMode: 'plan'` 的同时设置了 `allowDangerouslySkipPermissions: true`,文件编辑和修改文件的 shell 命令仍会交给您的 `canUseTool` 回调。该选项让您之后可以通过 `setPermissionMode()` 切换到 `bypassPermissions`。
289 291
290Claude 可能会使用 `AskUserQuestion` 在最终确定计划之前澄清需求。有关处理这些提示的信息,请参阅[处理批准和用户输入](/docs/zh-CN/agent-sdk/user-input.md#handle-clarifying-questions)。292Claude 可能会在最终确定计划之前使用 `AskUserQuestion` 来澄清需求。有关如何处理这些提示,请参阅[处理批准和用户输入](https://code.claude.com/docs/zh-CN/agent-sdk/user-input.md#handle-clarifying-questions)。
291 293
292**使用场景:** 您希望 Claude 提议更改而不执行它们,例如在代码审查期间或当您需要在进行更改之前批准更改时。294**适用场景:** 您希望 Claude 提出更改但不执行,例如在代码审查期间,或者您需要在更改生效前先批准时。
293 295
294#### 自动模式(`auto`)296#### 自动模式(`auto`)
295 297
296分类器模型会在 shell 命令和网络请求等操作运行之前对其进行审查,并允许或阻止它审查的每一个操作。有关自动模式所需的模型和提供商以及它评估操作的顺序,请参阅[使用自动模式消除权限提示](/docs/zh-CN/permission-modes.md#eliminate-prompts-with-auto-mode)。298分类器模型会在 shell 命令和网络请求等操作运行之前对其进行审查,并对其审查的每个操作予以允许或阻止。有关自动模式所需的模型和提供商,以及它评估操作的顺序,请参阅[使用自动模式消除权限提示](https://code.claude.com/docs/zh-CN/permission-modes.md#eliminate-prompts-with-auto-mode)。
297 299
298如果您使用 [`set_model()`](/docs/zh-CN/agent-sdk/python#claudesdkclient)、[`setModel()`](/docs/zh-CN/agent-sdk/typescript#query-object) 或 [`applyFlagSettings()`](/docs/zh-CN/agent-sdk/typescript#applyflagsettings) 将处于自动模式的会话切换到自动模式不支持的模型,会话将更改为 `default` 模式:300如果您使用 [`set_model()`](https://code.claude.com/docs/zh-CN/agent-sdk/python#claudesdkclient)、[`setModel()`](https://code.claude.com/docs/zh-CN/agent-sdk/typescript#query-object) 或 [`applyFlagSettings()`](https://code.claude.com/docs/zh-CN/agent-sdk/typescript#applyflagsettings) 将处于自动模式的会话切换到自动模式不支持的模型,该会话会变为 `default` 模式:
299 301
300* **您会看到的内容**:一条子类型为 `status`、`permissionMode` 设置为 `"default"` 的 `system` 消息,TypeScript SDK 将其类型定义为 [`SDKStatusMessage`](/docs/zh-CN/agent-sdk/typescript#sdkstatusmessage)。此后,需要批准且不匹配任何允许规则的调用会到达您的 `canUseTool` 回调。302* **您会看到**:一条子类型为 `status`、`permissionMode` 设置为 `"default"` 的 `system` 消息,TypeScript SDK 将其类型定义为 [`SDKStatusMessage`](https://code.claude.com/docs/zh-CN/agent-sdk/typescript#sdkstatusmessage)。此后,需要批准且不匹配任何允许规则的调用会交给您的 `canUseTool` 回调。
301* **返回自动模式**:切换到受支持的模型,然后调用 `set_permission_mode("auto")` 或 `setPermissionMode("auto")`。如果您切换回原模型但未进行该调用,会话将保持在 `default` 模式。当不受支持的模型处于活动状态时,该调用会失败并显示 `Cannot set permission mode to auto: auto mode unavailable for this model`。303* **要返回自动模式**:切换到受支持的模型,然后调用 `set_permission_mode("auto")` 或 `setPermissionMode("auto")`。如果您将模型切换回来但没有进行该调用,会话将保持在 `default` 模式。当不受支持的模型处于活动状态时,该调用会失败并显示 `Cannot set permission mode to auto: auto mode unavailable for this model`。
302 304
303在调用 `set_model()`、`setModel()` 或 `applyFlagSettings()` 之后更改为 `default` 模式需要 Claude Code v2.1.299 或更高版本。305在调用 `set_model()`、`setModel()` 或 `applyFlagSettings()` 后变为 `default` 模式的行为需要 Claude Code v2.1.299 或更高版本。
304 306
305## 相关资源307## 相关资源
306 308
307有关权限评估流程中的其他步骤:309有关权限评估流程中的其他步骤:
308 310
309* [处理批准和用户输入](/docs/zh-CN/agent-sdk/user-input.md):交互式批准提示和澄清问题311* [处理批准和用户输入](https://code.claude.com/docs/zh-CN/agent-sdk/user-input.md):交互式批准提示和澄清问题
310* [Hooks 指南](/docs/zh-CN/agent-sdk/hooks.md):在代理生命周期中的关键点运行自定义代码312* [Hooks 指南](https://code.claude.com/docs/zh-CN/agent-sdk/hooks.md):在代理生命周期中的关键点运行自定义代码
311* [权限规则](/docs/zh-CN/settings-reference.md#permission-settings):`settings.json` 中的声明式允许/拒绝规则313* [权限规则](https://code.claude.com/docs/zh-CN/settings-reference.md#permission-settings):`settings.json` 中的声明式允许/拒绝规则