omni-antigravity-remote-chat
v0.5.3
Published
Premium mobile remote control for Antigravity AI sessions via CDP mirroring — multi-window, chat history, real-time sync
Downloads
904
Maintainers
Readme
📱 OmniAntigravity Remote Chat
Your AI coding session shouldn't end when you leave your desk.
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
😤 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-chatThat's it. Open the URL on your phone. You're in. 🚀
📸 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-chatOr install globally:
npm install -g omni-antigravity-remote-chat
omni-chatOr run with Docker:
docker run -d --name omni-chat \
--network host \
-e APP_PASSWORD=your_password \
diegosouzapw/omni-antigravity-remote-chat:latestPrerequisite
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 |
| 📋 | Chat history | Browse and resume past conversations on mobile |
| 🔒 | Secure by default | HTTPS, password auth, cookie sessions, LAN auto-auth |
| 🌐 | Remote access | ngrok support 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 |
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 certificatesngrok (Remote Access)
# 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.
SSL Setup
npm run setup:sslAuto-installs mkcert, creates a local CA, and generates trusted certificates → green padlock 🔒
🔑 Configuration
cp .env.example .env| Variable | Default | Description |
| ----------------- | ------------------ | ------------------------------- |
| APP_PASSWORD | antigravity | Authentication password |
| PORT | 4747 | Server port |
| COOKIE_SECRET | (auto-generated) | Secret for cookie signing |
| AUTH_SALT | (auto-generated) | Additional salt for auth tokens |
| NGROK_AUTHTOKEN | (optional) | For remote access via ngrok |
🛠️ 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, container IDs
│ ├── state.js # Shared state + JSDoc type definitions
│ ├── cdp/
│ │ └── connection.js # CDP discovery & connection
│ └── utils/
│ ├── network.js # getLocalIP, isLocalRequest, getJson
│ ├── process.js # killPortProcess, launchAntigravity
│ └── hash.js # Hash utility
├── public/ # Mobile chat interface
├── launcher.js # QR code + ngrok launcher
├── scripts/ # SSL, context menu installers
├── test/ # Validation test suite
├── Dockerfile # Docker support
└── .github/workflows/ # CI + auto-release + Docker Hub📊 Star History
🤝 Contributing
- 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.
🙏 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.
