Est.
FeaturesLong read

Detecting Reasoning Loops and Agent Failures in Transcripts

Agents fail silently where servers crash loudly, but their transcripts reveal why.

· 10 min read · Updated
Cover illustration for “Detecting Reasoning Loops and Agent Failures in Transcripts”
Features · September 5, 2026 · 10 min read · 2,243 words

An agent transcript has to be read differently than a server log, because the failures it records don't announce themselves the way a crash does. Traditional software fails loudly: a function throws an exception, a service returns a 500, a stack trace points to the exact line where things went wrong, and the error is local and easy to find. An agent can run for many steps, call tools, and return a confident, well-formatted answer that is quietly wrong, with nothing in the status codes to flag it. The reasoning steps that led to that answer may never even get written down in a form anyone can inspect. Openlayer's breakdown of this problem states that without a full decision trace, meaning which tools were called, what parameters went in, what came back, and how that output shaped the next step, there's no way to reconstruct what the agent did once something has gone wrong. Everything that follows in this piece starts from that gap: the tools built for conventional software are watching the wrong layer.

What a transcript contains and why its structure is readable

A transcript, properly captured, is a layered record rather than a flat printout. It preserves the reasoning the agent produced, the action it took as a result, and the observation it got back, in sequence, turn after turn. That structure is what makes it possible to read a transcript the way an engineer reads a trace: not line by line for content, but for shape. Across a run, certain fields carry almost all the diagnostic weight: which tool got called, the hash of the arguments passed to it, the class of the observation returned, how many steps have elapsed, the token cost of each step, how far the stated goal has actually progressed, and the latency of each span. None of these fields mean much in isolation. Patterns across them do.

The instinct to measure a transcript by its length, assuming a long run signals a struggling agent, turns out to be a trap. What separates agents that succeed from agents that fail is whether the agent gathers enough context before it starts editing and whether it spends effort validating its own work. That's a claim about structure, not duration. Reading a transcript well means tracing what came before what, where the agent doubled back, and where its choices stopped changing in response to new information, rather than counting steps and assuming more is worse.

This also explains why so much of this failure surface stays invisible to the tools teams already have running. Context loss, goal drift, and silent quality degradation are not all explicitly categorized under the same visibility labels in that table, but surfacing any of them requires looking at the trajectory itself rather than at any single event inside it, which is the argument for transcript reading as a discipline rather than a nice-to-have: the failure modes that matter most are, by construction, the ones standard monitoring cannot see.

Reasoning Loops: the Repeating-Argument Signature

Of the failure classes an agent transcript can reveal, reasoning loops are the most visible once you know what to look for, and the one most engineers already have some intuition about from debugging recursive functions. The signature in the trace is specific: the same tool name called again, an identical hash on the arguments, the same class of observation coming back each time, no movement on the stated goal, and a step count that keeps climbing anyway. That combination is almost never a coincidence. It splits into two subtypes that look similar on the surface but call for different fixes. The first is the kind people picture when they hear "loop": a tool returns something malformed or broken, and the agent, lacking any way to recognize that the same failure just happened, calls the identical tool with the identical arguments again, burning tokens and time on every repeat. The second is quieter and easier to miss. Agent paralysis happens when two tools return contradictory signals, or when nothing available to the agent satisfies its own success criteria, and the result is an agent that produces no output at all while every individual step still looks syntactically fine. FutureAGI's 2026 guide to loop detection draws this distinction out clearly: the retry loop is the obvious failure, the stalled loop is the quiet one, and the stakes differ by domain. In a coding agent, it means the system keeps patching the same file long after a test failure already explained what the real problem was.

The scale of this problem in coding agents specifically is not abstract. On SWE-Bench Verified, which is built from 500 real GitHub issues, repeated-edit loops on the same file are the single largest cause of unresolved runs among the frontier coding agents tested, and the iteration counts on those failed runs cluster at two to three times the median. That's a concrete, measurable signature: an agent stuck in a loop isn't just failing, it's failing at a pace you can spot against the rest of the distribution.

FutureAGI's practical contribution here is a map from six repetition signatures to their likely causes and the response each one calls for. The same tool called with the same arguments, returning a null result each time, usually means bad data or a missing record, and the right response is to stop after two identical failures, ask for a new identifier, or escalate rather than keep trying. The same underlying intent repeating across turns, phrased differently each time, signals a reasoning chain that's stuck, and the fix is a re-prompt or a model switch rather than more retries. An agent bouncing back and forth between two tools usually means the planner can't decide between them, and tightening the tool descriptions or adding a few-shot example to disambiguate solves it more reliably than adding guardrails after the fact. A long string of retries against what turns out to be a rate limit is its own category, distinct from a genuinely broken tool, and deserves its own backoff logic rather than being lumped in with schema failures.

A guardrail, a retry cap, a timeout, a hard stop, prevents the damage from spreading further across all six of these, but it doesn't tell you why the agent got stuck in the first place. Reading the transcript is what supplies the cause. Teams that only deploy caps end up capping the same failure repeatedly without ever fixing what triggers it, because the cap and the explanation are two different jobs. Dashboards built around iteration counts, token cost per trace, timeout rate, and eval-fail-rate broken out by cohort are what surface a loop in progress before it exhausts a budget, but spotting it is only half the job; the transcript tells you which of the six signatures you're looking at.

Diagram: Six Loop Signatures and Their Fixes. Visualizes: Visualize the six repeating-argument signatures that indicate a reasoning loop, each paired with its likely cause and the recommended response.

Tool-call errors and silent failures: the failure class that leaves no obvious trace

Reasoning loops are at least loud in their own way: a human watching step count climb against a flat goal will eventually notice. Tool-call failures are the opposite. They are the most common agent-specific failure mode in production, and the most damaging, precisely because a silent empty response, a tool returning HTTP 200 with an empty or null payload, gives neither the agent nor the person monitoring it anything to flag, even as it corrupts every step downstream that depends on that output. Openlayer's analysis breaks this failure class into four recurring subtypes. Silent empty responses are the tool returning HTTP 200 with empty or truncated data while the agent proceeds as though nothing happened. Chained corruption is what happens next: a bad call at one step corrupts the context for every step after it, all the way through to the end of the workflow.

The move that matters for anyone reading a transcript is separating the error event from the causal chain it sets off. Latitude's taxonomy makes this distinction directly: tool misuse is visible to LLM-first monitoring tools at the level of the error event itself, but the corruption that propagates from that point forward, step 2 onward, say, stays invisible to those same tools. A monitoring dashboard built around error events will show you that something happened at step 2. It will not show you that the following steps all reasoned over data that was never actually returned. Catching that requires inspecting the tool-call spans directly and checking the arguments passed against what the tool's schema actually requires, rather than waiting for an error to surface on its own. What to look for in the trace: an argument mismatch between the schema and what got passed, a tool call followed by a null or empty observation, later steps that proceed without acknowledging that the return was empty, and reasoning that cites data the tool never actually sent back.

This isn't a hypothetical risk confined to research benchmarks. Claude's job there was to read failed Gradle build logs and keep iterating on failed Gradle steps until it found a working solution. In that setup, a single misread build log doesn't just produce one bad output, it cascades into a whole sequence of incorrect edits, each one built on the last, because nothing in the pipeline forces the agent to double back and check whether the log it read actually said what it thought it said.

Diagram: How a Single Bad Tool Call Cascades Downstream. Visualizes: Show a linear pipeline of steps (Step 1 → Step 2 → Step 3 … Step N) where Step 2 returns HTTP 200 with an empty or null payload.

Context loss and goal drift: the slow-moving failures that only appear across turns

Where tool-call errors fail at a single step, context loss and goal drift fail across many. No individual step breaks. Each turn, read on its own, looks like a reasonable response to what came before it. The problem only becomes visible when you compare the agent's behavior across steps against what it was actually asked to do at the start, and by then the small deviations have already added up to an output that no longer serves the original intent, since a bad tool call at one step corrupts context for every step after it. Latitude's framework reports that context retention accuracy drops measurably in sessions exceeding 10 turns, and turn-level evaluation misses this failure because each individual turn looks reasonable in isolation.

Context loss happens mechanically, through window pressure. Latitude's own example makes this concrete. A user asks to schedule a meeting next week, avoiding Friday. By step 8, the agent is scheduling for the following month instead, because a scheduling conflict mentioned back at step 4 got weighted more heavily than the original request. The same pattern occurs in coding agents in a form that's easy to miss if you're only checking whether the final diff compiles. A large trajectory study characterizes this drift as a tactic shaped by the agent's own framework rather than a genuine adaptation to the task at hand.

Catching either failure requires an instrument built for the span of a session, not a single turn. That means continuous quality evaluation with recall checkpoints, actively verifying that constraints stated early in the session are still present in the agent's active context later on, paired with LLM-as-judge evaluation run against the full conversation history rather than just the most recent exchange. Neither check works without access to the full-session transcript. That is why Latitude's taxonomy places both context loss and goal drift outside what LLM-first monitoring tools can see. The failure lives in the relationship between turns, not inside any one of them.

Cascading corruption in multi-agent systems and the attribution problem it creates

The most structurally difficult failure class to diagnose is the one that spans agent boundaries rather than turns within a single agent. A bad tool call or a hallucinated output from one agent produces a result that looks entirely plausible to the agent downstream, which accepts it as valid input and reasons correctly from that point forward, over data that was wrong from the start. The output that comes out the other end is further corrupted, even though every step in producing it was logically sound given what it was handed. The original error may be three or four layers removed from where anyone is looking by the time the failure appears in a final response, invisible until the output is already wrong. Both Openlayer and Latitude single this out as the failure mode where the root cause is hardest to locate, because monitoring tools built to watch one agent at a time have nothing that correlates traces across the boundary where the corrupted value actually got handed off.

Diagnosing this kind of failure means reading the handoff record between agents rather than any single agent's transcript in isolation. That's the specific gap FlowFixer, published in July 2026, was built to close. It converts workflow executions into a unified symbolic trace and runs symbolic inference over that trace to derive executable specifications of how the system should behave, specifications that capture whether each node behaved correctly, how steps depended on each other in time, and what caused what. That structure supports attributing a failure to its actual origin and tracing its root cause before a repair patch ever gets generated, and FlowFixer reports a 71.3% repair success rate along with a meaningful gain in attribution accuracy over the baselines it was tested against. Once a pipeline involves more than one agent, no single transcript tells the whole story, so any monitoring setup has to be judged on whether it can follow a corrupted value across the boundary where it actually changed hands.

Sources

  1. AI Agent Failure Modes: Tool-Calling Errors, Infinite Loops & Propagation (July 2026)
  2. Beyond Resolution Rates: Behavioral Drivers of Coding Agent Success and Failure
  3. Detecting AI agent failure modes in production: A framework for observability-driven diagnosis
  4. Diagnosis-Driven Automatic Repair for Agentic Workflow via Symbolic Inference

More in Features