Official agent skill

Vibe Rust Tui

by mistralai in mistralai/mistral-vibe

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

OfficialApache-2.0Auto-check passed

Install Vibe Rust Tui

skills CLI
$ npx skills add mistralai/mistral-vibe --skill vibe-rust-tui -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install mistralai/mistral-vibe vibe-rust-tui --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/mistralai/mistral-vibe.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/vibe-rust-tui .claude/skills/vibe-rust-tui && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
vibe-rust-tui
GitHub stars
5.1k
Token cost
~2.1k tokens
SKILL.md length
1,099 words
Files
1
Skills in repo
15
Repo updated
First seen
Licence
Apache-2.0

At a glance

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

  • Changing any screen
  • SKILL.md covers Shortcut hints, Keyboard navigation, Scrolling and Searchable lists, plus 3 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md
  • Keyboard shortcut

What it does

Vibe Rust Tui is an agent skill from mistralai/mistral-vibe, published by the product's own GitHub organization. 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 or scrolling, back/close behavior, search field, selection highlight, color, or onboarding/dialog copy in the Rust TUI.

Its SKILL.md is about 2.1k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It works with Rust and Mistral AI. The repository describes itself as: Minimal CLI coding agent by Mistral. The licence is Apache-2.0.

When your agent uses it

  • Changing any screen
  • Keyboard shortcut
  • List navigation
  • Back/close behavior

Example prompts

  • “/vibe-rust-tui”

What it can do on your machine

Read from SKILL.md and the folder at commit 4ae5c59. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md.

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Vibe Rust Tui loads about 2.1k tokens when it runs. Until then it costs about 76 tokens; SKILL.md has 1,099 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~76
When it runs · the whole SKILL.md, loaded when a task matches
~2.1k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from mistralai/mistral-vibe at commit 4ae5c59, republished under its Apache-2.0 licence (© mistralai). 1,099 words, ~2,107 tokens.

Download SKILL.mdSave it as .claude/skills/vibe-rust-tui/SKILL.md (or your agent's skills folder).
name
vibe-rust-tui
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 or scrolling, back/close behavior, search field, selection highlight, color, or onboarding/dialog copy in the Rust TUI.
metadata.display-name
Vibe Rust TUI
metadata.short-description
Hint, keyboard, navigation, search, list-cursor and color conventions for the Rust TUI
metadata.default-prompt
Use $vibe-rust-tui to follow the Rust TUI hint, keyboard, navigation, search, list-cursor and color conventions.

Vibe Rust TUI

UI conventions for vibe/cli-rust/. Every screen follows them so the TUI reads as one product. Process rules (porting from Python, scenarios, goldens) live in migrate-cli-to-rust; local code rules live in vibe/cli-rust/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

  • Every navigable list accepts j/k alongside ↑/↓ when no text field is focused. Match only plain keys (no Ctrl/Alt/Super) so Ctrl+J/Ctrl+K keep their editing meaning.
  • Show the navigation keys a screen actually handles: write ↑↓/jk only where j/k are wired.
  • Edges: ↑↓/jk (and ←→ across dialog options) wrap at both ends; PageUp/PageDown/Home/End clamp. Move through list_nav::wrap, or list_nav::wrap_selectable when some rows (section headers, notes, blanks) cannot take the cursor; never hand-roll saturating_sub/min(len - 1) for arrow moves. The only lists that do not wrap are the ones attached to the composer: Down past the newest queued prompt leaves queue mode, and Up at the top of the subagent list returns focus to the composer.
  • Back: Esc goes back exactly one level (field → list, detail → list, auth flow → its /mcp list) and closes only at the top level. Backspace edits text and is never a navigation key. A nested view's footer ends with hints::BACK (Esc back); a top-level view's footer ends with hints::CLOSE or hints::CANCEL.
  • Digits: a row's digit shortcut exists if and only if the row displays its number (1. Trust folder). Pressing it is the same as moving to the row and pressing Enter. Parse it with list_nav::digit; never accept digits on unnumbered rows, and never number rows that do not accept their digit.

Scrolling

  • A scrolling list keeps the highlighted option in view through ui/list_scroll.rs follow, passing which lines are options; never write its own scroll = selected reconciliation. It moves the viewport the least and brings the option's non-selectable neighbours along: its section header above it, the list's leading lines for the first option, the trailing lines for the last one. Wrapping from the bottom back to the top therefore always shows the very top of the list.
  • Mouse-wheel scrolling sets the list's free_scroll and skips follow until the next keyboard move; it only clamps the offset.

Searchable lists

  • Use search_field::Search, search_field::handle_key and search_field::paste for any filterable list, and build its footer with search_field::hints.
  • The model: lists open with the list focused; / focuses the field; typing filters live (letters, including j/k, go to the field); ↑↓, PageUp/PageDown and Enter keep acting on the list while the field is focused; Esc first leaves the field (the filter stays), then clears the filter, then closes the screen.
  • Do not add other entry points into search (Tab, Left, type-to-search on open). Do not make Enter only "apply" the filter: it acts on the highlighted item.
  • The list footer includes hints::SEARCH.
  • The search row sits directly under the title, followed by one blank row, and reads / placeholder (Search plugins, Search settings). It is always visible in the list view and hidden in detail views. Draw it only with ui/search_field.rs draw_row, which owns the / and the field's indent; never put a search field at the bottom of a list or in the footer. The project picker is the one exception: its labelled Search projects: field shares the form Field of its create view.
Show full SKILL.md (366 more words)Show less

Selection

  • The focused row is the list-cursor bar: ui/list_cursor.rs style() across the full row width (block-cursor colors, bold). No glyph cursors (›, ▸, >) for focus.
  • Draw the bar only through list_cursor: paint(f, area) fills a row area, styles(highlighted) / styles_on(highlighted, bg) give the (text, dim) styles of a row, marker_style styles the current-value marker on it. Never read theme::block_cursor_bg/block_cursor_fg outside ui/theme/ and ui/list_cursor.rs (a unit test enforces it). Text-field carets are not list cursors: use theme::block_caret (TextArea-like fields) or theme::fixed::input_caret (compact Input-like fields).
  • Horizontal options (dialog buttons) render each option as a label chip; the selected chip takes list_cursor::style(). Keep labels at the same columns when switching selection.
  • The current value (the active model, theme, level, layer or session) is marked with list_cursor::marker(true) (› ) in list_cursor::current_color(), in a two-column slot that stays blank (list_cursor::BLANK) on other rows.
  • (String, Style) row renderers paint the full-width bar for rows where list_cursor::is_bar holds, and keep a span's own background instead of overwriting it.

Colors

  • Every color value lives in src/ui/theme/: theme-dependent colors in the theme palettes (theme::foreground(), theme::muted_style(), ...), fixed brand and terminal colors in ui/theme/fixed.rs (ORANGE, LOADING_GRADIENT, onboarding colors, sgr::* escape codes, the Monokai/Alabaster named palette via fixed::named), syntax colors in ui/theme/syntax.rs. A fixed color such as the brand orange is fine, but it is defined once there and imported everywhere else.
  • Outside src/ui/theme/, never write Color::Rgb(..), Color::Indexed(..), a named Color::* variant or a raw SGR color code. When a screen needs a new color, add a named constant or theme accessor first. tests/units/color_literals.rs fails on any literal outside the theme module (only update_prompt/ansi.rs, which converts any Color to SGR, and test code are exempt).

Verification

  • Any change to a hint, a key, a list behavior (wrap, back, digits, scroll, search) or a selection style is user-visible: update the affected client-e2e scenarios (screen_contains, key sequences, mouse coordinates) and regenerate their goldens following migrate-cli-to-rust. A new behavior gets its own scenario (for example mcp/mcp_wrap_scroll).
  • Shared helpers carry their own unit tests (tests/units/list_nav.rs, list_scroll.rs, search_field.rs); extend them when a helper changes instead of testing the rule screen by screen.
  • tests/units/color_literals.rs guards the color and list-cursor rules. Do not add exemptions to make it pass: move the color into src/ui/theme/ or route the bar through list_cursor.

© mistralai, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .agents/skills/vibe-rust-tui of mistralai/mistral-vibe.

Open the folder on GitHubat commit 4ae5c59

Compare with similar skills

Vibe Rust Tui next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Vibe Rust Tui compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Vibe Rust Tui this skillmistralai/mistral-vibe5.1k—~2.1kAutomated safety check: PassApache-2.0
Update V8 Versionopeninterpreter/openinterpreter69k2 repos~845Automated safety check: PassApache-2.0
Firecrawl Page Scrape Integrationfirecrawl/firecrawl190k1 repos~944Automated safety check: PassISC
Migrate Core Code to Submodulestinyhumansai/openhuman42k—~2.6kAutomated safety check: PassGPL-3.0
Rust TDD Workflowrtk-ai/rtk83k—~753Automated safety check: NotesApache-2.0
OpenLogi macOS Permissions TriageAprilNEA/OpenLogi23k—~2.5kAutomated safety check: NotesApache-2.0

Similar skills

  • Update V8 Version

    openinterpreter/openinterpreter

    Bumps the pinned v8 and rusty_v8 versions in Codex, validates the release-candidate path with the v8-canary check, and traces failures to upstream build changes.

    69k GitHub starsUsed in 2 repos~845 tokens
    DevOps & CloudAuto-check passed
  • Adds Firecrawl's /scrape endpoint to application code to pull markdown, HTML, links, screenshots or structured data from a single known URL.

    190k GitHub starsUsed in 1 repo~944 tokens
    Data & AnalyticsAuto-check passed
  • Migrate Core Code to Submodules

    tinyhumansai/openhuman

    Plans and carries out moving non-host-specific code and its tests from the OpenHuman core into vendored tiny submodule libraries, then releases the submodule and re-pins the host.

    42k GitHub stars~2.6k tokensUpdated today
    DevelopmentAuto-check passed
  • Enforces red-green-refactor for Rust work, with idiomatic test patterns, a naming convention and a pre-commit gate of cargo fmt, clippy and test.

    83k GitHub stars~753 tokensUpdated yesterday
    Testing & QAAuto-check: notes
  • Decides whether an OpenLogi device problem on macOS is a privacy-permission (TCC) problem, using agent log lines, and says which identity needs which grant.

    23k GitHub stars~2.5k tokensUpdated today
    DevelopmentAuto-check: notes
  • Guide for writing idiomatic Rust code based on Apollo GraphQL's best practices handbook.

    5.6k GitHub starsUsed in 3 repos~1.1k tokens
    DevelopmentAuto-check passed

More from mistralai/mistral-vibe

All 15 skills in this repo
  • Mistral Vibe Plugin Creator

    mistralai/mistral-vibe

    Official

    Shows how to build a Vibe plugin package in the Agent Plugins 1.0 format, with a plugin.json manifest and optional skills, MCP servers, hooks and other components.

    5.1k GitHub stars~3.1k tokensUpdated yesterday
    Auto-check passed
  • Create Vibe Feature

    mistralai/mistral-vibe

    Official

    Guides feature work in the Mistral Vibe Python CLI so each change lands in the right module and matches the project's architecture decision records.

    5.1k GitHub stars~1.4k tokensUpdated yesterday
    Auto-check passed
  • Official

    Plans which analytics events and properties a new feature needs, checks them against the existing event registry, and verifies them per environment.

    5.1k GitHub stars~2.2k tokensUpdated yesterday
    Auto-check passed
  • Vibe Worktree Manager

    mistralai/mistral-vibe

    Official

    Creates, reuses and cleans up git worktrees under a shared vibe home directory, with per-repo buckets, claim records and dirty-state checks before removal.

    5.1k GitHub stars~1.2k tokensUpdated yesterday
    Auto-check passed
  • Write Vibe ADR

    mistralai/mistral-vibe

    Official

    Creates or updates concise Architecture Decision Records for the Mistral Vibe CLI and registers each one in the AGENTS.md decisions table.

    5.1k GitHub stars~942 tokensUpdated yesterday
    Auto-check passed
  • Write Vibe Tests

    mistralai/mistral-vibe

    Official

    Guides writing or refactoring tests for the Mistral Vibe CLI agent so they check behavior through stable boundaries, like tool invocation or saved session shape, instead of internal calls.

    5.1k GitHub stars~1.2k tokensUpdated yesterday
    Auto-check passed

Works with

Questions about Vibe Rust Tui

What does Vibe Rust Tui do?

Ratatui UI conventions for the Mistral Vibe Rust CLI (vibe/cli-rust). Vibe Rust Tui is an agent skill from mistralai/mistral-vibe, published by the product's own GitHub organization. Ratatui UI conventions for the Mistral Vibe Rust CLI (vibe/cli-rust).

When should I use Vibe Rust Tui?

Vibe Rust Tui fits situations like: changing any screen; keyboard shortcut; list navigation; back/close behavior.

How do I install Vibe Rust Tui in Claude Code?

Run `npx skills add mistralai/mistral-vibe --skill vibe-rust-tui -a claude-code`. Or copy the skill folder (.agents/skills/vibe-rust-tui in mistralai/mistral-vibe) into .claude/skills/vibe-rust-tui in your project. Claude Code loads it when a task matches its description.

How do I install Vibe Rust Tui in Codex?

Run `npx skills add mistralai/mistral-vibe --skill vibe-rust-tui -a codex`. Or copy the skill folder (.agents/skills/vibe-rust-tui in mistralai/mistral-vibe) into .agents/skills/vibe-rust-tui in your project. Codex loads it when a task matches its description.

Can I use Vibe Rust Tui in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add mistralai/mistral-vibe --skill vibe-rust-tui -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/vibe-rust-tui, .gemini/skills/vibe-rust-tui, .github/skills/vibe-rust-tui and .opencode/skills/vibe-rust-tui in your project.

What does Vibe Rust Tui need to run?

SKILL.md names no scripts, command-line tools or credentials: Vibe Rust Tui is instructions for the agent only.

Does Vibe Rust Tui access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Vibe Rust Tui safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Vibe Rust Tui use?

Vibe Rust Tui is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Vibe Rust Tui use?

About 2.1k tokens (SKILL.md is roughly 8.4k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Vibe Rust Tui?

Skills that share tags, products or a category with Vibe Rust Tui: Update V8 Version (openinterpreter/openinterpreter, 69k stars), Firecrawl Page Scrape Integration (firecrawl/firecrawl, 190k stars), Migrate Core Code to Submodules (tinyhumansai/openhuman, 42k stars) and Rust TDD Workflow (rtk-ai/rtk, 83k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Vibe Rust Tui?

mistralai (a GitHub organization, an official publisher) maintains it in mistralai/mistral-vibe, which has 5,087 GitHub stars. The repository holds 15 skills in this directory. The repository was last updated on October 9, 2026.

Source: mistralai/mistral-vibe on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.