ClaudeCode:StatusLine
내가 사용하는 설정
이 것은 다음과 같다:
~/.claude/statusline-command.sh 위치의 코드는:
#!/bin/bash
# Claude Code status line: model display name + context window usage bar
# + plan/session rate limit usage (Claude.ai subscription only, when available)
input=$(cat)
model=$(printf '%s' "$input" | jq -r '.model.display_name // "Claude"')
used=$(printf '%s' "$input" | jq -r '.context_window.used_percentage // empty')
five_hour=$(printf '%s' "$input" | jq -r '.rate_limits.five_hour.used_percentage // empty')
five_hour_resets_at=$(printf '%s' "$input" | jq -r '.rate_limits.five_hour.resets_at // empty')
seven_day=$(printf '%s' "$input" | jq -r '.rate_limits.seven_day.used_percentage // empty')
seven_day_resets_at=$(printf '%s' "$input" | jq -r '.rate_limits.seven_day.resets_at // empty')
if [ -z "$used" ]; then
used_int=0
else
used_int=$(printf '%.0f' "$used")
fi
dim=$'\033[2m'
reset=$'\033[0m'
# Build a colored "[███░░░░░░░] NN%" progress bar for a given percentage.
make_bar() {
local pct=$1
local width=${2:-10}
local filled=$(( pct * width / 100 ))
[ "$filled" -gt "$width" ] && filled=$width
[ "$filled" -lt 0 ] && filled=0
local empty=$(( width - filled ))
local bar=""
for ((i = 0; i < filled; i++)); do bar="${bar}█"; done
for ((i = 0; i < empty; i++)); do bar="${bar}░"; done
local color
if [ "$pct" -ge 80 ]; then
color=$'\033[2;31m'
elif [ "$pct" -ge 50 ]; then
color=$'\033[2;33m'
else
color=$'\033[2;32m'
fi
printf "${color}[%s] %s%%${reset}" "$bar" "$pct"
}
bar_width=10
line=$(printf "${dim}%s${reset} %s" "$model" "$(make_bar "$used_int" "$bar_width")")
# Plan/session usage limits: rate_limits.five_hour / rate_limits.seven_day.
# These are only present for Claude.ai subscription plans, and only after the
# first API response in the session (absent for API-key/console billing).
limit_parts=""
if [ -n "$five_hour" ]; then
five_int=$(printf '%.0f' "$five_hour")
limit_parts="${dim}5h:${reset}$(make_bar "$five_int" "$bar_width")"
if [ -n "$five_hour_resets_at" ]; then
now_epoch=$(date +%s)
remaining=$(( ${five_hour_resets_at%.*} - now_epoch ))
if [ "$remaining" -gt 0 ]; then
rem_h=$(( remaining / 3600 ))
rem_m=$(( (remaining % 3600) / 60 ))
limit_parts="${limit_parts} ${dim}$(printf '(%d:%02d)' "$rem_h" "$rem_m")${reset}"
fi
fi
fi
if [ -n "$seven_day" ]; then
seven_int=$(printf '%.0f' "$seven_day")
[ -n "$limit_parts" ] && limit_parts="${limit_parts} "
limit_parts="${limit_parts}${dim}7d:${reset}$(make_bar "$seven_int" "$bar_width")"
if [ -n "$seven_day_resets_at" ]; then
seven_reset_fmt=$(date -d "@${seven_day_resets_at%.*}" "+%m/%d %H:%M" 2>/dev/null)
[ -n "$seven_reset_fmt" ] && limit_parts="${limit_parts} ${dim}(${seven_reset_fmt})${reset}"
fi
fi
if [ -n "$limit_parts" ]; then
line="${line} ${dim}|${reset} ${limit_parts}"
fi
printf '%s\n' "$line"