Culprit runs on your keys, so you pay your providers directly. There's no Culprit charge.
What costs money#
- Your agent's runs. Every task run at every tested commit calls your model. This is most of the cost.
- Culprit's own model calls, a handful per run: ranking hunks, proposing a fix, generating audit mutants. A bisect alone makes no model calls of its own.
How much#
It depends on your suite size, k, your model and how many commits are in the range. Measured on
our test agent (26 tasks, k = 3, 6 planted regressions, Culprit 0.1):
| Victim model | Cost per bisect |
|---|---|
| DeepSeek V4.1 Flash | $0.040 |
| Qwen 3.8 Flash | $0.044 |
| GLM 5.3 | $0.252 |
| Gemini 3.8 Flash | $0.413 |
On GLM 5.3, staged baselines cut a bisect from 190 agent runs to 98 on average, and the cost by 44%, with the same accuracy.
Budgets#
Every command that spends money takes --budget-usd, a hard cap for that command. Each command's
page lists its default.
When a run reaches its cap, it stops with budget_exceeded and reports the narrowest range found so
far. Nothing is lost: continue it with a higher cap using culprit resume.
Report cost from your eval module
Culprit counts your agent's spending from the cost field of each JSON line. If your module
doesn't report it, budgets only see Culprit's own model calls, and your agent's runs are
effectively uncapped. Prepare your agent shows the
format; Culprit passes the model's price as VICTIM_PRICE_IN and VICTIM_PRICE_OUT when it
knows it.
The ledger-wide cap#
Each ledger also has a $75 lifetime safety cap across all its runs, so a script that loops can't run away with your credit. When it's reached, every command stops with "ledger total reached the $75.00 global cap". To carry on, start a new ledger, keeping the old one for its reports:
mv .culprit/ledger.sqlite .culprit/ledger-1.sqliteor pass --db path/to/new.sqlite to each command.
Spending less#
- Use a cheaper victim model for bisecting. In our tests, accuracy held on every model while cost varied tenfold. See models.
- Narrow the range. A good ref closer to the bad one means fewer steps.
- Keep
kat 3 unless your agent is very noisy. - Let baselines be reused. Repeated runs over the same ends reuse earlier measurements.
- Run
culprit export-coststo see per-run cost, agent runs and time for everything in the ledger.