원클릭으로
ito-tmux
Remote control tmux sessions for interactive CLIs (python, gdb, etc.) by sending keystrokes and scraping pane output.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Remote control tmux sessions for interactive CLIs (python, gdb, etc.) by sending keystrokes and scraping pane output.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Build reproducible Showboat demo documents that prove repo behavior with executable markdown. Use when asked to create demos, proof-of-work walkthroughs, or verification artifacts with showboat, especially for tests, CLIs, local services, Aspire AppHosts, and HTTP APIs.
Build reproducible Showboat demo documents that prove repo behavior with executable markdown. Use when asked to create demos, proof-of-work walkthroughs, or verification artifacts with showboat, especially for tests, CLIs, local services, Aspire AppHosts, and HTTP APIs.
Balanced skill for typical development tasks, code review, and implementation work
Coordinator-only agent for orchestrating multi-change runs
Fast, cost-effective skill for simple tasks, quick queries, and small code changes
Read-only researcher for Ito orchestration context gathering
| name | ito-tmux |
| description | Remote control tmux sessions for interactive CLIs (python, gdb, etc.) by sending keystrokes and scraping pane output. |
| metadata | {"upstream":"https://github.com/mitsuhiko/agent-stuff/tree/main/skills/tmux","license":"Vibecoded"} |
Use tmux as a programmable terminal multiplexer for interactive work. Works on Linux and macOS with stock tmux; avoid custom config by using a private socket.
Before suggesting any tmux-based workflow step in an Ito project, check the resolved Ito config for tools.tmux.enabled.
tools.tmux.enabled = false, omit tmux suggestions entirely and do not recommend tmux-based alternatives.tools.tmux.enabled = true (or the key is absent), follow the guidance in this skill as normal.SOCKET_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 -S "$SOCKET" new -d -s "$SESSION" -n main
tmux -S "$SOCKET" send-keys -t "$SESSION":0.0 -- 'python3 -q' Enter
tmux -S "$SOCKET" capture-pane -p -J -t "$SESSION":0.0 -S -200 # watch output
tmux -S "$SOCKET" kill-session -t "$SESSION" # clean up
After starting a session ALWAYS tell the user how to monitor the session by giving them a command to copy paste:
To monitor this session yourself:
tmux -S "$SOCKET" attach -t "$SESSION"
Or to capture the output once:
tmux -S "$SOCKET" capture-pane -p -J -t "$SESSION":0.0 -S -200
This must ALWAYS be printed right after a session was started and once again at the end of the tool loop. But the earlier you send it, the happier the user will be.
CLAUDE_TMUX_SOCKET_DIR (defaults to ${TMPDIR:-/tmp}/claude-tmux-sockets) and use tmux -S "$SOCKET" so we can enumerate/clean them. Create the dir first: mkdir -p "$CLAUDE_TMUX_SOCKET_DIR".SOCKET="$CLAUDE_TMUX_SOCKET_DIR/claude.sock".{session}:{window}.{pane}, defaults to :0.0 if omitted. Keep names short (e.g., claude-py, claude-gdb).-S "$SOCKET" consistently to stay on the private socket path. If you need user config, drop -f /dev/null; otherwise -f /dev/null gives a clean config.tmux -S "$SOCKET" list-sessions, tmux -S "$SOCKET" list-panes -a..opencode/skills/ito-tmux/scripts/find-sessions.sh -S "$SOCKET"; add -q partial-name to filter..opencode/skills/ito-tmux/scripts/find-sessions.sh --all (uses CLAUDE_TMUX_SOCKET_DIR or ${TMPDIR:-/tmp}/claude-tmux-sockets).tmux -S "$SOCKET" send-keys -t target -l -- "$cmd"tmux ... send-keys -t target -- $'python3 -m http.server 8000'.tmux ... send-keys -t target C-c, C-d, C-z, Escape, etc.tmux -S "$SOCKET" capture-pane -p -J -t target -S -200.tmux wait-for (which does not watch pane output).tmux -S "$SOCKET" attach -t "$SESSION"; detach with Ctrl+b d.Some special rules for processes:
PYTHON_BASIC_REPL=1 environment variable. This is very important as the non-basic console interferes with your send-keys..opencode/skills/ito-tmux/scripts/wait-for-text.sh -S "$SOCKET" -t "$SESSION":0.0 -p '^>>>' -T 15 -l 4000
"Type quit to exit", "Program exited", etc.) before proceeding.tmux ... send-keys -- 'python3 -q' Enter; wait for ^>>>; send code with -l; interrupt with C-c. Always with PYTHON_BASIC_REPL.tmux ... send-keys -- 'gdb --quiet ./a.out' Enter; disable paging tmux ... send-keys -- 'set pagination off' Enter; break with C-c; issue bt, info locals, etc.; exit via quit then confirm y.tmux -S "$SOCKET" kill-session -t "$SESSION".tmux -S "$SOCKET" list-sessions -F '#{session_name}' | xargs -r -n1 tmux -S "$SOCKET" kill-session -t.tmux -S "$SOCKET" kill-server..opencode/skills/ito-tmux/scripts/wait-for-text.sh polls a pane for a regex (or fixed string) with a timeout. Works on Linux/macOS with bash + tmux + grep, and accepts -S "$SOCKET" or -L name when you are not using the default tmux server.
.opencode/skills/ito-tmux/scripts/wait-for-text.sh [-L socket-name|-S socket-path] -t session:0.0 -p 'pattern' [-F] [-T 20] [-i 0.5] [-l 2000]
-L/--socket tmux socket name; -S/--socket-path tmux socket path-t/--target pane target (required)-p/--pattern regex to match (required); add -F for fixed string-T timeout seconds (integer, default 15)-i poll interval seconds (default 0.5)-l history lines to search from the pane (integer, default 1000)