博客

Claude Code 的权限确认:哪些会问、哪些不会、怎么调整

Claude Code 每次停下来问你,就是一次权限确认。弄清楚什么会触发它,决定了一个会话是能跑一小时,还是每两分钟等你一次。

RoamAI 团队发布于 2026年9月9日

默认哪些会问

  • 从不问:读文件、列目录、搜索(Read、Glob、Grep 这几个工具)。
  • 一直问,直到你说不用:修改或创建文件(Edit、Write),以及每一条 shell 命令(Bash)。

它问的时候,你可以只批准这一次,也可以批准这个工具或这类命令在本次会话里的所有后续操作。对某条具体命令(比如 npm test)的批准可以存进项目配置,以后不再问。

权限模式

  • default:如上。
  • acceptEdits:项目内的文件修改自动接受,shell 命令照样问。
  • plan:只读。Claude 可以看、可以提方案,但不改任何东西。
  • bypassPermissions:什么都不问。对应的参数是 --dangerously-skip-permissions,名字很准确。

会话里按 Shift+Tab 切换模式,或者启动时加 --permission-mode <模式>。在配置里用 permissions.defaultMode 设默认值。

允许与拒绝规则

规则写在项目里的 .claude/settings.json(和团队共享)、.claude/settings.local.json(只有你自己),或者 ~/.claude/settings.json(对所有项目生效)。每条规则写一个工具名,可选地加一个匹配模式:

{
  "permissions": {
    "allow": ["Bash(npm test)", "Bash(git diff:*)", "Edit"],
    "deny": ["Read(./.env)", "Bash(rm -rf:*)"]
  }
}

Bash(npm test) 只放行这一条命令。Bash(git diff:*) 放行所有以 git diff 开头的命令。只写工具名就是放行整个工具。拒绝规则优先于允许规则。会话里运行 /permissions 编辑的是同一份列表。

用 hook 按程序判断

PreToolUse hook 会在每次工具调用前运行你指定的命令。它从标准输入拿到工具名和参数的 JSON,可以批准、拒绝,或者交给正常的确认流程。团队用它来实现匹配模式表达不了的规则,比如只允许 git push 到某个前缀的分支。

root 限制

以 root 运行时,Claude Code 拒绝带 --dangerously-skip-permissions 启动,直接以状态码 1 退出。在服务器上用普通用户跑它。2026 年 8 月在 2.1.x 上验证过。

人不在电脑前的问题

一次确认会把会话卡住,直到有人回答。在服务器的终端里,这意味着会话闲着,直到你重新 ssh 上去看到它。关掉确认能解决等待,但也放弃了安全。

RoamAI 保留确认,把回答的地方挪了。停在权限确认上的会话排到列表最前面,请求显示成按钮,手机收到推送。批准与紧急停止。

不用自己维护服务器,会话也一直在

RoamAI 把 Claude Code 跑在托管机器或你接进来的服务器上,会话需要你时会通知你。注册免费,工作区 $9 / 月。

开始使用

← 全部文章