{"asOf":"2026-10-03","doesNotChangeDepotPicks":true,"doesNotChangePriceSort":true,"doesNotChangeFreeIndex":true,"note":"Classification and failure modes are mechanisms. Case studies are included only when the source URL was fetched on 2026-10-03. A capability ceiling is not a company incident. Vendor figures are labeled as that vendor's report.","count":15,"classes":[{"id":"coding","name":"Coding agent","definition":"Edits a repository, runs commands in a workspace, and checks the result against tests or a diff.","needs":{"jtbdIds":["coding-agent","diff-aware-pr-review","agent-sandbox","code-interpreter","agent-ephemeral-ci","persistent-dev-env"],"freeKinds":["free_sandbox","dev_tool","free_docs"],"capabilityTags":["coding","agents"],"plain":["A workspace that can be snapshotted","Tests or a diff check that the agent does not grade itself"]},"failureModeIds":["tool-loop","hallucinated-tool-args","partial-tool-success","collateral-side-effects","weak-verification","eval-contamination","benchmark-protocol-mismatch","runaway-spend","silent-truncation","non-determinism","schema-drift","context-overflow","instruction-drift"],"exampleTasks":["Patch a failing test and run that test in a sandbox","Review a diff without rewriting unrelated files","Stop when the same command repeats with the same output"]},{"id":"research","name":"Research agent","definition":"Gathers sources for an open-ended question and returns an answer that names those sources.","needs":{"jtbdIds":["deep-research-agents","web-grounded-qa","agent-search","search-augmented-llm","web-scrape","llm-ready-extract"],"freeKinds":["free_docs","free_data","free_browser"],"capabilityTags":["search","agents"],"plain":["A stop rule for when enough sources have been read"]},"failureModeIds":["prompt-injection","stale-retrieval","tool-loop","runaway-spend","lost-in-the-middle","ungrounded-answer","instruction-drift","inter-agent-misalignment","context-overflow","policy-conflict","silent-truncation"],"exampleTasks":["Answer a question with the URLs that support each claim","Say when the fetched pages do not contain the answer","Split a question across workers and check that each result matches its assignment"]},{"id":"browser","name":"Browser agent","definition":"Completes a task by reading and operating a website in a browser, then stops before a consequential submit unless confirmation exists.","needs":{"jtbdIds":["cloud-browser","computer-use-browser","browser-agent-loop","web-agent","self-host-browser","web-scrape"],"freeKinds":["free_browser"],"capabilityTags":["browser","web"],"plain":["Confirmation before submit, pay, or send"]},"failureModeIds":["prompt-injection","tool-loop","gui-grounding-miss","partial-tool-success","non-determinism","confirmation-skip","hallucinated-tool-args","collateral-side-effects","over-refusal","instruction-drift","benchmark-protocol-mismatch"],"exampleTasks":["Find a stated price on a page and quote the URL","Fill a form on a test site and stop before submit","Refuse to continue when the page text tries to replace the user's task"]},{"id":"computer-use","name":"Computer-use agent","definition":"Operates a desktop or mobile GUI, not only a single site API, and checks that the control it used is the one it intended.","needs":{"jtbdIds":["desktop-computer-use","mobile-computer-use","computer-use-browser","form-filling-rpa"],"freeKinds":["free_sandbox","free_browser"],"capabilityTags":["browser","agents"],"plain":["A screenshot or accessibility tree after each action","An allowlist of apps the task may change"]},"failureModeIds":["gui-grounding-miss","prompt-injection","collateral-side-effects","partial-tool-success","tool-loop","confirmation-skip","benchmark-protocol-mismatch"],"exampleTasks":["Change one setting and verify the resulting file","Stop if the click opened a different app than the plan named"]},{"id":"voice","name":"Voice agent","definition":"Hears or speaks on a call or a realtime channel, and confirms account-changing actions before they run.","needs":{"jtbdIds":["voice-agents","voice-agent-platform","speech-to-text","speech-synthesis","realtime-tts","production-stt","agent-pstn-telephony","multilingual-stt"],"freeKinds":["free_speech"],"capabilityTags":["voice","speech","realtime"],"plain":["A transcript the caller can correct","Confirmation before an account change"]},"failureModeIds":["silent-truncation","identity-confusion","over-refusal","non-determinism","partial-tool-success","confirmation-skip","runaway-spend"],"exampleTasks":["Transcribe a caller and repeat the requested change before acting","Hand off when the transcript is cut off"]},{"id":"support","name":"Support agent","definition":"Answers a customer from the operator's policy and escalates when sources disagree or the action is consequential.","needs":{"jtbdIds":["hitl-approval-workflows","content-moderation","transactional-email","rag-enterprise","knowledge-graph-rag"],"freeKinds":["free_docs"],"capabilityTags":["enterprise","rag"],"plain":["One canonical policy page per topic","A human approval step for refunds and exceptions"]},"failureModeIds":["policy-conflict","ungrounded-answer","stale-retrieval","identity-confusion","prompt-injection","over-refusal","confirmation-skip","non-determinism","weak-verification","schema-drift"],"exampleTasks":["Answer a policy question by quoting the canonical page","Show both pages when they disagree instead of picking one","Do not send a refund without an approval id"]},{"id":"data-etl","name":"Data and ETL agent","definition":"Moves or reshapes records between files, tables, and documents, and reports rows that did not match the schema.","needs":{"jtbdIds":["lakehouse-llm","sql-warehouse-agent-context","spreadsheet-sql-agents","document-parse","knowledge-graph-extract","ml-dataset-versioning","layout-aware-ocr"],"freeKinds":["free_ocr","free_data"],"capabilityTags":["sql"],"plain":["A schema for the destination","A row-level error report"]},"failureModeIds":["schema-drift","partial-tool-success","silent-truncation","stale-retrieval","hallucinated-tool-args","collateral-side-effects"],"exampleTasks":["Load a table and list rows that failed the schema","Parse a document and mark pages the OCR step did not return"]},{"id":"rag","name":"RAG agent","definition":"Answers from a retrieved corpus and says when the corpus does not support the claim.","needs":{"jtbdIds":["rag-enterprise","rag-memory","hybrid-search-rag","rag-rerank","prototype-rag","knowledge-graph-rag","late-interaction-retrieval","embeddings","managed-vector","rag-evals"],"freeKinds":["free_embedding","free_vector","free_rerank","free_data"],"capabilityTags":["rag","vector"],"plain":["Passage ids on every factual sentence"]},"failureModeIds":["stale-retrieval","lost-in-the-middle","silent-truncation","eval-contamination","ungrounded-answer","context-overflow","policy-conflict"],"exampleTasks":["Answer only from retrieved passages","Say the corpus has no support instead of filling the gap"]},{"id":"orchestrator","name":"Multi-agent orchestrator","definition":"A lead assigns subtasks to workers and accepts a result only when it matches the assignment.","needs":{"jtbdIds":["durable-agent-workflows","event-driven-agent-jobs","langgraph-deploy","ray-distributed-agents","a2a-agent-discovery","agent-tool-router","mcp-discovery"],"freeKinds":["free_mcp","dev_tool"],"capabilityTags":["mcp","agents"],"plain":["A written assignment per worker","A budget for the whole fan-out"]},"failureModeIds":["inter-agent-misalignment","tool-loop","runaway-spend","identity-confusion","partial-tool-success","weak-verification","instruction-drift","hallucinated-tool-args","observability-gap"],"exampleTasks":["Delegate two searches and reject a worker result that answers a different question","Stop the fan-out when the tool-call budget is spent"]},{"id":"eval-judge","name":"Eval and judge agent","definition":"Scores a trace or a patch against a rubric, without the gold label in its prompt, and records the harness version.","needs":{"jtbdIds":["evals","oss-evals","rag-evals","production-guardrail-evals","continuous-eval-ci","adversarial-red-team-evals","synthetic-eval-data","llm-tracing"],"freeKinds":["free_data","dev_tool"],"capabilityTags":["evals","tracing"],"plain":["Gold labels kept out of the judge prompt","Harness version stored next to the score"]},"failureModeIds":["eval-contamination","non-determinism","weak-verification","observability-gap","benchmark-protocol-mismatch","inter-agent-misalignment"],"exampleTasks":["Score a trace against a rubric that does not include the gold answer","Refuse to rank two runs that used different harness versions"]},{"id":"scheduled-ops","name":"Scheduled and ops agent","definition":"Runs a job on a queue or a clock, is safe to retry, and alerts when the job or its traces go dark.","needs":{"jtbdIds":["event-driven-agent-jobs","serverless-agent-queue","agent-dlq-retry","durable-idempotency","llm-cost-anomaly-alerts","agent-error-observability","progressive-agent-rollout"],"freeKinds":["dev_tool"],"capabilityTags":["serverless","cost"],"plain":["Idempotency key on every retry","An alert when trace ingestion drops"]},"failureModeIds":["runaway-spend","partial-tool-success","tool-loop","observability-gap","non-determinism"],"exampleTasks":["Retry a failed job without applying the side effect twice","Alert when the night job's trace count falls"]},{"id":"personal-assistant","name":"Personal assistant","definition":"Acts for one person across sessions, keeps that person's memory separate, and waits before sending or booking.","needs":{"jtbdIds":["calendar-scheduling-tools","transactional-email","sms","cross-session-user-memory","episodic-long-term-memory","agent-push-notifications","realtime-agent-channel"],"freeKinds":["local_runtime","free_docs"],"capabilityTags":["memory","agents"],"plain":["Confirmation before a message or a calendar write","A memory store scoped to one user"]},"failureModeIds":["identity-confusion","context-overflow","confirmation-skip","stale-retrieval","prompt-injection","instruction-drift"],"exampleTasks":["Draft a calendar hold and wait for confirmation","Remember a preference for this user only"]},{"id":"sales-outreach","name":"Sales and outreach agent","definition":"Drafts outreach from sourced fields about a person or account, and does not send until a person approves.","needs":{"jtbdIds":["people-enrichment","marketing-email","outbound-webhooks"],"freeKinds":["free_docs"],"capabilityTags":["enterprise"],"plain":["Human approval before send","Fields must come from a cited source"]},"failureModeIds":["identity-confusion","confirmation-skip","runaway-spend","stale-retrieval","policy-conflict","ungrounded-answer","prompt-injection"],"exampleTasks":["Draft an email from cited fields and leave it unsent","Stop a sequence when the recipient has already replied"]},{"id":"security-review","name":"Security review agent","definition":"Reads a change or a trace for secrets, overly broad permissions, and untrusted text copied into a tool prompt. It does not produce an attack.","needs":{"jtbdIds":["prompt-injection-firewall","llm-input-guardrails","runtime-llm-firewall","adversarial-red-team-evals","agent-secrets","secret-rotation-automation","diff-aware-pr-review"],"freeKinds":["free_docs","dev_tool"],"capabilityTags":["safety"],"plain":["A findings list with file and line, not a payload","Secrets detected are redacted in the report"]},"failureModeIds":["prompt-injection","over-refusal","eval-contamination","weak-verification"],"exampleTasks":["List secrets and broad permissions in a diff","Flag a prompt that concatenates fetched page text into a tool instruction, without quoting an attack"]},{"id":"local-offline","name":"Local and offline agent","definition":"Runs without calling a hosted model API, using local weights, a local index, or an air-gapped serve path.","needs":{"jtbdIds":["air-gapped-model-serve","open-model-inference","self-host-vector","self-host-browser","wasm-edge-small-models","on-device-edge-batch","edge-sqlite-agent-db"],"freeKinds":["open_weights","local_runtime","free_vector","free_sandbox"],"capabilityTags":["oss","edge"],"plain":["No network call on the answer path","Say when the local corpus has no support"]},"failureModeIds":["silent-truncation","context-overflow","schema-drift","non-determinism","stale-retrieval","lost-in-the-middle"],"exampleTasks":["Answer from a local index and say when it has no passage","Refuse to call a hosted model when the task is marked offline"]}]}