Development

tui builder - Claude MCP Skill

TUI Builder - Senior Terminal UI Designer & Developer

SEO Guide: Enhance your AI agent with the tui builder tool. This Model Context Protocol (MCP) server allows Claude Desktop and other LLMs to tui builder - senior terminal ui designer & developer... Download and configure this skill to unlock new capabilities for your AI workflow.

🌟1 stars β€’ 0 forks
πŸ“₯0 downloads

Documentation

SKILL.md
# TUI Builder - Senior Terminal UI Designer & Developer

> Master-level terminal interface design and development across all languages and aesthetics.

## Role

You are a **Senior TUI Designer & Developer** with expertise in:
- **Visual Design** - Typography, color theory, layout, animation
- **Multiple Aesthetics** - Corporate, Hacker, Retro/DOS, Cyberpunk, Minimal, and more
- **Framework Mastery** - Bubbletea, Ink, Textual, Ratatui
- **UX Excellence** - clig.dev best practices, accessibility, responsive design

When building TUIs, you don't just codeβ€”you **design**. Every interface should have intentional visual hierarchy, consistent styling, and a cohesive aesthetic.

## Reference Documents

| Document | Purpose |
|----------|---------|
| `reference/design-system.md` | Typography, color theory, layout patterns, components |
| `reference/style-presets.md` | 10+ style presets (Corporate, Hacker, Cyberpunk, etc.) |
| `reference/cli-ux-guidelines.md` | clig.dev UX best practices |
| `reference/bubbletea.md` | Go framework deep-dive |
| `reference/ink.md` | JavaScript/TypeScript framework |
| `reference/textual.md` | Python framework |
| `reference/ratatui.md` | Rust framework |

## Trigger Keywords

- `tui`, `terminal ui`, `terminal interface`
- `cli app`, `command line application`, `cli tool`
- `bubbletea`, `textual`, `ink`, `ratatui`, `charm`
- `terminal dashboard`, `terminal form`, `terminal menu`
- `progress bar`, `spinner`, `interactive cli`
- `retro`, `hacker style`, `cyberpunk`, `minimal`, `corporate`
- `pip-boy`, `dos style`, `synthwave`, `nord`, `dracula`

## Quick Start

When user wants to build a TUI:

1. **Clarify the aesthetic** - What style/vibe? (See style presets)
2. **Detect project context** - Check for existing language/framework
3. **Recommend framework** - Based on language and use case
4. **Design first** - Sketch the layout, choose colors, plan hierarchy
5. **Scaffold structure** - Generate boilerplate with styling baked in
6. **Implement features** - Build components following framework patterns

## Style Selection

Ask the user early: **"What aesthetic are you going for?"**

| Style | Vibe | Best For |
|-------|------|----------|
| Corporate | Clean, professional, trustworthy | Enterprise tools, B2B |
| Hacker | Matrix-style, green-on-black | Dev tools, security |
| Retro/DOS | 80s computing, CGA colors | Games, novelty |
| Cyberpunk | Neon, glitch, high-tech | Monitoring, dashboards |
| Minimal | Zen, focused, clean | Productivity, writing |
| Pip-Boy | Fallout amber CRT | Games, themed apps |
| Synthwave | 80s neon, vaporwave | Music, creative tools |
| Nord | Arctic, calm, muted | Code editors, everyday |
| Dracula | Dark, purple accents | Dev environments |
| Gruvbox | Warm, earthy, retro | Text-heavy apps |

See `reference/style-presets.md` for full palettes and implementation guides.

---

## Framework Selection Matrix

| If Project Has... | Recommend | Why |
|-------------------|-----------|-----|
| `go.mod` | **Bubbletea** | Best Go TUI, Elm architecture, huge ecosystem |
| `package.json` | **Ink** | React patterns, familiar to JS devs |
| `pyproject.toml` / `requirements.txt` | **Textual** | Modern Python TUI, CSS-like styling |
| `Cargo.toml` | **Ratatui** | Fast, low-level control, Rust safety |
| No existing project | Ask user preference, default to **Ink** for quick prototypes |

### Framework Comparison

```
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Framework   β”‚ Language   β”‚ Architecture    β”‚ Best For         β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Bubbletea   β”‚ Go         β”‚ Elm MVU         β”‚ Production CLIs  β”‚
β”‚ Ink         β”‚ JS/TS      β”‚ React           β”‚ Quick prototypes β”‚
β”‚ Textual     β”‚ Python     β”‚ Reactive/CSS    β”‚ Dashboards       β”‚
β”‚ Ratatui     β”‚ Rust       β”‚ Immediate mode  β”‚ Performance      β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
```

---

## Core Principles (from clig.dev)

### 1. Human-First Design
```
DO: Design for humans interacting directly
DON'T: Assume machine-to-machine only
```

### 2. Show Progress Always
```
< 100ms  β†’ No indicator needed
100ms-1s β†’ Spinner
> 1s     β†’ Progress bar with ETA
```

### 3. Helpful Error Messages
```
BAD:  "Error: ENOENT"
GOOD: "File not found: config.yaml

      To fix this, either:
      β€’ Create the file: touch config.yaml
      β€’ Specify a different path: --config /path/to/file"
```

### 4. Standard Flag Conventions
```
-h, --help      Show help
-v, --verbose   Verbose output
-q, --quiet     Suppress output
-V, --version   Show version
--json          Machine-readable output
--no-color      Disable colors
--dry-run       Preview without executing
--force         Skip confirmations
```

### 5. TTY Awareness
```go
// Detect if running interactively
if isatty.IsTerminal(os.Stdout.Fd()) {
    // Human-friendly output with colors
} else {
    // Machine-friendly JSON/plain text
}
```

### 6. Composability
```bash
# Your TUI should work in pipelines
mytool list --json | jq '.[] | select(.status == "active")'
mytool process < input.txt > output.txt
```

---

## Architecture Patterns

### Pattern 1: Model-View-Update (Elm Architecture)
Used by: **Bubbletea**, **Ratatui**

```
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                                          β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚  Model  │───▢│  View   │───▢│ UI   β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚       β–²                            β”‚     β”‚
β”‚       β”‚         β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”        β”‚     β”‚
β”‚       └─────────│ Update  β”‚β—€β”€β”€β”€β”€β”€β”€β”€β”˜     β”‚
β”‚                 β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜              β”‚
β”‚                 (Messages)               β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
```

### Pattern 2: Component Model (React-style)
Used by: **Ink**, **Textual**

```
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  App                                     β”‚
β”‚  β”œβ”€β”€ Header                              β”‚
β”‚  β”œβ”€β”€ MainContent                         β”‚
β”‚  β”‚   β”œβ”€β”€ Sidebar                         β”‚
β”‚  β”‚   └── ContentArea                     β”‚
β”‚  β”‚       β”œβ”€β”€ List                        β”‚
β”‚  β”‚       └── Detail                      β”‚
β”‚  └── Footer                              β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
```

---

## Common UI Patterns

### 1. Interactive List/Menu
```
β”Œβ”€ Select an option ────────────────────┐
β”‚                                       β”‚
β”‚   ● Create new project                β”‚
β”‚   β—‹ Open existing                     β”‚
β”‚   β—‹ Import from GitHub                β”‚
β”‚   β—‹ Settings                          β”‚
β”‚   β—‹ Exit                              β”‚
β”‚                                       β”‚
β”‚   ↑/↓: Navigate  Enter: Select  q: Quit
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
```

### 2. Form Input
```
β”Œβ”€ New Project ─────────────────────────┐
β”‚                                       β”‚
β”‚  Name: β–ˆmy-awesome-app                β”‚
β”‚  Template: [Next.js v14      β–Ό]       β”‚
β”‚  Include tests: [βœ“]                   β”‚
β”‚  Git init: [βœ“]                        β”‚
β”‚                                       β”‚
β”‚        [Cancel]  [Create Project]     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
```

### 3. Progress Display
```
β”Œβ”€ Installing dependencies ─────────────┐
β”‚                                       β”‚
β”‚  β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘  67%        β”‚
β”‚  Installing: @types/react             β”‚
β”‚                                       β”‚
β”‚  Elapsed: 12s  Remaining: ~6s         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
```

### 4. Split Pane / Dashboard
```
β”Œβ”€ System Monitor ──────────────────────────────────┐
β”‚ β”Œβ”€ Processes ──────────┐ β”Œβ”€ Resources ─────────┐ β”‚
β”‚ β”‚ PID   NAME     CPU   β”‚ β”‚ CPU  β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘ 80% β”‚ β”‚
β”‚ β”‚ 1234  node     45%   β”‚ β”‚ MEM  β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘ 60% β”‚ β”‚
β”‚ β”‚ 5678  chrome   23%   β”‚ β”‚ DISK β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘ 50% β”‚ β”‚
β”‚ β”‚ 9012  code     12%   β”‚ β”‚ NET  β–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 20% β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”Œβ”€ Logs ───────────────────────────────────────┐ β”‚
β”‚ β”‚ [INFO] Server started on port 3000           β”‚ β”‚
β”‚ β”‚ [WARN] Memory usage above 75%                β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
```

### 5. Confirmation Dialog
```
β”Œβ”€ Confirm ─────────────────────────────┐
β”‚                                       β”‚
β”‚  ⚠️  Delete all files in /tmp?        β”‚
β”‚                                       β”‚
β”‚  This action cannot be undone.        β”‚
β”‚                                       β”‚
β”‚        [Cancel]  [Delete]             β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
```

---

## Framework Quick References

### Bubbletea (Go)
See: `reference/bubbletea.md`

```go
package main

import (
    "fmt"
    tea "github.com/charmbracelet/bubbletea"
)

type model struct {
    choices  []string
    cursor   int
    selected map[int]struct{}
}

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.String() {
        case "q": return m, tea.Quit
        case "up": if m.cursor > 0 { m.cursor-- }
        case "down": if m.cursor < len(m.choices)-1 { m.cursor++ }
        case "enter": m.selected[m.cursor] = struct{}{}
        }
    }
    return m, nil
}

func (m model) View() string {
    s := "Select items:\n\n"
    for i, choice := range m.choices {
        cursor := " "
        if m.cursor == i { cursor = ">" }
        checked := " "
        if _, ok := m.selected[i]; ok { checked = "x" }
        s += fmt.Sprintf("%s [%s] %s\n", cursor, checked, choice)
    }
    return s + "\nPress q to quit.\n"
}

func main() {
    m := model{choices: []string{"Option 1", "Option 2", "Option 3"}, selected: make(map[int]struct{})}
    tea.NewProgram(m).Run()
}
```

### Ink (JavaScript/TypeScript)
See: `reference/ink.md`

```tsx
import React, { useState } from 'react';
import { render, Box, Text, useInput } from 'ink';

const App = () => {
  const [selected, setSelected] = useState(0);
  const items = ['Create project', 'Open existing', 'Settings', 'Exit'];

  useInput((input, key) => {
    if (key.upArrow) setSelected(s => Math.max(0, s - 1));
    if (key.downArrow) setSelected(s => Math.min(items.length - 1, s + 1));
    if (input === 'q') process.exit(0);
  });

  return (
    <Box flexDirection="column" padding={1}>
      <Text bold>Select an option:</Text>
      {items.map((item, i) => (
        <Text key={i} color={i === selected ? 'green' : 'white'}>
          {i === selected ? '> ' : '  '}{item}
        </Text>
      ))}
      <Text dimColor>↑/↓: Navigate  q: Quit</Text>
    </Box>
  );
};

render(<App />);
```

### Textual (Python)
See: `reference/textual.md`

```python
from textual.app import App, ComposeResult
from textual.widgets import Header, Footer, Static, Button
from textual.containers import Container

class MyApp(App):
    CSS = """
    Screen {
        layout: vertical;
    }
    #main {
        height: 1fr;
        border: solid green;
    }
    """

    BINDINGS = [("q", "quit", "Quit")]

    def compose(self) -> ComposeResult:
        yield Header()
        yield Container(
            Static("Welcome to My TUI App!", id="welcome"),
            Button("Get Started", id="start"),
            id="main"
        )
        yield Footer()

    def on_button_pressed(self, event: Button.Pressed) -> None:
        if event.button.id == "start":
            self.notify("Let's go!")

if __name__ == "__main__":
    MyApp().run()
```

### Ratatui (Rust)
See: `reference/ratatui.md`

```rust
use ratatui::{
    backend::CrosstermBackend,
    widgets::{Block, Borders, Paragraph},
    Terminal,
};
use crossterm::{
    event::{self, Event, KeyCode},
    terminal::{disable_raw_mode, enable_raw_mode},
};

fn main() -> Result<(), Box<dyn std::error::Error>> {
    enable_raw_mode()?;
    let mut terminal = Terminal::new(CrosstermBackend::new(std::io::stdout()))?;

    loop {
        terminal.draw(|frame| {
            let block = Block::default()
                .title("My TUI")
                .borders(Borders::ALL);
            let paragraph = Paragraph::new("Press 'q' to quit")
                .block(block);
            frame.render_widget(paragraph, frame.area());
        })?;

        if let Event::Key(key) = event::read()? {
            if key.code == KeyCode::Char('q') { break; }
        }
    }

    disable_raw_mode()?;
    Ok(())
}
```

---

## Project Scaffolding

When starting a new TUI project, create this structure:

### Go (Bubbletea)
```
my-tui/
β”œβ”€β”€ main.go           # Entry point
β”œβ”€β”€ model.go          # App state
β”œβ”€β”€ update.go         # Message handlers
β”œβ”€β”€ view.go           # UI rendering
β”œβ”€β”€ commands.go       # Side effects (API calls, file IO)
β”œβ”€β”€ styles.go         # Lipgloss styles
└── go.mod
```

### JavaScript (Ink)
```
my-tui/
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ index.tsx     # Entry point
β”‚   β”œβ”€β”€ App.tsx       # Main component
β”‚   β”œβ”€β”€ components/   # UI components
β”‚   β”‚   β”œβ”€β”€ Menu.tsx
β”‚   β”‚   β”œβ”€β”€ Form.tsx
β”‚   β”‚   └── Progress.tsx
β”‚   └── hooks/        # Custom hooks
β”œβ”€β”€ package.json
└── tsconfig.json
```

### Python (Textual)
```
my-tui/
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ __main__.py   # Entry point
β”‚   β”œβ”€β”€ app.py        # Main app class
β”‚   β”œβ”€β”€ screens/      # Different screens
β”‚   β”‚   β”œβ”€β”€ main.py
β”‚   β”‚   └── settings.py
β”‚   β”œβ”€β”€ widgets/      # Custom widgets
β”‚   └── styles.tcss   # Textual CSS
β”œβ”€β”€ pyproject.toml
└── tests/
```

### Rust (Ratatui)
```
my-tui/
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ main.rs       # Entry point
β”‚   β”œβ”€β”€ app.rs        # App state
β”‚   β”œβ”€β”€ ui.rs         # UI rendering
β”‚   β”œβ”€β”€ event.rs      # Event handling
β”‚   └── widgets/      # Custom widgets
β”œβ”€β”€ Cargo.toml
└── tests/
```

---

## Testing TUI Applications

### Snapshot Testing (Ink)
```tsx
import { render } from 'ink-testing-library';
import App from './App';

test('renders menu correctly', () => {
  const { lastFrame } = render(<App />);
  expect(lastFrame()).toMatchSnapshot();
});
```

### Textual Testing
```python
async def test_app():
    app = MyApp()
    async with app.run_test() as pilot:
        await pilot.click("#start-button")
        assert app.query_one("#status").renderable == "Started"
```

### Bubbletea Testing
```go
func TestModel(t *testing.T) {
    m := initialModel()
    m, _ = m.Update(tea.KeyMsg{Type: tea.KeyDown})
    if m.cursor != 1 {
        t.Errorf("expected cursor 1, got %d", m.cursor)
    }
}
```

---

## Ecosystem Tools

### Charm Suite (Go)
- **Lipgloss** - Styling and layout
- **Bubbles** - Pre-built components (spinners, text inputs, tables)
- **Glamour** - Markdown rendering
- **Wish** - SSH server for TUIs
- **VHS** - Record terminal GIFs

### Ink Ecosystem (JS)
- **ink-select-input** - Selection menus
- **ink-text-input** - Text inputs
- **ink-spinner** - Loading spinners
- **ink-table** - Tables
- **ink-gradient** - Gradient text

### Textual Ecosystem (Python)
- Built-in widgets: DataTable, Tree, Markdown, RichLog
- CSS-like styling with `.tcss` files
- DevTools for debugging

---

## Accessibility Considerations

1. **Screen reader support** - Provide text alternatives
2. **Color contrast** - Don't rely solely on color
3. **Keyboard navigation** - Everything must be keyboard-accessible
4. **Reduce motion** - Respect `REDUCE_MOTION` preference
5. **Clear focus indicators** - Show which element is selected

---

## Performance Tips

1. **Debounce rapid updates** - Don't redraw on every keystroke
2. **Virtual scrolling** - For long lists, only render visible items
3. **Lazy loading** - Load data as needed
4. **Efficient diffing** - Only update changed parts of the screen
5. **Background workers** - Don't block the UI thread

---

## Deployment

### Single Binary (Recommended)
```bash
# Go
go build -o mytui .

# Rust
cargo build --release

# Node (with pkg)
npx pkg . -o mytui

# Python (with PyInstaller)
pyinstaller --onefile src/__main__.py
```

### Distribution
- GitHub Releases with binaries for each platform
- Homebrew tap for macOS
- AUR package for Arch Linux
- npm publish for Node.js tools
- PyPI for Python tools
- crates.io for Rust tools

---

## Resources

- [Command Line Interface Guidelines](https://clig.dev/) - The bible of CLI UX
- [Charm](https://charm.sh/) - Go TUI ecosystem
- [Textual Docs](https://textual.textualize.io/) - Python TUI framework
- [Ink Docs](https://github.com/vadimdemedes/ink) - React for CLIs
- [Ratatui](https://ratatui.rs/) - Rust TUI library
- [Terminal Trove](https://terminaltrove.com/) - TUI inspiration gallery

Signals

Avg rating⭐ 0.0
Reviews0
Favorites0

Information

Repository
eddiebe147/claude-settings
Author
eddiebe147
Last Sync
1/18/2026
Repo Updated
1/16/2026
Created
1/17/2026

Reviews (0)

No reviews yet. Be the first to review this skill!