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-high and claude-opus-4-5-thinking with your Google credentials.
- Google OAuth sign-in with automatic token refresh via
opencode auth login - Dual Quota System - Access both Antigravity quota (Claude, Gemini 3) and Gemini CLI quota from a single plugin
- Multi-Account Rotation - Add multiple Google accounts; automatically rotates when one is rate-limited
- Real-time SSE streaming including thinking blocks and incremental output
- Extended Thinking - Native support for Claude thinking budgets and Gemini 3 thinking levels
- Auto Recovery - Automatic session recovery from Claude tool_result_missing errors
- Plugin Compatible - Works alongside other OpenCode plugins (opencodesync, etc.)
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/main/README.md
Option B: Manual setup
-
Add the plugin to your config (
~/.config/opencode/opencode.json):{ "plugin": ["[email protected]"] } -
Authenticate:
opencode auth login
-
Add models (see Available Models for full list):
{ "plugin": ["[email protected]"], "provider": { "google": { "models": { "antigravity-claude-sonnet-4-5": { "name": "Claude Sonnet 4.5 (Antigravity)", "limit": { "context": 200000, "output": 64000 }, "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] } } } } } } -
Use it:
opencode run "Hello" --model=google/antigravity-claude-sonnet-4-5
Installation Guide for LLM Agents
-
Edit the OpenCode configuration file:
- Linux/Mac:
~/.config/opencode/opencode.json - Windows:
%APPDATA%\opencode\opencode.json
- Linux/Mac:
-
Add the plugin to the
pluginsarray -
Set
providerto"google"and choose a model
Create ~/.config/opencode/opencode.json:
{
"$schema": "https://opencode.ai/config.json",
"plugin": ["[email protected]"],
"provider": {
"google": {
"models": {
"antigravity-gemini-3-pro-low": {
"name": "Gemini 3 Pro Low (Antigravity)",
"limit": { "context": 1048576, "output": 65535 },
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
},
"antigravity-gemini-3-pro-high": {
"name": "Gemini 3 Pro High (Antigravity)",
"limit": { "context": 1048576, "output": 65535 },
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
},
"antigravity-gemini-3-flash": {
"name": "Gemini 3 Flash (Antigravity)",
"limit": { "context": 1048576, "output": 65536 },
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
},
"gemini-3-pro-low": {
"name": "Gemini 3 Pro Low (Antigravity)",
"limit": { "context": 1048576, "output": 65535 },
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
},
"gemini-3-pro-high": {
"name": "Gemini 3 Pro High (Antigravity)",
"limit": { "context": 1048576, "output": 65535 },
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
},
"gemini-3-flash": {
"name": "Gemini 3 Flash (Antigravity)",
"limit": { "context": 1048576, "output": 65536 },
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
},
"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-low": {
"name": "Claude Sonnet 4.5 Think Low (Antigravity)",
"limit": { "context": 200000, "output": 64000 },
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
},
"antigravity-claude-sonnet-4-5-thinking-medium": {
"name": "Claude Sonnet 4.5 Think Medium (Antigravity)",
"limit": { "context": 200000, "output": 64000 },
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
},
"antigravity-claude-sonnet-4-5-thinking-high": {
"name": "Claude Sonnet 4.5 Think High (Antigravity)",
"limit": { "context": 200000, "output": 64000 },
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
},
"antigravity-claude-opus-4-5-thinking-low": {
"name": "Claude Opus 4.5 Think Low (Antigravity)",
"limit": { "context": 200000, "output": 64000 },
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
},
"antigravity-claude-opus-4-5-thinking-medium": {
"name": "Claude Opus 4.5 Think Medium (Antigravity)",
"limit": { "context": 200000, "output": 64000 },
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
},
"antigravity-claude-opus-4-5-thinking-high": {
"name": "Claude Opus 4.5 Think High (Antigravity)",
"limit": { "context": 200000, "output": 64000 },
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
}
}
}
}
}opencode run "Hello" --model=google/antigravity-claude-sonnet-4-5Models with antigravity- prefix use Antigravity quota:
| Model | Description |
|---|---|
google/antigravity-gemini-3-flash |
Gemini 3 Flash (minimal thinking) |
google/antigravity-gemini-3-pro-low |
Gemini 3 Pro with low thinking |
google/antigravity-gemini-3-pro-high |
Gemini 3 Pro with high thinking |
google/antigravity-claude-sonnet-4-5 |
Claude Sonnet 4.5 (no thinking) |
google/antigravity-claude-sonnet-4-5-thinking-low |
Sonnet with 8K thinking budget |
google/antigravity-claude-sonnet-4-5-thinking-medium |
Sonnet with 16K thinking budget |
google/antigravity-claude-sonnet-4-5-thinking-high |
Sonnet with 32K thinking budget |
google/antigravity-claude-opus-4-5-thinking-low |
Opus with 8K thinking budget |
google/antigravity-claude-opus-4-5-thinking-medium |
Opus with 16K thinking budget |
google/antigravity-claude-opus-4-5-thinking-high |
Opus with 32K thinking budget |
Backward compatibility: Old model names (
gemini-3-pro-low,gemini-3-pro-high,gemini-3-flash) still work as a fallback. However, you should update to theantigravity-prefix for stability. See Migration Guide.
Models with -preview suffix use Gemini CLI quota:
| Model | Description |
|---|---|
google/gemini-2.5-flash |
Gemini 2.5 Flash |
google/gemini-2.5-pro |
Gemini 2.5 Pro |
google/gemini-3-flash-preview |
Gemini 3 Flash (preview) |
google/gemini-3-pro-preview |
Gemini 3 Pro (preview) |
Full models configuration
{
"$schema": "https://opencode.ai/config.json",
"plugin": ["[email protected]"],
"provider": {
"google": {
"models": {
"antigravity-gemini-3-pro-low": {
"name": "Gemini 3 Pro Low (Antigravity)",
"limit": { "context": 1048576, "output": 65535 },
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
},
"antigravity-gemini-3-pro-high": {
"name": "Gemini 3 Pro High (Antigravity)",
"limit": { "context": 1048576, "output": 65535 },
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
},
"antigravity-gemini-3-flash": {
"name": "Gemini 3 Flash (Antigravity)",
"limit": { "context": 1048576, "output": 65536 },
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
},
"gemini-3-pro-low": {
"name": "Gemini 3 Pro Low (Antigravity)",
"limit": { "context": 1048576, "output": 65535 },
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
},
"gemini-3-pro-high": {
"name": "Gemini 3 Pro High (Antigravity)",
"limit": { "context": 1048576, "output": 65535 },
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
},
"gemini-3-flash": {
"name": "Gemini 3 Flash (Antigravity)",
"limit": { "context": 1048576, "output": 65536 },
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
},
"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-low": {
"name": "Claude Sonnet 4.5 Think Low (Antigravity)",
"limit": { "context": 200000, "output": 64000 },
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
},
"antigravity-claude-sonnet-4-5-thinking-medium": {
"name": "Claude Sonnet 4.5 Think Medium (Antigravity)",
"limit": { "context": 200000, "output": 64000 },
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
},
"antigravity-claude-sonnet-4-5-thinking-high": {
"name": "Claude Sonnet 4.5 Think High (Antigravity)",
"limit": { "context": 200000, "output": 64000 },
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
},
"antigravity-claude-opus-4-5-thinking-low": {
"name": "Claude Opus 4.5 Think Low (Antigravity)",
"limit": { "context": 200000, "output": 64000 },
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
},
"antigravity-claude-opus-4-5-thinking-medium": {
"name": "Claude Opus 4.5 Think Medium (Antigravity)",
"limit": { "context": 200000, "output": 64000 },
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
},
"antigravity-claude-opus-4-5-thinking-high": {
"name": "Claude Opus 4.5 Think High (Antigravity)",
"limit": { "context": 200000, "output": 64000 },
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
},
"gemini-2.5-flash": {
"name": "Gemini 2.5 Flash (CLI)",
"limit": { "context": 1048576, "output": 65536 },
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
},
"gemini-2.5-pro": {
"name": "Gemini 2.5 Pro (CLI)",
"limit": { "context": 1048576, "output": 65536 },
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
},
"gemini-3-flash-preview": {
"name": "Gemini 3 Flash Preview (CLI)",
"limit": { "context": 1048576, "output": 65536 },
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
},
"gemini-3-pro-preview": {
"name": "Gemini 3 Pro Preview (CLI)",
"limit": { "context": 1048576, "output": 65535 },
"modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
}
}
}
}
}Add multiple Google accounts for higher combined quotas. The plugin automatically rotates between accounts when one is rate-limited.
opencode auth loginHow multi-account works
- Sticky account selection - Sticks to the same account until rate-limited (preserves Anthropic's prompt cache)
- Per-model-family limits - Rate limits tracked separately for Claude and Gemini models
- Dual quota pools for Gemini - Automatic fallback between Antigravity quota and Gemini CLI quota before switching accounts
- Smart retry threshold - Short rate limits (≤5s) are retried on same account
- Exponential backoff - Increasing delays for consecutive rate limits
For Gemini models, the plugin accesses two independent quota pools per account:
| Quota Pool | When Used |
|---|---|
| Antigravity | Primary (tried first) |
| Gemini CLI | Fallback when Antigravity is rate-limited |
This effectively doubles your Gemini quota per account.
When running opencode auth login with existing accounts:
2 account(s) saved:
1. [email protected]
2. [email protected]
(a)dd new account(s) or (f)resh start? [a/f]:
- Stored in
~/.config/opencode/antigravity-accounts.json - Contains OAuth refresh tokens - treat like a password
- If Google revokes a token (
invalid_grant), that account is automatically removed
Create ~/.config/opencode/antigravity.json (or .opencode/antigravity.json in project root):
| Option | Default | Description |
|---|---|---|
quiet_mode |
false |
Suppress toast notifications (except recovery) |
debug |
false |
Enable debug logging to file |
log_dir |
OS default | Custom directory for debug logs |
auto_update |
true |
Enable automatic plugin updates |
| Option | Default | Description |
|---|---|---|
session_recovery |
true |
Auto-recover from tool_result_missing errors |
auto_resume |
true |
Auto-send resume prompt after recovery |
resume_text |
"continue" |
Text to send when auto-resuming |
| Option | Default | Description |
|---|---|---|
empty_response_max_attempts |
4 |
Retries for empty API responses |
empty_response_retry_delay_ms |
2000 |
Delay between retries |
tool_id_recovery |
true |
Fix mismatched tool IDs from context compaction |
claude_tool_hardening |
true |
Prevent tool parameter hallucination |
| Option | Default | Description |
|---|---|---|
proactive_token_refresh |
true |
Refresh tokens before expiry |
proactive_refresh_buffer_seconds |
1800 |
Refresh 30min before expiry |
max_rate_limit_wait_seconds |
300 |
Max wait time when rate limited (0=unlimited) |
quota_fallback |
false |
Try alternate quota when rate limited |
OPENCODE_ANTIGRAVITY_QUIET=1 # quiet_mode
OPENCODE_ANTIGRAVITY_DEBUG=1 # debug
OPENCODE_ANTIGRAVITY_LOG_DIR=/path # log_dir
OPENCODE_ANTIGRAVITY_KEEP_THINKING=1 # keep_thinkingFull configuration example
{
"$schema": "https://raw.githubusercontent.com/NoeFabris/opencode-antigravity-auth/main/assets/antigravity.schema.json",
"quiet_mode": false,
"debug": false,
"log_dir": "/custom/log/path",
"auto_update": true,
"keep_thinking": false,
"session_recovery": true,
"auto_resume": true,
"resume_text": "continue",
"empty_response_max_attempts": 4,
"empty_response_retry_delay_ms": 2000,
"tool_id_recovery": true,
"claude_tool_hardening": true,
"proactive_token_refresh": true,
"proactive_refresh_buffer_seconds": 1800,
"proactive_refresh_check_interval_seconds": 300,
"max_rate_limit_wait_seconds": 300,
"quota_fallback": false,
"signature_cache": {
"enabled": true,
"memory_ttl_seconds": 3600,
"disk_ttl_seconds": 172800,
"write_interval_seconds": 60
}
}DCP creates synthetic assistant messages that lack thinking blocks. Our plugin must be listed BEFORE DCP:
{
"plugin": [
"opencode-antigravity-auth@beta",
"@tarquinen/opencode-dcp@latest",
]
}When spawning parallel subagents, multiple processes may select the same account causing rate limit errors. Workaround: Add more accounts via opencode auth login.
- gemini-auth plugins - Not needed. This plugin handles all Google OAuth authentication.
Migration Guide (v1.2.7+)
If upgrading from v1.2.6 or earlier:
v1.2.7+ uses explicit prefixes to distinguish quota sources:
| Model Type | New Name (Recommended) | Old Name (Still Works) |
|---|---|---|
| Gemini 3 (Antigravity) | antigravity-gemini-3-pro-low |
gemini-3-pro-low |
| Gemini 3 (Antigravity) | antigravity-gemini-3-pro-high |
gemini-3-pro-high |
| Gemini 3 (Antigravity) | antigravity-gemini-3-flash |
gemini-3-flash |
| Gemini 3 (CLI) | gemini-3-pro-preview |
N/A |
| Claude | antigravity-claude-sonnet-4-5 |
claude-sonnet-4-5 |
Update your config to use antigravity- prefix:
- "gemini-3-pro-low": { ... }
+ "antigravity-gemini-3-pro-low": { ... }Why update? Old names work now as a fallback, but this depends on Gemini CLI using
-previewsuffix. If Google removes-previewin the future, old names may route to the wrong quota. Theantigravity-prefix is explicit and stable.
rm -rf ~/.config/opencode/antigravity-account.json
opencode auth loginModels now use antigravity- prefix for Antigravity quota. See Available Models.
{
"$schema": "https://raw.githubusercontent.com/NoeFabris/opencode-antigravity-auth/main/assets/antigravity.schema.json",
"quiet_mode": false,
"debug": false
}E2E Testing
The plugin includes regression tests for stability verification. Tests consume API quota.
# Sanity tests (7 tests, ~5 min)
npx tsx script/test-regression.ts --sanity
# Heavy tests (4 tests, ~30 min)
npx tsx script/test-regression.ts --heavy
# Concurrent tests (3 tests)
npx tsx script/test-regression.ts --category concurrency
# Run specific test
npx tsx script/test-regression.ts --test thinking-tool-use
# List tests without running
npx tsx script/test-regression.ts --dry-runOPENCODE_ANTIGRAVITY_DEBUG=1 opencode # Basic logging
OPENCODE_ANTIGRAVITY_DEBUG=2 opencode # Verbose (full request/response bodies)Logs are written to ~/.config/opencode/antigravity-logs/.
- Architecture - Plugin internals and request flow
- API Spec - Antigravity API reference
Safety, Usage & 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.
- Software is provided "as is", without warranty.
Built with help from:
- opencode-gemini-auth - Gemini OAuth groundwork by @jenslys
- CLIProxyAPI - Antigravity API reference
If this plugin helps you, consider supporting its continued maintenance:
MIT