Guides
Approve Claude Code from your phone
Pair your phone with Pilothouse over Tailscale Serve to approve Claude Code and Codex permission requests remotely — HTTPS, no open ports, no account, signed decisions.
Pilothouse’s web app runs on your own machine. Your phone talks to it directly over your tailnet; there is no Pilothouse server in between and no account to create.
What you need
- Pilothouse running on the machine where your agents run (
pilothouse status). - Tailscale on that machine and on your phone, both logged in to the same tailnet.
- HTTPS certificates enabled for your tailnet (Tailscale admin console → DNS → enable MagicDNS and HTTPS). Phones require HTTPS for push notifications and for the signing keys Pilothouse uses.
1. Put the web app on your tailnet
pilothouse remote tailscale
This checks that tailscale is installed and HTTPS is enabled, then runs tailscale serve in the background to proxy https://<machine>.<tailnet>.ts.net to Pilothouse’s local listener on 127.0.0.1:7517. It saves that address as web.public_url.
Nothing is exposed to the internet: Tailscale Serve is only reachable from devices on your tailnet, and Pilothouse never listens on anything but loopback.
pilothouse remote status # show the current address
pilothouse remote off # stop serving
2. Pair
pilothouse pair
Pilothouse prints a QR code and a link that contains a one-time code (valid for 10 minutes). Scan it with the phone’s camera.
On the pairing page your phone’s browser generates a P-256 signing key that cannot be exported, stores it in the browser, and registers the public half with your daemon. From then on, every decision the phone sends is signed with that key.
Give the device a name you’ll recognise. pilothouse devices lists paired devices and lets you revoke one.
3. Install it and allow notifications
- iPhone / iPad: open the paired page in Safari → Share → Add to Home Screen, then open it from the home screen and allow notifications. iOS only delivers web push to installed web apps.
- Android: Chrome offers Install app; allow notifications when asked.
Send yourself a test:
pilothouse notify test
4. Try it
pilothouse away
Then ask an agent to do something that needs permission. Your phone gets a notification; open it to see the request with the agent, the repo, the tool, the full command and the rule that matched. Choose:
- Allow — once,
- Allow for session — and similar calls in this session,
- Deny — optionally with a message to the agent.
Run pilothouse auto afterwards to go back to idle detection.
On this machine’s browser
pilothouse open
opens the web app in this machine’s browser, already signed in with its own device key.
What the phone can see
The inbox, sessions with their current state and timeline, and pending requests. The phone app is focused on deciding; it does not show agents’ full transcripts or let you type prompts in v0.1.
Without Tailscale
Notifications still work without Tailscale (ntfy, Slack, Discord, desktop — see Notifications), but answering from the phone needs a route to your machine. An end-to-end encrypted relay for people who don’t use Tailscale is on the roadmap. Plain LAN addresses are not supported, because phones won’t do web push or keep signing keys on non-HTTPS origins.
Troubleshooting
- “HTTPS is not enabled for this tailnet” — enable HTTPS certificates in the Tailscale admin console, then re-run
pilothouse remote tailscale. - No notifications on iPhone — make sure you opened Pilothouse from the home-screen icon (not a Safari tab) and allowed notifications there.
- The page says the device was revoked — pair again with
pilothouse pair.
More in Troubleshooting.
Found a mistake? Open an issue.