<!-- Markdown mirror. Canonical: https://empryo.com/docs/surfaces/tui -->

# Terminal UI

> The interactive Empryo TUI: keybindings, the chat input, tabs, panels, the status bar, forge modes, mouse support, and the embedded Neovim editor.

![The terminal UI: a conversation with tool calls, the status line, and the composer.](https://empryo.com/screenshots/terminal.webp)

*The terminal UI: a conversation with tool calls, the status line, and the composer.*

Run `empryo` in a repository and the full terminal UI opens: a chat thread, a live status bar, up to five tabs, and dozens of panels. All keyboard-driven, all over a live [Genome](/docs/concepts/genome). It is built on OpenTUI (React for the terminal).

## Keybindings

Global shortcuts work from the chat view. When a panel or modal is open, only `Ctrl+C` stays live.

| Keys | Action |
|------|--------|
| `Ctrl+K` / `Ctrl+H` | Open the command palette (search every command). |
| `Ctrl+L` | Switch the LLM model. |
| `Ctrl+D` | Cycle the [forge mode](#forge-modes). |
| `Ctrl+S` | Browse and install skills. |
| `Ctrl+G` | Git menu. |
| `Ctrl+P` | Browse and restore sessions. |
| `Ctrl+E` | Toggle the [editor](#embedded-neovim) panel. |
| `Ctrl+T` | New tab. |
| `Ctrl+W` | Close the current tab. |
| `Ctrl+N` | New session (saves the current one first). |
| `Ctrl+1`…`Ctrl+9`, `Ctrl+0` | Switch to tab N (`Ctrl+0` = tab 10). |
| `Ctrl+[` / `Ctrl+]` | Previous / next tab. |
| `Ctrl+B` | Rewind to the previous checkpoint (code + conversation). |
| `Ctrl+F` | Step forward / return to live. |
| `Ctrl+X` | Abort the running generation. |
| `Ctrl+O` | Expand or collapse all code and reasoning blocks. |
| `Ctrl+C` | Copy the selection, or exit when there is none. |
| `Ctrl+Shift+C` | Copy the selection (never exits). |
| `Meta+R` | Open the error log (`Alt+R` on Linux). |

The checkpoint keys are the [time machine](/docs/tools/checkpoints): every prompt is a git-tagged checkpoint, so `Ctrl+B` / `Ctrl+F` move code and chat together.

### Chat input

| Keys | Action |
|------|--------|
| `Enter` | Submit the prompt. |
| `↑` / `↓` | Prompt history (when the cursor is on the first / last row). |
| `Tab` / `Shift+Tab` | Cycle tabs (when no autocomplete is open). |
| `Ctrl+R` | Fuzzy-search prompt history. |
| `Ctrl+V` / `Alt+V` | Paste an image from the clipboard as an attachment. |
| `Alt+S` / `Alt+P` | Stash the current draft / pop the most recent one. |
| `@` | Mention a file, opens a fuzzy file picker. |
| `/` | Start a slash command, with inline autocomplete. |

## Forge modes

The mode shapes how the agent works. Cycle with `Ctrl+D` or set one with `/mode`. The active mode persists per project.

| Mode | Behavior |
|------|----------|
| `default` | Implements directly. |
| `architect` | Read-only. Designs and analyzes: current architecture, proposal, risks, recommendation. |
| `socratic` | Read-only. Investigates, then asks probing questions before implementing. |
| `challenge` | Read-only. A constructive adversary that challenges assumptions. |
| `plan` | Research and planning. Produces a plan and confirms before executing; approval continues in auto. |
| `auto` | Continuous autonomous execution. Destructive actions still confirm. |

Read-only modes keep the full tool set but refuse edits and shell writes at execution time.

## Tabs

Up to **five** tabs run side by side, each its own conversation lane on the same repository. They share the Genome and memory and coordinate file edits through [cross-tab claims](/docs/agents/cross-tab) so two tabs never clobber the same file silently.

- `Ctrl+T` opens a tab (names it first), `/tab new` works too.
- `Ctrl+W` closes the current tab, a busy tab asks first. The last tab can't be closed.
- `Ctrl+1`, `9`, `Ctrl+[` / `Ctrl+]`, or clicking the tab bar switch tabs.
- `/tab rename <name>` renames, drag or `moveTab` reorders. The name is persisted immediately, so it survives quitting mid-session and reappears on the desktop and in [Hearth](/docs/tools/hearth) chats.

All tabs persist into one session, each owning a slice, reopen and your tabs come back.

## Panels and modals

Everything beyond the chat thread is a panel. Open the command palette (`Ctrl+K`) to reach any of them by name, or use the slash command shown.

#### Model picker

`Ctrl+L` or `/models`. Pick a provider and model, with live availability. On [LLM Gateway](/docs/providers/overview#llm-gateway) rows, `Ctrl+R` opens the route chooser, pick which upstream vendor serves the model, cheapest first.

#### Command palette

`Ctrl+K`, fuzzy-search every command and panel.

#### Sessions

`Ctrl+P` or `/session history`, browse and restore past sessions.

#### Skills

`Ctrl+S` or `/skills`, search, install, and load skills.

#### Git

`Ctrl+G` or `/git`, status, diff, commit, branch, stash, and more.

#### Router

`/router`, assign a different model to each task slot.

#### MCP

`/mcp`, connected MCP servers, their tools, and reconnect.

#### LSP

`/lsp`, install, restart, and inspect language servers.

#### Genome

`/genome`, the code graph status: files, symbols, ranking.

#### Memory

`/memory`, browse, pin, and clear cross-session memory.

#### Status dashboard

`/status` or `/context`, tokens, context window, dispatch, system health.

#### Terminals

`/terminals`, a floating terminal manager.

There are over thirty panels in all. The full set is reachable from the command palette and the [command reference](/docs/reference/commands).

## Status bar

The header and footer keep live telemetry in view:

- **Model**, provider and model, with a `proxy›` or `gateway›` prefix when routed.
- **Git**, branch with a `*` dirty marker, green when clean, amber when dirty.
- **Mode**, the active forge mode badge (single-tab) or per-tab badges (multi-tab).
- **Context bar**. A gauge of context-window usage that turns warning-toned past 50% and red past 85%, a compaction spinner, and a checkpoint-browsing indicator.
- **Plan meter**, on a flat-rate model, the same gauge drawn for whatever meters it: a [relay subscription window](/docs/providers/proxy) on `proxy/*`, a [Copilot monthly allowance](/docs/providers/copilot#usage-and-quota) on `copilot/*`. One slot, following the model, how much of the cap gating it is spent, and when it resets.
- **Cost**, running session cost (or `FREE` / `Local` for local models), greener when cache hits are high.

The footer also rotates keybinding hints and discovery tips.

## Mouse support

- Click and drag to select text. The selection is copied (OSC-52 + native clipboard). Right-click copies and clears.
- The scroll wheel scrolls the chat with momentum and sticks to the bottom on new output.
- Click the tab bar to switch, close, or open tabs.
- Click inside the editor pane to focus it, click the chat to focus back.

## Computer use

`/computer` lists what can be driven right now, displays, apps and windows, browser tabs, 
with the OS permissions each backend still needs and every live session. `/computer stop`
releases input immediately, `/computer teach` records a workflow by demonstration. The full
model is in [computer use](/docs/tools/computer-use).

## Embedded Neovim

`Ctrl+E` opens a real Neovim instance beside the chat, connected over msgpack-RPC. It is an opt-in [add-on](/docs/tools/addons) (`empryo addon install neovim`).

- The agent and the editor share state: AI edits trigger a buffer reload, and the agent can drive the editor through the [editor tool](/docs/tools/editor). Navigate, rename, format, read diagnostics, and more.
- `/editor split` cycles the editor/chat width (40/50/60/70%), `/nvim-config` switches between Empryo's bundled config and your own.
- When the editor is focused, keystrokes go straight to Neovim, `Ctrl+E` and `Ctrl+C` bring focus back to chat.

## Next

#### Command reference

Every slash command, grouped by area.

#### Themes

39 built-in themes plus your own.
