Docs
Concepts

Cost and budgets

What a run costs, how budgets cap it, and how to keep spending down.

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:

Terminal
mv .culprit/ledger.sqlite .culprit/ledger-1.sqlite

or 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 k at 3 unless your agent is very noisy.
  • Let baselines be reused. Repeated runs over the same ends reuse earlier measurements.
  • Run culprit export-costs to see per-run cost, agent runs and time for everything in the ledger.
Culprit 0.1.0 · Apache-2.0 · Team PiedPiper