被Antihumanity搞虚脱了,所以文章是Gemini 4 Argon在antigravity里面写的,见谅。(

伪安全与真残废:谈谈 Google Antigravity 新版沙盒对开发者体验的毁灭性破坏

近期 Google 对 Antigravity(尤其是 CLI 工具链)进行了一次缺乏基本工程敬畏的静默变更:在未明确更新文档与迁移指南的情况下,将默认执行策略强制切换至底层内核沙盒。这一改动直接摧毁了许多依赖现代工具链的本地工作流,其中最典型的受害者就是已成为 Python 事实标准的 uv。

作为一个主打智能体自主编码的工具,Antigravity 这次更新暴露出的不是技术实力,而是大型科技公司典型的高傲:以“防御性安全”为遮羞布,行破坏开发者体验之实。


一、 粗暴的挂载策略:连现代包管理器都不配拥有路径?

在 Linux/WSL 环境下,新版 CLI 引入了基于 Linux Namespaces 的容器化隔离机制。对于 Agent 工具而言,做执行沙盒在架构设计上无可厚非,但 Antigravity 的实现方式堪称粗糙。

为了所谓的最小攻击面,它对 $HOME 目录采取了极其死板的虚拟挂载与只读覆盖策略。其直接后果是:

  1. 用户级工具链被全面抹杀:宿主机的 ~/.local/bin 与 ~/.cargo/bin 被完全隔离在沙盒之外。uv、mise、pnpm 这些标准的用户级开发工具,在沙盒内部直接蒸发。
  2. 命令行接口的低劣设计:CLI 暴露了 --sandbox 标志,却连基本的对称参数 --no-sandbox 都未作适配。布尔 flag 抛出标准库的未定义错误,真正控制沙盒启闭的逻辑却被隐晦地塞进了权限预设(Permission Preset)的层级分支下,毫无自解释性。
  3. 只管拦截,不管透传:如果要做隔离,合理的做法应当是支持声明式的白名单路径透传(Extra Binds),或者自动将宿主机经过哈希验证的 binary 映射进去。而 Antigravity 选择了最偷懒的方案——直接盖上一个空 tmpfs,留给开发者一个毫无意义的 command not found: 127。

二、 零文档、零引导的“黑盒式”治理

如果一个基建级工具必须做出不向后兼容的 Breaking Change,成熟团队的标准实践是:提供 Changelog、在 CLI 报错中给出语义化诊断信息,并指引开发者如何修复。

Antigravity 做了什么?

  • 文档更新滞后,官方文档对沙盒挂载机制的变更语焉不详。
  • 终端报错没有任何沙盒拦截的上下文提示。一个在宿主机正常运行的命令,在 Agent 交互中凭空消失,迫使开发者不得不自己执行 echo $PATH、遍历 ls -lah 去逆向推导它的虚拟文件系统结构。

这种把开发者当成外部白盒测试员的行为,是对工程效率的极大浪费。


三、 横向对比:开源社区给大厂上的工程课

同样是处理 AI 智能体的终端交互,开源生态的方案明显具备更高的工程透明度和专业素养。

  • OpenCode: 在架构上保持了极高的自洽性。它的工具分层、Agent 状态机切换以及环境变量透传都是显式且结构化的。开发者可以通过标准的 AGENTS.md 或全局配置文件清晰地掌控执行边界。它把控制权还给开发者,而不是暗中替开发者做自作聪明的“安全阻断”。
  • Hermes: 同样在执行环境与上下文隔离上做了清晰的权责划分。智能体调用 Subprocess 时,对宿主机环境保持基本的信任与透明度,执行逻辑可审计、可配置,绝不会出现“系统里明明有二进制,进程却视而不见”的荒谬现象。

至于 Claude Code(CC),虽然未曾深度使用其沙盒逻辑,但纵观目前主流生态,能把基础环境隔离做得如此缺乏弹性且拒不更新文档的,Google 算是独树一帜。


四、 结语:安全不是扼杀生产力的借口

为了防止 Prompt Injection 或危险指令破坏宿主机,引入运行时约束是正确的方向。但真正的安全工程应当是细粒度权柄管理(Capability-based Security)与交互式审批机制的结合,而不是一刀切式地把运行环境打成残废。

如果一个 AI 开发工具的沙盒机制,需要开发者靠创建系统级软链接到 /usr/local/bin 这种丑陋的 Workaround 才能跑起最基础的包管理器,那这个沙盒就不是在防御黑客,而是在驱逐它的核心用户。