Add hook or theme primitive for decorating the transcript area (above input)
Problem
Today, the only user-customizable visual surface in Claude Code is statusLine, which renders below the input box. The chat transcript area (above input) is rendered by the built-in TUI with no extension point — no hook stdout, no theme tokens, no plugin slot can inject visible content there.
This blocks several real accessibility and UX needs:
- Visual readability for low-vision users. The transcript renders in a single uniform foreground color/weight from the terminal's defaults. There's no way to bold assistant turns, color-tag user vs assistant, increase contrast on tool-call lines, or visually chunk turns.
- Turn-boundary decoration. Users want to draw attention to where a turn ends/begins (frames, separators, timestamps, mode badges).
- Per-turn ambient data. Cost of last turn, tools just used, context-window % consumed — currently must live in
statusLine(always-on) rather than punctuating the conversation where it's relevant.
We attempted to solve this with UserPromptSubmit and Stop hooks emitting ANSI to stdout, but the docs (and behavior) confirm hook stdout goes to Claude's context, not the terminal — invisible to the user in normal chat view.
Proposed solutions (any one would unblock this)
- A
transcriptDecorationhook — fires onUserPromptSubmit/Stop/SessionStart, stdout renders inline in the transcript at that boundary. MirrorsstatusLinesemantics but for transcript-area rendering. - Per-role theme tokens —
theme.transcript.user.fg,theme.transcript.assistant.fg,theme.transcript.assistant.weight,theme.transcript.toolCall.fg, etc. Solves the readability case without a new hook surface. - Optional turn separators —
settings.jsonflag to render a configurable separator line between turns (similar to how some IDEs draw cell separators in REPLs).
Why this matters
Power users invest heavily in custom statuslines, hook automation, and terminal theming. The transcript area is the single largest visual surface Claude Code shows them, and it's the only one they can't touch. A small extension point here would unlock significant UX work without changing CC's core rendering.
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗