opencode-antigravity-auth
opencode-antigravity-auth is an open-source TypeScript project with 10.8k GitHub stars. It is associated with claude, gemini, google, opencode. The repository is actively maintained, with recent commits.
MITPermissive — free to use in commercial and proprietary software, with attribution.View license →
Production readiness
5/5- Actively maintainedCommits in the last 6 months
- No known vulnerabilitiesNo OSV advisories
- Clear, usable licenseMIT (permissive)
- Proven adoptionWidely used
- Has documentationDocumentation indexed
npm install opencode-antigravity-authAntigravity + Gemini CLI OAuth Plugin for Opencode
Enable Opencode to authenticate against Antigravity (Google's IDE) via OAuth so you can use Antigravity rate limits and access models like gemini-3.1-pro and claude-opus-4-6-thinking with your Google credentials.
What You Get
Claude Opus 4.6, Sonnet 4.6 and Gemini 3.1 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.)
[!CAUTION] Using this plugin (and any proxy for Antigravity) violates Google's Terms of Service. A number of users have reported their Google accounts being banned or shadow-banned (restricted access without explicit notification).
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
Installation
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
Add the plugin to
~/.config/opencode/opencode.json:{ "plugin": ["opencode-antigravity-auth@latest"] }Want bleeding-edge features? Use
opencode-antigravity-auth@betainstead.Login with your Google account:
opencode auth loginAdd models — choose one:
Run
opencode auth login→ Google → OAuth with Google (Antigravity) → select "Configure models in opencode.json" (auto-configures all models)Or manually copy the full configuration below
Use it:
opencode run "Hello" --model=google/antigravity-claude-opus-4-6-thinking --variant=max
Step-by-Step Instructions
Edit the OpenCode configuration file at
~/.config/opencode/opencode.jsonNote: This path works on all platforms. On Windows,
~resolves to your user home directory (e.g.,C:\Users\YourName).Add the plugin to the
pluginarrayAdd the model definitions from the Full models configuration section
Set
providerto"google"and choose a model
Verification
opencode run "Hello" --model=google/antigravity-claude-opus-4-6-thinking --variant=max
Models
Model Reference
Antigravity quota (default routing for Claude and Gemini):
ModelVariantsNotesantigravity-gemini-3-prolow, highGemini 3 Pro with thinkingantigravity-gemini-3.1-prolow, highGemini 3.1 Pro with thinking (rollout-dependent)antigravity-gemini-3-flashminimal, low, medium, highGemini 3 Flash with thinkingantigravity-claude-sonnet-4-6—Claude Sonnet 4.6antigravity-claude-opus-4-6-thinkinglow, maxClaude Opus 4.6 with extended thinking
Gemini CLI quota (separate from Antigravity; used when cli_first is true or as fallback):
ModelNotesgemini-2.5-flashGemini 2.5 Flashgemini-2.5-proGemini 2.5 Progemini-3-flash-previewGemini 3 Flash (preview)gemini-3-pro-previewGemini 3 Pro (preview)gemini-3.1-pro-previewGemini 3.1 Pro (preview, rollout-dependent)gemini-3.1-pro-preview-customtoolsGemini 3.1 Pro Preview Custom Tools (preview, rollout-dependent)
Routing Behavior:
Antigravity-first (default): Gemini models use Antigravity quota across accounts.
CLI-first (
cli_first: true): Gemini models use Gemini CLI quota first.When a Gemini quota pool is exhausted, the plugin automatically falls back to the other pool.
Claude and image models always use Antigravity. Model names are automatically transformed for the target API (e.g.,
antigravity-gemini-3-flash→gemini-3-flash-previewfor CLI).
Using variants:
opencode run "Hello" --model=google/antigravity-claude-opus-4-6-thinking --variant=max
For details on variant configuration and thinking levels, see docs/MODEL-VARIANTS.md.
Add this to your ~/.config/opencode/opencode.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.1-pro": {
"name": "Gemini 3.1 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-6": {
"name": "Claude Sonnet 4.6 (Antigravity)",
"limit": { "context": 200000, "output": 64000 },
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
},
"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"] }
},
"gemini-3.1-pro-preview": {
"name": "Gemini 3.1 Pro Preview (Gemini CLI)",
"limit": { "context": 1048576, "output": 65535 },
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
},
"gemini-3.1-pro-preview-customtools": {
"name": "Gemini 3.1 Pro Preview Custom Tools (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.
Multi-Account Setup
Add multiple Google accounts for a higher combined quota. The plugin automatically rotates between accounts when one is rate-limited.
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.
Troubleshooting
Quick Reset: Most issues can be resolved by deleting
~/.config/opencode/antigravity-accounts.jsonand runningopencode auth loginagain.
Configuration Path (All Platforms)
OpenCode uses ~/.config/opencode/ on all platforms including Windows.
FilePathMain config~/.config/opencode/opencode.jsonAccounts~/.config/opencode/antigravity-accounts.jsonPlugin config~/.config/opencode/antigravity.jsonDebug logs~/.config/opencode/antigravity-logs/
Windows users:
~resolves to your user home directory (e.g.,C:\Users\YourName). Do NOT use%APPDATA%.
Custom path: Set
OPENCODE_CONFIG_DIRenvironment 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/.
Multi-Account Auth Issues
If you encounter authentication issues with multiple accounts:
Delete the accounts file:
rm ~/.config/opencode/antigravity-accounts.jsonRe-authenticate:
opencode auth login
403 Permission Denied (rising-fact-p41fc)
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:
Go to Google Cloud Console
Create or select a project
Enable the Gemini for Google Cloud API (
cloudaicompanion.googleapis.com)Add
projectIdto your accounts file:{ "accounts": [ { "email": "your@email.com", "refreshToken": "...", "projectId": "your-project-id" } ] }
Note: Do this for each account in a multi-account setup.
Gemini Model Not Found
Add this to your google provider config:
{
"provider": {
"google": {
"npm": "@ai-sdk/google",
"models": { ... }
}
}
}
Gemini 3 Models 400 Error ("Unknown name 'parameters'")
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:
Update to latest beta:
{ "plugin": ["opencode-antigravity-auth@beta"] }Disable MCP servers one-by-one to find the problematic one
Add npm override:
{ "provider": { "google": { "npm": "@ai-sdk/google" } } }
MCP Servers Causing Errors
Some MCP servers have schemas incompatible with Antigravity's strict JSON format.
Common symptom:
Invalid function name must start with a letter or underscore
Sometimes it shows up as:
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:
Disable all MCP servers in your config
Enable one-by-one until error reappears
Report the specific MCP in a GitHub issue
"All Accounts Rate-Limited" (But Quota Available)
Cause: Cascade bug in clearExpiredRateLimits() in hybrid mode (fixed in recent beta).
Solutions:
Update to latest beta version
If persists, delete accounts file and re-authenticate
Try switching
account_selection_strategyto"sticky"inantigravity.json
Session Recovery
If you encounter errors during a session:
Type
continueto trigger the recovery mechanismIf blocked, use
/undoto revert to pre-error stateRetry the operation
Using with Oh-My-OpenCode
Important: Disable the built-in Google auth to prevent conflicts:
// ~/.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" }
}
}
Infinite .tmp Files Created
Cause: When account is rate-limited and plugin retries infinitely, it creates many temp files.
Workaround:
Stop OpenCode
Clean up:
rm ~/.config/opencode/*.tmpAdd more accounts or wait for rate limit to expire
OAuth Callback Issues
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:
Use Chrome or Firefox (easiest): Copy the OAuth URL and paste into a different browser.
Disable HTTPS-Only Mode temporarily:
Safari > Settings (⌘,) > Privacy
Uncheck "Enable HTTPS-Only Mode"
Run
opencode auth loginRe-enable after authentication
macOS / Linux:
# Find process using the port
lsof -i :51121
# Kill if stale
kill -9 <PID>
# Retry
opencode auth login
Windows (PowerShell):
netstat -ano | findstr :51121
taskkill /PID <PID> /F
opencode auth login
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:
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
Configuration Key Typo: plugin not plugins
The correct key is plugin (singular):
{
"plugin": ["opencode-antigravity-auth@beta"]
}
Not "plugins" (will cause "Unrecognized key" error).
Migrating Accounts Between Machines
When copying antigravity-accounts.json to a new machine:
Ensure the plugin is installed:
"plugin": ["opencode-antigravity-auth@beta"]Copy
~/.config/opencode/antigravity-accounts.jsonIf you get "API key missing" error, the refresh token may be invalid — re-authenticate
Known Plugin Interactions
For details on load balancing, dual quota pools, and account storage, see docs/MULTI-ACCOUNT.md.
Plugin Compatibility
@tarquinen/opencode-dcp
DCP creates synthetic assistant messages that lack thinking blocks. List this plugin BEFORE DCP:
{
"plugin": [
"opencode-antigravity-auth@latest",
"@tarquinen/opencode-dcp@latest"
]
}
oh-my-opencode
Disable built-in auth and override agent models in 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" },
"multimodal-looker": { "model": "google/antigravity-gemini-3-flash" }
}
}
Tip: When spawning parallel subagents, enable
pid_offset_enabled: trueinantigravity.jsonto distribute sessions across accounts.
Plugins you don't need
gemini-auth plugins — Not needed. This plugin handles all Google OAuth.
Configuration
Create ~/.config/opencode/antigravity.json for optional settings:
{
"$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.
Model Behavior
OptionDefaultWhat it doeskeep_thinkingfalsePreserve Claude's thinking across turns. Warning: enabling may degrade model stability.session_recoverytrueAuto-recover from tool errorscli_firstfalseRoute Gemini models to Gemini CLI first (Claude and image models stay on Antigravity).
Account Rotation
Your SetupRecommended Config1 account"account_selection_strategy": "sticky"2-5 accountsDefault ("hybrid") works great5+ accounts"account_selection_strategy": "round-robin"Parallel agentsAdd "pid_offset_enabled": true
Quota Protection
OptionDefaultWhat it doessoft_quota_threshold_percent90Skip account when quota usage exceeds this percentage. Prevents Google from penalizing accounts that fully exhaust quota. Set to 100 to disable.quota_refresh_interval_minutes15Background 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" inopencode auth login. The threshold check usessoft_quota_cache_ttl_minutesto 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 exceedsmax_rate_limit_wait_seconds, it errors immediately.
Rate Limit Scheduling
Control how the plugin handles rate limits:
OptionDefaultWhat it doesscheduling_mode"cache_first""cache_first" = wait for same account (preserves prompt cache), "balance" = switch immediately, "performance_first" = round-robinmax_cache_first_wait_seconds60Max seconds to wait in cache_first mode before switching accountsfailure_ttl_seconds3600Reset 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.
App Behavior
OptionDefaultWhat it doesquiet_modefalseHide toast notificationsdebugfalseEnable debug file logging (~/.config/opencode/antigravity-logs/)debug_tuifalseShow debug logs in the TUI log panel (independent from debug)auto_updatetrueAuto-update plugin
For all options, see docs/CONFIGURATION.md.
Environment variables:
OPENCODE_CONFIG_DIR=/path/to/config opencode # Custom config directory
OPENCODE_ANTIGRAVITY_DEBUG=1 opencode # Enable debug file logging
OPENCODE_ANTIGRAVITY_DEBUG=2 opencode # Verbose debug file logging
OPENCODE_ANTIGRAVITY_DEBUG_TUI=1 opencode # Enable TUI log panel debug output
Troubleshooting
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
Documentation
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
Support
If this plugin saves you time, consider supporting its development:
Credits
License
MIT License. See LICENSE for details.
Intended Use
Personal / internal development only
Respect internal quotas and data handling policies
Not for production services or bypassing intended limits
Warning
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
Disclaimer
Not affiliated with Google. This is an independent open-source project.
"Antigravity", "Gemini", "Google Cloud", and "Google" are trademarks of Google LLC.
On this page
- Antigravity + Gemini CLI OAuth Plugin for Opencode
- What You Get
- Installation
- Step-by-Step Instructions
- Verification
- Models
- Model Reference
- Multi-Account Setup
- Troubleshooting
- Configuration Path (All Platforms)
- Multi-Account Auth Issues
- 403 Permission Denied (rising-fact-p41fc)
- Gemini Model Not Found
- Gemini 3 Models 400 Error ("Unknown name 'parameters'")
- MCP Servers Causing Errors
- "All Accounts Rate-Limited" (But Quota Available)
- Session Recovery
- Using with Oh-My-OpenCode
- Infinite .tmp Files Created
- OAuth Callback Issues
- Configuration Key Typo: plugin not plugins
- Migrating Accounts Between Machines
- Known Plugin Interactions
- Plugin Compatibility
- @tarquinen/opencode-dcp
- oh-my-opencode
- Plugins you don't need
- Configuration
- Model Behavior
- Account Rotation
- Quota Protection
- Rate Limit Scheduling
- App Behavior
- Troubleshooting
- Documentation
- Support
- Credits
- License
- Intended Use
- Warning
- Disclaimer