원클릭으로
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 직업 분류 기준
Detect repetitive AI defaults for a domain and generate a reusable avoidance profile. Use when asked to "unslop", "de-slop", "remove AI patterns", "make less generic", generate an anti-slop profile, or analyze AI output patterns for any domain (writing, landing pages, emails, code, etc.).
Audit and reconcile Thomas's todo list against all active data sources — calendar, email, customer deal docs, deal tracker spreadsheet, and any future sources. Use when Thomas asks to "review my todos", "what's outstanding", "todo audit", "anything I'm missing", "check my follow-ups", "what's stale", or as part of a Monday morning / Friday EOD review. Also use when he asks about overdue items, missed follow-ups, or wants a pipeline hygiene check.
Design things that AI agents can operate effectively — CLIs, tools, file formats, codebases, context layers, skills, visual assets, and any interface where agents are the primary or frequent consumer. Use when building a CLI for agents to use, structuring a codebase or repo for AI-assisted development, choosing file formats for agent-readable content, designing MCP tools or skills, creating agent-operable assets (HTML templates, markdown-driven workflows), setting up context infrastructure (AGENTS.md, SKILL.md, progressive disclosure), or making any existing system more agent-friendly. Also use when the user asks about agent DX, agent UX, or how to make something easy for agents to work with.
Extract session cookies from Chrome on macOS by decrypting Chrome's cookie database. Use when you need to authenticate API calls using the user's existing browser session — e.g., refreshing expired session cookies, accessing a service the user is logged into, or bootstrapping API access for a tool that uses cookie auth.
| name | tmux |
| description | Remote control tmux sessions for interactive CLIs (python, gdb, etc.) by sending keystrokes and scraping pane output. |
| 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.
SOCKET_DIR=${PI_TMUX_SOCKET_DIR:-${TMPDIR:-/tmp}/pi-tmux-sockets} # well-known dir for agent sockets
mkdir -p "$SOCKET_DIR"
SOCKET="$SOCKET_DIR/pi.sock" # keep agent sessions separate from your personal tmux
SESSION=pi-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 pi-lldb
Or to capture the output once:
tmux -S "$SOCKET" capture-pane -p -J -t pi-lldb: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.
PI_TMUX_SOCKET_DIR (defaults to ${TMPDIR:-/tmp}/pi-tmux-sockets) and use tmux -S "$SOCKET" so we can enumerate/clean them. Create the dir first: mkdir -p "${PI_TMUX_SOCKET_DIR:-${TMPDIR:-/tmp}/pi-tmux-sockets}".CLAUDE_TMUX_SOCKET_DIR when PI_TMUX_SOCKET_DIR is unset.SOCKET="${PI_TMUX_SOCKET_DIR:-${TMPDIR:-/tmp}/pi-tmux-sockets}/pi.sock".{session}:{window}.{pane}, defaults to :0.0 if omitted. Keep names short (e.g., pi-py, pi-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../scripts/find-sessions.sh -S "$SOCKET"; add -q partial-name to filter../scripts/find-sessions.sh --all (uses PI_TMUX_SOCKET_DIR, falls back to CLAUDE_TMUX_SOCKET_DIR, then ${TMPDIR:-/tmp}/pi-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../scripts/wait-for-text.sh -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../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.
./scripts/wait-for-text.sh -t session:0.0 -p 'pattern' [-F] [-T 20] [-i 0.5] [-l 2000]
-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)