Claude Code plugin

Every session, addressable.

session-bridge turns the Claude Code sessions scattered across your machines into one mesh. Sessions discover each other, exchange messages, and spawn new sessions — on the same host or across your tailnet.

How it works

A daemon, a channel, a mesh.

01

Discover

A lightweight daemon on port 8910 watches ~/.claude/sessions/ and knows every Claude Code session running on the host — PID, session ID, working directory.

02

Register

Each session runs a tiny MCP channel server. It picks a free port, registers its name, namespace, and labels with the daemon, and heartbeats so the mesh always reflects reality.

03

Message

Any session can list the mesh, message another session by name, reply to inbound messages, or broadcast to everything matching a label selector.

$ python cli.py ls
NAME          NAMESPACE   PORT    CWD
librarian     taskpilot   52311   ~/projects/kb
builder       taskpilot   52340   ~/projects/app

$ python cli.py message librarian "index the new docs"
delivered → librarian.taskpilot

Cross-host mesh

One namespace across your tailnet.

FQDN addressing

Sessions resolve by name, name.namespace, or the full name.namespace.host. If the host isn't local, your daemon forwards the request to the peer daemon over Tailscale — sessions never know the difference.

Peer discovery

Daemons find each other from tailscale status plus a small peers.json. Hosts without a Tailscale CLI — a phone running Termux, say — pin their IPs and join anyway.

Host capabilities

Each host advertises what it can do — sms-send, gps, lan-access. Consumers query GET /hosts to find the machine that has the radio, the GPU, or the LAN.

Spawn anywhere

POST /spawn starts a fresh Claude session on any host in the mesh — tmux-managed, registered on boot, optionally handed an initial message to work on.

In-session tools

Five MCP tools in every session.

sessions

List the mesh. Filter by namespace or label selector.

message

Send to a session by name, FQDN, or UUID.

reply

Answer an inbound message — routing back to the sender is automatic.

label

Replace the labels on a session.

broadcast

Send to every session matching a selector and namespace.

Install

Two commands to a mesh.

Install the plugin, then let setup register the daemon as a reboot-persistent service.

/softwaresoftware:install session-bridge
/session-bridge:setup

Every session you start after that joins the mesh automatically. To span machines, install on each host and list it in peers.json — the daemons connect over Tailscale.