ワンクリックで
vtx-tmux-test
E2E testing of vtx using tmux sessions; IMPORTANT: only trigger this skill when user asks for e2e testing of vtx
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
E2E testing of vtx using tmux sessions; IMPORTANT: only trigger this skill when user asks for e2e testing of vtx
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.
Search and install agent skills from ClawHub, the public skill registry.
Schedule reminders and recurring tasks.
Interact with GitHub using the `gh` CLI. Use `gh issue`, `gh pr`, `gh run`, and `gh api` for issues, PRs, CI runs, and advanced queries.
Generate images and iteratively edit saved image artifacts.
Sustained objectives via long_task / complete_goal — idempotent goal wording, project-style modular work, early web/doc research, Runtime Context metadata.
| name | vtx-tmux-test |
| description | E2E testing of vtx using tmux sessions; IMPORTANT: only trigger this skill when user asks for e2e testing of vtx |
End-to-end testing of vtx using tmux sessions to programmatically control the TUI application.
Vtx is a TUI (Textual-based) app. Running tests programmatically is hard. Tmux provides:
tmux new-session - isolate test environmenttmux send-keys - send keyboard inputtmux capture-pane - capture outputtmux has-session - check if vtx is runningHOME=/tmp/vtx-e2e-home so runtime settings do not mutate the real user config; auth JSON files are copied into the temp HOME when present so provider startup still works@, /, runtime pickers, keybindings) by checking UI elements appear/tmp/vtx-test-project# Run all e2e tests from the repo root
bash .agents/skills/vtx-tmux-test/run-e2e-tests.sh
# Optional: keep the temporary HOME for debugging
KEEP_E2E_HOME=1 bash .agents/skills/vtx-tmux-test/run-e2e-tests.sh
# Optional: override launch command/provider/model
VTX_CMD='uv run vtx --model gpt-5.5' \
bash .agents/skills/vtx-tmux-test/run-e2e-tests.sh
After running, read /tmp/vtx-test-*.txt and evaluate the captured pane/config/filesystem outputs.
setup-test-project.shCreates a deterministic test project structure at /tmp/vtx-test-project/.
bash .agents/skills/vtx-tmux-test/setup-test-project.sh
run-e2e-tests.shRuns comprehensive e2e tests including UI triggers, runtime controls, tab completion, and tool execution.
bash .agents/skills/vtx-tmux-test/run-e2e-tests.sh
/, verify slash command list appears with core and newer commands@pyproject, verify file picker appears with pyproject.toml/model, verify model selector appears, then dismiss/new, verify new conversation is started/resume, verify session list appears, then dismiss/session, verify session info/statistics displayedprompt and auto, with current mode checked✓✓ auto / ⏸ prompt) and temp config persists permissions.modenone, minimal, low, medium, high, xhigh, with current level checkedminimalon and off, with current mode checkednotifications.enabledpypr + Tab, verify completes to pyproject.tomlsrc/vtx/ui/s + Tab, verify floating list shows selection_mode.py, session_ui.py, styles.pysrc/vtx/ui/widg + Tab, verify completes to src/vtx/ui/widgets.pysrc/vtx/ui/s + Tab + Enter, verify first completion is applied to input/tmp/vtx-test-project/test1.txt, verified by file existencetest1.txt, verified by content changing from hello to world3+3, verified in LLM output where practicalEdit or override environment variables for run-e2e-tests.sh:
WAIT_TIME=30 # Time for LLM to complete all tool tasks
COMMAND_WAIT_TIME=3 # Time for UI commands to settle
SESSION_NAME="vtx-test" # Tmux session name
TEST_DIR="/tmp/vtx-test-project" # Test project directory for tool execution
TEST_HOME="/tmp/vtx-e2e-home" # Isolated HOME/config/session directory
VTX_DIR="$PWD" # Vtx repo directory for tab completion tests
VTX_CMD="uv run vtx --model gpt-5.5"
KEEP_E2E_HOME=0 # Set to 1 to preserve temp HOME after run
The main script writes captured outputs to /tmp/vtx-test-*.txt:
/tmp/vtx-test-1-commands.txt - / slash command list/tmp/vtx-test-2-at-trigger.txt - @pyproject file picker/tmp/vtx-test-3-model.txt - /model selector/tmp/vtx-test-4-new.txt - /new result/tmp/vtx-test-5-permissions-picker.txt - /permissions picker/tmp/vtx-test-6-permissions-auto.txt and ...-config.txt - /permissions auto/tmp/vtx-test-7-permissions-prompt.txt and ...-config.txt - /permissions prompt/tmp/vtx-test-8-permissions-shift-tab.txt and ...-config.txt - Shift+Tab mode cycling/tmp/vtx-test-9-thinking-picker.txt - /thinking picker/tmp/vtx-test-10-thinking-minimal.txt - /thinking minimal/tmp/vtx-test-11-thinking-cycle.txt - Ctrl+Shift+T thinking cycle/tmp/vtx-test-12-notifications-picker.txt - /notifications picker/tmp/vtx-test-13-notifications-on.txt and ...-config.txt - /notifications on/tmp/vtx-test-14-notifications-off.txt and ...-config.txt - /notifications off/tmp/vtx-test-15-tab-unique.txt - Tab completion unique match/tmp/vtx-test-16-tab-multiple.txt - Tab completion alternatives/tmp/vtx-test-17-tab-nested-unique.txt - Nested unique file completion/tmp/vtx-test-18-tab-select.txt - Tab completion selection/tmp/vtx-test-19-tools.txt - Tool execution turn/tmp/vtx-test-20-session.txt - /session stats/tmp/vtx-test-21-resume.txt - /resume session list/tmp/vtx-test-files.txt - Test project file listing/tmp/vtx-test-test1-content.txt - Final test1.txt content or FILE_NOT_FOUND/tmp/vtx-test-session-files.txt - Session JSONL paths under temp HOME/tmp/vtx-test-final-config.txt - Final temp configEscape not Esc: tmux recognizes Escape. Esc sends literal characters.Escape to dismiss completions, then C-u to clear text.Escape '[' 'Z' rather than relying on a tmux key name.Escape '[84;6u' because C-S-t often collapses to Ctrl+T.After running the test script, evaluate results by reading the output files.
UI Trigger Tests:
/ test: Slash command list includes github, themes, permissions, thinking, notifications, init, compact, handoff, export, copy, login, logout@ test: File picker appears and shows pyproject.toml/model test: Model selector appears with model list/current markers/new test: Started new conversation appears/resume test: Session list appears with prior sessions/session test: Session info/statistics displayedRuntime Mode Tests:
/permissions picker shows prompt and auto, current item checked/permissions auto shows ✓✓ auto, saved status, and config has mode = "auto"/permissions prompt shows ⏸ prompt, saved status, and config has mode = "prompt"auto and config has mode = "auto"/thinking picker shows none, minimal, low, medium, high, xhigh/thinking minimal shows Thinking level changed to minimal and info bar row2-right includes minimalminimal to the next level/notifications picker shows on and off, current item checked/notifications on/off status says saved and config flips enabled = true/falseTab Path Completion Tests:
pypr + Tab shows pyproject.tomlsrc/vtx/ui/s + Tab shows selection_mode.py, session_ui.py, styles.pysrc/vtx/ui/widg + Tab shows src/vtx/ui/widgets.pysrc/vtx/ui/s + Tab + Enter applies a selected completionTool Execution Tests:
/tmp/vtx-test-project/test1.txt exists/tmp/vtx-test-test1-content.txt contains world/tmp/vtx-test-files.txt lists test1.txt/tmp/vtx-test-19-tools.txt shows relevant tool blocks/resultsProvide a summary showing:
After presenting the report, ALWAYS give the user this shell command so they can inspect raw captured outputs:
for f in /tmp/vtx-test-*.txt; do printf "\n\033[1;36m▶▶▶ %s\033[0m\n" "$f"; awk 'NF{found=1} found{lines[++n]=$0} END{while(n>0 && lines[n]=="") n--; for(i=1;i<=n;i++) print lines[i]}' "$f"; done
# Test script auto-cleans tmux session and temp HOME unless KEEP_E2E_HOME=1.
# Output files remain for evaluation (/tmp/vtx-test-*.txt).
# Manual cleanup if needed:
tmux kill-session -t vtx-test 2>/dev/null
rm -rf /tmp/vtx-test-project /tmp/vtx-e2e-home
rm -f /tmp/vtx-test-*.txt
# Session management
tmux new-session -d -s <name> -c <dir> '<command>'
tmux kill-session -t <name>
tmux has-session -t <name>
# Input — IMPORTANT: use full key names (Escape, Enter, not Esc)
tmux send-keys -t <name> "text"
tmux send-keys -t <name> Enter
tmux send-keys -t <name> Escape
tmux send-keys -t <name> Tab
tmux send-keys -t <name> C-c
tmux send-keys -t <name> C-u
# Output
tmux capture-pane -t <name> -p
tmux capture-pane -t <name> -p > file.txt
KEEP_E2E_HOME=1 to inspect temp config/session files after failures./resume so there is a session with messages in the list.