Install
openclaw skills install @globalcaos/token-panel-ultimateKnow exactly where your AI tokens go. Multi-provider tracking, budget alerts, and a local REST API—all in one dashboard. Provider credentials are supplied by you and sealed in the OS keychain, never passed on a command line; it reads no other application's credential store. Transcript parsing, live provider probing, and reading another tool's API-key variables are each opt-in and off by default. Only counts are stored — no prompts, no task titles. See Permissions, Data Flow & Consent.
openclaw skills install @globalcaos/token-panel-ultimateOne of dozens of skills and plugins in TinkerClaw — a self-improving OpenClaw fork that's been running 24/7 for months.
One dashboard for every token you spend. Anthropic, Gemini, OpenAI, Manus—tracked, stored, and queryable before the bill arrives.
Part of TinkerClaw — real-time token tracking, self-improving crons, persistent cognitive memory. This is one piece of that stack; the repo has dozens more.
👉 https://github.com/globalcaos/tinkerclaw
Clone it. Fork it. Break it. Make it yours.
What it does that a "dashboard" does not imply:
python3 secretstore.py --login anthropic reads the key from stdin and seals it in the OS keychain — never in a shell
argument, so it cannot be picked up from your history or from another process reading command
lines. The same command supports openai, gemini and manus. On macOS the write goes
through Security.framework rather than security add-generic-password -w, precisely because
that CLI form would place your key in this process's argv. --logout PROVIDER clears every
local store and prints the provider's server-side revoke URL, because deleting a local copy is
not revocation.TOKEN_PANEL_*
variables are ours and are always honoured. Generic ones — OPENAI_API_KEY,
ANTHROPIC_ADMIN_API_KEY, GEMINI_API_KEY, MANUS_API_KEY — belong to other tools and are
read only if you set TOKEN_PANEL_ALLOW_PROVIDER_ENV=1.TOKEN_PANEL_READ_TRANSCRIPTS=1, checked
both by the collector and by the parser. Only token counts are extracted; message text is never
written to the database or returned by the API.chatgpt-usage-fetch.py and
gemini-usage-fetch.py can send a 1-token request per model — billable, visible in your
account activity. Off by default: without --probe they make no network call at all and
report the documented caps.X-Token-Panel-Token to match TOKEN_PANEL_API_TOKEN, and returns 403 for everything
when that variable is unset.--logout unlinks its own
credential fallback file when the last provider is removed. That path must be absolute, inside
$HOME, a regular file, not a symlink, owned by you, and sitting beside a .token-panel-store
marker this tool wrote itself — otherwise it refuses. Your database is never deleted.What it stores: counts and identifiers. Provider, model, token totals, cost, credit totals, opaque task ids, statuses, timestamps. No prompts, no message content, no task titles. Earlier versions kept a 200-character slice of each Manus task prompt and wrote task titles into the usage JSON; 2.6.0 stops collecting both, and on first connect it blanks any prompt text a previous version already stored.
What it does NOT do: no credential reuse, no browser-token extraction, no silent secrets
scraping, no .env reads, no message content in the database, no telemetry, no third-party
endpoint. If no OS keychain exists, the CLI warns on every use before falling back to an
owner-only 0600 file inside a 0700 directory. Database and usage files are created 0600
inside a 0700 directory rather than inheriting an ambient umask. The local API allows CORS only
from localhost dashboard origins, not *.
Diagnostics are off by default. The browser widget logs nothing unless you set
localStorage.BP_DEBUG = "1" — including error paths, which can carry request URLs and response
bodies. Console output is readable by anything sharing the page.
It runs as you, not as root. The systemd unit is a --user unit with no User= line and no
machine's username baked in.
Dependencies are pinned above known-vulnerable releases. The floor for fastapi is
0.109.1; the previous >=0.100.0 permitted a release affected by CVE-2024-24762.
You've checked your Anthropic console, squinted at the OpenAI dashboard, opened a Gemini tab, and still weren't sure where last Tuesday's $14 went. Token Panel Ultimate puts all four providers in one place so the answer is always one query away.
TOKEN_PANEL_READ_TRANSCRIPTS=1pip install -r requirements.txt
# Give the dashboard a credential of its own (read from stdin, sealed in the keychain)
python3 secretstore.py --login anthropic
python3 secretstore.py --status
python3 api.py # http://127.0.0.1:8765
Remove a credential at any time — this clears every local store and prints the provider's revoke URL:
python3 secretstore.py --logout anthropic
OpenClaw Plugin → Budget Collector API → SQLite DB (0600)
(GET only) ↓
Transcripts (opt-in) / Provider APIs / Manus Tracker
| Method | Path | Auth | Description |
|---|---|---|---|
| GET | /status | none | Overall budget status |
| GET | /budgets | none | Current budget limits |
| GET | /summary/monthly | none | Monthly usage summary |
| GET | /summary/daily/{provider} | none | Daily breakdown |
| POST | /budgets | token | Set or update budget limits |
| POST | /usage | token | Record a usage event |
| POST | /manus/task | token | Record a task (id, credits, status) |
token = X-Token-Panel-Token must match TOKEN_PANEL_API_TOKEN; with that variable unset,
every POST returns 403.
Clone it. Fork it. Break it. Make it yours.
👉 Explore the full project: github.com/globalcaos/tinkerclaw