Skip to content

Conversation

Read the conversation as it streams — tool calls, thinking, queued messages, and the surfaces that tell you what's happening.

The conversation is the feed. Everything the agent does — stream tokens, call a tool, read a result, think out loud — lands in it as it happens. The rest of the TUI exists to frame that feed: the context bar above it tells you what’s on deck, the composer below it queues your next move, the status bar anchors connection health at the bottom.

The TUI conversation view. Tool calls render inline as │ bash(ls -la) cards with a summary line underneath; the context bar above the composer shows the active agent, session ID, and model.

The bar just above the composer is the one-glance answer to “what is this session doing right now?”

@red-teamer · fix-auth-bypass · active Opus 4.6 (High)
^A agent ^O output ^K model, ^⇧K reasoning
  • @agent — the active agent. Click Ctrl+A to swap.
  • Session label — title you gave it with /rename, or the first user message.
  • Statusactive while the agent works, awaiting … when it’s paused for you (approval, input, or anything else), blank when idle.
  • Model (effort) — the model and its thinking level, if any. Click Ctrl+K to swap.

When a background session is running, its status shows on the bar in place of the idle label so you never forget it’s out there.

See Agent & model for what Ctrl+A, Ctrl+K, and Ctrl+Shift+K open.

Messages stream token-by-token as the agent generates them. Tool calls appear inline the moment the agent requests them, with a spinner next to the tool name while it runs:

▸ read_file 0.4s
path: packages/api/app/auth/router.py
▸ grep 1.2s
pattern: verify_token
path: packages/api/app/auth

When the tool finishes, a one-line summary replaces the spinner. Thinking blocks appear as a collapsible Thinking section with the model’s reasoning inside — useful when you want to see why the agent chose a tool, noisy when you don’t.

Press Ctrl+O to toggle output mode. Compact (the default) collapses thinking blocks and long tool results into summaries; expanded shows everything inline. Toggle expanded when something went wrong and you need the full trace; flip back to compact when the feed gets too busy to read.

  • y (or /copy) copies the last assistant message to the clipboard.
  • /export [filename] writes the full transcript to session-<id>.md (or the filename you pass) in the current directory.

For span-level inspection of the same session, see Traces & analysis.

The composer looks like one line but is multiline. Enter submits (or enqueues); to add a newline, end the line with a trailing \ and press Enter, or use Shift+Enter / Ctrl+J. Up and Down scroll prompt history when the composer is empty.

Starting a message with ! flips the composer into shell-mode visually (border shifts, placeholder changes). The rest of the composer works the same way — it’s a hint to the reader that the next line is intended as a shell command.

!rg -i todo --type py

Paste two or more lines and the composer collapses the block to a placeholder:

[pasted ~42 lines]

The full content goes with the message on submit. Esc clears the composer and drops the paste; deleting the placeholder before submit cancels it.

Typing @ opens an agent picker inline. Pick one (Tab or Enter) and the composer fills in @agent-name — keep typing your message and submit as usual. That single message is routed to the named agent without changing the session’s default agent.

@web-pentester take a pass at the injection surfaces

Use Ctrl+A or /agent <name> when you want to switch the session’s default agent for every subsequent turn.

You don’t have to wait for the agent to finish before typing the next thing. Type into the composer while it’s working and hit Enter — the message joins a queue and shows up below the composer:

⏵ and also check the refresh-token flow
⬆ to edit

Queued messages ship to the agent one at a time, in order, as each turn completes. Press on an empty composer (or Esc when nothing else is in the way) to pull the most recent queued message back in for editing. The escape ladder covers the order of precedence.

A permission prompt or free-form input prompt appears above the composer. The context bar flips its status to awaiting … until you answer. The rest of the TUI stays usable — open a different session, read the backlog, switch threads — the prompt stays pinned to this session.

See Prompts & approvals for what the prompt looks like and how approval vs. input differ.

The status bar pinned at the bottom answers “is the connection OK?” and nothing else:

✓ local · my-workspace ^P capabilities ^B sessions ^W workspaces ^R runtimes ^T traces ^E evals
  • Green check: healthy. Amber or red: something is off — hover or open the screen named on the right.
  • The shortcuts on the right are always-on chords for the screens you’ll reach for during a session. Labels collapse to keys only when the terminal is narrow.

Transient feedback — “Agent: red-teamer”, “Thinking: high”, “Background task complete” — shows up as a flash notification for a few seconds and then fades. Flashes are informational; nothing you need to act on.

Press ? or run /help any time to bring up the keybinding reference.