Loading...
Loading...
AI coding agent skill for Antigravity Manager — a Tauri v2 + Rust desktop app and Docker service that manages multiple Google/Anthropic accounts and proxies them as standard OpenAI/Anthropic/Gemini API endpoints with intelligent account rotation.
npx skill4agent add aradotso/trending-skills antigravity-managerSkill by ara.so — Daily 2026 Skills collection.
curl -fsSL https://raw.githubusercontent.com/lbjlaq/Antigravity-Manager/v4.1.30/install.sh | bashcurl -fsSL https://raw.githubusercontent.com/lbjlaq/Antigravity-Manager/v4.1.30/install.sh | bash -s -- --version 4.1.30curl -fsSL https://raw.githubusercontent.com/lbjlaq/Antigravity-Manager/v4.1.30/install.sh | bash -s -- --dry-runirm https://raw.githubusercontent.com/lbjlaq/Antigravity-Manager/main/install.ps1 | iexbrew tap lbjlaq/antigravity-manager https://github.com/lbjlaq/Antigravity-Manager
brew install --cask antigravity-toolsdocker run -d --name antigravity-manager \
-p 8045:8045 \
-e API_KEY=$ANTIGRAVITY_API_KEY \
-e WEB_PASSWORD=$ANTIGRAVITY_WEB_PASSWORD \
-e ABV_MAX_BODY_SIZE=104857600 \
-v ~/.antigravity_tools:/root/.antigravity_tools \
lbjlaq/antigravity-manager:latest# docker-compose.yml
version: "3.8"
services:
antigravity:
image: lbjlaq/antigravity-manager:latest
container_name: antigravity-manager
restart: unless-stopped
ports:
- "8045:8045"
environment:
- API_KEY=${ANTIGRAVITY_API_KEY}
- WEB_PASSWORD=${ANTIGRAVITY_WEB_PASSWORD}
- ABV_MAX_BODY_SIZE=104857600
volumes:
- ~/.antigravity_tools:/root/.antigravity_toolsdocker compose up -d
docker logs antigravity-manager # view logs / recover forgotten keys.dmg.msi.zip.deb.rpm.AppImage| Credential | Env var | Config key | Purpose |
|---|---|---|---|
| API Key | | | Authenticates AI API calls ( |
| Web Password | | | Logs into the management web UI |
API_KEYAPI_KEYAPI_KEYWEB_PASSWORDAPI_KEYdocker logs antigravity-manager
# or
grep -E '"api_key"|"admin_password"' ~/.antigravity_tools/gui_config.jsonPOST http://localhost:8045/v1/chat/completions
Authorization: Bearer $ANTIGRAVITY_API_KEYPOST http://localhost:8045/v1/messages
Authorization: Bearer $ANTIGRAVITY_API_KEYPOST http://localhost:8045/v1/models/{model}:generateContent
Authorization: Bearer $ANTIGRAVITY_API_KEYimport os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["ANTIGRAVITY_API_KEY"],
base_url="http://localhost:8045/v1",
)
response = client.chat.completions.create(
model="gemini-2.5-pro",
messages=[
{"role": "user", "content": "Explain quantum entanglement in simple terms."}
],
stream=True,
)
for chunk in response:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)import os
import anthropic
client = anthropic.Anthropic(
api_key=os.environ["ANTIGRAVITY_API_KEY"],
base_url="http://localhost:8045",
)
message = client.messages.create(
model="claude-sonnet-4-5",
max_tokens=1024,
messages=[
{"role": "user", "content": "Write a haiku about distributed systems."}
],
)
print(message.content[0].text)import os
import anthropic
client = anthropic.Anthropic(
api_key=os.environ["ANTIGRAVITY_API_KEY"],
base_url="http://localhost:8045",
)
with client.messages.stream(
model="claude-opus-4-5",
max_tokens=2048,
system="You are a helpful coding assistant.",
messages=[{"role": "user", "content": "Implement a binary search in Rust."}],
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.ANTIGRAVITY_API_KEY!,
baseURL: "http://localhost:8045/v1",
});
async function chat(prompt: string): Promise<string> {
const response = await client.chat.completions.create({
model: "gemini-2.5-flash",
messages: [{ role: "user", content: prompt }],
});
return response.choices[0].message.content ?? "";
}
// Image generation via Imagen 3
async function generateImage(prompt: string) {
const response = await client.images.generate({
model: "imagen-3.0-generate-002",
prompt,
size: "1024x1024", // maps to Imagen 3 aspect ratio
n: 1,
});
return response.data[0].url;
}# Test OpenAI-compatible endpoint
curl -s http://localhost:8045/v1/chat/completions \
-H "Authorization: Bearer $ANTIGRAVITY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-2.5-pro",
"messages": [{"role": "user", "content": "Hello!"}]
}' | jq '.choices[0].message.content'
# Test Anthropic endpoint
curl -s http://localhost:8045/v1/messages \
-H "Authorization: Bearer $ANTIGRAVITY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-4-5",
"max_tokens": 256,
"messages": [{"role": "user", "content": "Hello!"}]
}' | jq '.content[0].text'# Set environment variables before starting Claude Code
export ANTHROPIC_API_KEY=$ANTIGRAVITY_API_KEY
export ANTHROPIC_BASE_URL=http://localhost:8045
claude # start Claude Code — it will use Antigravity as the backend.env# .env
ANTHROPIC_API_KEY=your-antigravity-api-key
ANTHROPIC_BASE_URL=http://localhost:8045http://localhost:8045/v1ANTIGRAVITY_API_KEYhttp://localhost:8045/v1ANTIGRAVITY_API_KEY// ~/.continue/config.json
{
"models": [
{
"title": "Gemini Pro (Antigravity)",
"provider": "openai",
"model": "gemini-2.5-pro",
"apiKey": "YOUR_ANTIGRAVITY_API_KEY",
"apiBase": "http://localhost:8045/v1"
},
{
"title": "Claude (Antigravity)",
"provider": "anthropic",
"model": "claude-sonnet-4-5",
"apiKey": "YOUR_ANTIGRAVITY_API_KEY",
"apiBase": "http://localhost:8045"
}
]
}~/.antigravity_tools/gui_config.json{
"api_key": "sk-your-api-key",
"admin_password": "your-web-ui-password",
"proxy": {
"port": 8045,
"max_body_size": 104857600,
"admin_password": "your-web-ui-password"
},
"model_routes": [
{
"pattern": "gpt-4.*",
"target": "gemini-2.5-pro"
},
{
"pattern": "gpt-3.5.*",
"target": "gemini-2.5-flash"
}
]
}| Variable | Description | Default |
|---|---|---|
| API key for authenticating proxy requests | required |
| Web UI admin password | falls back to |
| Max request body in bytes (for image uploads) | |
gpt-4gui_config.json{
"model_routes": [
{
"pattern": "gpt-4-turbo",
"target": "gemini-2.5-pro"
},
{
"pattern": "gpt-4o",
"target": "gemini-2.5-pro"
},
{
"pattern": "gpt-3\\.5.*",
"target": "gemini-2.5-flash"
},
{
"pattern": "claude-3-opus.*",
"target": "claude-opus-4-5"
}
]
}http://localhost:8045[
{
"token": "session-token-1",
"type": "google",
"label": "account-work"
},
{
"token": "session-token-2",
"type": "anthropic",
"label": "account-personal"
}
]# Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# Node.js (for frontend)
node --version # requires v18+
# Tauri v2 CLI
cargo install tauri-cli --version "^2"
# System deps (Linux)
sudo apt install libwebkit2gtk-4.1-dev libayatana-appindicator3-dev librsvg2-devgit clone https://github.com/lbjlaq/Antigravity-Manager.git
cd Antigravity-Manager
npm install # install frontend deps
cargo tauri dev # run in development mode
cargo tauri build # build release binaries → src-tauri/target/release/bundle/cd src-tauri
cargo build --release --features headless
./target/release/antigravity-manager --headless --port 8045# Find and kill the process
lsof -ti:8045 | xargs kill -9
# or change port in gui_config.json:
# "proxy": { "port": 8046 }# Docker
docker logs antigravity-manager | grep -E "api_key|password"
# Local install
cat ~/.antigravity_tools/gui_config.json | grep -E '"api_key"|"admin_password"'xattr -d com.apple.quarantine /Applications/Antigravity\ Tools.app
# or install with:
brew install --cask antigravity-tools --no-quarantinedocker run ... -v ~/.antigravity_tools:/root/.antigravity_tools ...
# Verify data is present:
ls ~/.antigravity_tools/# Verify the proxy is running
curl -s http://localhost:8045/v1/models \
-H "Authorization: Bearer $ANTIGRAVITY_API_KEY"
# Check env vars are exported (not just set)
export ANTHROPIC_BASE_URL=http://localhost:8045
export ANTHROPIC_API_KEY=$ANTIGRAVITY_API_KEY
echo $ANTHROPIC_BASE_URL # should print the URLAntigravity-Manager/
├── src/ # React frontend (TypeScript)
│ ├── components/ # UI components (Dashboard, Accounts, etc.)
│ └── pages/
├── src-tauri/ # Rust backend
│ ├── src/
│ │ ├── main.rs # Tauri app entry
│ │ ├── proxy/ # Axum HTTP proxy server
│ │ │ ├── router.rs # Model routing logic
│ │ │ ├── dispatcher.rs # Account rotation
│ │ │ └── mapper.rs # Protocol conversion
│ │ ├── accounts/ # Account storage & OAuth
│ │ └── quota/ # Quota tracking
│ └── Cargo.toml
├── docker/
│ └── Dockerfile
├── install.sh # Linux/macOS installer
├── install.ps1 # Windows installer
└── docker-compose.yml