Every other tool answers afterwards. StarkEno answers first, then scores its own answer against the real run.
pip install starkeno
Python 3.11+ · MIT · no account
A simulator that hides its own error is worth nothing. These are both comparisons between the forecast and the real run, in full, in tokens:
typical scenario9.15 and 3.1 are not the same number.
The gap is not a multiplicative constant: the fix will not be one coefficient, and the work ahead is finding out what it depends on. Two points are enough to rule out the convenient hypothesis, not enough to draw a curve. The two runs differ in harness, shape, length and retries all at once, so they isolate nothing.
The direction, at least, is structural rather than arithmetic. The simulator counts context read back from cache only on retries, the way a single model call behaves. A real agent has no memory between turns: it resends its whole accumulated context every turn. In run 2 that re-reading is 97% of the spend, and across a normal week of work it is 60%.
A random error is a dead end. A structural one is a coefficient. That is why the wrong number is on the front page instead of at the bottom of a backlog, and why more measurements are needed, from someone who is not the author. Eight numbers are enough: no database, no transcripts. How to send one →
No plugin, no hooks, no server, no network, no account. The example Blueprint ships inside the package, so these commands work the moment it is installed.
pip install starkeno
python -m starkeno preflight esempio --output esempio.json
python -m starkeno preflight draft --input esempio.json --format yaml --output bozza.yaml
python -m starkeno preflight analyze --input bozza.yaml --confirmed --samples 50 \
--format html --output report.html
This is where it separates itself from any other estimate.
optimistic, typical, prudent,
maximum: a single estimate for non-deterministic work would be a
fiction, and four of them also tell you how wide the spread is.
Every analysis carries its own confidence level on the front, instead of leaving you to infer it.
declared you said it, default it assumed it,
inferred it worked it out. An estimate of unknown provenance cannot
be checked.
“missing prices in the worst case for…”, instead of quietly using zero: absent money is absent, never zero.
The finished, installable half: a stop hook re-reads the transcripts your agent already writes and reconstructs what your way of working costs, broken down by project, model, session, skill and MCP server. Claude Code and Codex in one account.
| Column | Why it is there |
|---|---|
| Work cost | the only part that is actually the work |
| Loading cost | the price of preparing the work |
| Re-reading cost | paid again every turn, for the same material |
| Unknown outcomes | how much of the picture is guesswork |
| Unclassifiable rows | how much to distrust the rest |
The last two rows are the ones other tools do not show you.
If all you need is the retrospective, good tools already exist.
ccusage reads the same JSONL files and runs under npx.
StarkEno exists for the half nobody else attempts: saying the cost
beforehand, and then scoring it against the real one.
No network call, no account, no telemetry. The bill is an HTML file on your disk and
the database is local SQLite. The hooks exit 0 whatever happens: if
StarkEno breaks, your work does not. Which is also why
starkeno doctor exists, because a silent StarkEno looks exactly like a
working one.
This page too. No external fonts, no CDN library, no analytics, no cookies: the only requests it makes are the images, hosted on GitHub. A gate in the publishing workflow fails the deploy if this page tries to contact anyone else.