# pi-command-palette

Floating command palette for [pi](https://github.com/earendil-works/pi) — press `Ctrl+P` to open a searchable overlay. Inspired by OpenCode.

```
┌──────────────────────────────────────────────────────┐
│ ⌕  |  Type to filter…                                │
├──────────────────────────────────────────────────────┤
│ → Switch Model          Choose a model  → sub        │
│   Set Thinking Level    Change thinking level  → sub  │
│   New Session           Start a fresh session         │
│   Fork Session          New session linked to current │
│   Resume Session        Switch to a saved session  →  │
│   Compact Session       Trigger context compaction    │
│   Reload Session        Reload extensions / keybinds  │
│   Pin Position          Save tree position            │
│   Toggle Tool           Enable / disable a tool  →    │
│   About pi              Version, hotkeys, reference → │
└──────────────────────────────────────────────────────┘
```

## Install

```bash
pi install pi-command-palette
```

Or place manually at `~/.pi/agent/extensions/pi-command-palette/index.ts` and run `/reload`.

## Usage

| Key | Action |
|-----|--------|
| `Ctrl+P` | Open palette (requires opt-in, see below) |
| `/palette` | Open palette (always available) |

Navigate with arrow keys, `Enter` to select, `Esc` to go back or close.

### Enable Ctrl+P

By default `Ctrl+P` is **not registered** to avoid interfering with pi's native `app.model.cycleForward`. Opt in by creating `~/.pi/agent/pi-command-palette.json`:

```json
{ "shortcuts": { "ctrl+p": true } }
```

### Disable Ctrl+P (if you enabled it)

```json
{ "shortcuts": { "ctrl+p": false } }
```

## Recommended keybindings (for OpenCode migrants)

pi's `Tab` is hard-wired to `tui.input.tab` (autocomplete) and `Shift+Tab` is `app.thinking.cycle` by default. Use `Alt+←/→` for model switching instead.

Add to `~/.pi/agent/keybindings.json`:

```json
{
  "app.model.cycleForward": "alt+right",
  "app.model.cycleBackward": "alt+left",
  "app.thinking.cycle": "ctrl+t",
  "app.thinking.toggle": "ctrl+n"
}
```

| Key | Action |
|-----|--------|
| `Ctrl+P` | Open palette (opt-in) |
| `Alt+→` | Cycle model forward |
| `Alt+←` | Cycle model backward |
| `Ctrl+T` | Cycle thinking level |
| `Ctrl+N` | Toggle thinking blocks |
| `/palette` | Open palette (fallback) |

## Features

- **Floating overlay** — opens at top-center, doesn't clear your screen
- **Includes filtering** — type to filter; matches label and description
- **Nested menus** — Switch Model, Set Thinking Level, Resume Session, Toggle Tool, About pi
- **Direct execution** — no slash-command forwarding; all items call the pi API directly
- **Ctrl+W** — delete last word in filter

## Links

- [Source](https://github.com/earendil-works/pi-command-palette)
- [pi coding agent](https://github.com/earendil-works/pi)
