Multi-Agent Systems10 min read

The Multi-Agent Architecture That Actually Scales

We broke down the exact architecture we used for a dispute resolution system processing 15,000+ cases.

Carolina Fogliato

March 2, 2026

Most multi-agent architectures you see online are toys.

They work for demos. They process a few requests. They look impressive in blog posts. And then they fall apart the moment you try to run them at scale.

I know because I've built both kinds.

Today I'm going to break down an architecture that actually works in production—a multi-agent dispute resolution system that processes 15,000+ cases annually with a 78% AI-only resolution rate. Cases that used to take 23 days now resolve in 12 hours on average.

This isn't theory. This is the exact system running at TrustaNova. I'll show you the architecture, the agent design, the knowledge layer, and—most importantly—the patterns that made it scale.

The Problem

TrustaNova needed to automate B2B2C dispute resolution. Think: a customer disputes a charge, or two businesses disagree on contract terms, or a service delivery doesn't match expectations.

Traditional dispute resolution is slow and expensive:

  • Human mediators reviewing documents
  • Back-and-forth communication over weeks
  • Legal complexity requiring expertise
  • High cost per case making small disputes uneconomical

The goal: build an AI system that could handle the majority of cases autonomously, escalating to humans only when necessary.

The Constraints

  • Sub-second response times for real-time mediation
  • Handle thousands of concurrent cases
  • Maintain legal defensibility (decisions must be explainable)
  • Integrate with existing CRM, billing, and communication systems
  • Support multiple languages and jurisdictions

This wasn't a chatbot project. This was enterprise-grade AI infrastructure.

Why Most Multi-Agent Architectures Fail at Scale

Before I show you what we built, let me explain why most multi-agent architectures don't scale.

Problem #1

Sequential Bottlenecks

Most agent frameworks default to sequential execution. Agent A finishes, then Agent B starts. This creates a latency chain—at scale, this kills you.

Problem #2

Context Explosion

Passing everything—full conversation history, all documents, complete case files—explodes token costs. We've seen systems burning $50+ per complex case.

Problem #3

No State Management

Disputes unfold over hours or days. Most demo architectures have no real state management—they lose context or reconstruct it expensively every time.

Problem #4

Error Cascades

One agent's bad output becomes another agent's bad input. Without proper validation and recovery, a single hallucination corrupts an entire case.

The Architecture That Works

Here's what we actually built:

┌─────────────────────────────────────────────────────────────────────┐
│                         ORCHESTRATION LAYER                         │
│                              (Agno)                                 │
│  ┌──────────────────────────────────────────────────────────────┐  │
│  │                      Case Router Agent                        │  │
│  │         Classifies case type, routes to appropriate flow      │  │
│  └──────────────────────────────────────────────────────────────┘  │
│                                │                                    │
│                  ┌─────────────┼─────────────┐                     │
│                  ▼             ▼             ▼                      │
│  ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐   │
│  │  Simple Dispute  │ │ Contract Dispute │ │ Complex/Escalate │   │
│  │      Flow        │ │      Flow        │ │      Flow        │   │
│  └──────────────────┘ └──────────────────┘ └──────────────────┘   │
└─────────────────────────────────────────────────────────────────────┘
                                │
                  ┌─────────────┼─────────────┐
                  ▼             ▼             ▼
┌─────────────────────────────────────────────────────────────────────┐
│                          AGENT LAYER                                │
│                                                                     │
│  ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐  │
│  │  Intake     │ │  Evidence   │ │  Analysis   │ │  Resolution │  │
│  │  Agent      │ │  Agent      │ │  Agent      │ │  Agent      │  │
│  └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘  │
│                                                                     │
│  ┌─────────────┐ ┌─────────────┐ ┌─────────────┐                   │
│  │Communication│ │  Compliance │ │  Escalation │                   │
│  │   Agent     │ │    Agent    │ │    Agent    │                   │
│  └─────────────┘ └─────────────┘ └─────────────┘                   │
└─────────────────────────────────────────────────────────────────────┘
                                │
                                ▼
┌─────────────────────────────────────────────────────────────────────┐
│                        KNOWLEDGE LAYER                              │
│                          (GraphRAG)                                 │
│                                                                     │
│  ┌───────────────────────────────────────────────────────────────┐ │
│  │                     Neo4j Knowledge Graph                     │ │
│  │  ┌─────────┐    ┌─────────┐    ┌─────────┐    ┌─────────┐   │ │
│  │  │Contracts│───▶│ Parties │───▶│Precedents│───▶│ Rules   │   │ │
│  │  └─────────┘    └─────────┘    └─────────┘    └─────────┘   │ │
│  └───────────────────────────────────────────────────────────────┘ │
│                                                                     │
│  ┌───────────────────────────────────────────────────────────────┐ │
│  │                    Vector Store (Embeddings)                  │ │
│  │         Document chunks, case histories, communication logs   │ │
│  └───────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────┘
                                │
                                ▼
┌─────────────────────────────────────────────────────────────────────┐
│                       INTEGRATION LAYER                             │
│                                                                     │
│     ┌─────────┐    ┌─────────┐    ┌─────────┐    ┌─────────┐      │
│     │   CRM   │    │ Billing │    │  Email  │    │ Workflow│      │
│     └─────────┘    └─────────┘    └─────────┘    └─────────┘      │
└─────────────────────────────────────────────────────────────────────┘

Layer 1: Orchestration (Agno)

We chose Agno for orchestration because performance was non-negotiable.

The Case Router Agent is the entry point. Every dispute hits this agent first. Its job is simple but critical: classify the case type and route to the appropriate flow.

# Simplified Case Router Logic

class CaseRouterAgent:
    def route(self, case: Case) -> Flow:
        # Fast classification using lightweight model
        case_type = self.classify(case)

        if case_type == "simple" and case.amount < threshold:
            return SimpleDisputeFlow()
        elif case_type == "contract":
            return ContractDisputeFlow()
        else:
            return ComplexFlow()  # Human escalation path

Why this matters: 60% of cases are "simple"—clear-cut situations where the evidence obviously supports one party. By routing these to a streamlined flow, we keep the fast path fast.

The Parallel Execution Pattern

Here's the key insight that made this scale: agents don't have to be sequential.

In our architecture, once a case is routed, multiple agents can work in parallel. The Intake, Evidence, and Compliance agents all run simultaneously. They're gathering different information that the Analysis Agent will need. By parallelizing this, we cut latency by 60%.

Layer 2: The Agent Design

Each agent has a specific, narrow responsibility. This is crucial. Agents that try to do too much become unreliable.

Intake Agent

Job: Extract structured information from the initial dispute filing.

Input: Raw text, uploaded documents, form data. Output: Structured case object with parties, claim type, amount, timeline, and a confidence score.

Evidence Agent

Job: Analyze submitted evidence and assess relevance/authenticity.

Uses the Knowledge Graph heavily. Checks submitted contracts against our contract database, identifies relevant precedents, and flags inconsistencies.

Analysis Agent

Job: Apply rules and precedents to determine likely outcome.

This is where GraphRAG shines. The agent traverses relationships: contract type specifications, similar case decisions, jurisdictional rules, and overriding precedents.

Resolution Agent

Job: Generate the resolution and required communications.

Only fires if the Analysis Agent's confidence exceeds our threshold (currently 0.85). Below that, it routes to human review.

Compliance Agent

Job: Ensure all decisions meet legal and regulatory requirements.

Runs on every resolution before it's finalized. Non-negotiable for legal defensibility.

Escalation Agent

Job: Identify cases requiring human intervention.

Watches for signals: low confidence, high stakes, unusual patterns, or explicit party requests. Not everything should be automated.

Layer 3: The Knowledge Layer (GraphRAG)

This is where most multi-agent systems fail. They use naive RAG—vector similarity search over documents. That works for simple Q&A. It doesn't work for complex reasoning.

Dispute resolution requires relational reasoning: What does this contract say about dispute resolution? What's the relationship between these two parties? What precedents apply to this jurisdiction and contract type? These questions require traversing relationships, not just finding similar text.

When the Analysis Agent needs to make a decision, it traverses:

  1. Case → Contract → Clauses: What does the governing contract actually say?
  2. Case → Jurisdiction → Rules: What rules apply here?
  3. Clause → Precedents: How have we interpreted this clause before?
  4. Similar Cases → Resolutions: What have we decided in comparable situations?

This multi-hop reasoning is what makes the system actually intelligent, not just pattern-matching.

The Patterns That Made It Scale

Beyond the architecture, specific patterns were essential:

Pattern #1

Confidence-Gated Execution

Every agent outputs a confidence score. Every transition checks confidence before proceeding. Low-confidence results get human review instead of becoming high-confidence garbage downstream.

if analysis.confidence >= AUTOMATION_THRESHOLD: execute_resolution()
elif analysis.confidence >= REVIEW_THRESHOLD: queue_for_review()
else: escalate_to_human(reason="low_confidence")

Pattern #2

Stateful Case Management

Each case has a state machine: INTAKE → EVIDENCE_GATHERING → ANALYSIS → RESOLUTION → CLOSED (with branches to REVIEW_NEEDED → HUMAN_REVIEW → ESCALATED). State transitions are atomic and logged. Cases never get lost in limbo.

Pattern #3

Chunked Context

We never pass full documents to agents. Everything is chunked, indexed, and retrieved on-demand. An agent processing a 50-page contract sees the 3-5 relevant sections, not 50 pages. This keeps token costs manageable.

Pattern #4

Multi-Model Routing

Not every task needs GPT-4. We route to the right model for each task:

  • • Case classification: Fine-tuned small model (fast, cheap)
  • • Document extraction: Claude 3.5 Sonnet (good at structured output)
  • • Complex reasoning: GPT-4 (when we need the best)
  • • Communication: Claude (good at tone)

This cuts costs by 70% compared to using GPT-4 for everything.

Pattern #5

Human-in-the-Loop Checkpoints

Certain decision points always involve humans: cases above $50K, first case with a new party, cases with legal complexity signals, or any case where parties request human review. The system handles volume. Humans handle edge cases.

The Results

After 12 months in production:

MetricBeforeAfter
Average resolution time23 days12 hours
AI-only resolution rate0%78%
Cost per case$340$45
Party satisfaction3.2/54.4/5
Cases processed annually3,00015,000

The system handles 5x the volume at 13% of the cost with higher satisfaction scores.

What I'd Do Differently

Looking back after a year:

  1. Start with the Knowledge Graph earlier. We added GraphRAG mid-project. Should have been day one. The graph structure shapes everything else.
  2. More aggressive model routing. We were conservative at first, using expensive models everywhere. Earlier experimentation would have saved significant costs.
  3. Better observability from the start. We added comprehensive monitoring after launch. Should have been built in from the beginning. Debugging multi-agent systems without good observability is painful.

Your Takeaways

If you're building a multi-agent system that needs to scale:

  1. Design for parallelism. Don't assume sequential execution. Find agents that can run simultaneously.
  2. Use GraphRAG for relational reasoning. Vector search alone isn't enough for complex domains.
  3. Gate everything on confidence. Don't let garbage cascade. Low confidence = human review.
  4. Chunk your context. Don't pass full documents. Retrieve what's relevant.
  5. Route to the right model. Not every task needs your most expensive model.
  6. Build in human checkpoints. Some decisions shouldn't be fully automated.
  7. Invest in state management. Long-running workflows need proper state machines.

The architecture matters. But more than any single pattern, what matters is thinking about production from day one. Not "how do I make this work?" but "how do I make this work at 15,000 cases per year?"

That mindset shapes everything.

Building multi-agent systems and want help getting to production?

Let's talk

This is exactly what we do.

Newsletter

Architecture deep-dives and production patterns—every Tuesday.

Join 2,500+ engineers and leaders getting practical AI implementation insights.

Subscribe to AI That Ships

Your Privacy Matters

We use cookies to enhance your experience, analyze traffic, and serve targeted ads.

By clicking "Accept All", you consent to all cookies. Cookie Policy