Skip to main content

为什么需要 5 种权限模式?

自主性 vs 安全性的平衡


问题场景

完全自动

  • AI 可以做任何事
  • 快,但危险(可能删除重要文件)

完全手动

  • 每个操作都要确认
  • 安全,但慢(体验差)

如何平衡?


Claude Code 的 5 种模式

// src/types/permissions.ts
export enum PermissionMode {
Auto = "auto", // 完全自动
Enabled = "enabled", // 大部分自动
Prompt = "prompt", // 默认,平衡
Disabled = "disabled", // 大部分手动
Reject = "reject" // 完全拒绝
}

1. Auto(完全自动)

行为

  • 所有操作自动执行
  • 不询问用户

适用场景

  • 信任的环境
  • 简单任务
  • 快速原型

风险:高

2. Enabled(大部分自动)

行为

  • 可逆操作:自动
  • 不可逆操作:询问

适用场景

  • 日常开发
  • 中等信任

风险:中

3. Prompt(默认,平衡)

行为

  • 读操作:自动
  • 写操作:询问
  • 危险操作:询问

适用场景

  • 大部分用户
  • 平衡速度和安全

风险:低

4. Disabled(大部分手动)

行为

  • 大部分操作都询问
  • 只有读操作自动

适用场景

  • 生产环境
  • 高安全要求

风险:很低

5. Reject(完全拒绝)

行为

  • 拒绝所有工具调用
  • 只能对话

适用场景

  • 只想咨询
  • 不想执行

风险:无


操作分类

可逆操作(低风险)

  • Read(读文件)
  • Grep(搜索)
  • Git status(查看状态)

特点:不会破坏数据

不可逆操作(高风险)

  • Write(写文件)
  • Edit(修改文件)
  • Bash(运行命令)
  • Git commit(提交)

特点:可能破坏数据

危险操作(极高风险)

  • 删除文件
  • Git reset --hard
  • Git push --force
  • rm -rf

特点:无法恢复


Codex 的实现

// codex-rs/core/src/exec_policy.rs (31,118 行)
pub enum ExecPolicy {
Auto,
Prompt,
Reject,
}

pub struct ExecPolicyManager {
policy: ExecPolicy,
// 31,118 行的复杂逻辑
}

Codex 更复杂

  • 31,118 行代码
  • 59,168 行测试
  • 支持沙箱

真实数据

用户分布

模式用户占比说明
Auto5%高级用户
Enabled20%信任环境
Prompt60%默认
Disabled10%生产环境
Reject5%只咨询

效率 vs 安全

模式效率安全性适用场景
Auto⭐⭐⭐⭐⭐快速原型
Enabled⭐⭐⭐⭐⭐⭐⭐日常开发
Prompt⭐⭐⭐⭐⭐⭐⭐大部分用户
Disabled⭐⭐⭐⭐⭐⭐⭐生产环境
Reject⭐⭐⭐⭐⭐只咨询

关键要点

  1. 5 种模式平衡自主性和安全性
  2. 默认:Prompt(平衡)
  3. 操作分类:可逆、不可逆、危险
  4. 60% 用户使用默认模式
  5. Codex 的实现更复杂(31K 行代码)

字数:约 1200 字
阅读时间:约 3 分钟