Use any AI provider with Antigravity 2.0 — NVIDIA, OpenRouter, OpenAI, Groq, Anthropic, Google Gemini, OpenCode Zen, or 9+ local inference solutions.
The proxy intercepts Antigravity's Google Gemini API calls and translates them to the target provider's format. It supports:
- Multi-provider failover with retry + exponential backoff
- Per-model, per-provider routing via a matrix UI
- Reasoning effort control
- Real-time hot-reload of all config
- Advanced tool normalization and capability detection
git clone https://github.com/12errh/antigravity-proxy.git
cd antigravity-proxyAll launcher scripts and source code are inside the cloned directory.
- Antigravity 2.0 Desktop (Windows, macOS, or Linux)
- Node.js 20+
- Administrator/root privileges (port 443; can use 8443 without admin)
- At least one API key or local model server
| Platform | Status | Notes |
|---|---|---|
| Windows 10/11 | ✅ Tested | start.ps1 handles cert install, port binding, and launch |
| macOS | start.sh with best-effort cert trust. Report issues on GitHub. |
|
| Linux | start.sh with best-effort cert trust. Report issues on GitHub. |
TypeScript code is cross-platform. Only launcher scripts and TLS cert trust are platform-specific.
Windows (PowerShell as Administrator)
.\start.ps1macOS / Linux
chmod +x start.sh
./start.shWithout admin (port 8443)
./start.sh --port 8443Then open http://localhost:4000 in your browser to configure providers, model mappings, and view live stats.
| Feature | Status | Description |
|---|---|---|
| Multi-provider failover | ✅ | Priority chain with exponential backoff |
| Per-model routing | ✅ | One row per model alias, one column per provider |
| Retry + backoff | ✅ | Configurable per-provider and global |
| Hot-reload config | ✅ | No restart needed for changes |
| Tool normalization | ✅ | Alias resolution, type coercion, default filling |
| Model capability detection | ✅ | Auto-detect reasoning, vision, tools |
| Provider optimizations | ✅ | Groq (image stripping), Zen/NVIDIA (reasoning effort) |
| Real-time dashboard | ✅ | Live logs, stats, config editor |
| Cost tracking | ✅ | Per-day, per-model, per-provider |
| Local discovery | ✅ | 9+ inference solutions auto-detected |
| Full-text search | ✅ | Search requests, sessions, logs |
| Blocklist | ✅ | Provider, model, content filtering |
| Session comparison | ✅ | Side-by-side session analysis |
graph TD
A[Antigravity 2.0 Desktop] --> B[TLS 443]
B --> C[Proxy]
C --> D[Cloud APIs]
C --> E[Local APIs]
C --> F[Dashboard]
D --> G[OpenRouter]
D --> H[NVIDIA]
D --> I[OpenAI]
D --> J[Groq]
D --> K[Anthropic]
D --> L[Google Gemini]
D --> M[Zen]
E --> N[Ollama]
E --> O[vLLM]
E --> P[LM Studio]
E --> Q[llama.cpp]
F --> R[Live Logs]
F --> S[Request History]
F --> T[Config Editor]
F --> U[Model Matrix]
F --> V[Provider Priority]
- TLS Intercept — Receives Gemini API call on port 443
- Context Stripping — Removes bulk context, injects compact
agent-context.mdreference - Tool Normalization — Resolves aliases, coerces types, fills defaults
- Model Resolution — Routes through priority order with retry + backoff
- Capability Detection — Auto-detects reasoning/vision/tool support
- Reasoning Effort — Applies
reasoning_effortif configured - Translation — Converts to target provider's API format
- Streaming — Returns SSE response wrapped in Gemini format
- Logging — Records to SQLite for cost tracking, history, sessions
| Provider | Type | Env Var | Notes |
|---|---|---|---|
| OpenRouter | Cloud API | OPENROUTER_API_KEY |
300+ models in one key |
| NVIDIA NIM | Cloud API | NVIDIA_API_KEY |
Free credits on signup |
| OpenAI | Cloud API | OPENAI_API_KEY |
GPT-4o, o-series |
| Groq | Cloud API | GROQ_API_KEY |
Ultra-fast LPU inference |
| Anthropic | Cloud API | ANTHROPIC_API_KEY |
Claude 3.x / 4.x |
| Google Gemini | Cloud API | GOOGLE_API_KEY |
Gemini 2.5 Pro/Flash |
| OpenCode Zen | Cloud gateway | OPENCODE_API_KEY |
Claude, GPT, Gemini, Grok, Kimi, GLM — one key |
| Provider | Type | Notes |
|---|---|---|
| Ollama | Local | Auto-discovered on port 11434 |
| vLLM | Local | Auto-discovered on port 8000 |
| LM Studio | Local | Auto-discovered on port 1234 |
| llama.cpp | Local | Auto-discovered on port 8080 |
| text-generation-webui | Local | Auto-discovered on port 5000 |
| TabbyAPI | Local | Auto-discovered on port 5000 |
| LocalAI | Local | Auto-discovered on port 8080 |
| LiteLLM | Local | Auto-discovered on port 4000 |
| Aphrodite Engine | Local | Auto-discovered on port 8000 |
The Models tab shows a matrix: one row per Antigravity model alias, one column per provider.
graph TD
A[Model Alias] --> B[Default]
A --> C[OpenRouter]
A --> D[Zen]
E[claude-sonnet-4-6] --> F[claude-sonnet-4-5]
E --> G[anthropic/claude-3-5-sonnet-20241022]
E --> H[claude-sonnet-4-5]
I[gemini-2.5-flash] --> J[gemini-2.5-flash]
I --> K[google/gemini-2.0-flash-exp]
I --> L[deepseek-v4-flash]
M[gpt-4o] --> N[openai/gpt-4o]
M --> O[openai/gpt-4o]
Features:
- Double-click any cell to open live model picker
- Column toggles to hide unused providers
- Quick-add buttons (
+ Claude,+ Gemini,+ GPT) - Empty cells use Default value
- Provider logos in filled cells
Some models support reasoning_effort to control thinking depth:
| Model family | Levels |
|---|---|
| DeepSeek R-series | low, medium, high, max |
| NVIDIA stepfun | low, medium, high, max |
| OpenAI o-series | low, medium, high |
| Qwen Thinking, GLM Thinking, Kimi | low, medium, high |
Auto-detection: The Model Options tab detects supported models and lets you set levels per model. Settings persist in proxy/reasoning-effort.json without restart.
| Key | Provider |
|---|---|
OPENROUTER_API_KEY |
openrouter.ai/keys |
NVIDIA_API_KEY |
build.nvidia.com — free credits on signup |
OPENAI_API_KEY |
platform.openai.com/api-keys |
GROQ_API_KEY |
console.groq.com/keys |
ANTHROPIC_API_KEY |
console.anthropic.com/settings/keys |
GOOGLE_API_KEY |
aistudio.google.com/apikey |
OPENCODE_API_KEY |
opencode.ai/auth — one key for Claude, GPT, Gemini, Grok, Kimi, GLM |
All keys are hot-reloaded from .env — no restart needed.
graph TD
%% Root level
A[agent-context.md] --> B[start.ps1]
B --> C[README.md]
C --> D[CHANGELOG.md]
C --> E[docs/]
C --> F[proxy/]
%% docs/ directory
E --> G[SETUP.md]
E --> H[CONFIGURATION.md]
E --> I[DEVELOPER.md]
E --> J[antigravity-v2-analysis.md]
%% proxy/ directory
F --> K[src/]
%% src/ directory - main components
K --> L[adapters/]
K --> M[adapter.ts]
K --> N[provider-plugin.ts]
K --> O[provider-registry.ts]
K --> P[plugins/]
K --> Q[tool-capabilities.ts]
K --> R[tool-normalizer.ts]
K --> S[model-capabilities.ts]
K --> T[router.ts]
K --> U[models.ts]
K --> V[index.ts]
K --> W[engine.ts]
K --> X[mapper.ts]
K --> Y[config.ts]
K --> Z[provider-cache.ts]
%% adapters subdirectory
L --> A1[openai.ts]
L --> A2[anthropic.ts]
L --> A3[google.ts]
L --> A4[groq.ts]
L --> A5[zen.ts]
L --> A6[nvidia.ts]
L --> A7[types.ts]
%% plugins subdirectory
P --> B1[builtin-plugins.ts]
%% dashboard subdirectory
F --> C1[dashboard/]
C1 --> C2[index.html]
C1 --> C3[login.html]
%% Other files in proxy/
F --> D1[models.json]
F --> D2[pricing.json]
F --> D3[reasoning-effort.json]
F --> D4[blocklist.json]
F --> D5[.env]
F --> D6[.env.example]
F --> D7[certs/]
F --> D8[logs/]
%% Note: actual configuration for certs and logs are nested
---
## 🔧 Environment Variables
```env
# Provider priority (first = primary)
PROVIDER_PRIORITY=openrouter,nvidia,zen
# API keys
OPENROUTER_API_KEY=sk-or-v1-...
NVIDIA_API_KEY=nvapi-...
OPENAI_API_KEY=sk-...
GROQ_API_KEY=gsk_...
ANTHROPIC_API_KEY=sk-ant-...
GOOGLE_API_KEY=AIza...
OPENCODE_API_KEY=sk-...
# Ports
PROXY_PORT=443 # TLS port Antigravity connects to
API_PORT=4000 # Dashboard + REST API port
# Retry & failover
PROXY_RETRIES=3 # Attempts per provider
PROXY_BACKOFF_MS=100 # Initial backoff (doubles each retry)
# Rate limiting (0 = unlimited)
RATE_LIMIT_GLOBAL=0
RATE_LIMIT_PROVIDER=0
RATE_LIMIT_WINDOW_MS=60000
# Logging
LOG_LEVEL=info # debug | info | warn | error
LOG_MAX_SIZE_MB=10 # Rotate when reached
LOG_MAX_FILES=5 # Keep N rotated files
LOG_MAX_AGE_DAYS=30 # Delete files older than
# Dashboard auth (optional)
DASHBOARD_USER=admin
DASHBOARD_PASSWORD=your_password
# Failover webhook (optional)
FAILOVER_WEBHOOK_URL=https://hooks.example.com/webhook
# Workspace context hardening
WORKSPACE_CONTEXT_ENVELOPE=strict # off | loose | strict
# Inline context strip mode
CONTEXT_STRIP_MODE=strip # strip | passthrough
- Setup Guide
- Configuration Reference
- Developer Guide ← For adding providers & plugin development
- Antigravity v2 Protocol Analysis
- CHANGELOG
- Contributing
- Security Policy
cd proxy
npm install # Install dependencies
npm run build # Compile TypeScript → dist/
npm run typecheck # Type-check only
npm test # Run tests
npm run dev # Watch modeNew Providers: See docs/DEVELOPER.md for plugin architecture guide.
Run tests:
# All tests
npm test
# Filter by component
npx tsx test/run.ts plugin-architecture
npx tsx test/run.ts tool-translation
npx tsx test/run.ts model-discovery
npx tsx test/run.ts provider-adaptersMIT — see LICENSE.