Three emoji-labeled lines: folder, git branch and model; context use with a bar and session cost with a dollars-per-hour rate; then five-hour and seven-day quota bars when your plan reports them. No network calls.
0 copies
Preview
📁 app 🌿 main 🧠 Opus
🧊 22% [==--------] 💰 $0.41 ($2.41/h)
⏳ 5h: 26% [==--------] 7d: 7% [----------]
📁 app 🌿 main 🧠 Opus
🧊 0% [----------] 💰 $0.00 ($0.00/h)
📁 app 🌿 feat/auth* 🧠 Sonnet
🧊 48% [====------] 💰 $0.41 ($2.41/h)
⏳ 5h: 40% [====------] 7d: 18% [=---------]
📁 app 🌿 main 🧠 Opus
❗ 91% [=========-] 💰 $4.12 ($24.24/h)
⏳ 5h: 88% [========--] 7d: 61% [======----]
📁 app 🌿 main 🧠 Fable
🧊 64% [======----] 💰 $0.41 ($2.41/h)
⏳ 5h: 33% [===-------] 7d: 80% [========--]
📁 app 🌿 main 🧠 Haiku
🧊 0% [----------] 💰 $0.41 ($2.41/h)
⏳ 5h: 52% [=====-----]
📁 feature 🌿 worktree-feature 🧠 Opus
🧊 37% [===-------] 💰 $0.41 ($2.41/h)
⏳ 5h: 44% [====------] 7d: 20% [==--------]
📁 scratch 🌿 🧠 Opus
🧊 22% [==--------] 💰 $0.41 ($2.41/h)
What it does
Emoji-labeled lines for folder, git branch and short model name, then a context bar with session cost and dollars per hour, then five-hour and seven-day quota bars when present.
- Written in
- Bash
- Network access
- None
- Works in
- Terminal
How it works
- Parses stdin with jq, or with python3 when jq is missing.
- Runs git branch --show-current, then git diff --quiet HEAD to add * when dirty.
- Divides cost by session time for the rate: $4.12 over 10m 12s shows $24.24/h.
- Swaps the 🧊 icon for ⚠️ at 70% context use and ❗ at 80%.
Good to know
- python3 (or python) works out the hourly rate even when jq is installed; without one it reads $0.00/h.
- With no rate-limit data the script exits with code 1, which makes Claude Code show a blank status line.
- Outside a git repo the 🌿 label stays, with nothing after it.
Source
#!/bin/bash
input=$(cat)
# jq 또는 python3으로 JSON 파싱
parse() {
local field="$1"
local default="$2"
if command -v jq &>/dev/null; then
echo "$input" | jq -r "$field // \"$default\""
else
local py=$(command -v python3 || command -v python || command -v py)
[ -z "$py" ] && { echo "$default"; return; }
echo "$input" | $py -c "
import sys, json
data = json.load(sys.stdin)
keys = '$field'.strip('.').split('.')
val = data
for k in keys:
val = val.get(k, '$default') if isinstance(val, dict) else '$default'
print(val)
" 2>/dev/null || echo "$default"
fi
}
MODEL_RAW=$(parse '.model.display_name' 'unknown')
# shorten model name: "Opus 4.6 (1M context)" → "Opus"
MODEL=$(echo "$MODEL_RAW" | sed 's/ [0-9].*//')
DIR=$(parse '.workspace.current_dir' '.')
COST=$(parse '.cost.total_cost_usd' '0')
DURATION_MS=$(parse '.cost.total_duration_ms' '0')
REM=$(parse '.context_window.remaining_percentage' '100')
REM=${REM%%.*}
PCT=$((100 - REM))
VERSION=$(parse '.version' '')
# rate limits
RL5_PCT=$(parse '.rate_limits.five_hour.used_percentage' '')
RL7_PCT=$(parse '.rate_limits.seven_day.used_percentage' '')
# git branch + dirty check
BRANCH=$(cd "$DIR" 2>/dev/null && git branch --show-current 2>/dev/null || echo "")
if [ -n "$BRANCH" ] && cd "$DIR" 2>/dev/null && ! git diff --quiet HEAD 2>/dev/null; then
BRANCH="${BRANCH}*"
fi
# context bar (usage-based: fills up as you use more)
FILLED=$((PCT / 10))
EMPTY=$((10 - FILLED))
BAR=$(printf "%${FILLED}s" | tr ' ' '=')$(printf "%${EMPTY}s" | tr ' ' '-')
# cost / hourly rate
COST_FMT=$(printf '$%.2f' "$COST")
DURATION_S=${DURATION_MS%.*}
SECS=$((DURATION_S / 1000))
if [ "$SECS" -gt 0 ]; then
PY=$(command -v python3 || command -v python || command -v py)
HOURLY=$($PY -c "print(f'{$COST / $SECS * 3600:.2f}')" 2>/dev/null || echo "0.00")
HOURLY_FMT="\$${HOURLY}/h"
else
HOURLY_FMT='$0.00/h'
fi
# context warning icon
if [ "$PCT" -ge 80 ]; then
CTX_ICON="❗"
elif [ "$PCT" -ge 70 ]; then
CTX_ICON="⚠️"
else
CTX_ICON="🧊"
fi
# rate limit bars (remaining = 100 - used)
make_bar() {
local pct=${1%%.*}
local filled=$((pct / 10))
local empty=$((10 - filled))
printf "%${filled}s" | tr ' ' '='
printf "%${empty}s" | tr ' ' '-'
}
RL_INFO=""
if [ -n "$RL5_PCT" ] && [ "$RL5_PCT" != "null" ]; then
RL5_INT=${RL5_PCT%%.*}
RL5_BAR=$(make_bar "$RL5_INT")
RL_INFO="5h: ${RL5_INT}% [${RL5_BAR}]"
fi
if [ -n "$RL7_PCT" ] && [ "$RL7_PCT" != "null" ]; then
RL7_INT=${RL7_PCT%%.*}
RL7_BAR=$(make_bar "$RL7_INT")
RL_INFO="${RL_INFO} 7d: ${RL7_INT}% [${RL7_BAR}]"
fi
# output
echo "📁 ${DIR##*/} 🌿 $BRANCH 🧠 $MODEL"
echo "${CTX_ICON} ${PCT}% [${BAR}] 💰 ${COST_FMT} (${HOURLY_FMT})"
[ -n "$RL_INFO" ] && echo "⏳ ${RL_INFO}"
More status lines
Pace Dot Meters
94 copies
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
One Dark Triptych
15 copies
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
Pace Arrows
5 copies
Opus 4.8 (200K) high | app (main)
██░░░░░░░░ 22% 200K | 5h 26% ⇣32% 2h 7d 7% ⇣63% 2d
Burn Rate Bars
4 copies
📁 app 🌿 main 🧠 Opus
🧊 22% [==--------] 💰 $0.41 ($2.41/h)
⏳ 5h: 26% [==--------] 7d: 7% [----------]
Kanji Rain
7 copies
庫 app · 枝 main · 脳 OPUS-4.8
文 ▓▓░░░░░░ 22% · 時 ▓▓░░┃░░░ 26% · 週 ▓░░░░┃░░ 7%
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

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
❯ 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

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
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

Live session cost odometer above the prompt: a burning fuse, real-world comparisons, threshold alerts
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: 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