Production field guide
Silent failures in AI agents: how to detect and fix them
Your agent says it finished. The tool returned successfully. The user’s task is still wrong. Here is how to find the gap, prove what happened, and turn the failure into a test.
Constructed example · no customer data
One success message. Three different outcomes.
Change the receipt. The agent’s confident answer stays the same.
User request
Refund the $49 charge for order A-88213.
Agent’s final answer
“Done. I refunded $49 to your original payment method.”
HTTP 200 · Tool returned · Run finished
Tool receipt
- order_id
- A-88218
- amount_cents
- 4900
- status
- completed
Failed task
The receipt belongs to A-88218. The user asked about A-88213. A completed refund on the wrong order is still a failed task.
Next step: Check entity binding before the write, then verify the returned order ID. Investigate the unintended refund before retrying.
What is a silent agent failure?
A silent agent failure happens when an AI agent produces an incorrect or incomplete outcome without triggering the alert or escalation that should expose it. The run may finish normally while the agent acts on the wrong record, invents an answer, loses a constraint, or reports work it never completed.
“Silent” describes a gap in detection. It does not mean every component succeeded. A tool might return an error that the agent turns into a reassuring answer. Or every API call might genuinely succeed, on behalf of the wrong customer.
There are three different questions to ask about a run:
- Execution: did the model and tools return?
- Outcome: did the requested change or answer actually happen correctly?
- Evidence: can the captured record establish that outcome?
The third question matters. An incomplete trace is not proof of failure, and an agent saying “done” is not proof of success. Preserve an unknown outcome when the evidence cannot decide.
A missing or stalled agent is a related operational problem. Heartbeats, deadlines, and completion pings can reveal that a run stopped. They cannot tell you whether a finished run refunded the right order.
Six patterns and the evidence that exposes them
1. The right tool acts on the wrong record
A customer asks about order A-88213. The agent selects A-88218, a look-alike record, and successfully changes it. Arguments validate. The API accepts the request. The task still fails.
What to check: compare the entity the user selected with the entity passed to the tool and returned in its receipt. Keep authorization and ownership checks in application code before consequential writes. A valid identifier is not necessarily the intended identifier.
2. The agent claims completion without a completed action
The agent confirms a refund after receiving an accepted request, or says it sent an email when it only drafted one. An accepted operation and a completed operation are different states.
What to check: require the relevant completion evidence: a provider receipt, an authoritative state read, or a completion event tied to the original operation. Allow the system’s documented consistency window. Do not retry a payment merely because its outcome is not yet visible; correlate the original request and use idempotency controls.
3. A plausible answer contradicts its source
A lookup returns no matching invoice. The agent answers with an amount from a different invoice in context. The answer looks specific and helpful, which can make it harder to question.
What to check: compare material claims with the tool results or documents available at that turn, including their entity IDs. A value appearing somewhere in context does not establish that it belongs to the requested record. If retrieval may be stale or incomplete, preserve that uncertainty too.
4. A constraint disappears during a long task
The user asks for a meeting after 3 p.m. in Berlin. Several turns later, a scheduling action uses the server’s time zone. The calendar entry is valid; the requested appointment is wrong.
What to check: carry explicit task constraints into action validation. Compare the final action with the original time zone, budget, scope, and permissions. For delegation, retain those constraints across handoffs instead of relying only on a prose summary.
5. Repeated tool calls make no progress
The agent runs the same search repeatedly, receives the same empty result, and closes with a generic answer. Each call succeeds. None resolves the request.
What to check: combine repeated actions with a lack of task progress. A bounded retry after a transient failure can be correct. Repetition alone is a weak detector. Track meaningful state changes and define a stop or escalation path when the current approach is exhausted.
6. The agent leaves part of the task undone
A user asks to update an address and resend an invoice. The agent updates the address, promises the invoice, and stops. The completed first step hides the missing second step.
What to check: compare requested obligations with completed actions and any required handoff. Distinguish work the agent was allowed to do from an unsupported or unsafe request it should decline. A correct refusal must remain a passing case.
How to detect silent failures in AI agents
Start with a task contract: what would count as success, and which evidence would establish it? For a read, that might be an answer grounded in the correct record. For a write, it might be a particular state change on an authorized entity. The agent’s final sentence is only one part of that contract.
Capture the evidence before adding a detector
Record the user’s request, relevant prior turns, tool names and arguments, tool results, timestamps, and final answer. Correlate them with a trace ID and the agent, prompt, model, and tool versions used. Include operation IDs for asynchronous actions so later completion events can be joined back to the run.
Instrument only what you are permitted to collect. Redact sensitive fields at the boundary and retain stable identifiers where possible. Missing or truncated captures should be visible to the evaluator; otherwise a detector may mistake absent telemetry for an absent action.
Apply deterministic checks where the contract is explicit
Check required fields, entity identity, units, amounts, operation status, and task-specific invariants. These checks are cheap to inspect and easy to turn into regression cases. Keep important prevention controls in the tool or application boundary too; detecting an unauthorized write afterward is too late to serve as access control.
For the constructed refund example above, this is the entire receipt check:
type RefundEvidence = {
requestedOrder: string
requestedCents: number
returnedOrder: string
returnedCents: number
status: 'accepted' | 'completed'
}
function checkRefund(evidence: RefundEvidence) {
if (
evidence.requestedOrder !== evidence.returnedOrder ||
evidence.requestedCents !== evidence.returnedCents
) return 'failure'
if (evidence.status !== 'completed') return 'unknown'
return 'verified'
}
This assumes typed, normalized evidence. Validate untrusted payloads before calling it. The function checks a matching receipt, not authorization, refund eligibility, or bank settlement. It cannot prove a complete payment workflow correct.
Use semantic checks for judgments the contract cannot encode
Some failures require reading the trajectory: did the answer address the actual question, did the agent skip feasible work, or did a tool error become a false success claim? Give an evaluator the relevant context and require evidence for its finding, such as a tool result and the contradictory answer.
Calibrate model-based judgments against human-reviewed examples. Include correct refusals, legitimate retries, partial captures, and delayed success. Measure false alarms as well as caught failures. A broad “was this good?” prompt is difficult to debug and can share the agent’s mistaken assumptions.
Verify consequential outcomes outside the agent’s narration
For important actions, consult the authoritative system when possible. A transcript can show that a write was requested without showing whether it committed. If the outcome arrives later, join it back to the original operation. If that information is unavailable, label the finding accordingly instead of manufacturing certainty.
Research on false success in agent benchmarks illustrates why this distinction matters: confident completion claims and independent environment state can disagree. Its benchmark results do not establish a universal production failure rate. Earlier work on silent errors in tools also studies how agents detect faulty tool results and recover.
Turn detections into problems engineers can act on
An alert saying “quality dropped” leaves the investigation to the reader. A useful alert names the behavior, links the evidence, explains the impact, and gives the engineer a way to confirm it.
For the wrong-order example, that means: the requested order, the order actually refunded, the relevant tool call, the contradictory confirmation, and other runs with the same pattern. Separate the first incorrect decision from later symptoms. Ten different misleading answers may share one entity-selection bug.
Group related findings, inspect examples, and rank the confirmed problems by affected users and severity. A rare unintended payment can deserve attention before a frequent awkward phrase. Clustering makes findings easier to investigate; it does not prove that every member is a failure.
User frustration, rephrasing, escalation, and abandonment can point you toward missed tasks. Treat them as evidence to investigate rather than automatic failure labels. A user can dislike a correct refusal or trust an incorrect answer. Systems with no conversational feedback need other outcome signals.
For the engineering behind grouping production behavior, see how Moda clusters agent failures from traces. That article explains why topic-coherent segments can preserve a failure that disappears when a long, mixed-topic conversation is represented as one average.
Measure whether your detector is useful
Start with a small reviewed set covering the tasks your agent actually performs. Include known failures, ordinary successes, and ambiguous outcomes. Write down the labeling rule before comparing detectors, and have a second reviewer adjudicate disagreements where the decision matters.
- Precision: of the findings flagged as failures, how many were confirmed? This determines how much review time an alert consumes.
- Recall: of the failures in a reviewed evaluation set, how many did the detector catch? Reviewing only flagged runs cannot measure what it missed.
- Coverage and unknowns: which eligible runs were evaluated, which were sampled or excluded, and which lacked enough evidence?
- Time to detection: how long did the problem remain live before a useful finding reached the team?
- User impact and recurrence: who was affected, which tasks broke, and did the same behavior return after a change?
Keep denominators and sampling windows attached to rates. A change in traffic mix can move an aggregate failure rate without changing performance on any individual task. Review outcomes by use case and deployment version before attributing a shift to a model or prompt change.
No detector catches every failure. A documented blind spot is more useful than a reassuring score that hides missing evidence.
Use production failures to improve your evals
Offline evals test the cases you have collected before a release. Online evals assess real traffic after deployment. Production review finds cases your current suite does not represent. These methods work together.
After confirming a failure, preserve the smallest case that still reproduces it, including the context that made the wrong action tempting. Add a passing control and an ambiguous case. For the refund example, keep the wrong-order receipt, the pending receipt, and the matching completed receipt. Then test your change against all three.
Replays that exercise tools with side effects need a sandbox, recorded responses, or another safe test boundary. Never replay a real refund against a live payment endpoint just to see if a prompt improved.
Check both the target behavior and regressions elsewhere. A prompt that prevents false refund confirmations by refusing every refund has not solved the task. After release, keep monitoring real traffic: passing yesterday’s examples does not establish correctness on tomorrow’s requests.
How Moda helps you find the next failure
Moda is infrastructure for catching AI agent mistakes in production and turning them into evals.
Moda reads production traces end to end and detects user frustration, tool failures, lazy answers, and hallucinations. Your team can add custom signals in plain language for the behavior your agent must get right. Recurring failures are grouped into problems ranked by users affected, with the traces behind each one.
That gives an engineer a place to start: a repeated behavior, the affected users, and the turns to inspect. When the engineer changes a prompt, tool, or model, Moda replays the change against the traces that failed and compares pass rate, latency, and token usage. Your team reviews the result and decides what ships.
Moda evaluates the evidence you send. If a completed transaction or downstream state change is absent from a trace, do not assume a trace-based finding independently verifies it. Keep authoritative outcome checks and application safeguards alongside production monitoring.
Octolane’s customer story describes how its team used Moda to review recurring patterns and ship product fixes. It is an account of that team’s workflow, not a guarantee of results for every deployment.
Start with one agent and one important task
Connect traces through the Moda SDKs, OpenTelemetry, or HTTP ingestion. Pick a task where a wrong outcome matters. Inspect the evidence Moda surfaces, then add a custom signal for a specific behavior, such as: “The agent claims a refund is complete, but the recorded tool result does not confirm completion for the requested order.”
Review example findings before setting an alert threshold. Use confirmed failures as eval cases, make your change, and compare the replay results. You do not need to replace your agent framework to start sending traces.
Request a Moda workspace to try it with your agent. Access is invite-only and requests are reviewed by the Moda team. If you want to walk through a production failure first, book a demo. You can also explore Monitor or read how Evaluate tests changes.
Questions engineers ask
Is a silent failure the same as a hallucination?
A hallucinated answer is one kind. A correctly formed action on the wrong customer, a dropped constraint, or an unfinished task can also fail silently without an invented fact.
Can a successful API response still represent a failed task?
Yes. It establishes that the API accepted or completed a particular operation according to its contract. It does not establish that the agent chose the correct operation, record, or arguments for the user’s request.
Can existing tracing and evaluation tools detect these failures?
Yes, when they inspect the relevant content and apply suitable checks. Many platforms support online evaluation. Capturing traces, evaluating behavior, grouping repeated findings, and alerting with evidence are separate capabilities to assess. Status-only monitoring cannot decide semantic correctness.
Should an LLM judge be the source of truth?
Use it for calibrated judgments, backed by evidence and review. Prefer an explicit contract or authoritative state check where one exists. A judge reading the same misleading transcript can make the same mistake as the original agent.
What should happen when the outcome is unknown?
Keep it unknown, gather the missing evidence, and use a bounded follow-up or human handoff appropriate to the task. Do not count an unknown as success, assume it is a failure, or blindly repeat a consequential action.
Does Moda change my agent automatically?
Your team makes the change and decides what ships. Moda monitors production traces, surfaces recurring problems, and tests your change against real traces.
A checklist for your next production review
- Choose one consequential task and write down what successful completion means.
- Capture the request, constraints, tool arguments, results, final answer, and relevant completion evidence.
- Compare intended and executed entities before trusting a success status.
- Keep failed, passed, and unknown outcomes separate.
- Calibrate semantic checks with reviewed examples and passing controls.
- Group recurring findings and attach evidence to alerts.
- Turn a confirmed failure into a regression case, test the change safely, and monitor after release.
The first trace to inspect is one your agent calls successful. Check whether the evidence agrees.