Use when designing, reviewing, or refactoring a CLI that must serve AI agents alongside humans, or when converting an API or SDK into an agent-usable CLI interface.
日本語の概要は準備中です。原文の説明を表示しています。
Use tmux from the command line to run, drive, and monitor terminal programs as a coding agent (detached sessions, send-keys input injection, capture-pane output polling, formats, completion detection, and control mode). Use when a task needs long-running or interactive processes (builds, tests, servers, REPLs, watch modes, TUI apps) kept alive across turns or inspected live; skip when plain `cmd > log 2>&1 &` is enough.
インストールする前に、エージェントに与えられる指示の中身を確認できます。
tmux is a terminal multiplexer: it runs programs inside panes that survive terminal closures and can be inspected, driven, and re-attached programmatically. This skill covers non-interactive (programmatic) tmux use: the way a coding agent should drive it from the shell. Grounded in the official tmux wiki.
Use tmux when you need any of:
isatty, or need a fixed window size)attach and watchSkip tmux when plain redirection is enough: cmd > out.log 2>&1 or
cmd & / nohup is simpler and you never need to read a TUI.
server (one per socket, auto-started, exits when last session dies)
└── sessions ($0, $1, ... unique names)
└── windows (@0, @1, ... named, linked to 1+ sessions)
└── panes (%0, %1, ... one terminal + one running program each)
$3 session, @2 window, %5 pane) over names/indexes
in scripts: they are unambiguous and stable across renames/reorderings.tmux -L pi-agent .... The same flags apply to every command.# 1. Create a detached session with a fixed size (else it defaults to 80x24,
# which mangles wide output you later capture)
tmux -L pi-agent new-session -d -s build -x 220 -y 50
# 2. Send a command. Append an echo sentinel to detect completion reliably.
# Grep the EXPANDED sentinel (__DONE__:<digits>): the echoed command line still
# contains the literal "$?", so a plain grep for __DONE__ matches the echo
# before the command even runs.
tmux -L pi-agent send-keys -t build 'make 2>&1; echo "__DONE__:$?"' Enter
# 3. Poll for the sentinel in the pane output
until tmux -L pi-agent capture-pane -p -t build | grep -q '__DONE__:[0-9]'; do sleep 1; done
# 4. Read the result (including scrollback)
tmux -L pi-agent capture-pane -p -S -2000 -t build
# -> last line tells you the exit code after "__DONE__:"
# 5. Clean up (or leave it running for the human to attach to)
tmux -L pi-agent kill-session -t build
Polling with a sentinel is the most robust completion detector. tmux wait-for
(chan / wait-for -S chan) also works but races: if the signal fires before you
start waiting, you hang forever: only use it when you control both ends.
tmux ls # list sessions (exit 1 + "no server running" = none; not an error)
tmux new-session -d -s NAME # detached session; -x/-y set size; -c DIR sets start dir
tmux new-session -A -s NAME # attach-or-create (human-facing convenience)
tmux send-keys -t TGT 'cmd' Enter # type into a pane; Enter is a KEY NAME, not "\n"
tmux capture-pane -p -t TGT # pane text to stdout (-S -3000 scrollback, -J join wrapped lines)
tmux list-panes -a -F FMT # enumerate panes with a format string
tmux display-message -p -t TGT '#{...}' # expand a format for one target
tmux kill-session -t NAME # kill one session; kill-server kills everything
tmux split-window -h -t TGT 'cmd' # new pane right; -v below; -d don't focus it; -b before
tmux select-pane -t %5 # make a pane active
tmux set-option -t TGT remain-on-exit on # keep pane (and its output) after the process exits
tmux respawn-pane -t %5 # restart the program in a dead pane
tmux rename-window -t @2 name # windows auto-rename by default; pin with rename or disable automatic-rename
tmux run-shell 'cmd' # run once in tmux's shell, no pane
tmux set-hook -t s hook 'cmds' # run tmux commands on events (pane-died, after-send-keys, ...)
tmux wait-for CHAN / wait-for -S CHAN # synchronization primitive (see race caveat above)
-t targets: session:window.pane, e.g. build:0.1, or a bare ID -t %5 /
-t @2 / -t '$3'. Quoted $ so the shell doesn't expand session IDs.
tmux send-keys -t build 'echo "a b"' Enter # args are typed into the pane; the pane's
# shell does the parsing: your quoting must
# survive tmux AND the target shell
tmux send-keys -t build C-c # send Ctrl-C to interrupt
tmux send-keys -t build Up Enter # repeat last command (shell history)
tmux send-keys -t repl 'x = 1' Enter # drive a REPL one statement at a time
tmux send-keys -t build -l '100%' # -l: literal text, key names like "Enter" not interpreted
tmux send-keys -t build -H 41 42 # -H: hex-encoded keys (unicode-safe)
Enter, Tab, Space, BSpace, C-c, C-l, Up, Down, Escape, F1.. are
key names; unknown args are typed as literal text."\n" expecting a newline: that types the two characters \ n. Send Enter.bash /tmp/script.sh Enter instead of fighting quoting layers.send-keys fires and returns immediately; it does not wait for the program to act.C-b prefix: that is for humans with an attached client. Use tmux
commands directly.-S -3000 for the last N lines
of scrollback, -S - for the whole history (bounded by history-limit, default 2000).-S 0 - captures from the top of the screen to the end of history: -S 0 -E -.-J joins soft-wrapped lines into logical lines: usually what you want when parsing.-e includes ANSI escape sequences (colours); omit for clean text.sed -e 's/[[:space:]]*$//' when comparing.-a captures the alternate screen (TUI apps that draw the whole screen).-F on list commands and display-message -p give machine-readable facts:
tmux -L pi-agent list-panes -a -F '#{session_name}:#{window_index}.#{pane_index} #{pane_id} cmd=#{pane_current_command} pid=#{pane_pid} dead=#{pane_dead} path=#{pane_current_path}'
tmux -L pi-agent display-message -p -t build '#{pane_pid} #{history_size} #{cursor_y}'
Useful variables: #{session_id}/#{session_name}/#{session_attached},
#{window_id}/#{window_index}/#{window_name}/#{window_active},
#{pane_id}/#{pane_index}/#{pane_active}/#{pane_dead}/#{pane_pid}/
#{pane_current_command}/#{pane_current_path}/#{pane_title}/#{pane_in_mode},
#{history_size}, #{socket_name}, #{pid} (server PID). Escape with #{q:...}.
Full list: man 1 tmux, FORMATS section.
send ... 'cmd; echo __DONE__:$?' Enter, poll capture-pane | grep.remain-on-exit + #{pane_dead}: set the option, run the command directly,
then wait for display-message -p -t %5 '#{pane_dead}' to print 1. The pane
keeps its output until you respawn-pane or kill-pane.#{pane_pid} is the pane's shell; if you launched cmd
directly as the pane command, its exit kills the pane (combine with way 2).wait-for: only when you also control ordering (see race caveat above).tmux -L pi-agent new-session -d -s train -x 220 -y 50
tmux -L pi-agent send-keys -t train './train.sh' Enter
echo "watch with: tmux -L pi-agent attach -t train" # hand this to the user
tmux -L pi-agent new-session -d -s mon -x 220 -y 50 -c "$PWD"
tmux -L pi-agent send-keys -t mon 'tail -f app.log' Enter
tmux -L pi-agent split-window -v -t mon
tmux -L pi-agent send-keys -t mon.1 'watch -n5 df -h' Enter
# capture one specific pane: -t mon.0 / -t mon.1, or the pane ID
tmux -L pi-agent new-session -d -s repl -x 220 -y 50 'python3 -i'
sleep 1 # let it start before typing
tmux -L pi-agent send-keys -t repl 'print(6*7)' Enter
sleep 0.5
tmux -L pi-agent capture-pane -p -t repl # parse "42" between prompts
tmux -L pi-agent send-keys -t repl C-d # exit
tmuxrun() { # tmuxrun SESSION 'COMMAND' -> prints output, exit code in $?
local s=$1; local t=$2
tmux -L pi-agent new-session -d -s "$s" -x 220 -y 50 || return 1
tmux -L pi-agent send-keys -t "$s" "$t; echo \"__DONE__:\$?\"" Enter
until tmux -L pi-agent capture-pane -p -t "$s" | grep -q '__DONE__:[0-9]'; do sleep 1; done
tmux -L pi-agent capture-pane -p -S -2000 -t "$s" | sed -e 's/[[:space:]]*$//'
tmux -L pi-agent kill-session -t "$s"
}
-d -x ... -y ...)? Unsized detached panes are 80x24.Enter), not the string \n?-S when you need scrollback? Default is visible screen only.pane_dead, not a fixed sleep?__DONE__:[0-9])? A bare grep for the
sentinel name matches the shell-echoed command line before the command runs.%0, @1, $2) for targeting, not window names (they auto-rename)?tmux ls first: the user may have live sessions
you must not disturb (kill-session/kill-server on the default socket kills theirs)?tmux ls exit code 1 with "no server running" means empty, not broken.kill-session / kill-server), socket file gone?remain-on-exit on before running.tmux -C attach (or -CC for raw applications) speaks a text protocol: commands
in, each answered between %begin ... %end (success) or %begin ... %error
(failure) guard lines; live pane output arrives as %output %paneID text
notifications. Useful for building a long-lived supervisor that streams pane
output; for one-shot driving the shell commands above are simpler. Flow control
(refresh-client -f pause-after=..., %pause, %extended-output) and format
subscriptions (refresh-client -B) exist for heavy streaming: see the
Control-Mode wiki page.
man 1 tmux (every command, flag, format variable)まだレビューはありません。使ってみた感想をお寄せください。
概要と使いどころ
Use when designing, reviewing, or refactoring a CLI that must serve AI agents alongside humans, or when converting an API or SDK into an agent-usable CLI interface.
日本語の概要は準備中です。原文の説明を表示しています。
Search free commercial-use creative assets across multiple online sources — photos, illustrations, icons, video footage, music, sound effects, and fonts. Use when the user needs to find assets for videos, PPTs, articles, or any content creation. Trigger on phrases like "find me a photo of", "search for icons", "I need background music", "find video footage", "search fonts", "找一张图片", "搜素材", "帮我找图标/视频/音乐/字体". Covers Pexels, Unsplash, Pixabay, Iconify, Freesound, Google Fonts and more — with API-backed search where available.
日本語の概要は準備中です。原文の説明を表示しています。
Query the Semantic Scholar academic corpus through AI2's Asta MCP server: keyword or title search with venue and date filters, who-cited-a-paper traversal, author profiles and publications, DOI/arXiv/PMID lookup, and ~500-word full-text snippets for evidence, with citation counts and h-index. Use when the user asks for papers on a topic, who cited a paper, an author's work, recent literature since a date, or a venue-scoped paper list. Requires the Asta MCP server.
日本語の概要は準備中です。原文の説明を表示しています。
Extract and organize frames from a Bilibili video (bangumi episode, UP upload, or a local file) into scenery shots and per-character image groups, using anime-specific person detection + CCIP character-identity embeddings. Two modes — cluster everyone, or pull out one (or several) named characters via reference folders. Use when the user wants to collect, extract, or organize anime frames/screenshots by character or by scenery from a Bilibili video. Read-only download for personal viewing/analysis; uploads nothing.
日本語の概要は準備中です。原文の説明を表示しています。
Fetch Bilibili (哔哩哔哩) video comments for UP主 self-analysis. Use when the user asks to collect, download, export, or analyze comments on a Bilibili video (BV号 / URL / UID). Produces JSONL + summary.json suitable for further Claude Code analysis (sentiment, keywords, audience trends). Read-only; does not post/edit/delete.
日本語の概要は準備中です。原文の説明を表示しています。
Use when user requests diagrams, flowcharts, architecture charts, or visualizations. Also use proactively when explaining systems with 3+ components, complex data flows, or relationships that benefit from visual representation. Generates .excalidraw files and exports to PNG/SVG via Kroki API or locally using excalidraw-brute-export-cli.
日本語の概要は準備中です。原文の説明を表示しています。