Track AI provider rate limits and quotas in real-time.
- Live rate limits – See Codex/OpenAI hourly/weekly limits at a glance
- Anthropic subscription limits – Track Claude OAuth windows (5h, 7d, Sonnet/Opus/cowork tiers)
- Proxy quota stats – Monitor Mirrowel Proxy credentials and tier usage
- Copilot usage – Track GitHub Copilot chat + completions quotas
- Z.ai usage – Track GLM Coding Plan 5-hour token quota and monthly tool quota
- OpenRouter usage – Track API credit usage and remaining balance
- Inline status – Results appear directly in your chat, no context switching
- Zero setup – Auto-detects providers from your existing config
Add to your opencode.json:
{
"$schema": "https://opencode.ai/config.json",
"plugin": ["@howaboua/opencode-usage-plugin"]
}OpenCode installs dependencies automatically on next launch.
The plugin creates a default config file on first run at:
Linux/macOS: ~/.config/opencode/usage-config.jsonc
Windows: %APPDATA%\opencode\usage-config.jsonc
⚠️ Important: If using the Mirrowel Proxy, bothendpointandapiKeymust be set. The proxy defaults toendpoint: http://localhost:8000andapiKey: VerysecretKey. If you changed these during your proxy setup, you MUST update your config file to match.
The modelGroups section controls how quota groups are displayed:
showAll |
displayNames |
Behavior |
|---|---|---|
true (default) |
empty/missing | Show all groups with original names |
true |
provided | Show all groups, apply display name overrides |
false |
provided | Only show groups in displayNames (whitelist mode) |
false |
empty/missing | Shows no groups (all filtered out) |
| missing section | — | Legacy behavior (hardcoded group whitelist) |
If missing, the plugin creates a default template on first run.
Copilot is detected from either of these locations:
~/.local/share/opencode/copilot-usage-token.json~/.local/share/opencode/auth.jsonwith agithub-copilotentry~/.config/opencode/copilot-quota-token.json(optional override)
/usage
/usage codex
/usage anthropic
/usage claude
/usage proxy
/usage copilot
/usage zai
/usage glm
/usage openrouter
/usage or
/usage support
| Provider | Source |
|---|---|
| Codex / OpenAI | Auth tokens + /wham/usage endpoint |
| Anthropic Claude | OAuth profile + /api/oauth/usage windows |
| Mirrowel Proxy | Local /v1/quota-stats endpoint |
| GitHub Copilot | GitHub internal usage APIs |
| Z.ai GLM Coding Plan | chat.z.ai auth + Z.ai usage APIs |
| OpenRouter | API key + openrouter.ai/api/v1/key |
Proxy shows "not configured" error
- Ensure
endpointandapiKeyare set inusage-config.jsonc - Default values:
endpoint: http://localhost:8000,apiKey: VerysecretKey - If you changed these during proxy setup, update your config file to match
- Verify your proxy is running at the specified endpoint
Missing provider data
- Use
providers: { ... }in config to disable unused providers - For Codex: Ensure you have valid auth tokens
- For Copilot: Check token file locations in Configuration section above
- For Z.ai: Ensure your OpenCode auth includes
chat.z.aicredentials - For Anthropic: Ensure Claude OAuth credentials are available (
anthropicin auth.json) - For OpenRouter: Ensure OpenRouter API key is available (
openrouterororin auth.json)
Config file not found
- The plugin auto-creates
usage-config.jsoncon first run - Check the path in Configuration section above
- Manually create the file if needed
See AGENTS.md for internal architecture.
{ // REQUIRED: Proxy server endpoint (default: "http://localhost:8000") // Leave empty ONLY if you don't use the proxy "endpoint": "http://localhost:8000", // REQUIRED: API key for proxy auth (default: "VerysecretKey") // Leave empty if your proxy doesn't require authentication "apiKey": "VerysecretKey", // Optional: Request timeout in milliseconds (default: 10000) "timeout": 10000, // Optional: Z.ai API endpoint (default: "https://api.z.ai") "zaiEndpoint": "https://api.z.ai", // Optional: Show/hide providers in /usage output "providers": { "openai": true, "anthropic": true, "proxy": true, "copilot": true, "zai": true, "openrouter": true }, // Model group display configuration (optional) "modelGroups": { // Show all model groups from proxy (default: true) // When true: auto-discovers all groups, uses displayNames as overrides // When false: only shows groups listed in displayNames (whitelist mode) "showAll": true, // Override display names for specific groups (optional) // Groups not listed here use their original name from the proxy "displayNames": { "g3-pro": "Gemini Pro", "g3-flash": "Gemini Flash", "claude": "Claude" } } }