RSS

第 4 章 / 共 12 章

权限模式:让它敢动手,又不闯祸

约 6 分钟 更新于

4.1 一个必须先想清楚的问题

“它会不会未经同意就把我的代码改坏、把命令跑坏?”

这个担心是合理的,但它藏着一个更实际的问题:如果每一步都要你点确认,一天下来你会点几十次,然后从第十次开始你就不再真的在看内容了——你只是在点”允许”。官方文档直接点破了这个失效模式:到第十次批准的时候,你是在点过去,而不是在审查

所以权限设计的目标不是”尽可能多地拦”,而是把你的注意力留给真正值得看的那几次

4.2 五档自主度

Claude Code 提供了一组权限模式,在会话里按 Shift + Tab 循环切换,也可以用 --permission-mode 在启动时指定:

模式行为什么时候用
plan(计划)只读探索,不改源文件,产出方案面对不熟悉的代码、多文件改动之前
default / Manual(手动)改文件、跑命令前逐次询问高风险仓库;你想逐条把关时
acceptEdits(接受编辑)自动接受文件编辑和常见文件系统命令方向已经确认、进入机械执行阶段
auto(自动)由一个分类模型在后台审查动作并拦截越界行为日常主力模式(订阅账号的交互式会话默认)
bypassPermissions(绕过)除受保护路径外几乎不再询问仅限隔离容器/虚拟机
第4章:五档自主度阶梯
图 4.1:注意这不是一条”越往上越好”的进度条,而是一条风险与摩擦的权衡曲线。多数人的正确做法是在 planauto 之间来回切,而不是一路爬到顶。

关于最顶上那一档,需要把官方原话说清楚:--dangerously-skip-permissions 就等于 --permission-mode bypassPermissions。官方的使用条件是”只在容器、虚拟机或无外网的开发容器这类隔离环境里使用,确保 Claude Code 无法损害你的宿主机”,并且明确说明它对提示注入和意外操作不提供任何保护。在 Linux/macOS 上以 root/sudo 身份运行时它会被直接拒绝。

如果你的动机只是”提示太多太烦”,正确答案是 auto 模式加上一份权限清单,而不是这个开关。

4.3 工作目录就是第一道边界

在手动模式下,Claude Code 启动时是只读的,并且只能写它启动所在的目录及其子目录。这条边界比大多数人以为的更重要:它意味着”在哪里启动”本身就是一个安全决策。

需要跨目录时,用参数显式扩展,而不是干脆去家目录启动:

claude --add-dir ../shared-types

还有一个容易被忽略的机制:目录信任。第一次在一个新仓库里启动时,会弹出信任确认。在你确认之前,这个项目的部分配置不会生效。这道门的存在,是因为项目里的钩子、环境变量等配置是会执行代码的——你 clone 一个陌生仓库然后直接在里面启动,等于同意运行它自带的配置。

4.4 用规则清单代替逐次点击

权限规则分三类,按 deny → ask → allow 的顺序匹配,第一条命中的生效:

  • allow:直接放行,不再询问;
  • ask:每次都问;
  • deny:直接拒绝。

规则写在配置文件里。最常用的位置是项目下的 .claude/settings.local.json(个人本地、通常加进 .gitignore)和 .claude/settings.json(团队共享、提交进仓库)。

一份适合大多数 Web 项目的起步配置:

{
  "permissions": {
    "allow": [
      "Bash(npm run test:*)",
      "Bash(npm run lint)",
      "Bash(git status)",
      "Bash(git diff *)",
      "Bash(git add *)",
      "Read(./src/**)"
    ],
    "ask": [
      "Bash(npm install *)"
    ],
    "deny": [
      "Bash(git push *)",
      "Bash(rm -rf *)",
      "Read(./.env)",
      "Read(./secrets/**)"
    ]
  }
}

几点说明:

  • 括号里的模式用 * 通配,文件路径用 gitignore 风格的写法,** 可以跨目录;
  • 读取敏感文件也写进 deny,不要只防写不防读;
  • git push 放进 deny 是个务实的默认值:你随时可以自己推,但你不希望它在你没看 diff 之前推。

在会话里可以用 /permissions 直接查看和调整当前生效的规则。当你在提示框里点”允许,并且以后不要再问”时,命令类的规则会被持久化到当前仓库的配置里;文件类的批准通常只在本次会话内有效。

4.5 配置从哪里来:五级优先级

当行为和你预期不符时,多半是配置层级搞混了。从高到低:

  1. 组织下发的管理策略(由 IT 部署,个人无法覆盖)
  2. 启动时的命令行参数
  3. .claude/settings.local.json(项目本地,不进版本库)
  4. .claude/settings.json(项目共享,进版本库)
  5. ~/.claude/settings.json(个人全局,作用于所有项目)

实际用法很简单:团队共同规矩写第 4 层,个人偏好写第 5 层,机器特有的东西写第 3 层。

4.6 常见坑

4.7 本章练习与检查点

你现在的成果:你有了一份写下来的边界,而不是靠每次点击临时决定。从这里开始,你可以放心地把自动化档位往上调一格。

广告位 · Multiplex 关联广告