📄 claude-experience-two-surfaces.md10/05/2026
Documents › workflows

Your Claude experience has two surfaces. Customise both.

47% · opus-4.7 · WORKSPACE · main* · 2🛠 · 02:41
The interface I read every turn. Six fields, colour-coded, costs zero tokens.

Most people customise Claude in one place: the prompt. The two surfaces that actually shape every session, you ignore. How Claude talks to you, and how you read what's happening. Both are configurable. Both compound across hundreds of hours.

The framework I run, and how to set it up:

Surface 1

Voice

~/.claude/CLAUDE.md

~/.codex/AGENTS.md

How Claude talks to you. Markers, header tiers, mono signals, paragraph length, where decisions live.

Surface 2

Interface

~/.claude/scripts/statusline.py

~/.claude/settings.json

How you read what's happening. Persistent, glanceable, colour-coded by zone.

Two surfaces. Both configurable. Both compound.

Surface 1: The voice

Claude has defaults. They're fine. They're not yours.

I'm dyslexic. Walls of text are invisible to me. So my Claude has a non-negotiable response format, written into ~/.claude/CLAUDE.md:

  1. Every reply ends with a bold marker: → DECISION, → QUESTION, → NO DECISION NEEDED. I know what's required of me in under three seconds of skimming.
  2. Header tier = importance, not nesting depth. # is THE headline. ## is a main section. #### is an inline label. The size matches how load-bearing it is to read.
  3. `mono font` is reserved for paths, values, commands. Never for emphasis. The font swap is a signal.
  4. --- between major pivots like status to decision. The horizontal rule is the unmissable section break.
  5. Bold keywords inside sentences. Dyslexic eyes skim for bold anchors.
  6. Absolute paths only, so cmd+click opens them from inside the terminal.
#THE headline of the reply (max 1)
##Main sections (status, decision, design, question)
###Sub-sections inside one of those
####Inline labels and micro-groupings
Header tier = importance. The size matches how load-bearing the section is to read.

If you also use Codex, mirror the same rules to ~/.codex/AGENTS.md. Two harnesses, one voice.

Surface 2: The interface

The Claude Code statusline runs once per turn, costs zero tokens, can render colour. Mine shows:

 47% · opus-4.7 · WORKSPACE · main* · 2🛠 · 02:41

Six fields: context %, model, workspace name, branch + dirty flag, dispatch worker count, session clock. Colour-coded by zone. Context % goes green under 50%, yellow at 50-75%, red at 90%. Branch yellow when dirty, red on conflict. Workspace gets a brand colour mapped from the path I'm in.

47% · opus-4.7 · WORKSPACE · main* · 2🛠 · 02:41
47%  context: green <50, yellow 50 to 75, orange 75 to 90, red over 90
opus-4.7  model: opus magenta, sonnet cyan, haiku grey
WORKSPACE  per-prefix brand colour
main*  white clean, yellow dirty, red on conflict
2🛠  dispatch worker count: yellow when 4 or more
02:41  session clock, always dim grey
Six fields, six colour rules. State encoded in colour, not just decoration.

The 50% threshold matches the rule already written into my voice config: write a session handoff at 50% context. Now I can see the threshold without asking.

How to set this up

  1. Customise the voice. Open ~/.claude/CLAUDE.md. Write your own rules. Mine took an afternoon to draft and three weeks of iteration to lock down. Yours will start ugly. That's fine.
  2. Mirror to AGENTS.md. If you use Codex, write the same rules to ~/.codex/AGENTS.md. Same instructions, two harnesses.
  3. Build a statusline. A Python script reads CC's stdin JSON, prints a colour-coded line, exits. Wire into ~/.claude/settings.json as statusLine.command. The fields you pick are the ones you check constantly. Yours will differ from mine.

The principle

Claude doesn't come to you tuned. The defaults are a shape that fits no one in particular. The work of making her useful for your brain is two-surface work: the language she uses, and the interface you use to read her.

Do both. Compound for years.

Related