~ $ man build-a-statusline-in-5-minutes

Build a custom Claude Code statusline in 5 minutes

5 min · updated

You can hand-write a Claude Code statusline script — here's how the plumbing works — but you shouldn't have to. The statusline builder lets you design the line visually, preview it at real terminal widths, and export a zero-dependency local runtime. Five minutes, start to finish.

Minute 1: pick your segments

Open the builder's Design tab. Seventeen segments are available across four groups — Claude (model, effort), Usage (context, 5h/7d limits, cost, duration, lines), Device (disk, RAM, CPU, network, battery), and Workspace (directory, repo, git branch, worktree). Click to toggle, use the arrows to reorder.

Restraint wins. The default — model, effort, context, 5h and 7d limits — covers the questions you actually ask mid-session: what model am I on, how much context is left, am I about to hit a limit?

Minute 2: theme and style

Pick one of four themes (Midnight, Graphite, Catppuccin, Mono) and one of three styles — Balanced, Compact, or Powerline. The live preview re-renders on every change, and the 64 / 88 / 120 width buttons show exactly how the line degrades on narrower terminals. What you see is the real renderer output, not a mockup.

Minute 3: export

The Export tab gives you three artifacts:

claude mcp add --transport http promenow-tools https://promenow.app/api/mcp

Minutes 4–5: install and verify

The MCP pull returns a file manifest that Claude Code writes locally with your normal approval — the server never touches your machine:

~/.claude/terminal-pro/terminal-pro-statusline.mjs   # the runtime
~/.claude/terminal-pro/statusline.config.json        # your design
~/.claude/terminal-pro/apply-claude-settings.cjs     # settings patcher

The resulting settings entry:

{
  "statusLine": {
    "type": "command",
    "command": "node ~/.claude/terminal-pro/terminal-pro-statusline.mjs",
    "padding": 0,
    "refreshInterval": 10
  }
}

Restart your Claude Code session and the line appears. To verify the runtime independently first, pipe any JSON at it:

echo '{"model":{"display_name":"Opus 4.8"}}' | node ~/.claude/terminal-pro/terminal-pro-statusline.mjs

Iterating later

Your design lives in statusline.config.json— plain JSON you can edit by hand or re-open in the builder's Expert JSON tab, which validates strictly and tells you exactly which field is wrong. Tweak, re-export, done. No account required for any of this; the builder and export work anonymously.

If something doesn't render, the troubleshooting guide covers the usual suspects in order of likelihood.