Remote Pi pairs a phone with a Pi coding agent running on your own machine, so you can send prompts, voice, and images to it and switch models while away from the computer. Pairing uses a short-lived QR code printed by a setup wizard, and paired peers persist in the mobile keychain and in local state on the desktop.
The project has four parts: a Flutter mobile client, a Node and TypeScript Pi extension that exposes a /remote-pi command, a Rust relay that routes WebSocket traffic and stores signed mesh membership, and a Next.js site. The relay handshake proves possession of the connection key with Ed25519 and TLS protects traffic in transit, but payloads are not end-to-end encrypted, so a relay operator can see message content. A free community relay is available, and the relay can be self-hosted with Docker.
When several Pi agents run on one machine they discover each other through a Unix domain socket broker managed by the extension, with a leader election deciding which agent binds the socket. Three tools surface in the Pi chat (listpeers, agentsend for unicast messages with delivery acknowledgments, and the deprecated agent_request for request and response), so local multi-agent workflows run in parallel with the remote pairing.
Features
- QR pairing: a one-time code links the phone to a local agent, with no account or sign-up step
- Mobile control: prompts, voice dictation, image attachments, and model switching from the app
- Background daemons: a folder is promoted to a supervised background agent that survives logout
- Local agent mesh: a Unix-domain-socket broker with leader election lets agents on one machine address each other without the relay
- Agent tools: listpeers, agentsend with received, denied, and timeout acknowledgments, and a legacy agent_request
- Relay choice: a community relay for getting started or a self-hosted one, with the trust boundary written out
- Clients: iOS and Android apps, a direct Android package, and a desktop cockpit for macOS, Windows, and Linux
- Structured prompts: with the companion pi-ask package installed, ask_user questions with options and previews render natively in the app