>_ AI Tether Get started
Open source · Self-hosted · No third-party cloud

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.

Sessions online
api-refactor needs permission

Bash · npm run migrate --force

Deny Allow
fix-flaky-tests working

 

landing-page waiting for you

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.

1

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.

2

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.

3

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. 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. 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 uninstall removes 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. 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 terminal

    Now 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