Skip to content

ClaudeCode:StatusLine

내가 사용하는 설정

Fable 5 [██░░░░░░░░] 25% | 5h:[█████████░] 97% (2:05) 7d:[█░░░░░░░░░] 18% (07/13 06:00)

이 것은 다음과 같다:

현재모델 [컨텍스트 사용률] 페센테이지 | 5h:[컨텍스트 사용률] 페센테이지 (리셋 남은시간) 7d:[컨텍스트 사용률] 페센테이지 (리셋 날짜)

~/.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"

See also