[FEATURE] distinguishing user prompts from assistant responses in long threads

Status Fixed / completed
Maintainer reply ✓ Yes — bcherny
Activity 3 comments · opened Jul 13, 2026 · closed Aug 17, 2026
💡 Likely answer: A maintainer (bcherny, collaborator) responded on this thread — see the highlighted reply below.

Preflight Checklist

  • [x] I have searched existing requests and this feature hasn't been requested yet
  • [x] This is a single feature request (not multiple features)

Problem Statement

In long threads, scrolling back to find a specific earlier question requires reading line by line. There's no visual anchor to quickly locate user turns vs assistant turns.

Proposed Solution

Distinct color for user input lines — even a subtle background or foreground difference on the "You:" block would help scanning significantly. The custom theme system exposes briefLabelYou and briefLabelClaude tokens but these only affect the small label, not the full message block.

Keyboard navigation between user turns — a keybinding (e.g. Alt+Up / Alt+Down) to jump directly between user messages in the conversation history, similar to how some terminals let you jump between shell prompts.

Visual separator — a horizontal rule or indentation difference between user and assistant blocks would help even without color changes, and would work across all themes including ANSI/accessible ones.

Configurable color support for user vs assistant message blocks — extend the custom theme system in settings.json to allow users to set distinct foreground/background colors for the entire user message block and assistant message block, not just the label. For example:

{
"theme": {
"userMessageColor": "#a8d8a8",
"assistantMessageColor": "#d8d8d8"
}
}
This would make long threads scannable at a glance without relying on labels alone.

Alternative Solutions

_No response_

Priority

Medium - Would be very helpful

Feature Category

Configuration and settings

Use Case Example

_No response_

Additional Context

_No response_

View original on GitHub ↗

3 Comments

DrakelingTech · 1 month ago

Seconded.

kinnari-davidhorn · 1 month ago

Adding some concrete findings from tracing the TUI render in v2.1.217, in case it helps scope this. The themeable surface for user turns is even thinner than it looks:

  • The only user-turn-specific color token that actually renders is userMessageBackground (plus its hover variant). Everything else is shared.
  • userMessage exists as a theme key but is referenced zero times in the render code, so setting it does nothing. It looks like a dead token.
  • The user-turn marker (the > chevron) is drawn with the shared subtle token, and the body text with the shared text token, so neither can be recolored for user turns without recoloring dimmed text / all text across the whole UI.
  • briefLabelYou / briefLabelClaude only render in the "brief" layout, and I could not find any user setting or keybinding to switch into that layout, so in the normal full layout those labels never appear.
  • userMessageBackground is an opaque fill. On a semi-transparent terminal it paints a solid block that breaks the transparency, so it is not a clean way to mark turns for that setup.
  • There is no user-turn divider: the line above a user message is a marginTop (outside the background, so it is never painted), and the message box has no borderBottom, so a rule or underline cannot be themed in.

A minimal set that would fully address this without new UI:

  1. Wire up userMessage (or a userMessageColor / assistantMessageColor pair) to actually color the message body text.
  2. A user-turn marker color token that is independent of subtle.
  3. An optional, themeable user-turn separator (a borderBottom / divider token), which would also help ANSI/accessible themes that avoid background fills.

Happy to point to exact function locations if that is useful.

bcherny collaborator · 14 days ago

Most of this exists today:

Hope that helps make long threads scannable.

🤖 Generated with Claude Code