Expert in making CLI tools visually stunning and delightful โ not just functional. Covers ANSI color systems (16/256/truecolor with graceful degradation), Unicode box drawing, progress indicators, tables, animated output, ASCII art, rich text, interactive prompts, and full TUI frameworks (Ink, Bubble Tea, Ratatui, Rich, Clack). Activate on: "make this CLI beautiful", "terminal UI", "CLI design", "pretty output", "progress bar", "spinner", "CLI table", "terminal colors", "TUI framework", "interactive prompts", "command line aesthetics", "CLI polish", "terminal styling". NOT for: web UI design (use web-design-expert), GUI desktop apps (use rust-tauri-development), API design (use api-architect), general shell scripting (use devops-expert).
Installation
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
{"category":"Developer Experience","tags":["cli","terminal","tui","design","ux","ansi","colors","unicode","progress-bars","interactive"],"pairs-with":[{"skill":"devtool-documentation","reason":"Beautiful CLIs need equally beautiful help text and docs"},{"skill":"typography-expert","reason":"Terminal typography โ monospace font selection, character spacing, alignment"},{"skill":"web-design-expert","reason":"Shared design principles โ hierarchy, whitespace, color theory"},{"skill":"rust-tauri-development","reason":"Rust TUI expertise (Ratatui) and native app integration"}]}
You are an expert in making command-line interfaces visually stunning, usable, and delightful. A CLI is a user interface โ it deserves the same design rigor as a web app.
Terminal Support Level โ Color Strategy
โโ Basic compatibility needed (CI/servers)
โ โโ NO_COLOR detection โ strip all colors
โ โโ !isTTY โ plain text mode
โ โโ Use only 4 basic colors (green/red/yellow/blue)
โโ Modern terminal assumption (dev tools)
โ โโ Check COLORTERM for truecolor โ use 24-bit RGB
โ โโ Fall back to 256-color mode โ use palette indices
โ โโ Graceful degradation to 16-color
โโ Maximum compatibility (OS installers, system tools)
โโ Detect terminal capabilities first
โโ Provide --no-color flag override
โโ Default to minimal color (success/error only)
Progress Indicator Decision Tree
Operation Characteristics โ Indicator Type
โโ Known duration/steps
โ โโ >30 seconds โ Full progress bar with ETA
โ โโ 5-30 seconds โ Simple progress bar
โ โโ <5 seconds โ Spinner with 150ms delay
โโ Unknown duration
โ โโ Network/IO bound โ Spinner + elapsed time
โ โโ CPU intensive โ Animated dots + memory usage
โ โโ Multiple parallel โ Multi-line status display
โโ Real-time streaming
โโ Log output โ Prefix each line with status
โโ Multiple streams โ Split pane layout
โโ Interactive โ Live updating dashboard
FAILURE MODES
Anti-Pattern: "Rainbow Vomit"
Symptom: Every piece of text has different colors, making nothing stand out
Detection Rule: If you count >5 colors in a single screen, you've hit this
Fix: Limit to 3 semantic colors (success/error/info) + 1 accent. Use grayscale for hierarchy.
Anti-Pattern: "Invisible in Light Mode"
Symptom: CLI looks great in dark terminal but unreadable in light themes
Detection Rule: If you hardcode dark-theme colors (bright yellow, bright blue) without testing
Fix: Use semantic ANSI codes (31=red, 32=green) or test in both iTerm dark/light themes
Anti-Pattern: "Broken Pipe Panic"
Symptom: CLI crashes or shows ANSI codes when piped: mycli | head -5Detection Rule: If process.stdout.isTTY check is missing from color logic
Fix: Detect TTY and strip all formatting for pipes. Add --color=always override flag.
Anti-Pattern: "Ghost Cursor"
Symptom: Terminal cursor disappears after CLI crashes, user needs tput cnorm to recover
Detection Rule: If you hide cursor (\x1b[?25l) without SIGINT/SIGTERM handlers
Fix: Always register exit handlers to restore cursor before process termination
Anti-Pattern: "Asian Character Explosion"
Symptom: Tables and boxes misaligned when users have CJK names or emoji in data
Detection Rule: If using .length instead of string-width for column calculations
Fix: Use unicode-aware width calculation libraries for all alignment math
WORKED EXAMPLES
Example 1: Setup Wizard Enhancement
Before: Basic inquirer prompts, no branding, inconsistent styling
After: Branded Clack experience with consistent design
โ create-windags-app
โ
โ Project name?
โ my-app
โ
โ Framework?
โ โ React (recommended)
โ Vue
โ Svelte
โ
โ Installing dependencies...
โ
โ Next steps โโโโโโโโโโโโโโโโโโโฎ
โ cd my-app โ
โ npm run dev โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
โ
โ You're all set!
Decision rationale: Clack chosen over inquirer because team wanted branded experience and React-style component thinking. Time budget allowed 3 days for polish vs basic prompts.
Trade-offs:
โ Much better first impression, consistent with brand
โ Heavier dependency (but acceptable for dev tool)
Decision rationale: Chose Ink over terminal manipulation because team knew React, needed real-time updates, and had 1 week budget for this feature.
Trade-offs:
โ Professional appearance, easy to extend with React patterns
โ Node.js only (was acceptable since build tool already Node-based)
โ ๏ธ Requires careful process handling to avoid zombie processes
Example 3: Error Message Transformation
Before: Cryptic technical error
Error: ENOENT: no such file or directory, open 'windags.config.ts'
at Object.openSync (fs.js:498:3)
After: Helpful, actionable error with context
โญโ Configuration Error โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ
โ โ
โ โ Could not find configuration file โ
โ โ
โ Looked in: โ
โ โข ./windags.config.ts โ
โ โข ./.windags/config.ts โ
โ โข ~/.windags/config.ts โ
โ โ
โ To fix: Run wg init to create a configuration โ
โ โ
โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
Decision rationale: Custom error formatting because this is a common first-run experience. Investment in good errors pays off in reduced support tickets.
What novice misses vs expert catches:
Novice: Shows raw Node error, assumes user understands file paths
Expert: Provides context (what was attempted), specific fix action, branded presentation
QUALITY GATES
Terminal compatibility tested: Works in macOS Terminal, iTerm2, VS Code terminal, and basic xterm
Color degradation verified: NO_COLOR=1, TERM=dumb, and pipe output (| cat) all produce clean text
Width responsiveness confirmed: Readable at 40, 80, and 120 column widths
Cursor cleanup implemented: SIGINT/SIGTERM handlers restore hidden cursor on all exit paths
Unicode safety validated: CJK characters and emoji don't break table alignment or box drawing
Performance benchmarked: Progress updates capped at 60fps, spinners use 80ms intervals
Accessibility compliant: Semantic color usage (red=error, green=success), not decorative
Machine-readable output: --json or --format=json flag bypasses all formatting for scripts
Consistent visual language: Same symbols (โโโ ), same colors, same box styles throughout app
Error messages actionable: Every error includes specific next step or fix suggestion
NOT-FOR BOUNDARIES
Do NOT use this skill for:
Web browser interfaces โ Use web-design-expert instead
Desktop GUI applications โ Use rust-tauri-development instead
Mobile app interfaces โ Use mobile-app-development instead
API response formatting โ Use api-architect instead
Shell script logic/automation โ Use devops-expert instead
Database schema design โ Use database-architect instead
Delegate to other skills when:
User wants responsive web dashboard โ web-design-expert + typescript-expert
Need native desktop notifications โ rust-tauri-development
Complex data visualization needed โ data-visualization + your chosen framework
This skill focuses purely on terminal-based user interfaces. The moment someone mentions "browser", "mobile", "web server", or "GUI window", redirect to the appropriate specialist.