{"id":34928894,"url":"https://github.com/tddworks/ClaudeBar","last_synced_at":"2025-12-31T21:00:42.856Z","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, and Gemini usage at a glance.","archived":false,"fork":false,"pushed_at":"2025-12-26T04:16:30.000Z","size":39889,"stargazers_count":221,"open_issues_count":4,"forks_count":19,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-12-26T04:24:19.450Z","etag":null,"topics":[],"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":null,"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}},"created_at":"2025-12-20T13:58:06.000Z","updated_at":"2025-12-26T04:24:09.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/tddworks/ClaudeBar","commit_stats":null,"previous_names":["tddworks/claudebar"],"tags_count":31,"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":28147503,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-12-31T02:00:06.200Z","response_time":55,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":[],"created_at":"2025-12-26T15:00:36.894Z","updated_at":"2025-12-31T21:00:42.847Z","avatar_url":"https://github.com/tddworks.png","language":"Swift","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\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/🎄-Merry_Christmas-red?style=for-the-badge\" alt=\"Merry Christmas\"/\u003e\n  \u003cimg src=\"https://img.shields.io/badge/❄️-Happy_Holidays-blue?style=for-the-badge\" alt=\"Happy Holidays\"/\u003e\n  \u003cimg src=\"https://img.shields.io/badge/🎁-2025-green?style=for-the-badge\" alt=\"2025\"/\u003e\n\u003c/p\u003e\n\n\u003e 🎄✨ **Merry Christmas Eve, everyone!** ✨🎄\n\u003e\n\u003e Wishing warmth, joy, and peace to all who celebrate. May your holidays be filled with love and laughter.\n\u003e\n\u003e Time to slow down, enjoy the magic, and celebrate with the people who matter most.\n\u003e\n\u003e However you spend tonight - we hope it's filled with joy 🎄\n\u003e\n\u003e May your code be bug-free, your quotas stay green, and your builds always succeed! 🚀\n\u003e\n\u003e *(P.S. Check ClaudeBar for a snowy surprise ❄️)*\n\u003e\n\u003e **Happy Holidays!** ❤️🎁\n\nA macOS menu bar application that monitors AI coding assistant usage quotas. Keep track of your Claude, Codex, Gemini, GitHub Copilot, Antigravity, and Z.ai usage at a glance.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/Screenshot-dark.png\" alt=\"ClaudeBar Dark Mode\" width=\"380\"/\u003e\n  \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\n  \u003cimg src=\"docs/Screenshot-light.png\" alt=\"ClaudeBar Light Mode\" width=\"380\"/\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003cem\u003eDark Mode \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; Light Mode\u003c/em\u003e\n\u003c/p\u003e\n\n### Christmas Theme\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/Christmas-theme.png\" alt=\"ClaudeBar Christmas Theme\" width=\"450\"/\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003cem\u003eFestive holiday theme with snowfall animation - automatically enabled during the Christmas season!\u003c/em\u003e\n\u003c/p\u003e\n\n## Features\n\n- **Multi-Provider Support** - Monitor Claude, Codex, Gemini, GitHub Copilot, Antigravity, and Z.ai quotas in one place\n- **Real-Time Quota Tracking** - View Session, Weekly, and Model-specific usage percentages\n- **Light \u0026 Dark Themes** - Automatically adapts to your system appearance\n- **Seasonal Themes** - Festive Christmas theme with snowfall animation, auto-enabled 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\n## Installation\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\nswift build -c release\n```\n\n## Usage\n\n```bash\nswift run ClaudeBar\n```\n\nThe app will appear in your menu bar. Click to view quota details for each provider.\n\n## Development\n\n### Command Line (Swift Package Manager)\n\n```bash\n# Build the project\nswift build\n\n# Run all tests\nswift test\n\n# Run tests with coverage\nswift test --enable-code-coverage\n\n# Run a specific test\nswift test --filter \"QuotaMonitorTests\"\n```\n\n### Xcode (with SwiftUI Previews)\n\nThe project uses [Tuist](https://tuist.io) to generate Xcode projects with `ENABLE_DEBUG_DYLIB` for SwiftUI previews.\n\n```bash\n# Install Tuist (if not installed)\nbrew install tuist\n\n# Generate Xcode project\ntuist generate\n\n# Open in Xcode\nopen ClaudeBar.xcworkspace\n```\n\nAfter opening in Xcode, SwiftUI previews will work with `Cmd+Option+Return`.\n\n## Architecture\n\nClaudeBar uses a layered architecture with protocol-based dependency injection:\n\n```\n┌─────────────────────────────────────────────────┐\n│                   App Layer                     │\n│     SwiftUI Views + @Observable AppState        │\n└─────────────────────────────────────────────────┘\n                        │\n                        ▼\n┌─────────────────────────────────────────────────┐\n│                 Domain Layer                    │\n│  Models: UsageQuota, UsageSnapshot, QuotaStatus │\n│  Protocols: UsageProbe, StatusChangeObserver    │\n│  Services: QuotaMonitor (Actor)                 │\n└─────────────────────────────────────────────────┘\n                        │\n                        ▼\n┌─────────────────────────────────────────────────────────┐\n│                 Infrastructure Layer                    │\n│  Probes: Claude, Codex, Gemini, Copilot, Antigravity, Z.ai │\n│  Adapters: Pure 3rd-party wrappers (no coverage)        │\n└─────────────────────────────────────────────────────────┘\n```\n\n### Key Design Decisions\n\n- **Rich Domain Models** - Business logic lives in domain models, not ViewModels\n- **Actor-Based Concurrency** - Thread-safe state management with Swift actors\n- **Protocol-Based DI** - `@Mockable` protocols enable testability without real CLI/network\n- **Adapters Folder** - Pure 3rd-party wrappers excluded from code coverage\n- **No ViewModel Layer** - SwiftUI views directly consume domain models\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_SETUP.md](docs/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_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## License\n\nMIT\n","funding_links":[],"categories":["Menubar","🤖 AI \u0026 Machine Learning"],"sub_categories":["Text"],"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"}