Skip to main content

Overview

RCLI’s interactive TUI (Terminal User Interface) provides a rich dashboard for voice and text interaction, model management, action browsing, benchmarking, and real-time performance monitoring.

Push-to-Talk

Hold SPACE to record, release to process

Live Metrics

Real-time hardware and performance stats

Model Browser

Download and switch AI models on the fly

Action Manager

Browse, enable/disable, and test 43 macOS actions

Launching the TUI

rcli
The TUI launches immediately and displays:
  • Conversation area - Chat history with user/RCLI messages
  • Input prompt - Type text commands or press SPACE for voice
  • Status bar - Pipeline state, model info, performance metrics
  • Hardware monitor - CPU, GPU, RAM, audio level (live updates)

Keyboard Shortcuts

Main Interface

KeyActionDescription
SPACEPush-to-talkHold to record voice, release to transcribe and process
ENTERSend textSubmit typed text command to LLM
ESCStop/QuitStop current processing or quit TUI
↑/↓HistoryNavigate command history (like shell)
TToggle traceEnable/disable tool call trace (inline debugging)

Panel Shortcuts

KeyPanelDescription
MModelsBrowse, download, and switch LLM/STT/TTS models
AActionsBrowse, enable/disable, and execute macOS actions
BBenchmarksRun performance benchmarks (STT, LLM, TTS, E2E, tools, RAG)
RRAGIngest documents, clear index, view stats
DCleanupDelete unused models to free disk space
XAboutShow version, engine info, license
QQuitExit TUI
All panels are non-blocking. Press ESC to close a panel and return to the conversation.

Push-to-Talk Workflow

1

Press and Hold SPACE

The status bar shows [RECORDING] and a live waveform animation appears.Audio is buffered to the capture ring buffer while you speak.
2

Speak Your Command

Speak naturally. The waveform visualizer shows your voice activity in real-time.Silero VAD runs continuously to detect speech and filter silence.
3

Release SPACE

Recording stops. The TUI shows [TRANSCRIBING…].Audio is sent to Whisper/Parakeet for offline transcription (~44ms latency).
4

Transcript Appears

The transcribed text is displayed in the conversation area as a user message.Status changes to [THINKING…] as the LLM processes your query.
5

LLM Response Streams

The LLM’s response is displayed token-by-token as it generates.If tool calls are detected, they execute and results are fed back to the LLM.
6

TTS Playback

Status changes to [SPEAKING]. The response is synthesized and played.You can press ESC to interrupt playback at any time.

Waveform Visualizer

While recording, the TUI displays a live ASCII waveform:
[RECORDING] █▄▀█▄▀█▄ 0.4s
The waveform shows audio level (RMS) and recording duration.
The waveform helps you confirm your mic is working and adjust speaking volume.

Text Input

Type a command at the prompt and press ENTER:
> open Safari
The LLM processes the text (no STT), executes tool calls, and responds.

Interactive Commands

Special commands for TUI interaction:
CommandAction
helpShow keyboard shortcuts
clearClear conversation history
modelsOpen Models panel
actionsOpen Actions panel
benchOpen Benchmarks panel
infoShow engine information
quitExit TUI

Models Panel (M)

Press M to open the Models browser:
  • ↑/↓ - Navigate model list
  • ←/→ - Switch between LLM/STT/TTS tabs
  • ENTER - Download or switch to selected model
  • D - Delete selected model (if installed)
  • ESC - Close panel

Model States

StateIndicatorDescription
Active[✓]Currently loaded model
Installed[*]Downloaded but not active
Available[ ]Not yet downloaded

Hot-Swap

Select a model and press ENTER to switch at runtime:
  1. Current LLM is unloaded
  2. New model is loaded from disk
  3. Model profile is detected
  4. System prompt is re-cached
  5. Selection is persisted to config
Hot-swap takes 500-1500ms depending on model size. Conversation history is preserved.

Actions Panel (A)

Press A to browse and manage the 43 macOS actions:
  • ↑/↓ - Navigate action list
  • SPACE - Toggle enable/disable
  • ENTER - Execute action (prompts for arguments)
  • I - Show action details (parameters, examples)
  • ESC - Close panel (changes are auto-saved)

Action States

StateIndicatorDescription
Enabled[✓]Available to LLM
Disabled[ ]Hidden from LLM

Direct Execution

Select an action and press ENTER to execute it directly:
  1. TUI prompts for JSON arguments
  2. Action executes synchronously
  3. Result is displayed (success/fail + output)
Use this to test actions without involving the LLM.

Benchmarks Panel (B)

Press B to run performance benchmarks:

Available Suites

Measures transcription latency and real-time factor:
  • Load test audio (10 seconds)
  • Transcribe 100 times
  • Report avg latency, RTF, throughput

Running Benchmarks

  1. Select a suite (or “All”)
  2. Press ENTER to start
  3. Progress bar shows completion
  4. Results are displayed in a table
  5. Export to JSON with S (save)

RAG Panel (R)

Press R to manage document indexing:

Options

  • Ingest Documents - Select directory to index
  • Clear Index - Delete RAG index and unload retriever
  • Index Status - Show chunk count, index size, memory usage

Drag-and-Drop

In the TUI, drag a file or folder from Finder into the terminal:
  1. TUI detects the drop event (reads file path from stdin)
  2. Automatically runs rag ingest on the path
  3. Loads the index for immediate querying
This is the fastest way to query a document - just drag, drop, and ask.

Cleanup Panel (D)

Press D to free disk space by deleting unused models:
  1. Shows all installed models with sizes
  2. Mark models for deletion with SPACE
  3. Press ENTER to confirm deletion
  4. Models are removed from ~/Library/RCLI/models/
Deleted models must be re-downloaded to use again. The active LLM/STT/TTS cannot be deleted.

Status Bar

The bottom status bar shows:

Left Side

  • Pipeline State: IDLE / LISTENING / THINKING / SPEAKING / INTERRUPTED
  • Active Models: LLM: qwen3-0.6b | STT: whisper-base | TTS: piper-lessac

Right Side

  • Performance: TTFT: 22ms | Tok/s: 159 | Latency: 131ms
  • Context: Tokens: 1,234 / 4,096
  • Audio Level: Mic: ███░░░░ (0.4)

Hardware Monitor

The TUI displays live hardware stats:
CPU: [=========>     ] 64%  (8P + 4E cores)
GPU: [============>  ] 82%  (Metal: 30 cores)
RAM: [======>        ] 42%  (15.2 / 36.0 GB)
Mic: [====>          ] 28%  (RMS level)
Updates every 500ms using:
  • CPU: sysctl hw.activecpu, kern.cp_time
  • GPU: Metal Performance Counters (IOKit)
  • RAM: mach_vm_statistics
  • Mic: Ring buffer RMS from CoreAudio

Tool Call Trace (T)

Press T to toggle tool call tracing. When enabled, every tool call is shown inline:
> open Safari
  ~ [TRACE] Tool call: open_app({"app_name": "Safari"})
  ~ [TRACE] open_app -> OK: {"success": true, "output": "Opened Safari"}
  RCLI: Done! Safari is now open.
Use Cases:
  • Debug why an action failed
  • Understand how the LLM routes requests
  • Evaluate tool-calling accuracy
  • Learn model-specific tool formats
Combine with rcli bench --suite tools to benchmark tool-calling across all LLMs.

TUI Architecture

The TUI is built with FTXUI v5.0.0, a modern C++ terminal UI library.

Key Components

// From src/cli/tui_app.h
class TUIApp {
    ftxui::ScreenInteractive screen_;  // Terminal screen
    ftxui::Component input_;           // Text input field
    ftxui::Component conversation_;    // Scrollable chat area
    ftxui::Component status_bar_;      // Bottom status
    ftxui::Component panels_;          // Modal panels (models, actions, etc.)
};

Event Loop

The TUI runs a non-blocking event loop:
while (running) {
    // Handle keyboard input
    if (space_pressed) start_recording();
    if (enter_pressed) send_message();
    
    // Update hardware stats (500ms interval)
    update_cpu_gpu_ram();
    
    // Render frame
    screen_.PostEvent(ftxui::Event::Custom);
}
The TUI is fully responsive and never blocks. You can interrupt LLM generation or TTS playback with ESC at any time.

Next Steps

Interactive Mode

Complete guide to TUI keyboard shortcuts

Models

Learn about all 20+ AI models available

Actions

Browse all 43 macOS actions

Benchmarking

Run performance benchmarks

Build docs developers (and LLMs) love