/pattern/anti/

Patterns · Anti-patterns

How multi‑agent systems
fail in production.

9 failure modes an experienced team has watched reach production. Each is read as a ledger — the failure on the left, its countermeasure on the right — grouped by the rung where the failure is born, because naming it early is most of the fix.

The map

Where each failure bites.

Every failure is born on one rung of the ladder — but a few don't stay put. The cluster sits low, where a single agent reasons alone; the rarer, costlier ones surface only under production load. Select any node to jump to its entry.

L1

Thinking

4 failures
L2

Flow

1 failure
L3

Collaboration

3 failures
L4

Production

1 failure

Cross-rung propagation — three failures don't stay put

08
Unbounded Loop · recurs in Flow wherever a Loop has no termination
01
Over-Agentification · the simpler L2 workflow was the cure
03
SQLite Under Concurrency · an L4 swap that bites L2 hardest
Filter by origin
The failureThe countermeasure
L1

Thinking

How one mind reasons — failures born inside a single agent's loop.

04 / 09
02

Hidden State in Prompts

Behaviour drifts over long conversations. Bugs reproduce only intermittently.

Countermeasure

Pydantic v2 state at every node boundary. Forbid extra attributes. State belongs in code.

A structural discipline — no single pattern
04

Tool Explosion

Tool selection accuracy collapses. The model hallucinates calls and parameter names.

Countermeasure

Least privilege per role. Gate large catalogues behind a Tool Registry plus capability routing.

08

Unbounded Loop

An L1 agent stuck in unproductive infinite cycles due to flawed reasoning, with no programmed recursion limit or step budget.

Originated on L1 with ReAct; recurs here whenever a primitive Loop has no termination.

Countermeasure

Set a hard recursion_limit and a step budget at the harness level. Add a Reflexion gate or a tool-call counter to break runaway loops.

09

Self-Graded Hallucination

A model that critiques its own answer can agree with its own mistake — a reflection loop converges, confidently, on something wrong.

The failure the reflection layer of the Decision Heuristic steers around — self-critique is only as trustworthy as the check it is anchored to. Knowledge-base counterpart: Part IX §8.

Countermeasure

Anchor judgement to an external check: an executable test, an oracle, or a human — not another sample of the same model.

L2

Flow

How steps wire together in code — failures in the control flow between calls.

01 / 09
05

Hallucinated Routing

Reflection loops never converge. Recursion limits trip at runtime instead of design time.

Countermeasure

Schema-validate router decisions. Hard recursion_limit, hard max_handoffs.

L3

Collaboration

Who decides who works next — failures in how multiple agents coordinate.

03 / 09
01

Over-Agentification

High latency, expensive token bills, debugging that requires reconstructing emergent behaviour from logs.

Mirrors the L3 anti-pattern: reaching for multi-agent when an L2 workflow would have sufficed.

Countermeasure

Walk the decision heuristic. Sketch the simpler alternative side-by-side before you commit.

06

God Orchestrator

Single point of coordination, single point of failure, single point of privacy exposure.

Countermeasure

A thin hub with strong specialists. Keep the orchestrator's prompt and tools small; push work into specialists.

07

Cascading Security Failures

A poisoned doc in a shared index contaminates every downstream consumer. Prompt injection propagates via handoffs.

Countermeasure

Treat every agent-to-agent message as a trust boundary. Partition knowledge bases by trust level.

A trust-boundary discipline — no single pattern
L4

Production

How the system runs at scale — failures that only surface under real load.

01 / 09
03

SQLite Under Concurrency

Write locks serialize everything. Timeouts under load. Session bleeding.

An L4 anti-pattern that bites L2 hardest — every checkpointed workflow eventually outgrows SQLite.

Countermeasure

AsyncPostgresSaver. Compose thread IDs as user×session.

A checkpointer swap — no single pattern

Search

Search patterns, frameworks, and pages.