Configuration

Configuration

Sinclair reads a single settings.json — JSON with // comments. Appearance and keybindings reload the instant you save it — no restart required.

Where the config lives

Sinclair loads its settings from $XDG_CONFIG_HOME/sinclair/settings.json, falling back to ~/.config/sinclair/settings.json when XDG_CONFIG_HOME is unset (Windows: %APPDATA%\sinclair\settings.json). The file is created on demand, so you can start from an empty {} (or no file at all) and add only the keys you care about. A legacy key = value config file from older versions is migrated into settings.json once on launch and no longer read.

If you would rather not edit text by hand, open the built-in GUI settings with ⌘, and the same options are exposed there.

Format

The file is JSON with comments: one object, one member per setting. // comment lines are allowed and ignored.

Most keys take a single scalar value. A handful of keys are lists and take a JSON array, one entry per value. The list keys are font-family, font-feature, keybind, palette, plugin, container, agent-custom, redact, trigger, snippet, and profile.

Bad lines never abort the load. An unknown key, a malformed value, or a typo becomes a friendly diagnostic surfaced on startup, and the rest of the file is applied normally.

// ~/.config/sinclair/settings.json
{
  "font-family": ["JetBrains Mono", "Menlo"],   // fallback chain, in order
  "font-size": 14,
  "font-feature": ["+liga", "ss01"],

  "theme": "Catppuccin Mocha",
  "cursor-style": "bar",
  "copy-on-select": true,
  "scrollback-limit": 50000
}

Live reload

Sinclair watches the config file. Appearance settings (fonts, theme, colors, padding, cursor) and keybindings take effect the moment you save — there is no need to quit and relaunch.

Tip

Keep the config open in a split next to a live terminal and tweak fonts or themes interactively — each save redraws immediately.

Options

Every supported key is listed below, grouped by area. Keybindings have their own syntax and reference; see the Keybindings page for the keybind option.

Fonts & text

KeyTypeDefaultDescription
font-familystring (repeatable)MenloPrimary font; repeat to build a fallback chain in order of preference.
font-sizefloat13.0Font size in points.
font-styleenum normal|bold|italic|bold-italicnormalBase style applied to the default text.
font-featurestring (repeatable)noneOpenType feature codes, e.g. +liga, -calt, ss01, cv01=2.
adjust-cell-widthint0Pixels added to (or removed from) each cell's width.
adjust-cell-heightint0Pixels added to (or removed from) each cell's height.

Theme & colors

KeyTypeDefaultDescription
themestringDarkBuilt-in or custom theme name. Matching is case-, space-, dash-, and underscore-insensitive.
theme-lightstringnoneTheme used when the OS is in light mode. Set with theme-dark to follow the system appearance automatically (live).
theme-darkstringnoneTheme used when the OS is in dark mode.
background-opacityfloat1.0Window background alpha; the terminal goes translucent. Clamped to 0.2..=1.0.
background-imagepathnoneImage drawn behind the terminal (best with background-opacity < 1 so it shows through).
badgestringnoneFaint watermark drawn in each pane's corner; {cwd} and {host} are substituted per pane.
backgroundhexnoneOverride the theme background color.
foregroundhexnoneOverride the theme foreground color.
bold-is-brightboolfalseRender bold text using the bright ANSI palette variant.
minimum-contrastfloat1.0Minimum foreground/background contrast ratio. Clamped to 1..=21.
split-divider-colorhexnoneColor of the divider between splits.
unfocused-split-opacityfloat0.7Opacity of splits that are not focused. Clamped to 0.15..=1.0.
palettestring (repeatable)noneOverride a single ANSI color as N=#rrggbb, where N is index 0–255.

Cursor

KeyTypeDefaultDescription
cursor-styleenum block|bar|underlineblockShape of the text cursor.
cursor-style-blinkbooltrueWhether the cursor blinks.
cursor-colorhexnoneOverride the cursor color.
cursor-texthexnoneColor of the glyph under the cursor.
selection-foregroundhexnoneText color within a selection.
selection-backgroundhexnoneBackground color of a selection.

Window & padding

KeyTypeDefaultDescription
window-padding-xint2Horizontal padding (pixels) between the grid and the window edge.
window-padding-yint2Vertical padding (pixels) between the grid and the window edge.
window-widthint (cells)0 (80)Initial window width in cells; 0 means 80.
window-heightint (cells)0 (24)Initial window height in cells; 0 means 24.
titlestringnoneFixed window title; overrides the title set by the running program.
quit-after-last-window-closedboolfalseQuit the app once the last window closes.
window-inherit-working-directorybooltrueNew windows inherit the working directory of the focused surface.
mouse-scroll-multiplierfloat1.0Scroll speed multiplier. Clamped to 0.01..=10000.
mouse-hide-while-typingboolfalseHide the mouse cursor while you type.
smart-selectbooltrueDouble-click selects the whole URL / email / path / git hash under the pointer, falling back to a word.
middle-click-pasteboolfalsePaste the current selection with a middle click (X-style).
focus-follows-mouseboolfalseFocus the split the pointer moves over, without a click.
macos-option-as-altenum auto|left|right|true|falseautoTreat the macOS Option key as Alt for key encoding.

Shell & behavior

KeyTypeDefaultDescription
commandstring (shell path)none (login shell)Program to run instead of the default login shell.
working-directorystringnone ($HOME)Initial working directory for new surfaces.
copy-on-selectboolfalseCopy selected text to the clipboard automatically.
timestampsboolfalseShow a faint relative time (5s/2m/1h/3d) beside each scrollback row.
confirm-close-surfacebooltrueSinclair before closing a surface that has a running process.
confirm-quitbooltrueSinclair before quitting the application.

Clipboard & scrollback

KeyTypeDefaultDescription
clipboard-readenum allow|ask|denyaskPolicy for programs reading the clipboard.
clipboard-writeenum allow|ask|denyallowPolicy for programs writing the clipboard.
clipboard-paste-protectionboolfalseWarn before pasting potentially unsafe content.
scrollback-limitint (lines)100000Maximum number of scrollback lines retained.

Shell integration & sessions

KeyTypeDefaultDescription
shell-integrationbooltrueInject OSC 133 prompt marks and OSC 7 cwd reporting into zsh/bash/fish via environment — no rc-file edits.
auto-updatebooltrueCheck GitHub for a newer release on launch and hourly, and offer to update (Homebrew/apt installs defer to the package manager; manual .dmg/AppImage swap in place).
autosuggest-ghostbooltrueFish-style inline ghost text completing the current command; accept with → or End. Needs shell integration.
autosuggest-popupboolfalseShow a completion dropdown under the cursor; ↑/↓ to move, Enter to accept.
autosuggest-tabboolfalseTab cycles inline completions instead of forwarding Tab to the shell.
autosuggest-aiboolfalseWhen nothing local matches, ask Claude for a next-command suggestion (needs AI enabled).
autosuggest-historybooltrueUse captured command history as a suggestion source.
autosuggest-commandsbooltrueUse the built-in common-command list as a suggestion source.
autosuggest-pathsbooltrueComplete filesystem paths from the working directory.
autosuggest-assistbooltrueRank suggestions with the local assist model rather than plain recency.
session-restoreboolfalseRestore windows and splits from the previous run.
tab-title-show-hostboolfalseShow the hostname in tab titles.

Automation & privacy

KeyTypeDefaultDescription
triggerstring (repeatable)noneRegex, optionally regex | Title. When new output matches, a desktop notification fires with the matched line.
redactstring (repeatable)noneRegex whose matches are masked with bullets on every copy path, keeping secrets off the clipboard.
snippetstring (repeatable)nonelabel | command; recalled from the snippet picker (snippets action), inserted into the focused pane.
profilestring (repeatable)nonelabel | command; opens a new tab running the command from the profile picker (profiles action).

Plugins

KeyTypeDefaultDescription
pluginstring (repeatable)nonePath to a plugin directory or a plugin.toml file. ~ expands to the home directory.

AI & relay

KeyTypeDefaultDescription
ai-enabledboolfalseMaster switch for AI features.
ai-optimize-tokensboolfalseCompact prompts sent to agents (whitespace collapsed, terse relay harness) to spend fewer tokens.
mcp-server-enabledboolfalseExpose Sinclair's MCP server for tool calls.
relay-enabledboolfalseEnable the agent mesh relay integration.
relay-start-on-launchboolfalseStart the relay daemon when the app launches.
relay-addressstring127.0.0.1:7777Address the relay server listens on.
relay-default-agentstringclaudeDefault agent launched into a relay split.

Agents

KeyTypeDefaultDescription
agent-claudebooltrueEnable the Claude Code agent.
agent-codexboolfalseEnable the Codex agent.
agent-ollamaboolfalseEnable the Ollama agent.
agent-geminiboolfalseEnable the Gemini agent.
agent-claude-pathstringnoneExplicit path to the Claude Code executable.
agent-codex-pathstringnoneExplicit path to the Codex executable.
agent-gemini-pathstringnoneExplicit path to the Gemini executable.
agent-claude-argsstringnoneExtra CLI flags appended when launching Claude Code, e.g. --dangerously-skip-permissions. Quote values with spaces.
agent-codex-argsstringnoneExtra CLI flags appended when launching Codex.
agent-gemini-argsstringnoneExtra CLI flags appended when launching Gemini.
agent-customstring (repeatable)noneCustom agent as label|command template, with {prompt}, {mcp}, {url}, and {name} placeholders.

AI & relay note

Note

All AI, relay, and agent options default to off. Turn them on only when you intend to use them — see the Agent mesh and MCP pages for setup and details.