@imdlan/pi-usage
Pi Coding Agent extension to view usage and quota for AI providers: Z.ai / GLM Coding Plan, DeepSeek, and OpenRouter. Not affiliated with any provider; trademarks belong to their owners.
Package details
Install @imdlan/pi-usage from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:@imdlan/pi-usage- Package
@imdlan/pi-usage- Version
0.4.1- Published
- Aug 15, 2026
- Downloads
- 1,852/mo · 153/wk
- Author
- imdlan
- License
- Apache-2.0
- Types
- extension
- Size
- 103.8 KB
- Dependencies
- 0 dependencies · 1 peer
Pi manifest JSON
{
"extensions": [
"./src/index.ts"
]
}Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
README
pi-usage
A Pi Coding Agent extension that shows AI provider usage and quota inside Pi.
Supports Z.ai / GLM Coding Plan, DeepSeek, and OpenRouter. Each provider only appears when a matching one is configured in Pi. A configured provider whose query fails is still shown (marked error/stale); unconfigured ones are never rendered.
Honesty about API stability: this extension actively queries each provider's usage endpoints. Design principles: officially documented APIs only, and multi-provider by design — whichever providers you configure in Pi are the ones shown.
- DeepSeek (
GET /user/balance) and OpenRouter (GET /api/v1/key,GET /api/v1/credits) are official documented APIs — stable, but their fields may still evolve.- Z.ai endpoints (
model-usage,tool-usage,quota/limit) are undocumented: derived from the officialglm-plan-usageplugin and may change without notice.- OpenAI / Anthropic / Google Gemini are NOT supported: subscription-quota endpoints used by some plugins are undocumented private APIs (reverse-engineered from official CLIs) that can break or be blocked at any time — that risk is deliberately not taken here. Their admin usage APIs, in turn, require organization admin keys that are never used as chat provider keys.
If an endpoint breaks, the extension degrades gracefully (
usage unavailable) and never affects model requests.
/usage
GLM/glm-5.3 (zai) — 5h 32% 2026-08-15 11:43:00 · MCP 18% 2026-08-27 09:43:00
/usage zai
+-------------------+--------------+-----+--------------+-------+---------------------+
| GLM/glm-5.3 |
| refreshed 2026-08-15 09:43:00 |
+-------------------+--------------+-----+--------------+-------+---------------------+
| Quota | Usage | Pct | Used | Left | Resets |
+-------------------+--------------+-----+--------------+-------+---------------------+
| MCP monthly quota | [##--------] | 18% | 180 / 1000 | 820 | 2026-08-27 09:43:00 |
| web-search | [##--------] | 22% | 220 / 1000 | 780 | — |
| 5-hour quota | [###-------] | 32% | 5000 / 28000 | 23000 | 2026-08-15 11:43:00 |
+-------------------+--------------+-----+--------------+-------+---------------------+
Models (* = current):
* glm-5.3 5000 (32%)
glm-5.2 800 (5%)
status line (always auto-refreshed every 2 min)
GLM/glm-5.3 · 5h 32% · MCP 18%
/usage pin (widget pinned above the editor, auto-refreshed)
┌─ pinned above the editor ──────────────────────────────────────────┐
│ GLM/glm-5.3 (zai) — 5h 32% 2026-08-15 11:43:00 · MCP 18% … │
└───────────────────────────────────────────────────────────────────────┘
Install
pi install npm:@imdlan/pi-usage
Update with pi update --extensions; remove with pi remove npm:@imdlan/pi-usage.
Requires Node.js 20+ and at least one supported provider configured in Pi:
- Z.ai / GLM Coding Plan — base URL at an official Z.ai / GLM endpoint, API key resolving to your GLM Coding Plan token.
- DeepSeek — base URL at
https://api.deepseek.com, standard API key. - OpenRouter — base URL at
https://openrouter.ai, standardsk-or-v1-...key.
Commands
| Command | Behavior | Auto-refresh? |
|---|---|---|
/usage |
Usage summary for all providers, with quota reset times (local time). | ❌ One-time snapshot |
/usage zai |
Detailed Z.ai usage table: 5-hour quota, MCP monthly quota with per-tool breakdown, per-model usage. | ❌ |
/usage deepseek |
DeepSeek balance per currency (CNY/USD) with granted / topped-up breakdown. | ❌ |
/usage openrouter |
OpenRouter key spend cap (used/remaining/reset) plus daily/weekly/monthly spend and account credits balance (USD). | ❌ |
/usage refresh |
Force-refresh from the API, then render the summary. Keeps the last good snapshot on failure. | ❌ Renders once |
/usage status |
Status line content, last refresh, cache state. | ❌ |
/usage pin |
Pin the summary widget above the editor. pin on / pin off set it explicitly; pin toggles. |
✅ Every ~2 min |
Key difference: plain /usage is a static snapshot. Only a pinned widget (/usage pin) stays fresh, re-rendered from cache every background cycle (~2 min, no extra API calls). Pin state is per-session. The footer status line is always auto-refreshed regardless.
The detail table is width-aware: narrow terminals drop optional columns (Resets → Left → Used → Usage bar), never overflowing.
Current model indicator
Wherever the provider name appears, the active model id is appended as Name/model (e.g. GLM/glm-5.3) — footer, summary, pinned widget, and detail table header. It follows model switches via /model, cycling (Ctrl+P), or session restore.
Security & privacy
- Read-only: only queries usage.
- No secrets handled: auth resolves through Pi's
getProviderAuth; never reads credential files or runs subprocesses. - Locked-down networking: HTTPS only, host allowlist (
api.z.ai,open.bigmodel.cn,dev.bigmodel.cn), redirects rejected. - No telemetry; all output sanitized.
Development
npm install
npm run typecheck # strict tsc
npm test # node:test via tsx
Zero runtime dependencies (Node built-ins + Pi Extension API). Pi loads the TypeScript entry directly — no build step.
Adding a provider: implement UsageProvider in src/providers/<name>.ts (auth strategy, allowlist, redaction rules), register in registry.ts + PROVIDER_HOSTS in index.ts, add tests (401/403/429/5xx, timeout, allowlist, redaction).
The Z.ai adapter mirrors the official glm-plan-usage plugin: endpoints derived from the configured base URL origin (model-usage, tool-usage, quota/limit). Parsing is isolated in src/providers/zai.ts.
Trademarks & disclaimer
- This project is not affiliated with, endorsed by, or sponsored by Z.ai / Zhipu AI, DeepSeek, OpenRouter, or any other provider. Provider names and trademarks belong to their respective owners and are used only to identify the services being queried (nominative fair use).
- Usage queries are made read-only, with the credentials Pi already holds for the user's own account, at a low fixed rate (every 2 minutes). It is the user's responsibility to comply with each provider's terms of service.
- The Z.ai adapter references endpoint behavior of the upstream
glm-plan-usageplugin (Apache-2.0, Zhipu AI). No upstream code is included in this repository.
License
Apache-2.0. Copyright © 2026 imdlan.