Skip to content

Interactive TUI ​

Run rho in a terminal to start an interactive coding session in the current directory.

bash
rho

Rho uses the current directory as its workspace. Tool access follows tools and workspace.

Start a session ​

Open a project and run Rho from the repository root:

bash
cd path/to/project
rho

To open the same session with the first prompt already sent:

bash
rho --prompt "summarize this repository"

This is still the interactive TUI. Use rho run when you want one answer and then exit. If you are not signed in yet, the text stays in the composer until you finish login and press enter.

Rho streams the assistant response as it works. Tool use appears inline so you can see commands, file reads, and edits as they happen. For persisted history and resume behavior, see sessions.

If you need auth or a model first, use /login and /model, or follow getting started.

Everyday controls ​

Send a prompt ​

Type a request and press enter to send it. Slash commands, pickers, and the inline shell stay available while MCP servers connect. A model prompt waits until those servers finish connecting or time out; Rho holds the turn and starts it for you once they settle, so you do not press enter twice. Press esc to take a held prompt back into the composer before it starts.

text
summarize this repository
text
add tests for the config parser
text
find where the TUI handles paste events

Use a multiline prompt when you need to paste or write a longer request. Type @ to open a workspace file picker, fuzzy-search paths, then press tab or enter to insert an @path reference. You can also double-click a path to insert it. The picker follows .gitignore, .ignore, and global Git ignore rules while still showing hidden workspace files that are not ignored.

Interrupt, steer, reset, or quit ​

  • Press esc to abort the current response without closing Rho. The provider request and active tool receive the same cancellation signal, partial assistant output remains in the session, and queued prompts are restored to the composer instead of running automatically.
  • Press enter while Rho is working to steer the run. Rho finishes every tool call from the current assistant turn, adds their results to context, then inserts the steering message before the next model request. Once applied, that text appears in the transcript as a user message.
  • Press alt-enter while Rho is working to queue a follow-up that starts after the current turn ends, instead of steering the live run. ctrl-enter does the same thing for terminals that bind alt-enter to fullscreen.
  • Press ctrl-r to reset the conversation history. The next message starts a new session.
  • Press ctrl-c to clear the current input line.
  • Press ctrl-c twice to quit.

Keyboard shortcuts ​

Most editing keys work the way they do in a normal terminal input. Run /help for a searchable overlay of the same shortcuts.

KeyAction
escAbort the current response and restore queued work, or hide the command palette when it is open
/ at startOpen the command palette
/helpOpen the keyboard shortcuts overlay
@Open workspace file path autocomplete
up / downRe-enter previous prompts from this and earlier sessions, or select a command or file while a picker is open
tabComplete the selected command or file path, or complete a workspace path in shell mode
ctrl-pCycle to the next pinned model. ctrl-shift-p cycles backward on terminals that report it. Does nothing when no models are pinned
Alt+SCycle and save output streaming: live → paragraph → off → live. Works during a turn; configurable as cycle_streaming_mode
enterSend a prompt, run a selected slash command, or steer after the current assistant turn while a response is running
alt-enterQueue the composer contents as a follow-up that runs after the current turn ends; while idle, insert a newline. ctrl-enter always works as a fallback for terminals that bind alt-enter to fullscreen (Windows Terminal, Windows Alacritty, WezTerm). Configurable as queue_prompt
alt-upPull the most recent queued prompt back into the composer for editing
ctrl-rReset conversation history
pageup / pagedownScroll the transcript viewport
ctrl-gOpen the current composer text in a non-empty $VISUAL, else $EDITOR
ctrl-endJump the transcript viewport back to the bottom
mouse wheelScroll the transcript viewport
left-click and dragSelect transcript text and copy it on release
right-clickPaste clipboard text into the composer
code block COPYCopy the full code block contents
ctrl-cClear input, then quit if pressed again

See Mouse for clicking pickers, prompts, panels, and the status line.

ctrl-g opens the current composer text in a non-empty $VISUAL, falling back to $EDITOR only when VISUAL is unset or empty, both while idle and while a response is running. Rho temporarily restores the normal terminal before starting the editor and resumes the TUI after the process exits. The editor receives expanded pasted text rather than any collapsed display marker. Rho removes one conventional final line ending from the edited file when it restores the composer. Set VISUAL or EDITOR to an executable path or a platform-native command line with arguments. Rho does not pick a default editor; if neither variable is set or non-empty, it warns with EDITOR is not set.

Text streaming ​

Open /config → Appearance → Output streaming and press Enter to cycle how assistant and reasoning text appears. Alt+S cycles the same saved preference, including during a turn:

  • live, the default, reveals text as it arrives.
  • paragraph reveals text through blank-line boundaries. Whitespace-only blank lines and CRLF line endings count; this does not parse Markdown structure.
  • off holds text until a message boundary, such as reasoning handing off to the answer, a tool handoff, or response completion. It does not wait for the entire agent run.

Switching modes reveals text already received through the normal Markdown renderer, then applies the new mode to subsequent text. Incomplete Markdown stays pending until it can render safely; switching does not end the message or split a code fence. It never hides text already displayed. Model generation, tool execution, tool previews, and cancellation keep running normally; the completed answer is the same. These controls work during a turn without submitting a prompt or restarting the response.

Cancellation and errors reveal held text. A retry discards the failed attempt's pending text.

Both the config menu and shortcut save [display].output_streaming in configuration, so the preference applies to later sessions. This does not change provider streaming settings.

Commands ​

Type / at the start of the message box to open the command palette. Keep typing to filter commands, use up and down to select, press tab to complete the selected command, and press enter to run it. With the mouse, click a row to select it, scroll over the palette to move the selection, and double-click a row to complete it like tab. A double click never runs a command. Most built-in slash commands run locally. Commands that start agent work say so below.

Suggestions reflect the current model's capabilities. /fast and its argument suggestions appear only for models that support fast mode, and switching models updates the suggestions immediately. You can still type a hidden command explicitly: unsupported actions explain why they cannot run. /fast off can disable the saved preference even on a model that does not support fast mode.

A single / as the first character opens the command palette. Any later / characters are treated as normal message text and do not reopen the palette.

CommandAction
/advisor [on|off]Toggle or set advisor mode, which gives the agent an advisor tool backed by a second model. /advisor on without an advisor model opens a picker first; the mode turns on once a model is selected, and esc leaves it off. Reasoning for the advisor model is set under /config → Agent behavior → Advisor reasoning when the model supports it. The choice saves to configuration and applies before the next turn.
/login [provider]Log in with a provider, the Claude Code runtime, or the Cursor Agent runtime. No args opens a picker (Claude Code is under Anthropic; Cursor is a top-level row); direct args target a single provider, /login claude-code, or /login cursor.
/logout [provider]Delete stored provider credentials, or sign out of Claude Code everywhere with /logout claude-code (after confirmation). /logout cursor is not available from Rho; run cursor-agent logout. No args opens a picker; direct args target a single provider.
/model [provider/model]Open a picker for models with available auth, or choose a provider/model and save it to configuration. Switching applies at once. If the conversation holds provider-native context the new model cannot use, a notice says what was dropped, and the next send opens a confirm-send modal: send anyway, compact first (compaction summarizes portable context but does not make native blocks sendable), or don't send. The picker opens on pinned models when any pin has auth. Press ctrl-o to switch between pinned and all models, and ctrl-p to pin or unpin the highlighted model.
/refresh-modelsRefresh cached model lists for every configured provider and redownload the models.dev catalog. Shortcut for /config → Providers → Refresh model lists (all) plus Refresh models.dev catalog.
/fast [on|off]Toggle or set fast mode for models that support it. The choice saves to configuration, appears as (fast) after the model name, and bills at a higher rate. Codex sends a priority service tier. xAI OAuth grok-4.7 sends grok-4.7-build-fast and stays selected as grok-4.7.
/resume [id]Resume a saved session by UUID or prefix. No args opens a picker for other sessions in the current workspace. In the picker, press d or Delete to remove a session after confirmation. If the current model cannot use the session's provider-native context, Rho asks whether to resume with the session model, compact with that model first, or continue on the current model.
/sessionsOpen the session manager for every directory. Sessions group under their directory, current directory first; worktrees of one Git repository share a section, and missing directories collect at the end. Press Enter on a session in the current directory to resume it, or on a directory row to narrow the list to that directory. Sessions from other directories remain available to inspect and delete, but must be resumed by starting Rho in their directory. Press d on a session to delete it, or on a directory row to delete the reviewed saved sessions in that directory, both after confirmation. The current session is never deleted.
/side [prompt]Open a side chat overlay that can see a frozen snapshot of this session (captured when the overlay first opens) and use read-only workspace tools (list_dir, read_file, grep, glob). User and plugin MCP are not attached. It does not write back to the session. Messages use the main transcript renderer, including Markdown in streamed replies and the same user-message styling. Click COPY on a code block to copy its source text. Tool activity shows names, not result cards. Empty /side opens the overlay, or closes it when already open (a running aside keeps going). /side <prompt> opens and sends. Esc cancels a running aside, or closes the overlay when idle. /new and resume discard it.
/btw [prompt]Alias for /side.
/treeNavigate turns and compaction states in the current session. Continuing from an older state creates a branch.
/workflowOpen the workflow list. Start a local workflow or saved plan in the background, watch a run as a dependency graph, or press d to delete a plan/run. The run id is appended to chat context and completion is delivered automatically. Reopen /workflow and press Enter on a run to watch; use arrows or hjkl to move between graph nodes.
/rewind [turn]Preview and restore native file-tool changes from a completed turn, then continue from that conversation state on a new branch. This experimental command requires behavior.experimental_workspace_rewind = true. It does not reverse shell, Git, process, network, database, or service effects. Conflicting paths stay unchanged.
/configOpen the config category browser for models, appearance, agent behavior, context limits, tools, and providers.
/permissions [bypass|auto|allow_edits|plan|supervised]Show or change the permission mode, saving it to configuration. Auto prompts for a classifier model if needed. Available between turns.
/infoOpen a single-pane overlay immediately with the running Rho version, provider, model, reasoning level, permission mode, advisor mode, and session usage (including session and latest-request cache hit rates, and re-billed cache misses). External runtime status, including Claude Code and Cursor Agent, and session tree facts fill in after the overlay opens. Press c to copy the report, drag to select text, or press Enter or Esc to close. The report does not stay in the transcript.
/changelog [latest]Show release notes for this installed version from the bundled changelog. /changelog latest fetches notes for the newest published release.
/compactImmediately summarize older conversation history to reduce future model context. This works even when auto-compaction is disabled. Auto-compaction runs the same job before a turn when the context is over the threshold. Both show a compact card; the composer stays usable. Press esc to cancel.
/goal [condition]Set a completion condition and start working immediately. Rho explicitly tells the agent that this is a goal-setting action, then evaluates the transcript after each turn and continues until the condition is met. Connection errors and other incomplete runs are retried automatically while the goal remains active. If only steps requiring user authority remain, the goal pauses as blocked and reports those steps. Run /goal for status, /goal resume after completing blocked steps, or /goal clear to cancel.
/skillsShow available workspace skills and insert a /skill:<name> command for one. Running the inserted command loads the skill through the skill tool before the model responds. Add text after the command to include extra instructions in the same turn.
/themePreview and apply a color theme. Lists the host terminal theme, built-in light/dark schemes, and custom files from ~/.rho/themes/. Moving the selection previews colors; Enter saves. See Theme.
/hooksReload lifecycle hooks and open a single-pane overlay showing what each one will run: the resolved argv, working directory, timeout, and environment. Also names any project hooks file ignored because the workspace is not trusted. Press Enter or Esc to close.
/agents [create]With no argument, reload agent definitions and browse them grouped by source (yours, workflow, shared, built in, internal). Each agent shows a fact sheet (runtime rho, claude-cli, or cursor; model policy; reasoning; tools; source file) and a short prompt excerpt. Enter edits agents under ~/.rho/agents or the project, configures the model of a reserved internal agent, and opens the full prompt read-only for everything else. /agents create [request] starts the guided agent creator when the active agent has skill, questionnaire, and save_agent.
/create-agent [request]Alias for /agents create.
/attachOpen a picker of subagents from this directory and watch one in place. See Activity rail.
/diffOpen a popup listing changed files under Staged, Unstaged, and Untracked, with the selected file's patch beside them. ↑↓ or Tab/Shift+Tab move between files, → scrolls the patch, and typing filters by path. Patches load per file on selection, and nothing is added to the transcript. A clean worktree opens the popup with a worktree clean notice.
/doctorOpen a single-pane diagnostics dashboard. Rows are grouped into Authentication, Providers, Runtimes, Workspace, and Extensions, each with a status marker (✓ ok, · info, ! warning, ✗ failure) and a hint under any issue. The overlay opens immediately with the instant checks; provider endpoints, the Claude Code binary and login, cursor-agent, and rtk are probed in the background and fill in as they answer, so it works during a model turn. Only the active auth mode warns on a missing key; other providers stay informational. Cursor Agent rows stay informational when the binary is missing or signed out. No secrets are displayed. Press Esc or Enter to close. The same checks run headlessly with rho doctor [--json]; see automation CLI.
/mcpList configured MCP servers for this session, including in-flight connects. Connecting servers are not treated as failures. /doctor includes the same MCP health row. See Model Context Protocol.
/limitsOpen a single-pane overlay with the usage windows reported by connected providers. Codex OAuth, Kimi Code OAuth, xAI OAuth, and OpenCode Go are supported when logged in; absent windows are omitted. The overlay opens immediately with cached or last-observed values, then fills in live windows as each provider responds. When Claude Code is signed in, Rho drives the claude TUI /usage panel over a PTY (token stays in Claude) and shows those windows live. Last-observed windows remain as fallback if the probe fails. Press esc or enter to close.
/usageAlias for /limits.
/spendOpen a single-pane overlay that summarizes every model request in the usage ledger on this machine: the equivalent API cost, a spend chart, and cost and token tables for models, providers, and purpose. Tab/Shift+Tab (or ←/→) switch between Today, 7 days, 30 days, and All time. It opens on Today, which charts spend per hour. Spend is split into actual (the cost the provider reported) and computed (tokens priced at today's cached models.dev rates when the provider reported none), so subscription usage shows its API equivalent rather than your bill. Models merge across routing prefixes (x-ai/grok-4.6 and grok-4.6 are one row). Prices come from the same models.dev lookup as the statusline (including a custom host's catalog_mode); a route with no price of its own borrows the same model's price from another provider. Each table shows its top five rows and folds the rest into one N more row. Built-in Ollama models show as local, rows with no price show —, and the summary counts unpriced requests. Reopening shows the last result at once while a fresh read runs. Press c to copy the visible range, or Enter or Esc to close. The ledger is opened read-only.
/export [path]Export the current session transcript. Formats: HTML (default), Markdown (.md), JSON (.json). Omit the path to write a timestamped file under ~/.rho/exports/ (or $RHO_HOME/exports/). A directory argument receives that default file name. The path extension selects the format. Existing files are not overwritten; choose a new path. HTML exports render assistant Markdown math (inline $...$ or \(...\), display $$...$$ or \[...\]) with KaTeX. Live TUI math uses a narrower TXM path; see Math rendering.
/copyOpen an output tree for the current conversation, preview an assistant message, and press Enter to copy it. Works while a response is running and with --no-save. Esc closes without copying.
/newStart a new session. Clears the transcript, composer, attachments, and active goal. The next message creates a new session folder. Unavailable while a model turn is running.
/clearAlias for /new.
/title <name>Rename the current session. Replaces any auto-generated title.
/helpShow keyboard shortcuts and composer controls in a searchable overlay.
/exitQuit the TUI.

Custom prompt templates loaded from prompt files or [prompt_templates] also appear in the command palette. Completing one inserts its prompt into the composer so you can add or edit text before sending.

Pickers ​

Some commands replace the message box with a picker. Use up and down to select, type to filter by case-insensitive regex, press tab to autocomplete the filter from the highlighted item, press enter to confirm, and press esc to cancel. In conversation and internal-agent model pickers, press ctrl-p to pin or unpin the highlighted model; pinned models are saved in config and shown first in both picker types. Press ctrl-o to switch the list between all authenticated models and pinned models only. /config starts with a short category browser. Its search matches the settings listed inside each category. Press enter to open a category and esc to return. Press space on an on/off setting to toggle it in place. Changes save at once and return to the same category so you can keep adjusting its settings; login workflows close the picker while credentials are entered or authorized.

Short confirmations and some credential prompts use an inline list instead of a filterable picker. The arrow marks the focused option, with its label in bold and its shortcut beside it. Explanations wrap beneath each label, and the list scrolls to keep the focused option visible in short terminals. Use Up/Down or Left/Right to move, Enter or Space to choose, or press an option's shortcut to choose it immediately. Unavailable options are dimmed and skipped. Esc cancels or returns to the parent picker.

/limits uses the same overlay chrome as those pickers, but as a single scrolling pane of usage bars rather than a two-column list. It is not a picker: up and down scroll, and enter or esc close it.

/side (and /btw) uses that same overlay chrome with its own transcript and prompt. Enter sends to the aside. Esc closes the overlay without cancelling its reply, so you can keep using the main chat while the aside runs in the background. Use /side or /btw again to return to its transcript and any unsent draft. Ctrl+C clears the aside's prompt first; with an empty prompt, it cancels only the running aside and does nothing when the aside is idle. Up and down scroll when the prompt is empty; letter keys always insert.

Login and models ​

/login, /logout, and /model behavior, including Claude Code and Cursor handoff, is on Authentication and models. Logging in does not normally switch the active model. If Rho started without usable auth, a successful login selects that provider's default model.

Press ctrl-p on a highlighted picker row to pin or unpin that model. Pins are stored in favorite_models and appear first, in pin order, in conversation and internal-agent pickers. From the composer, ctrl-p cycles that list forward, and ctrl-shift-p cycles backward on terminals that report it. Both are configurable as cycle_pinned_model and cycle_pinned_model_back under [keybindings]. The picker's pin toggle follows cycle_pinned_model. Its all/pinned toggle follows toggle_tool_output.

The picker opens on the pinned list when any pin has auth. ctrl-o switches between pinned and all authenticated models. That view lasts for the session. Unpinning the last visible pin while the pinned list is open returns the picker to all models. Direct /model provider/model and /model @alias still resolve against the full catalog.

Cycling pins maps an unsupported reasoning level to a supported one. An ordinary /model or picker switch still rejects an incompatible explicit level. A cycle requested during a provider turn applies when the queued switch lands.

/model stays available during a run. The current run keeps its model through the remaining steps and tool calls. Rho applies the queued change after the agent loop ends, before the next queued message. Selecting another model before then replaces the pending choice. If the finished conversation holds provider-native context the new model cannot use, the switch lands with an omission notice and each queued message is confirmed before it is sent.

Compaction does not make provider-native blocks sendable, and it does not prove a provider cache is warm. If handoff compaction fails or produces no reduction, Rho keeps the source model active.

Internal agent overrides: Internal agent models.

Mouse ​

Everything clickable reacts when you hover over it. In pickers, prompts, and palettes, a single click selects or focuses and a double click does what enter would. Buttons such as copy targets, status line fields, and an attachment's ✕ act on a single click.

  • Pickers: click a row to select it and double-click to choose it. The wheel scrolls the list.
  • Questionnaires, approvals, and confirmation prompts: click a choice to focus it and double-click to confirm it. Clicks are ignored until the prompt has been drawn, so a stray click cannot move an approval off Deny before you see it.
  • / and @ palettes: click a row to select it, and scroll over the palette to move the selection. Double-click completes the row like tab; it never runs a command.
  • Panels and side chat (/limits, /doctor, /hooks, /info, /spend, /side, and similar): drag across text to copy it, drag the scrollbar to scroll, and click a copy target to copy it.
  • Status line: click the model, provider, or reasoning to open /model; context, cost, or rate to open /info; permission mode to open its picker; desktop access to open /computer; and a sign-in warning to open /login.
  • Attachments: click the ✕ after a queued attachment's label to remove it. Clicking the preview or label does nothing, and a double click removes only one attachment.

Status line ​

Approval prompts are documented with permission modes. plan, auto, and supervised appear dim. bypass appears in warning style.

When the workspace is a Git repository with a GitHub remote and gh is on PATH, the status line shows the current branch's pull request number next to the path. Ready-to-merge PRs are green. Merge conflicts, failing checks, or requested changes are red.

While advisor mode is on, the top composer divider names the reviewing model, for example advisor: anthropic/claude-fable-5. It reads advisor: no model when the mode is on but no model is set. Nothing reviews the session in that state. Advice arrives as an advisor tool card.

While a goal is active, the status line shows ◎ /goal active with the evaluated turn count and elapsed time. A goal paused for user action shows ◎ /goal blocked. Sending a new message or running /goal resume asks the agent to verify the blocked steps before continuing.

Questionnaires ​

A form with several questions shows one question at a time. Up and Down move among that question's choices. Tab moves to the next question, and Shift+Tab moves to the previous question. Enter confirms the current question and moves forward, or submits on the last question. Esc cancels the form. The footer under the choices lists the keys that apply.

You can also use the mouse. Click a question's tab to show it, and click a choice to select it; on a multi-select question, each click toggles the choice. Double-clicking a single-select choice confirms it like Enter.

Confirmation prompts, such as deleting a session or granting desktop access, work the same way: click an option to focus it, and double-click it to confirm.

Questionnaire fallbacks ​

A questionnaire normally blocks until you submit or cancel it. You can opt in to timed fallback answers through /config → Agent behavior → Questionnaire timeout. Enter positive seconds or clear the field for Disabled. The setting is off by default and is captured when each form opens.

The model must supply a separate on_timeout plan; a preselected default is not enough. Timed forms show the remaining seconds, fallback answers, and the reason for proceeding. Any keyboard, paste, or mouse interaction pauses the countdown permanently for that form. Nothing automatically submits while you edit. Mouse movement counts as interaction, even without a click. Explicit submit still returns your answers with source: "user". Expiry returns the proposed fallback with source: "timeout_fallback" and a transcript notice, not a user message. Neither fallback answers nor silence grant authorization. Fallbacks are for safe, reversible decisions, never permissions, purchases, destructive actions, or other authorization.

Timeouts are serviced by the UI event loop, with input taking priority. Heavy event traffic can delay a fallback; it never makes it run early.

Activity rail ​

Live turns, background agents, and process jobs hang off a spinner at the bottom of the transcript. Click a row to attach or peek. Details: Activity rail.

Attachments ​

Paste images with ctrl+v when a host clipboard helper is available, or drop a filesystem path. Rho accepts PNG, JPEG, GIF, and WebP images and extracts text from common document types into a bounded attachment.

Details: Attachments.

Transcript display ​

The TUI owns the transcript viewport (use its scroll controls, not terminal scrollback). Headings, copy actions, jump-to-bottom, and stale-stream handling are documented separately.