心 智 七 篇 · Seven Mental Models
← Knowledge Atlas · 概念

Claude Code 权限系统(分层审批机制)

Claude Code 分层权限系统:只读/文件修改/Bash 三级审批,规则指定符,权限持久化,Hooks 扩展
概念 · CLAUDE CODE 权限系统 · 分层审批

Claude Code 权限系统

Claude Code Permission System — 基于可逆性的分层工具审批

三级结构背后的设计逻辑是可逆性:只读操作无副作用可自由执行;文件修改可撤销(git),会话级授权够用;Bash 命令可能执行任意系统操作,需要永久记录。

只读工具Read · Grep · Glob无需审批
文件修改工具Edit · Write”不再询问” → 会话内永久授权
Bash 命令Shell 执行(任意系统操作)“不再询问” → 保存为永久 allow 规则
规则语法示例
allow: [“Bash(npm run *)”, “WebFetch(domain:github.com)“]deny: [“Bash(git push *)”, “Read(~/.ssh/**)“]
权限层(应用层)控制 Claude 能调用哪些工具
沙箱层(OS 层)控制 Bash 子进程能访问什么(Read deny 不阻止 cat .env)
Hooks 层(动态层)PreToolUse 注入自定义策略,exit 2 阻止调用
→ 规则层次 · 权限模式 · Agent 沙箱 · GuardrailsAnthropic (2026)

Claude Code 权限系统(分层审批机制)

定义

Claude Code 权限系统是一套针对 AI 编码 agent 工具调用的分层审批机制——根据操作风险将工具分级,对不同风险级别的工具适用不同的审批策略。

三级工具分类

工具类型示例审批要求”不再询问”效果
只读工具文件读取、Grep、Glob无需审批N/A
文件修改工具Edit、Write需要审批会话内永久授权
Bash 命令Shell 执行需要审批永久记录(按项目目录+命令)

这个三级结构背后的设计逻辑是可逆性:只读操作无副作用,可自由执行;文件修改可以撤销(git),会话级授权够用;Bash 命令可能执行任意系统操作,需要永久记录以避免重复确认同一个已批准的安全命令。

规则系统

权限通过三类规则管理(详见 allow/ask/deny 规则层次):

  • Allow:工具不需要手动确认即可使用
  • Ask:每次使用前弹出确认提示
  • Deny:阻止工具使用

规则支持精细的工具匹配(详见 规则指定符)。

规则指定符 { #规则指定符 }

规则格式:ToolTool(specifier)

工具级(匹配所有使用):BashReadEditWebFetch

精细匹配

{
  "permissions": {
    "allow": ["Bash(npm run *)", "WebFetch(domain:github.com)"],
    "deny": ["Bash(git push *)"]
  }
}

路径模式(遵循 gitignore 规范):

模式含义示例
//path绝对路径Read(//Users/alice/secrets/**)
~/path从主目录Read(~/Documents/*.pdf)
/path从项目根目录Edit(/src/**/*.ts)
path./path从当前目录Read(*.env)

注意:Read/Edit 的 deny 规则只阻止内置工具,不阻止 Bash 子进程(如 cat .env)。OS 级强制需要配合沙箱

权限持久化机制

“Yes, don’t ask again” 的确认行为:

  • 文件修改工具:记录到当前会话,会话结束失效
  • Bash 命令:保存为 allow 规则到 settings.local.json,永久生效

复合命令(git status && npm test)被拆分保存——每个需要审批的子命令单独保存一条规则(最多 5 条)。

Hooks 扩展

PreToolUse hooks 在权限评估前运行,可动态控制:

  • exit 2:阻止工具调用(即使有 allow 规则也生效)
  • 返回 "allow":跳过提示,但 deny 规则仍生效
  • 返回 "ask":强制提示

Hooks 是 guardrails 的 runtime 扩展点——可实现超出静态规则覆盖范围的动态策略(如 URL 验证、参数检查)。

与其他安全层的关系

权限层(应用层)    → 控制 Claude 能调用哪些工具
沙箱层(OS 层)    → 控制 Bash 子进程能访问什么
Hooks 层(动态层) → 在权限评估前注入自定义逻辑

三层互补,形成纵深防御。详见权限与沙箱的关系

相关概念

References

  • sources/anthropic_official/claude-code-permissions.md