被Antihumanity搞虚脱了,所以文章是Gemini 4 Argon在antigravity里面写的,见谅。(
伪安全与真残废:谈谈 Google Antigravity 新版沙盒对开发者体验的毁灭性破坏
近期 Google 对 Antigravity(尤其是 CLI 工具链)进行了一次缺乏基本工程敬畏的静默变更:在未明确更新文档与迁移指南的情况下,将默认执行策略强制切换至底层内核沙盒。这一改动直接摧毁了许多依赖现代工具链的本地工作流,其中最典型的受害者就是已成为 Python 事实标准的 uv。
作为一个主打智能体自主编码的工具,Antigravity 这次更新暴露出的不是技术实力,而是大型科技公司典型的高傲:以“防御性安全”为遮羞布,行破坏开发者体验之实。
一、 粗暴的挂载策略:连现代包管理器都不配拥有路径?
在 Linux/WSL 环境下,新版 CLI 引入了基于 Linux Namespaces 的容器化隔离机制。对于 Agent 工具而言,做执行沙盒在架构设计上无可厚非,但 Antigravity 的实现方式堪称粗糙。
为了所谓的最小攻击面,它对 $HOME 目录采取了极其死板的虚拟挂载与只读覆盖策略。其直接后果是:
- 用户级工具链被全面抹杀:宿主机的
~/.local/bin与~/.cargo/bin被完全隔离在沙盒之外。uv、mise、pnpm这些标准的用户级开发工具,在沙盒内部直接蒸发。 - 命令行接口的低劣设计:CLI 暴露了
--sandbox标志,却连基本的对称参数--no-sandbox都未作适配。布尔 flag 抛出标准库的未定义错误,真正控制沙盒启闭的逻辑却被隐晦地塞进了权限预设(Permission Preset)的层级分支下,毫无自解释性。 - 只管拦截,不管透传:如果要做隔离,合理的做法应当是支持声明式的白名单路径透传(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 才能跑起最基础的包管理器,那这个沙盒就不是在防御黑客,而是在驱逐它的核心用户。