The Effort Flag Is a Migration, Not a Setting
Unit price held flat across a model generation while tokens per task did not, which is why config that looked tuned last quarter now reads as a bill nobody approved.
Why the knob does not port
Reasoning effort is a compute budget calibrated against one generation's quality curve, and the unit is local to the model that shipped it. A newer model at low can spend more tokens than its predecessor spent at high, and the quality-per-token curve moves with it. The dangerous property is the silence: nothing fails when the setting is wrong, the output is still correct, the tests still pass, and the only symptoms are a bill and a p95 that get blamed on the new model rather than on the flag.
Two reported burn events show the tail. One 44-minute Astra run at maximum effort consumed 6.73M tokens and 15% of a weekly allowance. Separately, an experienced operator burned 4 billion tokens over a single weekend and shipped nothing, calling it a token-hungry model, per ben's bites. Both are retry policy with no ceiling, multiplied by spiky instruction-following.
The four levers, and what each actually costs
| Lever | Reported saving | Price you pay |
|---|---|---|
| Effort downgrade on a newer model | Unquantified; the vendor's own advice | Free to test; needs a quality diff on real work |
| Cross-model shunt (bulk reads and predictable codegen to a cheap model) | ~90% token cut in Java testing workflows | 10–30 seconds added per handoff; single engineer, single workflow |
| Tier substitution at benchmark parity | $3.26 versus $7.63 per index task | Astra reportedly failed to orchestrate its own sub-agents in a real refactor |
| Vendor serving change | "Up to 3–4x less usage" on long-tail workloads | Vendor-asserted, unobservable, changes with no deploy of yours |
The shunt result is the most implementable of the four, and the honest disclosure is what makes it credible. Thirty seconds is invisible in CI, batch analysis, and log summarization. In an interactive edit loop, thirty seconds is the product. The parity row tells you where model choice belongs: at the node, inside the graph. Two models tying on a hardened index while differing 2.3x on cost and diverging on orchestration reliability is the argument against a single-model agent stack.
The baseline does not hold still while you measure
OpenAI is defending the Astra cost narrative partly through an opaque change to subscription accounting, described as preserving quality while drawing up to 3–4x less usage on some workloads. That mechanism is unobservable from outside the vendor. The price cadence is on the record: cutting the price of GPT 5.6 Luna produced a tenfold increase in usage and the top slot on OpenRouter, per The Information, and Fable 5.1 landed 25% below Fable 5 "for typical workloads." Cuts are revenue-accretive, so they keep coming, and serving behavior keeps changing behind stable aliases.
The sources diverge usefully on the symptom. Unwind AI reads the config debt as a cost regression. ben's bites reports the same debt showing up as degraded output, with legacy agent instruction scaffolding holding the new model back. Same root cause, two failure signatures. That is why the gate on a model bump is an eval run rather than a spend chart.
Unit price is the only term in the cost equation your vendor holds constant. Tokens per task and retries are yours, and they are where the regression lives.
What to do
Grep every repo, agent YAML file, and CI environment variable for reasoning, effort, and thinking parameters this sprint, pin each to a model version, then run one real workload at high, medium, and low and diff output quality against token burn.
Instrument tokens-per-completed-task — per merged PR and per resolved ticket — and backfill it for your current model before any migration starts.
Enforce token, wall-clock, and tool-call ceilings with hard aborts in the agent harness, and keep a local token ledger independent of the vendor meter.