Your coding agents,
in your pocket.
AI Tether is a remote control for Claude Code sessions running on your Mac. Watch live transcripts, approve tool permissions, send follow-up prompts and stop runaway sessions — from your phone, anywhere in the world.
Not affiliated with Anthropic — an independent companion for the Claude Code CLI.
Bash · npm run migrate --force
Done: deployed to staging ✓
Three pieces, all yours.
No accounts, no vendor cloud. A tiny daemon on your Mac, a relay container on your own server, and an app on your phone.
Daemon on your Mac
tether hooks into Claude Code's lifecycle events and tails its
transcripts — every session is tracked live, whether you started it in a terminal or from the phone.
Relay on your server
A single Docker container that routes encrypted WebSocket frames between Mac and phone. Per-device tokens, one-time QR pairing, automatic TLS. It never needs to understand your code.
App on your phone
A Flutter app for iOS and Android. Session dashboard sorted by what needs you, live transcripts, permission prompts as bottom sheets, and a real terminal view for tmux sessions.
Everything a session needs from you,
without walking to your desk.
Live session dashboard
Every Claude Code session on your Mac, with status at a glance: working, needs permission, waiting for you, ended.
Approve permissions remotely
Tool requests appear as a bottom sheet with the full command. Allow or deny with one tap; unanswered requests deny safely after a timeout.
Full transcripts, streamed
Messages, thinking, tool calls and results stream to the phone in about a second — with gapless backfill after reconnects.
Drive terminal sessions
Sessions running inside tmux are fully controllable: type prompts into the real pane, answer dialogs with key buttons, watch the live screen.
Launch & resume from anywhere
Start a new session in any project folder from the phone, or resume an ended one and keep its full context.
Self-hosted & private
Your transcripts travel through your own server only. Hashed per-device tokens, revocable devices, TLS everywhere.
Set it up in 10 minutes.
You need: a Mac running Claude Code and Node 20+, any small VPS with Docker and a DNS name, and a phone. (tmux is optional — it unlocks remote control of sessions you start in a terminal.)
-
1
Deploy the relay on your server
One compose file brings up the relay plus Caddy with automatic HTTPS:
# on the VPS cd deploy cp .env.example .env # set RELAY_DOMAIN + RELAY_ADMIN_SECRET docker compose up -d curl https://relay.yourdomain.com/healthz -
2
Connect your Mac
Register the daemon with your relay and let it run at login. It installs Claude Code hooks automatically (and
tether hooks uninstallremoves them cleanly).# on the Mac tether setup --relay wss://relay.yourdomain.com --admin-secret <secret> tether service install # launchd: starts at login tether doctor # verify everything is green -
3
Pair your phone
Pairing codes are one-time and expire in five minutes. Scan the QR with the app — that's it.
tether pair # prints a QR code in the terminalNow start a Claude Code session in any terminal and watch it appear on your phone.
Questions
Is this an Anthropic product? ↓
No. AI Tether is an independent open-source project with no affiliation to Anthropic. It observes and drives the Claude Code CLI through its public extension points — lifecycle hooks, transcripts and the Agent SDK. “Claude” and “Claude Code” are trademarks of Anthropic, PBC.
Where does my data go? ↓
Mac → your relay → your phone, over TLS. The relay is a container on your own server; nothing is sent to any third party. Devices authenticate with individually revocable tokens that are stored hashed.
Do I need tmux? ↓
Only for one thing: injecting input into sessions you started in a terminal yourself. Those are watch-only otherwise. Sessions launched or resumed from the app are fully controllable either way, and all sessions are always monitored.
Does it push notifications when the app is closed? ↓
Not yet — v1 streams live updates while the app is open. Push notifications for "needs permission" and "finished" are on the roadmap.
What if I deny a permission too late? ↓
Unanswered permission requests are denied automatically after a configurable timeout (5 minutes by default) — a session never executes a tool just because you were offline.
Stop babysitting your terminal.
Kick off a long refactor, go for a walk, and approve the one command that matters from a park bench.
free · open source · self-hosted