在 Claude Code SDK 中控制工具使用和权限
canUseTool
回调、钩子和 settings.json 权限规则来实现权限系统。有关完整的 API 文档,请参阅 TypeScript SDK 参考。
canUseTool
- 对未涵盖情况的动态批准,提示用户获取权限query()
时设置权限模式,或在流式会话期间动态更改它。
模式 | 描述 | 工具行为 |
---|---|---|
default | 标准权限行为 | 应用正常权限检查 |
plan | 规划模式 - 无执行 | Claude 只能使用只读工具;在执行前呈现计划 (SDK 中当前不支持) |
acceptEdits | 自动接受文件编辑 | 文件编辑和文件系统操作自动批准 |
bypassPermissions | 绕过所有权限检查 | 所有工具无需权限提示即可运行(谨慎使用) |
acceptEdits
)bypassPermissions
)bypassPermissions
模式 - 如果激活,允许所有剩余工具canUseTool
回调 - 处理剩余情况bypassPermissions
模式下bypassPermissions
模式覆盖允许规则和 canUseTool
canUseTool
回调在调用 query
函数时作为选项传递。它接收工具名称和输入参数,必须返回决定 - 允许或拒绝。
当 Claude Code 会向用户显示权限提示时,canUseTool 会触发,例如钩子和权限规则不涵盖它且不在自动接受模式下。
以下是显示如何实现交互式工具批准的完整示例:
canUseTool
处理权限规则未涵盖的情况settings.json
中的权限规则提供具有内置 bash 命令解析的声明式控制。这些规则在调用 canUseTool
之前进行评估。有关设置配置的更多详细信息,请参阅 Claude Code 设置文档。
ToolName(pattern)
Bash(npm:*)
匹配任何以 “npm” 开头的命令Read(./src/**/*.ts)
匹配 src 中的 TypeScript 文件WebFetch
阻止所有 web 获取rm -rf
或 curl | sh
Bash(git:*)
- 匹配任何 git 命令Bash(npm run test)
- 匹配确切命令Bash(npm run test:*)
- 匹配 npm run test:unit、test:integration 等