Short answer: learn shift+tab (permission modes), escape, ctrl+r (prompt history) and ctrl+g (write the prompt in your editor) first. To rebind a key, add it to ~/.claude/keybindings.json, and check what that key already does before you take it.
Claude Code is a terminal app, and most of its speed is in the keyboard. A handful of shortcuts cover nearly everything, and you can rebind them. The catch is that a new binding can quietly take a key away from something else.
Which shortcuts are worth learning first?
| Keys | What it does |
|---|---|
shift+tab | Cycle permission modes |
escape | Cancel the current input |
ctrl+c | Cancel what is running |
ctrl+d | Exit (twice to confirm) |
ctrl+r | Search your prompt history |
ctrl+o | Show or hide the verbose transcript |
ctrl+t | Show or hide Claude's checklist |
ctrl+j | New line without sending |
ctrl+g | Open your editor to write the prompt |
ctrl+s | Stash the prompt you are writing |
ctrl+v | Paste an image (alt+v on Windows and WSL) |
ctrl+b | Send a running task to the background |
alt+p | Open the model picker |
alt+t | Toggle extended thinking |
On a Mac, alt is the Option key, and your terminal may need "Use Option as Meta" turned on for it to work.
Where do keybindings live?
Your own bindings go in ~/.claude/keybindings.json. It is a personal file: keys are about your hands and your terminal, so there is no project version to commit.
Bindings are grouped by the screen they apply to: each block names a context and maps keys to actions. This one opens your editor with ctrl+e while you type, and null frees ctrl+s:
{
"bindings": [
{
"context": "Chat",
"bindings": {
"ctrl+e": "chat:externalEditor",
"ctrl+s": null
}
}
]
}Global is the context for keys that should work everywhere.
Actions are named the way the interface names them, like app:interrupt or history:search. There are over a hundred of them across about twenty screens (Chat, Transcript, HistorySearch, Confirmation and more).
How do you write a key?
- Modifiers come first, joined with
+:ctrl+shift+k - A chord is two strokes with a space:
ctrl+x ctrl+e - A capital letter on its own means Shift:
Kisshift+k. After a modifier it does not:ctrl+Kis justctrl+k
Which keys can you not rebind?
Some strokes never reach Claude Code as themselves:
ctrl+candctrl+dare hardcoded to interrupt and exitctrl+marrives as Enter, because a terminal sends the same bytes for both. Binding it writes a line that can never fire
Your terminal or multiplexer may also swallow keys first. tmux's prefix key, for example, never reaches the app inside it.
What did my binding shadow?
This is the real question with any rebinding. The same key often does different things on different screens: ctrl+s stashes your prompt in Chat but switches views on the Agents screen. Bind it globally and you lose both.
Two habits avoid surprises:
- Scope the binding to the screen you mean with
when. A binding for one screen shadows far less than a global one - Look the key up before you take it. If it is already in use, pick another
Where can you check this?
How do you check a binding before you write it?
Config Studio for Claude Code has a Keybindings surface that knows every default binding on every screen. Type an action and a key, and it tells you what that key already does and where, before the file exists, then writes the entry for ~/.claude/keybindings.json.

