Superset settings via CLI
Change the desktop app's user settings from the command line with
superset settings. Works offline, no login required; everything is local
to this machine.
Commands
superset settings list # every key: value, default, allowed values
superset settings get <key> # effective value (default if unset)
superset settings set <key> <value> # validated write
superset settings reset <key> # back to the app default
superset settings theme list # system + built-ins + imported custom themes
superset settings theme get
superset settings theme set <id> # e.g. dark | light | monokai | system | <custom id>
superset settings theme set system --system-light light --system-dark monokai
superset settings theme export <id> [--out <file>] # dump full theme JSON (starter)
superset settings theme import <file> # add/replace custom themes (validated)
superset settings theme remove <id> # delete a custom theme
Prefer --json (auto-on in agent environments; parse it rather than
matching the human sentences) and superset settings list to discover keys
and allowed values instead of guessing. In Superset terminals superset is
already on PATH. SUPERSET_HOME_DIR overrides the target profile
(~/.superset by default); useful for testing against a sandbox copy.
Creating custom themes
Two paths; both end with import → set (a running app restyles live).
From scratch: a minimal file is enough. Every color you omit is filled
in from the built-in base theme for your declared type, so start small and
override only what you care about:
{
"name": "Midnight Ocean",
"type": "dark",
"ui": {
"background": "#071A2E",
"sidebar": "#061426",
"primary": "#38BDF8"
},
"terminal": { "background": "#071A2E", "cursor": "#38BDF8" }
}
superset settings theme import ocean.json # -> Imported 1 theme: midnight-ocean
superset settings theme set midnight-ocean # a running app applies it live
From a starter: export any theme's complete definition (all ~38 ui +
21 terminal colors) and edit it. Best when restyling everything:
superset settings theme export dark --out my-theme.json
# edit, then:
superset settings theme import my-theme.json && superset settings theme set my-theme
Theme file anatomy
| Field |
Notes |
name / id |
either works; the id is slugified ("Midnight Ocean" → midnight-ocean). Reserved: dark, light, monokai, system |
type |
"dark" or "light" (defaults to dark); picks the base theme that fills omitted colors |
ui |
app chrome. Highest-impact keys: background, foreground, sidebar, card, popover, primary, accent, muted, border, input, ring, plus sidebar* variants |
terminal |
xterm colors: background, foreground, cursor, selectionBackground, and the 16 ANSI names (red, brightRed, ...) |
editor |
optional { "colors": {...}, "syntax": {...} } for the file editor; generated from ui/type when omitted |
author, version, description |
optional metadata |
Rules (same parser as the app's Appearance → Import): all colors are CSS color
strings; missing colors inherit from the base; a file can hold one theme, an
array, or a pack { "themes": [...] }; max 256 KB; re-importing an id
replaces that theme; import never activates; theme set does.
Verify and iterate
superset settings theme list # SOURCE column shows custom; * marks active
superset settings theme get # active theme id
superset settings theme export midnight-ocean # round-trip the stored result
superset settings theme remove midnight-ocean # active falls back to dark
Iterating on colors: each import replaces the theme, and a running app
applies it live; the loop is edit → import → theme set <id> (re-set to
re-apply the active theme after edits).
How changes take effect
After every write the CLI nudges the running desktop app
(POST /settings-changed on its local server) and the app refreshes
immediately, themes included, no restart. The command output tells you
which happened: "refreshed immediately" / "Applied to the running desktop
app" means the nudge landed. The notes below are the fallback behavior when
no app acknowledged (app not running, or an older app version):
- Regular settings (most of
settings set): written to
~/.superset/local.db. A running older app picks them up the next time
its window regains focus; no restart needed.
- Git settings (
branchPrefixMode, branchPrefixCustom,
worktreeBaseDir): host-wide values written through the local host
service (auth via its manifest, no login needed). Requires the desktop app
or superset start to be running; also refreshed on window focus.
- Ringtone caveat:
selectedRingtoneId changes what sound plays
immediately, but the checkmark in Settings → Notifications only updates
after an app restart.
- Theme (
settings theme set): applies live when the nudge lands. If
the output shows the restart fallback instead: quit the app cleanly first,
then set, then relaunch; a running older app overwrites the file on its
own writes. If you are an agent running inside a Superset terminal, never
kill the app yourself (that kills your own session); ask the user to
restart instead.
- Both stores are created by the desktop app. On a machine that never ran
the app,
set commands fail with a hint to launch it once.
Key reference (by section)
Booleans accept true/false/on/off/1/0/yes/no.
| Section |
Keys |
| behavior |
confirmOnQuit, fileOpenMode (split-pane|new-tab), showResourceMonitor, openLinksInApp, defaultEditor (vscode, cursor, zed, ...) |
| git |
branchPrefixMode (none|github|author|custom), branchPrefixCustom, worktreeBaseDir; host-wide, written through the local host service, so the app (or superset start) must be running |
| notifications |
selectedRingtoneId (shamisen, arcade, ping, quick, doowap, woman, african, afrobeat, edm, comeback, shabala), notificationSoundsMuted, notificationVolume (0-100) |
| terminal |
terminalLinkBehavior (external-editor|file-viewer), terminalParkedRuntimeCap (2-64), showPresetsBar, useCompactTerminalAddButton, autoApplyDefaultPreset, waitForSetupBeforeAgent |
| terminal appearance |
terminalFontFamily, terminalFontSize (10-24, 0.5 steps), terminalLineHeight (1-2.5), terminalLetterSpacing (-2-4), terminalFontWeight (100-900), terminalLigatures, terminalMinimumContrast (1|3|4.5|7), terminalCursorStyle (block|bar|underline), terminalCursorBlink |
| editor appearance |
editorFontFamily, editorFontSize, editorLineHeight, editorLetterSpacing, editorFontWeight, editorLigatures |
Not settable here (by design)
exposeHostServiceViaRelay: security-sensitive; the app gates it behind
a plan check and an explicit confirmation dialog. Point the user to
Settings → Security.
- Structured settings (terminal presets, agent preset overrides/custom
agents, disabled agent hooks); use
superset agents ... or the app UI.
deleteLocalBranch and other renderer-only prefs stored in the app's
localStorage (diff view, chat model, hotkey rebinds) are not reachable
from outside the renderer.
Examples
# Dark theme with bigger terminal text
superset settings theme set dark
superset settings set terminalFontSize 16
superset settings set terminalLineHeight 1.4
# Quieter notifications
superset settings set notificationVolume 40
superset settings set selectedRingtoneId ping
# Git hygiene (host service must be running)
superset settings set branchPrefixMode custom
superset settings set branchPrefixCustom kiet/
1---2name: superset-settings3description: Read and update the Superset desktop app's user settings (theme, fonts, terminal, git, notifications, behavior) via the superset CLI, including creating and installing custom themes from JSON. Use when asked to change app settings, switch or create a theme, adjust fonts, or configure desktop preferences without opening the settings UI.4---5
6# Superset settings via CLI
7
8Change the desktop app's user settings from the command line with
9`superset settings`. Works offline, no login required; everything is local
10to this machine.
11
12## Commands
13
14```bash
15superset settings list # every key: value, default, allowed values
16superset settings get <key> # effective value (default if unset)
17superset settings set <key> <value> # validated write
18superset settings reset <key> # back to the app default
19
20superset settings theme list # system + built-ins + imported custom themes
21superset settings theme get
22superset settings theme set <id> # e.g. dark | light | monokai | system | <custom id>
23superset settings theme set system --system-light light --system-dark monokai
24
25superset settings theme export <id> [--out <file>] # dump full theme JSON (starter)
26superset settings theme import <file> # add/replace custom themes (validated)
27superset settings theme remove <id> # delete a custom theme
28```
29
30Prefer `--json` (auto-on in agent environments; parse it rather than
31matching the human sentences) and `superset settings list` to discover keys
32and allowed values instead of guessing. In Superset terminals `superset` is
33already on PATH. `SUPERSET_HOME_DIR` overrides the target profile
34(`~/.superset` by default); useful for testing against a sandbox copy.
35
36## Creating custom themes
37
38Two paths; both end with import → set (a running app restyles live).
39
40**From scratch**: a minimal file is enough. Every color you omit is filled
41in from the built-in base theme for your declared `type`, so start small and
42override only what you care about:
43
44```json
45{
46 "name": "Midnight Ocean",
47 "type": "dark",
48 "ui": {
49 "background": "#071A2E",
50 "sidebar": "#061426",
51 "primary": "#38BDF8"
52 },
53 "terminal": { "background": "#071A2E", "cursor": "#38BDF8" }
54}
55```
56
57```bash
58superset settings theme import ocean.json # -> Imported 1 theme: midnight-ocean
59superset settings theme set midnight-ocean # a running app applies it live
60```
61
62**From a starter**: export any theme's complete definition (all ~38 ui +
6321 terminal colors) and edit it. Best when restyling everything:
64
65```bash
66superset settings theme export dark --out my-theme.json
67# edit, then:
68superset settings theme import my-theme.json && superset settings theme set my-theme
69```
70
71### Theme file anatomy
72
73| Field | Notes |
74| --- | --- |
75| `name` / `id` | either works; the id is slugified (`"Midnight Ocean"` → `midnight-ocean`). Reserved: `dark`, `light`, `monokai`, `system` |
76| `type` | `"dark"` or `"light"` (defaults to dark); picks the base theme that fills omitted colors |
77| `ui` | app chrome. Highest-impact keys: `background`, `foreground`, `sidebar`, `card`, `popover`, `primary`, `accent`, `muted`, `border`, `input`, `ring`, plus `sidebar*` variants |
78| `terminal` | xterm colors: `background`, `foreground`, `cursor`, `selectionBackground`, and the 16 ANSI names (`red`, `brightRed`, ...) |
79| `editor` | optional `{ "colors": {...}, "syntax": {...} }` for the file editor; generated from `ui`/`type` when omitted |
80| `author`, `version`, `description` | optional metadata |
81
82Rules (same parser as the app's Appearance → Import): all colors are CSS color
83strings; missing colors inherit from the base; a file can hold one theme, an
84array, or a pack `{ "themes": [...] }`; max 256 KB; re-importing an id
85replaces that theme; import never activates; `theme set` does.
86
87### Verify and iterate
88
89```bash
90superset settings theme list # SOURCE column shows custom; * marks active
91superset settings theme get # active theme id
92superset settings theme export midnight-ocean # round-trip the stored result
93superset settings theme remove midnight-ocean # active falls back to dark
94```
95
96Iterating on colors: each `import` replaces the theme, and a running app
97applies it live; the loop is edit → import → `theme set <id>` (re-set to
98re-apply the active theme after edits).
99
100## How changes take effect
101
102After every write the CLI nudges the running desktop app
103(`POST /settings-changed` on its local server) and the app refreshes
104immediately, themes included, no restart. The command output tells you
105which happened: "refreshed immediately" / "Applied to the running desktop
106app" means the nudge landed. The notes below are the fallback behavior when
107no app acknowledged (app not running, or an older app version):
108
109- **Regular settings** (most of `settings set`): written to
110 `~/.superset/local.db`. A running older app picks them up the next time
111 its window regains focus; no restart needed.
112- **Git settings** (`branchPrefixMode`, `branchPrefixCustom`,
113 `worktreeBaseDir`): host-wide values written through the local host
114 service (auth via its manifest, no login needed). Requires the desktop app
115 or `superset start` to be running; also refreshed on window focus.
116- **Ringtone caveat**: `selectedRingtoneId` changes what sound plays
117 immediately, but the checkmark in Settings → Notifications only updates
118 after an app restart.
119- **Theme** (`settings theme set`): applies live when the nudge lands. If
120 the output shows the restart fallback instead: quit the app cleanly first,
121 then set, then relaunch; a running older app overwrites the file on its
122 own writes. If you are an agent running inside a Superset terminal, never
123 kill the app yourself (that kills your own session); ask the user to
124 restart instead.
125- Both stores are created by the desktop app. On a machine that never ran
126 the app, `set` commands fail with a hint to launch it once.
127
128## Key reference (by section)
129
130Booleans accept `true/false/on/off/1/0/yes/no`.
131
132| Section | Keys |
133| --- | --- |
134| behavior | `confirmOnQuit`, `fileOpenMode` (`split-pane\|new-tab`), `showResourceMonitor`, `openLinksInApp`, `defaultEditor` (vscode, cursor, zed, ...) |
135| git | `branchPrefixMode` (`none\|github\|author\|custom`), `branchPrefixCustom`, `worktreeBaseDir`; host-wide, written through the local host service, so the app (or `superset start`) must be running |
136| notifications | `selectedRingtoneId` (shamisen, arcade, ping, quick, doowap, woman, african, afrobeat, edm, comeback, shabala), `notificationSoundsMuted`, `notificationVolume` (0-100) |
137| terminal | `terminalLinkBehavior` (`external-editor\|file-viewer`), `terminalParkedRuntimeCap` (2-64), `showPresetsBar`, `useCompactTerminalAddButton`, `autoApplyDefaultPreset`, `waitForSetupBeforeAgent` |
138| terminal appearance | `terminalFontFamily`, `terminalFontSize` (10-24, 0.5 steps), `terminalLineHeight` (1-2.5), `terminalLetterSpacing` (-2-4), `terminalFontWeight` (100-900), `terminalLigatures`, `terminalMinimumContrast` (1\|3\|4.5\|7), `terminalCursorStyle` (`block\|bar\|underline`), `terminalCursorBlink` |
139| editor appearance | `editorFontFamily`, `editorFontSize`, `editorLineHeight`, `editorLetterSpacing`, `editorFontWeight`, `editorLigatures` |
140
141## Not settable here (by design)
142
143- `exposeHostServiceViaRelay`: security-sensitive; the app gates it behind
144 a plan check and an explicit confirmation dialog. Point the user to
145 Settings → Security.
146- Structured settings (terminal presets, agent preset overrides/custom
147 agents, disabled agent hooks); use `superset agents ...` or the app UI.
148- `deleteLocalBranch` and other renderer-only prefs stored in the app's
149 localStorage (diff view, chat model, hotkey rebinds) are not reachable
150 from outside the renderer.
151
152## Examples
153
154```bash
155# Dark theme with bigger terminal text
156superset settings theme set dark
157superset settings set terminalFontSize 16
158superset settings set terminalLineHeight 1.4
159
160# Quieter notifications
161superset settings set notificationVolume 40
162superset settings set selectedRingtoneId ping
163
164# Git hygiene (host service must be running)
165superset settings set branchPrefixMode custom
166superset settings set branchPrefixCustom kiet/
167```