Skip to content

diegosouzapw/OmniAntigravityRemoteChat

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

36 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

📱 OmniAntigravity Remote Chat

Your AI coding session shouldn't end when you leave your desk.


Control your AI from the couch

Version Node CI License

npm npm downloads Docker

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


😤 The Problem

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.

✅ The Solution

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-chat

That's it. Open the URL on your phone. You're in. 🚀

New in 1.3.0

  • 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

📸 See It in Action

Main Interface Model Selection Ready to Chat
Premium dark UI with live sync Switch between Gemini, Claude, GPT Send messages from your phone

⚡ Get Started

One command — zero config:

npx omni-antigravity-remote-chat

Or install globally:

npm install -g omni-antigravity-remote-chat
omni-chat

Or run with Docker:

docker run -d --name omni-chat \
  --network host \
  -e APP_PASSWORD=your_password \
  diegosouzapw/omni-antigravity-remote-chat:latest

Prerequisite

Launch 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


🏆 Why Developers Choose This

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)

📱 How It Works

┌─────────────┐    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.


🪟 Multi-Window Management

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

🚀 Launch Modes

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

Windows & WSL Integration

# In PowerShell (Run as Administrator)
cd scripts/windows-wsl-remote
./Start-OmniChat.ps1

Context 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

Git Clone (full control)

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

ngrok (Remote Access)

# Terminal 1
omni-chat

# Terminal 2
npx ngrok http 4747

Full ngrok integration (automatic tunnel + QR code) is available via npm run start:web with NGROK_AUTHTOKEN in .env.

SSL Setup

npm run setup:ssl

Auto-installs mkcert, creates a local CA, and generates trusted certificates → green padlock 🔒


🧰 Remote Workspace

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.


🔑 Configuration

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

🛠️ Troubleshooting

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

📁 Project Structure

├── 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

📊 Star History

Star History Chart

🤝 Contributing

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

See CONTRIBUTING.md for detailed guidelines.


🙏 Acknowledgments

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.


📄 License

GPL-3.0 — see LICENSE for details.


Built with ❤️ for developers who code from everywhere
github.com/diegosouzapw/OmniAntigravityRemoteChat

About

📱 Control your Antigravity AI sessions from your phone — real-time chat mirroring, multi-window management, and model switching via CDP

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Packages

 
 
 

Contributors