{"id":50754018,"url":"https://github.com/noelrohi/ubos","last_synced_at":"2026-06-11T03:30:34.475Z","repository":{"id":362709866,"uuid":"1260237034","full_name":"noelrohi/ubos","owner":"noelrohi","description":"Native macOS menu bar app for tracking AI coding subscription usage.","archived":false,"fork":false,"pushed_at":"2026-06-05T15:02:17.000Z","size":2167,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-05T16:08:23.104Z","etag":null,"topics":["ai-tools","appkit","codex","cursor","macos","menubar-app","opencode","sparkle","swift","swiftui"],"latest_commit_sha":null,"homepage":"https://ubos-delta.vercel.app","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/noelrohi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-06-05T09:33:13.000Z","updated_at":"2026-06-05T15:02:24.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/noelrohi/ubos","commit_stats":null,"previous_names":["noelrohi/ubos"],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/noelrohi/ubos","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/noelrohi%2Fubos","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/noelrohi%2Fubos/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/noelrohi%2Fubos/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/noelrohi%2Fubos/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/noelrohi","download_url":"https://codeload.github.com/noelrohi/ubos/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/noelrohi%2Fubos/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34181554,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-11T02:00:06.485Z","response_time":57,"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":["ai-tools","appkit","codex","cursor","macos","menubar-app","opencode","sparkle","swift","swiftui"],"created_at":"2026-06-11T03:30:33.857Z","updated_at":"2026-06-11T03:30:34.469Z","avatar_url":"https://github.com/noelrohi.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ubos\n\n![ubos](docs/assets/ubos-screenshot.webp)\n\nNative macOS menu bar usage tracking for AI coding subscriptions.\n\n`ubos` gives developers one compact popover for checking Codex, Cursor, and OpenCode Go usage without opening multiple dashboards. It reads local provider state, refreshes automatically, and presents quota, credits, spend, reset timing, and status in a polished SwiftUI/AppKit menu bar experience.\n\n`ubos` began as a personal macOS app informed by an OpenUsage-style feature parity study in [`docs/feature-parity.html`](docs/feature-parity.html). The provider behavior and quota logic intentionally focus on the subset useful for day-to-day developer usage rather than recreating OpenUsage as a full cross-platform product.\n\n## Install\n\nDownload the latest notarized DMG from [GitHub Releases](https://github.com/noelrohi/ubos/releases).\n\nOr build from source:\n\n```bash\ngit clone https://github.com/noelrohi/ubos.git\ncd ubos\nxcodebuild build -project \"ubos.xcodeproj\" -scheme \"ubos\" -destination \"platform=macOS\"\n```\n\n## Usage\n\n1. Sign in to the AI tools you want to track using their normal desktop or CLI flows.\n2. Open `ubos`.\n3. Click the menu bar icon to view current usage.\n4. Use Settings to tune refresh cadence and app behavior.\n\nThe popover shows provider cards with compact metrics, progress bars, status dots, skeleton loading states, last refresh time, and next refresh countdown.\n\n## What it tracks\n\n- **Codex**: usage from local Codex auth and the ChatGPT usage endpoint, following the OpenUsage-documented OAuth and usage endpoint behavior\n- **Cursor**: plan usage, auto usage, credits, on-demand spend, and request usage using the OpenUsage-style fallback model\n- **OpenCode Go**: session, weekly, and monthly usage from the local OpenCode SQLite database, mirrored against fixed personal Go limits\n\nProvider data is read locally from:\n\n- OpenCode Go: `~/.local/share/opencode/`\n- Codex: `~/.codex/` and `~/.config/codex/`\n- Cursor: `~/Library/Application Support/Cursor/User/globalStorage/`\n\n## What it adds\n\n- Personal, native macOS interpretation of the OpenUsage usage model\n- Native macOS menu bar app built with SwiftUI and AppKit\n- Compact multi-provider usage dashboard\n- Automatic refresh with visible refresh timing\n- Local-first provider integrations\n- Sandboxed app configuration with scoped provider directory access\n- Native macOS settings window\n- Sparkle auto-update support via signed appcast releases\n- Developer ID signed, notarized, stapled DMG distribution\n\n## Flow\n\n```text\nlaunch ubos\n  -\u003e create menu bar status item\n  -\u003e read provider auth and local usage state\n  -\u003e fetch/compute usage snapshots\n  -\u003e render provider cards in an NSPopover-hosted SwiftUI view\n  -\u003e refresh automatically on the configured interval\n  -\u003e surface updates through Sparkle when releases are published\n```\n\n## Architecture\n\n`ubos` is a native SwiftUI macOS application with AppKit integration where macOS requires it.\n\n- `NSStatusItem` owns the menu bar presence\n- `NSPopover` hosts the SwiftUI usage dashboard\n- SwiftUI powers provider cards, metrics, loading states, and settings\n- Provider implementations live behind isolated `*UsageProvider.swift` files\n- The app runs as an accessory app so it stays out of the Dock and app switcher\n\n## Requirements\n\n- macOS 26.2 or newer\n- Xcode with the macOS 26.2 SDK for local development\n- Local sign-ins for the providers you want to track\n\n## Development\n\nList schemes:\n\n```bash\nxcodebuild -list -project \"ubos.xcodeproj\"\n```\n\nBuild the app:\n\n```bash\nxcodebuild build -project \"ubos.xcodeproj\" -scheme \"ubos\" -destination \"platform=macOS\"\n```\n\nRun unit tests:\n\n```bash\nxcodebuild test -project \"ubos.xcodeproj\" -scheme \"ubos\" -destination \"platform=macOS\" -only-testing:ubosTests\n```\n\n## Project structure\n\n- `ubos/ubosApp.swift`: app entrypoint and menu bar lifecycle wiring\n- `ubos/ContentView.swift`: root popover dashboard UI\n- `ubos/SettingsView.swift`: native settings interface\n- `ubos/*UsageProvider.swift`: provider integrations and usage parsing\n- `appcast.xml`: Sparkle update feed\n- `release.json`: release automation configuration\n\nXcode file-system synchronized groups are enabled, so files added under `ubos/`, `ubosTests/`, and `ubosUITests/` are picked up by folder membership.\n\n## Notes\n\n`ubos` is intentionally scoped as a focused native macOS utility rather than a full OpenUsage replacement. It borrows the practical provider logic mapped in `docs/feature-parity.html`, but it does not embed the OpenUsage plugin runtime, proxy system, or full product surface. Native Swift adapters are smaller, easier to debug, and better aligned with macOS sandbox and Keychain behavior for this scope.\n\n## Release behavior\n\nReleases are packaged as Developer ID signed, notarized, stapled DMGs and published through GitHub Releases. Sparkle update metadata is maintained in `appcast.xml` with EdDSA signatures generated from the final stapled DMG bytes.\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnoelrohi%2Fubos","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnoelrohi%2Fubos","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnoelrohi%2Fubos/lists"}