[FEATURE] Theme tokens for Markdown elements (headings, bold, inline code) in assistant output

Status Open
Reported on v2.1.268
Maintainer reply None cached
Activity 1 comment · opened Sep 11, 2026

Preflight Checklist

  • [x] I have searched existing requests and this feature hasn't been requested yet (closest is #73837, which covers only inline code as a bug; this request is the general theming surface)
  • [x] This is a single feature request (not multiple features)

Problem Statement

Assistant messages in the TUI render Markdown, but the colors used for Markdown elements are not part of the theme surface. Headings and bold text are drawn with the bold attribute only, and inline code reuses the permission token from the fixed base palette (see #73837). The custom theme reference (~/.claude/themes/*.json, https://code.claude.com/docs/en/terminal-config#create-a-custom-theme) exposes tokens for UI chrome (brand accent, status colors, prompt borders, diffs, message backgrounds, subagent colors) but nothing for the Markdown body.

In practice this means long explanatory output (teaching sessions, design discussions, structured summaries) reads as a flat wall of white text. Other terminal agents (OpenCode, for example) color headings, strong text and inline code from their theme, which makes the structure of a long answer scannable at a glance. The only workaround in Claude Code today is to set a "bold" color in the terminal emulator, which colors headings and strong text identically and leaks into every other program in that terminal.

Raw ANSI escape sequences in the assistant text are not passed through to the terminal (verified on 2.1.268), so there is no model-side workaround either.

Proposed Solution

Add dedicated theme tokens for Markdown rendering in assistant messages and honor them through the merged (override-applied) theme, for example:

  • markdownHeading (optionally markdownH1 / markdownH2 / markdownH3)
  • markdownStrong
  • markdownEmphasis
  • markdownInlineCode
  • markdownLink
  • markdownBlockquote
  • markdownListMarker (bullet and number markers)
  • markdownRule (horizontal rule)

Tokens not set fall through to the current behavior, so existing themes render unchanged. Expose the same tokens in the interactive /theme editor with the live preview.

Example:

{
  "name": "study",
  "base": "dark",
  "overrides": {
    "markdownHeading": "#bd93f9",
    "markdownStrong": "#ffb86c",
    "markdownInlineCode": "#8be9fd"
  }
}

Alternative Solutions

  • Terminal emulator "bold color" (iTerm2 Profiles > Colors > Bold): colors headings and strong text the same, applies globally to the terminal.
  • dark-ansi plus a custom ANSI palette: only reaches inline code, still tied to the permission slot.
  • Raw ANSI escapes in the model output: not rendered.
  • A separate renderer over claude -p --output-format stream-json: loses the interactive TUI.

Priority

Medium - Would improve my workflow

Environment

  • Claude Code 2.1.268
  • macOS 26 (Darwin 25.6.0), iTerm2, tmux
  • Theme: dark

View original on GitHub ↗

This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗