What this study found
Four results, each with the evidence that supports it.
Most failures are interface failures. The three categories that describe a break between components — compatibility and API contracts, output parsing, and tool integration — account for 43.2% of records. The two categories unique to multi-agent architectures, communication and context, account for 8.4%. Orchestration failures are real and measurable, but they are not the plurality.
Cause is associated with type, but the causal evidence is thin. Type and stated cause are strongly associated (Cramér's V = 0.374, χ² = 3881, p < 1e-12), yet only 374 records (12.1%) name a checkable mechanism. The rest are graded supported or hypothesised, and no causal claim in this study rests on them.
Frameworks fail differently, not worse. Composition differs (V = 0.262) and no two frameworks share a dominant category. Blocking-severity rate ranges from 36.5% to 96.0% — a property of how loudly a framework fails, not of its quality.
About a third of failures are silent. 31.8% were not detected by the framework runtime and reached the user as incorrect output rather than as an error. This is the strongest argument in the study for output validation over exception monitoring.
Distribution of failure types
Denominator includes the 92 records coded unknown; intervals are Wilson 95% score intervals.
| Code | Category | n | Share | 95% CI |
|---|---|---|---|---|
| A1 | Functionality / reasoning defect | 766 | 24.8% | 23.3–26.4% |
| A3 | Compatibility / API-contract defect | 541 | 17.5% | 16.2–18.9% |
| A6 | Data structure / output-parsing defect | 420 | 13.6% | 12.4–14.8% |
| A2 | Tool / integration defect | 374 | 12.1% | 11.0–13.3% |
| A7 | Configuration / environment defect | 357 | 11.6% | 10.5–12.7% |
| A5 | Context / memory / state defect | 255 | 8.3% | 7.3–9.3% |
| A8 | Performance / resource defect | 170 | 5.5% | 4.8–6.4% |
| A10 | Insufficient evidence | 92 | 3.0% | 2.4–3.6% |
| A4 | Agent communication / orchestration defect | 91 | 2.9% | 2.4–3.6% |
| A9 | Safety / guardrail defect | 23 | 0.7% | 0.5–1.1% |
Where the failures are
Explore the corpus
Click a record to see its evidence span, the rules that produced its label, and a link to the original report.
Framework comparison
Composition, not quality. A blocking rate is a property of the issue and of the framework's error handling.
| Framework | Records | Share | Blocking | Dominant category | Share |
|---|---|---|---|---|---|
| AutoGPT | 598 | 19.4% | 50.0% | Functionality / reasoning defect | 37.3% |
| LangGraph | 539 | 17.4% | 60.7% | Context / memory / state defect | 33.6% |
| CrewAI | 533 | 17.3% | 58.5% | Functionality / reasoning defect | 23.1% |
| LlamaIndex | 436 | 14.1% | 36.5% | Functionality / reasoning defect | 35.8% |
| OpenAI-Agents | 337 | 10.9% | 36.5% | Tool / integration defect | 30.6% |
| AutoGen | 300 | 9.7% | 96.0% | Compatibility / API-contract defect | 28.7% |
| MetaGPT | 238 | 7.7% | 88.2% | Data structure / output-parsing defect | 29.0% |
| SWE-agent | 108 | 3.5% | 86.1% | Configuration / environment defect | 32.4% |
Severity and silent failure
Escape rate is the share of records not detected by the framework runtime.
| Failure type | n | Runtime-caught | Escape rate |
|---|---|---|---|
| Safety / guardrail defect | 23 | 9 | 60.9% |
| Functionality / reasoning defect | 766 | 358 | 53.3% |
| Tool / integration defect | 374 | 218 | 41.7% |
| Context / memory / state defect | 255 | 149 | 41.6% |
| Data structure / output-parsing defect | 420 | 291 | 30.7% |
| Agent communication / orchestration defect | 91 | 67 | 26.4% |
| Performance / resource defect | 170 | 129 | 24.1% |
| Compatibility / API-contract defect | 541 | 436 | 19.4% |
| Configuration / environment defect | 357 | 357 | 0.0% |
Declared complexity
Share of orchestration and context failures by complexity tier. Complexity is declared in the report, not instrumented; read this as a stratification, not a causal estimate.
| Tier | Records | Orchestration / context | Share | 95% CI |
|---|---|---|---|---|
| Tier 0 | 699 | 18 | 2.6% | 1.6–4.0% |
| Tier 1 | 1258 | 68 | 5.4% | 4.3–6.8% |
| Tier 2 | 921 | 189 | 20.5% | 18.0–23.2% |
| Tier 3 | 211 | 71 | 33.7% | 27.6–40.3% |
Stated causes
Cause class across the corpus. The final column counts records where the report names a checkable mechanism.
| Cause class | n | Share | Demonstrated |
|---|---|---|---|
| Expectation mismatch | 655 | 21.2% | 0 |
| Unknown | 487 | 15.8% | 0 |
| Configuration error | 471 | 15.2% | 88 |
| Specification / documentation ambiguity | 469 | 15.2% | 117 |
| API / version drift | 267 | 8.6% | 34 |
| Framework defect | 260 | 8.4% | 88 |
| Context / state mismanagement | 194 | 6.3% | 30 |
| Tool or environment unavailability | 110 | 3.6% | 6 |
| Model capability limitation | 109 | 3.5% | 7 |
| Application logic defect | 67 | 2.2% | 4 |
The codebook
Five dimensions, coded independently. Every category below has a definition, an inclusion list and an exclusion list, so that two coders can reach the same label from the same text. Click a category to expand it.
The dimensions are orthogonal on purpose: a compatibility failure can be caused by a framework defect, a version bump or a user misconfiguration, and those have different remediations. Collapsing them is why "agent errors" reports rarely generalise.
A. Failure type
What broke, structurally — 10 categories
A1_functionality — Functionality / reasoning defect
- Output is wrong but syntactically well formed
- Plan or delegation choice is logically incorrect
- Agent silently skips part of the requested task
- A specific component raised an exception (code that category)
- The reported problem is purely about installation or configuration
A2_tool_integration — Tool / integration defect
- Tool not found / not registered / not exposed to the model
- Arguments built wrongly for a tool call
- MCP server, plugin or connector fails to load
- Tool returns a value the agent cannot consume
- The tool works but the agent chose the wrong tool (code A1)
A3_compatibility — Compatibility / API-contract defect
- TypeError on an unexpected or missing keyword argument
- ImportError / ModuleNotFoundError for a moved or renamed symbol
- Version pin conflict between framework and dependency
- Deprecated parameter removed upstream
- A user-supplied value of the wrong type with correct API (code A6)
A4_communication — Agent communication / orchestration defect
- Handoff or delegation never occurs, or targets the wrong agent
- Conversation loops, never terminates, or terminates early
- Manager/supervisor misroutes a task
- Agents disagree and no resolution mechanism applies
- A single agent fails alone with no inter-agent exchange (code A1/A2)
A5_context_memory — Context / memory / state defect
- Earlier instructions dropped from the context window
- Memory store returns stale or cross-session data
- Checkpoint/resume restores an inconsistent state
- The context was present but the model ignored it (code A1)
A6_data_structure — Data structure / output-parsing defect
- Pydantic/JSON schema validation error on agent output
- Output parser cannot extract the expected block
- KeyError / AttributeError on a malformed payload
- Parsing failed because the tool was never called (code A2)
A7_configuration — Configuration / environment defect
- Missing API key or environment variable
- Installation or dependency resolution fails before any agent runs
- Configuration option ignored or has no effect
- Version incompatibility between packages (code A3)
A8_performance — Performance / resource defect
- Request times out or is killed by a deadline
- Provider rate limit reached
- Run exhausts memory or token budget
- Slow but correct completion with no failure (not a record)
A9_safety — Safety / guardrail defect
- Agent executes a destructive action it should not
- Injected instruction from tool output is followed
- Sandbox or permission restriction is not enforced
- Policy refusal that is merely inconvenient (code A1)
A10_unknown — Insufficient evidence
- Title-only report with no described symptom
- Report describes a question or feature request rather than a failure
B. Cause class
The mechanism the report names — 10 categories
B1_framework_defect — Framework defect
B2_api_version_drift — API / version drift
B3_configuration_error — Configuration error
B4_specification_ambiguity — Specification / documentation ambiguity
B5_model_limitation — Model capability limitation
B6_context_management — Context / state mismanagement
B7_tool_environment — Tool or environment unavailability
B8_application_logic — Application logic defect
B9_expectation_mismatch — Expectation mismatch
B10_unknown — Unknown
C. Lifecycle stage
Where in the run it broke — 8 categories
C1_setup — Installation, dependency resolution, environment or credentials
C2_construction — Building agents, teams, graphs, or tools before execution
C3_prompt_assembly — Assembling task description, roles, or context for a call
C4_inference — The model call itself
C5_tool_execution — Invoking or receiving from a tool or external service
C6_handoff — Passing control or state between agents
C7_output_parsing — Interpreting or validating the model's structured output
C8_runtime_other — Other runtime behaviour after a successful call
D. Severity
How bad the consequence was — 4 categories
D1_blocking — Execution cannot continue; crash, exception, or hard stop
D2_incorrect_output — Run completes but the deliverable is wrong or silently corrupted
D3_degraded — Run completes with loss of quality, workaround, or partial output
D4_minor — Cosmetic, noisy logging, or non-blocking annoyance
E. Detection point
Who noticed, and when — 5 categories
E1_framework_runtime — Raised by the framework or runtime as an exception
E2_external_test — Caught by a test, evaluation harness, or assertion
E3_human_observation — Noticed by a human inspecting output or behaviour
E4_production_monitoring — Detected by logging, metrics, or alerting in operation
E5_configuration_validation — Caught during setup or configuration validation
Coding rules
The precedence order applied when more than one category appears to fit.
Research questions and agent assignment
A question is assigned to a single agent only when one pass over one table answers it. Questions that require deriving a variable, testing an association and then checking the claim against the source records are assigned to a chain, because the verification step is what prevents unsupported numbers from reaching a report.
How the application is organised
Eight agents on a shared blackboard. Any agent can be re-run in isolation and its contribution inspected.
| Agent | Responsibility |
|---|---|
| Planner | Maps each question to the variables, the test and the output shape it requires. |
| Tagger | Resolves labels and confidence; exposes the evidence span for each. |
| Statistician | Distributions, intervals, association tests, corrected p-values. |
| Causal | Cause-to-type contingency analysis with lift per cell, graded by evidence. |
| Comparator | Framework and time contrasts with multiple-testing control. |
| Complexity | Declared capability index and trend across tiers. |
| Critic | Recomputes every headline metric on an independent code path; blocks a mismatch. |
| Reporter | Assembles verified results into tables, figures and prose. |
What the instrument can and cannot support
Five experiments test the labelling instrument rather than the findings. One is still pending, and it is stated as pending rather than approximated.
| ID | Experiment | Design | Result | Reading |
|---|---|---|---|---|
| E1 | Reference agreement | n = 100 | 52.0% exact · macro-F1 0.545 · κ = 0.45 | Moderate — residual error on two boundaries |
| E2 | Perturbation retention | n = 150 | 80.0% (95% CI 72.9–85.6%) | Labels survive rewording and anonymisation |
| E3 | Exception-rule ablation | n = 3089 | 2.1% of labels change | Not dependent on pasted tracebacks |
| E4 | Confidence calibration | n = 100 | 39% → 57% across bins | Informative for triage, not calibrated |
| E5 | Blind second coder | 40 records | pending | Requires a coder independent of the author |
Confusion against reference annotation
Downloads
The corpus, the codebook and the result tables, in the same folder as this page.
- Corpus (CSV)
- 1683.9 kB
- Corpus (JSONL)
- 3069.8 kB
- Excluded records
- 1.3 kB
- Codebook (YAML)
- 15.3 kB
- Research questions (YAML)
- 5.4 kB
- RQ1 table
- 0.9 kB
- RQ3 table
- 8.2 kB
- RQ4 table
- 5.2 kB
- Validation summary
- 20.7 kB
Record schema
One JSON object per line in the corpus file; the CSV carries the same fields.
| Field | Meaning |
|---|---|
| record_id | Stable hash; the join key across all artefacts. |
| repo, issue_number, url | Provenance — the original report. |
| created_at, year, state, labels | Tracker context. |
| A_failure_type, A_confidence, A_evidence | Primary dimension, confidence, and the text span that produced the label. |
| B_cause_class, B_evidence_grade | Stated cause, graded demonstrated / supported / hypothesised. |
| C_lifecycle_stage, D_severity, E_detection_point | Remaining three dimensions. |
| matched_rules, taxonomy_version | Audit trail: which rules fired, against which codebook. |
Reproducing the analysis
From the project root, with PYTHONPATH=src set:
python -m afs.cli build # normalise + label python -m afs.cli analyze # multi-agent pipeline with critic verification python -m afs.cli validate # validation experiments python -m afs.cli export # Word report python -m afs.cli paper # journal-style manuscript python -m afs.cli app # this page