[FEATURE] Theme tokens for Markdown elements (headings, bold, inline code) in assistant output
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(optionallymarkdownH1/markdownH2/markdownH3)markdownStrongmarkdownEmphasismarkdownInlineCodemarkdownLinkmarkdownBlockquotemarkdownListMarker(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-ansiplus a custom ANSI palette: only reaches inline code, still tied to thepermissionslot.- 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
This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗