Failure to Ask for Clarification
Agent Proceeds Despite Ambiguity
AI reasoning failures — flawed planning, decomposition, and logic in agent decision-making
36 patterns
AI reasoning failures — flawed planning, decomposition, and logic in agent decision-making. We've tracked 36 distinct AI Reasoning Failure patterns across production AI agent deployments — most commonly in Reasoning and Thought, Accuracy, Multi Agent Systems systems. One recurring example: Failure to Ask for Clarification — Agent Proceeds Despite Ambiguity
Each pattern below documents the specific failure mode, why it happens, and how teams have mitigated it in practice — use this page as a reference when building guardrails, writing evals, or debugging an agent that's already misbehaving in this way.
Agent Proceeds Despite Ambiguity
Agent Violates Domain-Specific Constraints
Agent Breaks Down Task Incorrectly
Agent Loses Focus on Original Objective
Agent Fails to Follow Specific User Requirements
Two or more concurrent A/B tests, each rolling out a different model version or configuration to a cohort of users, overlap in ways their designers didn't account for — a user gets assigned to conflicting cohorts across tests, or a shared downstream system (a cache, a session, a fine-tuned classifier) is implicitly tuned for one test's model and breaks for the other's. The result is inconsistent user-facing behavior that isn't explained by either experiment's own design, and that neither experiment's metrics dashboard is set up to detect since each only tracks its own cohort in isolation.
A provider ships a new model version, the team's existing evaluation suite passes it (or the update is adopted without a full re-run), and a real behavior regression on a specific task type ships to production undetected — because the eval suite doesn't cover that task type, uses stale test cases the new model has effectively memorized, or measures aggregate pass rate in a way that dilutes a regression concentrated in one narrow slice of traffic. The team only learns about the regression from user complaints or downstream error spikes, well after the update is already serving all production traffic.
A routing layer selects a model for a task without verifying that the model actually supports a capability the task requires — vision input, function/tool calling, a long enough context window, structured output mode — and the mismatch is discovered only when the call fails or, worse, silently ignores the unsupported input. Routers optimized for cost or latency often select on those axes alone, treating capability support as a given rather than a routing constraint to check.
An agent hands a task to the underlying model whose combined complexity — number of constraints, depth of multi-step reasoning, size of working set held "in mind" across a long tool-calling loop — exceeds what that model can reliably handle in a single pass. Unlike a hard error, the failure is silent: the model still produces a fluent, well-formatted answer, but it drops constraints, skips reasoning steps, or produces a plausible-looking but wrong result. Nothing in the response signals that the task was too much for the model.
As an agent's conversation or retrieved context grows toward the model's context window limit, the model's behavior shifts in ways that are never announced: recall of early-turn facts degrades, instruction-following becomes less reliable, and the model increasingly favors recently-seen tokens over earlier ones ("recency bias"). Because the API returns a normal, well-formed response at every context length, the agent has no signal that it just crossed into a degraded-quality regime.
A cost-optimizing router automatically shifts traffic from a higher-quality (and higher-cost) model to a cheaper one — based on budget pressure, rate limits, or a tuning change — without any mechanism to measure or surface the resulting quality impact. The downgrade is deliberate and often reasonable as a cost decision, but it is invisible: no dashboard, alert, or user-facing signal distinguishes "answered by the model we validated for this task" from "answered by a cheaper substitute picked to save money."
The underlying model exhibits systematic differences in its outputs correlated with demographic or protected attributes — name-implied ethnicity, gender-coded pronouns, geography, or dialect — that leak into agent decisions the model wasn't explicitly asked to make on that basis. Because the bias is statistical rather than an explicit rule, it survives even when the agent's prompt contains no discriminatory instruction, and it recurs consistently enough to produce a measurable disparate pattern across many decisions.
A system prompt's rules — tone constraints, formatting requirements, forbidden topics, role boundaries — are followed reliably in the first few turns of a conversation but are followed progressively less reliably as the conversation grows longer, even though the system prompt itself never changes and is technically still present in every call. The agent has no mechanism to notice that adherence has dropped, since each individual response still looks like a normal, fluent reply.
The model answers questions about facts, prices, APIs, regulations, or current events using knowledge frozen at its training cutoff, but presents the answer with the same confident, unhedged tone it would use for a fact that is still current. The agent has no built-in awareness of which of its facts have gone stale since training, so it cannot distinguish "this is still true" from "this was true as of my cutoff" without an explicit check.
A router distributing calls across multiple model instances or provider endpoints (for throughput or redundancy) continues sending a disproportionate share of traffic to an instance that has become slow, degraded, or partially unhealthy, because the balancer's routing signal (round-robin, static weights, or a stale health check) doesn't reflect the instance's actual current condition. Requests routed to the degraded instance experience elevated latency or error rates while the balancer keeps treating it as a fully healthy peer.
An agent requests a strictly-formatted response (JSON matching a schema, XML with specific tags, a fixed-width table) and the model complies most of the time, but intermittently deviates — adding prose before the JSON, using a slightly different key name, wrapping output in markdown code fences one call and not the next, or emitting a subtly malformed structure. Because the deviation is intermittent rather than constant, it passes casual testing and only surfaces as parse failures at some rate in production.
The model produces different reasoning chains and different final conclusions when given logically identical inputs that differ only in superficial ways — order of options, phrasing, irrelevant surrounding text, or which call happens to sample a different token early in the chain of thought. An agent that relies on the model's reasoning to make a consistent decision (approve/deny, rank A over B, classify as X) gets a decision that isn't actually a function of the underlying facts, just of incidental surface variation.
The model refuses a request in one call and complies with a substantively identical or even more sensitive request in another, with no discernible policy logic explaining the difference — only surface phrasing, conversation framing, or incidental sampling variation. An agent that depends on the model's own judgment as its safety boundary inherits this unpredictability: the same downstream user action can be blocked or allowed depending on factors the agent's designers never intended to matter.
A model provider ships new versions, deprecations, and behavior changes on its own release cadence — sometimes with weeks of notice, sometimes with days — while the team consuming the model has its own validation, staged-rollout, and change-management cadence built around a slower, more deliberate release rhythm. When the provider's cadence outpaces the team's, the team is forced to choose between rushing validation to keep up or falling behind on a deprecation deadline, and either choice degrades the quality of the update process itself.
The same logical task, submitted multiple times under ostensibly the same routing rules, gets sent to different underlying models across runs — because the router's selection logic incorporates a non-reproducible factor (current load, a rolling A/B assignment, a randomized tie-break, cache state) without the calling agent or user being aware selection could vary at all. Results differ run to run not because the task is ambiguous, but because a different model actually answered it each time.
An agent configured with a specific persona — tone, formality level, brand voice, characteristic phrasing — maintains that persona faithfully at the start of a session but gradually drifts toward a generic, default assistant voice as the conversation lengthens, without any instruction telling it to change. The drift is slow enough that no single turn looks obviously wrong, but a comparison of turn 2 to turn 40 shows a clearly different "character" giving the responses.
A router changes which underlying model serves a conversation partway through, either because of a routing rule that re-evaluates per-turn (cost tiering by turn complexity, load-based reassignment, a canary rollout without session affinity) or a failover event, and the new model doesn't share the exact conversational habits, persona adherence, or implicit context-handling of the one that served earlier turns. The user experiences a jarring discontinuity — a change in tone, a re-asked question, a forgotten instruction — that looks like the agent "forgetting" something, when actually a different model picked up the conversation.
The model generates answers in a uniformly confident tone regardless of how certain it actually is about the content, so an agent (and the end user) cannot distinguish a well-grounded answer from a guess by reading the response alone. Low-confidence, borderline, or fabricated content is phrased with the same declarative certainty as well-established facts, removing the natural signal a human expert would give ("I'm not sure, but...") that would otherwise prompt verification.
A model provider ships a new version that improves aggregate benchmark performance, but the underlying training run — a different data mix, a new round of RLHF/preference tuning, a changed safety-alignment pass — trades away capability on a narrower task the agent actually depends on. The new version isn't broken or degraded across the board; it is specifically worse at the exact behavior a downstream agent was built around (e.g. terse structured extraction, a particular reasoning style, tolerance for ambiguous instructions), while looking equal or better on every metric the provider publishes. This pattern is about the regression itself — the fact that capability trade-offs are an inherent, not incidental, consequence of retraining a model — distinct from whether an organization's own evaluation pipeline is equipped to catch it.
After a model version update is confirmed to have caused a production regression, the time between confirming the problem and actually reverting to the prior version is far longer than reverting a normal code deploy would take. Unlike a code rollback (redeploy the previous artifact), reverting a model version can require re-requesting access to a snapshot the provider is already sunsetting, re-running a change-approval process because "swap the model" is treated as a higher-risk action than it should be, or untangling in-flight state (cached responses, multi-turn conversations, fine-tuned adapters) that already assumes the new version. The delay between "we know this is bad" and "we're back on the known-good version" is where most of the damage from a model regression actually accumulates.
A router selects a model version that doesn't support a specific feature the calling code assumes is available — a particular tool-calling schema format, a structured-output mode, a system-message convention, or a token/parameter that a newer or older version handles differently — causing the call to fail, silently ignore part of the request, or behave unexpectedly. The mismatch arises because routing logic treats models within a family as interchangeable by name/cost/latency, without tracking per-version feature support as a routing constraint.
A team deliberately pins their agent to a specific, named model snapshot (e.g. an API model string like `gpt-x-2025-01` or a fixed checkpoint hash) to get reproducible, stable behavior — and then the provider deprecates or sunsets that exact snapshot on its own timeline, months later, forcing an unplanned migration. The pin was the right call at the time (it protected the agent from exactly the kind of silent behavior drift that floating model references cause), but the pin has an expiration date the team didn't track, and when the provider's sunset date arrives, every request against that model string starts failing or auto-redirects to a newer version the team never evaluated.
Multiple independent agents reach the same wrong conclusion, and the system mistakes that agreement for a confidence signal -- escalating the decision to production because all agents making the identical mistake looks like verification, not error.
Over-Reliance Causes Human Skill Degradation
Agent Underestimates Task Complexity
Agent Stops Before Task is Complete
Agent's Reasoning Doesn't Match Its Actions
Agent Breaks Out of Assigned Role
Agent Cannot Recognize or Fix Its Mistakes
An agent references a model by a floating alias — a name like "latest," a bare model family name without a snapshot suffix, or a provider-managed default endpoint — rather than a pinned, immutable snapshot. The provider swaps the model backing that alias to a new version on its own schedule, with no code change, no deploy, and no action on the team's part. Because nothing in the team's own systems changed, none of their normal change-detection tooling (deploy logs, git history, config diffs) has any record of the update, and behavior drift shows up looking like an unexplained, spontaneous regression rather than the direct consequence of a version change that in fact happened underneath them.
Agent Agrees with User Even When Wrong