# Keys, input and copying

> Every key in the bitsrun agent, plus multi-line prompts, safe pasting, the number pad, file and image attachments, mouse selection and copying.

Source: https://bitsrun.com/docs/agent/input-and-keys/
Updated: 2026-11-09

bitsrun is built to behave the same in every common terminal: iTerm2, Terminal.app, Ghostty, kitty, WezTerm, Alacritty, Windows Terminal, GNOME Terminal, Konsole, the VS Code terminal, and inside tmux and SSH. Press <kbd>?</kbd> on an empty prompt to see the keys below at any time.

## Every key

| Key | What it does |
|---|---|
| <kbd>Enter</kbd> | Send |
| <kbd>Shift</kbd>+<kbd>Enter</kbd>, <kbd>Alt</kbd>+<kbd>Enter</kbd>, or <kbd>\</kbd> then <kbd>Enter</kbd> | New line in the prompt |
| <kbd>Shift</kbd>+<kbd>Tab</kbd> | Change mode (see [Modes and approvals](https://bitsrun.com/docs/agent/modes-and-approvals/)) |
| <kbd>Esc</kbd> | Stop the current answer. Steps already finished stay; a half-finished one is dropped. |
| <kbd>Esc</kbd> <kbd>Esc</kbd> | Rewind to an earlier message, files and conversation |
| <kbd>Up</kbd> / <kbd>Down</kbd> | Earlier and later prompts |
| <kbd>Ctrl</kbd>+<kbd>R</kbd> | Find an earlier prompt containing the text you type |
| <kbd>Ctrl</kbd>+<kbd>A</kbd> / <kbd>Ctrl</kbd>+<kbd>E</kbd> | Start and end of the line |
| <kbd>Alt</kbd>+<kbd>B</kbd> / <kbd>Alt</kbd>+<kbd>F</kbd> | One word left and right |
| <kbd>Ctrl</kbd>+<kbd>W</kbd> | Delete the word before the cursor |
| <kbd>Ctrl</kbd>+<kbd>U</kbd> / <kbd>Ctrl</kbd>+<kbd>K</kbd> | Delete to the start or the end of the line |
| <kbd>Tab</kbd> | Complete a `/` command or an `@` file name |
| <kbd>Ctrl</kbd>+<kbd>L</kbd> | Clear the screen |
| <kbd>Ctrl</kbd>+<kbd>T</kbd> | Show the agent's to-do list |
| <kbd>Ctrl</kbd>+<kbd>O</kbd> | Show collapsed pastes in full, or the model's reasoning from the last answer |
| <kbd>Ctrl</kbd>+<kbd>G</kbd> | Edit the prompt in your editor (`$VISUAL` or `$EDITOR`) |
| <kbd>Ctrl</kbd>+<kbd>V</kbd> | Paste an image from the clipboard |
| <kbd>Ctrl</kbd>+<kbd>C</kbd> | Clear what you typed; press twice to leave |
| <kbd>Ctrl</kbd>+<kbd>D</kbd> | Leave, on an empty prompt |

Every one of these can be changed. See [Keybindings](https://bitsrun.com/docs/agent/extensions/#keybindings).

> [!TIP]
> <kbd>Shift</kbd>+<kbd>Enter</kbd> needs a terminal that reports it (most modern ones do). <kbd>Alt</kbd>+<kbd>Enter</kbd> and <kbd>\</kbd> then <kbd>Enter</kbd> work everywhere.

## Editing your prompt

The prompt is a small editor. Type over several lines, move with the arrow keys and the word and line keys above, and in the full-screen view click anywhere in the prompt to put the cursor there. Your earlier prompts are kept as history. For a long prompt, <kbd>Ctrl</kbd>+<kbd>G</kbd> opens it in your own editor; save and close it to bring the text back.

## Pasting

Pasting never sends the prompt by accident, even when the text has many lines. Indentation, tabs and line endings stay exactly as they were.

A long paste shows as a short marker so the prompt stays readable:

```text
> Why does this fail? [Pasted text #1, 120 lines]
```

The full text is sent when you press <kbd>Enter</kbd>. Press <kbd>Ctrl</kbd>+<kbd>O</kbd> to see it first.

## The number pad

The number pad types digits, the decimal point, the operators and <kbd>Enter</kbd> as you expect, with Num Lock on or off, including on Windows. To check exactly what your terminal sends for any key, run:

```bash
bitsrun code keytest
```

## The ! and # prefixes

- **`!` runs a command yourself.** `!npm test` runs right away in the project folder, with no approval (you typed it), shows the output, and gives it to the model as context for your next message.
- **`#` adds a project note.** `#Use pnpm, not npm` appends the line to `BITSRUN.md` in the project, which the agent reads in every session. It applies from your next message.

## Files and images

Type `@` and part of a file or folder name, then press <kbd>Tab</kbd> to complete it:

```text
> Explain what @src/lib/usage.ts does and add tests for @src/lib/
```

When you send, files are attached as text, folders as a listing of what they contain, and image files as images. Credential files and paths outside the project ask before they are attached. Limits: 100,000 characters per file and 300,000 per message.

To attach an image, press <kbd>Ctrl</kbd>+<kbd>V</kbd> with an image on the clipboard (macOS, Windows, and Linux on Wayland or X11), or drag an image file onto the terminal. Up to 5 images per message, 5 MB each. When an image is waiting on the clipboard, a hint above the prompt says so. The model needs to support images.

## Commands menu

Type `/` and a list of every command appears with what it does, your own custom commands included, eight at a time. Use <kbd>Up</kbd> and <kbd>Down</kbd> to move, <kbd>Tab</kbd> to complete, <kbd>Enter</kbd> to run, <kbd>Esc</kbd> to hide it. The full list is on [bitsrun coding agent](https://bitsrun.com/docs/agent/#commands-inside-the-agent).

## Selecting and copying

By default bitsrun runs **full screen** with its own scrollback:

- Scroll with the mouse wheel or <kbd>PgUp</kbd> and <kbd>PgDn</kbd>. Any other key returns to the newest output.
- **Drag to select. The selection is copied when you release the mouse,** and bitsrun shows "Copied N characters". Double-click selects a word (a path or URL counts as one word), and triple-click a whole line.
- Copying works over SSH and inside tmux too, because bitsrun sends the text to your terminal's clipboard (a standard terminal feature called OSC 52) as well as to your computer's clipboard.
- Copied text is exactly what was printed: wrapped lines are joined back together and colors are left out.
- Hold <kbd>Shift</kbd> while dragging (<kbd>Option</kbd> in iTerm2, <kbd>Fn</kbd> in Terminal.app) to use your terminal's own selection instead.
- When you leave, the conversation is printed to your normal terminal, so it stays in its scrollback. The view keeps the newest 20,000 lines.

To copy the last answer as plain text without selecting anything, type `/copy`.

> [!NOTE]
> In tmux, add `set -g mouse on` to your tmux configuration so mouse events reach bitsrun.

### The classic view

If you prefer your terminal's own scrollback and selection, use the classic view, which never captures the mouse. Choose one way:

- for one session: `bitsrun --classic`
- always: add `"fullScreen": false` to `settings.json` in your config folder
- with an environment variable: `BITSRUN_FULLSCREEN=0`

bitsrun also uses the classic view on its own when the terminal cannot show full screen (for example with `TERM=dumb`).

## The status line

While the agent works, the line under the prompt is never blank. It shows the BitsRun loader, a word for what is happening, then the time so far, the speed in tokens per second, and a reminder that <kbd>Esc</kbd> stops it:

```text
▌█ Flipping bits... │ 12s │ 41 tok/s │ esc stops
▌█ Waking your endpoint... │ 34s of about 2m │ esc stops
```

| State | What it means |
|---|---|
| **Waking your endpoint** | Your BitsRun endpoint is starting, with the time so far and the expected wait. If no GPU is free yet, it says so. |
| A thinking word, such as **Thinking**, **Bitshifting**, **Flipping bits**, **Pondering** or **Connecting the dots** | The model is working out its answer. Reasoning models show the latest line of their reasoning; <kbd>Ctrl</kbd>+<kbd>O</kbd> shows it in full afterwards. |
| **Working** | A tool is running, with its target, for example `Editing src/app.ts` or `Running npm test`. |
| **Waiting for you** | An approval is open. |

Colors are left out when the `NO_COLOR` environment variable is set. The loader stands still when you set `BITSRUN_REDUCED_MOTION=1`, and in terminals that cannot animate.

When a slow endpoint start finishes while you are in another window, bitsrun rings the terminal bell and shows a desktop notification. Turn that off with `"notifications": false` in `settings.json`.
