statusline-install
Statusline Specification
Create a statusline with this exact format:
Model │ ↑Tokens ↓Tokens $Cost │ Duration +Lines -Lines │ Context%
Example output:
Opus │ ↑15k ↓4k $1.23 │ 5m (2m) +156 -23 │ 42%
Data Sources
| Field | JSON Path |
|---|---|
| Model | .model.display_name |
| Total duration | .cost.total_duration_ms |
| API duration | .cost.total_api_duration_ms |
| Input tokens | .context_window.total_input_tokens |
| Output tokens | .context_window.total_output_tokens |
| Cost | .cost.total_cost_usd |
| Lines added | .cost.total_lines_added |
| Lines removed | .cost.total_lines_removed |
| Context % | .context_window.used_percentage |
Formatting Rules
Duration: Show as Xs, Xm, or Xh Ym — total time followed by API time in parentheses (always shown)
5m (2m)= 5 min total, 2 min waiting for API1h 15m (45m)= 1 hour 15 min total, 45 min waiting for API- Empty state:
0s (0s)
Tokens:
- Raw number if < 1,000 →
850 - Lowercase
kfor thousands →15k - Lowercase
mwith 1 decimal for millions →1.2m
Cost:
- 4 decimal places if < $0.01 →
$0.0012 - 2 decimal places if ≥ $0.01 →
$0.12
Lines changed: Green for +added, Red for -removed
Model name: Reset/default terminal color (wrap with ${RESET})
Separators: Dim box-drawing character │ (U+2502)
General styling: Duration, tokens, and cost should be dim
Context % Color Thresholds
Auto-compact triggers at ~78%, so thresholds are calibrated accordingly:
| Range | Color | Meaning |
|---|---|---|
| 0-49% | Green | Plenty of room |
| 50-64% | Yellow | Getting used |
| 65-74% | Orange | Approaching auto-compact |
| 75%+ | Red | Near auto-compact trigger |
ANSI Color Definitions (Bash)
Define colors using $'...' syntax so escape sequences are interpreted.
Use 24-bit true color format \033[38;2;R;G;Bm for precise colors:
DIM=$'\033[38;2;153;153;153m' # #999999
GREEN=$'\033[38;2;55;166;96m' # #37A660
YELLOW=$'\033[33m'
ORANGE=$'\033[38;5;208m'
RED=$'\033[38;2;187;106;122m' # #BB6A7A
RESET=$'\033[0m'
Always wrap colored output with ${COLOR}text${RESET}.
Null Handling
Default to 0 for numeric fields when null/missing:
- Tokens:
0 - Cost:
$0.0000 - Duration:
0s (0s) - Lines:
+0/-0 - Context:
0%
Only show -- for non-numeric fields like model name if truly unavailable.
Platform Notes
- macOS/Linux: Use bash with the ANSI definitions above
- Windows: Use PowerShell 7+ (
pwsh). Use backtick syntax instead:
$Dim = "`e[38;2;153;153;153m" # #999999
$Green = "`e[38;2;55;166;96m" # #37A660
$Yellow = "`e[33m"
$Orange = "`e[38;5;208m"
$Red = "`e[38;2;187;106;122m" # #BB6A7A
$Reset = "`e[0m"
Install to ~/.claude/ and update ~/.claude/settings.json with the statusLine configuration.