Loading...
Loading...
Critically review terminal user interfaces for UX quality, responsiveness, visual design, and interactivity. Use when asked to "review my TUI", "test my TUI UX", "audit my terminal UI", "check TUI responsiveness", "review TUI keybindings", "check interactivity", or any request to evaluate the user experience quality of a ratatui/crossterm/ncurses-based terminal application. Launches the TUI in tmux, systematically tests 10 dimensions (responsiveness, input conflicts, visual clarity, navigation, feedback loops, error states, layout, keyboard design, permission flows, visual design & color), and produces a graded report with screenshots and specific findings. Benchmarks against Claude Code, OpenCode, and Codex — the three best-in-class AI terminal UIs.
npx skill4agent add gpu-cli/skills tui-review╭╮╰╯│─────┃Color::Rgb(r,g,b)capture-pane -e# Enable true-color (Tc) for ALL terminal types — run ONCE per tmux server
tmux set-option -g default-terminal "xterm-256color"
tmux set-option -ga terminal-overrides ",*:Tc"capture-pane -etmux capture-pane -t $SESSION -e -p | hexdump -C | grep '1b 5b 33 38 3b 32'
# Should show: |.[38;2;R;G;Bm| sequences (RGB foreground color codes)
# If empty: Tc override is not workingcapture-pane -efreeze# Take a color screenshot
tmux capture-pane -t $SESSION -e -p | freeze --language ansi --output /tmp/screenshot.png
# IMPORTANT: freeze may hang — always run with a timeout
tmux capture-pane -t $SESSION -e -p | freeze --language ansi --output /tmp/screenshot.png &
PID=$!
sleep 6
kill $PID 2>/dev/nullsource .claude/skills/tmux-cli-test/scripts/tmux_helpers.sh
TMUX_TEST_WIDTH=140
TMUX_TEST_HEIGHT=40
TMUX_TEST_POLL_INTERVAL=0.1
TMUX_SCREENSHOT_DIR="/tmp/tui-review-screenshots"
mkdir -p "$TMUX_SCREENSHOT_DIR"
# CRITICAL: Enable true-color BEFORE starting any TUI session
tmux set-option -g default-terminal "xterm-256color"
tmux set-option -ga terminal-overrides ",*:Tc"
SESSION="tui-review"
# Launch with COLORTERM=truecolor to help crossterm detect color support
tmux new-session -d -s "$SESSION" -x $TMUX_TEST_WIDTH -y $TMUX_TEST_HEIGHT \
"COLORTERM=truecolor <command>"
sleep 4 # Wait for TUI to render
# Take first color screenshot
tmux capture-pane -t "$SESSION" -e -p | \
freeze --language ansi --output "$TMUX_SCREENSHOT_DIR/01-initial.png" &
PID=$!; sleep 6; kill $PID 2>/dev/null
# Visually inspect it
# Use Read tool on the PNG pathfreezebrew install charmbracelet/tap/freeze| # | State | Label | What to Look For |
|---|---|---|---|
| 1 | Initial load | | First impression, layout, color usage |
| 2 | Help/shortcuts overlay | | Discoverability, overlay design |
| 3 | Command palette / slash menu | | Dropdown styling, selection highlight |
| 4 | During processing/streaming | | Loading indicator, streaming text |
| 5 | Completed response | | Message formatting, tool output |
| 6 | Error state | | Error visibility, color distinction |
| 7 | Dialog/modal open | | Modal design, backdrop |
| 8 | Permission/confirmation flow | | Diff preview, action options |
| 9-12 | Resize: 80x24, 120x30, 160x40, 200x50 | | Layout adaptation |
# Helper function for color screenshots (use instead of tmux_screenshot for ratatui TUIs)
take_color_screenshot() {
local session="$1" label="$2"
local outfile="$TMUX_SCREENSHOT_DIR/${label}.png"
tmux capture-pane -t "$session" -e -p | \
freeze --language ansi --output "$outfile" &
local pid=$!
sleep 6
kill $pid 2>/dev/null
echo "$outfile"
}
# Example: screenshot after opening help
tmux send-keys -t "$SESSION" "?"
sleep 1
take_color_screenshot "$SESSION" "02-help"
# Example: resize screenshots
for size in "80x24" "120x30" "160x40" "200x50"; do
IFS='x' read -r w h <<< "$size"
tmux resize-window -t "$SESSION" -x "$w" -y "$h"
sleep 0.5
take_color_screenshot "$SESSION" "09-resize-${size}"
done
# Visually inspect a screenshot (CRITICAL — actually look at it)
# Use the Read tool on the PNG pathtmux_screenshottmux_helpers.shtake_color_screenshotcapture-pane -e--language ansi# Check that the pane uses color (not monochrome)
tmux_assert_not_monochrome "$SESSION" "TUI uses color"
# Check that at least 4 distinct colors are used (visual hierarchy)
tmux_assert_min_colors "$SESSION" 4 "sufficient color variety"
# Check specific semantic colors
tmux_assert_text_color "$SESSION" "READY" "32" "READY is green"
tmux_assert_text_color "$SESSION" "ERROR" "31" "ERROR is red"
tmux_assert_has_color "$SESSION" "33" "yellow/warning color present"# TUI Review: [App Name]
**Overall Grade**: [A/B/C/D/F]
**Tested at**: [terminal size] | **Binary**: [path] | **Date**: [date]
**Screenshots**: [directory path]
## Summary
[2-3 sentence verdict]
## Screenshots
### Initial State

[Visual observations: layout, color palette, first impression]
### Key States

[Visual observations for each captured state]
### Resize Behavior
 
[How the layout adapts]
## Scores
| # | Dimension | Grade | Issues |
|---|-----------|-------|--------|
| 1 | Responsiveness | | |
| 2 | Input Integrity | | |
| 3 | Visual Feedback | | |
| 4 | Navigation | | |
| 5 | Feedback Loops | | |
| 6 | Error States | | |
| 7 | Layout | | |
| 8 | Keyboard Design | | |
| 9 | Permission Flows | | |
| 10 | Visual Design & Color | | |
## Findings
### CRITICAL (must fix)
- [finding with file:line if known]
### WARNING (should fix)
- [finding]
### INFO (nice to have)
- [finding]
## vs Best-in-Class
[How this TUI compares to Claude Code/OpenCode/Codex patterns]?F1/TabjkEscape