Share a terminal session over SSH. Run any CLI tool and let others join via SSH — multiplayer, real-time.
brew install ragamo/tap/romotocargo install --path .romoto <command> [options]# Share a Claude Code session
romoto claude
# Share opencode on a custom port
romoto opencode -p 3000
# Share any interactive CLI
romoto vimOn startup, romoto prints a connection string:
romoto session started
Command: claude
Connect with: ssh abc12345@localhost -p 2222
Working directory: /home/user/project
From another machine (or terminal):
ssh abc12345@localhost -p 2222The session ID (abc12345) acts as both the username and access token. Multiple users can connect simultaneously and share the same session.
| Flag | Description |
|---|---|
-p, --port <n> |
SSH port (default: 2222) |
--relay <host> |
Connect to a relay server |
--pass <token> |
Password for relay authentication |
-v, --version |
Show version |
-h, --help |
Show help |
- Multiplayer — multiple SSH clients see and interact with the same session
- Auto-restart — if the command exits, it restarts automatically
- Buffer replay — new clients see the current terminal state on connect
- Zero config — no SSH keys to manage, no accounts to create
- Relay — share sessions remotely without exposing your IP
romoto relay runs on a VPS and routes guests to hosts. Hosts connect outbound to the relay, so no port forwarding or public IP is needed on the host side.
# On your VPS (e.g. romoto.yourdomain.com)
romoto relay --pass mysecret
# Or with a specific port
romoto relay -p 2222 --pass mysecretUse --pass to require a password for host registration. Without it, any host can register — the relay will warn you on startup.
romoto claude --relay romoto.yourdomain.com:2222 --pass mysecretromoto connects to the relay, registers its session, and prints:
romoto session started
Command: claude
Relay: romoto.yourdomain.com:2222
Connect with: ssh abc12345@romoto.yourdomain.com -p 2222
ssh abc12345@romoto.yourdomain.com -p 2222The guest doesn't need --pass — only the session ID. The password is only between host and relay to prevent unauthorized host registration.
romoto listens on localhost by default. To share with others over the internet without a relay:
If both machines are on the same Tailnet, just connect using the Tailscale IP or hostname:
# Host
romoto claude
# Guest
ssh abc12345@my-machine -p 2222No extra config needed — Tailscale handles the networking.
# Host
romoto claude
ngrok tcp 2222
# Guest (use the ngrok-provided host:port)
ssh abc12345@0.tcp.ngrok.io -p 12345- Spawns the command in a PTY
- Starts an embedded SSH server (no system sshd needed)
- Generates a random session ID for authentication
- Broadcasts PTY output to all connected clients
- Forwards input from any client to the PTY
With --relay, romoto also connects as an SSH client to the relay server. The relay opens forwarded channels for each guest and pipes data bidirectionally.
MIT