Skip to content

Per-agent terminal theme overrides in Settings → Appearance #14174

Description

@edenaion

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 as agentCmdOverrides).
  • 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.theme per 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 cold worker-start does 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)

Related

Activity

  1. added a commit that references this issue on Aug 13, 2026
    ff273b0
  2. AmethystLiang commented on Aug 14, 2026

    @AmethystLiang
    Contributor

    Being implemented in #14293 (per-agent Appearance theme overrides). Leaving this open until that PR merges.

  3. added theissue type on Sep 19, 2026
  4. edenaion commented on Oct 11, 2026

    @edenaion
    Author

    Hi @AmethystLiang any update?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions