Here's something that happens constantly with Copilot agent mode:
You kick off a task. "Refactor the auth module and update all the tests." Agent starts. You step away — meeting, lunch, whatever. Agent hits a confirmation: "I need to delete 3 files. Proceed?" It sits there, waiting, doing nothing.
You come back 40 minutes later. It stopped 38 minutes ago. You click "Yes." It continues.
You just lost 38 minutes of autonomous work — because the only way to interact with Copilot agent is through the VS Code window on your desktop.
I built Copilot Remote Control to cut that chain.
What it does
Your phone becomes a live VS Code chat panel. Every message the agent prints appears on your phone in real time. When the agent stops and needs input, your phone buzzes in your pocket. You glance at it, type "yes", put it back. Agent continues. You never left your meeting.
No dead time. No wasted cycles.
The architecture (no third-party server)
This is not a wrapper around an API. There's no relay server I run. Here's what actually happens:
Your PC (VS Code) Your Phone
┌─────────────────────┐ ┌──────────────────┐
│ Copilot Agent │ │ PWA (React 18) │
│ ↓ │ │ ↑ │
│ Extension hooks │ │ WebSocket │
│ into chat session │ │ client │
│ ↓ │ │ ↑ │
│ WebSocket Server │◄── Cloudflare ───►│ Secure Tunnel │
│ (localhost:3000) │ Tunnel (wss) │ │
│ Push Notifier ─────┼──► Google FCM ───►│ Push Notif │
└─────────────────────┘ └──────────────────┘
The WebSocket server runs inside the extension on localhost. A Cloudflare quick tunnel (cloudflared binary bundled in the extension) punches it out to the internet. Data flows directly from your PC to your phone through Cloudflare's network. I don't see your code. I don't store anything.
The technical details worth knowing
Real-time streaming at 20ms: The extension monitors Copilot's JSONL session files. VS Code writes response data in two modes — full snapshots (REPLACE) and incremental patches (SPLICE with an index offset). The extension reconstructs complete response state from both modes, diffs against what's been sent, and streams only new parts to your phone.
Mid-stream reconnection: If you open your phone after the agent has already been talking, you see the full accumulated response, not a blank screen. 200-message history buffer.
Offline license verification: The license key is a JWT signed with RSA-2048. The extension verifies it using a baked-in public key — pure math, no network call. Works on air-gapped machines.
$0/month infrastructure: Vercel free tier + Firebase free tier + Cloudflare free tier. The entire backend is one serverless function that wakes up for 200ms per sale.
Setup in 4 steps
- Buy & activate at agent-handle.vercel.app (₹49 / ~$6 one-time). Paste the license key in VS Code.
- Scan the QR code that appears in the sidebar panel with your phone camera.
- Walk away. Your phone shows everything the agent is doing, in real time.
- Respond when it buzzes. Firebase FCM pushes a notification when the agent needs input.
You can also send files from your phone — screenshots, PDFs, requirement docs — directly into your VS Code workspace.
Links
- 🛒 Marketplace: marketplace.visualstudio.com/items?itemName=atulhritik.copilot-remote
- 💳 Buy license (₹49 / ~$6): agent-handle.vercel.app
- 📱 Phone PWA: pwa-six-pi.vercel.app
One-time purchase, no subscription, no recurring costs. Curious what you think — especially about the tunnel approach.
Top comments (0)