bypassPermissions 是 Claude Code 的一种权限模式,在该模式下 agent 从不暂停询问:只要模型决定执行,编辑、命令、网络调用以及其他一切都会立刻运行。Anthropic 的官方建议是仅在沙盒化的一次性环境中使用它。这一建议针对的是 agent 能接触到什么。但还有一个它未涵盖的问题:是谁在指挥它做事。
对于你自己沙盒里的专属 agent,bypass 是个提升速度的设置。但对于其他人也可以向其发送请求的 agent 来说,bypass 相当于把你的全部本地权限直接交给了他们,中间没有任何人工把关。本文讨论的就是这种区别。
为什么 bypass 很有吸引力
Prompt 会带来阻碍。在漫长的重构中,上百个“allow this edit?”的问题会让你习惯不加细看就点确认。关掉它们能让 agent 感觉像个同事,而不是一张表单。许多人在受版本控制的代码仓库里运行 bypass,他们的理由很充分:改坏了也只需执行一次 git checkout。
这一逻辑能够成立的前提是满足三点:请求是你写的,你在旁边看着,且接触不到任何不可逆的操作。
当别人提出请求时,情况发生了什么变化
请求不是你发起的。 队友说的“清理旧分支”在他们看来是一回事。对 agent 而言,这意味着 git branch -D。在 bypass 模式下,两者之间没有任何暂停确认。
输入不可信。 请求往往带有附件:截图、日志文件、粘贴的 issue。其中的任何内容都可能包含读起来像指令的文本。通过共享输入进行 prompt 注入是一种真实的攻击途径,而 bypass 移除了唯一能拦截它的检查点。
你并没有在盯着。 共享的目的,恰恰是为了让 agent 在你不在时也能工作。一个你本可以在一秒钟内回应的 prompt,变成了无人察觉的行动。
涉及不可逆的操作。 推送到 main、删除、花钱、读取凭据。在常规会话中,你自己机器上极少出现这些操作,所以 bypass 才会让人感觉安全。但这些操作恰恰是别人最容易意外触发的。
界限所在
只有你自己使用的 agent,且工作目录下不存在任何不可逆风险时,才使用 bypass。一旦 agent 进入了包含第二个人的房间,问题就不再是“我有多信任这个模型”,而是“我有多信任能接触到它的每个人以及每个附件”。
在不越界的前提下保持速度
房间通过在该模式之上增加两项机制,让你保留绝大部分速度。
针对个人的授权。 长期授权允许受信任的人在无需每次请求都审批的情况下运行。对于常规调用,agent 自身的模式可以保持宽松。参见权限模式详解。
始终暂停的四类操作。 推送到共享分支、删除、花钱以及涉及凭据,当请求来自他人时,即使在 bypass 模式下也会暂停以等待主人确认。一百次常规编辑无需 prompt 即可运行;而那一次 git push origin main 则会等待你确认。具体逻辑参见 agent 在执行前应始终询问的四类操作。
实用建议
- 你共享的 agent:代码仓库使用
acceptEdits,探索性任务使用plan。授权给你信任的人。 - 仅供你自己使用且处于一次性沙盒中的 agent:bypass 完全适用。
- 工作目录中包含生产凭据的任何环境:使用
default,并为不需要凭据的部分单独配置一个 agent。 - 绝不要共享工作目录中包含密钥文件的 agent。转移密钥,而不是去改模式。
常见问题
房间会改变 bypass 在单次运行中的含义吗? 不会。在单次运行内,bypass 仍然意味着运行环境中没有 prompt。房间所增加的是:谁可以启动运行,以及无论如何都会暂停哪四类操作。
Codex 中的等效设置如何? 情况相同,建议也一样:沙盒中自用可以放宽权限,共享 agent 则不行。
每次推送都要 prompt 不会很烦吗? 在正常会话中,推送到共享分支的操作很少见。如果很频繁,说明该 agent 的工作目录范围可能太大了。
对你高效,对他人谨慎。这正是房间的作用。为你的 agent 建一个房间。
发布于