Google 的反重力(Antigravity)CLI 需要 OAuth 登录且强依赖 Google 服务器。本方案通过本地反向代理,将 agy 的所有 API 请求劫持到第三方中转站(如 AICodeMirror),同时绕过 Google OAuth 登录,无需 GPU 翻墙,无需 Google 账号,开箱即用。
┌──────────────┐ CLOUD_CODE_URL ┌─────────────────────┐
│ agy CLI │ ──────────────────────────> │ translator_proxy │
│ (Antigravity│ <────────────────────────── │ (本地代理 :18896) │
│ CLI 1.0.9) │ │ │
└──────────────┘ │ Mock 端点: │
│ │ loadCodeAssist │
│ OAuth Token │ fetchAvailable... │
│ (macOS 钥匙串) │ fetchUserInfo │
│ │ listExperiments │
▼ │ ... │
┌──────────────┐ │ │
│ macOS 钥匙串 │ │ 转发端点: │
│ 假 token │ │ generateContent │──> AICodeMirror
│ (2099年过期) │ │ streamGenerate... │ Gemini API
└──────────────┘ └─────────────────────┘
- Bootstrap 端点(
loadCodeAssist、fetchAvailableModels等)→ 本地 JSON mock,秒返 - 生成端点(
streamGenerateContent)→ 转发到中转站 Gemini API - OAuth 验证 → macOS 钥匙串存储假 token,Google 验证软失败,agy 继续运行
以 AICodeMirror 为例:https://www.aicodemirror.com/register?invitecode=HM74RP
注册后在后台获取 API Key(格式 sk-ant-api03-...)。
# 安装 agy(如已安装跳过)
# 参考 Google 官方文档安装 Antigravity CLIcd agy--jump
export GEMINI_API_KEY="sk-ant-api03-你的AICodeMirror密钥"
python3 translator_proxy.py代理默认监听 127.0.0.1:18896,可通过 AGY_PROXY_PORT 环境变量修改。
agy 启动时会检查 macOS 钥匙串中的 Google OAuth token。我们注入一个假 token:
# 删除旧 token(如有)
security delete-generic-password -s gemini -a antigravity 2>/dev/null
# 生成并写入假 token(过期时间 2099 年)
python3 -c "
import json, base64
fake = {
'token': {
'access_token': 'ya29.fake_bypass',
'token_type': 'Bearer',
'refresh_token': '1//fake',
'expiry': '2099-12-31T23:59:59+08:00'
},
'auth_method': 'consumer'
}
val = 'go-keyring-base64:' + base64.b64encode(json.dumps(fake).encode()).decode()
with open('/tmp/agy_token.txt', 'w') as f: f.write(val)
" && security add-generic-password -s gemini -a antigravity -w "$(cat /tmp/agy_token.txt)" -U && rm /tmp/agy_token.txt
# 验证写入
security find-generic-password -s gemini -a antigravity -w | head -c 40绕过机制:agy 读到假 token 后向 Google 的
userinfo端点发起验证,Google 返回 401。agy 对此是软失败——仅弹出Eligibility Check failed: 401警告,继续正常运行。
CLOUD_CODE_URL="http://127.0.0.1:18896" agy看到 Eligibility Check failed: 401 Unauthorized 是正常的,忽略即可。
代理预设显示 3 个模型,由 agentModelSorts 过滤:
| TUI 显示 | 模型 ID | 中转站对应 |
|---|---|---|
| Gemini 3.5 Flash | gemini-3.5-flash |
gemini-3.5-flash |
| Gemini 3.1 Pro Preview | gemini-3.1-pro-preview |
gemini-3.1-pro-preview |
| Gemini 3 Flash Preview | gemini-3-flash-preview |
gemini-3-flash-preview |
模型切换后,代理从 setUserSettings 请求中捕获用户选择,转发到中转站对应模型。
自定义模型列表:编辑 translator_proxy.py 中的三处配置:
# 1. fetchAvailableModels 的显示列表(fam_data.json 中的 agentModelSorts)
# 2. loadCodeAssist 的模型配置(LCA_JSON)
# 3. 中转站模型映射(MODEL_MAP)| 文件 | 说明 |
|---|---|
translator_proxy.py |
核心代理,HTTP 服务器 |
fam_data.json |
fetchAvailableModels mock(23 个内部模型,3 个显示) |
start_proxy.sh |
一键启动脚本 |
translator_log.jsonl |
请求日志(自动生成) |
| 变量 | 说明 | 默认值 |
|---|---|---|
GEMINI_API_KEY |
中转站 API Key | 必填 |
AGY_PROXY_PORT |
代理端口 | 18896 |
CLOUD_CODE_URL |
agy 后端地址 | http://127.0.0.1:18896 |
Eligibility Check failed: connection refused
代理未启动。curl http://127.0.0.1:18896/ 应返回 404。
Agent execution terminated due to error
查看 translator_log.jsonl,检查 relay_error 字段:
unauthorized→ API Key 无效model does not exist→ 中转站不支持该模型名,修改MODEL_MAPcontents is required→ 代理不支持 chunked 编码,更新到最新版
弹出 Google 登录页 钥匙串中无 token。重新执行「绕过登录」中的命令。
切换模型后中转站始终收到同一模型
代理版本过旧。确保使用 agy--jump 目录中的最新 translator_proxy.py,该版本已内置 setUserSettings 模型追踪。
- AICodeMirror — 支持 Gemini 全系列模型,注册即享免费额度
MIT

