Check your Claude Code usage

Paste the JSON Claude Code's status line sees, or fill in the numbers by hand — everything below runs in your browser, nothing is uploaded anywhere.

1. Paste your status line JSON

The whole status line object, or just its rate_limits part — either works.

2. Or fill in the numbers by hand

Fills in whichever window you didn't paste above; also lets you add a recent-pace estimate.

5-hour window



7-day (weekly) window



Your windows

5-hour window

Paste JSON or fill in the numbers above.

7-day (weekly) window

Paste JSON or fill in the numbers above.

Waiting on the 7-day window instead of a global reset? See should you wait for a reset? and what's known about banked resets.

A status line script you can use

Shows 5h: X% · 7d: Y% · reset odds 24h: Z% right in Claude Code's status line.

Reads Claude Code's own rate_limits JSON for the two usage figures, and this site's forecast API for the third — cached locally for 10 minutes with a 2-second network timeout, so a slow connection never blocks your prompt.

#!/bin/bash
# claudereset.org example Claude Code status line script.
# Install: save this as ~/.claude/statusline.sh (chmod +x), then set it as your status line
# command per https://code.claude.com/docs/en/statusline — Claude Code pipes the status line's
# JSON into this script's stdin on every prompt render.
#
# Shows your own Claude Code usage (5-hour and 7-day windows, straight from the status line's own
# `rate_limits` object) plus this site's live 24h global-reset-odds forecast. The forecast fetch
# is cached locally for 10 minutes (by file mtime) and capped at a 2-second timeout, so a slow or
# unreachable network never blocks your prompt — it just falls back to showing only the usage
# figures.
set -u
input=$(cat)

# rate_limits is only present for Pro/Max subscribers (or a spend-limited gateway), and only
# after the session's first API response — `// empty` makes jq print nothing rather than "null"
# when it's absent, per code.claude.com/docs/en/statusline's own example.
FIVE_H=$(echo "$input" | jq -r '.rate_limits.five_hour.used_percentage // empty')
WEEK=$(echo "$input" | jq -r '.rate_limits.seven_day.used_percentage // empty')

LINE=""
[ -n "$FIVE_H" ] && LINE="5h: $(printf '%.0f' "$FIVE_H")%"
[ -n "$WEEK" ] && LINE="${LINE}${LINE:+ · }7d: $(printf '%.0f' "$WEEK")%"

CACHE="$HOME/.cache/claudereset-forecast.json"
mkdir -p "$(dirname "$CACHE")" 2>/dev/null

# 10-minute local cache, judged by the cache file's own mtime (works with either BSD or GNU stat).
CACHE_AGE=999999
if [ -f "$CACHE" ]; then
  MTIME=$(stat -f %m "$CACHE" 2>/dev/null || stat -c %Y "$CACHE" 2>/dev/null || echo "")
  if [ -n "$MTIME" ]; then
    CACHE_AGE=$(( $(date +%s) - MTIME ))
  fi
fi

if [ "$CACHE_AGE" -ge 600 ]; then
  if curl -s -m 2 https://claudereset.org/api/v1/forecast.json -o "$CACHE.tmp" 2>/dev/null; then
    mv "$CACHE.tmp" "$CACHE" 2>/dev/null
  else
    rm -f "$CACHE.tmp" 2>/dev/null
  fi
fi

P24=$(jq -r '.p24 // empty' "$CACHE" 2>/dev/null)
if [ -n "$P24" ]; then
  LINE="${LINE}${LINE:+ · }reset odds 24h: ${P24}%"
fi

echo "$LINE"

Save as ~/.claude/statusline.sh, chmod +x it, then set it as your status line command — see the official status line docs. Also on /developers/.

Why a window might be missing

  • rate_limits is only present for Claude.ai Pro and Max subscribers (or behind a spend-limited gateway), and only after your session's first API response.
  • Each window (five_hour, seven_day) can independently be absent from the JSON.
  • Claude Code drops a window from the status line once its own reset time has passed.
  • Reading this data requires Claude Code v2.1.251 or later.

Sources