T3 Code reads keybindings from:
~/.t3/keybindings.json
The file must be a JSON array of rules:
[
{ "key": "mod+g", "command": "terminal.toggle" },
{ "key": "mod+shift+g", "command": "terminal.new", "when": "terminalFocus" }
]See the full schema for more details: packages/contracts/src/keybindings.ts
[
{ "key": "mod+j", "command": "terminal.toggle" },
{ "key": "mod+d", "command": "terminal.split", "when": "terminalFocus" },
{ "key": "mod+n", "command": "terminal.new", "when": "terminalFocus" },
{ "key": "mod+w", "command": "terminal.close", "when": "terminalFocus" },
{ "key": "mod+n", "command": "chat.new", "when": "!terminalFocus" },
{ "key": "mod+shift+o", "command": "chat.new", "when": "!terminalFocus" },
{ "key": "mod+shift+n", "command": "chat.newLocal", "when": "!terminalFocus" },
{ "key": "mod+o", "command": "editor.openFavorite" }
]For most up to date defaults, see DEFAULT_KEYBINDINGS in apps/server/src/keybindings.ts
Each entry supports:
key(required): shortcut string, likemod+j,ctrl+k,cmd+shift+dcommand(required): action IDwhen(optional): boolean expression controlling when the shortcut is active
Invalid rules are ignored. Invalid config files are ignored. Warnings are logged by the server.
terminal.toggle: open/close terminal drawerterminal.split: split terminal (in focused terminal context by default)terminal.new: create new terminal (in focused terminal context by default)terminal.close: close/kill the focused terminal (in focused terminal context by default)chat.new: create a new chat thread preserving the active thread's branch/worktree statechat.newLocal: create a new local chat thread for the active project (no worktree context)editor.openFavorite: open current project/worktree in the last-used editorscript.{id}.run: run a project script by id (for examplescript.test.run)
Supported modifiers:
mod(cmdon macOS,ctrlon non-macOS)cmd/metactrl/controlshiftalt/option
Examples:
mod+jmod+shift+dctrl+lcmd+k
Currently available context keys:
terminalFocusterminalOpen
Supported operators:
!(not)&&(and)||(or)- parentheses:
()
Examples:
"when": "terminalFocus""when": "terminalOpen && !terminalFocus""when": "terminalFocus || terminalOpen"
Unknown condition keys evaluate to false.
- Rules are evaluated in array order.
- For a key event, the last rule where both
keymatches andwhenevaluates totruewins. - That means precedence is across commands, not only within the same command.