[BUG] Hint/placeholder text uses SGR 2 (faint), which renders at full brightness on terminals without dim support (e.g. mosh)
Summary
Claude Code styles de-emphasized UI text (the input placeholder / "Try …" hints) with SGR 2 (faint) rather than an explicit color. Terminals that don't implement the faint attribute render that text at full brightness, so it stops reading as a hint and looks like text the user typed.
The most common way to hit this is mosh, which is widely used for remote dev boxes because it survives sleep and network changes. mosh rebuilds escape sequences from its own internal cell model, and that model has no faint attribute, so ESC[2m is silently dropped before it reaches the real terminal emulator.
Environment
- Claude Code v2.1.231
- Server: Ubuntu, tmux 3.4, mosh-server 1.4.0
- Client: macOS, iTerm2, mosh 1.4.0
TERM=tmux-256colorinside tmux,xterm-256coloroutside;COLORTERM=truecolor; tmux reportsRGBinclient_termfeatures
What Claude Code emits
Captured straight out of the pane with tmux capture-pane -e -p | cat -v:
^[[39mM-bM-^]M-/M-BM- ^[[2mTry "fix lint errors"^[[0m
So the styling is ESC[2m — the faint attribute — applied over the default foreground (ESC[39m).
This is not theme-dependent
Ran the same capture against three themes via claude --settings '{"theme":"<t>"}':
| theme | emitted sequence |
|---|---|
| light | ^[[2mTry "write a test for <filepath>"^[[0m |
| light-ansi | ^[[2mTry "how do I log an error?"^[[0m |
| light-daltonized | ^[[2mTry "write a test for <filepath>"^[[0m |
All three are byte-identical in styling. There's no theme that opts out of the faint attribute, including light-ansi, which I'd expected to use palette colors.
Control: the terminal itself is fine
Same mosh session, explicit colors instead of the attribute:
printf '\033[2mFAINT\033[0m | \033[38;2;150;150;150mRGB-GRAY\033[0m | \033[38;5;245m256-GRAY\033[0m | NORMAL\n'
| sample | over mosh | over plain SSH |
|---|---|---|
| FAINT (SGR 2) | full brightness — indistinguishable from NORMAL | dim gray ✅ |
| RGB-GRAY (24-bit) | gray ✅ | gray ✅ |
| 256-GRAY (palette) | gray ✅ | gray ✅ |
Both explicit grays survive mosh intact. Only the attribute is lost. So this isn't a color-depth problem and can't be fixed with COLORTERM, terminal-features, or any tmux/terminal configuration — I tried all of those first.
Suggested fix
Render de-emphasized text with an explicit color from the active theme's palette instead of SGR 2.
This is strictly more portable: faint is one of the least consistently implemented SGR attributes, and the fallback when it's unsupported is the maximally confusing one — the text renders as though it were primary content. An explicit gray degrades gracefully everywhere, and as the control above shows, it already works correctly on exactly the terminals where faint doesn't.
If keeping faint is preferred for terminals that do support it, a settings opt-out (or emitting color and faint together, so the color carries when the attribute is dropped) would also solve it.
Impact
Anything Claude Code dims renders at full brightness on these terminals, not just the placeholder — so the visual hierarchy between primary and secondary content is flattened throughout the TUI. Beyond mosh, this affects any terminal or multiplexer that doesn't implement faint.
This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗