Repository navigation
Per-agent terminal theme overrides in Settings → Appearance #14174
Copy link
Copy link
Labels
bugSomething isn't workingSomething isn't workingorchestrationos:macosIssues affecting macOSIssues affecting macOSssh
Description
Summary
Settings → Appearance currently has one global Dark/Light terminal theme with customization options (terminalThemeDark / terminalThemeLight). Every agent TUI (Claude Code, Codex, Cursor, Grok, …) renders in that single palette. This issue proposes per-agent inherit rows in the same Appearance catalog: each detected agent can pick a builtin or imported theme, defaulting to "Inherit global".
This is not per-project agent launch/harness overrides. That is #7257.
Why
Side-by-side agent panes (and background orchestration worker-start workers on the local / direct-SSH runtime) are a sea of similarity when two TUIs share one theme, or when a light macOS chrome hosts a dark TUI that queried OSC 11 too early (#13908, #6091 class).
Proposal (phase 1)
GlobalSettings.agentTerminalThemes?: Partial<Record<TuiAgent, { dark?: string; light?: string }>>— missing key/slot = inherit (same pattern asagentCmdOverrides).- Appearance → Terminal Themes: compact rows for union of detected agents across already-known hosts plus persisted override keys (not all 36), reusing the existing ThemePicker, first option "Inherit global". Disabled persisted rows are labeled Disabled. Match-dark-mode never shows an editable light agent picker.
- Apply xterm
options.themeper pane from immutable pane-lifetime launch identity (stable leaf id; pane-startup wins; explicit null suppresses tab fallback; tab identity only for the original sole leaf), still value-gated so live OSC 4/10/11/12 mutations are not wiped. - Hidden-PTY OSC 10/11/12 replies follow the same palette via one atomic
{global, byAgent}view-attribute snapshot committed in main, with effective-diff fan-out (a no-op inherit must not reset live OSC state). Main seeds that store from persisted settings before agent launches so a coldworker-startdoes not lose the race to the renderer. - Dashboard agent terminal preview uses the same per-agent resolve (it is a live xterm, not chrome).
Non-goals (phase 1)
--terminal-themeonorca terminal create/worker-start(follow-up).- "Match terminal" sidebar/chrome following the focused agent ([Feature]: "Match terminal" only colors the left sidebar — titlebar, status bar, right sidebar and menus stay black #10864 / Unify workspace appearance with terminal theme #7251 are global-terminal-surface).
- Plugin
terminalThemescontribution shape (plugins(P2): deferred theme, icon-theme and terminal-theme contributions #9663). - Changing theme when the user types an agent binary in an already-open shell (launch identity only; first OSC query is already done).
- Paired-server background workers: renderer→local-main IPC cannot push this map to a remote Orca server, and a host-global remote map has multi-client ownership issues. Visible remote panes may still get the renderer xterm theme and per-create
terminalColorQueryReplies. Hidden workers on a paired server stay on today's global/silent path until a later RPC design. - Mobile device-local slots (feat(mobile): pick your terminal theme in Settings → Terminal #10421) beyond "desktop settings still apply when follow-desktop."
Related
- [Feature] per-project agent overrides #7257 — per-project agent launch overrides (related, different axis)
- Unify terminal theme settings #6329 — unified global terminal theme settings (keep that catalog)
- [Bug]: Agent TUIs render dark in a light macOS pane — OSC 11 reply loses the race to the agent's DA1 sentinel (POSIX counterpart of #10492) #13908, fix(terminal): answer color queries bundled ConPTY forwards #10492, Fix remote agent terminal startup colors #13865 — OSC / ConPTY color-query races (must not regress)
- [Bug]: Appearance terminal color overrides affects both light/dark mode #10561 / fix(settings): scope terminal color overrides per light/dark mode #10581 — per-mode color overrides leaking (do not repeat; rebase checkpoint if fix(settings): scope terminal color overrides per light/dark mode #10581 lands first)
- feat(terminal): rim panes and sidebar rows by agent state #11515 — per-pane agent rim chrome (status, not palette)
- feat(mobile): pick your terminal theme in Settings → Terminal #10421 — mobile "follow desktop" inherit (device-local, not per-agent)
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't workingorchestrationos:macosIssues affecting macOSIssues affecting macOSssh
Activity
fix: resolve maintainer review feedback for stablyai#14174
feat(settings): per-agent terminal theme overrides in Appearance
AmethystLiang commentedon Aug 14, 2026
Being implemented in #14293 (per-agent Appearance theme overrides). Leaving this open until that PR merges.
edenaion commentedon Oct 11, 2026
Hi @AmethystLiang any update?