← Docs

Appearance & Theming

Appearance is how Brisal looks, configured via three independent axes:

  • Mode — light, dark, or follow the operating system.
  • Font size — one number scaling the whole UI.
  • Palette — the color identity (built-ins or custom).

All three are set in Settings → Appearance and are per-workspace. Each workspace carries its own appearance, overriding a system default. Switching workspaces re-themes the app.

The Appearance settings screen. Two tabs sit below the "Settings" breadcrumb — "Appearance" (active) and "Hotkeys" — with the heading "Appearance" and a muted "Editing: demo" line naming the workspace. Below are stacked sections: "Mode" with Dark / Light / System buttons (System highlighted); "Font size" with a minus/number/plus stepper showing 18px; "Palette" with a "Theme" dropdown set to "default" and a "Current: default" note; and "Hotkey menu position" with Top (bar) / Center / Top left / Top right / Bottom left / Bottom right buttons (Top bar highlighted).

The Appearance tab: mode, font size, palette, and hotkey menu position, all scoped to the workspace.

The three axes

Mode

Chooses light vs. dark:

  • Dark / Light — pin the app to that mode.
  • System — follows your OS preference (default).

Every palette defines light and dark variants, so switching mode re-renders the same palette in the other variant.

Font size

A single value scaling the entire UI, defaulting to 14px with a 12–20px range. Out-of-range values are clamped.

Palette

The color identity: pick from three built-ins (mistral, brise, tramontane) or any custom palette added to the workspace.

Non-theming controls

Hotkey menu position

Where the which-key menu appears: Center (default), Top (full-width strip), or four corners. Per-workspace; inherits a system default.

Explorer position

Where the Explorer side panel docks: Right (default) or Left. Per-workspace; inherits a system default.

This is the only Explorer setting at workspace level: where it sits is workspace chrome, while whether it’s open is per-session.

Code theme

Syntax coloring for the Explorer file viewer, separate from palette. Choose from One Dark Pro (default), GitHub, Vitesse, Catppuccin, or Night Owl. Each has light and dark variants following the app mode automatically. Background stays transparent, tracking your palette. Per-workspace; inherits a system default.

Subagents panel position

Where the Subagents panel mounts per workspace:

  • Explorer (default) — the panel sits inside the Explorer’s module card, alongside Diff and Files.
  • Chat — the Explorer card hides and the panel renders full-width above the transcript, keeping the delegation tree in view while you read.

Per-workspace; inherits a system default. Both positions stay live as the tree grows, shrink, or gets killed.

Max concurrent subagents

The fan-out cap on how many subagents a session can run at once per turn. Default 3, clamped to the 1–20 range — out-of-range values get clamped. Per-workspace; inherits a system default. See Delegation → Parallel cap for how the cap queues excess delegations.

Palettes are data

A palette is a file. Brisal reads palettes from a workspace’s themes/ folder — drop a valid CSS file in and it appears in the picker by filename. Delete it and it’s gone. The picker reflects the directory contents.

A palette is a token-only CSS file with two blocks:

/* themes/midnight.css — a palette named "midnight" */
:root {
  --background: #f7f8fb;
  --foreground: #10131a;
  --primary: #3b5bdb;
  --primary-foreground: #ffffff;
  --border: #dfe3ec;
  /* …the rest of the tokens… */
}

.dark {
  --background: #0b0d12;
  --foreground: #e8ebf2;
  --primary: #748ffc;
  --primary-foreground: #0b0d12;
  --border: #232838;
  /* …same tokens, tuned for dark… */
}
  • :root — light variant
  • .dark — dark variant

Filename (minus .css) becomes the palette name. Mode and palette are orthogonal: one file answers “what color is this?” for both modes.

Adding a palette

No “new theme” button — author in place by adding a file:

  1. Create a file in the workspace’s themes/ folder (e.g., midnight.css). Names: lowercase letters, digits, hyphens, with .css extension.
  2. Fill in tokens. Copy the skeleton above and adjust values. Full token list in Config files.
  3. Pick it. It appears in the picker. Selecting it re-themes immediately.

Custom palettes are workspace-scoped and listed alongside built-ins.

Fallbacks

Appearance is forgiving:

  • Unknown/deleted palette → falls back to mistral with a toast.
  • Out-of-range font size → clamped (12–20px) with a toast.
  • Malformed theme file → skipped; default used.

You never face an unstyled or broken app.

Copying appearance between workspaces

Copy from workspace… copies all appearance settings in one step. On the Appearance screen, pick a source workspace and click Copy. Brisal copies mode, font size, palette, hotkey menu position, Explorer position, code theme, subagents panel position, max concurrent subagents, and the source’s theme files, ensuring copied palette names resolve. Only appears when another workspace exists. (Copying keybindings is separate on the Hotkeys tab.)

Built-in palettes

Brisal ships three built-ins, named for French winds (“Brisal” means breeze):

  • mistral — warm amber, the default. Named for the wind and MistralAI’s brand. (Not the Mistral provider.)
  • brise — original cyan look; the name’s root.
  • tramontane — cool storm-slate, a cold north wind.

All are always available in both light and dark variants. Additional palettes are user-authored.

  • Settings — reaching settings and the global-vs-workspace scope model.
  • Workspaces — the unit appearance is scoped to.
  • Delegation — what the subagents panel position and parallel cap actually do.
  • Config filesconfig.toml fields and complete palette token reference.