Blog

Understanding Thinking Effort in AI Agents: What Developers Need to Know

Read as full article

Understanding Thinking Effort in AI Agents

Part I · Challenge common assumptions

Why asking an AI to think harder does not always produce better results.

What does a thinking-effort setting actually change, and when should you raise it? This deck follows that question through 21 slides: the concept, the difference between reasoning and agent execution, real engineering scenarios, a production architecture, and a way to decide with evidence instead of intuition.

One task, three levels of reasoning effort Agent Low effort · direct path Fast answer fine for a simple task ✕ Medium · weighs one alternative Considered answer one alternative dropped ✕ ✕ ✓ High effort · wide search Verified result more time and cost Illustrative. Effort changes how a model reasons, not what evidence exists or what the model can do.
One task, three levels of reasoning effort. A conceptual illustration, not a measurement.

How to read this article. Claims carry labels. Documented means stated in the official documentation or paper linked beside it. Verified means I ran it myself, and the callout says what was run and what that run cannot show. Opinion is my interpretation or engineering judgment. Proposal is a design I recommend, not something a vendor ships. Illustrative marks invented numbers and scenarios used to explain an idea. No claim here is an experiment: I ran no benchmark, so every number on these slides either comes from vendor documentation or is marked illustrative. Diagrams are conceptual unless a caption says otherwise.

Last verified: October 22, 2026. Provider facts were checked that day against the linked OpenAI, Anthropic and Google pages. The code on slides 15 and 18 was type-checked against openai 7.42.0, @anthropic-ai/sdk 1.1.0 and @google/genai 2.30.0 with TypeScript 5.9.3. None of it was sent to a live API. Model names and accepted values change often, so check the linked pages before you copy anything.

Same Model. Same Prompt. Different Outcomes?

Part I · Challenge common assumptions

You run what looks like the same request twice and get a clean answer once and a confused one the next time. Before blaming a setting, list everything that moved. Some tasks have one obvious path and are solved directly. Others have several plausible paths, and the answer improves when the system deliberates or collects more evidence.

Straightforward task Rename a config key Edit one file Check the build passes One obvious path. Most settings give the same result. Complex task Flaky test: fails 1 run in 20 Race in setup Shared state Timeout tuning Evidence logs, repro, bisect Cause identified Several plausible paths. Depth and evidence both matter. What else changes the outcome Task complexity Model behavior Context available Tool outputs Sampling randomness Configuration (incl. effort)
A simple task has one path. A complex task has several, and evidence decides between them. Effort is one factor among six.
  • Task complexity and ambiguity change how many reasonable answers exist.
  • Available context and tool outputs decide what the model can actually know.
  • Sampling randomness means two runs of the same prompt can diverge.
  • Model behavior and configuration matter, and effort is only part of configuration.

Do not attribute a bad result to effort until you have ruled out missing context, a weak tool result and plain variance.

Higher Thinking Effort Does Not Automatically Mean Better Intelligence

Part I · Challenge common assumptions

Three assumptions are common, and each is wrong in a useful way:

  1. “Higher effort always gives a better answer.” It can help on some tasks. It does not guarantee correctness, and on easy tasks it mostly adds cost.
  2. “Longer thinking means deeper, more accurate reasoning.” Length is not quality. A long chain of reasoning can be long and wrong.
  3. “More agent steps make a more capable agent.” More steps can compound errors as easily as they fix them.
Problem + context More reasoning = wider exploration hypothesis 1 hypothesis 2 hypothesis 3 hypothesis 4 Compare and prune may still choose wrongly Conclusion not guaranteed correct Evidence available logs, code, test output Model capability knowledge, skill Task constraints time, budget, risk also feeds the conclusion Missing evidence is a wall: more reasoning cannot cross it.
Reasoning widens the search. The conclusion still depends on evidence, capability and constraints.

Documented In its per-model guidance for Claude Opus 4.7, Anthropic says that on most workloads the highest level, max, “adds significant cost for relatively small quality gains”, and that on some structured-output or less intelligence-sensitive tasks it can lead to overthinking (Anthropic: Effort). The guidance is written for that model; other models’ guidance differs.

Thinking Effort Is About Reasoning Resources, Not Just Waiting Longer

Part II · Technical fundamentals

Thinking effort is a model- or platform-specific control, where one exists, that influences how much effort goes into reasoning about a task. It is a setting on the public API. It is not a window into the model.

Public API (documented) Task + context input Effort setting e.g. low … high Model inference internals vary and are not exposed Reasoning behavior ? Computation spent ? Other inference choices ? Effort may influence any of these. It is not a fixed token count. Public API (documented) Answer final output Reasoning summary opt-in, not raw trace Usage report reasoning tokens billed The "?" boxes are deliberately unspecified: the API setting does not expose what happens inside.
What you can set and observe is the API surface. What happens inside depends on the model and is not specified by the setting.

Documented What the vendors say, in their own words:

  • OpenAI: reasoning tokens are billed as output tokens, count toward max_output_tokens and the context window, and appear in usage.output_tokens_details.reasoning_tokens. The raw reasoning is not returned; a summary is opt-in through reasoning.summary (OpenAI: Reasoning models).
  • Anthropic: effort is “a behavioral signal, not a strict token budget”, and it affects all output tokens, including text and tool calls, not only thinking (Anthropic: Effort). You are billed for the full thinking even when only a summary, or nothing, is displayed; usage.output_tokens_details.thinking_tokens reports it (Anthropic: Steering thinking).
  • Google: thinking_level accepts a different set of levels per model, response pricing is “the sum of output tokens and thinking tokens”, and thought summaries are opt-in (Gemini: Thinking).
  • Defaults differ. Anthropic documents high as the default on most models and medium on Claude Opus 5.5 and Claude Haiku 5.5; OpenAI documents medium as the default for several models; Gemini’s default depends on the model. Omitting the setting does not mean the same thing everywhere.

So the same word means different things on different APIs. Do not assume a fixed number of tokens, steps or compute per level.

Task Complexity Should Influence Reasoning Effort

Part II · Technical fundamentals

Task A convert JSON to a TypeScript interface JSON object Map each field to a type interface Order { … } One path. The output can be checked at a glance. Task B intermittent race condition, distributed system Symptom fails 1 request in 200 Lock ordering Stale cache Duplicate retry Cross-component evidence traces, logs, timing, repro Narrowed cause, edge cases checked Complexity is not the only axis A simple task with severe consequences (a production migration) can still deserve care.
Task A has one checkable path. Task B has several hypotheses that need cross-component evidence.

Task A converts a JSON object into a TypeScript interface. The output is checkable at a glance. Extra deliberation rarely changes it.

Task B is an intermittent race condition in a distributed system. Here deliberate reasoning can pay off: comparing hypotheses, considering edge cases, and connecting behavior across components.

But complexity is not the only axis. A short task with severe consequences, such as a production data migration, can justify careful reasoning, extra checks, or human review even though it is simple to state.

Model Reasoning and Agent Execution Are Different Things

Part II · Technical fundamentals

A · One model invocation Input context Reasoning stage internal to the model call the effort setting applies here Output No tools involved. Can still be a lot of reasoning. B · Agent loop external to the model Model call 1 reasoning may be light Tool call run the tests Observation 2 tests fail Model call 2 decide the next step Stop condition met answer returned repeat until stop
Left, reasoning inside one model call. Right, an external loop of model calls, tool calls and observations. The dashed arrow animates when motion is allowed.

Thinking effort is the reasoning applied during one model invocation, when the model and API support such a control.

The agent loop is the external cycle: the model receives context, produces a response or a tool call, receives the tool result, and continues until a stopping condition is met (ReAct is the classic description of interleaving reasoning with actions).

They vary independently. One invocation can involve a lot of reasoning and no tools. An agent can make dozens of tool calls while each individual step is simple.

An AI Agent Is More Than a Model

Part II · Technical fundamentals

The conceptual flow: user task and context → model reasoning → decision to answer or call a tool → tool execution → updated context → next decision. It repeats until the task is done or a stopping condition fires.

Orchestration layer · harness code Model layer Execution layer · tools Final answer when a stop rule fires 1 · Task + context prompt, files, history Stop rules done · limit · budget 5 · Updated context tool result appended 2 · Reasoning inside the model call effort acts here 3 · Decision answer or tool? Verification a checkpoint, any layer 4 · Tool execution search, read, run tests answer tool call 6 · next decision Reasoning effort changes step 2 only. Context, tools, stop rules and checks are the system around the model.
Six steps in three layers. Only step 2 is affected by reasoning effort. The dashed, animated arrows are the loop; verification is a checkpoint, not a layer.

Effort acts on one step of this loop, the reasoning inside the model call. Overall performance also depends on context quality, which tools exist, how the harness orchestrates retries and stopping, and whether anything verifies the result. Slide 15 turns this loop into a production reference architecture.

Documented Anthropic’s Building effective agents makes the related point that agentic systems trade latency and cost for task performance, so the added complexity should be justified.

Different Effort Levels Represent Different Trade-Offs

Part II · Technical fundamentals

Tendencies, not measurements Quality on a hard task lower higher Quality on a simple task lower higher Latency lower higher Cost lower higher lower effort setting higher effort setting Positions are qualitative. The size of each gap depends on the model, the task and how you measure. On simple tasks the quality gap tends to shrink while latency and cost still rise.
A qualitative chart. Marker positions show tendencies only; they are not benchmark results.
Lower effort Higher effort
Latency tends to be lower tends to be higher
Cost tends to be lower tends to be higher
Hard, multi-step tasks may be less thorough may be more thorough
Simple tasks usually fine little gain, still costs more

These are tendencies, not guarantees. How large each gap is depends on the model, the task and the metric. This article gives no numeric improvements because none would generalize; slides 16 and 17 show how to produce your own.

When Is Higher Thinking Effort Worth It?

Part III · Real engineering scenarios

An API intermittently returns HTTP 500. A model with more reasoning effort may be better at holding several hypotheses at once, checking dependencies and considering edge cases. It still cannot read logs nobody collected.

Hypotheses (unverified) Evidence (observed) Symptom intermittent HTTP 500 H1 · DB pool exhausted DB wait p99 is normal metrics dashboard ✕ refutes H2 · Upstream timeouts Upstream calls succeed distributed traces ✕ refutes H3 · Cache stampede No miss spike at 500s cache metrics ✕ refutes H4 · Old build on one instance 500s only on instance 3 access logs ✓ supports Verified fix roll back instance 3; 500s stop Missing logs from instance 5? Reasoning cannot replace evidence nobody collected. Solid blue = observed evidence. Dashed = hypothesis not yet verified.
Dashed boxes are hypotheses. Solid boxes are observed evidence. Only the fix that was verified counts as resolved.

A good workflow alternates reasoning with observation:

  1. Generate hypotheses, and say which evidence would confirm or refute each.
  2. Collect that evidence (logs, metrics, traces).
  3. Update the hypotheses. Drop what the evidence refutes.
  4. Apply a fix, then verify the symptom is gone.

More reasoning helps you use evidence. It cannot create evidence that was never collected.

A One-Line Change and a System-Wide Refactor Do Not Need the Same Strategy

Part III · Real engineering scenarios

Reasoning needs tend to grow with coupling, uncertainty and consequence narrow, local broad, uncertain 1 · Rename a local variable • scope-aware rename • compiler stays happy • tests unchanged 2 · Refactor auth middleware • caller dependencies • security implications • backward compatibility • test coverage 3 · Investigate a post-deploy regression • code diffs • logs and errors • test results • recent changes No effort level is universally right for a category Treat the spectrum as a starting hypothesis and measure on your own tasks.
Three coding-agent tasks along an illustrative spectrum of coupling, uncertainty and consequence.
  • Rename a local variable. Mostly mechanical. A compiler or the test suite settles it.
  • Refactor authentication middleware. Reasoning has to cover callers, security implications, backward compatibility and the tests that prove behavior is preserved.
  • Investigate a regression after deployment. Reasoning is only as good as what it can read: the diff, the logs, the test results and the recent change history.

Opinion Treat the ordering as a starting hypothesis, not a rule. A rename can be risky in a dynamic language, and a hard regression can end up needing evidence more than deliberation.

Choose the Right Mechanism for the Problem

Part III · Real engineering scenarios

When an agent gets something wrong, “think harder” is one of several levers, and not always the right one.

The agent result is wrong or stuck What actually failed? Shallow analysis facts were available Raise effort more careful comparison Missing facts not in context Add tools or search repo search, fetch docs Plan contradicted a test or log disagrees with the hypothesis Iterate again revise with new evidence Task too broad many parts, unfocused Decompose the task better orchestration These interventions complement each other Example: add a search tool, allow one more iteration, and raise effort for the one hard step. Not sure which one failed? Read the trace and add a verification step before changing settings.
Map the failure mode to the intervention. The interventions combine; they do not compete.
  • If the model has not weighed the available hypotheses, more reasoning effort may help.
  • If it lacks repository information, a search tool will help more than more thinking.
  • If a test result contradicts the initial hypothesis, another agent iteration with that result is the right move.
  • If the task is too broad, decomposition helps more than any single setting.

A Convincing Explanation Is Not Proof of Correctness

Part III · Real engineering scenarios

Models can produce plausible but wrong conclusions because of incomplete information, faulty assumptions or other limits. The fluency of an explanation says little about whether it is true.

Documented Research on reasoning models found that their stated reasoning often omits factors that actually influenced the answer, so reading the explanation is not a reliable audit (Chen et al., 2025).

Plausible, but unverified Model proposal fluent, confident Reads well no check ran Accepted on trust status: unknown Supported by evidence Model proposal diff + explanation Automated tests Type check and lint Review the diff Logs and run output Acceptance criteria Security checks, if relevant Pass evidence recorded Fail feedback to the model revise and re-check Check quality is independent of how deep the reasoning looked.
Top: plausible but unverified. Bottom: the same proposal checked by executable evidence, with failures fed back.

For coding agents, verification means concrete mechanisms: automated tests, type checking and linting, reading the generated diff, inspecting logs and execution results, checking acceptance criteria, and running security checks where appropriate. Evaluate the quality of those checks independently of how deep the reasoning looked.

Quality, Latency, and Cost

Part IV · Production systems

Quality correctness, completion, robustness Latency response and task time Cost model use, tool calls, cost per success A B C Illustrative workloads A · Interactive autocomplete leans toward latency B · Overnight migration agent leans toward quality C · High-volume classification leans toward cost Positions are conceptual. They are not measurements. There is no single universal metric: you choose the trade-off per workload.
Three dimensions pull against each other. Where a workload sits is a product decision. Positions here are conceptual.
  • Quality: correctness, task completion, robustness and edge-case handling.
  • Latency: response time, and the total time to complete a task.
  • Cost: model usage, reasoning-related inference cost where it applies, tool calls, and above all the total cost per successful task.

The goal is not maximum quality at any price, or minimum latency at any cost. It is an acceptable trade-off for the workload and its business requirements. The three do not reduce to one universal score.

Cost has three layers, and each answers a different question:

Layer What it counts Where the number comes from
Model call Input, cached input, output and reasoning tokens, times the provider’s per-token prices The usage object of each response, and the provider’s pricing page
Agent run Every model call in the run, plus tool execution, retries, sandbox or CI time, and human review Your traces and infrastructure bills
Task outcome Total spend and time, divided by the tasks that passed verification Your evaluation results

Effort acts on the first layer, but the decision belongs to the third. A setting that makes each call cheaper can make the task more expensive if runs fail more often and need retries, or a person, to finish.

Illustrative Invented numbers, to show the arithmetic only. Setting A costs $0.40 per run and passes verification on 50 of 100 runs: $40 spent, $0.80 per successful task. Setting B costs $0.60 per run and passes on 80 of 100: $60 spent, $0.75 per successful task. B is 50% more expensive per run and cheaper per success, and the gap widens once you count the person who finishes each failed task. With different numbers A wins, which is why you measure.

Do Not Default to Maximum Effort for Every Request

Part IV · Production systems

An adaptive strategy treats effort as a per-task decision: receive the task, assess complexity, uncertainty and risk, select a supported setting, execute, verify, and escalate, retry or gather evidence if verification fails.

Receive task Assess complexity, uncertainty, risk rules · classifier · model router Router can err measure it Select a supported setting effort level or model Lower effort routine, low risk Medium effort typical work Higher effort hard or high risk Execute the task Verify the result tests, checks, acceptance criteria pass Done fail Escalate: retry, raise effort, or gather evidence then execute again
Route by task, verify the result, and escalate on failure. The dashed arrow shows the escalation loop.

Routing can use rules, a classifier, a model-based router, or a feedback-driven policy.

Documented Research on test-time compute found that allocating inference effort adaptively per prompt can outperform spending it uniformly (Snell et al., 2024). That is an argument for adaptive allocation in general, not a promise for your workload.

Two cautions. Task classification can itself be wrong, so evaluate the router like any other component. And use only effort levels the chosen model or API supports.

A Reference Architecture for the Agent Loop

Part IV · Production systems

Loop controller · your harness, not the model Checked before every model call: step, token and time budgets · repeated-action detector · stop rules tool result + status (ok · error · timeout) re-enters context Context task + history Model call effort acts here Decision answer or tool? Tool policy allow · ask · deny Tool runner timeout · retry Verifier tests · types · spec Done verified + traced Escalate to a human risky action · budget · stuck loop answer pass needs approval fail: the failing checks re-enter context as feedback Trace every step, one span each model call: model, effort, input / output / reasoning tokens, latency · tool call: name, status, duration verification: checks run, result · run: iterations, retries, stop reason, failure class Classify every failed run Reasoning facts present, wrong plan Tool execution error, timeout, bad data Orchestration loop, lost context, budget Verification check missing or wrong
A proposed harness, not provider behavior. Effort acts inside one box; everything else is your code.

Proposal The loop on this slide is my recommendation for a production harness. No provider ships it as is.

Concern Proposed control
Runaway loops Step, token and wall-clock budgets, checked before every model call
Unproductive loops Stop when the same tool call with the same arguments repeats, or the same check keeps failing
Tool failures and timeouts A timeout per tool. Retry only idempotent tools. Return errors and timeouts to the model as results; do not hide them
Consequential actions A policy per tool: allow read-only tools, ask a person before writes, deploys, deletes or payments, deny the rest. Run code in a sandbox
Context Append each tool result with its status; truncate large outputs and keep a pointer to the full artifact
Observability One trace span per model call, tool call and check, recording the effort setting and token usage
Final result Accept only what passes the verifier
const LIMITS = { maxSteps: 30, maxOutputTokens: 400_000, maxWallClockMs: 15 * 60_000, maxRepeats: 3 };

async function runTask(task: Task): Promise<RunResult> {
  const ctx = newContext(task);
  const startedAt = Date.now();
  let outputTokens = 0;

  for (let step = 1; step <= LIMITS.maxSteps; step++) {
    if (outputTokens > LIMITS.maxOutputTokens || Date.now() - startedAt > LIMITS.maxWallClockMs) {
      return { outcome: "stopped", reason: "budget_exhausted", suspected: "orchestration" };
    }

    // The only place the effort setting acts.
    const turn = await trace("model_call", () => callModel(ctx, { effort: chooseEffort(task) }));
    outputTokens += turn.usage.outputTokens;

    if (turn.kind === "answer") {
      const check = await trace("verify", () => verify(task, turn.answer));
      if (check.passed) return { outcome: "verified", answer: turn.answer, check };
      ctx.append({ type: "verification_failed", findings: check.findings });
      continue;
    }

    const call = turn.toolCall;
    if (repeatCount(ctx, call) >= LIMITS.maxRepeats) {
      return { outcome: "stopped", reason: "no_progress", suspected: "reasoning" };
    }

    const policy = toolPolicy(call); // "allow" | "ask" | "deny"
    if (policy === "deny" || (policy === "ask" && !(await askHuman(call)))) {
      ctx.append({ type: "tool_denied", call });
      continue;
    }

    // Retry only idempotent tools; errors and timeouts go back to the model as results.
    const result = await trace("tool_call", () =>
      runTool(call, { timeoutMs: 60_000, retries: call.idempotent ? 2 : 0 }),
    );
    ctx.append({ type: "tool_result", call, result });
  }

  return { outcome: "stopped", reason: "step_limit", suspected: "orchestration" };
}

Verified This loop passes tsc --strict (TypeScript 5.9.3) with stub declarations for the helpers it calls (callModel, verify, runTool and the rest). I also ran it on Node.js 26.9.0 against a scripted fake model and fake tools, and 8 of 8 control-flow tests passed: verified answer, verification feedback, repeated-call stop, step limit, token budget, denied and unapproved tools, no retries for non-idempotent tools, and tool timeouts returned to the model. The wall-clock budget was not tested. No real model was called, so this shows the control flow works, not how any model behaves inside it. The limits are placeholders to tune.

Documented Anthropic recommends the core of this design: agents should get “ground truth” from the environment at each step, and should include stopping conditions “such as a maximum number of iterations” (Building effective agents).

Label every failed run with the class that broke first, by reading its trace. Reasoning: the facts were in context and the plan was still wrong. Tool execution: an error, a timeout, or bad output. Orchestration: lost context, a loop, or an exhausted budget. Verification: a check was missing, flaky or wrong. The suspected field in the code is only a first guess; the trace decides.

Opinion Only the first class is a reason to try more effort. The other three are fixed in the harness.

Measure Whether Higher Effort Actually Helps

Part IV · Production systems

Build an evaluation set that represents your real workload: real tasks, each with a verifier written before you look at any results. Then compare the settings your model supports under conditions that differ only in effort.

TEMPLATE · no measured data · replace every "—" with your own experiment results Verified task success — % First-attempt success — % Test pass rate — % Latency P50 — s Latency P95 — s Cost per successful task $ — Average retries per task — Tool calls per task — Agent wall-clock time — s Success vs. cost, one marker per effort setting verified success cost per successful task placeholder positions, not data Protocol checklist • Settings: only those the model supports • Same tasks, same tools, same budget • N repeated trials per task and setting • Report intervals across runs, not one run • Judge success by checks, not answer length
A template, not results. Every value is a dash because no experiment is being reported here.

Hold everything else constant. Pin and record:

  • the model snapshot ID and the SDK version;
  • the system prompt, tool definitions and harness version;
  • the context each task starts from: repository commit, fixtures, retrieved documents;
  • the output cap (max_output_tokens or max_tokens) and the loop budgets from slide 15;
  • the verifier and its pass criteria.

Change only the effort value, use only values the model documents, and interleave the settings in time so that a provider-side change or a slow hour does not land on one setting.

Run each task several times per setting. Two runs of the same prompt can differ, so one run per task measures luck as much as the setting. Fix the number of runs before you start, compare settings task by task on the same tasks, and report an interval, not only an average. For success rates, a binomial interval such as Wilson’s works; for latency and cost, bootstrap over tasks.

Opinion Five runs per task per setting, over 30 to 50 tasks, is a reasonable first pass. If the intervals of two settings overlap heavily, you have not shown a difference yet; add tasks or runs before you conclude anything.

Do not judge success by answer length or reasoning-token count: both measure effort spent, not quality delivered.

A Benchmark Template You Can Fill In

Part IV · Production systems

Define every metric before the first run, so the numbers cannot be chosen after you see them:

Metric Definition Watch for
Verified task success rate Runs whose final result passed the verifier, divided by all runs The headline number
First-attempt success rate Runs that passed on the first answer, with no verification feedback and no retries, divided by all runs How much of the success comes from the loop’s recovery
Test pass rate Passing tests divided by tests run, at the end of each run Partial credit; never a substitute for verified success
Latency, median and P95 Wall-clock time from task start to final result, per run P95 needs many runs before it means anything
Cost per successful task Total spend over all runs, failed ones included, divided by verified successes Add tool and infrastructure cost where you can
Average retry count Model calls made after a failed check or a tool error, per run Kept separate from total model calls

Illustrative A template, not results. Every cell is a dash because no experiment is reported in this article.

Setting Runs Verified success (95% CI) First-attempt success Test pass rate Latency P50 / P95 Cost per success Avg retries
low — — — — — / — — —
medium — — — — — / — — —
high — — — — — / — — —

Publish it with the run date, model snapshot, SDK versions, task-set version, verifier version and runs per task.

Why measure instead of assuming? Higher effort can help on tasks that need more deliberation, and it also tends to add latency and output tokens. Which effect wins depends on the model, the task mix and the strength of your verifier, and it can change when the model does.

Documented Anthropic’s effort guide says “the impact of effort levels varies by task type” and advises you to “evaluate performance on your specific use cases before deploying” (Anthropic: Effort). OpenAI says supported values depend on the model (OpenAI: Reasoning models).

Make Reasoning Effort an Explicit Engineering Decision

Part IV · Production systems

Where a provider supports it, effort is a request parameter. Here is an OpenAI Responses API request in the documented shape, with the reasoning-token count read back from the response:

import OpenAI from "openai";

const client = new OpenAI();

const response = await client.responses.create({
  model: "gpt-6-astra",
  reasoning: { effort: "high" }, // the setting this slide is about
  input: "Analyze this production bug...",
});

console.log(response.output_text);
console.log(response.usage?.output_tokens_details.reasoning_tokens);

Documented The OpenAI guide shows reasoning: { effort } on responses.create, lists none, minimal, low, medium, high, xhigh and max, and says supported values depend on the model. GPT-6 Astra, the model the guide’s own example uses, rejects none with HTTP 400 (OpenAI: Reasoning models); its model page lists low through max (GPT-6 Astra).

The setting expresses how much reasoning to apply. It does not return the model’s private reasoning; for that, only a summary is available, opt-in.

The same request on Anthropic’s Messages API and on the Gemini Interactions API:

import Anthropic from "@anthropic-ai/sdk";

const anthropic = new Anthropic();

const message = await anthropic.messages.create({
  model: "claude-opus-5-5",
  max_tokens: 16000, // thinking counts toward this cap
  output_config: { effort: "high" },
  messages: [{ role: "user", content: "Analyze this production bug..." }],
});

console.log(message.usage.output_tokens_details?.thinking_tokens);
import { GoogleGenAI } from "@google/genai";

const gemini = new GoogleGenAI({});

const interaction = await gemini.interactions.create({
  model: "gemini-3.8-flash",
  input: "Analyze this production bug...",
  generation_config: { thinking_level: "high" },
});

console.log(interaction.output_text);
console.log(interaction.usage?.total_thought_tokens);

Verified All three snippets pass tsc --strict (TypeScript 5.9.3) against openai 7.42.0, @anthropic-ai/sdk 1.1.0 and @google/genai 2.30.0. As a negative control, an unknown effort value, effort placed at the top level of an Anthropic request, adaptive passed as an effort value, and camelCase thinkingLevel on the Interactions API each failed the same check. A type check cannot tell whether a model name exists or which values a model accepts, and none of these requests was sent.

Similar names, different contracts. There is no shared format:

Provider and API Request field Values in the docs Reasoning usage field Source
OpenAI, Responses reasoning: { effort } none, minimal, low, medium, high, xhigh, max usage.output_tokens_details.reasoning_tokens Reasoning models
Anthropic, Messages output_config: { effort } low, medium, high, xhigh, max usage.output_tokens_details.thinking_tokens Effort, Steering thinking
Google, Interactions generation_config: { thinking_level } minimal, low, medium, high usage.total_thought_tokens Thinking
Google, generateContent config.thinkingConfig.thinkingLevel in the JavaScript SDK the same four levels usageMetadata.thoughtsTokenCount API reference; field placement checked in the SDK types

Each list is the union across models; a given model accepts only part of it. And equal names do not mean equal behavior. high on one model is not calibrated against high on another, even from the same vendor.

Documented Anthropic says Claude Sonnet 5.5’s effort levels are recalibrated, so a level “doesn’t produce the same amount of thinking as the same level on Claude Sonnet 5”, and recommends a fresh effort sweep (Anthropic: Effort).

A Starting Heuristic for Choosing Effort

Part V · Practical takeaways

Opinion This matrix is my engineering heuristic for a first configuration, not a rule and not vendor guidance. Validate whatever it suggests against your own workload.

Factor Points to lower effort Points to higher effort Often the better lever
Task complexity One clear path, a local change Many interacting parts, several plausible paths Decompose a task that is broad rather than deep
Uncertainty and ambiguity A precise spec Competing hypotheses to weigh Ask a clarifying question when the spec, not the reasoning, is ambiguous
Context Everything needed is in the prompt Complete but intricate context Retrieve files, logs or docs when facts are missing
Need for outside information None Not a reason on its own Call a tool; effort cannot produce facts
Cost of a wrong result Cheap to undo Expensive or irreversible Human approval and stronger checks, alongside effort
Automated verification Strong, fast tests, so iterating is cheap Weak or no checks, so the first answer matters more Write the missing test before raising effort
Latency and cost budget Interactive, high volume, tight budget Offline or batch work with high value per task Route per task (slide 14) instead of one global setting

How to use it: start each route at the level the provider’s guidance recommends for that kind of workload, or at the documented default. Raise effort only on routes where traced failures are mostly reasoning failures (slide 15) and the verifier is strong enough to show a difference. Lower it where verified success holds at the lower level. Then run the benchmark from slides 16 and 17, and let the numbers overrule the table.

Before Increasing Thinking Effort, Ask These Five Questions

Part V · Practical takeaways

  1. Is the task genuinely complex or uncertain?If it is routine and checkable, extra reasoning mostly adds cost.
  2. Is the model struggling to reason, or does it lack critical information?Missing facts need retrieval or a tool, not more thought.
  3. Would another tool or a verification step help more?A test run often beats another paragraph of deliberation.
  4. Is the expected quality gain worth the extra latency and cost?Compare cost per successful task, not cost per request.
  5. Have I measured the difference on representative real tasks?If not, treat the answer to the other four as a guess.

Keep this as a reusable decision card: if you cannot answer yes to question 1 and question 5, you probably should not raise the setting yet.

The Best Agent Is Not the One That Thinks the Most. It Is the One That Allocates Effort Where It Matters.

Part V · Practical takeaways

Agent Quick path enough for easy tasks Deliberate path reasoning where it matters Evidence path search, read, run selected for this task Verify Result Allocate effort where it matters, then check the result.
Choose the path the task needs, then check the result before accepting it.
  1. Thinking effort can influence how a model processes a task. It does not guarantee correctness.
  2. Reasoning, tool use, context retrieval and verification solve different problems.
  3. The right configuration comes from evaluating your own workload.

Instead of asking “How can I make the AI think more?”, ask “How much reasoning does this task need to be completed reliably?”

References and further reading

All provider pages were last checked on October 22, 2026.

All slides

  1. Understanding Thinking Effort in AI Agents
  2. Same Model. Same Prompt. Different Outcomes?
  3. Higher Thinking Effort Does Not Automatically Mean Better Intelligence
  4. Thinking Effort Is About Reasoning Resources, Not Just Waiting Longer
  5. Task Complexity Should Influence Reasoning Effort
  6. Model Reasoning and Agent Execution Are Different Things
  7. An AI Agent Is More Than a Model
  8. Different Effort Levels Represent Different Trade-Offs
  9. When Is Higher Thinking Effort Worth It?
  10. A One-Line Change and a System-Wide Refactor Do Not Need the Same Strategy
  11. Choose the Right Mechanism for the Problem
  12. A Convincing Explanation Is Not Proof of Correctness
  13. Quality, Latency, and Cost
  14. Do Not Default to Maximum Effort for Every Request
  15. A Reference Architecture for the Agent Loop
  16. Measure Whether Higher Effort Actually Helps
  17. A Benchmark Template You Can Fill In
  18. Make Reasoning Effort an Explicit Engineering Decision
  19. A Starting Heuristic for Choosing Effort
  20. Before Increasing Thinking Effort, Ask These Five Questions
  21. The Best Agent Is Not the One That Thinks the Most. It Is the One That Allocates Effort Where It Matters.

Keyboard: left and right arrows or Page Up and Page Down move between slides, Home and End jump to the first and last, F toggles full screen.

Also available in: Tiếng Việt · 日本語