{"id":34751038,"url":"https://github.com/tddworks/claudebar","last_synced_at":"2026-04-01T17:03:42.823Z","repository":{"id":330296611,"uuid":"1120106077","full_name":"tddworks/ClaudeBar","owner":"tddworks","description":"A macOS menu bar application that monitors AI coding assistant usage quotas. Keep track of your Claude, Codex, Antigravity ,and Gemini usage at a glance.","archived":false,"fork":false,"pushed_at":"2026-03-04T02:28:59.000Z","size":52991,"stargazers_count":692,"open_issues_count":27,"forks_count":58,"subscribers_count":4,"default_branch":"main","last_synced_at":"2026-03-04T06:18:48.214Z","etag":null,"topics":["antigravity","claude","claude-code","codex","gemini","githubcopilot","glm5","kimi"],"latest_commit_sha":null,"homepage":"https://tddworks.github.io/ClaudeBar/","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tddworks.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":["hanrw"]}},"created_at":"2025-12-20T13:58:06.000Z","updated_at":"2026-03-04T02:29:02.000Z","dependencies_parsed_at":"2026-02-12T05:07:52.595Z","dependency_job_id":null,"html_url":"https://github.com/tddworks/ClaudeBar","commit_stats":null,"previous_names":["tddworks/claudebar"],"tags_count":82,"template":false,"template_full_name":null,"purl":"pkg:github/tddworks/ClaudeBar","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tddworks%2FClaudeBar","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tddworks%2FClaudeBar/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tddworks%2FClaudeBar/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tddworks%2FClaudeBar/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tddworks","download_url":"https://codeload.github.com/tddworks/ClaudeBar/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tddworks%2FClaudeBar/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30377837,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-11T06:09:32.197Z","status":"ssl_error","status_checked_at":"2026-03-11T06:09:17.086Z","response_time":84,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["antigravity","claude","claude-code","codex","gemini","githubcopilot","glm5","kimi"],"created_at":"2025-12-25T05:15:46.237Z","updated_at":"2026-04-01T17:03:42.808Z","avatar_url":"https://github.com/tddworks.png","language":"Swift","funding_links":["https://github.com/sponsors/hanrw"],"categories":[],"sub_categories":[],"readme":"# ClaudeBar\n\n[![Build](https://github.com/tddworks/ClaudeBar/actions/workflows/build.yml/badge.svg)](https://github.com/tddworks/ClaudeBar/actions/workflows/build.yml)\n[![Tests](https://github.com/tddworks/ClaudeBar/actions/workflows/tests.yml/badge.svg)](https://github.com/tddworks/ClaudeBar/actions/workflows/tests.yml)\n[![codecov](https://codecov.io/gh/tddworks/ClaudeBar/graph/badge.svg)](https://codecov.io/gh/tddworks/ClaudeBar)\n[![Latest Release](https://img.shields.io/github/v/release/tddworks/ClaudeBar)](https://github.com/tddworks/ClaudeBar/releases/latest)\n[![Swift 6.2](https://img.shields.io/badge/Swift-6.2-orange.svg)](https://swift.org)\n[![Platform](https://img.shields.io/badge/Platform-macOS%2015-blue.svg)](https://developer.apple.com)\n[![Homebrew](https://img.shields.io/badge/Homebrew-Install-brightgreen.svg)](https://formulae.brew.sh/cask/claudebar)\n\nA macOS menu bar application that monitors AI coding assistant usage quotas. Keep track of your Claude, Codex, Gemini, GitHub Copilot, Antigravity, Z.ai, Kimi, Kiro, and Amp usage at a glance.\n\n\u003ctable align=\"center\"\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"docs/screenshots/Screenshot-dark.png\" alt=\"Dark Mode\" width=\"360\"/\u003e\u003cbr/\u003e\u003cem\u003eDark Mode\u003c/em\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"docs/screenshots/Screenshot-light.png\" alt=\"Light Mode\" width=\"360\"/\u003e\u003cbr/\u003e\u003cem\u003eLight Mode\u003c/em\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"docs/screenshots/Screenshot-cli-dark.png\" alt=\"CLI Theme\" width=\"360\"/\u003e\u003cbr/\u003e\u003cem\u003eCLI Theme\u003c/em\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"docs/screenshots/Christmas-theme.png\" alt=\"Christmas Theme\" width=\"360\"/\u003e\u003cbr/\u003e\u003cem\u003eChristmas Theme\u003c/em\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n## Features\n\n- **Multi-Provider Support** - Monitor Claude, Codex, Gemini, GitHub Copilot, Antigravity, Z.ai, Kimi, Kiro, and Amp quotas in one place\n- **Provider Enable/Disable** - Toggle individual providers on/off from Settings to customize your monitoring\n- **Real-Time Quota Tracking** - View Session, Weekly, and Model-specific usage percentages\n- **Multiple Themes** - Light, Dark, CLI, Christmas, and [imported terminal themes](#import-terminal-theme) (.itermcolors)\n- **Automatic Adaptation** - System theme follows your macOS appearance; Christmas auto-enables during the holiday season\n- **Visual Status Indicators** - Color-coded progress bars (green/yellow/red) show quota health\n- **System Notifications** - Get alerted when quota status changes to warning or critical\n- **Auto-Refresh** - Automatically updates quotas at configurable intervals\n- **Keyboard Shortcuts** - Quick access with `⌘D` (Dashboard) and `⌘R` (Refresh)\n\n## Quota Status Thresholds\n\n| Remaining | Status | Color |\n|-----------|--------|-------|\n| \u003e 50% | Healthy | Green |\n| 20-50% | Warning | Yellow |\n| \u003c 20% | Critical | Red |\n| 0% | Depleted | Gray |\n\n## Requirements\n\n- macOS 15+\n- Swift 6.2+\n- CLI tools installed for providers you want to monitor:\n  - [Claude CLI](https://claude.ai/code) (`claude`)\n  - [Codex CLI](https://github.com/openai/codex) (`codex`)\n  - [Gemini CLI](https://github.com/google-gemini/gemini-cli) (`gemini`)\n  - [GitHub Copilot](https://github.com/features/copilot) - Configure credentials in Settings\n  - [Antigravity](https://antigravity.google) - Auto-detected when running locally\n  - [Z.ai](https://z.ai/subscribe) - Configure Claude Code with GLM Coding Plan endpoint\n  - [Kimi](https://www.kimi.com/code/console) (`kimi`) - CLI mode (recommended) or API mode (see below)\n  - [Kiro](https://kiro.dev) (`kiro-cli`) - Requires kiro-cli installation (see below)\n  - [Amp](https://ampcode.com) (`amp`) - Auto-detected when CLI is installed\n\n### Kimi Setup\n\nKimi supports two probe modes, configurable in **Settings \u003e Kimi Configuration**:\n\n**CLI Mode (Recommended)** - Launches the interactive `kimi` CLI and sends `/usage` to fetch quota data. Requires `kimi` CLI installed (`uv tool install kimi-cli`). No Full Disk Access needed.\n\n**API Mode** - Calls the Kimi API directly using browser cookie authentication. Requires **Full Disk Access** for ClaudeBar to read the `kimi-auth` browser cookie:\n1. Open **System Settings** \u003e **Privacy \u0026 Security** \u003e **Full Disk Access**\n2. Toggle **ClaudeBar** on (or click `+` and add it)\n3. Restart ClaudeBar\n\nYou can also set the `KIMI_AUTH_TOKEN` environment variable to bypass cookie reading in API mode.\n\n### Kiro Setup\n\nKiro monitors AWS Kiro (formerly CodeWhisperer) usage through the `kiro-cli` command-line tool.\n\n**Installation**: `uv tool install kiro-cli` or `pip install kiro-cli`\n\n**Authentication**: Run `kiro-cli` and follow the login prompts.\n\n**Kiro IDE Users**: If you use Kiro IDE, simply install kiro-cli. Both share the same authentication, so no additional login is required.\n\n## Installation\n\n### Homebrew\n\nInstall via [Homebrew](https://brew.sh).\n\n```bash\nbrew install --cask claudebar\n```\n\n### Download (Recommended)\n\nDownload the latest release from [GitHub Releases](https://github.com/tddworks/ClaudeBar/releases/latest):\n\n- **DMG**: Open and drag ClaudeBar.app to Applications\n- **ZIP**: Unzip and move ClaudeBar.app to Applications\n\nBoth are code-signed and notarized for Gatekeeper.\n\n### Build from Source\n\n```bash\ngit clone https://github.com/tddworks/ClaudeBar.git\ncd ClaudeBar\n\n# Install Tuist (if not installed)\nbrew install tuist\n\n# Install dependencies and build\ntuist install\ntuist build ClaudeBar -C Release\n```\n\n## Usage\n\nAfter building, open the generated Xcode workspace and run the app:\n\n```bash\ntuist generate\nopen ClaudeBar.xcworkspace\n```\n\nThen press `Cmd+R` in Xcode to run. The app will appear in your menu bar. Click to view quota details for each provider.\n\n## Development\n\nThe project uses [Tuist](https://tuist.io) for dependency management and Xcode project generation.\n\n### Quick Start\n\n```bash\n# Install Tuist (if not installed)\nbrew install tuist\n\n# Install dependencies\ntuist install\n\n# Generate Xcode project and open\ntuist generate\nopen ClaudeBar.xcworkspace\n```\n\n### Build \u0026 Test\n\n```bash\n# Build the project\ntuist build\n\n# Run all tests\ntuist test\n\n# Run tests with coverage\ntuist test --result-bundle-path TestResults.xcresult -- -enableCodeCoverage YES\n\n# Build release configuration\ntuist build ClaudeBar -C Release\n```\n\n### SwiftUI Previews\n\nAfter opening in Xcode, SwiftUI previews will work with `Cmd+Option+Return`. The project is configured with `ENABLE_DEBUG_DYLIB` for preview support.\n\n## Architecture\n\n\u003e **Full documentation:** [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md)\n\nClaudeBar uses a **layered architecture** with `QuotaMonitor` as the single source of truth:\n\n| Layer | Purpose |\n|-------|---------|\n| **App** | SwiftUI views consuming domain directly (no ViewModel) |\n| **Domain** | Rich models, `QuotaMonitor`, repository protocols |\n| **Infrastructure** | Probes, storage implementations, adapters |\n\n### Key Design Decisions\n\n- **Single Source of Truth** - `QuotaMonitor` owns all provider state\n- **Repository Pattern** - Settings and credentials abstracted behind injectable protocols\n- **Protocol-Based DI** - `@Mockable` protocols enable testability\n- **Chicago School TDD** - Tests verify state changes, not method calls\n- **No ViewModel/AppState** - Views consume domain directly\n\n## Import Terminal Theme\n\nMatch ClaudeBar's appearance to your terminal. Import any `.itermcolors` file:\n\n1. Open **Settings** (gear icon)\n2. Click **Import .itermcolors**\n3. Select your file (export from iTerm2: Preferences \u003e Profiles \u003e Colors \u003e Color Presets \u003e Export)\n\n450+ pre-made schemes available at [iTerm2-Color-Schemes](https://github.com/mbadolato/iTerm2-Color-Schemes/tree/master/schemes).\n\nImported themes are saved in `~/.claudebar/themes/` and persist across restarts.\n\n## Contributing\n\n### Adding a New AI Provider\n\nUse the **add-provider** skill to guide you through adding new providers with TDD:\n\n```\nTell Claude Code: \"I want to add a new provider for [ProviderName]\"\n```\n\nThe skill guides you through: Parsing Tests → Probe Tests → Implementation → Registration.\n\nSee `.claude/skills/add-provider/SKILL.md` for details and `AntigravityUsageProbe` as a reference implementation.\n\n## Dependencies\n\n- [Sparkle](https://sparkle-project.org/) - Auto-update framework\n- [Mockable](https://github.com/Kolos65/Mockable) - Protocol mocking for tests\n- [Tuist](https://tuist.io) - Xcode project generation (for SwiftUI previews)\n\n## Releasing\n\nReleases are automated via GitHub Actions. Push a version tag to create a new release.\n\n**For detailed setup instructions, see [docs/release/RELEASE_SETUP.md](docs/release/RELEASE_SETUP.md).**\n\n### Release Workflow\n\nThe workflow uses Tuist to generate the Xcode project:\n\n```\nTag v1.0.0 → Update Info.plist → tuist generate → xcodebuild → Sign \u0026 Notarize → GitHub Release\n```\n\nVersion is set in `Sources/App/Info.plist` and flows through to Sparkle auto-updates.\n\n### Quick Start\n\n1. **Configure GitHub Secrets** (see [full guide](docs/release/RELEASE_SETUP.md)):\n\n   | Secret | Description |\n   |--------|-------------|\n   | `APPLE_CERTIFICATE_P12` | Developer ID certificate (base64) |\n   | `APPLE_CERTIFICATE_PASSWORD` | Password for .p12 |\n   | `APP_STORE_CONNECT_API_KEY_P8` | API key (base64) |\n   | `APP_STORE_CONNECT_KEY_ID` | Key ID |\n   | `APP_STORE_CONNECT_ISSUER_ID` | Issuer ID |\n\n2. **Verify your certificate**:\n   ```bash\n   ./scripts/verify-p12.sh /path/to/certificate.p12\n   ```\n\n3. **Create a release**:\n   ```bash\n   git tag v1.0.0\n   git push origin v1.0.0\n   ```\n\nThe workflow will automatically build, sign, notarize, and publish to GitHub Releases.\n\n## Contributors\n\nThanks to everyone who has contributed to ClaudeBar!\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/hanrw\"\u003e\u003cimg src=\"https://github.com/hanrw.png?size=80\" width=\"80\" alt=\"hanrw\"/\u003e\u003cbr/\u003e\u003csub\u003e\u003cb\u003ehanrw\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/ramarivera\"\u003e\u003cimg src=\"https://github.com/ramarivera.png?size=80\" width=\"80\" alt=\"ramarivera\"/\u003e\u003cbr/\u003e\u003csub\u003e\u003cb\u003eramarivera\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/zenibako\"\u003e\u003cimg src=\"https://github.com/zenibako.png?size=80\" width=\"80\" alt=\"zenibako\"/\u003e\u003cbr/\u003e\u003csub\u003e\u003cb\u003ezenibako\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/AlexanderWillner\"\u003e\u003cimg src=\"https://github.com/AlexanderWillner.png?size=80\" width=\"80\" alt=\"AlexanderWillner\"/\u003e\u003cbr/\u003e\u003csub\u003e\u003cb\u003eAlexanderWillner\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/avishj\"\u003e\u003cimg src=\"https://github.com/avishj.png?size=80\" width=\"80\" alt=\"avishj\"/\u003e\u003cbr/\u003e\u003csub\u003e\u003cb\u003eavishj\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/BryanQQYue\"\u003e\u003cimg src=\"https://github.com/BryanQQYue.png?size=80\" width=\"80\" alt=\"BryanQQYue\"/\u003e\u003cbr/\u003e\u003csub\u003e\u003cb\u003eBryanQQYue\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/frankhommers\"\u003e\u003cimg src=\"https://github.com/frankhommers.png?size=80\" width=\"80\" alt=\"frankhommers\"/\u003e\u003cbr/\u003e\u003csub\u003e\u003cb\u003efrankhommers\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/hagiwaratakayuki\"\u003e\u003cimg src=\"https://github.com/hagiwaratakayuki.png?size=80\" width=\"80\" alt=\"hagiwaratakayuki\"/\u003e\u003cbr/\u003e\u003csub\u003e\u003cb\u003ehagiwaratakayuki\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/tomstetson\"\u003e\u003cimg src=\"https://github.com/tomstetson.png?size=80\" width=\"80\" alt=\"tomstetson\"/\u003e\u003cbr/\u003e\u003csub\u003e\u003cb\u003etomstetson\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/logancox\"\u003e\u003cimg src=\"https://github.com/logancox.png?size=80\" width=\"80\" alt=\"logancox\"/\u003e\u003cbr/\u003e\u003csub\u003e\u003cb\u003elogancox\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/hansonkim\"\u003e\u003cimg src=\"https://github.com/hansonkim.png?size=80\" width=\"80\" alt=\"hansonkim\"/\u003e\u003cbr/\u003e\u003csub\u003e\u003cb\u003ehansonkim\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftddworks%2Fclaudebar","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftddworks%2Fclaudebar","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftddworks%2Fclaudebar/lists"}