Two lines in the Dracula palette: model, folder, git branch with staged and modified counts, and effort on top; a context bar, cost, session time and five-hour usage below. Needs a Nerd Font, no network calls. Caches git status in /tmp/statusline-git-<session id>, one small file per session that it never deletes.

0 copies

In Claude Desktop? Add this status line with statusline-anywhere.

Preview

Clean repo
 Opus 4.8 │  app │  main high  ██░░░░░░░░░░ 22% │  $0.41 │  10m 12s │  5h:26%
New session
 Opus 4.8 │  app │  main high  ░░░░░░░░░░░░ 0% │  $0.00 │  10m 12s
Dirty branch
 Sonnet 4.6 │  app │  feat/auth 1 medium  █████░░░░░░░ 48% │  $0.41 │  10m 12s │  5h:40%
Near-full
 Opus 4.8 │  app │  main max  ██████████░░ 91% │  $4.12 │  10m 12s │  5h:88%
1M context
 Fable 5 │  app │  main xhigh  ███████░░░░░ 64% │  $0.41 │  10m 12s │  5h:33%
Post-compact
 Haiku 4.5 │  app │  main  ░░░░░░░░░░░░ 0% │  $0.41 │  10m 12s │  5h:52%
Worktree
 Opus 4.8 │  feature │  worktree-feature low  ████░░░░░░░░ 37% │  $0.41 │  10m 12s │  5h:44%
Non-git
 Opus 4.8 │  scratch high  ██░░░░░░░░░░ 22% │  $0.41 │  10m 12s

What it does

Two lines in the Dracula palette: model, folder, git branch with staged and modified file counts, and effort on top; a context bar, cost, session time and five-hour usage below.

Written in
Bash
Network access
None
Works in
Terminal

How it works

  1. Reads the model, folder, context, cost, duration, effort and five-hour limit with jq.
  2. Counts staged and modified files with git diff --numstat and caches them for 5 seconds.
  3. The 12-cell context bar is green below 70%, yellow from 70% and red from 90%.
  4. Outside a repo the branch and counts drop out, and 5h shows only when it is sent.

Good to know

  • Needs a Nerd Font for its icons, plus jq and git.
  • Writes git status to /tmp/statusline-git-<session_id> and never deletes it, so one file stays per session.
  • A bolt icon appears when fast_mode is true. The five-hour limit has no reset time.

Source

#!/usr/bin/env bash

input=$(cat)

# ---------- Dracula palette (24-bit truecolor) ----------
COMMENT=$'\033[38;2;98;114;164m'
CYAN=$'\033[38;2;139;233;253m'
GREEN=$'\033[38;2;80;250;123m'
ORANGE=$'\033[38;2;255;184;108m'
PINK=$'\033[38;2;255;121;198m'
PURPLE=$'\033[38;2;189;147;249m'
RED=$'\033[38;2;255;85;85m'
YELLOW=$'\033[38;2;241;250;140m'
BOLD=$'\033[1m'
RESET=$'\033[0m'

# ---------- Nerd Font glyphs ----------
# Written as raw UTF-8 byte escapes (\xHH) rather than \uXXXX so they
# render correctly regardless of the shell's locale settings.
ICO_MODEL=$'\xef\x8b\x9b'      #  nf-fa-microchip
ICO_DIR=$'\xef\x81\xbc'        #  nf-fa-folder_open
ICO_BRANCH=$'\xef\x90\x98'     #  nf-oct-git_branch
ICO_ADD=$'\xef\x81\x95'        #  nf-fa-plus_circle   (staged)
ICO_MOD=$'\xef\x81\x80'        #  nf-fa-pencil        (modified)
ICO_CTX=$'\xef\x87\x80'        #  nf-fa-database      (context window)
ICO_COST=$'\xef\x85\x95'       #  nf-fa-dollar
ICO_CLOCK=$'\xef\x80\x97'      #  nf-fa-clock_o
ICO_BOLT=$'\xef\x83\xa7'       #  nf-fa-bolt          (fast mode)
ICO_BRAIN=$'\xef\x83\xab'      #  nf-fa-lightbulb_o   (effort/thinking)
ICO_HOURGLASS=$'\xef\x89\x92'  #  nf-fa-hourglass_half (rate limit)
BLOCK_FULL=$'\xe2\x96\x88'     # █ (filled bar segment)
BLOCK_LIGHT=$'\xe2\x96\x91'    # ░ (empty bar segment)

SEP="${COMMENT} \xe2\x94\x82 ${RESET}"   # │ separator

# ---------- Parse session JSON ----------
MODEL=$(echo "$input" | jq -r '.model.display_name // "Claude"')
DIR=$(echo "$input" | jq -r '.workspace.current_dir // .cwd // ""')
DIRNAME="${DIR##*/}"
[ -z "$DIRNAME" ] && DIRNAME="~"

PCT_RAW=$(echo "$input" | jq -r '.context_window.used_percentage // 0')
PCT=$(printf '%.0f' "$PCT_RAW" 2>/dev/null)
[ -z "$PCT" ] && PCT=0

COST=$(echo "$input" | jq -r '.cost.total_cost_usd // 0')
DUR_MS=$(echo "$input" | jq -r '.cost.total_duration_ms // 0')
EFFORT=$(echo "$input" | jq -r '.effort.level // empty')
FAST=$(echo "$input" | jq -r '.fast_mode // false')
SESSION_ID=$(echo "$input" | jq -r '.session_id // "nosession"')
FIVEH=$(echo "$input" | jq -r '.rate_limits.five_hour.used_percentage // empty')

# ---------- Git info, cached 5s so the status line stays snappy ----------
CACHE_FILE="/tmp/statusline-git-${SESSION_ID}"
BRANCH=""; STAGED=0; MODIFIED=0

cache_is_stale() {
  [ ! -f "$CACHE_FILE" ] && return 0
  local age=$(( $(date +%s) - $(stat -c %Y "$CACHE_FILE" 2>/dev/null || stat -f %m "$CACHE_FILE" 2>/dev/null || echo 0) ))
  [ "$age" -gt 5 ]
}

if git -C "$DIR" rev-parse --git-dir > /dev/null 2>&1; then
  if cache_is_stale; then
    B=$(git -C "$DIR" branch --show-current 2>/dev/null)
    S=$(git -C "$DIR" diff --cached --numstat 2>/dev/null | wc -l | tr -d ' ')
    M=$(git -C "$DIR" diff --numstat 2>/dev/null | wc -l | tr -d ' ')
    echo "${B}|${S}|${M}" > "$CACHE_FILE"
  fi
  IFS='|' read -r BRANCH STAGED MODIFIED < "$CACHE_FILE"
fi

# ---------- Context-window progress bar ----------
BAR_WIDTH=12
FILLED=$(( PCT * BAR_WIDTH / 100 ))
[ "$FILLED" -gt "$BAR_WIDTH" ] && FILLED=$BAR_WIDTH
EMPTY=$(( BAR_WIDTH - FILLED ))

if [ "$PCT" -ge 90 ]; then BAR_COLOR="$RED"
elif [ "$PCT" -ge 70 ]; then BAR_COLOR="$YELLOW"
else BAR_COLOR="$GREEN"; fi

BAR=""
[ "$FILLED" -gt 0 ] && printf -v FILL "%${FILLED}s" && BAR="${FILL// /$BLOCK_FULL}"
[ "$EMPTY" -gt 0 ] && printf -v PAD "%${EMPTY}s" && BAR="${BAR}${PAD// /$BLOCK_LIGHT}"

# ---------- Cost & duration ----------
COST_FMT=$(printf '$%.2f' "$COST")
DUR_SEC=$(( DUR_MS / 1000 ))
MINS=$(( DUR_SEC / 60 ))
SECS=$(( DUR_SEC % 60 ))

# ---------- Line 1: model · directory · git ----------
LINE1="${BOLD}${PURPLE}${ICO_MODEL} ${MODEL}${RESET}${SEP}${CYAN}${ICO_DIR} ${DIRNAME}${RESET}"

if [ -n "$BRANCH" ]; then
  GIT_SEG="${GREEN}${ICO_BRANCH} ${BRANCH}${RESET}"
  { [ "$STAGED" -gt 0 ]; } 2>/dev/null && GIT_SEG="${GIT_SEG} ${GREEN}${ICO_ADD}${STAGED}${RESET}"
  { [ "$MODIFIED" -gt 0 ]; } 2>/dev/null && GIT_SEG="${GIT_SEG} ${ORANGE}${ICO_MOD}${MODIFIED}${RESET}"
  LINE1="${LINE1}${SEP}${GIT_SEG}"
fi

[ "$FAST" = "true" ] && LINE1="${LINE1} ${YELLOW}${ICO_BOLT}${RESET}"
[ -n "$EFFORT" ] && LINE1="${LINE1} ${PINK}${ICO_BRAIN}${EFFORT}${RESET}"

# ---------- Line 2: context bar · cost · duration · rate limit ----------
LINE2="${BAR_COLOR}${ICO_CTX} ${BAR}${RESET} ${BAR_COLOR}${PCT}%${RESET}${SEP}${YELLOW}${ICO_COST} ${COST_FMT}${RESET}${SEP}${COMMENT}${ICO_CLOCK} ${MINS}m ${SECS}s${RESET}"

if [ -n "$FIVEH" ]; then
  FIVEH_R=$(printf '%.0f' "$FIVEH" 2>/dev/null)
  LINE2="${LINE2}${SEP}${PURPLE}${ICO_HOURGLASS} 5h:${FIVEH_R}%${RESET}"
fi

printf '%b\n%b\n' "$LINE1" "$LINE2"

More status lines

Model: Opus 4.8 | Thinking: high | Context: [▰▰▱▱▱▱▱▱▱▱] 45k/200k (22%) | cwd: ~/app | ⎇ main | (+0,-0) Cost: $0.41 | Block: 2hr 6m | Weekly: 7.0% | Session: 10m | In: 916.7 t/s | Out: 29.2 t/s | Cached: 2k | Session: [▰▱▱▱▱] 26.0% Mem: 0.8G/1.0G | (*゚∀゚*) | Session ID: b8e1c0d2-4a6f-4e2a-9c1b-3f5d7a9e2c10
🤖 Opus 4.8 ⚡high 💡 │ 🎨 default │ ✅ git clean │ no env 📂 /home/user/app 🌿(main) │ 💰 0.41$ │ ⏰ 10m 🧠 Context █████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 22% used (44k/200k) 🚀 5H Limit ██████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 26% (Resets in 2h6m) 🌟 7D Limit ███░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 7% (Resets Oct 20 at 3pm)
Opus 4.8 [high] ~/app main 16:20:55 | ⛁ ██░░░░░░░░ 22% | 5h ●◔○○○ 26% ↻2h7m | 7d ◔○○○○○○ 7% ↻2d1h │ $0.41 ⏱ 10m

Activity Feed

51 copies

Opus 4.8 high ✦ │ ctx 22% │ app (main) │ PR #1287 ● │ $0.41 · 10m +128 -34 Session ● ● ● ● ● ● ● ● ○ ○ ○ 74% left Resets in 2h 6m Weekly ● ● ● ● ● ● ● ● ● ● ○ 93% left Resets in 2d 0h Fable ● ● ● ● ● ● ● ● ● ○ ○ 85% left Resets in 2d 0h ◐ Read:index.ts ✓ Read×1 ✓ Bash×1 ✓ Edit×1 ✓ Grep×1 ◐ code-reviewer Review the change for regressions

Pace Arrows

5 copies

Opus 4.8 (200K) high | app (main) ██░░░░░░░░ 22% 200K | 5h 26% ⇣32% 2h 7d 7% ⇣63% 2d
app · main · Opus 4.8 · high ctx 22% 44k · 5h 26% ↻2h6m · 7d 7% ↻2d0h · cost $0.41 · msg $0.757

Related mods

Terminal

❯ /deck demo ⎿ deck: Sample plan running above the prompt, with sample routing until real ones arrive. [-] 0: deck ▾ · 5 rows 22:11:41 ⇄ Model route opus = opus jev: haiku · not applied effort ▁▃·· medi = kept ✕ ✓ Orders module Done · 12/12 · 2/2 agents 100% ✕ ● Context 44k / 200k 22% ✕ ◔ Session · 5h 5h · 26% used ↻ 2:04:24 ✕ ◔ Weekly · 7d 7d · 7% used ↻ 2d 0h 57m ✕ ❯  ⏵⏵ auto mode on (shift+tab to cycle) · ← for agents [ Deck 1 ]

Claude Desktop

Deck in Claude Desktop

A cockpit for Claude Code: plan bars and subagent strips, context, usage limits with reset countdowns and burn rates, spend, the model route and a pet. Six bar styles, three collapsed looks. CLI and Desktop.

Terminal

BURN ▁ ▂ *▂▆ ▃ $0.41 = 0.04 burritos [-] 5h 26% in 2h 5m ▅▄█▅▅▆█▆███▅█ opus 4.8 44k in 1k out wk 7% in 2d 0h █████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ lifetime $0.41 hide ❯ 

Claude Desktop

Burn Meter in Claude Desktop

Live session cost odometer above the prompt: a burning fuse, real-world comparisons, threshold alerts

Terminal

❯ Run the tests again ● The repo is clean and the tests pass. ✻ Cooked for 0s · done 10:12 PM ☀ 44k │ 5h 26% │ 7d 7% │ cache 5% [-] ❯ 

Claude Desktop

Token Weather Usage in Claude Desktop

One line above the prompt: context tokens with their weather, a bar per recent prompt, your 5-hour and 7-day limits against the time elapsed, the prompt cache with its time left, the session cost with the last prompt's share in dollars and in points of the 5-hour limit, and the subagents running. Labels in English, French or Russian. After Token Weather (Anthropic, Apache-2.0) and the ideas of usage-meter (HolyGrail) and prompt-cache-control (Daniel San).

Terminal

❯ /flightdeck open ⎿ flightdeck: Flightdeck opened. Focus it with ctrl+x tab; 1-6 expand cards, f/s/o open the gate rows. ╭────────────────────────────────────────────────────────────────────────────────────────────────✕─╮ │ Opus 4.8 ○ idle · ctx ▰▱▱▱▱▱ 22% · $0.25 │ │ last turn 0s · 0 agents · 0 edits · 0 errors │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────╯ ❯  ⚠ flightdeck: ctx 22%

Claude Desktop

Flightdeck in Claude Desktop

Flightdeck: a live agent dashboard for Claude Code. Main model vitals, an on-call architect, every permission check, subagent cards and swimlanes, a turn receipt and a session log, all from real session events