Every Claude Code session on your Mac becomes a pixel pilot on your phone. Watch them work, read every reply as it streams, and send new orders from the couch, the train, or the other side of the world.
Ground Control for iPhone, free on the App Store. Your fleet, rendered as marching pixel creatures. Each session gets its own pilot, generated from where it works, and it keeps that face forever.
DOWNLOADOne command on your Mac. It finds your Claude Code sessions, prints a QR code, and keeps running in the background from then on. If macOS asks to allow node to control your terminal, click Allow, that is how phone messages reach your sessions. No account, no signup, no config.
npx @clastres/groundcontrol
Scan the QR with the app. That scan is the whole handshake: your key is created on your Mac and never leaves your devices. Tap a pilot, send orders, watch your terminal update live.
Claude Code stops and asks before it does anything risky. The prompt lands on your phone, you answer it from wherever you are, and the session keeps moving instead of waiting on you.
Messages you send from the phone are typed into the real terminal on your Mac. Both screens show the same conversation, always.
ChaCha20 Poly1305 from your Mac to your phone. The relay routes sealed blobs and mathematically cannot read them.
Every session hatches its own creature with its own walk cycle, and the colour it flies in is its status.
The pairing key is generated on your machine and shared only through the QR code you scan. Conversations travel end to end encrypted and are never stored on any server. There is nothing to breach, because we keep nothing.
A Mac running Claude Code, an iPhone, and one terminal command. That is the entire stack.
No. Everything is encrypted on your Mac with a key we never see, and decrypted only on your phone. The relay sees connection metadata and sealed bytes, nothing else.
Its pilot turns coral and raises a flag, and the request itself lands on your phone so you can approve or deny it from anywhere. By default that only happens while you are away from your Mac. Change it anytime with groundcontrol approvals away, always, or off. Your Mac is never degraded either way: the normal terminal prompt still appears, and whichever answer comes first wins.
Claude Code first. More agents are planned once the fleet is stable.
Typing into your real terminal needs a one time macOS permission. Open System Settings, then Privacy and Security, then Automation, find node in the list and switch on your terminal app. If node is not in the list, update the daemon first by running npx @clastres/groundcontrol@latest and watch for the Allow dialog. The app on your phone also tells you when the Mac is blocking it.
Terminal, iTerm2, and tmux: messages from your phone are typed into the real window, so both screens stay in sync. In other terminals your prompts still run and replies appear on your phone, they are just not typed into the window. Claude Code must be installed on the Mac for that path.
It updates itself. The background service checks for new versions and re-stages itself, so there is nothing to keep track of. To force it, run npx @clastres/groundcontrol@latest. Check with npx @clastres/groundcontrol service status, read the log at ~/.groundcontrol/daemon.log, remove it with npx @clastres/groundcontrol service uninstall.
Free while in beta. Be early, adopt a pilot.