AP
Agent Provider Depot
Opinionated picks for agents
OpenAPI

Mechanisms · 2026-10-03

Failure modes

What goes wrong, how to notice it, and which agent types it hits. Detection is a check on the trace, not a procedure for causing the failure. This catalog does not change a Depot Pick.

GET /api/failures · 28 modes · types · case studies

Prompt injection

prompt-injection

Untrusted text, including text from a page, file, or message the agent fetched, changes the agent's behavior away from the user's task. OWASP distinguishes a direct injection in the user's own prompt from an indirect injection in outside content. Neither form is fully removed by retrieval or fine-tuning, according to the OWASP LLM01:2025 page fetched today.

Detect: Compare each tool call to the original user task. If the call only makes sense given text that arrived from a fetched page, file, or message, stop and ask. Record which source the instruction came from. This catalog does not store payloads or attack steps.

Classes: browser, computer-use, research, support, personal-assistant, security-review, sales-outreach

Studies for this mode

Schema drift

schema-drift

A tool, table, or file changed shape, and the agent still sends the old arguments or reads the old columns.

Detect: Validate every tool call and every loaded table against the current schema. Quarantine mismatches instead of coercing them.

Classes: coding, data-etl, local-offline, support

Studies for this mode

Identity confusion

identity-confusion

The agent acts for the wrong user or tenant, or a principal treats the agent as a separate party that the operator does not have to answer for.

Detect: Bind every tool call to a user or tenant id. Refuse the call if that id changed mid-task. For a public bot, the operator owns the words the bot shows.

Classes: support, personal-assistant, sales-outreach, orchestrator, voice

Studies for this mode

Eval contamination

eval-contamination

A score is not comparable to the one it is cited against: the gold label or the issue text leaked into the prompt, the harness rejects a valid fix, or a revised benchmark is treated as the old one.

Detect: Keep gold labels out of the agent prompt. Store the harness version beside the score. Do not compare a number across a benchmark revision without saying the revision changed.

Classes: eval-judge, coding, rag, security-review

Studies for this mode

Lost in the middle

lost-in-the-middle

The needed passage is in the prompt, but the model uses the beginning or the end and misses the middle of a long context.

Detect: Ask the agent to name the passage it used. Spot-check questions whose only support sits in the middle of the context, not only at the edges.

Classes: rag, research, local-offline

Studies for this mode

GUI grounding miss

gui-grounding-miss

A click, keystroke, or scroll lands on the wrong control, so later steps run against a screen the agent did not mean to open.

Detect: After each GUI action, compare the resulting screen or accessibility tree to the control the plan named. Stop when they differ.

Classes: computer-use, browser

Studies for this mode

Benchmark protocol mismatch

benchmark-protocol-mismatch

A score is cited next to another score that used a different setup: assisted versus unassisted editing, a subset versus the full set, or a revised harness versus the original.

Detect: Store assisted-or-not, subset, and harness version beside every cited score. Refuse a ranking that mixes those fields.

Classes: eval-judge, coding, computer-use, browser

Studies for this mode

Instruction drift

instruction-drift

Over a long trace the agent stops following the user's rule or the stop condition, including continuing after it already has enough information.

Detect: Restate the stop condition in the trace. End the run when it is met. Review long traces for steps that do not serve the original task.

Classes: research, orchestrator, coding, browser, personal-assistant

Studies for this mode

Email authentication or sender requirements missing

email-auth-misconfigured

Mail is junked or rejected because the sending domain lacks SPF or DKIM, valid forward and reverse DNS (PTR) records, or a TLS connection. Google's sender guidelines (fetched 2026-10-21) require these for all senders to Gmail since February 1, 2024, ask senders to keep spam rates reported in Postmaster Tools below 0.3%, and add more requirements above 5,000 messages a day.

Detect: Before the first real send, confirm the provider shows the sending domain verified (SPF/DKIM found) and that a DMARC record exists. After sending, watch bounces, complaints and the Postmaster Tools spam rate; a send API returning 200 does not mean the mail reached the inbox.

Classes: sales-outreach, support, personal-assistant

Studies for this mode

Send quota or sandbox limit hit

send-quota-sandbox

A new sender hits a provider quota before the agent expects any error. Amazon SES places all new accounts in a sandbox: mail only to verified addresses or domains, a maximum of 200 messages per 24-hour period and 1 message per second. Resend Free has a daily limit of 100 emails; Postmark Free allows 100 emails a month with no overages.

Detect: Read the account's current quota before a batch (SES GetAccount / sending quota; provider dashboard) and treat quota errors as a stop, not a retry. Move out of the sandbox or upgrade before launch; a retry loop against a quota only adds failures.

Classes: sales-outreach, support, personal-assistant

Studies for this mode

Deploy or API credential expired or out of scope

deploy-credential-expired

A CI deploy or API call that worked before starts failing with 401/403 because the access token expired, was created with a scope that does not cover the target, or went inactive. Vercel tokens carry a chosen expiration (1 day to 1 year) and a scope (full account, team or project); a project-scoped token is denied for other projects and team resources, and a CLI login token unused for 10 days expires.

Detect: Treat 401/403 from the deploy step as a credential problem, not a code problem: check the token's expiration and scope on the provider's tokens page, pass teamId/slug when a full-account token targets a team, then rotate the CI secret. Retrying with the same token only repeats the failure.

Classes: coding, scheduled-ops

Studies for this mode

Home-made bot filter beaten by link scanners

homemade-bot-filter-beaten-by-scanners

A private link is shared by email or chat and a home-made rule (user-agent list, timing, header checks) decides human vs bot. Mail security scanners fetch links themselves: Microsoft's Safe Links does URL scanning of inbound mail during mail flow and time-of-click verification, and its recommended setting holds messages until URL scanning is finished. So a link can be fetched by a scanner, not only by the person it was sent to, and self-reported fields such as the user-agent are not proof of who is calling (Cloudflare treats a bot as verified only when it identifies itself by a signature, a published IP list or reverse DNS). Rules built on such fields get beaten by scanners and count them as visits.

Detect: Count visits that arrive within seconds of the message being sent, from many networks, with no follow-up interaction. If a 'human' signal is only a header or a GET request, treat it as unproven. Require a server-verified challenge token (Turnstile, Friendly Captcha or ALTCHA proof-of-work) or an explicit click on the page before counting a person.

Classes: personal-assistant, scheduled-ops, security-review

Studies for this mode