| name | terminal-ui-design |
| description | Create distinctive, production-grade terminal user interfaces with high design quality. Use this skill when the user asks to build CLI tools, TUI applications, or terminal-based interfaces. Generates creative, polished code that avoids generic terminal aesthetics. |
Terminal UI Design Skill
Create distinctive, production-grade terminal user interfaces with high design quality. Generate creative, polished code that avoids generic terminal aesthetics.
Design Thinking
Before coding, understand the context and commit to a BOLD aesthetic direction:
- Purpose: What problem does this interface solve? Who uses it? What's the workflow?
- Tone: Pick an extreme aesthetic from the palette below
- Constraints: Technical requirements (Python Rich, Go bubbletea, Rust ratatui, Node.js blessed/ink, pure ANSI escape codes, ncurses)
- Differentiation: What makes this UNFORGETTABLE? What's the one thing someone will remember about this terminal experience?
Choose a clear conceptual direction and execute it with precision. A dense information dashboard and a zen single-focus interface both workโthe key is intentionality, not intensity.
Aesthetic Palette
Choose ONE and commit fully:
| Aesthetic | Character | Colors | Typography |
|---|
| Cyberpunk/Hacker | Glitchy, dangerous, alive | Hot pink #ff00ff, electric cyan #00ffff, deep purple bg | Monospace with Unicode glitches |
| Retro Computing | Nostalgic, warm, authentic | Amber #ffb000 or green #00ff00 on black | Chunky ASCII art |
| Minimalist Zen | Quiet, focused, calming | Muted grays, single accent color | Generous whitespace, sparse |
| Maximalist Dashboard | Dense, powerful, professional | Information-coded colors | Tight grids, compact |
| Synthwave/Neon | 80s future, vibrant | Magenta, cyan, purple gradients | Stylized headers |
| Monochrome Brutalist | Bold, stark, uncompromising | Single color, white on black | Heavy borders, blocks |
| Corporate Mainframe | Professional, trustworthy | Blue-gray, minimal color | Clean tables, structured |
| Playful/Whimsical | Fun, approachable, human | Bright primaries, emojis | Rounded corners, icons |
| Matrix-Style | Code rain, digital, mysterious | Green on black only | Cascading characters |
| Military/Tactical | Urgent, precise, no-nonsense | OD green, amber warnings | Grid coordinates, timestamps |
| Art Deco | Elegant, geometric, luxurious | Gold, black, cream | Decorative frames |
| Vaporwave | Dreamy, surreal, glitchy | Pink, blue, purple pastels | Japanese characters, waves |
Box Drawing & Borders
Choose border styles that match your aesthetic:
Single line: โโโโโโโโโโโ Clean, modern
โ โ
โโโโโโโโโโโ
Double line: โโโโโโโโโโโ Bold, formal, retro-mainframe
โ โ
โโโโโโโโโโโ
Rounded: โญโโโโโโโโโโฎ Soft, friendly, modern
โ โ
โฐโโโโโโโโโโฏ
Heavy: โโโโโโโโโโโ Strong, industrial
โ โ
โโโโโโโโโโโ
ASCII only: +---------+ Retro, universal compatibility
| |
+---------+
Block chars: โโโโโโโโโโ Chunky, bold, brutalist
โ โ
โโโโโโโโโโ
Advanced techniques:
- Asymmetric borders (double top, single sides)
- Decorative corners:
โ โ โฆ โฌก โ โข โฃ
- Mixed styles for hierarchy (heavy for primary, light for secondary)
Color & Theme Implementation
ANSI 16 (Universal)
Black Red Green Yellow Blue Magenta Cyan White
\x1b[30m \x1b[31m \x1b[32m \x1b[33m \x1b[34m \x1b[35m \x1b[36m \x1b[37m
Bright: \x1b[90m through \x1b[97m
True Color (24-bit)
Foreground: \x1b[38;2;R;G;Bm
Background: \x1b[48;2;R;G;Bm
Signature Palettes
Cyberpunk:
Background: #1a0a2e (deep purple)
Primary: #ff00ff (hot pink)
Secondary: #00ffff (electric cyan)
Accent: #ff6b6b (coral warning)
Amber Terminal:
Background: #000000
Primary: #ffb000 (warm amber)
Dim: #805800 (dark amber)
Bright: #ffd966 (light amber)
Nord-Inspired:
Background: #2e3440 (polar night)
Primary: #88c0d0 (frost blue)
Secondary: #a3be8c (aurora green)
Accent: #bf616a (aurora red)
Gradient Fills
Use block characters for gradients:
โโโโ โ Light to solid
โโโโโ
โโโ โ Height progression (for charts)
Typography & Text Styling
Text Decorations
Bold: \x1b[1m
Dim: \x1b[2m
Italic: \x1b[3m
Underline: \x1b[4m
Strikethrough: \x1b[9m
Reverse: \x1b[7m
Reset: \x1b[0m
Header Styles
Block ASCII (figlet-style):
โโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ
โโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ
โโโโโโ โโโโโโ โโโโโโ โโโโโโโโ
โโโโโโ โโโโโโ โโโโโโ โโโโโโโโ
โโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโ
โโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโ
Letter Spacing:
S T A T U S R E P O R T
Section Markers:
โถ SECTION NAME
[ SECTION ]
โโโ SECTION โโโโโโโโโโโโโโโโโโโ
โ SECTION โ
โโโ SECTION โโโโโโโโโโโโโโโโโโโ
Unicode Enhancement
Replace boring characters with styled alternatives:
| Instead of | Use |
|---|
- bullet | โธ โบ โ โฌข โ
โก |
* star | โ
โญ โฆ โง |
> arrow | โ โ โถ โถ |
[x] check | โ โ โ โ |
[ ] empty | โ โฏ โ |
... loading | โฏ โ ฟ ยทยทยท |
Layout & Spatial Composition
Panel Layout Example
โญโโโ SYSTEM MONITOR โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ
โ โ
โ CPU [โโโโโโโโโโโโโโโโโโโโ] 67% โ
โ MEM [โโโโโโโโโโโโโโโโโโโโ] 74% โ
โ DSK [โโโโโโโโโโโโโโโโโโโโ] 23% โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โธ Process count: 847 โ
โ โธ Uptime: 14d 7h 23m โ
โ โธ Load avg: 2.34 1.89 1.67 โ
โ โ
โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
Column Layout
โโ SERVERS โโโโโโโโโ โโ ALERTS โโโโโโโโโโ
โ โ โ โ
โ โ web-prod-1 โ โ โ High CPU โ
โ โ web-prod-2 โ โ โ All healthy โ
โ โ web-staging โ โ โ
โ โ โ โ
โโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโ
Hierarchy Principles
- Primary: Bold, high contrast, prominent position
- Secondary: Normal weight, slightly dimmed
- Tertiary: Dim text, small, peripheral
- Chrome: Borders, labels, decorationsโshould not compete with content
Motion & Animation
Spinners
frames = ['โ ', 'โ ', 'โ น', 'โ ธ', 'โ ผ', 'โ ด', 'โ ฆ', 'โ ง', 'โ ', 'โ ']
frames = ['โ', 'โ', 'โ', 'โ']
frames = ['|', '/', '-', '\\']
frames = ['โฃพ', 'โฃฝ', 'โฃป', 'โขฟ', 'โกฟ', 'โฃ', 'โฃฏ', 'โฃท']
frames = ['๐', '๐', '๐', '๐', '๐', '๐', '๐', '๐']
Progress Bars
Standard: [โโโโโโโโโโโโโโโโโโโโ] 60%
Minimal: โโโโโโโโโโโโโโโโโโโโ 60%
Fancy: โจโฐโฐโฐโฐโฐโฐโฑโฑโฑโฑโฉ 60%
Blocks: โโโโโโโโโโโโโโโโโโโโโ 60%
Transitions
for char in text:
print(char, end='', flush=True)
time.sleep(0.03)
for i, line in enumerate(lines):
print(f"\x1b[{i+1};1H{line}")
time.sleep(0.05)
Data Visualization
Sparklines
Inline chart: โโโโโ
โโโโโโ
โโโโ
Usage trend: CPU โโโ
โโโโโโโโโโ
โ
Status Indicators
โ Online โ Offline โ Partial
โ Success โ Failed โณ Pending
โฒ Critical โผ Low โ Normal
Tree Structure
โโโ src/
โ โโโ main.py
โ โโโ utils/
โ โ โโโ helpers.py
โ โ โโโ config.py
โ โโโ tests/
โ โโโ test_main.py
โโโ README.md
Tables
โโโโโโโโโโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโโโ
โ SERVICE โ STATUS โ LATENCY โ
โโโโโโโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโโค
โ api-gateway โ โ UP โ 12ms โ
โ auth-service โ โ UP โ 8ms โ
โ db-primary โ โ DOWN โ -- โ
โโโโโโโโโโโโโโโโดโโโโโโโโโโดโโโโโโโโโโโ
Library Quick Reference
Python: Rich
from rich.console import Console
from rich.panel import Panel
from rich.table import Table
from rich.progress import Progress
from rich.live import Live
console = Console()
console.print("[bold magenta]Hello[/] [cyan]World[/]")
console.print(Panel("Content", title="Title", border_style="green"))
Python: Textual (TUI Framework)
from textual.app import App
from textual.widgets import Header, Footer, Static
class MyApp(App):
CSS = """
Screen {
background: #1a0a2e;
}
"""
def compose(self):
yield Header()
yield Static("Hello, World!")
yield Footer()
Go: Bubbletea + Lipgloss
import (
"github.com/charmbracelet/lipgloss"
tea "github.com/charmbracelet/bubbletea"
)
var style = lipgloss.NewStyle().
Bold(true).
Foreground(lipgloss.Color("#FF00FF")).
Background(lipgloss.Color("#1a0a2e")).
Padding(1, 2)
Rust: Ratatui
use ratatui::{
prelude::*,
widgets::{Block, Borders, Paragraph},
};
let block = Block::default()
.title("Title")
.borders(Borders::ALL)
.border_style(Style::default().fg(Color::Cyan));
Node.js: Ink (React for CLI)
import { render, Box, Text } from "ink";
const App = () => (
<Box flexDirection="column" padding={1}>
<Text bold color="magenta">
Hello
</Text>
<Text color="cyan">World</Text>
</Box>
);
render(<App />);
Pure ANSI Escape Codes
print("\x1b[38;2;255;0;255mHot Pink\x1b[0m")
print("\x1b[48;2;26;10;46m\x1b[38;2;0;255;255mCyan on Purple\x1b[0m")
print("\x1b[2J")
print("\x1b[H")
print("\x1b[5;10H")
print("\x1b[?25l")
print("\x1b[?25h")
Anti-Patterns to Avoid
NEVER produce generic terminal output like:
โ Plain unformatted text output
โ Default colors without intentional palette
โ Basic [INFO], [ERROR] prefixes without styling
โ Simple "----" dividers
โ Walls of unstructured text
โ Generic progress bars without personality
โ Boring help text formatting
โ Inconsistent spacing and alignment
โ Mixed border styles without purpose
โ Color vomit (too many colors without hierarchy)
Design Checklist
Before finalizing any terminal UI:
Example: Complete Themed Interface
Cyberpunk System Monitor:
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ โโโ NEURALโขLINK โโโ โขโค SYSTEM DIAGNOSTIC v2.7 โขโค โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฃ
โ โ
โ โจ CORE METRICS โฉ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ CPU โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ 67% โฒ 2.4GHz โ
โ MEM โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ 84% โ 13.4/16GB โ
โ NET โโโโ
โโโ
โโโโโโโโ
โโโโโโ
IN: 847 MB/s โ
โ โ
โ โจ ACTIVE PROCESSES โฉ [47 total] โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ PID NAME CPU MEM STATUS โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ 1847 chrome 23% 1.2G โ ACTIVE โ
โ 2394 node 12% 847M โ ACTIVE โ
โ 0847 postgres 8% 2.1G โ ACTIVE โ
โ 3721 backup_daemon 0% 47M โ IDLE โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฃ
โ โข SYS OK โฃ โ โก UPTIME: 14d 7h โ โผ TEMP: 62ยฐC โ โณ 2.4s โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
The terminal is a canvas with unique constraints and possibilities. Don't just print textโcraft an experience.