Where does your AI agent burn money? Local token/cost profiler for always-on agents (Hermes Agent first). Zero dependencies.
Project description
agentburn
Where does your AI agent burn money — while you sleep?
Always-on agents bill you around the clock. Hermes Agent users wake up to
$47 overnight bills
from recursive subagent runs; one user measured that
73% of every API call is fixed overhead
(tool definitions + system prompt, resent every time); chained delegation means
"step 3 costs 4× step 1 — no alert, just a bill." Built-in /usage shows totals.
Nothing shows where it burns.
agentburn is a local profiler for your agent's own accounting data — universal across agents: Hermes Agent, OpenClaw and Claude Code today, one normalized model underneath. One command, zero dependencies, nothing leaves your machine:
uvx agentburn # or: pipx run agentburn / pip install agentburn
🔥 agentburn — hermes · last 30d
TL;DR: ≈ ~$431/mo pace; 79% of it is `cron`.
First fix: 79% of spend happens at night — route night work to a cheaper model
~$45.50 total · 1.75M tokens · 7 sessions · 123 API calls
≈ ~$431.24/month at the current pace
WHERE IT BURNS (by source)
cron ██████████████···· 79% ~$36.00 1.24M 2 sess
cli ██················ 9% ~$4.00 185K 1 sess
gateway:telegram █················· 7% ~$3.00 210K 1 sess
subagent █················· 5% ~$2.50 113K 2 sess
🌙 WHILE YOU SLEPT (00:00–08:00): ~$36.00 (79% of spend) · 2 sessions
mostly: cron
FIXED OVERHEAD (avg input tokens per API call)
gateway:telegram 20,000 ← heavy
cron 15,000 ← heavy
input composition (sampled from 3 request dumps): system 30% · tools 58% · history 12%
💡 DO THIS
1. 79% of spend happens at night — that's ≈$341/mo while you sleep. Route night work to a cheaper model.
2. Scheduled (cron) sessions run on anthropic/claude-opus-x — maintenance rarely needs a frontier model.
3. 20,000 input tokens per call on telegram: trim per-platform toolsets, prune unused skills.
What it answers
- Where it burns — by source:
cron/subagent/gateway:telegram|discord|whatsapp/cli. Always-on ≠ free: scheduled jobs and gateways spend without you. - 🌙 While you slept — the overnight bill, isolated and named (configurable window:
--night 23-7). - Fixed overhead — average input tokens per API call per source. The "73% overhead" pattern is visible in one glance; with request dumps enabled, you get the sampled composition (system prompt vs tool definitions vs history).
- Subagent rollups — delegation cost chained back to the session that spawned it. Recursion compounds; here is the receipt.
- Top tools — which tool results weigh most in your context.
- What to do — up to 4 conservative, named recommendations with monthly estimates.
Why trust these numbers
Most token trackers quietly disagree with each other (2–91× in public issue threads). agentburn takes the opposite stance:
- Numbers come from the agent's own accounting (
~/.hermes/state.db: per-session token counters and cost fields). No scraping, no proxies, no guessing. - Provider-billed costs are shown as-is; Hermes estimates are marked with
~. Mixed data is labeled mixed. - Sessions with messages but zero recorded tokens (known Hermes accounting gaps, e.g. #12023) are detected and reported: totals are then explicitly a lower bound — and fixing the accounting becomes recommendation #1.
- Input composition from request dumps is char-proportional and labeled sampled estimate, not truth.
Privacy
Everything runs locally and reads your database read-only. No network calls. No telemetry. The report is yours.
Usage
agentburn # every agent on this machine, last 30 days
agentburn --agent openclaw # just one
agentburn --days 7
agentburn --agent hermes --db /path/to/state.db
agentburn why # behavioral forensics: loops, retry storms, idle heartbeats
agentburn why --source telegram # decompose ONE source: functions called, errors, loops
agentburn --source cron # cost report for one source only
agentburn --night 23-7 # custom overnight window (local time)
agentburn --budget-month 50 --fail-over # sentinel for cron/CI
agentburn --json # machine-readable, pipe it anywhere
agentburn --no-color
Mechanics
📤 Share your burn (--share). An anonymized card — categories, models and totals only; session titles, paths and content are excluded by construction. Safe to paste into a post; --svg card.svg renders the same card as an image:
🔥 my hermes agent · last 30d
~$45.50 → ~$430/mo pace · 1.75M tokens
where it burns: cron 79% · cli 9% · telegram 7% · subagent 5%
🌙 while I slept (00–08): ~$36.00 — 79% of everything
⚙️ telegram re-sends 20,000 tokens with EVERY call — 2.5× the community norm (≈8k)
— agentburn · local & private
--svg card.svg renders it as an image:
📏 Calibration against public benchmarks. "Is 15k input tokens per call normal?" The report compares your fixed overhead with community-measured references embedded as dated constants (e.g. the Phala always-on-agent benchmark, 2026-03: ≈8k/call baseline). No network — sources are cited inline.
📐 Optimize → prove it (--save-baseline / --compare). Snapshot your pace, change the config (cheaper cron model, trimmed toolsets), then agentburn --compare shows the delta in $/month — pace-normalized, so a 7-day baseline compares honestly with a 30-day window. Every recommendation becomes a testable promise.
🔬 agentburn why — behavioral forensics. report says where it burns; why says why, from the agent's own recorded actions and thoughts:
🔬 agentburn why — openclaw · gateway:telegram
WHAT IT ACTUALLY DID browser 34× ≈210K in results · web_search 18× · shell 7× (2 errors)
RE-READ LOOPS 5× browser(https://news.site/page) — every repeat re-paid in full
RETRY STORMS Bash: 3 errors / 6 calls — paying full price for every error
IDLE HEARTBEATS 4 of 9 heartbeat runs did NOTHING — $2.40 of pure idle burn
BURNED ON FAILURES 2 failed runs → ~$3.90 (timeout, killed)
THINKS MORE THAN IT WORKS 62% thinking · 84K tokens · "rename files task"
💡 WHAT TO CHANGE
1. `/proj/big.md` was fetched 4× in one session ≈32K tokens re-paid — cache it…
Observations with numbers, not verdicts; only tool names, truncated argument keys and counters — message content never leaves the machine (and never enters the report).
🩺 agentburn doctor. Trackers disagree because the agent's own accounting has gaps. doctor names the broken combinations (provider × model × source) for zero-usage and unpriced sessions, and generates a ready-to-paste upstream bug report — counters only, no message content.
🚨 Sentinel mode — a budget guard for server agents. Your agent runs 24/7 on a VPS; this watches it:
# alert when overnight burn exceeds $5/month pace (exit code 1 → any alerting hooks in)
agentburn --agent openclaw --budget-night 5 --fail-over --no-color \
|| notify-send "🚨 agent is burning money at night"
Drop it in cron next to the agent itself — the one-off check becomes a standing guard.
Supported agents
One normalized model, one adapter per agent. Run agentburn and every agent found on the machine gets its own report.
| Agent | Status | Data source | Notes |
|---|---|---|---|
| Hermes Agent | ✅ | ~/.hermes/state.db (+ optional request dumps) |
costs from the agent's own accounting |
| OpenClaw | ✅ | ~/.openclaw/agents/*/sessions/sessions.json |
heartbeat is its own category — the famous one; cron / gateways / subagents split out |
| Claude Code | ✅ | ~/.claude/projects/**.jsonl |
tokens only, by design: CC doesn't record costs locally and subscription usage has no honest per-token price — we don't invent one |
Adapters are ~150 lines over a shared model. Codex CLI / opencode are natural next targets — PRs welcome.
Related
token-history — the macro view: daily archive of which agents the world uses (OpenRouter rankings). agentburn is the micro view: where yours burns.
License
MIT
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file agentburn-0.6.0.tar.gz.
File metadata
- Download URL: agentburn-0.6.0.tar.gz
- Upload date:
- Size: 36.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e27f486aa9f998165ca6f7378ff0226f86253e8d4b0ebd19cf63f918ceeefc0c
|
|
| MD5 |
f06b04fe07f5c705cdf111d421f465eb
|
|
| BLAKE2b-256 |
8f40b19cb980846b0c11fa01deaf65e75470bbb8519ee79bbd211e43e7710104
|
Provenance
The following attestation bundles were made for agentburn-0.6.0.tar.gz:
Publisher:
publish.yml on Socialpranker/agentburn
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
agentburn-0.6.0.tar.gz -
Subject digest:
e27f486aa9f998165ca6f7378ff0226f86253e8d4b0ebd19cf63f918ceeefc0c - Sigstore transparency entry: 1781504116
- Sigstore integration time:
-
Permalink:
Socialpranker/agentburn@bf029d4982c3d815f0fd3a8a2ffb0a3eb4cb50d9 -
Branch / Tag:
refs/tags/v0.6.0 - Owner: https://github.com/Socialpranker
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@bf029d4982c3d815f0fd3a8a2ffb0a3eb4cb50d9 -
Trigger Event:
release
-
Statement type:
File details
Details for the file agentburn-0.6.0-py3-none-any.whl.
File metadata
- Download URL: agentburn-0.6.0-py3-none-any.whl
- Upload date:
- Size: 40.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f04785a1225b7bff2f28eb97463e8d92f6a96e36c6632d6ef0699cc330c25aef
|
|
| MD5 |
1eeb746d514ccf4a517d51800955abca
|
|
| BLAKE2b-256 |
7c66c333d69298dee1d7d4e2913086b9c70d85841f2228b2e3b0576c524afbae
|
Provenance
The following attestation bundles were made for agentburn-0.6.0-py3-none-any.whl:
Publisher:
publish.yml on Socialpranker/agentburn
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
agentburn-0.6.0-py3-none-any.whl -
Subject digest:
f04785a1225b7bff2f28eb97463e8d92f6a96e36c6632d6ef0699cc330c25aef - Sigstore transparency entry: 1781504278
- Sigstore integration time:
-
Permalink:
Socialpranker/agentburn@bf029d4982c3d815f0fd3a8a2ffb0a3eb4cb50d9 -
Branch / Tag:
refs/tags/v0.6.0 - Owner: https://github.com/Socialpranker
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@bf029d4982c3d815f0fd3a8a2ffb0a3eb4cb50d9 -
Trigger Event:
release
-
Statement type: