在终端里直接跑一个拥有你所有权限的AI代理,就像把家门钥匙交给一个来路不明的实习生。省事,但风险明摆着。

这就是Antigravity CLI的用户每天都在面对的选择题。这个工具让你能用对话的方式指挥AI干活,但权限设置始终是个坎。你可以每次手动批准请求,也可以配置成某些类型的请求自动放行。还有一个更痛快的方案:直接加上--dangerously-skip-permissions参数,跳过所有审批环节。

打开网易新闻 查看精彩图片

第三种方式最顺手,也最危险。在主开发机上跑,AI代理不光能搞乱本地环境,还能顺着你已经登录的账号一路摸进GitHub仓库、邮箱,甚至更多地方。开发者Dojo决定换个思路:把它关进容器里。

容器隔离:爆破半径可控

容器化的思路很直接。给AI代理分配一个独立的GitHub账号,只塞给它必需的密钥。想看代码?可以,给个只读权限就行。想让它替你提交Pull Request?那就得额外授权。权限结构像剥洋葱,一层一层按需开放,万一出问题,波及范围也框死在那个沙盒里。

具体怎么做?第一步,容器需要一个Antigravity的OAuth token来接入订阅配额。目前工具还不支持API Key方案,只能手动登录一次,把token留下。之后每次新建会话,本地和云端都从这个种子token出发,自动注入环境变量,不用重复验证。

开发者还顺手搭了一个控制台,用来管理所有的会话。想拉起一个?几秒就绪。想销毁?顺手删掉,没包袱。容器的好处就在这里,用完即弃,干干净净。

会话恢复:本地和云端一致的体验

对话历史不会丢。只要你给会话起同一个名字,无论是本地还是云端,都能接上之前的对话。本地的实现很简单,通过卷挂载把历史保存在开发机硬盘上。

云端方案稍微复杂一点,但逻辑相同。会话密钥同步到Secret Manager,作为环境变量注入Cloud Run服务。对话历史则落盘到Cloud Storage桶里,每个会话一个独立桶,每60秒自动同步一次,服务关闭前也会再存一次。下次重新拉起同一个会话,直接从桶里读档,跟本地体验一致。

安全性上,云端会话完全由IAM控制,永远不会暴露到公网。开发者想连接云端会话时,用gcloud run services proxy命令在本地开一个端口,通过隧道直连到容器。在浏览器里打开localhost,就能跟AI代理和它的Shell交互。控制台把这个过程也封装好了,一键代理。

网络细节的坑和解决方案

Cloud Run跑代理有一个绕不开的限制:每个服务只能对外暴露一个端口。而AI代理的对话界面占一个端口,Shell访问通常还需要另一个端口。只靠Cloud Run默认的网络模型,总有一个端口会被堵在门外。

解决方案可以走Tailscale。需要它的原因是,Tailscale能在容器和本地机器之间建立一条私有通道,绕过Cloud Run的单端口限制,让Shell访问也畅通无阻。具体方案已开源于GitHub仓库github.com/ykdojo/antigravity-cloud-run。

整个架构把安全问题拆成了三个独立模块:容器做隔离,最小化权限做限制,IAM和隧道做访问控制。三者叠加,AI代理不需要频繁向人索要许可,效率上去了,安全也没有撤防。本地开发几分钟就能跑通,同一个容器镜像随时可以推到云端,开发环境和部署环境完全一致。