Built for your Tailscale tailnet

Every device's terminal.
One command away.

Run Tailminal on the devices you want to control. They discover each other through Tailscale, connect directly, and need no token exchange in the default mode. Use the CLI, the built-in web UI, or the HTTP/WS API.

Get started Agent setup → /llms.txt
$ tailminal exec laptop -- adb devices
List of devices attached
emulator-5554   device

$ tailminal attach laptop
laptop ~ ▌  

Everything a terminal across machines needs

⌨️ One-shot exec

Run a command on any node and stream stdout/stderr live. Exit codes propagate — perfect for scripts and CI-style checks.

🔁 Persistent PTY sessions

Interactive shells that survive disconnects. Detach on your laptop, reattach from your PC with full scrollback replay.

🤖 Agent-native

tailminal exec and tailminal attach are plain stdin/stdout subprocesses. Any agent framework can spawn them — zero SDK integration.

🖥️ Web UI on every node

Open any node in a browser to see discovered devices and start a live terminal. The quick-command box runs on the node serving the page.

🔒 No token exchange by default

Protected API routes trust loopback and Tailscale connections; LAN and public-interface requests are rejected. Token authentication remains available as an explicit opt-in.

✎ Names that stay local

Rename devices in the web UI without changing Tailscale or shared config. Aliases stay in that browser for that site address.

How it works

PC tailminal client
HTTP + WebSocket
over the tailnet · port 7601
Laptop tailminal server + PTY

Every node runs the same server. Tailminal reads tailscale status, prefers MagicDNS names, and checks which online devices are actually running Tailminal. There is no central Tailminal service.

Up and running in three steps

  1. Install

    npm install -g tailminal
  2. Start Tailminal on each device you want to control

    tailminal serve
    # listens on port 7601 and creates the default config
  3. Connect from another Tailnet device

    tailminal hosts
    tailminal exec laptop -- uname -a
    tailminal attach laptop
    # or open http://laptop:7601

No token or peer list is required with the defaults. The host list separates devices that are online in Tailscale from devices where Tailminal is reachable. Manual peers remain available for fixed addresses and stable display labels.

Tailminal ready Tailscale online, Tailminal unavailable Offline or unreachable

Current release: 0.2.2 · View on npm

Building an agent?

Don't scrape this page — fetch /llms.txt. It contains the full setup guide, API surface, and copy-paste integration patterns written for machines.

Read /llms.txt