tmux

star 249

Control tmux-compatible sessions/windows/panes for interactive CLIs: list, capture output, send keys, paste text, monitor prompts.

bastani-inc By bastani-inc schedule Updated 5/26/2026

name: tmux description: "Control tmux-compatible sessions/windows/panes for interactive CLIs: list, capture output, send keys, paste text, monitor prompts." metadata: { "atomic": { "os": ["darwin", "linux", "windows"], "requires": { "bins": ["tmux", "psmux"] }, "install": [ { "id": "brew", "kind": "brew", "formula": "tmux", "bins": ["tmux"], "label": "Install tmux (brew)", }, { "id": "winget-psmux", "kind": "winget", "package": "psmux", "bins": ["tmux"], "label": "Install psmux (WinGet)", }, { "id": "cargo-psmux", "kind": "cargo", "crate": "psmux", "bins": ["tmux"], "label": "Install psmux (Cargo)", }, { "id": "scoop-psmux", "kind": "scoop", "bucket": "https://github.com/psmux/scoop-psmux", "package": "psmux", "bins": ["tmux"], "label": "Install psmux (Scoop)", }, { "id": "choco-psmux", "kind": "choco", "package": "psmux", "bins": ["tmux"], "label": "Install psmux (Chocolatey)", }, ], },

}

tmux

Use for existing interactive tmux sessions. For one-shot commands, use normal shell. For new non-interactive background jobs, use background execution.

On Windows, use psmux, the native Windows tmux-compatible multiplexer. psmux automatically provides the tmux alias, so keep using the tmux commands below; no command changes are needed.

When this skill is invoked, first confirm tmux is available before running tmux commands (command -v tmux or tmux -V; on Windows PowerShell, Get-Command tmux). If tmux is not found, tell the user to install tmux on macOS/Linux or psmux on Windows, depending on their OS, using one of the options below.

Installation

Choose the install path that matches the host OS and package manager.

macOS/Linux tmux

Package managers are preferred when available:

brew install tmux

To build official tmux from a release tarball, install libevent 2.x, ncurses, a C compiler, make, pkg-config, and yacc or bison, then run:

./configure && make
sudo make install

To build the latest tmux from version control, also install autoconf and automake:

git clone https://github.com/tmux/tmux.git
cd tmux
sh autogen.sh
./configure && make
sudo make install

Windows psmux

psmux installs psmux, pmux, and tmux; this skill should continue to use tmux in examples and scripts.

winget install psmux
cargo install psmux
scoop bucket add psmux https://github.com/psmux/scoop-psmux
scoop install psmux
choco install psmux

Alternatively, download the latest .zip from GitHub Releases and add it to PATH, or build from source with Cargo:

git clone https://github.com/psmux/psmux.git
cd psmux
cargo build --release

Basics

tmux ls
tmux list-windows -t shared
tmux list-panes -t shared:0
tmux capture-pane -t shared:0.0 -p
tmux capture-pane -t shared:0.0 -p -S -

Target format: session:window.pane, e.g. shared:0.0.

Send input

Literal text, then Enter:

tmux send-keys -t shared:0.0 -l -- "Please continue"
tmux send-keys -t shared:0.0 Enter

Special keys:

tmux send-keys -t shared:0.0 C-c
tmux send-keys -t shared:0.0 C-d
tmux send-keys -t shared:0.0 Escape

Use -l -- for arbitrary text. Split text and Enter to avoid paste/newline surprises.

Sessions

tmux new-session -d -s worker
tmux rename-session -t old new
tmux kill-session -t worker

Prompt checks

tmux capture-pane -t worker-3 -p | tail -20
tmux capture-pane -t worker-3 -p | rg "proceed|permission|Yes|No|❯"

Approve/select only when the prompt is understood:

tmux send-keys -t worker-3 -l -- "y"
tmux send-keys -t worker-3 Enter

QA/testing and analysis

Prefer read-only inspection before sending input. These commands are especially useful for diagnosing interactive tests, stuck agents, TUI apps, and long-running CLI workflows.

Discover every pane with useful state:

tmux list-panes -a -F '#{session_name}:#{window_index}.#{pane_index} #{pane_current_command} #{pane_current_path} active=#{pane_active} dead=#{pane_dead}'

Capture output for assertions or log review:

tmux capture-pane -t shared:0.0 -p -S -          # full scrollback
tmux capture-pane -t shared:0.0 -p -S - -J       # join wrapped lines
tmux capture-pane -t shared:0.0 -p -S -1000      # recent output only
tmux capture-pane -t shared:0.0 -p -e -S -1000   # include escape/color codes for TUI debugging

Inspect what a pane is running:

tmux display-message -p -t shared:0.0 '#{pane_current_command} #{pane_current_path} pid=#{pane_pid}'
tmux show-messages

Stream pane output to a file for later analysis without interrupting the process:

tmux pipe-pane -t shared:0.0 -o 'cat >> /tmp/tmux-pane-shared-0-0.log'

Coordinate tests or scripts with tmux signals:

tmux wait-for qa-ready      # wait
tmux wait-for -S qa-ready   # signal

Keep failed commands visible and label panes for easier reports:

tmux set-option -t shared remain-on-exit on
tmux select-pane -t shared:0.0 -T "api-tests"

If a tmux-compatible implementation does not support a specific format variable or option, fall back to the simpler list-panes, capture-pane, and send-keys forms above.

Helpers

  • scripts/find-sessions.sh: discover sessions.
  • scripts/wait-for-text.sh: wait until pane output contains text.

Notes

  • capture-pane -p prints to stdout for scripts.
  • -S - captures full scrollback.
  • tmux sessions persist across SSH disconnects.
Install via CLI
npx skills add https://github.com/bastani-inc/atomic --skill tmux
Repository Details
star Stars 249
call_split Forks 40
navigation Branch main
article Path SKILL.md
More from Creator