权限与审批
AtomCode 会替你执行工具——改文件、跑 shell、联网抓取、调用 MCP 服务。它的安全模型可以一句话概括:每一次工具调用都会被归到四个「审批等级」之一,等级决定它是直接执行、还是先弹窗征求你确认、以及你选「总是允许」时能不能被记住。本页先讲这套整体模型,再逐一展开:哪些操作落到哪一级、弹窗里你的选择、以及如何在不丢掉安全闸的前提下少问几次。
核心:四个审批等级
这是理解整页的主线。任何工具在执行前都会落到下面四级之一:
| 审批等级 | 含义 | 「总是允许」能记住吗 |
|---|---|---|
| 自动放行 | 直接执行,不打扰你。项目内的安全操作都在这一级。 | —(本就不问) |
| 询问 | 弹窗确认;选「本会话总是允许」后,该工具本会话内不再问。 | ✅ 能 |
| 始终询问 | 每次都问,即使之前按过「总是允许」也不放过——留给破坏性 / 高危操作。 | ❌ 不能 |
| 按资源询问 | 弹窗确认;「总是允许」只记住这一个具体资源(比如某个文件),换一个仍会问。 | 仅同一资源 |
记住这四级,后面所有内容都是在说"某个操作落到哪一级、为什么"。
哪些操作触发哪一级
大原则:在当前项目目录里干活畅通无阻(自动放行);一旦伸到项目外、碰到机密、或执行破坏性操作,就升级到需要确认的等级。
| 操作 | 触发条件 | 审批等级 |
|---|---|---|
Shell(bash)破坏性命令 | rm -rf、dd、git push --force、chmod、mkfs… | 始终询问 |
| Shell 读/写项目外路径 | 命令访问当前项目目录之外 | 读=询问 / 写=始终询问 |
| 编辑 / 新建 / 替换文件 | 目标是敏感文件或在项目外 | 始终询问(敏感/区外) |
| 读文件 / 列符号 / 诊断 | 读取项目外的敏感文件(如 ~/.ssh/id_rsa) | 敏感=按资源询问 / 普通区外=询问 |
web_fetch | URL 指向私网 / 本地回环地址(公网自动放行) | 询问 |
| MCP 工具调用 | 每一次——除非该工具或其 server 已被信任 | 询问 |
始终自动放行的:项目内的读取、搜索、glob、编辑,以及 cd、list_dir、grep、web_search、待办清单。
弹窗里你的选择
当一个工具落到"询问 / 始终询问 / 按资源询问"任一级时,你会看到这几个选项:
- 拒绝 — 否决本次调用,agent 不带它继续。
- 批准 — 仅允许这一次。
- 本会话总是允许 — 本会话内记住(只在内存里,退出即失效)。对「始终询问」级无效;对「按资源询问」级只记住当前资源。
- 永久允许此工具 — 仅 MCP 工具。把这一个工具写进
mcp.json永久自动放行(见两档授权)。
终端里:y / Enter 批准,a 本会话总是允许,n / Esc 拒绝,Ctrl+C 取消整轮。WebUI 里这些选择是审批卡片上的按钮。
MCP 工具的两档授权
MCP 工具调用的是外部代码,所以默认落在「询问」级。如果你信任某个工具或 server,可以把它升到「自动放行」——分三级,从最弱到最持久,而且关键在于只有前两级能从按钮触达:
- 本会话总是允许(
[A]键 / 按钮)——内存级,仅本会话,仅该工具。 - 永久允许此工具(按钮,仅 MCP)——持久,仅该工具。把工具裸名追加进该 server 在
mcp.json里的autoApprove列表:{ "mcpServers": { "my-docs": { "command": "my-docs-server", "autoApprove": ["query", "search"] } } } - 信任整个 server — 只能手改配置,任何运行时按钮都不会设置它:
{ "mcpServers": { "my-docs": { "command": "my-docs-server", "trust": true } } }
MCP 工具以它自己的权限运行,绕过 AtomCode 自身的路径 / 命令防护——一个 server 能写文件、能联网、能花钱。审批弹窗就是你的闸门。trust: true 会自动放行该 server 上的每一个工具,包括你从没见过的写入 / 破坏性工具,所以它被刻意设计成只有你能手改配置文件来开启——一次误点(或一次 prompt 注入)永远没法把单次批准升级成对整个 server 的永久信任。trust: true 只留给你完全掌控的 server(最好是本地、只读)。
敏感路径
"敏感"决定一个项目外路径落到「始终询问」(写)还是「按资源询问」(读)。判定为敏感的有:
- 系统目录 —
/etc、/usr、/System、/Windows、/Program Files… - 机密目录 —
~/.ssh、~/.aws、~/.gnupg - 机密文件 —
.env、credentials、id_rsa、*.pem、*.key、*.p12…
普通应用配置(~/.config/<应用>/…)不当作机密。两个细节呼应上面的等级:读敏感文件是「按资源询问」——选「总是允许」只记住这一个文件(分段重读不再问),换文件仍问;写项目外和破坏性命令是「始终询问」——每次都问,无法用「总是允许」消掉。
联网抓取
web_fetch 对公网站点自动放行;只在 URL 是本地回环 / 私网 / 链路本地字面量(127.0.0.1、192.168.x、localhost、*.local)时落到「询问」级。无论是否放行,抓取在执行时始终强制 SSRF 防护:重新解析主机,拒绝回环、私网、云元数据地址以及任何非 http(s) 协议——所以放宽审批从不削弱真正的安全校验。
两种特殊模式
计划模式:agent 被限制为只读工具——不能编辑、写入或跑 shell——因此根本不会出现修改类审批弹窗。这是工具层面的限制,不是一次性权限放行。
用这个参数启动会把上面四级全部短路成自动放行——包括 rm -rf、git push --force、写项目外——完全不弹窗。只在你不介意丢失的一次性 / 沙箱环境里用。
配置参考
MCP 信任写在 mcp.json 里——项目级 .mcp.json 或用户级 ~/.atomcode/mcp.json——按 server 配置:
| 字段 | 效果 |
|---|---|
trust: true | 把该 server 的所有工具升到「自动放行」。仅手改。 |
autoApprove: ["toolA", …] | 把指定工具升到「自动放行」。「永久允许此工具」按钮追加到这里。 |