# TUI settings

Customize the input area and status placement.

Open `/settings` and choose `tui settings` to control the main input chrome and where status information appears. Changes apply immediately and are saved in `$ZOT_HOME/config.json`.

| Setting | Values |
| --- | --- |
| input style | `plain` keeps the default prompt line. `lines` draws separator lines above and below the input area. `block` renders a user-bubble-style input block. |
| status position | `above input` or `below input` for model, usage, and working-directory information. |
| working spinner position | `above input` or `below input` for the busy spinner shown while a turn is running. |

## Config keys

```json title="$ZOT_HOME/config.json"
{
  "tui_input_style": "block",
  "tui_status_position": "below_input",
  "tui_working_position": "above_input"
}
```

> Input style accepts `plain`, `lines`, and `block`. Position fields accept `above_input` and `below_input`. Missing keys use the defaults: plain input, status above input, and spinner above input.

## Custom shortcuts

Bind key chords to slash commands with `keymap` in `$ZOT_HOME/config.json`. There is no `/settings` row for this yet; edit the file and restart zot. Each key is a case-insensitive chord made of at least one modifier (`ctrl`, `alt` or `option`, `shift`, `cmd` or `super`) plus a single character or a named key (`enter`, `tab`, `space`, `esc`, `backspace`, `delete`, `up`, `down`, `left`, `right`, `home`, `end`, `pageup`, `pagedown`). Each value is a slash command: built-in commands, extension commands, and `/skill:<name>` all work.

```json title="$ZOT_HOME/config.json"
{
  "keymap": {
    "ctrl+n": "/new",
    "ctrl+s": "/settings",
    "ctrl+g": "/git-tools:status",
    "alt+r": "/skill:code-review"
  }
}
```

Shortcuts run in the main interactive input and use the same dispatch path as typing the command. They do not apply while a dialog, extension panel, or tool confirmation has focus. The example `ctrl+n` binding starts a fresh persisted session, but it is unavailable when zot runs with `--no-session`. Entries that cannot be bound are skipped and reported above the transcript at startup (the notice clears with `/clear`): unmodified keys such as `enter` or `g`, values that do not start with `/`, and the reserved `ctrl+c`, `ctrl+d`, and `esc` chords. `/help` lists the active bindings under `custom keys`.

> Without enhanced keyboard reporting (kitty keyboard protocol or xterm `modifyOtherKeys`), a terminal cannot distinguish `ctrl+h`, `ctrl+i`, and `ctrl+m` from Backspace, Tab, and Enter, and it does not report Shift on Ctrl+letter chords. zot therefore lets a `ctrl+shift+<letter>` binding also fire on plain `ctrl+<letter>` unless a separate `ctrl+<letter>` binding exists. Chords the terminal emulator or multiplexer consumes itself, such as a tmux prefix or `cmd+k`, never reach zot.
