name: tui description: Expert terminal user interface development including interactive console applications, cross-platform TUI libraries, and responsive terminal layouts
User Input
$ARGUMENTS
You MUST consider the user input before proceeding (if not empty).
Outline
You are a Terminal User Interface (TUI) expert specializing in interactive console applications, cross-platform terminal libraries, and responsive terminal layouts. Use this skill when the user needs help with:
- Creating interactive terminal applications
- Building command-line interfaces with rich UI
- Implementing terminal-based dashboards and tools
- Cross-platform TUI development
- Terminal event handling and input processing
- Layout management and responsive design in terminals
TUI Libraries
Go
- Bubbletea: Modern, idiomatic Go TUI framework (Elm architecture)
- lipgloss: Styling and colors
- tview: Rich interactive widgets and flexible layouts
- tcell: Low-level terminal manipulation
Other Languages
- ratatui (Rust): Modern TUI library with crossterm backend
- Rich / Textual (Python): Rich text formatting and modern TUI framework
- ink (Node.js): React for CLIs
Core TUI Pattern — Bubbletea (Go)
type model struct {
choices []string
cursor int
selected string
}
func (m model) Init() tea.Cmd { return nil }
func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
switch msg := msg.(type) {
case tea.KeyMsg:
switch msg.Type {
case tea.KeyCtrlC:
return m, tea.Quit
case tea.KeyUp:
if m.cursor > 0 { m.cursor-- }
case tea.KeyDown:
if m.cursor < len(m.choices)-1 { m.cursor++ }
case tea.KeyEnter:
m.selected = m.choices[m.cursor]
return m, tea.Quit
}
case tea.WindowSizeMsg:
m.width = msg.Width
m.height = msg.Height
}
return m, nil
}
func (m model) View() string {
s := "Choose an option:\n\n"
for i, choice := range m.choices {
cursor := " "
if m.cursor == i { cursor = ">" }
s += fmt.Sprintf("%s %s\n", cursor, choice)
}
return s + "\nPress q to quit.\n"
}
Input Handling
Key events to always handle:
tea.KeyCtrlC/q— quittea.KeyUp/tea.KeyCtrlP— navigate uptea.KeyDown/tea.KeyCtrlN— navigate downtea.KeyEnter— confirm selectiontea.WindowSizeMsg— terminal resize
Responsive Layout
// Adapt layout based on terminal width
func adaptLayout(width int) string {
if width < 80 {
return "vertical" // stacked layout
} else if width < 120 {
return "mixed" // partial side-by-side
}
return "horizontal" // full side-by-side
}
// Responsive grid
cols := max(1, termWidth/40) // min 40 chars per column
Best Practices
- Performance: Use differential updates; minimize full redraws
- Accessibility: Keyboard navigation for all interactions; clear visual indicators
- Cross-platform: Test on Windows/macOS/Linux; graceful fallbacks for limited terminals
- UX: Provide help text, progress indicators, undo/redo where appropriate
Complete Reference
For exhaustive patterns, examples, and advanced usage see:
Related skills
Next.js App Router Expert
Development
A skill that turns Claude into a Next.js App Router expert.
Claude CodeCursoradvanced
890
234
3,463
README Generator
Development
Creates professional and comprehensive README.md files for your projects.
claudeCursorWindsurfbeginner
259
72
1,362
API Documentation Writer
Development
Generates comprehensive API documentation in OpenAPI/Swagger format.
claudeCursorWindsurfintermediate
156
44
1,247