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: /settings → Startup 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
- Run
diminside your project directory. - Press
Ctrl+Pand pick Connect Provider (or type/connect) to connect a model provider and enter its API key. - Type
/modelsto pick a model; use/effortto set the reasoning level. - Type
/approvalsto choose a tool approval mode (see below). - 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: /settings → Mouse → 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.
DimAgent