# Vibe Rust Tui

Ratatui UI conventions for the Mistral Vibe Rust CLI (vibe/cli-rust).

- Repository: https://github.com/mistralai/mistral-vibe (5270 stars)
- Category: Design
- License: Apache-2.0
- Last updated: 2026-10-30
- Runs scripts: no, instructions only

## Install

Claude Code: `npx skills add mistralai/mistral-vibe --skill vibe-rust-tui -g -a claude-code -y`
Codex: `npx skills add mistralai/mistral-vibe --skill vibe-rust-tui -g -a codex -y`
Cursor: `npx skills add mistralai/mistral-vibe --skill vibe-rust-tui -g -a cursor -y`
Gemini CLI: `npx skills add mistralai/mistral-vibe --skill vibe-rust-tui -g -a gemini-cli -y`

## Description

Ratatui UI conventions for the Mistral Vibe Rust CLI (vibe/cli-rust). Use when adding or changing any screen, list, picker, footer hint, keyboard shortcut, list navigation, scrolling or mouse clicks, back/close behavior, search field, selection highlight, color, or onboarding/dialog copy in the Rust TUI.

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# Vibe Rust TUI

UI conventions for `vibe/cli-rust/`. Every screen follows them so the TUI reads as one product. Local code rules, scenarios and goldens live in `vibe/cli-rust/AGENTS.md` and `client-e2e/AGENTS.md`.

## Shortcut hints

- Name keys and actions only through `src/hints.rs`: `key::*`, `action::*` and the shared pairs (`hints::NAVIGATE`, `SELECT`, `SEARCH`, `CANCEL`, `CLOSE`, `BACK`). Never write a key or action as a string literal at a call site. A single letter key (`"d"`, `"r"`) is fine as long as its action comes from `action::*`. When a key or verb is missing, add it to `src/hints.rs`.
- A hint is an unpadded `(key, action)` pair (`hints::Hint`). The renderer owns all spacing; never bake spaces into a label.
- Wording: actions are lowercase verbs (`navigate`, `select`, `close`); keys keep their canonical casing (`Enter`, `Esc`, `Ctrl+C`, `Backspace`). Combined keys use `/` (`Space/Enter`, `Esc/Ctrl+C`).
- Vertical navigation is `key::NAV` (`↑↓/jk`) whenever j/k work; use `key::ARROWS` (`↑↓`) only where a focused text field owns the letters. Horizontal navigation is `key::LEFT_RIGHT` (`←→`).
- Footers read `key action  key action`, ending with the Esc hint. Inline status lines (loading line, narrator) are the one exception and read `key to action`.
- Render every footer through `ui/hint_line.rs` (`draw`, `draw_clipped`, `line`, `spans`, `styled`): they apply the shared key/action styles and clip to the box. Never place hint text with hardcoded x offsets or custom key styles. Center a hint with `hints::width`.
- Onboarding and dialogs follow the same footer form (`Enter continue`, `Esc back`), not sentences like "Press Esc to go back".

## Keyboard navigation

The rest: https://github.com/mistralai/mistral-vibe/blob/HEAD/.agents/skills/vibe-rust-tui/SKILL.md
