AI CODING ANALYTICS

Claude Code status line
with model, context and limits.

The Claude Code status line is a script Claude Code runs as a session changes: it reads the session as JSON (model, cost, context and rate-limit use) and prints a bar at the bottom of the terminal. Set it up with /statusline, or a statusLine entry in ~/.claude/settings.json.

Get started for free ↗

Free for 3 seats · No credit card

Zest lemon in its mech suit

01See your team’s AI stack

Winding / Teams Last 30 days

Zest

3 Members 1 Agent
Team overview
67%
AI Adoption▲ 34 pts
240
PRs Merged▲ 101
96.1h
Median AI Time▲ 9.5h
57.2h
Build Hours▲ 20.3h
This week
Member AI PRs/wk AI Task Plan Impl Last Standup AI Stack
22.8/wk28 min ago
15.8/wk12 min ago
4/wkAug 14
—2 hours ago
Current AI models & harnesses As of Sep 8
Claude CodeFable 5.1 (max) (with fallback)70.4 · Coding Agent Index
CodexGPT-6 Astra (max)67.0 · Coding Agent Index
Muse CodeMuse Spark 1.3 (xhigh)64.2 · Coding Agent Index
Grok BuildGrok 4.5 (high)64.1 · Coding Agent Index
Kimi Code CLIKimi K362.6 · Coding Agent Index
OpencodeGemini 3.8 Flash (high)61.2 · Coding Agent Index
Cursor CLIComposer 2.5 Fast38.3 · Coding Agent Index

Demo setups use current model families. The pairings above are the combinations benchmarked by Artificial Analysis; rankings measure performance, not popularity.

Intelligence Index

Illustrative daily trends · Other totals: last 30 days. Build Hours: this week, model-estimated activity including overlap; not engineer hours.

↓ Scroll to explore

USED BY ENGINEERING TEAMS AT

FlypsCharmWildfiresGeoforgeMisaLabs

How to set up a Claude Code statusline

Run /statusline with what you want in plain words, such as /statusline show model name and context percentage, and Claude Code writes a script in ~/.claude/ and points your settings at it. By hand, add statusLine to ~/.claude/settings.json or a project's settings, with type set to command and command set to a script path or an inline shell command; padding adds spaces, and refreshInterval re-runs it every N seconds.

The command runs when a session starts and again after each assistant message, /compact, a permission-mode change and a few other events, debounced by 300 ms. It runs on your machine and uses no API tokens, each line it prints becomes a row, and ANSI colors work. Like a hook in settings, it waits until you trust the folder.

The JSON a status line command receives

The command reads the session as JSON on stdin. The fields worth a place on the line:

  • model.display_name and model.id, effort.level and fast_mode.
  • context_window.used_percentage and context_window_size (200,000 tokens, or 1,000,000 on extended-context models), with the token counts behind them.
  • cost.total_cost_usd, Claude Code's own estimate at list price, plus cost.total_duration_ms and the lines added and removed.
  • rate_limits.five_hour and rate_limits.seven_day, each with used_percentage and resets_at. They appear only for Pro and Max subscribers, after the session's first response.
  • session_id, transcript_path, workspace.current_dir, the repository, the open pull request and prompt_cache statistics.

A status line recipe: model, context and 5-hour limit

Save this one line as ~/.claude/statusline.jq:

[.model.display_name, "\(.context_window.used_percentage // 0 | floor)% context", (.rate_limits.five_hour.used_percentage | if . then "5h limit \(floor)%" else empty end)] | join(" · ")

Then set the command to jq -r -f ~/.claude/statusline.jq. It prints a line such as Opus 5.5 · 44% context · 5h limit 23%, and leaves the limit out when rate_limits is absent.

Keeping your own status line next to a plugin's

Claude Code runs one statusLine command, so a plugin that wants the slot has to replace yours or wrap it. Copy your statusLine entry before installing one, and check which it does.

Zest's plugin wraps. When a session starts, it saves your command in ~/.claude-zest/statusline-proxy.json, runs it with the same JSON and shows the first line it prints, adding nothing of its own. If the plugin's code is missing, its launcher falls back to your command. With no status line of yours, Zest's own notices (plugin update, standup ready, sync error) show only after /zest:enable-notify.

What the meters show across a team

While it wraps, Zest keeps a snapshot of that JSON for each session: model and effort, context use and the 5-hour and weekly limit meters, with no prompts or message text. The session view in Zest shows context and limit use at the end of each session; on Pro and Max, where Claude Code sends the limit meters, a lead sees who keeps running out of the five-hour window before choosing plans on Claude Code pricing. More of what Zest records is on Claude Code usage.

From the snapshots kept for one engineer's 186 work sessions (September 23 to October 4, 2026, all on Opus 5.5 with a 1M window): the median session ended at 44.5% of the context window, and 12% ended at 80% or more. Effort was xhigh in 53% and medium in the rest. Of the 147 sessions that carried a weekly meter, 16 ended at 90% or more. These are each session's last snapshot only.

TRY IT ON YOUR TEAM

See what your team ships with AI.

Starter is free (3 seats, no credit card). Pro is $49 a month with 5 seats and Max is $149 a month with 10 seats — priced per workspace, not per engineer, with extra seats at $19 a month.

A FEW THINGS TO KNOW

Questions

Why is my Claude Code status line blank?+

Usually folder trust: the status line runs a shell command, so Claude Code skips it until you accept the folder's trust dialog. disableAllHooks set to true also turns it off, and the script has to be executable and print to stdout.

How do I remove the status line?+

Run /statusline delete, or delete the statusLine field from your settings.json.

Can I change how subagents show below the prompt?+

Yes. The subagentStatusLine setting runs a command that rewrites each subagent's row in the agent panel, under the same trust rules as statusLine.