claude-bridge
Uses Tailscale as the private, encrypted transport between controller devices (phone, tablet, browser, or another Claude Code instance) and the worker computers: the bridge daemon binds only to the computer's Tailscale IP on port 8765, and devices authenticate with a bearer token over the tailnet so no public URL or cloud relay is needed.
claude-bridge
Use the Claude Code sessions on one computer from any other device: a phone, tablet, laptop or desktop.
Your local sessions: see and continue the Claude Code sessions already on that computer, including ones started in its own terminal, or start new ones.
Any device to control from: iPhone, Android, iPad, Windows, macOS or Linux, through a web app you can add to your home screen. From another computer, Claude Code itself can also send tasks through MCP tools.
Any computer to control: macOS, Linux or Windows.
Private: devices talk directly and encrypted over Tailscale (free). It doesn't use Claude Remote Control, cloud sessions or a public URL.
ANY DEVICE (controller) ANY COMPUTER (worker)
┌────────────────────────────┐ ┌─────────────────────────────────┐
│ 📱 Phone / tablet / browser │──┐ │ bridge_daemon.py (auto-starts) │
│ web app (multi-machine) │ │ encrypted, via │ ├ serves the web app │
└────────────────────────────┘ ├──── over Tailscale ─▶│ ├ lists local Claude sessions │
┌────────────────────────────┐ │ + bearer token │ └ runs claude -p [--resume id] │
│ 💻 Claude Code (any OS) │──┘ │ inside allowed folders │
│ MCP tools: remote_* │ └─────────────────────────────────┘
└────────────────────────────┘How it works and why I built it: Control Claude Code on another Mac, without the cloud
Install the bridge on every computer you want to reach. Every device you control from needs only Tailscale and a browser, or Claude Code.
1. Tailscale (every device)
Install Tailscale and log in with the same account everywhere:
Device | Get it | Note |
macOS | Approve System Settings → General → Login Items & Extensions → Network Extension, or the app stays stuck loading. Restart if it's still "Connecting" | |
Windows | ||
Linux |
| |
iPhone / iPad | Keep its VPN switch on | |
Android | Keep its VPN switch on |
Check: tailscale status lists your devices.
Related MCP server: whitelabel-fleet-mcp
2. Install the bridge (each computer you want to control)
Requirements: Claude Code installed and logged in (claude, then /login), plus Python 3.9 or later and git.
macOS / Linux
git clone https://github.com/Jenish109/claude-bridge.git ~/claude-bridge
cd ~/claude-bridge
python3 install.py --root ~ # or e.g. --root ~/Projects --root ~/Desktop/WorkWindows (PowerShell)
git clone https://github.com/Jenish109/claude-bridge.git $HOME\claude-bridge
cd $HOME\claude-bridge
py install.py --root $HOMEThe installer:
sets the bridge to start at login (macOS launchd, Linux systemd --user, Windows Task Scheduler);
binds it to this computer's Tailscale IP only, on port 8765;
creates a secret token in
~/.claude-bridge/token;prints the web address, the token and the Claude Code command to connect.
--root sets which folders Claude may work in, and which folders' sessions you can see. Repeat it for more folders.
Extra step on macOS: Full Disk Access
Without it, tasks that touch Desktop, Documents or Downloads hang on a hidden privacy prompt. The installer prints the exact paths. Add each one in System Settings → Privacy & Security → Full Disk Access (click +, press ⌘⇧G, paste the path, click Open, then turn its switch on). Then restart the bridge with the command the installer printed.
Keep it reachable
The computer must be on, awake and logged in, with Tailscale connected. Turn off automatic sleep:
macOS: Battery/Energy → Prevent automatic sleeping
Windows: Power & sleep → Never
On Linux, to keep the bridge running while you're logged out, run sudo loginctl enable-linger $USER.
3a. Control from a phone, tablet or any browser
Open the worker's address in any browser, for example
http://100.x.y.z:8765.Paste the token and tap Connect.
Add it to your home screen so it opens like an app:
iPhone/iPad: Share → Add to Home Screen
Android: ⋮ → Add to Home screen / Install app
Desktop Chrome/Edge: the install icon in the address bar
In the app | |
Machine name ▾ (top) | Switch between computers, or Add another (its address and token). One app can control all your computers |
☰ Sessions | All recent Claude Code sessions on that computer, including ones started in its terminal. Tap one to see its history and continue it |
+ | Start a new session |
📁 Folder | Browse the allowed folders and pick where a new session runs |
🔒 Mode | Bridge default / Plan only / Accept edits / Bypass (if allowed) |
■ (while running) | Stop the task |
The app is plain http, but traffic is still encrypted, because Tailscale encrypts everything between your devices and the address can't be reached from the internet. Saved machines and tokens stay in that browser only.
3b. Control from Claude Code on another computer
On the controlling computer, install uv and get the code:
git clone https://github.com/Jenish109/claude-bridge.git ~/claude-bridgeThen run the command the worker's installer printed, with the path pointing to your bridge_mcp.py:
claude mcp add claude-bridge-<worker-name> --scope user \
-e BRIDGE_URL=http://<worker-tailscale-ip>:8765 -e BRIDGE_TOKEN=<token> \
-- uv run -q --script ~/claude-bridge/bridge_mcp.pyRepeat with a different name for each worker. Restart Claude Code, then ask in plain English:
Check the remote machine's health.
List the Claude sessions on the remote machine and continue the latest one: run the tests.
On the remote machine, go to ~/Projects/api and fix the failing tests.Tool | What it does |
| Checks the computer is reachable; shows its OS, allowed folders and mode |
| Lists Claude Code sessions there, including ones started in its terminal |
| Runs a task: new, or continuing a |
| Follow one task / list recent tasks |
| Stops a task |
How sessions work
Each task runs
claude -pon the worker, which uses the worker's own Claude Code login, settings, MCP servers and CLAUDE.md files.Continuing a session uses
claude --resume <id>, so the full conversation context is kept. You can switch devices mid-conversation: start at your desk, continue from your phone, then reopen it at the desk withclaude --resume <id>.If the same session is also open in a terminal right now, that terminal won't show messages sent from your phone until you reopen it. Avoid typing in both at once.
Permissions
The remote Claude runs headless, so it can't stop to ask you for approval. The installer flags decide what it may do:
Flag | Effect |
(default) | Can read and edit files; Bash commands that aren't pre-approved are denied |
| Pre-approves specific commands |
| Lets the app/controller pick Bypass (everything allowed). Use only with folders you trust |
| The only folders tasks may run in and sessions are listed from (repeatable) |
To change them, rerun install.py with the new flags. The token stays the same.
Security
The bridge listens only on the Tailscale IP, so it can't be reached from the internet or from local Wi-Fi.
Every API call needs the bearer token. Anyone with the token and access to your Tailscale network can run Claude on that computer, so keep it secret.
Change the token: delete
~/.claude-bridge/token, reruninstall.py, then update the app (Machines → Remove → Add) and anyclaude mcp addentries.Not using Tailscale?
--host <ip>binds to another address, such as your LAN IP. Traffic is then unencrypted on that network, so use it only on networks you trust.
Troubleshooting
Problem | Fix |
Tailscale (macOS) shows grey boxes and no Log in | Approve the Network Extension (step 1), then restart the Mac |
Installer: "Tailscale has no IPv4 address" | Open Tailscale, log in and make sure it says Connected. Or use |
App/tools: "Can't reach …" | Both devices online in Tailscale? Worker awake? Check the worker's log |
"Token rejected" (401) | Wrong token. Copy it again from the worker's |
"outside the allowed roots" | Add that folder with another |
macOS: task hangs on Desktop/Documents/Downloads | Grant Full Disk Access (step 2), then restart the bridge |
macOS: Desktop access breaks after a Claude Code update | The |
A command was denied | Pre-approve it with |
Session missing from ☰ | Its folder must be inside a |
No | Restart Claude Code; check |
Manage
macOS | Linux | Windows | |
Logs |
| same |
|
Restart |
|
|
|
Update |
| same | same |
Remove |
| same |
|
Per-task transcripts from the bridge are in ~/.claude-bridge/tasks/. Claude Code's own session files stay where they always are (~/.claude/projects/).
Files
File | Runs on | Purpose |
| Worker | HTTP API (standard library only): runs tasks, lists sessions, serves the web app |
| Worker | Cross-platform installer (launchd / systemd / Task Scheduler) |
| Worker (served) | Phone/browser app: multi-machine, sessions, live progress |
| Controller | MCP server with the |
| — | Old macOS entry point; now just runs |
License
Built by Jenish Vaghasiya. Need a custom MCP server or Claude Code workflow for your own team's tools? I build those.
This server cannot be deployed
Related MCP Connectors
Work on your own computers from Claude or ChatGPT: run commands, edit and search files.
Operate Linux, macOS and Windows from your LLM. Every action runs through an auditable allowlist.
Use your Mac, Windows or Linux computer from ChatGPT, Claude or Codex: files, commands, documents.
Remote shell and detached long-running jobs on your own machines — no SSH, open ports or VPN.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceMCP server that lets an AI agent delegate tasks to Claude Code on a remote Mac via SSH over Tailscale. Persistent sessions, 200k context, full Mac filesystem access.MIT
- FlicenseNot gradedqualityCmaintenanceExposes file, shell, git, and memory tools from a host Mac to remote Claude clients (e.g., iPhone) via HTTPS and Tailscale, enabling full coding capabilities on the go.-
- AlicenseBqualityBmaintenanceEnables Claude Code and OpenCode agents to delegate tasks to peer machines over a self-hosted A2A mesh, using mTLS identity and executing via local CLIs or scripts.8Apache 2.0
- AlicenseNot gradedqualityBmaintenanceEnables an interactive Claude Code session to delegate blocking tasks to headless pi and OpenCode workers, and lets all three peers exchange messages and list paired sessions over a shared local file bus. It exposes 18 tools covering sync/async asks, steering, abort, session lifecycle, state inspection, and cross-agent messaging.41 npm1MIT