拟定规则:把规则精确到每一条命令

权限模式是粗粒度的总开关。权限规则(Permission Rules) 是细粒度的白名单/黑名单,允许用户针对特定工具、特定命令精确配置。

规则格式

工具名(规则内容)

例子:

  • Bash(git *) — 允许所有以 git 开头的 Bash 命令
  • FileEdit(/src/*) — 允许编辑 /src/ 下的所有文件
  • Bash(rm -rf *) — 如果设为 deny,则拒绝所有 rm -rf 命令

三种行为

// src/utils/permissions/PermissionRule.ts
type PermissionBehavior = 'allow' | 'deny' | 'ask'
// allow = 自动通过,不打扰用户
// deny  = 直接拒绝,Claude 不能执行
// ask   = 强制弹出确认框(即使模式是 bypassPermissions)

规则来源(优先级从高到低)

policySettings    ← 企业管理员统一下发(MDM/远程配置),用户无法覆盖
userSettings      ← 用户全局配置(~/.claude/settings.json)
projectSettings   ← 项目级配置(.claude/settings.json,可提交到 git)
localSettings     ← 本地私有配置(.claude/settings.local.json,不提交)
cliArg            ← 命令行参数传入(--allowedTools)
command           ← 斜杠命令动态设置
session           ← 当次会话临时生效

产品设计亮点: projectSettings 可以提交到 git,意味着团队可以共享权限配置——新成员 clone 仓库就自动得到同样的规则,不需要每人手动配置。