Per-component UI color customization (e.g. user message foreground/background)

Resolved 💬 2 comments Opened Apr 19, 2026 by hrp Closed Jun 2, 2026

Problem

Claude Code's current theming is wholesale — /theme switches the entire palette (dark / light / ansi variants). There is no way to restyle a specific UI component independently.

A concrete pain point: on the default dark theme, the user message block renders with a light background and white/near-white foreground. In scrollback, previously-sent user messages are hard to read because the foreground and background are low-contrast. The rest of the UI is fine — only the user-message bubble needs adjustment.

Switching themes wholesale works around this but is a blunt instrument: it changes everything else too (assistant messages, tool output framing, accents), which may not be desired.

Proposed solution

Add granular component-level color overrides in settings.json, for example:

{
  "uiColors": {
    "userMessage": {
      "foreground": "#1a1a1a",
      "background": "#e8f0fe"
    },
    "assistantMessage": { "foreground": "...", "background": "..." },
    "toolCall": { "foreground": "...", "background": "..." }
  }
}

Accepted values could be hex, named ANSI colors, or the sentinel "default" / "inherit" to fall back to the active theme.

Why this is worth it

  • Accessibility — users with visual sensitivities often need per-element tuning, not a whole palette swap.
  • Scrollback readability — the transcript is a primary artifact for review, and the user-message bubble is the most-scanned element when looking back at what was asked.
  • Consistency with VS Code / terminal conventions — both expose per-component color tokens (workbench.colorCustomizations, ANSI slot overrides). Claude Code currently doesn't.

Related

  • Feature request for defaultSessionColor — anthropics/claude-code#50806 (related but different goal: per-session tinting vs. per-component styling)

Current workaround

Only the -ansi themes (dark-ansi, light-ansi) defer colors to the terminal palette, which lets users indirectly re-tint via their iTerm2 / terminal profile — but the terminal-color-to-UI-component mapping isn't documented, so this is guesswork and affects every other element that touches the same ANSI slot.

Environment

  • Claude Code CLI
  • macOS (iTerm2)
  • Default dark theme

View original on GitHub ↗

This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗