153 lines
4.4 KiB
Markdown
153 lines
4.4 KiB
Markdown
# Antigravity Claude Proxy
|
|
|
|
A proxy server that exposes an **Anthropic-compatible API** backed by **Antigravity's Cloud Code**, letting you use Claude models like `claude-sonnet-4-5` with any Anthropic client including 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. Extracts OAuth token from Antigravity's local database
|
|
3. Transforms to **Google Generative AI format** with Cloud Code wrapping
|
|
4. Sends to Antigravity's Cloud Code API (`v1internal:streamGenerateContent`)
|
|
5. Converts responses back to **Anthropic format**
|
|
|
|
## Prerequisites
|
|
|
|
- **Antigravity** installed and running (you must be logged in)
|
|
- **Node.js** 18 or later
|
|
|
|
## Quick Start
|
|
|
|
### 1. Install Dependencies
|
|
|
|
```bash
|
|
npm install
|
|
```
|
|
|
|
### 2. Start the Proxy Server
|
|
|
|
```bash
|
|
npm start
|
|
```
|
|
|
|
The server runs on `http://localhost:8080` by default.
|
|
|
|
### 3. Test It
|
|
|
|
```bash
|
|
# Health check
|
|
curl http://localhost:8080/health
|
|
|
|
# Simple message (non-streaming)
|
|
curl http://localhost:8080/v1/messages \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"model": "claude-sonnet-4-5",
|
|
"messages": [{"role": "user", "content": "Say hello!"}],
|
|
"max_tokens": 100
|
|
}'
|
|
|
|
# Streaming
|
|
curl http://localhost:8080/v1/messages \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"model": "claude-sonnet-4-5",
|
|
"messages": [{"role": "user", "content": "Say hello!"}],
|
|
"max_tokens": 100,
|
|
"stream": true
|
|
}'
|
|
```
|
|
|
|
## Using with Claude Code CLI
|
|
|
|
Configure Claude Code to use this proxy:
|
|
|
|
```bash
|
|
# Set the API base URL
|
|
export ANTHROPIC_BASE_URL=http://localhost:8080
|
|
|
|
# Use any API key (it's not actually used - auth comes from Antigravity)
|
|
export ANTHROPIC_API_KEY=dummy-key
|
|
|
|
# Run Claude Code
|
|
claude
|
|
```
|
|
|
|
Or in your Claude Code config:
|
|
|
|
```json
|
|
{
|
|
"apiBaseUrl": "http://localhost:8080",
|
|
"apiKey": "dummy-key"
|
|
}
|
|
```
|
|
|
|
## Available Models
|
|
|
|
| Model ID | Description |
|
|
|----------|-------------|
|
|
| `claude-sonnet-4-5` | Claude Sonnet 4.5 via Antigravity |
|
|
| `claude-sonnet-4-5-thinking` | Claude Sonnet 4.5 with extended thinking |
|
|
| `claude-opus-4-5-thinking` | Claude Opus 4.5 with extended thinking |
|
|
|
|
You can also use standard Anthropic model names - they'll be automatically mapped:
|
|
- `claude-3-5-sonnet-20241022` → `claude-sonnet-4-5`
|
|
- `claude-3-opus-20240229` → `claude-opus-4-5-thinking`
|
|
|
|
## API Endpoints
|
|
|
|
| Endpoint | Method | Description |
|
|
|----------|--------|-------------|
|
|
| `/health` | GET | Health check and token status |
|
|
| `/v1/messages` | POST | Anthropic Messages API |
|
|
| `/v1/models` | GET | List available models |
|
|
| `/refresh-token` | POST | Force token refresh |
|
|
|
|
## Files
|
|
|
|
```
|
|
src/
|
|
├── index.js # Entry point
|
|
├── server.js # Express server with Anthropic API endpoints
|
|
├── cloudcode-client.js # Cloud Code API client with proper wrapping
|
|
├── format-converter.js # Anthropic ↔ Google format conversion
|
|
├── constants.js # Endpoints, headers, model mappings
|
|
└── token-extractor.js # Extracts OAuth token from Antigravity
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### "Could not extract token from Antigravity"
|
|
|
|
Make sure:
|
|
1. Antigravity app is running
|
|
2. You're logged in to Antigravity
|
|
|
|
### 401 Authentication Errors
|
|
|
|
The token might have expired. Try:
|
|
```bash
|
|
curl -X POST http://localhost:8080/refresh-token
|
|
```
|
|
|
|
### Rate Limiting (429)
|
|
|
|
Antigravity enforces rate limits on Cloud Code requests. Wait and retry, or switch to a different model.
|
|
|
|
## Credits
|
|
|
|
Based on insights 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
|