Effort, Not Temperature: The New Control Knob for Reasoning Models Anthropic's Claude Opus 5 and Sonnet 5 reject any non-default value for temperature, top_p, or top_k with a 400 error, a behavior in place since Opus 4.7, replacing the sampling parameter with output_config.effort. Effort controls how many tokens a model spends across the whole response — thinking, text, and tool calls — on a scale of low, medium, high (default), xhigh, and max, while OpenAI's reasoning models use reasoning.effort with levels from none/minimal through xhigh/max. Anthropic states effort is "a behavioral signal, not a strict token budget," and OpenAI's docs call it "a tuning knob, not the primary way to recover quality. 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 https://platform.claude.com/docs/en/models/opus-5/migration-guide , 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 https://platform.claude.com/docs/en/build-with-claude/effort on Claude, reasoning.effort https://developers.openai.com/api/docs/guides/reasoning 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: low → medium → high default → xhigh → max . OpenAI’s: none / minimal → low → medium → high → xhigh / 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 https://outofcontext.dev/blog/dynamic-workflows-in-claude-code-explained/ 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.