357 lines
10 KiB
Markdown
357 lines
10 KiB
Markdown
# Antigravity Claude Proxy
|
|
|
|
[](https://www.npmjs.com/package/antigravity-claude-proxy)
|
|
[](https://www.npmjs.com/package/antigravity-claude-proxy)
|
|
[](https://opensource.org/licenses/MIT)
|
|
|
|
<a href="https://buymeacoffee.com/badrinarayanans" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" alt="Buy Me A Coffee" height="50"></a>
|
|
|
|
A proxy server that exposes an **Anthropic-compatible API** backed by **Antigravity's Cloud Code**, letting you use Claude and Gemini models with **Claude Code CLI**.
|
|
|
|

|
|
|
|
## How It Works
|
|
|
|
```
|
|
┌──────────────────┐ ┌─────────────────────┐ ┌────────────────────────────┐
|
|
│ Claude Code │────▶│ This Proxy Server │────▶│ Antigravity Cloud Code │
|
|
│ (Anthropic │ │ (Anthropic → Google│ │ (daily-cloudcode-pa. │
|
|
│ API format) │ │ Generative AI) │ │ sandbox.googleapis.com) │
|
|
└──────────────────┘ └─────────────────────┘ └────────────────────────────┘
|
|
```
|
|
|
|
1. Receives requests in **Anthropic Messages API format**
|
|
2. Uses OAuth tokens from added Google accounts (or Antigravity's local database)
|
|
3. Transforms to **Google Generative AI format** with Cloud Code wrapping
|
|
4. Sends to Antigravity's Cloud Code API
|
|
5. Converts responses back to **Anthropic format** with full thinking/streaming support
|
|
|
|
## Prerequisites
|
|
|
|
- **Node.js** 18 or later
|
|
- **Antigravity** installed (for single-account mode) OR Google account(s) for multi-account mode
|
|
|
|
---
|
|
|
|
## Installation
|
|
|
|
### Option 1: npm (Recommended)
|
|
|
|
```bash
|
|
# Run directly with npx (no install needed)
|
|
npx antigravity-claude-proxy start
|
|
|
|
# Or install globally
|
|
npm install -g antigravity-claude-proxy
|
|
antigravity-claude-proxy start
|
|
```
|
|
|
|
### Option 2: Clone Repository
|
|
|
|
```bash
|
|
git clone https://github.com/badri-s2001/antigravity-claude-proxy.git
|
|
cd antigravity-claude-proxy
|
|
npm install
|
|
npm start
|
|
```
|
|
|
|
---
|
|
|
|
## Quick Start
|
|
|
|
### 1. Add Account(s)
|
|
|
|
You have two options:
|
|
|
|
**Option A: Use Antigravity (Single Account)**
|
|
|
|
If you have Antigravity installed and logged in, the proxy will automatically extract your token. No additional setup needed.
|
|
|
|
**Option B: Add Google Accounts via OAuth (Recommended for Multi-Account)**
|
|
|
|
Add one or more Google accounts for load balancing:
|
|
|
|
```bash
|
|
# If installed via npm
|
|
antigravity-claude-proxy accounts add
|
|
|
|
# If using npx
|
|
npx antigravity-claude-proxy accounts add
|
|
|
|
# If cloned locally
|
|
npm run accounts:add
|
|
```
|
|
|
|
This opens your browser for Google OAuth. Sign in and authorize access. Repeat for multiple accounts.
|
|
|
|
Manage accounts:
|
|
|
|
```bash
|
|
# List all accounts
|
|
antigravity-claude-proxy accounts list
|
|
|
|
# Verify accounts are working
|
|
antigravity-claude-proxy accounts verify
|
|
|
|
# Interactive account management
|
|
antigravity-claude-proxy accounts
|
|
```
|
|
|
|
### 2. Start the Proxy Server
|
|
|
|
```bash
|
|
# If installed via npm
|
|
antigravity-claude-proxy start
|
|
|
|
# If using npx
|
|
npx antigravity-claude-proxy start
|
|
|
|
# If cloned locally
|
|
npm start
|
|
```
|
|
|
|
The server runs on `http://localhost:8080` by default.
|
|
|
|
### 3. Verify It's Working
|
|
|
|
```bash
|
|
# Health check
|
|
curl http://localhost:8080/health
|
|
|
|
# Check account status and quota limits
|
|
curl "http://localhost:8080/account-limits?format=table"
|
|
```
|
|
|
|
---
|
|
|
|
## Using with Claude Code CLI
|
|
|
|
### Configure Claude Code
|
|
|
|
Create or edit the Claude Code settings file:
|
|
|
|
**macOS:** `~/.claude/settings.json`
|
|
**Linux:** `~/.claude/settings.json`
|
|
**Windows:** `%USERPROFILE%\.claude\settings.json`
|
|
|
|
Add this configuration:
|
|
|
|
```json
|
|
{
|
|
"env": {
|
|
"ANTHROPIC_AUTH_TOKEN": "test",
|
|
"ANTHROPIC_BASE_URL": "http://localhost:8080",
|
|
"ANTHROPIC_MODEL": "claude-opus-4-5-thinking",
|
|
"ANTHROPIC_DEFAULT_OPUS_MODEL": "claude-opus-4-5-thinking",
|
|
"ANTHROPIC_DEFAULT_SONNET_MODEL": "claude-sonnet-4-5-thinking",
|
|
"ANTHROPIC_DEFAULT_HAIKU_MODEL": "claude-sonnet-4-5",
|
|
"CLAUDE_CODE_SUBAGENT_MODEL": "claude-sonnet-4-5-thinking"
|
|
}
|
|
}
|
|
```
|
|
|
|
Or to use Gemini models:
|
|
|
|
```json
|
|
{
|
|
"env": {
|
|
"ANTHROPIC_AUTH_TOKEN": "test",
|
|
"ANTHROPIC_BASE_URL": "http://localhost:8080",
|
|
"ANTHROPIC_MODEL": "gemini-3-pro-high",
|
|
"ANTHROPIC_DEFAULT_OPUS_MODEL": "gemini-3-pro-high",
|
|
"ANTHROPIC_DEFAULT_SONNET_MODEL": "gemini-3-flash",
|
|
"ANTHROPIC_DEFAULT_HAIKU_MODEL": "gemini-2.5-flash-lite",
|
|
"CLAUDE_CODE_SUBAGENT_MODEL": "gemini-3-flash"
|
|
}
|
|
}
|
|
```
|
|
|
|
### Run Claude Code
|
|
|
|
```bash
|
|
# Make sure the proxy is running first
|
|
antigravity-claude-proxy start
|
|
|
|
# In another terminal, run Claude Code
|
|
claude
|
|
```
|
|
|
|
---
|
|
|
|
## Available Models
|
|
|
|
### Claude Models
|
|
|
|
| Model ID | Description |
|
|
|----------|-------------|
|
|
| `claude-sonnet-4-5-thinking` | Claude Sonnet 4.5 with extended thinking |
|
|
| `claude-opus-4-5-thinking` | Claude Opus 4.5 with extended thinking |
|
|
| `claude-sonnet-4-5` | Claude Sonnet 4.5 without thinking |
|
|
|
|
Standard Anthropic model names are automatically mapped:
|
|
- `claude-sonnet-4-5-20250514` → `claude-sonnet-4-5-thinking`
|
|
- `claude-opus-4-5-20250514` → `claude-opus-4-5-thinking`
|
|
|
|
### Gemini Models
|
|
|
|
| Model ID | Description |
|
|
|----------|-------------|
|
|
| `gemini-3-flash` | Gemini 3 Flash with thinking |
|
|
| `gemini-3-pro-low` | Gemini 3 Pro Low with thinking |
|
|
| `gemini-3-pro-high` | Gemini 3 Pro High with thinking |
|
|
|
|
Gemini models include full thinking support with `thoughtSignature` handling for multi-turn conversations.
|
|
|
|
---
|
|
|
|
## Multi-Account Load Balancing
|
|
|
|
When you add multiple accounts, the proxy automatically:
|
|
|
|
- **Sticky account selection**: Stays on the same account to maximize prompt cache hits
|
|
- **Smart rate limit handling**: Waits for short rate limits (≤2 min), switches accounts for longer ones
|
|
- **Automatic cooldown**: Rate-limited accounts become available after reset time expires
|
|
- **Invalid account detection**: Accounts needing re-authentication are marked and skipped
|
|
- **Prompt caching support**: Stable session IDs enable cache hits across conversation turns
|
|
|
|
Check account status anytime:
|
|
|
|
```bash
|
|
curl "http://localhost:8080/account-limits?format=table"
|
|
```
|
|
|
|
---
|
|
|
|
## API Endpoints
|
|
|
|
| Endpoint | Method | Description |
|
|
|----------|--------|-------------|
|
|
| `/health` | GET | Health check |
|
|
| `/account-limits` | GET | Account status and quota limits (add `?format=table` for ASCII table) |
|
|
| `/v1/messages` | POST | Anthropic Messages API |
|
|
| `/v1/models` | GET | List available models |
|
|
| `/refresh-token` | POST | Force token refresh |
|
|
|
|
---
|
|
|
|
## Testing
|
|
|
|
Run the test suite (requires server running):
|
|
|
|
```bash
|
|
# Start server in one terminal
|
|
npm start
|
|
|
|
# Run tests in another terminal
|
|
npm test
|
|
```
|
|
|
|
Individual tests:
|
|
|
|
```bash
|
|
npm run test:signatures # Thinking signatures
|
|
npm run test:multiturn # Multi-turn with tools
|
|
npm run test:streaming # Streaming SSE events
|
|
npm run test:interleaved # Interleaved thinking
|
|
npm run test:images # Image processing
|
|
npm run test:caching # Prompt caching
|
|
```
|
|
|
|
---
|
|
|
|
## Troubleshooting
|
|
|
|
### "Could not extract token from Antigravity"
|
|
|
|
If using single-account mode with Antigravity:
|
|
1. Make sure Antigravity app is installed and running
|
|
2. Ensure you're logged in to Antigravity
|
|
|
|
Or add accounts via OAuth instead: `antigravity-claude-proxy accounts add`
|
|
|
|
### 401 Authentication Errors
|
|
|
|
The token might have expired. Try:
|
|
```bash
|
|
curl -X POST http://localhost:8080/refresh-token
|
|
```
|
|
|
|
Or re-authenticate the account:
|
|
```bash
|
|
antigravity-claude-proxy accounts
|
|
```
|
|
|
|
### Rate Limiting (429)
|
|
|
|
With multiple accounts, the proxy automatically switches to the next available account. With a single account, you'll need to wait for the rate limit to reset.
|
|
|
|
### Account Shows as "Invalid"
|
|
|
|
Re-authenticate the account:
|
|
```bash
|
|
antigravity-claude-proxy accounts
|
|
# Choose "Re-authenticate" for the invalid account
|
|
```
|
|
|
|
---
|
|
|
|
## Safety, Usage, and Risk Notices
|
|
|
|
### Intended Use
|
|
|
|
- Personal / internal development only
|
|
- Respect internal quotas and data handling policies
|
|
- Not for production services or bypassing intended limits
|
|
|
|
### Not Suitable For
|
|
|
|
- Production application traffic
|
|
- High-volume automated extraction
|
|
- Any use that violates Acceptable Use Policies
|
|
|
|
### Warning (Assumption of Risk)
|
|
|
|
By using this software, you acknowledge and accept the following:
|
|
|
|
- **Terms of Service risk**: This approach may violate the Terms of Service of AI model providers (Anthropic, Google, etc.). You are solely responsible for ensuring compliance with all applicable terms and policies.
|
|
|
|
- **Account risk**: Providers may detect this usage pattern and take punitive action, including suspension, permanent ban, or loss of access to paid subscriptions.
|
|
|
|
- **No guarantees**: Providers may change APIs, authentication, or policies at any time, which can break this method without notice.
|
|
|
|
- **Assumption of risk**: You assume all legal, financial, and technical risks. The authors and contributors of this project bear no responsibility for any consequences arising from your use.
|
|
|
|
**Use at your own risk. Proceed only if you understand and accept these risks.**
|
|
|
|
---
|
|
|
|
## Legal
|
|
|
|
- **Not affiliated with Google or Anthropic.** This is an independent open-source project and is not endorsed by, sponsored by, or affiliated with Google LLC or Anthropic PBC.
|
|
|
|
- "Antigravity", "Gemini", "Google Cloud", and "Google" are trademarks of Google LLC.
|
|
|
|
- "Claude" and "Anthropic" are trademarks of Anthropic PBC.
|
|
|
|
- Software is provided "as is", without warranty. You are responsible for complying with all applicable Terms of Service and Acceptable Use Policies.
|
|
|
|
---
|
|
|
|
## Credits
|
|
|
|
This project is based on insights and code from:
|
|
|
|
- [opencode-antigravity-auth](https://github.com/NoeFabris/opencode-antigravity-auth) - Antigravity OAuth plugin for OpenCode
|
|
- [claude-code-proxy](https://github.com/1rgs/claude-code-proxy) - Anthropic API proxy using LiteLLM
|
|
|
|
---
|
|
|
|
## License
|
|
|
|
MIT
|
|
|
|
---
|
|
|
|
## Star History
|
|
|
|
[](https://www.star-history.com/#badri-s2001/antigravity-claude-proxy&type=date&legend=top-left) |