skills/run-tui-interactive-terminal-app-example/SKILL.md
Example file for the Run app skill showing how to drive an interactive terminal app with tmux, readiness polling, pane capture, key references, and cleanup
npx skillsauth add mkusaka/ccskills run-tui-interactive-terminal-app-exampleInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Interactive terminal apps (text editors, REPLs, curses-based UIs) can't
be driven directly by an agent's bash tool — they take over the terminal.
The skill must show how to wrap them in tmux so the agent can send
input, capture output, and take screenshots.
This is the standard approach:
tmux send-keystmux capture-panetmux kill-sessionThe skill's SKILL.md should present this as the primary way to drive
the app. A small driver.sh that wraps the launch+attach sequence can
live in the skill directory, but for most TUIs the raw tmux commands in
the skill body are enough.
Run (interactive, for agents)
Start the TUI inside tmux:
tmux new-session -d -s app -x 120 -y 40 './myapp'Poll until the ready marker appears (faster + more reliable than a fixed sleep — returns the instant the app is up, fails loudly if it isn't):
timeout 10 bash -c 'until tmux capture-pane -t app -p | grep -q "Ready"; do sleep 0.2; done' tmux capture-pane -t app -pSend input (this example navigates to the Settings screen and toggles an option):
tmux send-keys -t app 's' timeout 5 bash -c 'until tmux capture-pane -t app -p | grep -q "Settings"; do sleep 0.2; done' tmux send-keys -t app 'Down' 'Down' 'Space' # navigate + toggle timeout 5 bash -c 'until tmux capture-pane -t app -p | grep -qF "[x]"; do sleep 0.2; done' tmux capture-pane -t app -pIf you find yourself writing more than a couple of these poll lines, pull them into a
wait_for()helper in adriver.shnext to the skill.Quit:
tmux send-keys -t app 'q' tmux kill-session -t app 2>/dev/null || trueKey reference
| Key | Action | |---|---| |
j/korDown/Up| Navigate list | |Enter| Select | |s| Settings | |q| Quit |
tmux new-session -x -y args.until tmux capture-pane | grep -q X)
rather than a fixed sleep N — returns the instant the app is up, and fails
usefully when it never does. Say what string means ready.tmux kill-session as
a fallback.capture-pane output is hard to read,
note flags that help (-e for escape sequences, -J to join wrapped
lines).For a human running the app interactively, tmux is overkill. Include the one-liner too:
Run (direct, for humans)
./myappPress
qto quit.
development
Skill for syncing a React design system to claude.ai/design by configuring the target project, running the converter, verifying previews, and uploading verified artifacts
tools
Skill instructions for creating or customizing Cowork plugins, including mode selection, research, implementation, packaging, connector replacement, and plugin delivery
development
Design sync sub-skill instructions for using a repo's Storybook as the fidelity oracle when building, validating, matching, uploading, and re-syncing component previews
development
Skill definition for syncing a React design system to claude.ai/design, including project selection, source-shape detection, converter configuration, validation, upload planning, and self-check behavior