DEV Community

J Now
J Now

Posted on

Why I rebuilt my terminal theme around prose contrast, not syntax

Most days Claude Code reads like a log of the agentic session you're conducting — tool output, permission prompts, reasoning blocks, explanations. Syntax highlighting is almost beside the point. The ANSI slots that actually matter are the ones Claude Code uses for trust/permission prompts and tool boundaries, not string literals.

That mismatch is why I built klein-blue: four Terminal.app themes tuned for prose legibility at body size, built around Yves Klein's IKB pigment.

The interesting constraint: pure IKB (hex 002FA7) is effectively invisible as text on dark ground — APCA Lc -12. You can't use it as foreground. So I split it. IKB lives in ansi:blue as decorative borders and highlights; a lifted Klein-family blue (A8BEF0) goes in ansi:blueBright where Claude Code renders permission-prompt text that actually needs to be readable.

The four variations differ mainly in how they handle one ANSI slot: ansi:redBright, which Claude Code uses for its claude-sand brand color. Two variations neutralize it so there's no brand competition with the blue anchor. Two accept it as a second hero color.

Contrast gates are per-role, using APCA Lc rather than WCAG ratio: body >= 90, subtle >= 75, muted >= 45, accent >= 60. Klein Void Prot is the only variation where every accent passes strict gates — the others make deliberate trade-offs for aesthetics at the muted end.

One setup requirement worth knowing: Claude Code's /theme picker has to be set to dark-ansi, otherwise it ignores your Terminal.app ANSI palette entirely and falls back to hardcoded RGB. That bit me the first time.

# Install
git clone https://github.com/robertnowell/klein-blue
cd klein-blue && ./install.sh
Enter fullscreen mode Exit fullscreen mode

Ships with CommitMono-Regular (V1, V3) and IBM Plex Mono (V2, V4), both copied to ~/Library/Fonts/. Restore script rolls everything back.

https://github.com/robertnowell/klein-blue

Top comments (0)