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

> Source: <https://outofcontext.dev/blog/effort-not-temperature/>
> Published: 2026-09-16 00:00:00+00:00

# 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.
