pi-meter
LLM spend tracking, budget alerts, auto-downshift, and hard cutoff for AI coding agents — as a CLI, an MCP server, a Claude/Cursor skill, or a pi extension.
Package details
Install pi-meter from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:pi-meter- Package
pi-meter- Version
0.1.1- Published
- Jun 18, 2026
- Downloads
- not available
- Author
- vaibhav290797
- License
- MIT
- Types
- extension, skill
- Size
- 72.2 KB
- Dependencies
- 0 dependencies · 1 peer
Pi manifest JSON
{
"extensions": [
"dist/pi/extension.js"
],
"skills": [
"skills"
]
}Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
README
pi-meter
Know what your coding agents cost — and stay on budget.
pi-meter tracks every LLM call your AI coding agent makes, aggregates spend across sessions, days, and models, and keeps you on budget with three escalating responses: it warns as you approach a limit, auto-downshifts to a cheaper model when you go over, and can hard cut off — refusing prompts and blocking tools — when you blow a hard cap.
One core engine, four ways to run it: a CLI, an MCP server, a Claude/Cursor skill, and a pi extension.
Why
LLM coding agents burn money quietly — a long session on a frontier model can run into real dollars before you notice. pi-meter gives you:
- a portable ledger of every call (model, tokens, cost) you can grep,
- budgets with three responses — warn → downshift → cut off,
- and zero lock-in: plain JSONL + a JSON config file. No account, no daemon, no telemetry.
Features
- Spend tracking — per call, per day, per month, all-time, per model, and per session.
- Cost estimates — a built-in price table for Claude / GPT / Gemini, fully overridable; uses the harness's own reported cost when it's available.
- Soft budgets → auto-downshift — over budget, pi-meter switches the agent to a cheaper model you choose.
- Hard limits → cutoff — past a hard cap, pi-meter refuses new prompts and blocks tool calls, with a one-command override.
- Four surfaces — CLI, MCP server, Claude/Cursor skill, and pi extension, all on one core.
- Just files — the ledger is JSONL at
~/.pi-meter/usage.jsonl; config is api-meter.json.
Install
# CLI (global) — installs the `pimeter` command
npm install -g pi-meter
# or run without installing
npx pi-meter report
For the pi harness (installs the extension + skill):
pi install npm:pi-meter
# or from the repo:
pi install git:github.com/vaibhav-patel/pi-meter
Quick start
# record a call (the pi extension / MCP server usually does this for you)
pimeter record --model claude-opus-4-8 --input 12000 --output 3000 --label "refactor"
# where's the money going?
pimeter report
# am I within budget?
pimeter status
# set a soft budget (warn + downshift) and a hard cap (cutoff)
pimeter budget --daily 5 --monthly 100
pimeter hardlimit --daily 10 --total 500
How it works
pi-meter has one dependency-free core behind every surface:
- Record — each model call is priced and appended to the ledger.
- Aggregate — spend is summed by day / month / total / model / session.
- Enforce — spend is compared to your
budget(soft) andhardLimit(hard):- soft budget exceeded → warn and auto-downshift to a cheaper model;
- hard limit exceeded → cut off: refuse new prompts and block tool calls.
The ledger
One JSONL line per call at ~/.pi-meter/usage.jsonl (override with storePath):
{"ts":"2026-06-18T09:30:00Z","model":"claude-opus-4-8","provider":"anthropic","inputTokens":12000,"outputTokens":3000,"costUsd":0.225,"sessionId":"a1b2","label":"refactor"}
Greppable, portable, and yours — delete lines to forget, copy it elsewhere to analyze.
Configuration — pi-meter.json
Drop a pi-meter.json in your project root (the folder you run the agent from):
{
"budget": { "daily": 5, "monthly": 100, "session": 2 }, // soft -> auto-downshift
"hardLimit": { "monthly": 150, "total": 500 }, // hard -> cut off
"downshift": { "claude-opus-4-8": "claude-sonnet-4-6" }, // expensive -> cheaper
"prices": [ { "id": "my-model", "inputPerMTok": 1.0, "outputPerMTok": 4.0 } ],
"storePath": "~/.pi-meter/usage.jsonl"
}
| Field | What it does |
|---|---|
budget |
Soft limits (USD). pi-meter warns at 80%, and at 100% auto-downshifts via downshift. |
hardLimit |
Hard caps (USD). Once over, the pi extension refuses prompts and blocks tools. |
downshift |
Expensive-model → cheaper-model map, used when over the soft budget. |
prices |
Add or override model prices (USD per 1M tokens). Wins over the built-in defaults. |
storePath |
Ledger location (supports a leading ~). Defaults to ~/.pi-meter/usage.jsonl. |
Scopes for both budget and hardLimit: daily, monthly, session, and total (all-time).
CLI reference
| Command | Description |
|---|---|
pimeter record --model <id> --input <n> --output <n> |
Record a call. Optional: --cache-read, --cache-write, --label, --session. |
pimeter report [--json] |
Spend: today / month / total / by model. |
pimeter status [--session <id>] |
Budget + hard-limit usage per scope (exits 1 if over). |
pimeter budget [--daily N --monthly N --session N --total N] |
Show or set the soft budget. |
pimeter hardlimit [--daily N --monthly N --session N --total N] |
Show or set the hard limit. |
pimeter models |
List known model prices. |
pimeter mcp |
Start the MCP server (stdio). |
pi extension
Once installed in pi, pi-meter runs on its own:
- Meters every turn — reads the harness's own token usage + cost and records it.
- Footer gauge — shows
daily $1.20/$5.00 · monthly …live as you work. - Auto-downshift — over the soft budget, switches to your
downshiftmodel (once per turn). - Cutoff — over the
hardLimit, refuses new prompts and blocks tool calls. - Commands —
/pimetershows spend + budget;/pimeter overridelifts a hard-limit block for the current session.
MCP server
npx pi-meter mcp starts a stdio MCP server with three tools, usable from Claude Desktop, Cursor,
or any MCP client:
| Tool | Description |
|---|---|
record_usage |
Record a model call; returns its computed cost. |
get_spend |
Today / month / total / by-model spend. |
check_budget |
Budget status per scope, whether to downshift, and a suggested cheaper model. |
Example client config:
{ "mcpServers": { "pi-meter": { "command": "npx", "args": ["-y", "pi-meter", "mcp"] } } }
Claude / Cursor skill
The package ships a skill at skills/pimeter/SKILL.md. Drop it into your
agent's skills directory (or it loads automatically when pi-meter is installed as a pi package) to
teach the agent to record usage, report cost, and decide when to switch models for cost reasons.
Pricing note
The built-in price table is approximate public list pricing and will drift — verify and
override anything you depend on via prices in pi-meter.json (pimeter models prints the
defaults). When the harness reports its own cost (as pi does), pi-meter uses that instead of the
table.
Development
npm install
npm run build # tsc -> dist/
npm test # node --test suite
npm run typecheck
License
MIT — see LICENSE.