Loading...
Loading...
Remote control tmux sessions for interactive CLIs (python, gdb, etc.) by sending keystrokes and scraping pane output.
npx skill4agent add samuerio/.dotfiles tmuxSOCKET_DIR=${TMPDIR:-/tmp}/claude-tmux-sockets # well-known dir for all agent sockets
mkdir -p "$SOCKET_DIR"
SOCKET="$SOCKET_DIR/claude.sock" # keep agent sessions separate from your personal tmux
SESSION=claude-python # slug-like names; avoid spaces
TMUX=(tmux -f /dev/null -S "$SOCKET") # -f /dev/null avoids user base-index overrides
"${TMUX[@]}" new -d -s "$SESSION" -n shell
TARGET="$SESSION:0.0"
"${TMUX[@]}" send-keys -t "$TARGET" -- 'PYTHON_BASIC_REPL=1 python3 -q' Enter
"${TMUX[@]}" capture-pane -p -J -t "$TARGET" -S -200 # watch output
"${TMUX[@]}" kill-session -t "$SESSION" # clean upTo monitor this session yourself:
tmux -S "$SOCKET" attach -t "$SESSION"
Or to capture the output once:
tmux -S "$SOCKET" capture-pane -p -J -t "$TARGET" -S -200CLAUDE_TMUX_SOCKET_DIR${TMPDIR:-/tmp}/claude-tmux-socketstmux -S "$SOCKET"mkdir -p "$CLAUDE_TMUX_SOCKET_DIR"SOCKET="$CLAUDE_TMUX_SOCKET_DIR/claude.sock"{session}:{window}.{pane}:0.0claude-pyclaude-gdb-S "$SOCKET"-f /dev/null-f /dev/null-f /dev/null:0.0tmux -S "$SOCKET" list-panes -t "$SESSION" -F '#{session_name}:#{window_index}.#{pane_index}'tmux -S "$SOCKET" list-sessionstmux -S "$SOCKET" list-panes -a./scripts/find-sessions.sh -S "$SOCKET"-q partial-name./scripts/find-sessions.sh -S "$SOCKET" --json./scripts/find-sessions.sh --allCLAUDE_TMUX_SOCKET_DIR${TMPDIR:-/tmp}/claude-tmux-socketstmux -S "$SOCKET" send-keys -t target -l -- "$cmd"tmux ... send-keys -t target -- $'python3 -m http.server 8000'tmux ... send-keys -t target C-cC-dC-zEscapetmux -S "$SOCKET" capture-pane -p -J -t target -S -200tmux wait-fortmux -S "$SOCKET" attach -t "$SESSION"Ctrl+b dPYTHON_BASIC_REPL=1./scripts/wait-for-text.sh -S "$SOCKET" -t "$SESSION":0.0 -p '^>>>' -T 15 -l 4000"Type quit to exit""Program exited"tmux ... send-keys -- 'python3 -q' Enter^>>>-lC-cPYTHON_BASIC_REPLtmux ... send-keys -- 'gdb --quiet ./a.out' Entertmux ... send-keys -- 'set pagination off' EnterC-cbtinfo localsquitytmux -S "$SOCKET" kill-session -t "$SESSION"tmux -S "$SOCKET" list-sessions -F '#{session_name}' | xargs -r -n1 tmux -S "$SOCKET" kill-session -ttmux -S "$SOCKET" kill-server./scripts/wait-for-text.sh./scripts/wait-for-text.sh -S "$SOCKET" -t session:0.0 -p 'pattern' [-F] [-T 20] [-i 0.5] [-l 2000]-t--target-p--pattern-F-S--socket-path-L--socket-T-i-l