Crush Keyboard Shortcuts
Keyboard shortcuts for Crush, Charm's terminal AI coding agent, on MacWindowsLinux. Launched with crush. Two things make it unusual: the chat pane uses vim-style navigation (j, k, d, u, g, G), and it's command-palette driven rather than slash-command driven. Built from Crush's own default keymap.
Starting & Core Keys
| Action | Shortcut |
|---|---|
| Install with Homebrew | brew install charmbracelet/tap/crushwinget install charmbracelet.crushbrew install charmbracelet/tap/crush |
| Install with npm | npm install -g @charmland/crushnpm install -g @charmland/crushnpm install -g @charmland/crush |
| Install from source (Go) | go install github.com/charmbracelet/crush@latestgo install github.com/charmbracelet/crush@latestgo install github.com/charmbracelet/crush@latest |
| Start Crush in the current project | crushcrushcrush |
| Send the current message | EnterEnterEnter |
| Add a new line without sending | ShiftEnterShiftEnterShiftEnter |
| Add a new line (works in every terminal) | CtrlJCtrlJCtrlJ |
| Quit Crush | CtrlCCtrlCCtrlC |
| Suspend Crush to the shell | CtrlZCtrlZCtrlZ |
| Move focus between panes | TabTabTab |
| Expand the help bar to see more keys | CtrlGCtrlGCtrlG |
| Cancel the current action | EscEscEsc |
Palette, Models & Sessions
| Action | Shortcut |
|---|---|
| Open the command palette — the main way around Crush | CtrlPCtrlPCtrlP |
| Open the model picker and switch provider mid-session | CtrlLCtrlLCtrlL |
| Open the model picker (alternate binding) | CtrlMCtrlMCtrlM |
| Browse and switch sessions | CtrlSCtrlSCtrlS |
| Start a new session | CtrlNCtrlNCtrlN |
| Toggle YOLO mode (auto-approve everything) | CtrlYCtrlYCtrlY |
| Toggle the details panel | CtrlDCtrlDCtrlD |
| Toggle the task list | CtrlTCtrlTCtrlT |
Writing the Prompt
| Action | Shortcut |
|---|---|
| Compose in your external editor | CtrlOCtrlOCtrlO |
| Mention a file to pull it into context | @@@ |
| Open the commands menu from the input box | /// |
| Attach an image | CtrlFCtrlFCtrlF |
| Paste an image from the clipboard | CtrlVCtrlVCtrlV |
| Step back through your previous prompts | ↑↑↑ |
| Delete the attachment at position i | Ctrl+R then {i}Ctrl+R then {i}Ctrl+R then {i} |
| Delete every attachment | Ctrl+R then RCtrl+R then RCtrl+R then R |
Reading the Chat (Vim-Style)
| Action | Shortcut |
|---|---|
| Move down one line | jjj |
| Move up one line | kkk |
| Jump down one whole message | Shift↓Shift↓Shift↓ |
| Jump up one whole message | Shift↑Shift↑Shift↑ |
| Half page down | ddd |
| Half page up | uuu |
| Full page down | fff |
| Full page up | bbb |
| Jump to the top of the conversation | ggg |
| Jump to the newest message | ShiftGShiftGShiftG |
| Expand or collapse the selected block | SpaceSpaceSpace |
| Copy the selection | yyy |
| Clear the selection | EscEscEsc |
| Scroll wide output left | Shift←Shift←Shift← |
| Scroll wide output right | Shift→Shift→Shift→ |
| Focus the sidebar | lll |
| Focus the chat | hhh |
Command Palette Actions
| Action | Shortcut |
|---|---|
| Analyze the project and create its context file | Initialize ProjectInitialize ProjectInitialize Project |
| Start a fresh session | New SessionNew SessionNew Session |
| Switch to another saved session | SessionsSessionsSessions |
| Change the model | Switch ModelSwitch ModelSwitch Model |
| Set how hard the model thinks | Select Reasoning EffortSelect Reasoning EffortSelect Reasoning Effort |
| Compact the conversation to free up context | Summarize SessionSummarize SessionSummarize Session |
| Browse files to attach | Open File PickerOpen File PickerOpen File Picker |
| Compose in your external editor | Open External EditorOpen External EditorOpen External Editor |
| Show or hide the sidebar | Toggle SidebarToggle SidebarToggle Sidebar |
| Show or hide the full key list | Toggle HelpToggle HelpToggle Help |
| Turn auto-approval on or off | Toggle Yolo ModeToggle Yolo ModeToggle Yolo Mode |
| Turn the Docker MCP catalog on or off | Enable Docker MCP CatalogEnable Docker MCP CatalogEnable Docker MCP Catalog |
| Quit Crush | QuitQuitQuit |
No shortcuts found. Try a different search term.
Frequently Asked Questions
How do I exit Crush?
Press Ctrl+C. Crush binds it straight to quit, with no interrupt step and no confirmation, so it behaves like Codex CLI rather than Claude Code — if you meant to stop the agent rather than leave, press Esc instead. You can also pick Quit from the Ctrl+P command palette. Ctrl+Z suspends Crush to the shell if you want it still running in the background.
How do I add a new line in Crush without sending?
Shift+Enter, or Ctrl+J. Crush binds both, and it's thoughtful about the difference: its own help bar shows Ctrl+J by default and swaps the hint to Shift+Enter only when it detects that your terminal can actually report that key. If Shift+Enter seems to send your message, your terminal can't distinguish it — use Ctrl+J.
Why does Ctrl+J do two different things in Crush?
Because it's bound in both panes, and which one has focus decides what happens. In the input box, Ctrl+J inserts a newline. In the chat pane, Ctrl+J moves down a line (it's an alias for the vim-style j). So the same key writes a line break while you're typing and scrolls while you're reading. Tab moves focus between the two, so if Ctrl+J is scrolling when you wanted a newline, your focus is in the wrong pane. Ctrl+K is the matching scroll-up alias.
Does Crush have slash commands?
Not in the way most terminal agents do. Crush is palette-driven: Ctrl+P opens a command palette that you filter by typing, holding actions like Initialize Project, Switch Model, Summarize Session, and Toggle Yolo Mode. Typing / in the input box opens the commands menu too, and @ mentions a file. So there's no fixed catalog of /commands to memorise — you search the palette instead.
How do I navigate the chat history in Crush?
With vim keys, which is unusual for this class of tool. In the chat pane: j and k move a line, d and u go half a page, f and b go a full page, g jumps to the top and Shift+G to the newest message. Shift+↑ and Shift+↓ jump a whole message at a time, Space expands or collapses the selected block, and y copies. For wide output that runs off the edge, Shift+← and Shift+→ scroll sideways. Case matters throughout: lowercase j moves one line, capital J (Shift+J) jumps a whole message, and the same split applies to k / K, h / H, and l / L.
How do I remove a file or image I attached by mistake?
Press Ctrl+R, then the number of the attachment you want gone — Crush shows them in order, so Ctrl+R then 2 drops the second one. Ctrl+R then R removes all of them, and Esc leaves delete mode without removing anything. It's a two-step chord rather than a single key, which is why it isn't obvious from the help bar.
Is Crush the same as opencode?
No — they're two separate projects today, though the names have a shared history and people still mix them up. The practical difference for shortcuts is real: opencode is built around a leader key, so many of its actions are Ctrl+X chords, while Crush binds actions directly to Ctrl combinations and puts the rest behind the Ctrl+P palette. Kilo CLI is a fork of opencode and follows opencode's scheme, not Crush's. If you're switching between them, the leader key is the thing to unlearn.
How do I switch model mid-session in Crush?
Press Ctrl+L to open the model picker (Ctrl+M is bound to the same thing, though the help bar advertises Ctrl+L). You can change provider partway through a conversation without restarting. Select Reasoning Effort in the Ctrl+P palette is the companion setting, letting you dial how hard the model thinks on models that support it.