Note for users downloading from GitHub Releases: macOS may show a security warning because the app is not signed with an Apple Developer certificate. To open the app:
- Try to open the app (it will be blocked)
- Go to System Settings → Privacy & Security
- Scroll down and click "Open Anyway" next to the ClaudeWatch message
- Click Open in the confirmation dialog
A beautiful macOS menu bar app that displays your Claude Code usage statistics in real-time. Monitor your session and weekly limits at a glance with a stunning glassmorphic UI.
| Requirement | Version | Notes |
|---|---|---|
| macOS | 13.0 (Ventura) or later | Required for SwiftUI features |
| Python | 3.6+ | Usually pre-installed on macOS |
| Xcode | 14.0+ | Only needed if building from source |
| Requirement | Description |
|---|---|
| Claude Code CLI | Must be installed and accessible. Install from claude.ai/code |
| Claude Pro/Max | Active subscription required (usage limits only apply to paid plans) |
| Authenticated | Must be logged into Claude Code CLI (claude command should work) |
# Check Python version
python3 --version
# Check if Claude CLI is installed
which claude
# Test Claude CLI is working
claude --version- Download the latest
.appfrom Releases - Move
ClaudeWatch.appto your Applications folder - Open the app (you may need to right-click → Open the first time due to Gatekeeper)
-
Clone this repository:
git clone https://github.com/JohnDimou/ClaudeWatch.git cd ClaudeWatch -
Open in Xcode:
open ClaudeWatch.xcodeproj
-
Build and run (⌘+R)
Or build from command line:
xcodebuild -project ClaudeWatch.xcodeproj -scheme ClaudeWatch -configuration Release buildThe built app will be in ~/Library/Developer/Xcode/DerivedData/ClaudeWatch-*/Build/Products/Release/
- Launch the app - A brain icon appears in your menu bar with usage percentages
- View quick stats - The menu bar shows session and weekly usage
- Click for details - Opens a popup with full usage information
- Configure settings - Click the gear icon to adjust refresh interval
🧠 25% | 22%
↑ ↑
│ └── Weekly usage (all models)
└── Current session usage
| Usage Level | Color | Meaning |
|---|---|---|
| 0-50% | Green | Plenty of capacity remaining |
| 50-75% | Yellow/Orange | Moderate usage |
| 75-100% | Red | Near or at limit |
Access settings by clicking the gear icon in the popup:
| Setting | Options | Default | Description |
|---|---|---|---|
| Refresh Interval | 30s, 1m, 2m, 5m, 10m, Never | 1 minute | How often to auto-fetch usage data |
| Refresh on Open | On/Off | On | Fetch fresh data when popup opens |
Settings are persisted and remembered between app restarts.
The app uses a Python script to interact with the Claude Code CLI:
- Spawns Claude CLI in a 200-column pseudo-terminal (pty) so the
/usagebox renders fully - Sends the
/usageslash command and waits for the "Last 24h" section to appear as the signal that rendering is complete - Parses the terminal output structurally — section boundaries are detected by the last occurrence of each header, and insights are extracted purely by their
NN%pattern with no hardcoded wording - Displays the results in a native SwiftUI interface
On launch (and on popover open, respecting a 6-hour cache) the app queries
api.github.com/repos/JohnDimou/ClaudeWatch/releases/latest, compares
tag_name against the installed CFBundleShortVersionString using a semver
compare, and surfaces a banner when a newer stable release is published. The
user taps Download to open the release page in their browser — the app
never attempts an in-place install (this distribution is unsigned, so Gatekeeper
would reject any automated replace).
This app does NOT consume any Claude API tokens. The /usage command is a built-in CLI feature that queries your account statistics directly from Anthropic's servers - it does not invoke any AI model. It's equivalent to checking your usage on the Anthropic dashboard.
ClaudeWatch/
├── ClaudeWatch/
│ ├── ClaudeWatchApp.swift # App entry point & menu bar setup
│ ├── UsageManager.swift # Usage data fetching, parsing & settings
│ ├── UsagePopoverView.swift # SwiftUI popup, Last 24h card, update banner
│ ├── UpdateChecker.swift # GitHub release polling + semver compare
│ └── Info.plist # App configuration
├── get_claude_usage.py # Python script for CLI interaction
├── ClaudeWatch.xcodeproj/ # Xcode project
├── LICENSE # MIT License
└── README.md
# Check if Claude is installed
which claude
# If not found, install from:
# https://claude.ai/code
# If installed but not found, it might be in a non-standard path
# The app checks these locations automatically:
# - /usr/local/bin/claude
# - /opt/homebrew/bin/claude
# - ~/.local/bin/claude
# - ~/.npm-global/bin/claude# Check Python version
python3 --version
# If not installed, install via Homebrew:
brew install python3- Click the refresh button (circular arrow) in the popup
- Check Settings → ensure refresh interval isn't set to "Never"
- Ensure you have an active Claude Pro/Max subscription
- Verify
claudeworks in your terminal
- Right-click the app → Open → Open
- Or: System Settings → Privacy & Security → Open Anyway
- Make sure you're logged into Claude Code CLI
- Run
claudein terminal and verify it works - Check that you have a Pro/Max subscription
If you see macOS permission dialogs asking for access to Photos, Music, OneDrive, Desktop, or other folders:
- This should not happen with v1.2.0+ - we fixed issues where the subprocess could trigger these prompts
- Try downloading the latest release
- If the issue persists, please open an issue with:
- Screenshot of the permission dialog
- macOS version
- App version
- Any relevant details about your setup (iCloud sync, OneDrive, etc.)
- Local Only - All data stays on your machine
- No External Servers - The app only communicates with the local Claude CLI
- No Tracking - No analytics or telemetry
- Open Source - Full source code available for review
NO WARRANTY: This software is provided "as is", without warranty of any kind, express or implied. Use at your own risk.
GDPR & DATA PROTECTION: This app processes data locally on your device only. It does not collect, store, transmit, or share any personal data with third parties. The app only reads usage statistics from the Claude CLI running on your machine. No data leaves your computer. The author assumes no responsibility or liability for any data processing that may occur through the use of the Claude CLI itself - please refer to Anthropic's privacy policy for information about how Claude handles your data.
LIABILITY: In no event shall the author be liable for any claim, damages, or other liability arising from the use of this software.
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
John Dimou - OptimalVersion.io
- Inspired by the need to track Claude usage without constantly running
/usage
Made by John Dimou - OptimalVersion.io
