Help us improve
Share bugs, ideas, or general feedback.
From tmux
Provides tmux session, window, and pane awareness for capturing output, sending keys to panes, opening processes, organizing layouts, navigating windows/sessions, and checking notifications.
npx claudepluginhub bendrucker/claude --plugin tmuxHow this skill is triggered — by the user, by Claude, or both
Slash command
/tmux:tmuxThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
!`bash ${CLAUDE_SKILL_DIR}/scripts/pane.sh`
Manages tmux sessions, windows, and panes for terminal multiplexing, persistent remote workflows surviving SSH disconnects, multi-pane layouts, and shell scripting automation.
Renders a prepared tmux layout for operator-side observability of session side-channels (STATE.md tail, CI watch, events.jsonl tail). Default 4-pane layout or debug layout. Read-only — coordinator chat stays in original terminal.
Share bugs, ideas, or general feedback.
!bash ${CLAUDE_SKILL_DIR}/scripts/pane.sh
Use $TMUX_PANE to identify the current pane and target adjacent ones.
!bash ${CLAUDE_SKILL_DIR}/scripts/layout.sh
Use left/top coordinates to resolve spatial references (LHS = lowest left, RHS = highest left, top = lowest top, bottom = highest top). When describing layouts, draw ASCII box diagrams showing pane positions and sizes.
Target panes across windows and sessions with <session>:<window>.<pane> (e.g., dotfiles:1.%42). Use tmux list-panes -t <session>:<window> to discover pane IDs in other windows.
Windows marked [bell] or [activity] need attention (a process finished, errored, or produced output). Use capture-pane on the flagged window's panes to investigate.
To check for new notifications after skill load:
tmux list-windows -F '#{window_index} #{window_name} #{window_bell_flag} #{window_activity_flag}'
Use split-window with -t $TMUX_PANE so new panes open relative to Claude's pane. Always pass -d to avoid switching Claude's own pane to the new one.
| User intent | Flags | Notes |
|---|---|---|
| right / beside | -h -d | Horizontal split |
| below / underneath | -v -d | Vertical split |
| right sidebar | -h -d -l 40% | Narrow right pane |
| left sidebar | -h -d -b -l 40% | Narrow left pane (-b = before) |
| bottom panel | -v -d -l 25% | Short pane below |
| top panel | -v -d -b -l 25% | Short pane above |
tmux split-window -h -d -t $TMUX_PANE 'tail -f logs/dev.log'
The command string runs in the new pane's shell. When it exits, the pane closes. Use $SHELL or omit the command to open an interactive shell.
Pass the initial prompt as a CLI argument rather than using send-keys:
tmux split-window -h -d -t $TMUX_PANE 'claude "analyze the test failures"'
Use send-keys only for follow-up messages to an already-running session.
When collaborating on a file, open it in a sidebar pane so the user can see changes in real-time as you edit.
tmux split-window -h -d -l 40% -t $TMUX_PANE '<command> <file>'
!bash ${CLAUDE_SKILL_DIR}/scripts/tools.sh
Prefer a terminal markdown renderer with file watching. Tools in preference order:
| Tool | Command | Notes |
|---|---|---|
| markless | markless --watch file.md | Rendered markdown with live reload |
| glow | glow -w 0 file.md | Rendered, no watch (reopen on change) |
| batwatch | batwatch --watcher poll file.md | Syntax-highlighted with file watching |
| bat | bat --paging always file.md | Syntax-highlighted source, no watch |
| less | less file.md | Plain text fallback |
Open with $EDITOR when set, otherwise fall back to read-only viewers:
| Tool | Command | Notes |
|---|---|---|
$EDITOR | $EDITOR file.ts | User's preferred editor, most auto-reload on external changes |
| batwatch | batwatch --watcher poll file.ts | Syntax-highlighted with file watching |
| bat | bat --paging always file.ts | Syntax-highlighted, read-only |
| less | less file.ts | Plain text fallback |
Use the first available option. If the pane exits immediately, the tool is missing, try the next.
Use capture-pane -p to print to stdout instead of a paste buffer:
tmux capture-pane -t $TARGET -p
tmux capture-pane -t $TARGET -p -S -100
-S -100 includes 100 lines of scrollback above the visible area.
-P -F '#{pane_id}' to capture pane IDs at creation time-d on split-window to avoid switching Claude's pane$TMUX_PANE (set by tmux natively and injected by context hook) to target the current pane