åäœã®autopilotèšäºã§æŽèµ°å¯Ÿçãæžãããšããããã©ã³æ ãstatuslineã«åºããéšåã¯äžæ®µèœã§æµããŠããŸããŸãããä»åã¯ãã®äžèº«ãå šéšåºããŸãã
ä»çµã¿ã¯æåæããããããåçŽã§ããèªèšŒããšã³ããã€ã³ãåŒã³åºãããããŸãããClaude Codeãstatuslineã¹ã¯ãªãããžstdinã§æž¡ããŠããJSONããjqã§èªãã ãã§ããããã§5h/7dã®ãã©ã³æ ãã³ã³ããã¹ã䜿çšçãã»ãã·ã§ã³ã³ã¹ããšåœæ¥çޝèšïŒåæç®ïŒãã3è¡ã§ãã£ãšç»é¢ã«åºãŠããŸããéãšã³ãžãã¢ã®åã§ããå€ãæããŠäžŠã¹ããã ãã§çµããŸããã
ãè¿çãèãïŒãã®æ£äœã¯5hæ ã ã£ã
Claude Maxã«ã¯ãœãããªã¬ãŒãå¶éããããŸãã5æéãããã¯ãš7æ¥çªã§åºåããŒã¯ã³ãäžéã«è¿ã¥ããšã¢ãã«ã®æåãå€ããã䜿ãåããšä»¥éã®ã¹ããããskipãããŸããå°ã£ãã®ã¯ããã®æ¶è²»ç¶æ³ããµã ããŸã£ããèŠããªãããšã§ããã
åãå®éã«èžãã ã®ã¯æ¬¡ã®3ã€ã§ãã
- ããªããè¿çãèããªã£ãïŒããšéŠãã²ãããªããäœæ¥ãç¶ããŠãããã5hæ ãåãŸã£ãŠãã
- autopilotãè£ã§äœ¿ã£ãåãåç®ãããã®ãå¿ããŠãæäœæ¥ã®ã»ãã·ã§ã³ãå§ããŠããŸã
- ã³ã¹ãæèŠãããããŸãŸææ«ã«ccusageãéããããã§åããŠäœ¿ããããç¥ã
3ã€ãšããæ°åããèŠããŠããã°èµ·ããªãã£ãããšã§ããæåã¯å¥ã¿ãã§ããã·ã¥ããŒããéãéçšã«ããã®ã§ããã3æ¥ã§éããªããªããŸããç¬ãäœæ¥ããŠããç»é¢ãã®ãã®ã«æ°åãããã°ãèŠãããšããªããŠãç®ã«å ¥ããŸããããã§statuslineã«çœ®ãããšã«ããŸããã
ð¬ é客ã»å°ç·èšèšãšãAIå°å ¥ã»èªååã®ãçžè«ã¯ãã¡ã
stdinã®JSONã«ã欲ããå€ãã»ãŒå šéšå ¥ã£ãŠãã
stdinããçŽæ¥åããå€
Claude Codeã¯statuslineã¹ã¯ãªãããèµ·åãããã³ã«ãstdinãžJSONãæµããŠããŸããäžãèŠããŠã¿ãããæ¬²ããå€ãã»ãŒæã£ãŠããŠé©ããŸããïŒ
# ~/.claude/scripts/statusline.sh
INPUT="$(cat 2>/dev/null || echo '{}')"
j() { printf '%s' "$INPUT" | jq -r "$1" 2>/dev/null; }
CTX=$(j '.context_window.used_percentage // empty')
H5=$(j '.rate_limits.five_hour.used_percentage // empty')
H5R=$(j '.rate_limits.five_hour.resets_at // empty')
D7=$(j '.rate_limits.seven_day.used_percentage // empty')
D7R=$(j '.rate_limits.seven_day.resets_at // empty')
SESSION_USD=$(j '.cost.total_cost_usd // 0').context_window.used_percentage ã¯Claude CodeåŽã§èšç®æžã¿ã®å€ãªã®ã§ãèªåã§ããŒã¯ã³ãæ°ããå¿ èŠã¯ãããŸããã
æ°ãã€ãããã®ã¯ rate_limits ã§ããããã¯ãµãã¹ã¯å¥çŽã®ãŠãŒã¶ãŒãæåã®APIå¿çãåãåã£ãããšã«ããçŸããŸããã// empty ã§ãã©ãŒã«ããã¯ããŠãããªããšãã»ãã·ã§ã³éå§çŽåŸã«ãšã©ãŒã«ãªããŸããéå§çŽåŸã¯ -- 衚瀺ã§ãæåã®ã¿ãŒã³ãè¿ã£ãŠãããæ°åãåºå§ããŸããããã§æ£åžžã§ãã
ãªã»ããæå»ã¯epochç§ã§æ¥ãã®ã§ãdate ã§ããŒã«ã«æå»ã«çŽããŸãã
clk() { [ -n "$1" ] && date -r "$1" "+%H:%M" 2>/dev/null; } # â HH:MM
mdhm() { [ -n "$1" ] && date -r "$1" "+%-m/%-d %H:%M" 2>/dev/null; } # â M/D HH:MM3è¡ã¬ã€ã¢ãŠã
åºåã¯åºå®ã®3è¡ã§ãã
line1: ð dir ⥠branch
line2: ð€ model·effort ð§ ctx% ð 5h N% âªHH:MM ð
7d N% âªM/D HH:MM
line3: ðŽ session âÂ¥x 仿¥ âÂ¥y <health>ããŒã»ã³ããŒãžã«ã¯è²ãã€ããŠããŸããæ°åãèªãŸãªããŠããç·ã»é»ã»èµ€ã§ç¶æ ãããããŸãã
# pct -> color (green <50, yellow 50-79, red >=80)
pcolor() { local n="${1%%.*}"; [ -z "$n" ] && { printf '%s' "$DIM"; return; }
if [ "$n" -ge 80 ] 2>/dev/null; then printf '%s' "$RED"
elif [ "$n" -ge 50 ] 2>/dev/null; then printf '%s' "$YEL"
else printf '%s' "$GRN"; fi; }åœæ¥ã³ã¹ãã¯2åãã£ãã·ã¥ã§åã
SESSION_USD ã¯stdinãããªã¢ã«ã¿ã€ã ã§æ¥ãŸãããã ã仿¥ã®ããŒã¿ã«ãã¯ccusageã®dailyéèšãå¿ èŠã§ãããããæ¯ååŒã¶ãšstatuslineã®æç»ãè©°ãŸãã®ã§ã2åãã£ãã·ã¥ãšããã¯ã°ã©ãŠã³ãæŽæ°ã«ããŸããã
CCUSAGE=$(command -v ccusage 2>/dev/null || echo "$HOME/.nvm/versions/node/v24.13.0/bin/ccusage")
DAY_CACHE="/tmp/cc-daily-cache.json"
NEED=true
if [ -f "$DAY_CACHE" ]; then
AGE=$(($(date +%s) - $(stat -f %m "$DAY_CACHE" 2>/dev/null || echo 0)))
[ "$AGE" -lt 120 ] && NEED=false
fi
[ "$NEED" = true ] && ( "$CCUSAGE" daily --json 2>/dev/null > "${DAY_CACHE}.tmp" && mv "${DAY_CACHE}.tmp" "$DAY_CACHE" ) &
DAY_USD=0
if [ -f "$DAY_CACHE" ]; then
TODAY=$(date "+%Y-%m-%d")
DAY_USD=$(jq -r --arg d "$TODAY" '(.daily[] | select(.date==$d) | .totalCost) // (.daily[-1].totalCost) // 0' "$DAY_CACHE" 2>/dev/null)
fiãã€ã³ã㯠& ã§ãµãã·ã§ã«ã«æããŠãããšããã§ãããã£ãã·ã¥ãåããŠããŠããstatuslineã¯ãã®å Žã§å€ãå€ãè¿ããè£ã§ccusageãèµ°ãããŸãã2ååã®æ°åã§ããå®éã«äœ¿ã£ãŠããŠå°ã£ãå Žé¢ã¯ãããŸããã§ããã
åæç®ã¯ãå é ã§æ±ºããã¬ãŒãã䜿ã£ãŠawkã§èšç®ããŸãã
JPY_RATE=150 # Edit to taste / use $ instead.
yen() { awk -v u="$1" -v r="$JPY_RATE" 'BEGIN{
v=u*r; n=sprintf("%.0f", v); s=""; len=length(n); c=0
for(i=len;i>=1;i--){ s=substr(n,i,1) s; c++; if(c%3==0 && i>1) s="," s }
printf "Â¥%s", s }'; }Â¥1,234 ã®ããã«3æ¡ã«ã³ãã§åºãŸãããã«è¡šç€ºã奜ã¿ãªããyen ãåŒãã§ããç®æã $SESSION_USD ã«çœ®ãæããã ãã§ãã
ãã«ã¹1æåïŒ5åãã£ãã·ã¥ïŒ
3è¡ç®ã®æ«å°Ÿã«ã¯ãð¢/ð¡/ðŽ/â«ã®1æåã§automationã®æ»æŽ»ãåºããŠããŸããautomation-health.sh ã¯èµ·åãéãã®ã§ããã¡ãã¯5åãã£ãã·ã¥ã«ããŸããã
HEALTH_CACHE="/tmp/cc-health-cache"; HEALTH=""
if [ -f "$HEALTH_CACHE" ]; then
HAGE=$(($(date +%s) - $(stat -f %m "$HEALTH_CACHE" 2>/dev/null || echo 0)))
[ "$HAGE" -lt 300 ] && HEALTH=$(cat "$HEALTH_CACHE" 2>/dev/null)
fi
if [ -z "$HEALTH" ]; then
( h=$(~/.claude/scripts/automation-health.sh 2>&1 | grep -oE "ALL GREEN|WARN|FAIL" | head -1)
case "$h" in
"ALL GREEN") echo "ð¢" > "$HEALTH_CACHE" ;;
"WARN") echo "ð¡" > "$HEALTH_CACHE" ;;
"FAIL") echo "ðŽ" > "$HEALTH_CACHE" ;;
*) echo "â«" > "$HEALTH_CACHE" ;;
esac ) &
HEALTH="·"
fiãã£ãã·ã¥ãåããŠãããšã㯠·ïŒãããïŒãè¿ãã€ã€ãè£ã§æŽæ°ãå§ããŸããæ¬¡ã®æç»ã§ãã£ãã·ã¥ãã§ããŠããã°çµµæåã«åãæ¿ãããŸããstatuslineã®æç»ã¯ãã©ããªå Žåãæ¢ããªãã2åãš5åã2ã€ã®ãã£ãã·ã¥ã¯ã©ã¡ãããã®1ç¹ã®ããã«å ¥ããŠããŸãã
èµ°ããæ¢ãŸããã¯ãå¥ã¹ã¯ãªããã§ç²ŸåºŠãäžãã
token-budget-advisor.shã§2ã€ã®éèšãçªãåããã
statuslineã¯ãä»ã©ã®ããããããç®ã§èŠãããã®ãã®ã§ããautopilotããèµ°ãããæ¢ãŸããããæ±ºããã«ã¯ããã£ãšç²ŸåºŠãèŠããŸãããããåãæã€ã®ã token-budget-advisor.sh ã§ãã
ccusageã®å ¬åŒãããã¯éèšãåªå ãã€ã€ãèªåã® ~/.claude/logs/cost-log.jsonl ã®éèšãèšç®ããŠãå·®åçïŒsource_diff_pctïŒãåºããŠããŸãã
# ccusage ãå±
ãã°5hãããã¯ã®output tokenãåãïŒtranscriptèšç®ããå
¬åŒïŒ
if command -v ccusage >/dev/null 2>&1; then
CC_JSON=$(ccusage blocks --json 2>/dev/null || true)
# ... activeãããã¯ãæœåºããŠoutputTokens/costUSDãåãåºã
CC_OUTPUT_TOK="${EXTRACTED%|*}"
CC_COST_5H="${EXTRACTED#*|}"
fiå€å®ã®ãããå€ã¯ãã眮ããŠããŸãã
THRESH_5H_WARN = 800_000 # output tokens â warn
THRESH_5H_CRIT = 1_200_000 # â critical
THRESH_WEEK_WARN = 3000 # USD / 7d
THRESH_SESS_PER_DAY = 5 # çŽè¿3då¹³å > 5 â burst--short ãä»ãããš1è¡åºåã«ãªããautopilotã¯ãããèŠãŠå åãã§å€æããŸãã
# autopilotåŽã®ã³ãŒãããïŒåäœã§ç޹ä»ïŒ
BUDGET=$(~/.claude/scripts/token-budget-advisor.sh --short)
if echo "$BUDGET" | grep -qE 'ðŽ|critical|cap-near'; then
log "ABORT: budget critical"; exit 0
fiautopilotèšäºã§ãã©ãã«å€å®ã ãã§æ®éãã€ãã¹ãçŽ éããããäºæ ãæžããŸãããæ®éããã€ãã¹ãªã®ã«æ¢ãŸããªãã£ãããã®äžä»¶ããã£ãããã§ããtoken-budget-advisor.sh ã¯ã©ãã«ãšã¯å¥ã«æ®éãæ°å€ã§èšç®ãçŽãã0以äžãªãæ¢ããäºéãã§ãã¯ã«ããŠããŸãã
cost-summary.shã§æéå¥ã«æ¯ãè¿ã
~/.claude/scripts/cost-summary.sh # 7æ¥åïŒããã©ã«ãïŒ
~/.claude/scripts/cost-summary.sh 30 # 30æ¥å
~/.claude/scripts/cost-summary.sh today # 仿¥ã ãper day: ã¯Unicodeã®æ£ã°ã©ãã§åºãŸããper model: ã§ã¯ã¢ãã«å¥ã®ã¡ãã»ãŒãžæ°ãåºãã®ã§ããSonnetãå€ãã£ãæ¥ã¯äœãããŠãããããæ¯ãè¿ãã®ã«äœ¿ã£ãŠããŸãã
å®éã«èžãã èœãšã穎
- rate_limits ãã»ãã·ã§ã³éå§çŽåŸã«ååšããªãã// empty ã§ãã©ãŒã«ããã¯ããæåã®ã¿ãŒã³ãè¿ããŸã§ã¯ -- è¡šç€ºã§æ£åžž
- ccusage daily ãstatuslineãæ¢ããã120ç§ãã£ãã·ã¥ãš & ã§éåæã«ããŠãå€ãå€ã§ãæç»ã¯æ¢ããªã
- ãã«ã¹ãã§ãã¯ãæ¯åéãã5åãã£ãã·ã¥ãš & ã«ããŠãæŽæ°äžã¯ · ãè¿ãã ãã«ãã
- stat -f %m ã¯macOSå°çšãLinuxãªã stat -c %Y ã«å€ããŠãã ããïŒã¹ã¯ãªããã¯macOSåæã§ãïŒ
- ccusageãšèªåéèšã®ãºã¬ã«æ°ã¥ããªãã£ããsource_diff_pct ãåºããŠãåžžã«çªãåãããããã«ãã
ãã¡ã°ãé åãããã®ã¯ãrate_limits ã¯æ¥ãªããã®ã ãšæã蟌ãã ããšã§ããstdinã«èŠåœãããªãã£ãã®ã§ãããã¯æž¡ãããªããã ããšæ±ºãã€ãããšã³ããã€ã³ããå©ãæ¹åã§èãå§ããŠããŸãããå®éã¯ãéå§çŽåŸã«çŸããªãã ãã§ããïŒ stdinã®JSONããã¡ã€ã«ã«åããŠäžåºŠäžèº«ãèŠãŠããã°ãããæ°ã¥ãã話ã§ãããªã®ã§ä»ã¯ããã®1è¡ãæåããå ¥ããŠããŸãã
# ãããã°çšãæ¶ããŠããã
printf '%s' "$INPUT" > /tmp/cc-statusline-last.json 2>/dev/null || trueãŸãšã
- statuslineã¹ã¯ãªããã®stdinã« .rate_limits.* / .context_window.used_percentage / .cost.total_cost_usd ãæ¥ããèªèšŒã¯äžèŠ
- 3è¡ã§ããã©ã³ã / 5hã»7dã»ctx% / ã»ãã·ã§ã³ãšä»æ¥ã®ã³ã¹ãåæç®ïŒãã«ã¹ããåžžæè¡šç€º
- åœæ¥ã³ã¹ãã¯2åãã£ãã·ã¥ãšããã¯ã°ã©ãŠã³ãæŽæ°ã§ãæç»ãæ¢ããªã
- ãã«ã¹1æåã¯5åãã£ãã·ã¥ã§è»œããã
- token-budget-advisor.sh ãccusageã®å ¬åŒå€ãšèªåéèšãçªãåãããautopilotã®èµ°ãã»æ¢ãŸããæ±ºãã
ããã·ã¥ããŒãã¯3æ¥ã§éããªããªããŸããããstatuslineã¯æ¯æ¥ç®ã«å ¥ã£ãŠããŸãããè¿çãèãïŒããšéŠãã²ããåã«ããŸãç»é¢ã®äžã®æ°åãèŠããããã ãã§è¿·ãæéããªããªããŸããã
ð ãã®èšäºã®å 容ããå®è£ ãŸã§å šéšãŸãšããææèšäºããããŸã æé ã»ã³ãŒãã»ãã³ãã¬ããã®ãŸãŸæž¡ããŠããŸã AIã§ãå¯ãŠãŠãåãä»çµã¿ãããŒããã30æ¥ã§çµãå šæé
ã³ã¡ã³ã
ãã°ã€ã³ ã äŒå¡ç»é² ãããšã³ã¡ã³ãã§ããŸã