원클릭으로
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 직업 분류 기준
Implement Ito Lite markdown changes by reading proposal/spec/design/tasks artifacts and updating manual task statuses. Use when applying or executing a prompt-only Ito Lite change without the ito CLI.
Archive completed Ito Lite changes by manually merging spec deltas into current specs and moving the change to archive. Use after implementation and verification when no ito CLI is available.
Create prompt-driven Ito Lite change proposal packages in markdown. Use for drafting proposal.md, spec deltas, optional design.md, and tasks.md without the ito CLI or validation executable.
Review Ito Lite markdown proposal packages before implementation. Use to check proposal.md, spec deltas, design.md, and tasks.md for consistency, risk, testability, and manual validation without the ito CLI.
Initialize a markdown-only Ito Lite workspace with no executables. Use when setting up prompt-driven change proposals, creating .ito-lite/project.md, or preparing a repo for Ito-style specs, changes, and tasks without the ito CLI.
Coordinate the prompt-only Ito Lite workflow for proposals, specs, tasks, reviews, implementation, and archive without the ito executable. Use when the user asks for Ito-style planning, change proposals, lightweight specs, or markdown-only change management.
| 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 shell
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)