Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/Emanuele-web04/synara/llms.txt

Use this file to discover all available pages before exploring further.

Synara ships with a built-in set of keyboard shortcuts for every major action — opening the terminal, creating chat threads, focusing the composer, and more. You can override any of them, add new ones, or layer context-sensitive rules using a plain JSON file. No restart is required; Synara watches the file and reloads it automatically whenever it changes.

File Location

~/.synara/userdata/keybindings.json
If you override the home directory with --home-dir or SYNARA_HOME, the path becomes:
$SYNARA_HOME/userdata/keybindings.json
On first launch Synara writes all default bindings to this file so you have a complete, editable starting point. New defaults introduced in future releases are backfilled automatically on startup unless the shortcut context is already taken by a custom rule.

Rule Shape

The file must be a JSON array of rule objects. Each rule supports three fields:
key
string
required
The keyboard shortcut string. Modifier names are joined to the base key with +. See Key Syntax for the full list of accepted modifiers.
command
string
required
The action to fire. Must be one of the Available Commands. Dynamic script commands follow the pattern script.<id>.run.
when
string
An optional boolean expression that gates when the shortcut is active. When omitted the rule fires regardless of focus state. See When Conditions.

Minimal example

[
  { "key": "mod+g", "command": "terminal.toggle" },
  { "key": "mod+shift+g", "command": "terminal.new", "when": "terminalFocus" }
]

Default Keybindings

The table below lists every default shortcut shipped with Synara. These are the exact values written to keybindings.json on first launch.
KeyCommandWhen
mod+bsidebar.toggle!terminalFocus
mod+ksidebar.search
mod+shift+osidebar.addProject!terminalFocus
mod+isidebar.importThread!terminalFocus
mod+jterminal.toggle
mod+dterminal.splitterminalFocus
mod+shift+arrowrightterminal.splitRightterminalFocus
mod+shift+arrowleftterminal.splitLeftterminalFocus
mod+shift+arrowdownterminal.splitDownterminalFocus
mod+shift+arrowupterminal.splitUpterminalFocus
mod+tterminal.newterminalFocus
mod+wterminal.closeterminalFocus
mod+shift+jterminal.workspace.newFullWidth
mod+wterminal.workspace.closeActiveterminalWorkspaceOpen
mod+1terminal.workspace.terminalterminalWorkspaceOpen
mod+2terminal.workspace.chatterminalWorkspaceOpen
mod+shift+bbrowser.toggle!terminalFocus
mod+ddiff.toggle!terminalFocus
cmd+lcomposer.focus.toggle!terminalFocus
mod+shift+mmodelPicker.toggle!terminalFocus
mod+shift+etraitsPicker.toggle!terminalFocus
mod+shift+usettings.usage!terminalFocus
mod+nchat.new!terminalFocus
mod+shift+nchat.newLatestProject!terminalFocus
mod+alt+nchat.newChat!terminalFocus
mod+shift+tchat.newTerminal!terminalFocus
mod+alt+cchat.newClaude!terminalFocus
mod+alt+xchat.newCodex!terminalFocus
mod+alt+rchat.newCursor!terminalFocus
mod+alt+gchat.newGemini!terminalFocus
mod+\chat.split!terminalFocus
ctrl+tabview.recent.next
ctrl+shift+tabview.recent.previous
mod+1thread.jump.1!terminalFocus && !terminalWorkspaceOpen
mod+2thread.jump.2!terminalFocus && !terminalWorkspaceOpen
mod+3thread.jump.3!terminalFocus && !terminalWorkspaceOpen
mod+4thread.jump.4!terminalFocus && !terminalWorkspaceOpen
mod+5thread.jump.5!terminalFocus && !terminalWorkspaceOpen
mod+6thread.jump.6!terminalFocus && !terminalWorkspaceOpen
mod+7thread.jump.7!terminalFocus && !terminalWorkspaceOpen
mod+8thread.jump.8!terminalFocus && !terminalWorkspaceOpen
mod+9thread.jump.9!terminalFocus && !terminalWorkspaceOpen
mod+shift+]chat.visible.next!terminalFocus
mod+shift+[chat.visible.previous!terminalFocus
mod+oeditor.openFavorite
mod maps to Cmd on macOS and Ctrl on Windows/Linux. cmd+l uses Cmd specifically so that Ctrl+L remains available to shells on non-macOS platforms.

Available Commands

CommandDescription
sidebar.toggleShow or hide the sidebar
sidebar.searchFocus the sidebar search / command palette
sidebar.addProjectOpen the add-project dialog
sidebar.importThreadImport a thread from a file

Terminal

CommandDescription
terminal.toggleOpen or close the terminal drawer
terminal.splitSplit the active terminal pane
terminal.splitRightSplit right
terminal.splitLeftSplit left
terminal.splitDownSplit down
terminal.splitUpSplit up
terminal.newOpen a new terminal tab
terminal.closeClose/kill the focused terminal
terminal.workspace.newFullWidthOpen a new full-width terminal workspace tab
terminal.workspace.closeActiveClose the active terminal workspace tab
terminal.workspace.terminalSwitch to the Terminal view inside the workspace
terminal.workspace.chatSwitch to the Chat view inside the workspace

Chat & Threads

CommandDescription
chat.newNew thread, preserving the active branch/worktree state
chat.newLatestProjectNew thread for the active project in a fresh environment
chat.newChatNew chat-only thread
chat.newLocalNew thread in a local environment
chat.newTerminalNew terminal-first thread
chat.newClaudeNew thread using the Claude provider
chat.newCodexNew thread using the Codex provider
chat.newCursorNew thread using the Cursor provider
chat.newGeminiNew thread using the Gemini provider
chat.splitSplit the current chat view
chat.visible.nextSwitch to the next visible thread
chat.visible.previousSwitch to the previous visible thread
thread.jump.1thread.jump.9Jump directly to thread slot 1–9
view.recent.nextCycle forward through recently visited views
view.recent.previousCycle backward through recently visited views

Composer & Pickers

CommandDescription
composer.focus.toggleFocus or blur the chat prompt composer
modelPicker.toggleOpen or close the model picker
traitsPicker.toggleOpen or close the traits/effort picker
settings.usageOpen the usage settings panel

Editor & Browser

CommandDescription
editor.openFavoriteOpen the current project or worktree in the last-used editor
browser.toggleShow or hide the in-app browser panel
diff.toggleShow or hide the diff view

Scripts

Command patternDescription
script.<id>.runRun a project script by its ID. The <id> must be 1–24 characters, lowercase alphanumeric with hyphens (a-z0-9 and -), and must not start with a hyphen. Example: script.test.run, script.build-watch.run.

Key Syntax

A key string is one or more modifier names followed by a base key, all separated by +.

Modifiers

TokenMeaning
modCmd on macOS, Ctrl on all other platforms
cmd / metaThe Meta / Command key
ctrl / controlThe Control key
shiftThe Shift key
alt / optionThe Alt / Option key

Base keys

Any single character, named key (arrowup, arrowdown, arrowleft, arrowright, escape, space, tab, enter, backspace, …), or the literal + character (written as a trailing + in the string, e.g. mod++).

Examples

mod+j
mod+shift+arrowright
ctrl+tab
cmd+l
mod+alt+g

When Conditions

The when field accepts a boolean expression evaluated against the current UI context. It is optional — omit it to make a shortcut always active.

Context keys

KeyTrue when…
terminalFocusThe keyboard focus is inside a terminal pane
terminalOpenThe terminal drawer is open (even if not focused)
terminalWorkspaceOpenA terminal workspace tab is the active view
Unknown context keys evaluate to false.

Operators

OperatorSyntax
Not!condition
AndconditionA && conditionB
OrconditionA || conditionB
Grouping(conditionA && conditionB) || conditionC

Examples

{ "key": "mod+d", "command": "terminal.split",       "when": "terminalFocus" }
{ "key": "mod+d", "command": "diff.toggle",           "when": "!terminalFocus" }
{ "key": "mod+w", "command": "terminal.close",        "when": "terminalFocus" }
{ "key": "mod+1", "command": "terminal.workspace.terminal", "when": "terminalWorkspaceOpen" }
{ "key": "mod+1", "command": "thread.jump.1",         "when": "!terminalFocus && !terminalWorkspaceOpen" }

Precedence

Synara evaluates the full keybindings array in order for every key event. The last matching rule — where both key matches the pressed chord and when evaluates to true — wins. This means later entries in the array take priority over earlier ones. When you add entries to keybindings.json, your custom rules are appended after the defaults, so they naturally override any conflicting default with the same shortcut context.
Invalid rules (unparseable key strings or unrecognized commands) are silently ignored at runtime. A warning is written to the server log, but the UI will not show an error. Double-check the server log if a shortcut does not seem to work.

Putting It All Together

The example below overrides the terminal toggle key, adds a script shortcut, and maps a provider-specific new-thread shortcut only outside the terminal:
[
  { "key": "mod+j", "command": "terminal.toggle" },
  { "key": "mod+d", "command": "terminal.split", "when": "terminalFocus" },
  { "key": "mod+shift+arrowright", "command": "terminal.splitRight", "when": "terminalFocus" },
  { "key": "mod+shift+arrowleft", "command": "terminal.splitLeft", "when": "terminalFocus" },
  { "key": "mod+shift+arrowdown", "command": "terminal.splitDown", "when": "terminalFocus" },
  { "key": "mod+shift+arrowup", "command": "terminal.splitUp", "when": "terminalFocus" },
  { "key": "mod+t", "command": "terminal.new", "when": "terminalFocus" },
  { "key": "mod+w", "command": "terminal.close", "when": "terminalFocus" },
  { "key": "cmd+l", "command": "composer.focus.toggle", "when": "!terminalFocus" },
  { "key": "mod+o", "command": "editor.openFavorite" },
  { "key": "mod+shift+r", "command": "script.test.run" },
  { "key": "mod+alt+c", "command": "chat.newClaude", "when": "!terminalFocus" }
]

Build docs developers (and LLMs) love