Skip to main content

cc-menubar

PyPI version Python versions macOS 14.0+ MIT License Test status

Pace your quota — proactive forecasting for Claude Code Max, not retroactive tracking.

30+ Claude Code usage tools exist. Almost all show what you already spent. cc-menubar inverts this: instead of "how much did I use?", it answers "how far will my quota take me?"

cc-menubar: macOS menu bar gauge icon with a dropdown showing '5-Hour: 55% used • 45% left (resets 6pm · in 4h 12m)' — forecasting runway, not retroactive spend
See runway, not spend. The 5-Hour row shows what's left and when it resets — every other Claude Code menu-bar tool shows what you already spent.

Three Principles

Principle What it means
Forecast remaining, don't sum spent Show what's LEFT (runway), not what's USED (cost). The gauge depletes like fuel — 1.0 to 0.0.
Pace by phase Different work phases burn tokens differently. Activity classifier shows where tokens go.
Maintain headroom Don't run hot. Context Efficiency and quota pacing give early awareness, not late alerts.

Install

brew install calvindotsg/tap/cc-menubar
brew install --cask swiftbar
cc-menubar install
open -a SwiftBar

Or with uv:

uv tool install cc-menubar
cc-menubar install

Menu Bar Icon

A gauge icon showing remaining quota. The needle position reflects how much quota is left in the current window (default: 5-hour). The gauge glyph swaps between three SF Symbols variants (100percent / 50percent / 0percent) as your 5-hour quota crosses the 66% and 33% thresholds — a visible state change, not just a needle rotation. Configurable text, color thresholds, and metric cycling.

Dropdown Sections

Section Content Visibility
Plan usage limits 5h / 7d used and left, resets, burn rate Always
Activity Category bars with one-shot rate Always
Projects Per-project calls + subagent % Always
Tools & Commands Top tools, top bash commands Always
Model Mix Opus vs Haiku substitution % When Opus model detected
Context Size >150K session %, P50/P90, cache hit % When sufficient data exists

Configuration

Config at ~/.config/cc-menubar/config.toml. Built-in defaults apply automatically.

cc-menubar init          # Generate commented config
cc-menubar config        # Show merged config
cc-menubar config --default  # Show all defaults

Title Options

[title]
text = "none"                       # "none" | "percent" | "label"
color = "monochrome"                # "monochrome" | "threshold" | "always"
metric = "5h"                       # "5h" | "7d"
cycle = []                          # ["5h", "7d", "opusplan", "context"]

Theme

[theme]
preset = "ayu"   # "ayu" (default) or "catppuccin"

# Override individual roles
[theme.light]
success = "#custom"

[theme.dark]
success = "#custom"

Sections

[quota]
enabled = true

[activity]
enabled = true
days = 7

[tools]
enabled = true
top_n = 10

[projects]
enabled = true
[projects.aliases]
# "-Users-me-myproject" = "My Project"

Quota setup

cc-menubar reads canonical-shape Claude Code statusline JSON from ~/Library/Caches/cc-menubar/statusline-input.json (override via [quota] cache_file). It ships no producer — you wire an existing statusline to write the cache file via POSIX tee. Pick the scenario that matches your setup and paste into ~/.claude/settings.json.

Scenario A — no existing statusline (fresh install)

{
  "statusLine": {
    "type": "command",
    "command": "tee ~/Library/Caches/cc-menubar/statusline-input.json | jq -r '\"[\\(.model.display_name)] \\(.context_window.used_percentage // 0)% context\"'"
  }
}

Writes the cache file and renders a minimal Claude Code footer.

Scenario B — existing custom script

{
  "statusLine": {
    "type": "command",
    "command": "tee ~/Library/Caches/cc-menubar/statusline-input.json | ~/.claude/statusline.sh"
  }
}

Your script reads stdin as before; tee writes the cache as a side effect.

Scenario C — existing published tool (ccstatusline, CCometixLine, ccusage statusline)

{
  "statusLine": {
    "type": "command",
    "command": "tee ~/Library/Caches/cc-menubar/statusline-input.json | ccusage statusline"
  }
}

Portability: tee is POSIX (present in every shell); jq is needed only for Scenario A; cc-menubar install creates the cache directory so tee never fails on a missing parent.

CLI Commands

Command Purpose
render Output SwiftBar text (called by wrapper)
install Write SwiftBar wrapper + create config
uninstall Remove SwiftBar wrapper
init Generate config file
config Show merged config

Data Sources

  • Quota: Reads canonical Claude Code statusline JSON cache (see Quota setup)
  • Burn rate: ccusage blocks --json --active (optional, install via brew install ccusage)
  • Activity, tools, models, context: JSONL files in ~/.claude/projects/

Requirements

  • macOS 14.0+ (for SF Symbols 5 gauge family)
  • Python 3.11+
  • SwiftBar or xbar

License

MIT

Metadata

Release files for cc-menubar 2.0.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for cc-menubar 2.0.1
File Size Uploaded
cc_menubar-2.0.1.tar.gz 118.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for cc-menubar 2.0.1
File Interpreter ABI Platform
cc_menubar-2.0.1-py3-none-any.whl Python 3 none any Details

Total release size: 148.6 kB

Release files / cc_menubar-2.0.1.tar.gz

Download URL cc_menubar-2.0.1.tar.gz
Size 118.3 kB
Tags Source
SHA-256 checksum
How to use checksums
baba35d4e0db86e3135ee4ae7da0cecc09e49368d069a5d39587c361bc50f17a
BLAKE2b-256 checksum
How to use checksums
ceef9acc7a746e02bc6750e40ade76f462343392c140d3b5edc0e9453316f3a7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Apr 22, 2026.

Transparency log

Release files / cc_menubar-2.0.1-py3-none-any.whl

Download URL cc_menubar-2.0.1-py3-none-any.whl
Size 30.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f1507f256f728334088b5697ba38c9e1abf5c1fcc51466a4d6993dba4774a03d
BLAKE2b-256 checksum
How to use checksums
e2df583d1c959724901445b9214a83f23791abc9cba9750fa88a7c84000937cd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Apr 22, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

2.0.1 This release

2 release files

2.0.0

2 release files

1.0.0

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.3

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page