# The chat screen

> The parts of the terminal chat screen, its footer chips, side panel, modals and mouse support.

*Terminal: The agent searched the code, read a file and answered.*

```text
 ┌ Rate limiting /chat ──── ▢ ─ ~/acme-api  1 user message  4 turns  ctrl+shift+x session ┐
 │ ┌────────────────────────────────────────────────────────────────────────────────────┐ │
 │ │ ❯ How is /chat rate limited?                                                       │ │
 │ └────────────────────────────────────────────────────────────────────────────────────┘ │
 │                                                                                        │
 │ ↳ ▸ Used find the rate limiter and read it  [expand]                                   │
 │                                                                                        │
 │ The limiter in src/limits.ts keeps a sliding window per IP: 20 requests a minute on /  │
 │ chat, then a 429.                                                                      │
 │                                                                                        │
 │ It lives in memory, so each instance counts on its own. Behind a load balancer, move   │
 │ the counts to Redis.                                                                   │
 │                                                                                        │
 │ ≡ Opus 5.5  3s  ↻2  ↑5.2k ↓138  18500 tk/s                                             │
 │                                                                                        │
 │                                                                                        │
 │                                                                                        │
 │                                                                                        │
 │                                                                                        │
 │                                                                                        │
 │                                                                                        │
 │                                                                                        │
 │                                                                                        │
 │                                                                                        │
 └────────────────────────────────────────────────────────────────────────────────────────┘
 ┌──────────────────────── ↵ send  shift+↵ newline  ↑↓ history  ? search  ctrl+s messages ┐
 │ Ask zidane…                                                                            │
 └────────────────────────────────────────────────────────────────────────────────────────┘
 shift+tab Build  ctrl+m/l Opus 5.5 +1 medium  ctrl+shift+x session  ctrl+o settings
                                                                     ctx 2.89k / 1.00M (0%)
```

## Layout

| Part | Shows |
| - | - |
| Header | The session title, then the message and turn counts, the environment and the working directory when they fit. The `▢` chip toggles the side panel. |
| Transcript | Your messages, the agent's text, its tool calls and their results |
| Status line | Extension status text, when an extension sets some |
| Bottom slot | The prompt, or whatever waits for you: a file-edit approval, a tool approval, a plan or a question |
| Prompt hints | The keys that work right now, on the prompt's top border, plus `@ files`, `/ skills` and `# chat` |
| Footer | Chips for the agent, the model, skills, todos, keys and live run state |
| Context meter | Tokens in the context window, at the right of the footer |

The bottom slot shows one thing at a time, so an approval hides the prompt: see [approvals in the terminal](https://zidane.si/docs/tui-approvals.md).

## The footer

A chip with a key opens what it names, by key or by click.

| Chip | Means | Key |
| - | - | - |
| `shift+tab Build` | The agent profile, shown when you have more than one | `Shift`+`Tab` cycles |
| `ctrl+m/l Opus 4.6 medium` | The model, its reasoning effort and the options you turned on | `Ctrl`+`M` model, `Ctrl`+`L` options |
| `✦ 3 skills` | Skills pinned to this session | |
| `2/5 todos` | Progress on the agent's todo list (Settings › UI › Todo indicator) | `Ctrl`+`T` |
| `ctrl+shift+x session` | Session details | `Ctrl`+`Shift`+`X` |
| `ctrl+o settings` | Settings | `Ctrl`+`O` |
| `↑ v8.1.0` | A newer release exists. `↻` means it is installed: restart. | |
| Usage | Your subscription's rate-limit use (Settings › UI › Usage indicator) | `Ctrl`+`P` |

Detail after the model name:

| You see | Means |
| - | - |
| `+2` | The [fallback chain](https://zidane.si/docs/tui-models.md#build-a-fallback-chain) has two more models |
| ` (Work)` | The model runs on the account named Work |
| ` (signed out)` | The pinned account is gone. The next run says so. |
| Warning color | A fallback model serves this run, and the chip names it |

### While a run is busy

| Chip | Means |
| - | - |
| `ctrl+k cancel (2)` | Two tool calls or background tasks run. Press the key to pick one to cancel. With one, the chip reads `cancel`. |
| `ctrl+esc abort` | Stop the run |
| `esc sessions` | Go to the sessions list. The run keeps going. |
| The model | The model that serves this run, with no key. The picker opens only when the run ends. |
| `1m 15s` `↓1.2k` `41 tok/s` | Run time, output tokens so far and the stream rate. `↓~` marks an estimate. |
| Cost | The session's cost so far, marked as an estimate while a turn streams |
| `retrying 2/5` | The provider stream stalled and zidane retries. ` (child-3)` names a sub-agent's stream. |
| `Compacting...` `~12k` `8s` | zidane is writing a [compaction](https://zidane.si/docs/sessions.md#compaction) summary |
| `cache break in system: +12.3k tok` | The last turn missed the prompt cache. The chip names the part of the request that changed (warning color, 8 seconds). |
| `cache expired` | The cache timed out between your messages (dim) |

Both cache chips show the tokens billed again.

### Other footer states

| State | Footer |
| - | - |
| Settings › UI › UI mode set to Minimal | Only the agent, the model and `settings`. `Ctrl`+`Y` still lists every key. |
| Daemon or remote host | A dot before the context meter: connected, connecting or disconnected ([the daemon](https://zidane.si/docs/daemon.md)) |
| Remote session | Adds `host: <name>` |
| Agent idle, background tasks still run | `ctrl+k cancel task`, or `cancel task (N)` for more than one |
| Agent idle | Extensions can add their own chips |

## The transcript

Tool calls read as one line each, such as `↳ Read src/limits.ts`. Edits show as a diff. A dim receipt closes each run with the model, wall time, turns, cost, and tokens in and out (unknown cells are left out):

```text
[claude-sonnet-4] [2m14s] [↻3] [$0.04] [↑4.2k ↓812]
```

In compact density, the work of each exchange folds into one row. While the agent works, the row names its latest action, or `Thinking`. Once the work is done, it says what the work did, such as `Read a file, ran a command +2`. Workers that no `spawn` call shows, because a script started them, add `, 1 worker`. An exchange with no tool calls reads `Delegated to 2 workers`, `Thought` or `Worked`. Opened, the row has one line per step. A thought reads `Thinking` while it streams, then `Thought`.

When nothing has moved on screen for a moment, the live row reads `Waiting for the model` instead, or `Retrying 2/3` during a retry. Once a wait or a retry passes five seconds, a badge after the words shows how long it has lasted. A model stream that goes silent for 5 minutes is retried, then moved to the next model of the chain.

A run that fails or that you stop ends on one quiet line: `✗ Stopped:` and the reason, or `⏹ Stopped by you`. When that line is the last one and the agent is idle, click `↻ continue` to let the agent go on, or `↻ retry` to send your message again when the run had done nothing yet.

A session opens on its latest rows, about five screens. Scroll up and older rows load from the session's host, a page at a time. The rows on screen stay still while a page lands.

The Transcript group in [Settings](https://zidane.si/docs/tui-settings.md#transcript) sets density, thinking blocks, tool output, diffs, receipts and more ([display settings](https://zidane.si/docs/apps.md#display-settings) for both apps). Two rows exist only here: Edit diff density (full or compact) and Compaction summaries.

## While the agent works

| You want | Do |
| - | - |
| Send another message | Type it: it waits in the [queue](https://zidane.si/docs/tui-prompt.md#the-queue) above the prompt |
| Stop one tool call | `Ctrl`+`K`, then pick it |
| Stop the run | `Ctrl`+`Esc`. It also denies pending approvals. |
| Leave the run going | `Esc` goes to the sessions list. The run continues. |

*Terminal: A run in progress, with a second message queued above the prompt.*

```text
 ┌ New session ────────────────────────────────── ▢ ─ ~/acme-api  1 user message  0 turns ┐
 │ ┌────────────────────────────────────────────────────────────────────────────────────┐ │
 │ │ ❯ Add tests for the limiter                                                        │ │
 │ └────────────────────────────────────────────────────────────────────────────────────┘ │
 │                                                                                        │
 │                                                                                        │
 │                                                                                        │
 │                                                                                        │
 │                                                                                        │
 │                                                                                        │
 │                                                                                        │
 │                                                                                        │
 │                                                                                        │
 │                                                                                        │
 │                                                                                        │
 │                                                                                        │
 │                                                                                        │
 │                                                                                        │
 │                                                                                        │
 │                                                                                        │
 │                                                                                        │
 │                                                                                        │
 │                                                                                        │
 └────────────────────────────────────────────────────────────────────────────────────────┘
 ─ queued 1 ──────────────────────────────────────────────────────────────────── ↑ select ─
     ❯ Then run them
 ┌─────── ↵ queue  shift+↵ newline  ↑↓ history  ctrl+esc abort  @ files  / skills  # chat ┐
 │ Ask zidane…                                                                            │
 └────────────────────────────────────────────────────────────────────────────────────────┘
 ctrl+esc abort  esc sessions  Opus 5.5 +1  ▰▰▱▱▱ 0s                     ctx 0 / 1.00M (0%)
```

## The side panel

A column docked right of the transcript, with tabs: Artifacts (pull requests, branches, commits and files the session produced) and one tab per extension panel.

| Key | Does |
| - | - |
| `Ctrl`+`Shift`+`A` | Show or hide the panel (or click `▢` in the header) |
| `Ctrl`+`Shift`+`]` | Next tab |
| `Ctrl`+`Shift`+`[` | Previous tab |

The panel never takes keyboard focus. Click a row or an action, or right-click a row for its actions. The footer link opens the artifacts modal, where you copy or remove an artifact.

It hides on narrow terminals and returns when the window widens. Its open state is per window and resets on restart. Settings › UI › Artifacts removes the Artifacts tab.

## Modals

| Key | Modal |
| - | - |
| `Ctrl`+`T` | Todos: the agent's live `todowrite` list |
| `Ctrl`+`K` | Cancel: running tool calls and background tasks, with their age. `Enter` cancels one, `A` cancels all. The run keeps going. |
| `Ctrl`+`Shift`+`G` | Context: a stacked bar of tokens per category (system prompt, skills, MCP tools, rule files) and the free space. `~` marks an estimated category. The modal says so when the provider reports no exact counts. |
| `Ctrl`+`P` | Usage: rate-limit windows per subscription ([models](https://zidane.si/docs/tui-models.md#usage)) |
| `Ctrl`+`Shift`+`P` | Command palette: every action, command, panel, session and setting |
| `Ctrl`+`Y` | Keybindings: every shortcut ([keyboard map](https://zidane.si/docs/tui-keys.md)) |
| `Ctrl`+`Shift`+`X` | Session details ([sessions](https://zidane.si/docs/tui-sessions.md#session-details)) |
| `Ctrl`+`H` | Folder picker: moves the session to the folder you pick |

*Terminal: The command palette lists actions with their keys.*

```text
 ┌ New session ─────────── ▢ ─ ~/acme-api  0 user messages  0 turns  ctrl+shift+x session ┐
 │  ┌─ palette ────────────────────────────────────────────────────────────────────────┐  │
 │  │                                                                                  │  │
 │  │  ┌────────────────────────────────────────────────────────────────────────────┐  │  │
 │  │  │ search sessions, actions, commands, settings                               │  │  │
 │  │  └────────────────────────────────────────────────────────────────────────────┘  │  │
 │  │                                                                                  │  │
 │  │    actions                                                                    ▀  │  │
 │  │  ▶ Settings                                                            ctrl+o    │  │
 │  │    Session                                                       ctrl+shift+x    │  │
 │  │    New session                                                         ctrl+n    │  │
 │  │    Model                                                               ctrl+m    │  │
 │  │    Options                                                             ctrl+l    │  │
 │  │    Todos                                                               ctrl+t    │  │
 │  │    Panel                                                         ctrl+shift+a    │  │
 │  │    Next panel                                                    ctrl+shift+]    │  │
 │  │    Previous panel                                                ctrl+shift+[    │  │
 │  │    Context                                                       ctrl+shift+g    │  │
 │  │    Main session                                                  ctrl+shift+m    │  │
 │  │    Usage                                                               ctrl+p    │  │
 │  │    Keybindings                                                         ctrl+y    │  │
 │  │    Cycle agent                                                        shift+⇥    │  │
 │  │    Messages                                                            ctrl+s    │  │
 │  │    Cancel tool                                                         ctrl+k    │  │
 └──│    Abort                                                             ctrl+esc    │──┘
 ┌──│                                                                                  │s ┐
 │ A│  ↑↓ navigate  ↵ run  esc close                                                   │  │
 └──│                                                                                  │──┘
 shi└──────────────────────────────────────────────────────────────────────────────────┘
                                                                         ctx 0 / 1.00M (0%)
```

Conversation preset, in the command palette, opens Focused, Balanced and Detailed, with the one in effect checked. Pick one to set every transcript setting of that preset. The open session draws again at once, so you see the result. The [setup wizard](https://zidane.si/docs/ui-onboarding.md) page describes each preset.

## Extension status and banners

The status line under the transcript joins each extension's short status, with a spinner while it works. Banners sit above the prompt, next to the todo indicator. Both take no space when empty. To write one: [extensions](https://zidane.si/docs/extensions.md).

## Mouse and links

Settings › UI › Clickable UI is on by default. Turn it off to give mouse selection back to your terminal.

| You click | It does |
| - | - |
| A key hint, such as `ctrl+o settings` | The same as pressing that key. On `↑↓ navigate` it moves down. |
| A sessions-list badge or a side panel row, with the right button | Opens that item's actions |
| A link, such as a sign-in URL | Opens it in your browser (the terminal must support OSC 8 links) |
