Why Agents Fail Differently Than Traditional Services
Traditional services fail in familiar ways: timeouts, 5xx responses, bad deploys, and saturated pools.
Search across all documentation pages
Traditional services fail in familiar ways: timeouts, 5xx responses, bad deploys, and saturated pools.
Agents add failure modes that look like progress while they burn budget: stuck loops, invented tool arguments, thrashing retries, and partial side effects that leave the world half-changed.
Reliability for agents is therefore about bounding autonomous work, not only keeping a process up.
A traditional request handler is usually:
An agent run is closer to:
That loop multiplies variance. The same user goal can take 2 turns or 40, call different tools, and leave different durable state.
| Failure mode | What you see | Why services rarely do this |
|---|---|---|
| Stuck loop | Same plan/tool signature forever | Code paths do not re-plan themselves mid-request |
| Hallucinated tool call | Unknown name, wrong schema, fake IDs | Hand-written clients call real methods |
| Cascading retries | Model + host + SDK all retry the same 503 | Single stack owns retry policy |
| Confident wrong success | Final answer claims work done; tools never succeeded | Deterministic code rarely invents completion |
| Partial multi-step mutation | Email sent, CRM update failed, ticket half-closed | Transactions or single handlers own one unit of work |
| Context poisoning | Bad tool dump steers every later turn | Stateless handlers do not accumulate garbage mid-request |
An agent worker can be "healthy" in Kubernetes while every run is:
Process liveness is necessary. It is not agent reliability.
Loops happen when the host never enforces no-progress rules.
Typical patterns:
The model is optimizing for task completion language, not your cloud bill. Without host caps (max turns, wall clock, signature budgets), thrash is rational from the model's local view.
See also stopping-condition thinking in Timeout Strategies for Long-Running Agent Steps and fundamentals stop rules.
Models invent:
In a typed microservice, this is a compile-time or client-generation error. In an agent, it is a runtime observation if you handle it well, or a crash/empty result if you do not.
Host duties:
Agent stacks often stack retries by accident:
| Layer | Typical retry |
|---|---|
| HTTP client / SDK | 2-3 on 429/503 |
| Tool wrapper | Soft retry on timeout |
| Model loop | New turn calling the same tool |
| Workflow/orchestrator | Job-level retry of the whole run |
| User / product UI | "Try again" button |
Each layer alone looks reasonable. Together they amplify load during an outage and create retry storms against the dependency you least want to hit.
Circuit breakers and shared budgets are how you collapse those layers into one policy. See Circuit Breakers for Agent Tool Calls.
If the host swallows errors or returns empty strings, the model often hallucinates success and continues with false premises.
If the host dumps huge stack traces, the model may fixate on noise and burn context.
Reliability is coupled to how tool results are shaped. Structured ok / error_type / retryable envelopes matter as much as infrastructure.
Multi-tool turns and multi-turn plans create distributed-workflow problems:
Traditional services use transactions, sagas, or idempotency keys by design. Agents need the same discipline at the tool boundary, not only in backend services the tools call.
For agents, a cost spike is an incident class.
A stuck loop can empty a monthly budget in an afternoon without a single process crash. SLOs and kill switches must include spend and tokens, not only error rate.
Handoffs add:
Treat the graph id as the reliability unit for kill, budget, and postmortem timelines.
LangGraph, CrewAI, OpenAI Agents SDK, Pydantic AI, and similar runtimes give loops, interrupts, and retries.
They do not invent your no-progress detector, tool circuit breaker, or cost SLO. Host policy still owns those.
| Approach | Strength | Weakness |
|---|---|---|
| Treat agents like HTTP microservices only | Familiar ops tooling | Misses loops, hallucination, cost storms |
| Bound every turn and tool (this section's theme) | Finite blast radius | Needs careful UX when runs stop early |
| Human approval on every step | High safety | Does not scale; fatigue creates rubber stamps |
| Unlimited autonomy with good prompts | Fast demos | Production incidents look "creative" |
Prefer hard host bounds plus selective human gates over prompt-only caution.
A reliable agent failure is:
stop_reason (timeout, budget, circuit_open, no_progress, killed).Single-shot inference has variance in output text. Agents add iterative tool use and durable side effects, so variance becomes multi-step state change and spend.
Run success rate with an explicit definition of success, plus p95 run latency and cost per successful run.
If there is no open-ended tool loop, many classic reliability patterns apply directly. As soon as the model chooses tools repeatedly, agent-specific modes dominate.
Multiple autonomous layers (model, tool host, SDK, job runner) each add "helpful" retries without a shared budget.
Both. If tools failed and the answer claimed success, that is a reliability/integrity failure, not only "bad vibes" quality.
Kills stop runaway behavior mid-incident. They do not replace design-time bounds; they are the emergency brake when bounds or deploys fail.
Yes for known thrash patterns and tool-error handling. Production still needs runtime budgets because novel goals create novel loops.
No. Allow limited, classified retries. Disable unlimited identical retries and stack-wide amplification.
Users report "it said it worked" or "it did it twice." Trace tool timelines, not only the final message.
That a green dashboard of CPU and 5xx is sufficient. Agent SRE needs loop, tool, and cost semantics.
No. They often have shell tools with huge blast radius; thrash can mean destructive commands, not only API spend.
In runbooks and postmortem templates. Start from Postmortems for Agent Incidents: A Template.
Stack versions: Pins from the category manifest (verify at build): OpenRouter (~315+ models, July 2026 pricing/fees); LangGraph 1.0+; CrewAI 1.14+; Microsoft Agent Framework 1.0; Vercel AI SDK 6; Pydantic AI (latest); LlamaIndex (latest); OpenAI Agents SDK (latest + MCP); MCP (Linux Foundation governance); A2A (HTTP+SSE+JSON-RPC 2.0); Solana
@solana/web3.js+@solana/spl-token.
Reviewed by Chris St. John·Last updated Jul 16, 2026