是什么

permissions 是 Claude Code 的工具访问控制系统,通过 allow/ask/deny 规则精确控制 Claude 可以执行哪些操作。规则可以提交到版本控制分发给团队,也可以由个人自定义。

核心机制

权限层级

工具类型示例默认行为
只读文件读取、Grep无需批准
Bash 命令Shell 执行需批准,“不再询问”永久生效(按项目目录+命令)
文件修改Edit/Write需批准,“不再询问”到 session 结束

规则评估顺序:deny → ask → allow,第一个匹配的规则生效,deny 始终优先。

权限模式

模式说明
default首次使用每个工具时提示
acceptEdits自动批准文件编辑和常见文件系统命令
plan只读模式,不编辑源文件
auto后台安全检查,自动批准(research preview)
dontAsk自动拒绝未预批准的工具
bypassPermissions跳过所有权限提示(仅隔离环境使用)

规则语法

Tool                    # 匹配所有使用
Tool(specifier)         # 精确匹配
Bash(npm run *)         # 通配符
Read(./.env)            # 文件路径
WebFetch(domain:example.com)  # 域名匹配

Managed-only Settings

  • permissions.disableBypassPermissionsMode: "disable":禁止 bypassPermissions 模式
  • permissions.disableAutoMode: "disable":禁止 auto 模式
  • allowManagedPermissionRulesOnly: true:只允许 managed settings 中的权限规则

通过 Hooks 扩展权限 PreToolUse hook 可以动态批准或拒绝工具调用,实现比静态规则更灵活的权限控制。

关键细节

  • 权限由 Claude Code 强制执行,不是模型层面的限制;CLAUDE.md 中的指令不改变权限
  • Bash(*) 等价于 Bash,匹配所有 Bash 命令
  • 通配符 * 可出现在命令的任意位置
  • /permissions 命令查看当前所有权限规则及其来源文件

与其他概念的关联

实践要点

  • 安全边界用 permissions/hooks 强制执行,不要依赖 CLAUDE.md 指令
  • bypassPermissions 只在容器/VM 等隔离环境中使用,生产环境通过 managed settings 禁用
  • 团队共享的 allow 规则放 .claude/settings.json,个人偏好放 user settings