Fullscreen TUI

The dim interactive terminal UI comes in two forms: fullscreen and scrollback. This page covers the fullscreen form; for the other one see Scrollback TUI.

Fullscreen runs on the terminal's alternate screen: it takes over the whole window and paints its own transcript, centered dialogs and bottom composer. Mouse and theme switching are supported. On exit the terminal is restored to exactly what it looked like before, so the conversation does not stay in terminal history — the session itself is saved, and /resume brings it back.

Which form to use

Situation Use
Long day-to-day sessions with frequent settings / model / session panels Fullscreen
You want mouse scrolling, clickable lists, drag-to-copy Fullscreen
You want to change the color theme Fullscreen (/theme; not available in scrollback)
You want the whole conversation to stay in the terminal, searchable with the terminal's own tools Scrollback
You work over SSH / tmux, or on a limited terminal Scrollback

Both forms share the same sessions and the same configuration, and you can switch between them at any time without losing a session.

Launch

# Open the interactive TUI (default form)
dim

# Open the fullscreen form explicitly
dim tui --fullscreen

# Open and resume a specific session
dim tui --session <session-id>

Until you set a default form, dim opens scrollback. Launch with --fullscreen, or type /tui inside, to use the fullscreen form.

Make it the default

dim tui --fullscreen default

This only writes the setting; it does not open the UI. It prints Default TUI form set to fullscreen. You can also change it in the app: /settingsStartup UI form.

Switch forms while running

Type /tui and press Enter to switch to the other form; /tui --fullscreen and /tui --scrollback pick a target explicitly. Switching does not start a new session and does not interrupt a running turn — only the screen changes.

Layout

You start on the Home route and move to the Chat workspace after the first message.

Home:

┌──────────────────────────────────────────────────────────┐
│                                                          │
│                        DIM LOGO                          │
│                                                          │
│              ┌──────────────────────────┐                │
│              │ Ask anything...          │                │
│              └──────────────────────────┘                │
│                                                          │
│  ~/workspace/repo:main                             v0.x.y│
└──────────────────────────────────────────────────────────┘

Chat:

┌──────────────────────────────────────────────────────────┐
│ Session title  ~/workspace/repo    12 msgs | 42k | v0.x.y│ ← Header
├──────────────────────────────────────────────────────────┤
│ Transcript                                               │
│   user message                                           │
│   assistant message                                      │
│   Thinking: ...                                          │
│   → write src/app.ts                                     │
│   $ pnpm test                                            │
├──────────────────────────────────────────────────────────┤
│ ┌──────────────────────────────────────────────────────┐ │
│ │ Ask anything...                                      │ │ ← Composer
│ │ AGENT  ready           42.0K (33%)      ■ model-id   │ │
│ └──────────────────────────────────────────────────────┘ │
├──────────────────────────────────────────────────────────┤
│ drag to select        Tab: switch mode  Ctrl+P commands  │ ← Footer
└──────────────────────────────────────────────────────────┘
Area What it shows
Header Session title, working directory, message count, total tokens, CLI version
Transcript User messages, model replies, thinking, tool calls and results, subagent status, errors and system notices
Composer Input area; the bottom line carries the mode chip, run status, context usage and current model
Footer Shortcut hints, transient notices, running indicator, TODO chip, background-work indicator, working directory

Context usage reads as 42.0K (33%); a leading ~ means the number is estimated rather than measured.

First run

  1. Run dim inside your project directory.
  2. Press Ctrl+P and pick Connect Provider (or type /connect) to connect a model provider and enter its API key.
  3. Type /models to pick a model; use /effort to set the reasoning level.
  4. Type /approvals to choose a tool approval mode (see below).
  5. Describe what you want and press Enter.

The composer

Action Key
Send Enter
New line Shift+Enter, or Ctrl+J on terminals that do not report it
Switch AGENT / PLAN mode Tab
Browse input history (single-line composer) Up / Down
Open the command palette / or Ctrl+P
Mention a skill $
Mention a file or directory @, or just type a path; Tab completes directories
Paste a clipboard image Ctrl+V

Pastes are classified automatically: plain text goes into the draft, long multiline text folds into a token, and absolute paths, file:// URLs and Windows drive paths become focus-file tokens. A token is visible text in the composer — delete it and the attachment is gone.

AGENT acts directly; PLAN proposes an approach first. You can also switch with /agent, /plan and /goal.

Commands

Press Ctrl+P, or type / at the start of the composer and filter as you type.

Command What it does
/new Start a new session
/resume (alias /sessions) Open the session list and resume
/connect (alias /provider) Connect a model provider
/models Select a model
/effort (alias /reasoning) Set the reasoning level
/approvals Tool approval mode
/settings Settings dialog
/mcp Manage MCP servers
/plugins Manage plugins (including the Serper key for WebSearch)
/skills Manage skills
/external-agents Enable or disable external agents
/timeline Message timeline; jump back to an earlier message
/compact Compact the context
/export Export the current session
/theme, /language Theme and interface language
/debug Print diagnostics
/tui Switch TUI form
/exit Quit

Dialogs share one set of keys: Up/Down to move, Home/End for first/last, PageUp/PageDown to page, type to filter, Enter to activate, Esc to clear the filter and then close. The mouse wheel scrolls and a click selects and activates a row.

While a turn is running

The footer shows a running indicator and esc interrupt:

●●○ esc interrupt                                Ctrl+P commands
Goal How
Interrupt this turn Esc
Keep typing while it runs Just type; Enter puts the message in the queue
See the queue The Queue panel opens on the right when the queue is non-empty and the terminal is at least 60 columns wide
See background work and subagents Ctrl+O
See the TODO list Ctrl+L, or click the TODO 2/6 chip in the footer

Queued messages run in order once the current turn finishes. Anything submitted during /compact is queued the same way and continues after compaction.

Approvals and questions

When the model wants to write a file or run a command, a centered approval dialog appears:

┌──────────────────────────────────────────────┐
│ Permission required                          │
│ $ rm -rf node_modules                        │
│                                              │
│ [Allow once]  Allow always   Reject          │
└──────────────────────────────────────────────┘
Key Result
Y Allow once
N Reject
Left / Right / Tab Move focus
Enter Confirm the focused action

Allow always remembers a matching rule so similar calls stop asking. How often the dialog appears at all depends on the approval mode, set with /approvals:

Mode Meaning
auto Everything runs automatically
approve-for-me The agent reviews on your behalf and only asks when it cannot judge safely
normal Read tools run automatically; writes and commands ask you

When the model asks you a question (AskUser), an options dialog opens: Up/Down to move, Space to toggle, Enter to confirm or submit, Tab/Shift+Tab to move between questions.

Mouse and copying

The mouse is on by default. With it on:

  • The wheel scrolls the transcript and list dialogs.
  • Clicking a list row selects and activates it.
  • Dragging across the transcript or composer copies the selection to the clipboard on release.
  • Clicking a user message opens Message actions, which can copy the whole message.

If you need the terminal's own selection (to drag text into another app, for example), hold your terminal's bypass modifier while dragging: Option on macOS, Shift on most Linux terminals.

You can also turn the mouse off: /settingsMouse → Off, or set an environment variable before launching:

DIM_TUI_MOUSE=off dim

Keyboard reference

Mod is Cmd on macOS and Ctrl elsewhere.

Key Action
Enter Send
Shift+Enter / Ctrl+J New line
Tab Switch AGENT / PLAN
Ctrl+P Command palette
Mod+T Timeline
Mod+N Back to Home / new session
Ctrl+O Background work panel
Ctrl+L TODO dialog
Ctrl+V Paste clipboard image
Esc Interrupt the running turn; closes the top overlay first if one is open
Ctrl+C Step out: close overlay → clear input → exit confirm
Up / Down Input history in a single-line composer; move selection inside dialogs

Ctrl+P, Mod+T and Mod+N can be rebound in settings.

Quitting

Press Ctrl+C twice, or type /exit. If work is still running you get a confirm dialog: Enter / Y forces the exit, Esc / N stays.

The terminal is restored on exit. The session is stored locally — start dim again and use /resume to continue.

Troubleshooting

Blank or misaligned screen. The terminal window is too small, or the font is not monospaced. The layout reflows once you enlarge the window.

Shift+Enter does nothing. Some terminals do not report that combination. Use Ctrl+J, which works everywhere.

The terminal's own search does not find the conversation. Fullscreen runs on the alternate screen, so the terminal's scrollback only holds what was there before you started. Use the scrollback form when you need native scrolling, search and copy.

With the mouse on I cannot make a native selection. Hold Option (macOS) or Shift (Linux) while dragging, or turn the mouse off in settings.

It says no model is configured. Run /connect first, then /models.