为什么需要 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 行测试
- 支持沙箱
真实数据
用户分布
| 模式 | 用户占比 | 说明 |
|---|---|---|
| Auto | 5% | 高级用户 |
| Enabled | 20% | 信任环境 |
| Prompt | 60% | 默认 |
| Disabled | 10% | 生产环境 |
| Reject | 5% | 只咨询 |
效率 vs 安全
| 模式 | 效率 | 安全性 | 适用场景 |
|---|---|---|---|
| Auto | ⭐⭐⭐⭐⭐ | ⭐ | 快速原型 |
| Enabled | ⭐⭐⭐⭐ | ⭐⭐⭐ | 日常开发 |
| Prompt | ⭐⭐⭐ | ⭐⭐⭐⭐ | 大部分用户 |
| Disabled | ⭐⭐ | ⭐⭐⭐⭐⭐ | 生产环境 |
| Reject | ⭐ | ⭐⭐⭐⭐⭐ | 只咨询 |
关键要点
- 5 种模式平衡自主性和安全性
- 默认:Prompt(平衡)
- 操作分类:可逆、不可逆、危险
- 60% 用户使用默认模式
- Codex 的实现更复杂(31K 行代码)
字数:约 1200 字
阅读时间:约 3 分钟