Flat vector illustration on a dark charcoal background of two large dial gauges side by side. The left dial, labeled TEMPERATURE, has a thermometer icon and scattered dots suggesting randomness. The right dial, labeled EFFORT, has a layered gauge icon with concentric rings suggesting depth of thought, needle pushed high.

Effort, Not Temperature: The New Control Knob for Reasoning Models


Send temperature to Claude Opus 5 or Sonnet 5 and you get a 400 error. Not a warning — a rejection. Setting temperature, top_p, or top_k to any non-default value returns an error on these models, same as it’s done since Opus 4.7. The parameter that shaped a decade of LLM tuning is gone from Anthropic’s newest models. In its place: effort.

What temperature actually did

Temperature controlled randomness in next-token sampling. Low (near 0) made the model pick the highest-probability token almost every time — deterministic, repetitive, safe. High (near 1, sometimes 2) flattened the distribution, letting lower-probability tokens win more often — varied, occasionally brilliant, sometimes garbage. It was a dial for how much the model gambled on each word.

That made sense for chat and creative writing. It never made much sense for reasoning — inject noise into a chain of logical steps and you get wandering, not creativity.

What effort controls instead

output_config.effort on Claude, reasoning.effort on OpenAI’s reasoning models — neither touches randomness. Effort controls how many tokens the model spends across the whole response: thinking, text, tool calls. Anthropic’s scale: lowmediumhigh (default) → xhighmax. OpenAI’s: none/minimallowmediumhighxhigh/max, model-dependent. Push it down for a cheap classification call; push it up for agentic coding where getting it right beats getting it fast. (If you use Claude Code, /effort ultracode sets this same parameter to xhigh — on top of turning on automatic workflow selection.)

Anthropic is explicit that effort is “a behavioral signal, not a strict token budget” — at low effort Claude still thinks on hard problems, just less. Thoroughness and randomness were never the same axis; effort just makes that separation explicit where temperature used to blur it. (Worth noting: removing temperature doesn’t buy determinism either way — even at temperature: 0 on older models, Anthropic never guaranteed identical output for identical input.)

Why the swap happened

Reasoning models generate a structured thinking trace before the final answer. Sampling noise in that trace doesn’t produce creativity — it produces reasoning that wanders or drops a step. OpenAI’s own docs frame it plainly: treat effort “as a tuning knob, not the primary way to recover quality” — it’s not a replacement for a better prompt, it’s a cost/depth control layered on top of one.

Which one you need

On a reasoning-tier model — Opus 5, Sonnet 5, GPT-5.5 — you’re setting effort, not temperature. On older or non-reasoning models, or for classification where sampling diversity matters, temperature is still there and still works the way it always did.

The rule of thumb: temperature was a knob for how the model writes. Effort is a knob for how hard it thinks. If you’re still setting temperature on a reasoning model out of habit, that’s the first thing to fix.