Permission Modes 与决策 Pipeline

Permission Mode 详解

default(默认)

  • 每个操作都提示用户
  • 最安全但最慢
  • 适合不信任 agent 的场景

auto(推荐)

  • ML 分类器自动审批低风险和明显安全的中风险操作
  • 高风险操作仍会提示用户
  • 平衡安全和便利

acceptEdits(开发模式)

  • 自动接受文件编辑(FileEditToolFileWriteTool
  • 其他操作仍然检查
  • 适合代码编辑工作流

bypass(内部模式)

  • 完全自动,不提示用户
  • 所有操作都通过
  • 仅用于 CI/CD 和内部测试

dontAsk / yolo(最安全)

  • 拒绝所有 unsafe 工具(高风险操作)
  • 只允许读操作和已规则允许的操作
  • 适合沙箱环境

Permission 决策 Pipeline:五层防线

[Layer 1] Mode 检查
  ↓
  若 mode == "bypass" → ✓ 允许
  若 mode == "dontAsk" → 检查是否 safe tool
    ├─ 是(FileRead、Glob、Grep 等)→ ✓ 允许
    └─ 否 → ✗ 拒绝
  否则继续下层
  ↓
[Layer 2] Always Allow / Always Deny 规则
  ↓
  检查用户配置的规则列表
  ├─ 匹配 Always Allow 规则 → ✓ 允许
  ├─ 匹配 Always Deny 规则 → ✗ 拒绝
  └─ 无匹配 → 继续下层
  ↓
[Layer 3] 风险分类
  ↓
  根据 tool 类型和操作内容分类为 LOW / MEDIUM / HIGH
  ├─ LOW → ✓ 自动允许
  ├─ MEDIUM → 继续下层
  └─ HIGH → 继续下层
  ↓
[Layer 4] YOLO 分类器
  ↓
  对于 MEDIUM 风险:
  ├─ 如果命令看起来"明显安全" → ✓ 自动批准
  └─ 否则 → 继续下层
  ↓
[Layer 5] 最后手段:用户提示
  ↓
  用户做最终决定: ✓ 允许 / ✗ 拒绝 / 📝 修改规则

Risk Level(风险等级)

LOW

  • 自动允许(不问用户)
  • 例:FileReadTool, GlobTool, GrepTool, WebFetchTool
  • 典型:ls, cat, grep

MEDIUM

  • 取决于 mode(auto mode 用分类器,default mode 问用户)
  • 例:FileEditTool, BashTool (git 命令)
  • 典型:npm install, git commit

HIGH

  • 一般不自动允许(需要用户确认)
  • 例:BashTool (rm -rf), PowerShellTool, REPLTool
  • 典型:rm -rf /, curl bash, eval()

Denial Tracking:Circuit Breaker 机制

如果用户连续拒绝 agent 多次,系统会自动降级权限模式

用户拒绝:
  1. "BashTool"       ← Denial #1
  2. "FileEditTool"   ← Denial #2
  3. "BashTool"       ← Denial #3

连续 3 次拒绝触发!
  ↓
系统自动切换到 "default" mode
后续所有操作都要问用户
  ↓
这样防止:
  - Agent 持续尝试被拒的操作
  - 用户一直看到提示烦不胜烦

深入阅读

  • utils/permissions/PermissionMode.ts:Mode 定义
  • utils/permissions/permissions.ts:完整决策逻辑(52 KB)
  • utils/permissions/yoloClassifier.ts:YOLO 分类器实现(52 KB)

Copyright © 2024 Anthropic. All rights reserved.

This site uses Just the Docs, a documentation theme for Jekyll.