From shelli
Tests terminal UI apps in shelli: create, snapshot, resize, keyboard, follow mode, and cleanup. Uses parallel agent team for efficient regression testing.
How this skill is triggered — by the user, by Claude, or both
Slash command
/shelli:tui-testThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Comprehensive TUI app testing for shelli. Validates create, baseline read, snapshot, snapshot consistency, follow mode, keyboard input, resize, and cleanup across 20 TUI applications using a parallel team of agents.
Comprehensive TUI app testing for shelli. Validates create, baseline read, snapshot, snapshot consistency, follow mode, keyboard input, resize, and cleanup across 20 TUI applications using a parallel team of agents.
/tui-test [app1 app2 ...]
Without arguments: tests all 20 apps. With arguments: tests only the listed apps.
Examples:
/tui-test # all 20 apps
/tui-test htop lazygit less # specific apps only
/tui-test --category monitors # category shorthand (see App Registry)
make build (or go build -o shelli .)brew install <app> (orchestrator handles this)The lead agent (you) does the following:
make build./shelli list then ./shelli kill test-<name> for eachwhich <app> for each. Install missing ones with brew install <app>.
Spawn one teammate per app (max 5-6 concurrent to avoid system overload). Use general-purpose agent type with bypassPermissions mode and model: "sonnet" (cheaper, sufficient for mechanical test execution).
Each teammate gets:
./shelli (local build)As teammates complete, collect their reports. If an app is too broken to test (crashes immediately, doesn't render), note it and optionally spawn a replacement from the same category.
Compile all results into:
./shelli listCopy this entire section into each teammate's prompt.
You are testing shelli's TUI support for a specific app. Run these 9 tests in order. Use ./shelli (local build) for all commands.
IMPORTANT: Always use --tui flag on create. Without it, --snapshot won't work.
./shelli create test-<app> --cmd "<launch command>" --tui --cols 120 --rows 40
Use the launch command from the App Registry entry you were given.
Pass: No error. Session appears in ./shelli list.
sleep 3
./shelli read test-<app> --all --strip-ansi
Wait 3 seconds for the app to fully initialize (some TUIs take a moment to render).
Pass: Non-empty output with recognizable app content (header, status bar, file listing, etc.).
If empty or garbled: Try sleep 5 and read again. Some apps (btop, glances) need extra init time.
./shelli read test-<app> --snapshot --strip-ansi
Quality checks:
If snapshot looks wrong:
./shelli read test-<app> --snapshot --strip-ansi --settle 1000./shelli read test-<app> --snapshot --json for structured metadata./shelli info test-<app> --json for session stateRecord: Save the first 20 lines of snapshot output in your report.
Take two snapshots 2 seconds apart:
SNAP1=$(./shelli read test-<app> --snapshot --strip-ansi)
sleep 2
SNAP2=$(./shelli read test-<app> --snapshot --strip-ansi)
Pass criteria:
timeout 5 ./shelli read test-<app> --follow --strip-ansi 2>&1; true
The ; true prevents timeout's non-zero exit from being treated as an error.
Pass: Output streams without errors. For apps with periodic updates, content flows visibly.
Send the key(s) specified in your App Registry entry, then snapshot to verify the app responded:
./shelli send test-<app> "<key>"
sleep 1
./shelli read test-<app> --snapshot --strip-ansi
For multi-step input (e.g., vim commands):
./shelli send test-<app> "i" # enter insert mode
sleep 0.5
./shelli send test-<app> "hello world"
sleep 0.5
./shelli send test-<app> "\e" # escape back to normal
sleep 1
./shelli read test-<app> --snapshot --strip-ansi
Pass: Snapshot reflects the key action. The change must be visible.
Resize larger, snapshot, then resize smaller, snapshot:
./shelli resize test-<app> --cols 160 --rows 50
sleep 2
SNAP_BIG=$(./shelli read test-<app> --snapshot --strip-ansi)
echo "=== LARGE RESIZE ==="
echo "$SNAP_BIG" | head -20
./shelli resize test-<app> --cols 80 --rows 24
sleep 2
SNAP_SMALL=$(./shelli read test-<app> --snapshot --strip-ansi)
echo "=== SMALL RESIZE ==="
echo "$SNAP_SMALL" | head -20
Pass criteria:
Check the snapshot output for:
For apps that display files, you can create a test file:
echo "Box: ┌─┐│└─┘ Emoji: 🚀🔥 Wide: 你好世界" > /tmp/shelli-unicode-test.txt
Pass: Unicode characters appear correctly in snapshot output (not mojibake, not missing).
Note: This test is informational. PASS if the app renders box drawing or unicode at all. FAIL only if characters are completely mangled.
./shelli kill test-<app>
./shelli list | grep test-<app> # should return nothing
Pass: Session removed, no errors, no orphan processes.
When something doesn't work:
./shelli info test-<app> --json - check session state, dimensions, PID./shelli read test-<app> --all - raw buffer (no --strip-ansi, no --snapshot)./shelli list --json - verify process is alive--settle 500, --settle 1000, --settle 2000 on snapshotReturn your results in this exact format:
## <App Name> Test Results
### Summary
| Test | Result | Notes |
|------|--------|-------|
| 1. Create | PASS/FAIL/SKIP | |
| 2. Baseline | PASS/FAIL/SKIP | |
| 3. Snapshot | PASS/FAIL/SKIP | |
| 4. Consistency | PASS/FAIL/SKIP | |
| 5. Follow | PASS/FAIL/SKIP | |
| 6. Keys | PASS/FAIL/SKIP | |
| 7. Resize | PASS/FAIL/SKIP | |
| 8. Unicode | PASS/FAIL/SKIP | |
| 9. Cleanup | PASS/FAIL/SKIP | |
### Snapshot Sample (first 15 lines)
<paste here>
### Failures (if any)
For each FAIL:
- What happened
- Raw output (first 20 lines)
- Debug steps tried
- Likely root cause
Fast redraw, charts, box drawing, periodic updates. Snapshot should always get a clean frame since these apps continuously redraw.
brew install btopbtopm (cycle memory graph mode)brew install htophtopt (toggle tree view)brew install glancesglances1 (toggle per-CPU stats)--settle 3000 for consistency test.brew install k9sk9s: then namespace\r (command mode)Lists, previews, navigation keys. Test arrow keys and cursor movement.
brew install rangerrangerj twice then k once (down, down, up)brew install nnnnnnj (down)brew install yaziyazij (down)brew install vifmvifmj (down)Popups, split views, complex keybinds. MUST run from a git repo directory.
brew install lazygitlazygit? (help overlay)brew install tigtigj (move down in log)Modal input, scrolling, search. These stress different aspects of TUI handling.
brew install vim)vim /tmp/shelli-test-vim.txt (create the file first with some content):set number\r (turn on line numbers)echo "line1\nline2\nline3\nline4\nline5" > /tmp/shelli-test-vim.txtless README.md (use repo's README)G (jump to end of file)brew install micromicro /tmp/shelli-test-micro.txthello shelli then snapshottouch /tmp/shelli-test-micro.txtAsync events, input + output interleaving. These may need network config.
brew install weechatweechat/help\r (show help)brew install irssiirssi/help\r (show help)Multi-pane, list-based, longer content. Some need minimal config.
brew install ncduncdu /tmpj (move down in list)brew install newsboatnewsboat? (help)echo "https://hnrss.org/frontpage" > ~/.config/newsboat/urlsbrew install midnight-commandermc\t (switch pane)brew install batbat --paging=always README.mdG (jump to end, uses less-style paging)For --category argument:
| Shorthand | Apps |
|---|---|
| monitors | btop, htop, glances, k9s |
| files | ranger, nnn, yazi, vifm |
| git | lazygit, tig |
| editors | vim, less, micro |
| network | weechat, irssi |
| misc | ncdu, newsboat, mc, bat |
The lead agent compiles all teammate reports into:
| App | Category | Create | Baseline | Snapshot | Consistency | Follow | Keys | Resize | Unicode | Cleanup | Score |
|---|
Score = number of PASS out of 9.
For each category, note:
Collated first 15 lines of each app's snapshot for visual comparison.
Guides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.
npx claudepluginhub schovi/shelli --plugin shelli