pi-token-tracker
v0.1.3
Published
Pi extension that tracks token usage across all sessions including taskplane workers and merge agents. Writes per-call token records to usage.jsonl and provides a token-report command.
Maintainers
Readme
pi-token-tracker
Pi extension that tracks per-call token usage across all sessions, including taskplane lane workers and merge agents.
How it works
message_endhook: Writes one JSONL line per assistant response to~/.pi/token-logs/usage.jsonltoken-reportcommand: Scans usage.jsonl + taskplane runtime exit summaries and prints a hierarchical vendor/model breakdown
Recorded Fields
Each JSONL record contains:
| Field | Description |
|-------|-------------|
| date, time | ISO date/timestamp |
| provider, model | Model identifier (e.g., anthropic, claude-sonnet-4) |
| inputTokens | Input token count |
| outputTokens | Output token count |
| cacheReadTokens | Cache read tokens (if supported) |
| cacheWriteTokens | Cache write tokens (if supported) |
| totalTokens | Sum of all token counts |
| cost | Estimated cost in USD |
| ttftMs | Time to First Token (ms) — from HTTP response headers to first streaming token |
| tps | Tokens Per Second — output tokens / streaming duration |
Installation
# Clone and install
git clone https://github.com/skyscribe-yf/pi-token-tracker.git
cd pi-token-tracker
npm link
# Add to pi settings
# Edit ~/.pi/agent/settings.json and add "npm:pi-token-tracker" to the "packages" array:
# {
# "packages": [
# "npm:pi-token-tracker",
# ...
# ]
# }Why a pi package?
Taskplane lane workers and merge agents run with --no-extensions, which prevents auto-discovery of user extensions from the working directory. However, taskplane's loadPiSettingsPackages mechanism automatically forwards pi packages (from settings.json) to worker processes as explicit -e flags.
By installing this extension as a pi package, it gets loaded in:
- Main pi sessions ✓
- Taskplane lane workers ✓
- Taskplane merge agents ✓
Safety in RPC mode
The extension is safe to load in headless RPC worker processes:
session_starthook uses try-catch to handle missing UItoken-reportcommand uses try-catch for notify in UI-less contexts
License
MIT
