Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Configure a custom status line in the CLI. Use when the user mentions status line, statusline, statusLine, CLI status bar, prompt footer customization, or wants to add session context above the prompt.
.claude/skills/kunanonj-cursor-statusline/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-06 | ✗→✓ | ▲ Improved | -19% | 0% |
| case-01 | ✗→✓ | ▲ Improved | 17% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 0% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 106% | 0% |
| case-04 | ✗→✓ | ▲ Improved | -30% | 0% |
The CLI supports a user-configurable status line rendered above the prompt. A command is spawned on each conversation update, receives a JSON payload on stdin describing the session, and its stdout is displayed as the status line.
Add a statusLine entry to ~/.cursor/cli-config.json:
json{ "statusLine": { "type": "command", "command": "~/.cursor/statusline.sh", "padding": 2 } }
| Field | Required | Default | Description | |-------|----------|---------|-------------| | type | yes | — | Must be "command" | | command | yes | — | Path to executable or inline command. ~ is expanded. | | padding | no | 0 | Horizontal inset (characters) for the status line container. | | updateIntervalMs | no | 300 | Minimum interval between invocations. Clamped to >= 300ms. | | timeoutMs | no | 2000 | Maximum time the command may run before killed. |
The command receives a JSON object on stdin with these fields:
| Field | Description | |-------|-------------| | session_id | Unique session identifier | | session_name | Custom session name (absent if no name set) | | transcript_path | Path to conversation transcript file | | render_width_chars | Usable terminal columns | | cwd | Current working directory | | autorun | true when auto-run is enabled | | model.id, model.display_name | Current model identifier and display name | | model.param_summary | Formatted parameter summary (absent when empty) | | model.max_mode | true when max mode is enabled (absent otherwise) | | version | CLI version string | | context_window.used_percentage | Percentage of context window used | | context_window.remaining_percentage | Percentage remaining | | vim.mode | "NORMAL" or "INSERT" when vim mode is enabled | | worktree.name | Worktree name when running inside a worktree |
\033[32m, etc.).bash#!/usr/bin/env bash payload=$(cat) model=$(echo "$payload" | jq -r '.model.display_name') pct=$(echo "$payload" | jq -r '.context_window.used_percentage // 0' | cut -d. -f1) printf "\033[90m%s ctx %s%%\033[0m" "$model" "$pct"
bash#!/usr/bin/env bash input=$(cat) MODEL=$(echo "$input" | jq -r '.model.display_name') PCT=$(echo "$input" | jq -r '.context_window.used_percentage // 0' | cut -d. -f1) BAR_WIDTH=10 FILLED=$((PCT * BAR_WIDTH / 100)) EMPTY=$((BAR_WIDTH - FILLED)) BAR="" [ "$FILLED" -gt 0 ] && printf -v FILL "%${FILLED}s" && BAR="${FILL// /▓}" [ "$EMPTY" -gt 0 ] && printf -v PAD "%${EMPTY}s" && BAR="${BAR}${PAD// /░}" echo "[$MODEL] $BAR $PCT%"
bash#!/usr/bin/env bash input=$(cat) MODEL=$(echo "$input" | jq -r '.model.display_name') DIR=$(echo "$input" | jq -r '.workspace.current_dir') PCT=$(echo "$input" | jq -r '.context_window.used_percentage // 0' | cut -d. -f1) BRANCH="" git rev-parse --git-dir > /dev/null 2>&1 && BRANCH=" | $(git branch --show-current 2>/dev/null)" echo -e "\033[36m[$MODEL]\033[0m ${DIR##*/}$BRANCH" echo -e "ctx $PCT%"
json{ "statusLine": { "type": "command", "command": "jq -r '\"[\\(.model.display_name)] \\(.context_window.used_percentage // 0)% context\"'" } }
Test a script with mock input:
bashecho '{"model":{"display_name":"Opus"},"context_window":{"used_percentage":25}}' | ./statusline.sh
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-12 | pass→pass | 7,208 | 1,429 | -80% | 1 | 1 | 0% | 1,101 | 1,388 | +26% | 0 | 0 | — |
case-06 | fail→pass | 10,835 | 2,020 | -81% | 1 | 1 | 0% | 1,846 | 1,487 | -19% | 0 | 0 | — |
case-01 | fail→pass | 8,708 | 3,966 | -54% | 1 | 1 | 0% | 1,741 | 2,039 | +17% | 0 | 0 | — |
case-02 | fail→pass | 12,551 | 6,250 | -50% | 1 | 1 | 0% | 2,619 | 2,620 | +0% | 0 | 0 | — |
case-03 | fail→pass | 32,313 | 12,050 | -63% | 1 | 1 | 0% | 1,903 | 3,918 | +106% | 0 | 0 | — |
case-04 | fail→pass | 11,418 | 1,556 | -86% | 1 | 1 | 0% | 2,099 | 1,465 | -30% | 0 | 0 | — |
case-05 | fail→pass | 10,171 | 1,969 | -81% | 1 | 1 | 0% | 1,947 | 1,479 | -24% | 0 | 0 | — |
case-07 | fail→pass | 12,773 | 1,974 | -85% | 1 | 1 | 0% | 1,818 | 1,487 | -18% | 0 | 0 | — |
case-08 | fail→pass | 5,073 | 3,785 | -25% | 1 | 1 | 0% | 901 | 1,884 | +109% | 0 | 0 | — |
case-09 | fail→pass | 8,906 | 2,959 | -67% | 1 | 1 | 0% | 1,504 | 1,694 | +13% | 0 | 0 | — |
case-10 | fail→pass | 11,891 | 4,627 | -61% | 1 | 1 | 0% | 2,058 | 2,140 | +4% | 0 | 0 | — |
case-11 | pass→pass | 11,554 | 4,661 | -60% | 1 | 1 | 0% | 2,103 | 2,082 | -1% | 0 | 0 | — |
case-13 | fail→pass | 7,266 | 1,260 | -83% | 1 | 1 | 0% | 1,130 | 1,400 | +24% | 0 | 0 | — |
case-14 | fail→pass | 11,189 | 2,449 | -78% | 1 | 1 | 0% | 1,857 | 1,667 | -10% | 0 | 0 | — |
case-15 | fail→pass | 7,784 | 3,708 | -52% | 1 | 1 | 0% | 1,206 | 1,500 | +24% | 0 | 0 | — |
case-16 | fail→pass | 8,536 | 1,940 | -77% | 1 | 1 | 0% | 1,418 | 1,539 | +9% | 0 | 0 | — |
case-17 | fail→pass | 10,773 | 1,777 | -84% | 1 | 1 | 0% | 2,036 | 1,413 | -31% | 0 | 0 | — |
case-18 | pass→pass | 7,629 | 4,705 | -38% | 1 | 1 | 0% | 1,378 | 2,028 | +47% | 0 | 0 | — |
case-19 | pass→pass | 7,923 | 5,487 | -31% | 1 | 1 | 0% | 1,474 | 2,321 | +57% | 0 | 0 | — |
case-20 | pass→pass | 11,347 | 7,558 | -33% | 1 | 1 | 0% | 2,152 | 2,757 | +28% | 0 | 0 | — |
case-21 | pass→pass | 13,915 | 7,954 | -43% | 1 | 1 | 0% | 2,664 | 2,744 | +3% | 0 | 0 | — |
case-22 | pass→pass | 11,845 | 7,892 | -33% | 1 | 1 | 0% | 2,060 | 2,593 | +26% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 21 counted toward the lift figure. The other 1 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +68 percentage points is the difference between those two pass rates over the 21 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.