Run any ACP agent on your PC — opencode, Claude Code, Codex, Cursor — from your Android phone. Start a session on the bus, resume it from bed. One command. Any network.
You could SSH tunnel into your PC — if you like typing firewall rules at 11pm. Runmote connects out over ordinary internet. No SSH. No VPN. No port forwarding.
| SSH | Runmote | |
|---|---|---|
| Setup time | 30 minutes of iptables hell | One curl command |
| Port forwarding | Yes, on every network | Never |
| Works on 4G | Only if you port-forwarded | Yes — it's just the internet |
| Mobile app | Termius + tmux + prayer | Native Flutter app |
| Session persistence | tmux resurrection scripts | Built-in, automatic |
| Keep your sessions | Hope screen didn't die | Resumes from last message |
One command, no config files. Runs as a background service on Linux, macOS, or Windows — systemd, launchd, or Task Scheduler.
curl -fsSL https://runmote.dev/install.sh | bash
runmote start shows a QR code and an 8-digit code in your terminal. Scan it or type it in the app. Fresh code every restart.
Example: 6PG-PNCSQ
Open the app, pick an agent, go. Streaming tool calls, diffs, and approvals over the same ACP session — home, office, 4G, hotel WiFi.
runmote startStart the daemon, show the pairing QRrunmote codeRe-display the pairing code anytimerunmote textShow the code as text (XXXX-XXXX)runmote statusIs the daemon running?runmote stopStop the daemonThe daemon scans your PATH and known install dirs, then wires each agent's ACP adapter. Install a new agent — it shows up in the app without a restart. Any agent that speaks ACP works.
| Agent | Linux | macOS | Windows |
|---|---|---|---|
| OpenCode | Auto | Auto | Manual |
| Cursor | Auto | Auto | Auto |
| Claude Code | Auto | Auto | Auto |
| Codex | Auto | Auto | Auto |
| GitHub Copilot | Auto | Auto | Manual |
Not auto-detected? Set ACP_AGENT_COMMANDS to a JSON array of agent configs.
Two WebSocket hops, both encrypted. App → Relay → Daemon → ACP agent via stdin/stdout. The session lives on your machine — the relay only passes traffic and remembers your session list.
Yes — the daemon runs as a background service (systemd / launchd / Task Scheduler) and idles at near-zero usage. It only spawns an agent when a session is active. If the PC is off, the app shows a disconnected banner until you run runmote.
Both connections are WSS (WebSocket over TLS). Pairing codes are rate-limited (5 tries/IP/min), expire after 15 minutes, and rotate on every daemon start. Session content stays on your machine — the relay only passes traffic and stores session metadata.
No — a fresh 8-digit code is generated each time the daemon starts, and only your terminal shows it. The code rotates on restart, and you can force a new one anytime with runmote code.
The app is built with Flutter and shipped for Android — on Google Play with APKs in the GitHub releases.
Yes — the relay is 100% open source. Run docker compose up -d, then set ACP_RELAY_URL on the daemon. Pairing QR codes embed your relay’s public URL automatically, and there’s a LAN-only mode that works without internet via mDNS.
The Windows installer isn’t signed by a trusted certificate authority yet, so Windows shows a blue "protected your PC" screen. Click More info → Run anyway — the app is open source and fully auditable.
One command. Thirty seconds.