为什么 AI Agent 需要权限分层

AI Agent 的权限不要按“信任不信任”来设。更稳的方式是按动作后果分层:能自动跑、必须确认、直接禁止。

自动权限只给可重复、可回看、不会改外部状态的动作。会写文件、装依赖、连网络、改 Git 历史或碰凭据的动作,都应该先停下来。

自动跑只读查询、工作区内搜索、git status / diff、项目规则允许的本地检查
人工确认安装依赖、写文件、提交代码、推送分支、访问网络、写入工作区外目录
直接禁止删除目录、重写 Git 历史、打印密钥、修改凭据文件、执行远程脚本

哪些命令可以自动跑

第一批可以自动放行的是读项目、查状态、跑本地检查。这些动作失败了也容易复现,输出也能被你回看。

如果一个命令只回答“现在是什么状态”,通常可以自动跑。如果它会改变“以后是什么状态”,先不要自动跑。

  • 列目录、读文件、搜索代码、查看帮助和版本号
  • `git status`、`git diff`、`git log` 这类只读 Git 命令
  • 项目规则里明确允许的 `lint`、`typecheck`、单元测试
  • 不访问公网、不写数据库、不上传文件的本地脚本
  • 只在当前工作区读取或生成临时诊断输出的命令
Text
你可以自动运行这些检查,但不要改文件:
1. 查看 git status 和 git diff
2. 搜索相关代码和配置
3. 读取项目规则文件
4. 运行项目规则明确允许的本地检查
5. 最后报告命令、结果和未运行的检查

哪些命令必须先问你

第二层是需要你确认的动作。这些动作不一定危险,但它们会改变环境、依赖、远端状态或别人也会看到的仓库状态。

这类动作不要为了减少打断而长期放行。权限提示的价值,就是让你在状态变化前看一眼。

  • 安装、升级、卸载依赖,例如 `pnpm install`、`npm install -g`、`brew install`
  • 修改 package 版本、lockfile、构建配置、CI 配置和部署配置
  • 数据库迁移、数据修复、清缓存、生成或覆盖大量文件
  • 访问外部网络的命令,例如 `curl`、`Invoke-WebRequest`、下载脚本
  • Git 提交、打 tag、push、merge、rebase、创建 PR
  • 写入工作区外目录、系统配置目录、用户主目录或共享目录

哪些命令应该直接禁止

第三层不要靠确认弹窗解决。直接禁止。Agent 看到一个确认框时,仍然可能把动作解释成“用户允许我继续”。高破坏动作应该根本进不了执行路径。

尤其不要把“我会小心”写进规则文件当边界。提示词能影响 Agent 想做什么,权限规则才决定它能做什么。

  • 递归删除目录、清空用户目录、删除 `.git` 或系统目录
  • `git reset --hard`、强制 push、批量改历史
  • 读取、打印、复制 `.env`、SSH key、OAuth token、云厂商凭据
  • 把密钥写进文章、日志、issue、截图或提交记录
  • 执行从网络下载的脚本,例如 `curl ... | sh` 或 `irm ... | iex`
  • 绕过沙箱、长期开启全权限、把工作区外目录加成可写根目录

Codex 权限怎么配

Codex 里先从 `workspace-write` 和 `on-request` 开始。这个组合允许 Agent 在当前工作区内推进任务,同时把越界写入、网络访问和权限升级留给确认。

如果你正在处理陌生仓库或临时下载的代码,把项目标成 untrusted,让 Codex 跳过项目本地 `.codex/` 配置、hooks 和 rules。等你确认仓库可信,再切回正常项目流。

toml
approval_policy = "on-request"
sandbox_mode = "workspace-write"

[sandbox_workspace_write]
network_access = false
writable_roots = []

[shell_environment_policy]
inherit = "core"
exclude = ["*KEY*", "*TOKEN*", "*SECRET*"]

Claude Code 权限怎么配

Claude Code 的权限规则可以直接分成 allow、ask、deny。先放行只读和明确的本地检查,再把安装、提交、推送和网络动作放进 ask,最后把删除、密钥和敏感文件放进 deny。

PowerShell 项目要写 PowerShell 规则,不要只写 Bash。Claude Code 会按命令拆分复合命令;一个复合命令里的每个子命令都要匹配,才会自动执行。

JSON
{
  "permissions": {
    "allow": [
      "PowerShell(Get-ChildItem *)",
      "PowerShell(git status)",
      "PowerShell(git diff *)",
      "PowerShell(pnpm run lint)"
    ],
    "ask": [
      "PowerShell(pnpm install *)",
      "PowerShell(git commit *)",
      "PowerShell(git push *)",
      "WebFetch(domain:github.com)"
    ],
    "deny": [
      "PowerShell(Remove-Item *)",
      "Read(./.env)",
      "Read(./.env.local)"
    ]
  }
}

Gemini CLI 扩权怎么处理

Gemini CLI 的沙箱可以在命令需要更多权限时弹出扩权请求。这个提示适合处理一次性动作:比如某个命令需要网络,或者需要访问工作区外的一个只读目录。

不要把一次扩权变成长期默认。能挂只读目录就不要挂可写目录。能只给本次命令就不要全局打开。

  • 需要访问工作区外文档时,优先只读挂载
  • 需要安装依赖时,先看包名、来源和 lockfile 变化
  • 需要网络时,先确认访问的域名和下载内容
  • 需要关闭 tool sandboxing 时,先确认是否只是当前环境兼容问题
  • 用完扩权后,回到默认沙箱状态继续做代码修改

项目规则里应该写什么

权限配置只解决能不能执行。项目规则还要告诉 Agent 什么时候该执行。你应该把常用命令分成“默认可检查”和“必须先问”。

这段适合放进 `AGENTS.md` 或 `CLAUDE.md`。它不是工具配置,只是给 Agent 的工作边界。真正的权限仍然要在 Codex、Claude Code 或 Gemini CLI 的权限系统里设置。

md
Command policy:
- Auto: read files, search code, git status, git diff, pnpm run lint, pnpm run typecheck.
- Ask first: pnpm install, package upgrades, git commit, git push, network downloads, database migrations.
- Never: print secrets, edit .env, recursive delete, git reset --hard, force push, write outside the workspace.

不同任务应该用什么权限

不要用同一套权限跑所有任务。权限应该跟任务风险一起变。读代码、改文案、补小测试,可以让 Agent 多跑一点。支付、权限、数据库、部署、依赖升级,要把权限收回来。

最重要的直觉是:权限不是为了让 Agent 更聪明,而是为了让错误动作变小。AI 的能力是锯齿状的,它会在很难的地方做对,也会在很简单的地方犯错。

读代码和定位问题read-only 或 plan 模式
小范围代码修改工作区写入,保留命令确认
依赖、部署、数据库每一步确认,先看 diff 和回滚点
陌生仓库和外部脚本不信任项目配置,不自动执行网络脚本

权限弹窗应该怎么判断

权限提示弹出来时,不要只看命令名字。先用 5 个问题判断要不要放行。答不上来,就拒绝,让 Agent 解释或换更小的命令。

  • 这个命令会不会写文件、删文件或改 Git 状态?
  • 这个命令会不会访问网络、下载脚本或上传内容?
  • 这个命令会不会读取密钥、凭据或工作区外文件?
  • 这个命令失败后能不能用一个 diff 或备份恢复?
  • 这个命令是不是完成当前任务所必需的最小动作?

权限设置后怎么验证

权限改完以后,不要马上交给 Agent 做大迁移。先用一个小任务验证它会不会自动跑该跑的检查、会不会在安装依赖或提交代码前停下来。

成功标准不是“它没有报错”。成功标准是:只读命令能顺畅执行,写入动作限制在工作区内,高风险动作会触发确认或被直接拒绝。

Text
请做一个权限验证任务:
1. 只读取项目规则和相关文件
2. 运行 git status 和 git diff
3. 不安装依赖,不提交代码,不访问网络
4. 如果你认为需要高风险命令,先说明原因并等待确认
5. 最后报告哪些动作被自动允许、哪些动作需要确认

参考来源

Codex Configuration ReferenceOpenAI 官方文档Claude Code Configure permissionsAnthropic 官方文档Claude Code Permission modesAnthropic 官方文档Gemini CLI sandboxGoogle Gemini CLI 文档

相关文章

Codex CLI approval_policy 改了还是一直要确认怎么办错误日志 / 约 11 分钟为什么 AI Agent 写代码必须有 AGENTS.md / CLAUDE.md智能编程 / 约 9 分钟AI Coding 工具真正改变的不是写代码,而是验证代码智能编程 / 约 8 分钟我如何让 AI 只改该改的文件智能编程 / 约 8 分钟AI Coding 的下一步:从 prompt 技巧到工程约束智能编程 / 约 8 分钟Codex CLI 实用配置指南:先把这 6 件事配好智能编程 / 约 16 分钟Claude Code 配置文件和权限怎么检查开发环境 / 约 10 分钟