Google Antigravity IDE OAuth auth plugin for Opencode - access Gemini 3 Pro and Claude 4.5 using Google credentials
npm install opencode-antigravity-auth




Enable Opencode to authenticate against Antigravity (Google's IDE) via OAuth so you can use Antigravity rate limits and access models like gemini-3-pro and claude-opus-4-5-thinking with your Google credentials.
- Claude Opus 4.5, Sonnet 4.5 and Gemini 3 Pro/Flash via Google OAuth
- Multi-account support — add multiple Google accounts, auto-rotates when rate-limited
- Dual quota system — access both Antigravity and Gemini CLI quotas from one plugin
- Thinking models — extended thinking for Claude and Gemini 3 with configurable budgets
- Google Search grounding — enable web search for Gemini models (auto or always-on)
- Auto-recovery — handles session errors and tool failures automatically
- Plugin compatible — works alongside other OpenCode plugins (oh-my-opencode, dcp, etc.)
---
⚠️ Terms of Service Warning — Read Before Installing
> [!CAUTION]
> Using this plugin may violate Google's Terms of Service. A small number of users have reported their Google accounts being banned or shadow-banned (restricted access without explicit notification).
>
> High-risk scenarios:
> - 🚨 Fresh Google accounts have a very high chance of getting banned
> - 🚨 New accounts with Pro/Ultra subscriptions are frequently flagged and banned
>
> By using this plugin, you acknowledge:
> - This is an unofficial tool not endorsed by Google
> - Your account may be suspended or permanently banned
> - You assume all risks associated with using this plugin
>
> Recommendation: Use an established Google account that you don't rely on for critical services. Avoid creating new accounts specifically for this plugin.
---
For Humans
Option A: Let an LLM do it
Paste this into any LLM agent (Claude Code, OpenCode, Cursor, etc.):
```
Install the opencode-antigravity-auth plugin and add the Antigravity model definitions to ~/.config/opencode/opencode.json by following: https://raw.githubusercontent.com/NoeFabris/opencode-antigravity-auth/dev/README.md
Option B: Manual setup
1. Add the plugin to ~/.config/opencode/opencode.json:
`json`
{
"plugin": ["opencode-antigravity-auth@latest"]
}
> Want bleeding-edge features? Use opencode-antigravity-auth@beta instead.
2. Login with your Google account:
`bash`
opencode auth login
3. Add models — choose one:
- Run opencode auth login → select "Configure models in opencode.json" (auto-configures all models)
- Or manually copy the full configuration below
4. Use it:
`bash`
opencode run "Hello" --model=google/antigravity-claude-sonnet-4-5-thinking --variant=max
For LLM Agents
1. Edit the OpenCode configuration file at ~/.config/opencode/opencode.json~
> Note: This path works on all platforms. On Windows, resolves to your user home directory (e.g., C:\Users\YourName).
2. Add the plugin to the plugin array
3. Add the model definitions from the Full models configuration section
4. Set provider to "google" and choose a model
`bash`
opencode run "Hello" --model=google/antigravity-claude-sonnet-4-5-thinking --variant=max
---
Antigravity quota (default routing for Claude and Gemini):
| Model | Variants | Notes |
|-------|----------|-------|
| antigravity-gemini-3-pro | low, high | Gemini 3 Pro with thinking |antigravity-gemini-3-flash
| | minimal, low, medium, high | Gemini 3 Flash with thinking |antigravity-claude-sonnet-4-5
| | — | Claude Sonnet 4.5 |antigravity-claude-sonnet-4-5-thinking
| | low, max | Claude Sonnet with extended thinking |antigravity-claude-opus-4-5-thinking
| | low, max | Claude Opus 4.5 with extended thinking |antigravity-claude-opus-4-6-thinking
| | low, max | Claude Opus 4.6 with extended thinking |
Gemini CLI quota (separate from Antigravity; used when cli_first is true or as fallback):
| Model | Notes |
|-------|-------|
| gemini-2.5-flash | Gemini 2.5 Flash |gemini-2.5-pro
| | Gemini 2.5 Pro |gemini-3-flash-preview
| | Gemini 3 Flash (preview) |gemini-3-pro-preview
| | Gemini 3 Pro (preview) |
> Routing Behavior:
> - Antigravity-first (default): Gemini models use Antigravity quota across accounts.
> - CLI-first (cli_first: true): Gemini models use Gemini CLI quota first.
> - With quota_fallback enabled, the plugin can spill to the other quota when all accounts are exhausted.antigravity-gemini-3-flash
> - Claude and image models always use Antigravity.
> Model names are automatically transformed for the target API (e.g., → gemini-3-flash-preview for CLI).
Using variants:
`bash`
opencode run "Hello" --model=google/antigravity-claude-sonnet-4-5-thinking --variant=max
For details on variant configuration and thinking levels, see docs/MODEL-VARIANTS.md.
Full models configuration (copy-paste ready)
Add this to your ~/.config/opencode/opencode.json:
`json`
{
"$schema": "https://opencode.ai/config.json",
"plugin": ["opencode-antigravity-auth@latest"],
"provider": {
"google": {
"models": {
"antigravity-gemini-3-pro": {
"name": "Gemini 3 Pro (Antigravity)",
"limit": { "context": 1048576, "output": 65535 },
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] },
"variants": {
"low": { "thinkingLevel": "low" },
"high": { "thinkingLevel": "high" }
}
},
"antigravity-gemini-3-flash": {
"name": "Gemini 3 Flash (Antigravity)",
"limit": { "context": 1048576, "output": 65536 },
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] },
"variants": {
"minimal": { "thinkingLevel": "minimal" },
"low": { "thinkingLevel": "low" },
"medium": { "thinkingLevel": "medium" },
"high": { "thinkingLevel": "high" }
}
},
"antigravity-claude-sonnet-4-5": {
"name": "Claude Sonnet 4.5 (Antigravity)",
"limit": { "context": 200000, "output": 64000 },
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
},
"antigravity-claude-sonnet-4-5-thinking": {
"name": "Claude Sonnet 4.5 Thinking (Antigravity)",
"limit": { "context": 200000, "output": 64000 },
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] },
"variants": {
"low": { "thinkingConfig": { "thinkingBudget": 8192 } },
"max": { "thinkingConfig": { "thinkingBudget": 32768 } }
}
},
"antigravity-claude-opus-4-5-thinking": {
"name": "Claude Opus 4.5 Thinking (Antigravity)",
"limit": { "context": 200000, "output": 64000 },
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] },
"variants": {
"low": { "thinkingConfig": { "thinkingBudget": 8192 } },
"max": { "thinkingConfig": { "thinkingBudget": 32768 } }
}
},
"antigravity-claude-opus-4-6-thinking": {
"name": "Claude Opus 4.6 Thinking (Antigravity)",
"limit": { "context": 200000, "output": 64000 },
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] },
"variants": {
"low": { "thinkingConfig": { "thinkingBudget": 8192 } },
"max": { "thinkingConfig": { "thinkingBudget": 32768 } }
}
},
"gemini-2.5-flash": {
"name": "Gemini 2.5 Flash (Gemini CLI)",
"limit": { "context": 1048576, "output": 65536 },
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
},
"gemini-2.5-pro": {
"name": "Gemini 2.5 Pro (Gemini CLI)",
"limit": { "context": 1048576, "output": 65536 },
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
},
"gemini-3-flash-preview": {
"name": "Gemini 3 Flash Preview (Gemini CLI)",
"limit": { "context": 1048576, "output": 65536 },
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
},
"gemini-3-pro-preview": {
"name": "Gemini 3 Pro Preview (Gemini CLI)",
"limit": { "context": 1048576, "output": 65535 },
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
}
}
}
}
}
> Backward Compatibility: Legacy model names with antigravity- prefix (e.g., antigravity-gemini-3-flash) still work. The plugin automatically handles model name transformation for both Antigravity and Gemini CLI APIs.
---
Add multiple Google accounts for higher combined quotas. The plugin automatically rotates between accounts when one is rate-limited.
`bash`
opencode auth login # Run again to add more accounts
Account management options (via opencode auth login):
- Configure models — Auto-configure all plugin models in opencode.json
- Check quotas — View remaining API quota for each account
- Manage accounts — Enable/disable specific accounts for rotation
For details on load balancing, dual quota pools, and account storage, see docs/MULTI-ACCOUNT.md.
---
> Quick Reset: Most issues can be resolved by deleting ~/.config/opencode/antigravity-accounts.json and running opencode auth login again.
OpenCode uses ~/.config/opencode/ on all platforms including Windows.
| File | Path |
|------|------|
| Main config | ~/.config/opencode/opencode.json |~/.config/opencode/antigravity-accounts.json
| Accounts | |~/.config/opencode/antigravity.json
| Plugin config | |~/.config/opencode/antigravity-logs/
| Debug logs | |
> Windows users: ~ resolves to your user home directory (e.g., C:\Users\YourName). Do NOT use %APPDATA%.
> Custom path: Set OPENCODE_CONFIG_DIR environment variable to use a custom location.
> Windows migration: If upgrading from plugin v1.3.x or earlier, the plugin will automatically find your existing config in %APPDATA%\opencode\ and use it. New installations use ~/.config/opencode/.
---
If you encounter authentication issues with multiple accounts:
1. Delete the accounts file:
`bash`
rm ~/.config/opencode/antigravity-accounts.json
`
2. Re-authenticate:
bash`
opencode auth login
---
Error:
``
Permission 'cloudaicompanion.companions.generateChat' denied on resource
'//cloudaicompanion.googleapis.com/projects/rising-fact-p41fc/locations/global'
Cause: Plugin falls back to a default project ID when no valid project is found. This works for Antigravity but fails for Gemini CLI models.
Solution:
1. Go to Google Cloud Console
2. Create or select a project
3. Enable the Gemini for Google Cloud API (cloudaicompanion.googleapis.com)projectId
4. Add to your accounts file:`
json`
{
"accounts": [
{
"email": "your@email.com",
"refreshToken": "...",
"projectId": "your-project-id"
}
]
}
> Note: Do this for each account in a multi-account setup.
---
Add this to your google provider config:
`json`
{
"provider": {
"google": {
"npm": "@ai-sdk/google",
"models": { ... }
}
}
}
---
Error:
``
Invalid JSON payload received. Unknown name "parameters" at 'request.tools[0]'
Causes:
- Tool schema incompatibility with Gemini's strict protobuf validation
- MCP servers with malformed schemas
- Plugin version regression
Solutions:
1. Update to latest beta:
`json`
{ "plugin": ["opencode-antigravity-auth@beta"] }
2. Disable MCP servers one-by-one to find the problematic one
3. Add npm override:
`json`
{ "provider": { "google": { "npm": "@ai-sdk/google" } } }
---
Some MCP servers have schemas incompatible with Antigravity's strict JSON format.
Common symptom:
`bash`
Invalid function name must start with a letter or underscore
Sometimes it shows up as:
`bash`
GenerateContentRequest.tools[0].function_declarations[12].name: Invalid function name must start with a letter or underscore
This usually means an MCP tool name starts with a number (for example, a 1mcp key like 1mcp_*). Rename the MCP key to start with a letter (e.g., gw) or disable that MCP entry for Antigravity models.
Diagnosis:
1. Disable all MCP servers in your config
2. Enable one-by-one until error reappears
3. Report the specific MCP in a GitHub issue
---
Cause: Cascade bug in clearExpiredRateLimits() in hybrid mode (fixed in recent beta).
Solutions:
1. Update to latest beta version
2. If persists, delete accounts file and re-authenticate
3. Try switching account_selection_strategy to "sticky" in antigravity.json
---
If you encounter errors during a session:
1. Type continue to trigger the recovery mechanism/undo
2. If blocked, use to revert to pre-error state
3. Retry the operation
---
Important: Disable the built-in Google auth to prevent conflicts:
`json`
// ~/.config/opencode/oh-my-opencode.json
{
"google_auth": false,
"agents": {
"frontend-ui-ux-engineer": { "model": "google/antigravity-gemini-3-pro" },
"document-writer": { "model": "google/antigravity-gemini-3-flash" }
}
}
---
Cause: When account is rate-limited and plugin retries infinitely, it creates many temp files.
Workaround:
1. Stop OpenCode
2. Clean up: rm ~/.config/opencode/*.tmp
3. Add more accounts or wait for rate limit to expire
---
Safari OAuth Callback Fails (macOS)
Symptoms:
- "fail to authorize" after successful Google login
- Safari shows "Safari can't open the page"
Cause: Safari's "HTTPS-Only Mode" blocks http://localhost callback.
Solutions:
1. Use Chrome or Firefox (easiest):
Copy the OAuth URL and paste into a different browser.
2. Disable HTTPS-Only Mode temporarily:
- Safari > Settings (⌘,) > Privacy
- Uncheck "Enable HTTPS-Only Mode"
- Run opencode auth login
- Re-enable after authentication
Port Conflict (Address Already in Use)
macOS / Linux:
`bashFind process using the port
lsof -i :51121
Windows (PowerShell):
`powershell
netstat -ano | findstr :51121
taskkill /PID /F
opencode auth login
`
Docker / WSL2 / Remote Development
OAuth callback requires browser to reach
localhost on the machine running OpenCode.WSL2:
- Use VS Code's port forwarding, or
- Configure Windows → WSL port forwarding
SSH / Remote:
`bash
ssh -L 51121:localhost:51121 user@remote
`Docker / Containers:
- OAuth with localhost redirect doesn't work in containers
- Wait 30s for manual URL flow, or use SSH port forwarding
---
$3
The correct key is
plugin (singular):`json
{
"plugin": ["opencode-antigravity-auth@beta"]
}
`Not
"plugins" (will cause "Unrecognized key" error).---
$3
When copying
antigravity-accounts.json to a new machine:
1. Ensure the plugin is installed: "plugin": ["opencode-antigravity-auth@beta"]
2. Copy ~/.config/opencode/antigravity-accounts.json
3. If you get "API key missing" error, the refresh token may be invalid — re-authenticateKnown Plugin Interactions
For details on load balancing, dual quota pools, and account storage, see docs/MULTI-ACCOUNT.md.---
Plugin Compatibility
$3
DCP creates synthetic assistant messages that lack thinking blocks. List this plugin BEFORE DCP:
`json
{
"plugin": [
"opencode-antigravity-auth@latest",
"@tarquinen/opencode-dcp@latest"
]
}
`$3
Disable built-in auth and override agent models in
oh-my-opencode.json:`json
{
"google_auth": false,
"agents": {
"frontend-ui-ux-engineer": { "model": "google/antigravity-gemini-3-pro" },
"document-writer": { "model": "google/antigravity-gemini-3-flash" },
"multimodal-looker": { "model": "google/antigravity-gemini-3-flash" }
}
}
`> Tip: When spawning parallel subagents, enable
pid_offset_enabled: true in antigravity.json to distribute sessions across accounts.$3
- gemini-auth plugins — Not needed. This plugin handles all Google OAuth.
---
Configuration
Create
~/.config/opencode/antigravity.json for optional settings:`json
{
"$schema": "https://raw.githubusercontent.com/NoeFabris/opencode-antigravity-auth/main/assets/antigravity.schema.json"
}
`Most users don't need to configure anything — defaults work well.
$3
| Option | Default | What it does |
|--------|---------|--------------
|
keep_thinking | false | Preserve Claude's thinking across turns. Warning: enabling may degrade model stability. |
| session_recovery | true | Auto-recover from tool errors |
| cli_first | false | Route Gemini models to Gemini CLI first (Claude and image models stay on Antigravity). |$3
| Your Setup | Recommended Config |
|------------|-------------------|
| 1 account |
"account_selection_strategy": "sticky" |
| 2-5 accounts | Default ("hybrid") works great |
| 5+ accounts | "account_selection_strategy": "round-robin" |
| Parallel agents | Add "pid_offset_enabled": true |$3
| Option | Default | What it does |
|--------|---------|--------------|
|
soft_quota_threshold_percent | 90 | Skip account when quota usage exceeds this percentage. Prevents Google from penalizing accounts that fully exhaust quota. Set to 100 to disable. |
| quota_refresh_interval_minutes | 15 | Background quota refresh interval. After successful API requests, refreshes quota cache if older than this interval. Set to 0 to disable. |
| soft_quota_cache_ttl_minutes | "auto" | How long quota cache is considered fresh. "auto" = max(2 × refresh interval, 10 minutes). Set a number (1-120) for fixed TTL. |> How it works: Quota cache is refreshed automatically after API requests (when older than
quota_refresh_interval_minutes) and manually via "Check quotas" in opencode auth login. The threshold check uses soft_quota_cache_ttl_minutes to determine cache freshness - if cache is older, the account is considered "unknown" and allowed (fail-open). When ALL accounts exceed the threshold, the plugin waits for the earliest quota reset time (like rate limit behavior). If wait time exceeds max_rate_limit_wait_seconds, it errors immediately.$3
Control how the plugin handles rate limits:
| Option | Default | What it does |
|--------|---------|--------------|
|
scheduling_mode | "cache_first" | "cache_first" = wait for same account (preserves prompt cache), "balance" = switch immediately, "performance_first" = round-robin |
| max_cache_first_wait_seconds | 60 | Max seconds to wait in cache_first mode before switching accounts |
| failure_ttl_seconds | 3600 | Reset failure count after this many seconds (prevents old failures from permanently penalizing accounts) |When to use each mode:
- cache_first (default): Best for long conversations. Waits for the same account to recover, preserving your prompt cache.
- balance: Best for quick tasks. Switches accounts immediately when rate-limited for maximum availability.
- performance_first: Best for many short requests. Distributes load evenly across all accounts.
$3
| Option | Default | What it does |
|--------|---------|--------------|
|
quiet_mode | false | Hide toast notifications |
| debug | false | Enable debug logging |
| auto_update | true | Auto-update plugin |For all options, see docs/CONFIGURATION.md.
Environment variables:
`bash
OPENCODE_CONFIG_DIR=/path/to/config opencode # Custom config directory
OPENCODE_ANTIGRAVITY_DEBUG=1 opencode # Enable debug logging
OPENCODE_ANTIGRAVITY_DEBUG=2 opencode # Verbose logging
``---
See the full Troubleshooting Guide for solutions to common issues including:
- Auth problems and token refresh
- "Model not found" errors
- Session recovery
- Gemini CLI permission errors
- Safari OAuth issues
- Plugin compatibility
- Migration guides
---
- Configuration — All configuration options
- Multi-Account — Load balancing, dual quota pools, account storage
- Model Variants — Thinking budgets and variant system
- Troubleshooting — Common issues and fixes
- Architecture — How the plugin works
- API Spec — Antigravity API reference
---
If this plugin helps you, consider supporting its maintenance:

---
- opencode-gemini-auth by @jenslys
- CLIProxyAPI
MIT License. See LICENSE for details.
Legal
- Personal / internal development only
- Respect internal quotas and data handling policies
- Not for production services or bypassing intended limits
By using this plugin, you acknowledge:
- Terms of Service risk — This approach may violate ToS of AI model providers
- Account risk — Providers may suspend or ban accounts
- No guarantees — APIs may change without notice
- Assumption of risk — You assume all legal, financial, and technical risks
- Not affiliated with Google. This is an independent open-source project.
- "Antigravity", "Gemini", "Google Cloud", and "Google" are trademarks of Google LLC.