---
title: "Your first session"
---

# Your first session

Start the CLI in a project, read the screen, answer approval cards, use the keyboard, pick a model and leave a session so you can resume it.

This page walks through an interactive session: starting it, what the screen shows, how approvals work, and the keys you need.

## Start a session

```bash
cd your-project
neuralinverse                                   # or: ni
neuralinverse "fix the failing test in src/date.ts"   # start with a first prompt
```

If no model provider is configured, the CLI walks you through setup first: choose a provider, enter a key (checked live before anything is saved), pick a default model and a permission mode. See [Providers and models](https://neuralinverse.com/docs/cli/models/).

On a first visit to a repository, run `/bootstrap`: the agent studies the repository and writes `AGENTS.md`, the project instructions it reads at the start of every session. See [Instructions, commands and skills](https://neuralinverse.com/docs/cli/extending/).

## Layouts

The CLI runs **inline** by default. The conversation is written into your terminal's own scrollback, so native scrolling, selection, copy and find keep working, and only a small live region at the bottom of the screen is redrawn.

`--fullscreen` (or `"ui": { "layout": "fullscreen" }`) opens the full-screen app instead. `--inline` selects the default explicitly. Non-interactive runs (`-p`) use neither.

## What the screen shows

```text
  Neural Inverse CLI
  v0.1.0 · anthropic · key in Keychain

  ╭─────────────────────────┬─────────────────────────┬─────────────────────────╮
  │  DIRECTORY              │  MODEL                  │  MODE                   │
  │  ~/work/api             │  claude-sonnet-5-5      │  ask before edits       │
  ╰─────────────────────────┴─────────────────────────┴─────────────────────────╯

  YOU     Fix the window reset bug in @src/middleware/rateLimit.ts

  READ    src/middleware/rateLimit.ts lines 1–84                            ✓ 0.1s

  BASH    $ npm test -- rateLimit                                  ✕ exit 1 · 3.4s

  EDIT    src/middleware/rateLimit.ts                                        +4 −2
           − await redis.expire(key, windowMs / 1000);
           + const ttl = Math.ceil((resetAt - now) / 1000);

  ◧ Streaming   14s · 1.2k tokens   esc interrupt
  ╭──────────────────────────────────────────────────────────────────────────────╮
  │  › also check the partial refunds                                           │
  ╰──────────────────────────────────────────────────────────────────────────────╯
  claude-sonnet-5-5  │  main  │  ctx 18%  │  $0.10                 ask before edits
```

| Part | What it shows |
|---|---|
| Welcome | Name and version, the provider and where its key comes from, then DIRECTORY, MODEL and MODE (in words), and where to start. With an [environment](https://neuralinverse.com/docs/cli/environments/) active, an Environment cell. Signed in, `signed in as <email> · <org>`. |
| Transcript | Written once into the scrollback. Each action has a fixed-width label: `YOU`, `THINK` (with `/show-thinking`), `NI` (the agent's answer), and one per tool: `READ`, `SEARCH`, `LIST`, `BASH`, `EDIT`, `WRITE`, `FETCH`, `TASK`, `CHECK`, `ASK`, `MCP`, `PLAN`. A short outcome sits on the right. Failed commands show their output in a box; edits show changed lines (8 lines; `Ctrl+O` shows all). Each turn ends with a line such as `Done in 4.8s · 1.5k in · 80 out · $0.004`. |
| Live region | The answer being written, running tools with their last output lines, the plan, approval, question and error cards, and a status line such as `Streaming`, `Thinking`, `Running npm test` or `▲ Waiting for approval`. |
| Prompt | A box that grows with multi-line input. `@file` mentions show as chips. Messages you send while the agent works are queued and sent in order. Next-step suggestions appear under the empty prompt (`Alt+1..3` picks one). |
| Status bar | Model, branch, context used, cost, and the permission mode in words. While a failed model request is retried, the model cell turns amber: `▲ model · reconnecting`. |

Colours carry meaning only with a shape: green `✓` passed, amber `▲` needs approval, red `✕` failed. With `"ui": { "reducedMotion": true }` or `NO_MOTION=1`, the spinner and shimmer stay still.

`"ui": { "transcript": "numbered" }` switches to numbered steps (`[01] Read src/app.ts · 84 lines`) with turns separated by rules.

MCP servers connect in the background after the prompt appears; the first message waits for them.

## What you can type

| Input | What it does |
|---|---|
| plain text | Ask the agent to do something. You can keep typing while it works; messages queue. |
| `@path/to/file` | Attach a file or image. Tab completes paths. |
| `!command` | Run a shell command yourself; its output goes with your next message. |
| `/command` | A [slash command](https://neuralinverse.com/docs/cli/slash-commands/). Typing `/` lists them under the input. |

## Approval cards

When a tool call needs your approval, a card shows `▲ APPROVAL NEEDED`, the action, why it asks, and three options:

| Key | Answer |
|---|---|
| `1` or `y` | Yes, once |
| `2` | Yes, and always allow it in this project |
| `3` or `n` | No, and tell the agent what to do instead (a field opens; `Enter` sends what you type) |
| `Esc` | Deny |

Arrow keys and `Enter` also choose. A proposed file edit shows its diff with line numbers instead:

| Key | Answer |
|---|---|
| `y` | Apply |
| `n` | Reject |
| `e` | Open the proposed file in `$VISUAL` or `$EDITOR`; the card returns afterwards |
| `a` | Apply all edits for the rest of the session |

Findings of the [checks gate](https://neuralinverse.com/docs/cli/checks/) appear under the diff. A change blocked by your organisation's signed policy shows "Blocked by org policy" and offers no allow option.

While a failed model request waits to be retried: `r` retries now, `m` switches the model, `l` shows the log of errors, `Esc` stops.

What asks and what runs without asking depends on the mode and your rules. See [Permissions and modes](https://neuralinverse.com/docs/cli/permissions/).

## Keys

| Key | Action |
|---|---|
| `Enter` | Send (queues while the agent is working) |
| `Shift+Enter`, `Alt+Enter`, `Ctrl+J`, `\` then `Enter` | New line. `/terminal-setup` makes `Shift+Enter` work in more terminals |
| `Esc`, `Ctrl+C` | Stop the agent while it works; `Ctrl+C` twice on an empty prompt quits |
| `Ctrl+D` | Quit with a summary of the session (empty prompt) |
| `Tab` on an empty prompt, `Alt+M` | Switch the permission mode |
| `/` | Command list: type to filter, `↑↓` choose, `Tab` completes, `Enter` runs |
| `Tab` | Complete `@paths` and commands |
| `Up` (empty prompt, while working) | Take the last queued message back for editing; `Esc` drops the queue |
| `Ctrl+O` | Show the last tool's full output or diff |
| `Ctrl+T` | Show or hide the full plan while the agent works |
| `Ctrl+R` | Search prompt history |
| `Ctrl+L` | Clear the screen (the scrollback stays) |

### Full-screen layout

From 110 columns, `--fullscreen` shows a header row (Neural Inverse, model, branch, context and cost), the transcript on the left, a PLAN and FILES pane on the right (`A` added, `M` modified; `Ctrl+B` hides it) and the prompt along the bottom. It adds a command palette (`Ctrl+P`), a model picker on `Ctrl+O`, block focus with `Tab` and `Shift+Tab` (`Enter` expands, `y` copies), scrolling with `PgUp`, `PgDn`, `Ctrl+U`, `Ctrl+D` and the mouse wheel, `F2` to select text with the mouse, and `Ctrl+Z` to suspend. `/keys` lists the keys of the layout in use.

### Change the key bindings

`/keybindings` opens `~/.neuralinverse/keybindings.json` in your editor; it is created with every action, its default and a comment. Each action takes one chord, a list, or `null` to unbind; `"inline": {…}` and `"fullscreen": {…}` hold layout-specific overrides.

Actions: `submit`, `newline`, `interrupt`, `quit`, `cycleMode`, `openModels`, `openPalette`, `toggleSidePanel`, `historySearch`, `expandLast`, `attachImage`, `clearInput`, `clearScreen`, `complete`, `suspend`, `selectMode`, `togglePlan`.

Chords are `[ctrl+][alt+][shift+]<key>` (`meta` and `option` mean alt). Keys are characters or `enter`, `tab`, `escape`, `backspace`, `delete`, `space`, arrows, `home`, `end`, `pageup`, `pagedown`, `insert`, `f1` to `f4`. `/keybindings show` lists the effective bindings and reports unknown actions, malformed chords and conflicts; a rejected entry keeps its default. `/keybindings reset` restores the defaults and keeps the old file as `.bak`.

## Pick a model

`/model` lists models from every configured provider, fetched live from each provider's API (cached for a day). Inline, the list opens under the input: type to filter, and the highlighted model shows its context size and prices. In the full-screen layout, a two-pane picker also shows output limits, image and reasoning support, and whether the provider's key is set. `Tab` cycles reasoning effort; `Enter` switches.

## Leave and come back

`/quit` or `Ctrl+D` ends the session. The transcript stays in your scrollback, followed by a summary: duration, tokens in and out, cost, the files changed with their `+` and `−` counts, and a line such as `Resume with ni --resume 7f3a`. The id shown is the shortest prefix that is unique in this folder; `--resume` accepts any unique prefix.

```bash
neuralinverse --continue         # the latest session in this folder
neuralinverse --resume 7f3a      # a given session
neuralinverse --resume           # pick from a list
```

See [Sessions and context](https://neuralinverse.com/docs/cli/sessions/) for undo, restore, forks and exports.
