ccstatusline is a status bar for Claude Code – it makes it easy to see model info, git branch, token count, cost, context window, and all sorts of other things right from the Claude Code CLI. Since v2.1.0 (March 2026) it can also show rate limit utilization via the Anthropic OAuth API:

  • SessionUsage – how much of the current 5-hour block you’ve already burned through
  • WeeklyUsage – similar concept for the 7-day rolling window
  • BlockResetTimer / WeeklyResetTimer – countdown until the session / weekly reset

ccstatusline showing session usage at 15%, weekly at 32%, reset timers, cost, and context window

You can configure it through a TUI (npx ccstatusline@latest) that by default writes to ~/.config/ccstatusline/settings.json. It hooks into Claude Code as a statusLine command in settings.json:

json
{
  "statusLine": {
    "type": "command",
    "command": "npx -y ccstatusline@latest",
    "padding": 0
  }
}

Multiple accounts with CLAUDE_CONFIG_DIR#

Claude Code keeps everything under ~/.claude/ by default. When you point the CLAUDE_CONFIG_DIR environment variable somewhere else, however, you get a fully separate setup – different account, different settings, different plugins.

If you then want to set up a quick way of running Claude Code with a different account, a fish function is often all you need:

fish
function claude-work --wraps='claude' --description 'Run claude with ~/.claude-work config'
    CLAUDE_CONFIG_DIR=~/.claude-work claude $argv
end

claude-work uses ~/.claude-work/ for everything – settings, credentials, session history. Log in separately with claude-work /login and it gets its own OAuth token.

The catch: ccstatusline reads the wrong credentials#

ccstatusline looks for the OAuth token in ~/.claude/.credentials.json by default. Run it from a CLAUDE_CONFIG_DIR session and it’ll fetch usage for the wrong account.

The fix, however, is pretty easy. Just pass CLAUDE_CONFIG_DIR through to the status line command in ~/.claude-work/settings.json:

json
{
  "statusLine": {
    "type": "command",
    "command": "CLAUDE_CONFIG_DIR=$HOME/.claude-work/ npx -y ccstatusline@latest",
    "padding": 0
  }
}

Your main ~/.claude/settings.json doesn’t need the prefix – it already points to the right place:

json
{
  "statusLine": {
    "type": "command",
    "command": "npx -y ccstatusline@latest",
    "padding": 0
  }
}

Under the hood, ccstatusline’s token retrieval checks CLAUDE_CONFIG_DIR first, falls back to ~/.claude/, and on macOS also tries the system keychain (Claude Code stores entries with per-installation GUID suffixes like Claude Code-credentials-6248605b).

With this in place, each account’s status bar shows its own utilization.