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:
Skills similaires
Expert Next.js App Router
Developpement
Un skill qui transforme Claude en expert Next.js App Router.
Claude CodeCursoradvanced
890
234
3,463
Générateur de README
Developpement
Crée des README.md professionnels et complets pour vos projets.
claudeCursorWindsurfbeginner
259
72
1,362
Rédacteur de Documentation API
Developpement
Génère de la documentation API complète au format OpenAPI/Swagger.
claudeCursorWindsurfintermediate
156
44
1,247