Reference
Key bindings
TUI shortcuts, by context. Open selectors take over the keyboard; a live turn changes Enter and Esc.
Editing & cursor
Your input wraps as it grows. Line shortcuts follow line breaks, not visual wraps.
| Key | Action |
|---|---|
| Printable text | Insert at the cursor. |
| Paste | Bracketed paste inserts literal text; line breaks do not submit. A supported file path attaches the file (below). |
| ← / → | Move one codepoint. |
| Alt/Ctrl+← / →, Alt+B / F | Move one word left / right. |
| Ctrl+A / Ctrl+E | Start / end of the current logical line. |
| Home / End | Start / end of the whole input. |
| ↑ / ↓ | Move one logical line. On the first line, ↑ recalls older input; on the last line, ↓ recalls newer input, then your draft. |
| Backspace / Delete | Delete the previous / next codepoint. |
| Alt+Backspace, Ctrl+Backspace, Ctrl+W | Delete the previous word. |
| Ctrl+U | Delete to the start of the current logical line. |
- Words split on space, tab, and newline. No undo or kill ring.
- Legacy Esc-prefixed
b/falso move left / right by word. - History records submitted input for this run, skipping empty entries and consecutive duplicates.
Pasting files
Paste a supported file path to attach the file when you submit its label.
- Files: readable PNG, JPEG, GIF, BMP, WebP, or PDF under 24 MiB. PDFs must also be at most 22.5 MB.
- Paths: plain, quoted, backslash-escaped,
~/-relative, or a localfile://URL. Paste only one path. - Result: an
[Image-N]or[Attachment-N]label. Keep it in your message to attach the file; remove it to omit the file. - Literal text instead: unsupported, unreadable, oversized, or unconvertible files; input starting with
/or!.
Submit, queue & interrupt
With no selector open, Enter queues input during a live turn.
| Key | Idle | Live turn |
|---|---|---|
| Enter | Submit. | Queue as steering. |
| Ctrl+Enter | Submit. | Queue a follow-up for after the turn. |
| Shift+Enter | Insert a newline. | |
| Esc | Clear the input. | Request cancellation; panto keeps running. |
| Ctrl+C / Ctrl+D | Quit. | Request cancellation; quit after the turn unwinds. |
| Ctrl+Z | Suspend to the shell. Resume with fg; panto redraws. | |
When queued input runs:
| Input | Steering (Enter) | Follow-up (Ctrl+Enter) |
|---|---|---|
| Plain text | Next tool boundary, or turn end if none remains | After the turn |
! shell line | Next tool boundary, or turn end if none remains | After the turn |
| Slash command | After the turn | After the turn |
- Queued input echoes when it runs; the footer counts what is pending.
- Selector open: Esc closes it without cancelling the turn; modified Enter accepts, rather than inserting a newline. In tree-row naming, any Enter saves.
- During a live turn, Ctrl+Enter steers if your terminal reports it as plain Enter (Terminal support).
- Semantics: Slash commands and shell lines.
App shortcuts
Use these shortcuts when no selector is open.
| Key | Action |
|---|---|
| Ctrl+T | Model selector. Same as /model with no argument. |
| Ctrl+R | Reasoning selector. Same as /reasoning with no argument. |
| Ctrl+Y | Theme picker with live preview. Same as /theme. |
| Ctrl+O | Collapse or expand all tool output. |
| Ctrl+K | Hide or show thinking, including future thinking blocks. |
| Ctrl+L | Rebuild the display, clearing screen and scrollback. |
| Ctrl+P | Idle only: run /proceed to continue without a new prompt. Your input stays. |
| Ctrl+G | Edit the draft in your editor, then load it back. Ignored mid-turn. |
| Tab | Complete a slash command or file path (completion). |
The Ctrl+T/R/Y/O/K/L/P shortcuts above are command bindings. Customize them in configuration: [keys]; Ctrl+G, Tab, editing, and selector-navigation keys are separate.
| Setting | Priority, first to last |
|---|---|
| Ctrl+G editor | [tui] editor → $VISUAL → $EDITOR → vi |
- Remembered in
state.toml: model, standard reasoning levels, theme, thinking visibility, tree view. - Model and reasoning apply from the next provider request. Reasoning levels vary by provider and model. Custom extension levels are not remembered.
- Theme: Enter commits; Esc rolls back the preview.
Selectors
Model, reasoning, theme, command, session, and path pickers are modal: type to filter. Only quit and suspend get past them.
| Key | Action |
|---|---|
| ↑ / ↓, Ctrl+P / Ctrl+N | Move up / down; wraps at either end. |
| Enter | Accept (no-op with no match). |
| Tab | Accept, in command and path pickers. |
| Esc | Cancel. |
| Backspace, Ctrl+H | Delete one filter character. |
| Ctrl+W | Delete the last filter word. |
| Ctrl+U | Clear the filter (picks a view in the tree). |
- Modifiers: modified arrows still navigate; modified Backspace still deletes one filter character. Alt+printable keys and other Ctrl chords are ignored.
- Match order, case-insensitive: label prefix, label substring, label subsequence, detail substring, detail subsequence. Commands match by name only.
Command and path completion
Use Tab to complete the token before your cursor.
- Command popup: type
/into an empty input, or press Tab on the first token, starting with/and containing no second slash before the cursor. - Path completion: Tab anywhere else. Inserts the longest common prefix, then opens a picker if several remain. No matches leave your input unchanged.
- Directories get a trailing slash. Dotfiles show only when the filename prefix starts with a dot.
Command popup keys (includes extension commands). As you type, the best-matching command is highlighted.
| Key | Action |
|---|---|
| Tab / Enter | Accept the highlighted command. |
| Space | Accept and type arguments. With no match, keep the typed text. |
| Backspace on an empty filter | Remove the leading slash. |
| Esc | Close; the typed text stays in the input. |
| Paste | Extend the filter. |
Session tree
/tree opens saved history so you can branch from a selected non-system message.
| Key | Action |
|---|---|
| Ctrl+T | no_tools view: hide tool-only assistant calls and tool-result-only messages. |
| Ctrl+O | no_tool_use view: hide tool-only assistant calls, keep tool results. |
| Ctrl+U | user view: user messages with text. |
| Ctrl+A | all view: every non-system message. |
| Ctrl+L | named view: rows you named. |
| Ctrl+F | Name the selected row in the input box. Enter saves; Esc or an empty name cancels. |
| Enter | Branch the session at the selected row. |
- Filter and navigate like any selector. Rows represent messages, not content blocks.
- Depth-first order, active branch first. System messages are hidden.
- Opens in your configured or remembered view. Press the active view's key again to return to the view you opened with.
- Row names last only for this panto process.
- Branching at a user message with text branches just before it and puts its text back in the input.
Terminal support
Some bindings need your terminal to report modifiers.
- Shift+Enter: works with Kitty, xterm modifyOtherKeys mode 2, or a distinct line feed. If your terminal sends plain Enter, you submit or queue instead.
- Ctrl+Enter, Ctrl+Backspace: need distinct modifier reports. If sent as plain Enter or Backspace, they act like those keys.
- Multi-line paste: needs bracketed paste; otherwise it arrives as keystrokes. Incomplete bracketed pastes wait for the closing marker.
- Esc waits 30 ms when idle to rule out an escape sequence; mid-turn it acts at once.
Protocol negotiation
Panto enables bracketed paste and negotiates Kitty support, falling back to xterm modifyOtherKeys mode 2. Legacy key encodings still work.- No scroll keys. Output stays inline in native scrollback, with no alternate screen. Page Up/Down are ignored.
- Routine changes to content above the viewport repaint visible rows without clearing native scrollback; the off-screen history can remain stale. The default
/redraw,/collapse, and/thinkingbindings (Ctrl+L, Ctrl+O, and Ctrl+K) explicitly clear scrollback and replay the retained transcript; customize these bindings in [keys]. A compaction that changes the transcript, session switches, and accepting a theme choice do the same. Resizes redraw even mid-turn and may clear scrollback. - No mouse tracking or focus events. Synchronized output is on unless
TERMis empty ordumb. - The terminal is restored on SIGINT, SIGTERM, SIGHUP, and panic. Stdin must be an interactive terminal.
/help lists commands and keys; the keybind bar shows a context-specific subset. See also Command line.