Edit keybindings from Settings → Keybindings. That page lists every command, its current shortcut, whether it is a default or your own, and warns about conflicts.
The same configuration lives in ~/.t3/userdata/keybindings.json on the machine running the
server, if you prefer editing it directly. T3 Code writes the built-in defaults into that file on
first run, and adds any new defaults on later startups unless a rule of yours already claims the
command or the shortcut.
The file is a JSON array of rules.
[
{ "key": "mod+g", "command": "terminal.toggle" },
{ "key": "mod+shift+g", "command": "terminal.new", "when": "terminalFocus" }
]Invalid rules are ignored. An invalid file is ignored entirely, and the server logs a warning.
key(required): shortcut string, likemod+j,ctrl+k,cmd+shift+dcommand(required): the command ID to runwhen(optional): boolean expression controlling when the shortcut is active
Modifiers: mod (cmd on macOS, ctrl elsewhere), cmd / meta, ctrl / control, shift,
alt / option.
Examples: mod+j, mod+shift+d, ctrl+l, cmd+k.
Commands are IDs like terminal.toggle, commandPalette.toggle, preview.refresh, and
chat.new. Project scripts are addressable as script.{id}.run, for example script.test.run.
filePicker.toggle opens file search for the active project and defaults to mod+p.
projectSearch.toggle searches inside the active project's files and defaults to mod+shift+f.
Repeating either shortcut closes that search, and switching shortcuts replaces the open search.
themeEditor.toggle opens or closes the floating theme editor and defaults to
mod+alt+shift+t. Select a color label to spotlight the elements that use it; select the label
again to clear the spotlight. The swatch and hex field keep that color selected while you edit it.
Advanced mode groups related app tokens into a smaller set of color families. Changing a family
updates its paired text and interaction states while leaving every unrelated imported color intact.
Use Inspect to pick an element in the app and reveal its color token. Inspect disarms after one
successful pick; its hover glow and badge preview the element and color family that click will select.
Cancel or Escape exits Inspect and clears its selection and spotlight.
rightPanel.toggleMaximized maximizes or restores the open right panel. It has no default shortcut,
so add one in Settings → Keybindings if you want to use it.
recentThreads.next and recentThreads.previous cycle through the threads you opened this
session, most recent first, defaulting to ctrl+tab and ctrl+shift+tab. Keep the modifier held
to preview the list in a small switcher: repeated presses move through it, releasing the modifier
opens the highlighted thread, Enter confirms, and Escape cancels. The list starts fresh each
time the app loads. Browsers reserve ctrl+tab for their own tab switching, so these defaults
work in the desktop app; when running in a browser, bind keys the browser does not claim.
reasoning.decrease and reasoning.increase cycle through the selected model's available
reasoning levels, wrapping at either end. They default to alt+, and alt+. and follow the order
advertised by the model. If an agent is running, the change applies to the next message; it does
not alter work already in progress. Models and providers that do not advertise ordered reasoning
levels are left unchanged.
For Claude models that offer Ultrathink, selecting it adds a leading Ultrathink: control prefix
to the draft, and selecting another level removes that prefix while preserving the rest of the
draft. If ultrathink appears elsewhere in the draft text, remove it before changing levels so T3
Code does not rewrite text it does not own.
The command palette searches active thread titles, projects, branches, user messages, and final agent responses across connected environments. Message matches show one labeled excerpt while keeping the thread's project, branch, and machine context visible. Message search begins after two characters and uses SQLite's ASCII case-insensitive matching.
The full command list and the current defaults are shown in Settings → Keybindings, which always matches the build you are running. Use that rather than a copied list.
Note that chat.new and chat.newLocal both create a thread through the same path. A new thread
inherits the project you were in, along with model and mode selections. Branch, worktree, and
environment mode always come from your configured defaults, not from the thread you were looking
at. To keep a worktree, use the explicit "new thread in this worktree" action in the branch
toolbar. The only difference between the two commands: with the current sidebar and more than one
project, chat.new opens a project chooser first.
Background submission from a new thread is the exception. mod+enter starts that thread and opens
another new thread with the same workspace mode and base branch. New worktree remains selected,
but the new thread does not reuse the worktree created for the thread that just started.
A when expression is evaluated against context keys describing the current UI state. The keys
the app supplies today are terminalFocus, terminalOpen, previewFocus, previewOpen, and
modelPickerOpen. The set is open and grows over time, so treat that as the current list rather
than a fixed one. Any key the running app does not supply evaluates to false.
Operators: ! (not), && (and), || (or), and parentheses.
Examples:
"when": "terminalFocus""when": "terminalOpen && !terminalFocus""when": "!terminalFocus"
- Rules are evaluated in array order.
- For a key event, the last rule where both
keymatches andwhenevaluates totruewins. - Precedence is across commands, not only within the same command. A later rule for a different command can take a key away from an earlier one.