The Hidden Dangers of Agentic RAG: Retrieval Thrash, Tool Storms, and Context Bloat
Agentic RAG, a powerful tool for complex queries, can be fragile and prone to failure in production. In this article, we’ll explore the three failure modes that can occur: retrieval thrash, tool storms, and context bloat. We’ll discuss the root causes, how to detect these failures early, and provide mitigations and a decision framework to help you avoid these pitfalls.
What Agentic RAG Is (and What Makes It Fragile)
Classic RAG retrieves once and answers. If retrieval fails, the model has no recovery mechanism. It generates the best output it can from whatever came back. Agentic RAG adds a control layer on top. The system can evaluate its own evidence, identify gaps, and try again.
The agent loop runs roughly like this: parse the user question, build a retrieval plan, execute retrieval or tool calls, synthesise the results, verify whether they answer the question, then either stop and answer or loop back for another pass. This is the same retrieve → reason → decide pattern described in ReAct-style architectures, and it works well when queries require multi-hop reasoning or evidence scattered across sources.
However, the loop introduces a core fragility. The agent optimises locally. At each step, it asks, “Do I have enough?” and when the answer is uncertain, it defaults to “get more”. Without hard stopping rules, the default spirals. The agent retrieves, more, escalates, retrieves again, each pass burning tokens without guaranteeing progress.
Failure Mode Taxonomy: What Breaks and Why
Retrieval Thrash: The Loop That Never Converges
Retrieval thrash is the agent repeatedly retrieving without settling on an answer. In traces, you see it clearly: near-duplicate queries, oscillating search terms (broadening, then narrowing, then broadening again), and answer quality that stays flat across iterations.
A concrete scenario. A user asks: “What is our reimbursement policy for remote employees in California?” The agent retrieves the general reimbursement policy. Its verifier flags the answer as incomplete because it does not mention California-specific rules. The agent reformulates: “California remote work reimbursement.” It retrieves a tangentially related HR document. Still not confident. It reformulates again: “California labour code expense reimbursement.” Three more iterations later, it has burned through its retrieval budget, and the answer is barely better than after round one.
Tool Storms and Context Bloat: When the Agent Floods Itself
Tool storms and context bloat tend to occur together, and each makes the other worse.
A tool storm occurs when the agent fires excessive tool calls: cascading retries after timeouts, parallel calls returning redundant data, or a “call everything to be safe” strategy when the agent is uncertain. One startup documented agents making 200 LLM calls in 10 minutes, burning $50–$200 before anyone noticed. Another saw costs spike 1,700% during a provider outage as retry logic spiralled out of control.
Context bloat is the downstream result. Massive tool outputs are pasted directly into the context window: raw JSON, repeated intermediate summaries, growing memory until the model’s attention is spread too thin to follow instructions.
How to Detect These Failures Early
You can catch all three failure modes with a small set of signals. The goal is to make silent failures visible before they appear in your invoice.
Quantitative signals to track from day one:
- Tool calls per task (average and p95): spikes indicate tool storms. Investigate above 10 calls; hard-kill above 30.
- Retrieval iterations per query: if the median is 1–2 but p95 is 6+, you have a thrash problem on hard queries.
- Context length growth rate: how many tokens are added per iteration? If context grows faster than useful evidence, you have bloat.
- p95 latency: tail latency is where agentic failures hide, because most queries finish fast while a few spiral.
- Cost per successful task: the most honest metric. It penalises wasted attempts, not just average cost per run.
Qualitative traces: force the agent to justify each loop. At every iteration, log two things: “What new evidence was gained?” and “Why is this not sufficient to answer?” If the justifications are vague or repetitive, the loop is thrashing.
Mitigations and Decision Framework
Each failure mode maps to specific mitigations.
For retrieval thrash: cap iterations at three. Add a “new evidence threshold”: if the latest retrieval does not surface meaningfully different content (measured by similarity to prior results), stop and answer. Constrain reformulation so the agent must target a specific gap.
For tool storms: set per-tool budgets or rate limits. Implement compression strategies for tool outputs. Use “selective” retrieval configurations that target top-1 or top-5 results.
For context bloat: set a context token ceiling relative to your model’s effective window. Implement a wall-clock timebox on every run. Use a “stuff everything” retrieval configuration that treats top-1 as a reasonable default.
By understanding these failure modes and implementing mitigations, you can avoid the pitfalls of agentic RAG and ensure that your system is robust and reliable in production.







