实践
给智能体完全权限,又不毁掉你的机器
你不在时,审批提示会让智能体寸步难行;而在自己的笔记本上关掉它们,往往就是损失一下午的开始。解决办法不是胆子大,而是把智能体放到一个重建了也不心疼的地方。
简要回答
--dangerously-skip-permissions 会不经询问地执行每一次工具调用。Anthropic 表示只应在隔离的容器或虚拟机中使用它,而且 Claude Code 拒绝以 root 身份运行它。请以非 root 用户,在一台没有生产环境密钥、可随时丢弃的服务器或容器上运行。或者使用 auto 模式,由一个分类器来批准安全的操作。Anthropic 的手机应用无法把会话切换到 bypass 模式。
Claude Code 在做任何有影响的操作之前都会先询问。坐在电脑前时这没问题:扫一眼、批准、继续。离开电脑时,它就会让工作停滞。一个二十分钟的任务,智能体在第三步停下来,等着四十分钟后你才点下的那一下——而把任务交给它的意义,恰恰就是你不用盯着。
于是大家会去用 --dangerously-skip-permissions。这个参数在不合适的机器上很危险,在合适的机器上则很合理,区别不在于你有多小心,而在于当智能体做了你没想到的事时,它能碰到什么。本文介绍这个参数到底做了什么、为什么不能以 root 运行、让它站得住脚的配置方式,以及 Codex、OpenCode、Grok Build 和 Antigravity 中的对应选项。
bypass 到底放行了什么
Claude Code 有六种权限模式。Anthropic 的权限模式页面是这样描述的。表格沿用文档的顺序:default 是 Manual 模式的配置名,并不是会话的初始模式。
| 模式 | 无需询问即可执行 | Anthropic 所说的“适用场景” |
|---|---|---|
default(手动) | 仅读取 | 敏感工作 |
acceptEdits | 读取、文件编辑、常用文件系统命令 | 迭代你正在审阅的代码 |
plan | 读取;auto 模式可用时,还包括分类器批准的命令 | 改动之前先探索 |
auto | 全部,附带后台安全检查 | 长任务,更少提示 |
dontAsk | 读取和预先批准的工具;其余一律拒绝 | 严格锁定的 CI |
bypassPermissions | 全部 | 仅限隔离的容器和虚拟机 |
bypass 会立即执行每一次工具调用,包括写入受保护的路径,比如 .git 和 Claude 自己的配置。不过有几条规则依然有效:
- 设置中的拒绝规则在所有模式下都会拦截,包括 bypass。允许规则在 bypass 中不起作用。
- 明确的询问规则仍然会弹出提示。
- 针对关键路径的
rm和rmdir仍然会提示:文件系统根目录、顶层目录、你的主目录,以及工作目录及其上级目录。
bypass 无法帮你防御提示注入,也挡不住一条自信满满的错误命令。Anthropic 的文档说得很直接:只在 Claude Code 无法损害宿主机的隔离环境中使用它。
从 Claude Code v2.1.283 起,auto 模式是终端和 VS Code 中交互式会话的内置初始模式。由另一个模型审查每个操作,并拦截有风险的操作,比如批量删除云存储、强制推送,或者启动另一个关闭了审批和沙箱的智能体循环。它去掉了大部分提示,但没有去掉所有检查。它需要受支持的模型,组织也可以关闭它。如果 auto 模式就能满足你的任务,你可能根本不需要 bypass。
两个长得很像的参数
--dangerously-skip-permissions让会话一启动就处于 bypass 模式,等同于--permission-mode bypassPermissions。--allow-dangerously-skip-permissions只是把 bypass 加入 Shift+Tab 的切换循环。会话以普通模式启动,由你决定何时切换到 bypass。
第二个参数之所以重要,是因为如果会话启动时没有启用它,之后就无法进入 bypass。如果你以后可能需要,就必须在启动时决定。--allow- 形式是稳妥的做法:在你主动切换之前,会话一切如常。
第一次以交互方式启用 bypass 启动时,会弹出一个警告对话框。接受后,会把 skipDangerousModePermissionPrompt: true 写入 ~/.claude/settings.json;拒绝则会让 Claude Code 退出。用 -p 的非交互运行会跳过这个对话框。管理员可以在托管设置中用 permissions.disableBypassPermissionsMode: "disable" 为所有人禁用这个模式。
为什么以 root 运行会失败
在 Linux 和 macOS 上,Claude Code 拒绝以 root 身份或在 sudo 下以 bypass 模式启动:
--dangerously-skip-permissions cannot be used with root/sudo privileges for security reasons
在 Claude Code 能识别的沙箱中会跳过这项检查,Anthropic 的 dev container 也正因如此以非 root 用户运行它。如果你在一台普通 VPS 上以 root 登录,请先创建一个普通用户。我们的 VPS 配置指南里有那三条命令。
在许多不同的服务器上用 Maude 的守护进程运行 Claude Code 时,我们总结出三条实用经验:
- 以 root 运行时,
--allow-形式同样会失败。在我们对 Claude Code 2.1.x 的测试中,进程会在启动时直接退出,而不只是把 bypass 从切换循环中去掉。任何会加上这个参数的封装程序都需要先检查用户 ID,否则 root 服务器上的每个会话都会挂掉。 - 旧版本会直接拒绝这个参数。不认识这个参数的 CLI 也会以同样的方式退出。传入之前,先确认它出现在
claude --help中。 - 在全新的机器上测试。你自己的
~/.claude/settings.json里很可能早就有skipDangerousModePermissionPrompt了——就在你点过那个警告的那天。在全新的服务器上,这个对话框会出现在输入提示之前,无人值守的会话就会一直卡在那里。请在干净的容器里测试,而不是在你的笔记本上。
可丢弃服务器模式
在任何地方放宽权限之前,先问自己一个问题:如果这个进程此刻执行了一条任意的破坏性命令,我会失去什么?
在一台普通的笔记本上,老实的答案会让人不安:你的 SSH 密钥、~/.aws 和 ~/.config 里的云服务凭据、保持着登录状态的浏览器配置文件、一个写着生产环境 URL 的 .env,以及你检出的所有其他代码仓库。在一台只放了一个项目的可丢弃 VPS 上,答案就是这个项目(反正已经推送过了),外加一个小时的重建时间。这是可以接受的风险。智能体可以放在以下三个地方:
你自己机器上的容器
这是最便宜、离你最近的选择。用 Docker 或 OrbStack 运行一个 Linux 容器,在里面以非 root 用户安装 Claude Code,只挂载你希望它操作的项目。不要挂载主目录,不要传入宿主机的凭据,也不要使用 --privileged 或挂载 Docker socket——这两者都等于把宿主机交了出去。
专用 VPS
这是大多数人最终选择的方案:一台小机器,只跑一两个项目,别的什么都不放。它全天在线,所以你自己的电脑关机时,工作也能继续。万一它被入侵,销毁后再建一台就好。让它的重建过程保持简单——用一个简短的配置脚本,而不是一台你手工调了一年的机器。VPS 选购指南介绍了如何选配置。
临时云端沙箱
Anthropic 的云端会话会在隔离的虚拟机中运行每个任务,git 凭据保存在沙箱之外,网络访问默认受限。这是很强的隔离,而且无需任何维护。但那里没有 bypass。云端会话提供 Accept edits、Plan 和 Auto,并会忽略代码仓库设置中的 bypassPermissions。
不要放在机器上的密钥
- 生产环境凭据。让它连接 staging 环境或本地副本。你要防范的并不是恶意,而是对着一条恰好放在那里的连接字符串犯下一个自信的错误。
- 你的个人 SSH 密钥。给服务器单独配一个部署密钥或细粒度 token,权限限定在它需要的代码仓库内。也不要把 SSH agent 转发到这台机器上:只要你连着,就等于把你的密钥借给了它。
- 权限过大的云服务 token。不要放管理员级的 AWS 密钥或整个组织范围的 GitHub token。如果某个任务需要,就限定范围并让它自动过期。
- 只存在于那台机器上的任何东西。经常推送,这样即使丢了服务器,也不会损失任何无法重建的东西。
有一个凭据必须放在机器上:智能体自己的登录凭据。Claude Code 把它保存在 ~/.claude/.credentials.json 中,所以任何能以该用户身份获得 shell 的人都能使用你的套餐。这也是给智能体单独建一个用户的又一个理由。
Codex 及其他智能体的对应选项
每个编程智能体都有自己版本的这个开关,含义却不尽相同:
| 智能体 | 跳过所有提示 | 更安全的折中方案 |
|---|---|---|
| Claude Code | --dangerously-skip-permissions(root 下会被拒绝) | auto 模式;acceptEdits;拒绝规则 |
| Codex | --dangerously-bypass-approvals-and-sandbox,别名 --yolo:“仅在外部已加固的环境中使用” | --sandbox workspace-write 搭配按需审批(默认关闭网络)。--full-auto 现在是它的一个已弃用别名 |
| OpenCode | opencode --auto(拒绝规则仍然生效) | 按工具设置 allow / ask / deny(写在 opencode.json 中)。注意大多数工具默认为 allow |
| Grok Build | grok --always-approve(拒绝规则和 PreToolUse hook 仍然生效) | auto 模式(由分类器批准安全的工具);另有独立的沙箱限制已批准的调用 |
| Antigravity CLI | agy --dangerously-skip-permissions | 允许、询问和拒绝列表(拒绝优先);在 macOS 和 Linux 上,默认预设会在无网络的沙箱中运行终端命令 |
来源:Codex CLI 参考和审批与安全、OpenCode 权限、Grok Build 权限、Antigravity 权限以及 Google 的 Antigravity CLI codelab,核实于 2026 年 10 月。Codex 和 Antigravity 默认都带沙箱,所以关闭提示和关闭沙箱是两个独立的决定。需要可丢弃机器的,是关闭沙箱这一项。
能在手机上开启 bypass 吗?
在 Claude 应用里不行。Anthropic 的移动端文档说明,无论是云端会话还是 Remote Control,都不能在应用中选择 Bypass permissions,而且在应用中使用 Remote Control 时也不提供 Auto。对一个通用客户端来说,这是合理的默认设置。
Maude 是为另一种情况设计的:一台你自己拥有、可以重建的服务器。所以它把每个智能体的完全访问模式以“yolo”的名义放在该智能体的其他模式旁边。对 Claude 来说,只有当守护进程以非 root 用户运行、且已安装的 Claude Code 支持该参数时,它才会生效;否则会话会保持在普通模式。Maude 会先以普通模式启动会话,启动后再切换到 bypass,绝不在启动时直接进入。在只有 root 用户的服务器上,应用里有一个按钮可以帮你创建非 root 用户。你可以为每个智能体设置默认模式,也可以按会话单独更改。
完全权限是关于智能体在哪里运行的决定,而不是一个风险设置。把 Claude Code 放在非 root 用户下、一台既没有值得偷的东西也没有无法重建的东西的机器上,你就可以放心让它无人值守地运行。把它留在存着你的密钥和客户项目的机器上,那再怎么小心也不划算。
用手机运行它
如果你已经搭好了可丢弃的服务器,在手机上使用 Claude Code 介绍了 Maude 如何在上面运行它。在手机上批准智能体权限请求则介绍了相反的思路:保留提示,在通知中回应它们。
常见问题
--dangerously-skip-permissions 安全吗?
为什么以 root 运行会失败?
--allow-dangerously-skip-permissions 也会让进程在启动时退出。Codex 中对应的是什么?
codex --dangerously-bypass-approvals-and-sandbox,也可以写作 --yolo,它会同时关闭审批和沙箱。OpenAI 表示只应在外部已加固的环境中使用。低干扰的默认方案是 --sandbox workspace-write 搭配按需审批。较早的 --full-auto 已被弃用,使用时会打印警告。能在手机上开启 bypass 吗?
两个 skip-permissions 参数有什么区别?
--dangerously-skip-permissions 让会话以 bypass 模式启动。--allow-dangerously-skip-permissions 让会话以普通模式启动,只是把 bypass 加入 Shift+Tab 切换循环,方便你之后切换。如果会话启动时两个都没用,就完全无法切换到 bypass。更新内容
- — 重写:root 限制、--allow-dangerously-skip-permissions 与 --dangerously-skip-permissions 的区别、auto 模式作为默认折中方案、bypass 仍会拦截的内容、Codex/OpenCode/Grok Build/Antigravity 的对应选项,以及 Anthropic 手机应用和 Maude 各自允许什么。
- — 首次发布。