Keybindings
AtomCode's TUI is built on ratatui + crossterm; common keybindings stick close to the conventions of mainstream terminal tools. Run /keys in a session to dump this table into the current scrollback, or /help for the slash-command list.
Input editing
| Key | Action |
|---|---|
Enter | Send the message |
\ then Enter | Insert newline (universal — a trailing backslash makes the line a continuation, works in every terminal) |
Alt+Enter | Insert newline (most terminals; macOS Apple Terminal needs "Use Option as Meta key" enabled under Settings → Profiles → Keyboard; Windows Terminal reserves it by default — release in settings) |
Shift+Enter | Insert newline (only terminals that disambiguate the modifier: Kitty / WezTerm / iTerm2 with Report Modifiers / Windows Terminal / Ghostty / Warp. Apple Terminal, xterm, GNOME Terminal, VS Code integrated terminal all collapse it to Enter — use \ + Enter instead) |
Ctrl+Enter | Insert newline (requires a Kitty-keyboard-protocol terminal such as Kitty or WezTerm) |
Ctrl+J | Insert newline when the terminal distinguishes the chord |
Esc | Clear current input / interrupt streaming output |
Esc Esc | Undo the previous turn when the prompt is idle and empty |
↑ / ↓ | Browse input history |
→ | Fill a faint next-prompt suggestion into an empty input (press Enter separately to send) |
Ctrl+R | Reverse-search input history (type to filter live; Ctrl+R again jumps to the next older match; Enter accepts into the input, Esc cancels) |
Tab | Accept slash-command, skill, or file completion |
Shift+Tab | Cycle to the next execution mode when no completion menu is open (also works while streaming) |
Ctrl+D | Delete forward; when idle and empty, press twice within two seconds to quit |
Ctrl+B / Ctrl+F | Move one character left / right |
Ctrl+U | Delete to the start of the current line |
Ctrl+W | Delete a word |
Ctrl+K | Delete from cursor to end of line |
Ctrl+A | Move cursor to line start |
Ctrl+E | Move cursor to line end |
Custom newline shortcuts
Open /config, search for “newline”, and select “Keyboard shortcuts / Newline”. Press Enter or A to add a chord, press that chord, then press Enter to confirm. Press M to type comma-separated names such as alt+j, ctrl+j; Tab also switches capture to manual entry. Delete removes the selected binding, Ctrl+D restores defaults, and Esc goes back.
[ui.keybindings]
newline = ["alt+j", "ctrl+j"]
The list replaces the default newline chords. Changes apply immediately and /keys shows the effective bindings. \ + Enter remains available. Use newline = [] to disable the chords, or remove the newline entry to restore defaults. Conflicts with existing actions or reserved keys, duplicate chords, and invalid names are rejected without changing the active bindings.
Plain printable characters cannot be shortcuts. Names accept ctrl, alt, shift, and cmd modifiers, letters, digits, enter, space, arrows, and f1–f24. AtomCode cannot detect or release shortcuts intercepted by the terminal or IDE; verify that manually entered chords reach the app.
Browse & scroll
| Key | Action |
|---|---|
PageUp / PageDown | Page by the visible conversation height, keeping one overlap row |
Mouse wheel | Scroll the conversation |
/read | Open a read-only conversation snapshot with expanded tool output; no GUI or clipboard required |
↑ / ↓ / j / k | Reader: scroll one line |
PgUp / PgDn / Ctrl+B / Ctrl+F | Reader: page up / down |
Ctrl+U / Ctrl+D | Reader: half-page up / down |
Home / End | Reader: jump to beginning / end |
Esc | Leave the reader, preserving the draft and main scroll position; reopen /read to refresh the snapshot |
Selection & copy
| Key / action | Effect |
|---|---|
| Mouse drag | Select text in the chat area (atomcode-managed; auto-scrolls at selection edges) |
Shift+ mouse drag | Use the host terminal's native selection (bypasses atomcode; better for cross-viewport copy) |
Ctrl+Shift+C | Copy selection to system clipboard |
| Right-click menu | Some terminals offer direct copy/paste (depends on the terminal, not atomcode) |
Control flow
| Key | Action |
|---|---|
F2 / Shift+F2 | Switch to the next / previous configured model; Mac keyboards usually require Fn+F2 / Fn+Shift+F2 |
Ctrl+T | Cycle the active model's reasoning_effort |
Ctrl+O | Show / hide tool output and reasoning (verbose mode) |
Esc | Cancel the in-progress tool call or streaming output |
Ctrl+C | First press cancels the current action; second consecutive press exits |
New screen (atomcode --tui)
Most keys are the same as above; these differ. Type /keys in a session for the full list.
| Key | Action |
|---|---|
Ctrl+O | Reasoning: one line / in full / folded, cycles (also /reasoning; Alt+R works too when the terminal sends Option as Meta) |
Ctrl+T | Tool output: all / one summary each / summarised in groups, cycles; the opening step opens answered approvals too (the way to them while the mouse is handed back and a click cannot reach them) |
Ctrl+G | Hand the mouse to the terminal (use its own selection), again to take it back (also /mouse). While it is handed back the wheel, the trackpad and ↑ ↓ scroll the conversation; with [ui] mouse = false it starts that way |
Ctrl+P / Ctrl+N | Step through the input history (always; with the mouse handed back ↑ ↓ scroll, so these are the way to the history) |
Ctrl+X | Interrupt the current turn and immediately send the queued messages, one per turn (each with its image); with nothing queued it is a plain interrupt |
Double-tap Esc | Open the rewind panel (same as /rewind) to pick an earlier prompt to roll back |
Tool permission dialog
When the model is about to execute a dangerous action (destructive bash, writing sensitive files, deleting source code, etc.), AtomCode pops a confirmation dialog:
| Key | Action |
|---|---|
y / Enter | Allow once |
a | Always allow this pattern for the current session |
n / Esc | Deny |
"Always allow" is granted per tool name + argument pattern and only for the current session — it resets next launch. For permanent cross-session exceptions, manage them in config (e.g. allowlists for specific paths).
Next steps
- Slash Commands — pair keybindings with command completion
- Sessions & Undo — what
/undoactually undoes