Skip to content

2.4 权限系统

预计耗时:12 分钟

本关任务简报

你有没有想过:Claude Code 能读你的文件、执行 shell 命令、甚至删除东西——这些操作是怎么被控制的?为什么有时候它会停下来问你"是否允许执行这个操作"?

这就是权限系统在起作用。理解它,你就知道为什么 Claude 有时候会弹出确认框、什么情况下可以让它自动放行、以及如何避免它在你不注意时做了你不想要的事。


通关奖励:解锁以下技能

  • 🔐 理解权限系统的运转逻辑
  • 🔄 掌握三种权限模式的区别,能根据场景主动切换
  • ⚙️ 能在配置文件里设置精细的允许/拒绝规则
  • ⚠️ 了解高危启动模式及其适用边界

开始前先检查装备

前置知识说明
2.3 斜杠命令指南 →Shift+Tab 切换权限模式是一个快捷键操作,知道斜杠命令的基本交互有助于理解权限弹窗

机制解析

工具调用为什么需要确认

Claude Code 能调用很多工具:读文件、写文件、执行命令、抓取网页……其中有些是安全的(读文件),有些是不可逆的(删文件、执行 rm -rf)。

权限系统的核心逻辑是:对可能产生副作用的操作,在执行前暂停,让你确认。

这既是保护你的文件不被误操作,也是让你随时知道 Claude 正在做什么。


会话内的权限模式

在 Claude Code 对话中,按 Shift+Tab 循环切换权限模式:

默认模式(无标记)

只有"读取"类操作(读文件、搜索)自动放行;会改动的操作——写文件、执行 shell 命令、联网——发起前都暂停等你确认。最保险,不知道该用什么就用这个。

⏵⏵ accept edits on(自动接受文件编辑)

文件读写操作自动放行,不再弹确认。Shell 命令(Bash 工具)仍然需要手动确认。

适合场景:你已经看过 Claude 的计划,确认它不会乱改东西,想减少反复确认的打断。

⏸ plan mode on(仅规划不执行)

Claude 只输出它打算怎么做,不实际执行任何工具。看完方案后,切回默认模式再执行。

适合场景:让 Claude 先出方案,你审核通过后再动手。处理重要或复杂任务时的标准做法。

⏵⏵ auto mode on(自动放行 + 后台把关)

由一个独立的分类器模型在每步操作前审查:安全的操作(读文件、工作目录内编辑、装依赖等)自动放行,危险的(往生产部署、curl | bash、强推 main、删库等)直接拦下。比 accept edits 更省心,又不像完全放行那样裸奔。

适合场景:你信任任务大方向、想让 Claude 长时间少打断地连续干活。

⚠️ auto 模式有门槛

auto 是较新的模式(研究预览),需要账号满足条件才会出现在 Shift+Tab 循环里(接在 plan 之后):要求较新的模型(如 Opus 4.6+ / Sonnet 4.6),团队 / 企业版还需管理员先开启。很多第三方中转平台暂不支持,可能根本看不到这个模式。它能减少弹窗但不等于绝对安全,敏感操作仍建议自己把关。


高危启动模式(启动时才能用)

除了上面三种可以随时切换的模式,还有一种需要在启动时加参数才能开启的模式:

bash
claude --dangerously-skip-permissions

这个模式会跳过所有权限检查,Claude 全程不打断地干活,体验很丝滑——很多人(包括日常重度使用者)就常开它。代价是它不再帮你拦任何操作。

用在你信任 Claude 全权接管的工作区

开它的前提很简单:在一个你愿意让 Claude 放手去做的工作区里用。 最稳妥的几种环境——有 Git 兜底的项目(随时能 git checkout 还原)、Docker 容器、或 3.15 沙箱模式 隔离的环境。在这些地方它很好用、很省心;只是别在放着重要文件、又没有任何回滚手段的目录里裸跑。

想要"少打断"又保留一道安全底线,比起全部放行,更推荐 3.15 沙箱模式——用系统级围栏圈住 Claude 能碰的文件和网络。

可以和会话参数组合:

bash
claude --dangerously-skip-permissions --continue
claude --dangerously-skip-permissions --resume

精细权限规则:在配置文件里设白名单和黑名单

除了切换模式,你还可以在 settings.json 里针对具体工具配置允许/拒绝规则,让某些常用操作永远自动放行:

文件位置

  • 全局:~/.claude/settings.json
  • 项目级:.claude/settings.json(仅对当前项目生效)

配置格式

json
{
  "permissions": {
    "allow": [
      "Bash(git *)",
      "Bash(npm run *)",
      "Bash(npm test)",
      "Read",
      "Edit"
    ],
    "deny": [
      "Bash(rm -rf *)",
      "Bash(sudo *)"
    ]
  }
}

常用工具名和匹配写法

写法含义
Read所有文件读取(通常安全,可以放进 allow)
Edit文件编辑
Write新建文件
Bash(git *)只允许 git 开头的命令
Bash(npm run *)只允许 npm run 开头的命令
Bash(rm -rf *)匹配并拒绝危险删除命令
WebFetch抓取网页

优先级规则deny 优先于 allowallow 优先于弹窗询问。


临时指定(启动时,本次会话有效)

如果想在这次启动里临时允许或禁止某些操作,不修改配置文件的方式:

bash
# 允许 git 和 npm run 操作,不需要确认
claude --allowedTools "Bash(git *)" "Bash(npm run *)" "Read" "Edit"

# 禁止执行任何 Bash 命令
claude --disallowedTools "Bash"

开始闯关

目标:体验三种模式的差异,然后为你的项目配置一条 allow 规则。

第 1 步:切换到 plan 模式观察行为

Shift+Tab 切换到 ⏸ plan mode on,然后让 Claude 做一件需要修改文件的事:

text
在当前目录创建一个 hello.txt,内容写"Hello World"

观察:Claude 应该告诉你它打算怎么做,但不会真的创建文件。

第 2 步:切回默认模式让它执行

Shift+Tab 切换回无标记的默认模式,让 Claude 重新做这件事,这次应该会弹出确认。

第 3 步:添加一条 allow 规则

在项目目录下创建 .claude/settings.json(如果已有就编辑),添加一条允许 git 命令的规则:

json
{
  "permissions": {
    "allow": [
      "Bash(git *)",
      "Read"
    ]
  }
}

保存后重启 Claude Code,让它执行一次 git status,确认不再弹出确认框。


通关检定

  • [ ] 知道 Shift+Tab 几种模式(默认 / accept edits / plan,以及条件满足时的 auto)的区别和适用场景
  • [ ] 用 plan 模式让 Claude 先出方案,再切回默认执行
  • [ ] 知道 --dangerously-skip-permissions 是什么,以及为什么不能随便用
  • [ ] 在 settings.json 里写了至少一条 allow 规则
  • [ ] 知道 denyallow 的优先级关系

全部点亮就算通关 ✓


卡关了?翻车指南在这

settings.json 里加了 allow 规则,但仍然弹确认

踩坑清单:① JSON 格式是否正确(多余的逗号、引号不匹配会导致整个文件无效);② 工具名大小写必须正确(Read 不是 readBash 不是 bash);③ 需要重启 Claude Code 才能加载新配置。

弄不清楚某个操作用的是哪个工具名

在默认模式下让 Claude 执行一次操作,在弹出确认框时仔细看工具名称(比如 Bash(npm test)),然后把这个名称用到 allow 规则里。

--dangerously-skip-permissions 启动后出了问题

这个模式不会保护你的文件。如果用了它却出了问题,先检查 git 历史(git log --oneline),看文件有没有在 git 追踪范围内,如果有可以 git checkout 还原。以后只在有 git 保护的项目里使用这个模式。


下一关

2.5 文件引用与上下文 →

知道了 Claude 能做什么之后,这一关告诉你如何精准控制"Claude 能看到什么"——@! 是向它主动提供上下文的核心工具。

面向公开用户维护,内容基于 Claude Code 官方文档与真实使用经验整理