Open source · MIT License

Scan your SSH hosts. Find every tmux session.
Warp in with one keystroke.

muxwarp ──────────────────────── 2 hosts · 5 sessions api-server ◇ IDLE atlas web-dev ◇ IDLE atlas deploy ◆ LIVE ▪▪ atlas build-main ◇ IDLE ▪▪▪ forge new-project ◌ NEW forge enter warp │ / filter │ a add │ e edit │ d delete │ q quit
$ go install github.com/clintecker/muxwarp/cmd/muxwarp@latest
Features

Why muxwarp

No config duplication. No session creation. Just fast remote tmux attachment.

Parallel scanning

All hosts scanned concurrently. Sessions stream into the TUI as each host responds — no waiting for the slowest one.

🔎

Fuzzy filter

Press / and type. Fuzzy matching across host and session names with character-level highlighting.

🔒

Secure by design

No shell interpolation. Session names validated against strict allowlist. All args passed directly to execve.

🔌

Uses your ssh

Calls your system ssh binary. All your SSH config, agent forwarding, ProxyCommand, FIDO keys — it all works.

Reconnection loop

After ssh exits, you're back in the TUI with a fresh scan. Detach from tmux and pick another session instantly.

Direct warp

Run muxwarp dev to fuzzy-match and jump straight in. One match = instant warp. Multiple = filtered TUI.

Desired sessions

Declare sessions in your config. If they don't exist yet, they appear as ghost entries (◌ NEW). Warp in to create them on-the-fly.

In-TUI config editor

Press a to add hosts, e to edit, d to delete. SSH autocomplete, live YAML preview. No hand-editing YAML.

First-run wizard

No config file? muxwarp walks you through adding your first host and optional desired session interactively.

How it works

Four steps to warp

1

Configure

Run the first-run wizard or list SSH targets in ~/.muxwarp.config.yaml

2

Scan

muxwarp runs tmux list-sessions on every host in parallel

3

Pick

Navigate the list or fuzzy-filter to find your session

4

Warp

Clean TTY handoff via ssh -t — you're in

Dead simple config

One YAML file. Same SSH targets you'd type on the command line.

  • No env vars, no XDG, no merging
  • SSH config aliases just work
  • ProxyCommand, agent forwarding, FIDO keys
  • Configurable timeout and TERM
# ~/.muxwarp.config.yaml

defaults:
  timeout: 3s
  term: xterm-256color

hosts:
  - alice@atlas
  - target: alice@forge
    sessions:
      - name: myproject
        dir: ~/code/myproject
  - workstation    # aliases work
Controls

Keybindings

↑/k Move up
↓/j Move down
Enter Warp in
/ Fuzzy filter
Esc Clear filter
a Add host
e Edit host
d Delete host
r Rescan
q Quit
Ctrl+C Force quit

Ready to warp?

One binary. Zero dependencies beyond ssh and tmux.

Get started