tray
host app
The cross-platform menu-bar host: per-account tray items, the plugin manager, and the isolated onboarding window.
LICENSE=BSD-3-ClauseCGO_ENABLED=0Your AI usage quotas โ session and weekly limits, across multiple accounts โ watched from the menu bar, in parallel.
$ gh repo list go-aiquota
go-aiquota is a cross-platform menu-bar app that watches AI usage quotas โ session and weekly limits โ across multiple accounts at once (Claude Max, Claude Team Premium, Claude Team Standard today). Each provider is a separate subprocess plugin talking a small hashicorp/go-plugin gRPC contract (go-aiquota/proto), so adding a provider is writing a plugin, not forking the host. Onboarding an account drives a real, isolated embedded browser straight to the provider's own login page โ no manual cookie copying, no devtools.
Implement the QuotaProvider contract and serve it as a go-plugin subprocess:
func (p *myProvider) Describe(...) (*quotapb.ProviderInfo, error) { ... }
func (p *myProvider) FetchQuota(...) (*quotapb.QuotaSnapshot, error) { ... }
hcplugin.Serve(&hcplugin.ServeConfig{
HandshakeConfig: plugin.Handshake,
Plugins: plugin.Map(p),
})The host, the shared contract, and the first provider plugin โ mirrored from the live GitHub repos.
tray
host appThe cross-platform menu-bar host: per-account tray items, the plugin manager, and the isolated onboarding window.
proto
contractThe shared QuotaProvider gRPC contract between the host and every provider plugin, plus the credential-safety types both sides build on.
plugin-claude
provider pluginThe reference QuotaProvider implementation, for Claude Max / Team Premium / Team Standard.
A credential is never written to disk in the clear, never logged, and lives only in the OS keyring โ secret.Secret and shape-based redaction make it hard to accidentally print one. Onboarding always drives a real embedded browser (isolated per account) rather than a scripted client trying to impersonate one.