# The shell

> Keys, composer prefixes, header, footer and turn bar of the terminal UI.

Source: https://nodecode.ai/docs/shell
Updated: 2026-10-06

The shell is the terminal UI. It attaches to the gateway, the local server of a running Nodecode.

## Turn

A turn is one prompt and the work the model does to answer it. One turn runs per session at a time.

| Action | Result |
| --- | --- |
| Enter, no turn running | Starts a turn. |
| Enter, turn running | Steers. The running turn ends at its next round boundary. Your message runs next. |
| Tab, turn running | Queues the prompt behind the running turn. |
| Up, a prompt is queued | Takes the newest queued prompt back into the composer. |
| Enter on an empty composer, after Up took a prompt back | Drops that prompt. |
| Esc, turn running | Interrupts the turn. |
| Esc, the turn produced nothing | The prompt returns to the composer. Applies to a turn this shell started. |
| Ctrl+C | Clears the composer. Empty composer: interrupts the turn. No turn: quits. |
| Left, empty composer | Leaves the session running. Opens `/sessions` on a fresh session. |

## Global keys

| Key | Action |
| --- | --- |
| Enter | Submit. |
| Tab | Queue the prompt while a turn runs. Idle: accept the highlighted suggestion. |
| Shift+Enter, Alt+Enter, Ctrl+J | Insert a newline. |
| Up, Down | Previous or next prompt. In a dropdown: previous or next suggestion. |
| Ctrl+N | Next suggestion. |
| Ctrl+P | Empty composer: insert `/`. Dropdown open: previous suggestion. |
| Ctrl+R | Open or close the prompt history picker. |
| Ctrl+S | Open or close the sessions picker. |
| Ctrl+O | Switch tool detail between collapsed and expanded. |
| Ctrl+F | Give an open dialog the full window height. |
| PgUp, PgDn | Scroll the transcript. |
| Home, End | Empty composer: jump to the transcript top or bottom. |
| `?` | Empty composer: open keyboard help. |
| Ctrl+V, Ctrl+Alt+V | Paste an image from the clipboard. In a dialog: paste clipboard text. |
| Ctrl+Shift+C | Copy the selection. |
| Esc | Interrupt the turn. Idle: close the newest toast. |
| Esc, Esc within 0.5 s | Idle: open `/tree`. |
| Ctrl+C | Clear the composer, then interrupt the turn, then quit. |
| Ctrl+Q | Quit. |
| Ctrl+D | Empty composer: quit. With text: delete the character at the cursor. |

## Composer editing

| Key | Action |
| --- | --- |
| Ctrl+Left, Alt+Left, Alt+B | Back one word. |
| Ctrl+Right, Alt+Right, Alt+F | Forward one word. |
| Ctrl+A, Home | Line start. |
| Ctrl+E, End | Line end. |
| Ctrl+Home, Ctrl+End | Start or end of the text. |
| Ctrl+B, Ctrl+F | Back or forward one character. |
| Up, Down | One visual row up or down. |
| Ctrl+W, Ctrl+Backspace, Alt+Backspace | Delete the previous word. |
| Alt+D, Ctrl+Delete, Alt+Delete | Delete the next word. |
| Ctrl+D, Delete | Delete the character at the cursor. |
| Ctrl+K | Delete to line end. |
| Ctrl+U | Delete to line start. |
| Ctrl+T | Swap two characters. |
| Alt+C, Alt+L, Alt+U | Capitalize, lowercase or uppercase a word. |

| Paste | Shown as |
| --- | --- |
| Text over 10 lines or 1000 characters | `[Paste #N]`. The full text is sent. |
| Image | `[Image #N]` |

## Dialog keys

| Key | Action |
| --- | --- |
| Up, Down, Ctrl+P, Ctrl+N | Move the selection. |
| PgUp, PgDn, Home, End | Page the list or jump to an end. |
| Enter | Select. |
| Esc | Clear the search. Empty search: close. |
| Typing | Filter the list. |
| Ctrl+U | Clear the search. |
| Ctrl+W, Ctrl+Backspace | Delete a word of the search. |
| Space | Toggle a mark. In `/cells`: turn the cell on or off. |
| Right, `i` | Show detail. `i` works in lists without a search box. |
| Left, Right | Fold or unfold rows in `/sessions` and `/tree`. |
| Delete, Ctrl+X | Interrupt an exec in `/execs`. |
| F2 | Rename the highlighted session in `/sessions`. |
| Tab, Shift+Tab | Next or previous tab, for example in `/usage`. |
| Ctrl+F | Full height. |
| Ctrl+V | Paste clipboard text into the field. |

## Mouse

| Gesture | Action |
| --- | --- |
| Wheel | Scroll. |
| Drag the scrollbar | Scroll. |
| Click a tool card | Expand it. |
| Click a link | Open it. |
| Click the exec band | Open the exec view. Its stop control interrupts the exec. |
| Drag over text | Select. Release copies. |
| Click the × on a toast | Close it. |
| Click a dialog row | Confirm it. |

## Composer prefixes

| Prefix | Opens |
| --- | --- |
| `/` | The command dropdown. See [Slash commands](https://nodecode.ai/docs/slash-commands). |
| `@` | Workspace file completion. Hidden files and `node_modules` are skipped. |
| `$` at the start of a word | The `/skills` picker. Needs the skills cell. |

## Header

| Side | Shows |
| --- | --- |
| Left | The session title, then `· session-id`. Blank on the home screen and in setup. |
| Right | `N.N%/WINDOW`: context use over the model's window. `ctx N` when the window is unknown. |
| Right | `↑ input (cache N%)`: input tokens of the session. |
| Right | `↓ output (reasoning N)`: output tokens of the session. |
| Right | `$cost`, when the cost is known. |

## Footer

Windows under 12 rows have no footer.

| Side | Shows |
| --- | --- |
| Left | `provider model (effort) · ? help · ← sessions` |
| Left, sessions running | `← N running` replaces `← sessions`. |
| Left, target unknown yet | `setting up…` |
| Left, no model configured | `run /setup to add a model` |
| Right | `profile · folder · Gateway 127.0.0.1:PORT • state` |

State is `connected`, `connecting`, `reconnecting` or `failed`. A narrow window drops the folder first, then the state.

## Turn bar

The bar shows while a turn runs.

| Part | Meaning |
| --- | --- |
| Spinner | The turn is running. |
| Model label | Provider, model and effort of this turn. |
| Clock | Elapsed time. |
| Verb | The current activity, `waiting`, or the retry status. |
| Tally | The turn's tally. |
| Token meter | Tokens of this turn. |
| `ctx N%` | Context use. Shown from 75%. |
| Hint | `esc interrupts · type to steer · ctrl+o details` |

A failed or interrupted turn leaves a resting bar with elapsed time and outcome.

## keybinds.json

Override keys in `~/.nodecode/keybinds.json`. The file is one JSON object: action name to chord.

Example: `{"toggle_tool_expand": "ctrl+t", "help": "none"}`.

| Rule | Detail |
| --- | --- |
| Chord | Modifiers `ctrl` (or `mod`), `alt`, `shift` and one key, joined by `+`. |
| Key names | `enter`, `tab`, `esc`, `backspace`, `delete`, `up`, `down`, `left`, `right`, `space`, `pgup`, `pgdn`, `home`, `end`, `f1` to `f12`, or one character. |
| Override | One chord replaces every default chord of that action. |
| `"none"` | Unbinds the action. |
| Malformed chord | The defaults stay. |
| Unreadable file | Ignored. |

| Action name | Default |
| --- | --- |
| `quit` | `ctrl+q`, `ctrl+d` |
| `submit` | `enter` |
| `submit_turn_queue` | `tab` |
| `insert_newline` | `shift+enter`, `alt+enter`, `ctrl+j` |
| `accept_suggestion` | `tab` |
| `history_previous` | `up` |
| `history_next` | `down` |
| `history_dialog` | `ctrl+r` |
| `sessions_dialog` | `ctrl+s` |
| `rename` | `f2` |
| `toggle_tool_expand` | `ctrl+o` |
| `toggle_dialog_fullscreen` | `ctrl+f` |
| `page_up` | `pgup` |
| `page_down` | `pgdn` |
| `scroll_home` | `home` |
| `scroll_end` | `end` |
| `help` | `?` |
| `open_command_palette` | `ctrl+p` |
| `paste_image` | `ctrl+v`, `ctrl+alt+v` |
| `copy_selection` | `ctrl+shift+c` |

The composer editing keys and Esc are fixed.
