Mirror your Antigravity (Windsurf) AI chat on your phone in real-time.
Send messages. Switch models. Manage windows. All from your mobile browser.
Get Started · Screenshots · How It Works · Docker · npm
🌐 Available in: 🇺🇸 English | 🇧🇷 Português (Brasil) | 🇪🇸 Español | 🇫🇷 Français | 🇮🇹 Italiano | 🇷🇺 Русский | 🇨🇳 中文 (简体) | 🇩🇪 Deutsch | 🇮🇳 हिन्दी | 🇹🇭 ไทย | 🇺🇦 Українська | 🇸🇦 العربية | 🇯🇵 日本語 | 🇻🇳 Tiếng Việt | 🇧🇬 Български | 🇩🇰 Dansk | 🇫🇮 Suomi | 🇮🇱 עברית | 🇭🇺 Magyar | 🇮🇩 Bahasa Indonesia | 🇰🇷 한국어 | 🇲🇾 Bahasa Melayu | 🇳🇱 Nederlands | 🇳🇴 Norsk | 🇵🇹 Português (Portugal) | 🇷🇴 Română | 🇵🇱 Polski | 🇸🇰 Slovenčina | 🇸🇪 Svenska | 🇵🇭 Filipino
You're deep into an AI-assisted coding session. Claude is generating code, Gemini is reviewing your architecture. Then your phone rings, someone needs you in the kitchen, or you just want to move to the couch.
Your options today:
- ❌ Walk back to the desk every time the AI responds
- ❌ Try to read your monitor from across the room
- ❌ Copy-paste into a separate mobile app (losing context)
- ❌ Just... stop coding
There has to be a better way.
OmniAntigravity mirrors your entire Antigravity AI chat to your phone — in real-time, with full interaction. Read responses, send follow-up messages, switch AI models, even manage multiple editor windows. All from your mobile browser.
npx omni-antigravity-remote-chatThat's it. Open the URL on your phone. You're in. 🚀
- Content Security Policy — Strict CSP with zero inline JS, enforced via header + meta tags
- Pinggy tunnel support — SSH-based tunneling with zero binary dependencies
- Leaf-node targeting — Precise DOM click targeting with occurrence index tracking
- Multi-tunnel management — Cloudflare and Pinggy with automatic fallback
- Design Philosophy document — 10 core principles guiding architecture decisions
| Main Interface | Model Selection | Ready to Chat |
|---|---|---|
![]() |
![]() |
![]() |
| Premium dark UI with live sync | Switch between Gemini, Claude, GPT | Send messages from your phone |
npx omni-antigravity-remote-chatnpm install -g omni-antigravity-remote-chat
omni-chatdocker run -d --name omni-chat \
--network host \
-e APP_PASSWORD=your_password \
diegosouzapw/omni-antigravity-remote-chat:latestLaunch Antigravity in debug mode (one-time setup):
antigravity . --remote-debugging-port=7800💡 Pro tip: Add
alias agd='antigravity . --remote-debugging-port=7800'to your~/.bashrc
| Feature | Details | |
|---|---|---|
| 🛋️ | Code from anywhere | Read and reply to AI chats from your couch, bed, or kitchen |
| 🪟 | Multi-window | Switch between multiple Antigravity instances from one phone |
| 🔄 | Real-time sync | < 100ms latency via WebSocket — chat updates appear instantly |
| 🤖 | Model switching | Toggle between Gemini, Claude, GPT from a mobile dropdown |
| 🤖 | Remote Autonomy | Auto-detect and 1-tap accept/reject CLI instructions remotely |
| 🧠 | Suggest Mode | Queue supervisor suggestions for manual review before desktop execution |
| 📊 | Session Analytics | Track errors, approvals, uploads, quota warnings and screen activity |
| 📈 | Quota Visibility | Read real model limits from the local Antigravity language server |
| 💬 | Assist Workspace | Ask the supervisor for summaries, context and next actions |
| 🖼️ | Timeline | Keep a persistent screenshot history with manual and automatic captures |
| 📱 | Telegram Alerts | Get push notifications for Blocks, Task completion and Pending actions |
| 📋 | Chat history | Browse and resume past conversations on mobile |
| 🔒 | Secure by default | HTTPS, CSP, password auth, cookie sessions, LAN auto-auth |
| 🌐 | Remote access | Cloudflare, Pinggy, ngrok tunnels with QR code — access from anywhere |
| 🐳 | Docker ready | One-liner container deployment |
| ♻️ | Modular codebase | Clean architecture with JSDoc typing (config, state, utils, cdp) |
┌─────────────┐ CDP (7800) ┌──────────────┐ HTTPS/WS (4747) ┌─────────────┐
│ Antigravity │ ◄──────────────► │ Node Server │ ◄──────────────────► │ Phone │
│ (Desktop) │ DOM snapshot │ (server.js) │ mirror + control │ (Browser) │
└─────────────┘ └──────────────┘ └─────────────┘
The server connects to Antigravity via the Chrome DevTools Protocol (CDP), captures the chat DOM in real-time, and streams it to your phone over WebSocket. Actions on your phone (sending messages, switching models) are executed back on the desktop via CDP.
Zero impact on your desktop — the mirroring is read-only until you interact. No plugins, no extensions, no Antigravity modifications needed.
Manage multiple Antigravity instances from a single phone:
- Window Selector — Tap 🖥️ to see all open Antigravity windows
- Instant Switching — Select any window, mirrors within 2 seconds
- Smart Filtering — Only shows real editor windows (hides Settings, Launchpad)
- Launch Windows — Spawn new Antigravity instances directly from your phone
| Feature | Git Clone | NPM Global | Docker |
|---|---|---|---|
| Basic server | npm start |
omni-chat |
docker run ... |
| QR code | npm run start:local |
omni-chat (shows URL) |
— |
| ngrok tunnel | npm run start:web |
omni-chat + npx ngrok http 4747 |
— |
| SSL setup | npm run setup:ssl |
Manual with mkcert |
Not needed |
# In PowerShell (Run as Administrator)
cd scripts/windows-wsl-remote
./Start-OmniChat.ps1Context Menu: This script sets up a handy right-click "Open OmniChat & Antigravity" shortcut on Windows that seamlessly launches your project inside WSL. See scripts/windows-wsl-remote/README.md for full instructions.
📖 Full launch mode details
npm start # Start server directly
npm run start:local # Start with QR code for Wi-Fi access
npm run start:web # Start with ngrok tunnel for internet access
npm run setup:ssl # Generate trusted HTTPS certificates# Terminal 1
omni-chat
# Terminal 2
npx ngrok http 4747Full ngrok integration (automatic tunnel + QR code) is available via
npm run start:webwithNGROK_AUTHTOKENin.env.
npm run setup:sslAuto-installs mkcert, creates a local CA, and generates trusted certificates → green padlock 🔒
The mobile workspace provides 7 specialized panels:
- Files for browsing and previewing project files with syntax highlighting
- Terminal for remote command execution with live output streaming
- Git for status, staging, commit and push with diff summaries
- Assist for supervisor-backed AI chat with contextual action buttons
- Stats for real-time session analytics (messages, approvals, errors)
- Timeline for persistent screenshot history with manual and auto-capture
- Screen for CDP-based live screencast streaming
This makes the phone UI useful for both passive monitoring and active intervention without leaving the browser.
cp .env.example .env| Variable | Default | Description |
|---|---|---|
APP_PASSWORD |
antigravity |
Authentication password |
PORT |
4747 |
Server port |
CDP_PORTS |
7800,7801,7802,7803 |
CDP debug ports to scan (comma-separated) |
COOKIE_SECRET |
(auto-generated) | Secret for cookie signing |
AUTH_SALT |
(auto-generated) | Additional salt for auth tokens |
WORKSPACE_ROOT |
repo root | Root exposed in Files, Terminal and Git |
AUTO_TUNNEL_PROVIDER |
(optional) | Auto-start tunnel (cloudflare or pinggy) |
TUNNEL_PROVIDER |
cloudflare |
Preferred provider for launcher --mode web |
CLOUDFLARE_TUNNEL_BIN |
cloudflared |
Path to cloudflared binary |
PINGGY_TOKEN |
(optional) | Pinggy API token for persistent subdomains |
PINGGY_SSH_BIN |
ssh |
Path to SSH binary for Pinggy tunnels |
OMNIROUTE_SUPERVISOR_ENABLED |
false |
Enable the AI supervisor |
OMNIROUTE_SUPERVISOR_BASE_URL |
http://127.0.0.1:20128/v1 |
OmniRoute API endpoint |
OMNIROUTE_SUPERVISOR_API_KEY |
sk_omniroute |
OmniRoute API key |
OMNIROUTE_SUPERVISOR_MODEL |
if/kimi-k2-thinking |
Supervisor model |
SUPERVISOR_SUGGEST_MODE |
false |
Queue supervisor actions for human review |
SUPERVISOR_MAX_QUEUE |
10 |
Maximum pending suggestions |
QUOTA_ENABLED |
false |
Enable background quota polling |
QUOTA_POLL_INTERVAL |
300000 |
Quota polling interval in ms |
SCREENSHOT_ENABLED |
false |
Enable automatic screenshot timeline capture |
SCREENSHOT_INTERVAL |
60000 |
Timeline capture interval in ms |
SCREENSHOT_MAX |
100 |
Maximum screenshots persisted on disk |
NGROK_AUTHTOKEN |
(optional) | For remote access via ngrok |
TELEGRAM_BOT_TOKEN |
(optional) | Telegram bot token for push notifications |
TELEGRAM_CHAT_ID |
(optional) | Telegram chat ID for notifications |
TELEGRAM_RATE_LIMIT |
30 |
Max Telegram messages per minute |
| Issue | Solution |
|---|---|
| "CDP not found" | Launch Antigravity with --remote-debugging-port=7800 |
| "EADDRINUSE" | Change PORT in .env, or stop the process using that port |
| Phone can't connect | Ensure same Wi-Fi network and check firewall |
| "Syncing..." stuck | Wait 2-3s for CDP contexts to populate after window switch |
├── src/
│ ├── server.js # Main server (Express + WS + CDP actions)
│ ├── config.js # Constants, env vars, feature flags, version
│ ├── env.js # dotenv bootstrap
│ ├── state.js # Shared state + JSDoc type definitions
│ ├── supervisor.js # AI supervisor (OmniRoute) + suggest queue
│ ├── quota-service.js # Model quota polling
│ ├── session-stats.js # In-memory session analytics
│ ├── screenshot-timeline.js # Persistent screenshot capture
│ ├── ui_inspector.js # UI DOM inspection utilities
│ ├── cdp/
│ │ └── connection.js # CDP discovery & connection
│ └── utils/
│ ├── network.js # getLocalIP, isLocalRequest, getJson
│ ├── process.js # killPortProcess, launchAntigravity
│ ├── hash.js # djb2 hash for diff detection
│ ├── telegram.js # Telegram bot integration
│ └── workspace.js # File browser, terminal, Git, uploads
├── public/ # Mobile interface (4 HTML pages, modular CSS/JS)
│ ├── js/components/ # Workspace panels (6 modules)
│ └── css/ # Modular CSS (8 files, 5 themes)
├── launcher.js # QR code + tunnel orchestration
├── scripts/ # SSL, tunnel managers, context menu, WSL
├── test/ # Smoke tests + Vitest unit tests (9 files)
├── Dockerfile # Docker support (node:22-alpine)
└── .github/workflows/ # CI + auto-release + Docker Hub
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
See CONTRIBUTING.md for detailed guidelines.
Special thanks to Krishna Kanth B — the original creator of the Windsurf mobile chat concept that inspired this project. OmniAntigravity builds upon that foundation with multi-window management, robust CDP handling, NPM/Docker packaging, and a premium mobile-first UI.
GPL-3.0 — see LICENSE for details.
github.com/diegosouzapw/OmniAntigravityRemoteChat


