Terminal & box picker
Switch boxes in tmux or Zellij and keep remote shells running.
tailmux terminal # saved default, otherwise tmux
tailmux terminal personal/devbox # open a particular box
tailmux terminal --backend zellij # override for this launch only
tailmux terminal --default zellij # save default; does not launch
tailmux terminal --default tmux # switch the saved default backInstall fzf and your chosen multiplexer locally. This integration is tested with tmux 3.7c, Zellij 0.45.1, and fzf 0.74.3. Zellij's integration requires its modern list-panes --json --tab and background-session CLI controls. Both backends use tmux on the remote host for persistent shells; remote Zellij is not required. Host SSH settings and authentication remain shared with tailmux ssh.
Alt+B opens a fuzzy box picker in either backend. Zellij also supports Ctrl+B in normal mode or F2 when unlocked; these avoid terminals that do not send Option/Alt as Meta. With tmux, Ctrl+B, B also opens it. Search visible machines across your profiles and press Enter to connect or switch to an existing host window/tab. Offline machines are labeled; reachability and SSH permissions still determine whether a connection can succeed. The initial home pane also offers Enter to open the picker.
New split panes inside a host window/tab connect to that same host, each with its own persistent remote shell. A new unnamed Zellij tab shows the box chooser rather than a local shell. You can rename host and local windows/tabs freely: Tailmux stores the canonical route separately and the picker still switches to the existing renamed window/tab. Invalid or unrecognized tabs return to the chooser.
Each configuration directory gets its own local tmux socket/Zellij session. Tailmux writes its generated Zellij configuration and private tab-routing metadata under TAILMUX_HOME/terminal/; it does not modify your normal multiplexer config. tmux keeps the same metadata directly on each window. Reopening reuses the same local session. The picker does not stop or migrate processes when you switch boxes.
After upgrading, an older window/tab whose name is still its canonical profile/host value is migrated automatically when Tailmux next uses it. If it was already renamed before this version, Tailmux cannot infer the original host from that label. Open the host from the picker once to establish a routed tab; renames after that are preserved safely.
Remote shells run on a dedicated tmux server named tailmux, with its status bar hidden and Ctrl+A as its prefix. Your existing remote tmux sessions/configuration and Herdr sessions remain independent. Disconnecting shows a prompt: Enter reconnects to the same remote shell, while q closes the local pane. Closing local panes leaves their remote sessions available; they are not automatically deleted. This first version does not provide a remote-session cleanup browser.
Detach the local view with Ctrl+B, D in tmux or Ctrl+O, D in Zellij. Reattach with tailmux terminal. If an application needs the remote tmux prefix literally, press Ctrl+A twice. Other multiplexer shortcuts remain available, except for the Ctrl+B override described below. Backend preference is stored as terminal_backend in config.json; --backend always overrides it for one launch.
Shortcut reference
| Action | tmux | Zellij |
|---|---|---|
| Pick a box | Alt+B or Ctrl+B, then B | Alt+B or F2 when unlocked; Ctrl+B in normal mode |
| Detach local view | Ctrl+B, then D | Ctrl+O, then D |
| Send remote tmux prefix | Ctrl+A twice | Ctrl+A twice |
Zellij uses simplified UI so its controls do not require special arrow fonts. Pane titles show the target host instead of the Tailmux launch command. Ctrl+B in normal mode overrides Zellij's usual tmux-mode shortcut. When Zellij is locked, press Ctrl+G to return to normal mode before opening the picker. Option/Alt handling depends on your terminal; Ctrl+B and F2 avoid that dependency.
A second attached client with a smaller terminal can constrain a tab's dimensions. Detach unused clients rather than stopping the session. See troubleshooting.
Zellij reuses a running local session when you detach. Closing a tab with Ctrl+T, then X removes it. After closing the last tab, the next tailmux terminal starts a fresh session. Tailmux disables disk-layout resurrection so previously closed tabs cannot return from an old snapshot. Remote tmux shells remain on their hosts; this does not stop remote processes.
Open this computer in the terminal
tailmux terminal local
tailmux terminal --backend tmux local
tailmux terminal --backend zellij localThe box picker lists local (this machine) first, followed by remote targets with aligned online/offline and saved labels. Local access works without a Tailscale profile or SSH connection. It opens your $SHELL as a login shell (falling back to /bin/sh); new panes in that tab/window also run locally, even after you rename it. Exiting the shell closes that pane.
local is reserved by terminal for this computer. Use the full profile/local target if a remote machine is also named local. Existing shortcuts open the same picker from local and remote tabs.