# What is an Agentic Data Plane?

An agentic data plane is the execution layer for AI agents — LLM routing, tool execution, context, and orchestration. Distinct from the agentic control plane.

# What Is an Agentic Data Plane?

An **agentic data plane** is the execution layer for AI agents. It's everything that actually does the work an agent is asked to do: routing prompts to models, executing tool calls, reading from databases, writing to APIs, and streaming results back. It's distinct from the [agentic control plane](/what-is-an-agentic-control-plane), which decides *whether* an action is allowed and records *what happened*. In production AI infrastructure, you need both.

<div style="margin:36px 0 24px;overflow-x:auto;max-width:100%;">
  <svg viewBox="0 0 900 320" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Diagram: the two planes of agentic infrastructure — data plane executes, control plane controls" style="width:100%;max-width:900px;display:block;margin:0 auto;font-family:system-ui,sans-serif;">
    <defs>
      <linearGradient id="dp-grad-data" x1="0" x2="0" y1="0" y2="1">
        <stop offset="0" stop-color="#f0effe"/>
        <stop offset="1" stop-color="#ffffff"/>
      </linearGradient>
      <linearGradient id="dp-grad-ctrl" x1="0" x2="0" y1="0" y2="1">
        <stop offset="0" stop-color="#e0f7fb"/>
        <stop offset="1" stop-color="#ffffff"/>
      </linearGradient>
      <marker id="dp-arrow" markerWidth="8" markerHeight="6" refX="8" refY="3" orient="auto">
        <polygon points="0 0, 8 3, 0 6" fill="#5b5bd6"/>
      </marker>
    </defs>
    <!-- Data Plane panel -->
    <rect x="20" y="40" width="400" height="260" rx="14" fill="url(#dp-grad-data)" stroke="#5b5bd6" stroke-width="1.5"/>
    <text x="220" y="28" text-anchor="middle" font-size="13" font-weight="600" fill="#5b5bd6" letter-spacing="1">AGENTIC DATA PLANE</text>
    <text x="220" y="66" text-anchor="middle" font-size="16" font-weight="700" fill="#1d1d1f">Execution layer</text>
    <text x="220" y="84" text-anchor="middle" font-size="11" fill="#4a4a52">What actually does the work</text>
    <!-- Data plane capability cards -->
    <rect x="40" y="100" width="175" height="36" rx="8" fill="#ffffff" stroke="#b8b8dc"/>
    <text x="127" y="116" text-anchor="middle" font-size="11" font-weight="600" fill="#1d1d1f">LLM routing</text>
    <text x="127" y="128" text-anchor="middle" font-size="9" fill="#8a8a9a">OpenAI · Anthropic · local</text>
    <rect x="225" y="100" width="175" height="36" rx="8" fill="#ffffff" stroke="#b8b8dc"/>
    <text x="312" y="116" text-anchor="middle" font-size="11" font-weight="600" fill="#1d1d1f">Tool execution</text>
    <text x="312" y="128" text-anchor="middle" font-size="9" fill="#8a8a9a">MCP · fn calls · APIs</text>
    <rect x="40" y="146" width="175" height="36" rx="8" fill="#ffffff" stroke="#b8b8dc"/>
    <text x="127" y="162" text-anchor="middle" font-size="11" font-weight="600" fill="#1d1d1f">Context management</text>
    <text x="127" y="174" text-anchor="middle" font-size="9" fill="#8a8a9a">RAG · memory · history</text>
    <rect x="225" y="146" width="175" height="36" rx="8" fill="#ffffff" stroke="#b8b8dc"/>
    <text x="312" y="162" text-anchor="middle" font-size="11" font-weight="600" fill="#1d1d1f">Streaming</text>
    <text x="312" y="174" text-anchor="middle" font-size="9" fill="#8a8a9a">SSE · incremental tokens</text>
    <rect x="40" y="192" width="360" height="36" rx="8" fill="#ffffff" stroke="#b8b8dc"/>
    <text x="220" y="208" text-anchor="middle" font-size="11" font-weight="600" fill="#1d1d1f">Orchestration</text>
    <text x="220" y="220" text-anchor="middle" font-size="9" fill="#8a8a9a">multi-step flows · supervisor/worker · handoffs</text>
    <rect x="40" y="240" width="360" height="42" rx="8" fill="#ffffff" stroke="#d0d0e8" stroke-dasharray="3,3"/>
    <text x="220" y="257" text-anchor="middle" font-size="10" font-weight="600" fill="#4a4a52">Typical products</text>
    <text x="220" y="272" text-anchor="middle" font-size="9" fill="#8a8a9a">LangChain · LangGraph · CrewAI · LiteLLM · MCP servers</text>
    <!-- Arrow: governance boundary -->
    <line x1="420" y1="170" x2="480" y2="170" stroke="#5b5bd6" stroke-width="2" marker-end="url(#dp-arrow)"/>
    <line x1="480" y1="170" x2="420" y2="170" stroke="#5b5bd6" stroke-width="2" marker-end="url(#dp-arrow)"/>
    <text x="450" y="162" text-anchor="middle" font-size="9" fill="#5b5bd6" font-weight="600">every call</text>
    <text x="450" y="186" text-anchor="middle" font-size="9" fill="#5b5bd6" font-weight="600">crosses boundary</text>
    <!-- Control Plane panel -->
    <rect x="480" y="40" width="400" height="260" rx="14" fill="url(#dp-grad-ctrl)" stroke="#0891b2" stroke-width="1.5"/>
    <text x="680" y="28" text-anchor="middle" font-size="13" font-weight="600" fill="#0891b2" letter-spacing="1">AGENTIC CONTROL PLANE</text>
    <text x="680" y="66" text-anchor="middle" font-size="16" font-weight="700" fill="#1d1d1f">Control layer</text>
    <text x="680" y="84" text-anchor="middle" font-size="11" fill="#4a4a52">What decides whether work is allowed</text>
    <!-- Control plane capability cards -->
    <rect x="500" y="100" width="175" height="36" rx="8" fill="#ffffff" stroke="#b8b8dc"/>
    <text x="587" y="116" text-anchor="middle" font-size="11" font-weight="600" fill="#1d1d1f">Identity</text>
    <text x="587" y="128" text-anchor="middle" font-size="9" fill="#8a8a9a">JWT · OIDC · delegation chain</text>
    <rect x="685" y="100" width="175" height="36" rx="8" fill="#ffffff" stroke="#b8b8dc"/>
    <text x="772" y="116" text-anchor="middle" font-size="11" font-weight="600" fill="#1d1d1f">Policy</text>
    <text x="772" y="128" text-anchor="middle" font-size="9" fill="#8a8a9a">3-axis ABAC · audit-only by default</text>
    <rect x="500" y="146" width="175" height="36" rx="8" fill="#ffffff" stroke="#b8b8dc"/>
    <text x="587" y="162" text-anchor="middle" font-size="11" font-weight="600" fill="#1d1d1f">Content safety</text>
    <text x="587" y="174" text-anchor="middle" font-size="9" fill="#8a8a9a">PII · secrets · injection scan</text>
    <rect x="685" y="146" width="175" height="36" rx="8" fill="#ffffff" stroke="#b8b8dc"/>
    <text x="772" y="162" text-anchor="middle" font-size="11" font-weight="600" fill="#1d1d1f">Budget</text>
    <text x="772" y="174" text-anchor="middle" font-size="9" fill="#8a8a9a">per-user · per-agent caps</text>
    <rect x="500" y="192" width="360" height="36" rx="8" fill="#ffffff" stroke="#b8b8dc"/>
    <text x="680" y="208" text-anchor="middle" font-size="11" font-weight="600" fill="#1d1d1f">Audit</text>
    <text x="680" y="220" text-anchor="middle" font-size="9" fill="#8a8a9a">structured · identity-attributed · compliance-ready</text>
    <rect x="500" y="240" width="360" height="42" rx="8" fill="#ffffff" stroke="#d0d0e8" stroke-dasharray="3,3"/>
    <text x="680" y="257" text-anchor="middle" font-size="10" font-weight="600" fill="#4a4a52">Typical products</text>
    <text x="680" y="272" text-anchor="middle" font-size="9" fill="#8a8a9a">ACP · agent gateways · NHI platforms</text>
  </svg>
  <div style="text-align:center;font-size:12px;color:#8a8a9a;margin-top:8px;font-style:italic;">Two planes, distinct responsibilities. Every data-plane action crosses the boundary for control-plane evaluation.</div>
</div>

---

## The Short Version

In classical networking and cloud infrastructure, the "data plane" moves packets, processes queries, and handles real-time traffic. The "control plane" configures policy, distributes routing tables, and coordinates state. Both planes exist in every serious system because they're load-bearing in different ways.

AI agent infrastructure is evolving into the same split:

- **Agentic data plane** → *executes* actions. LLM calls, tool invocations, context management, streaming responses, orchestration between agents.
- **[Agentic control plane](/what-is-an-agentic-control-plane)** → *controls* actions. Identity verification, policy enforcement, content safety, budget caps, audit emission.

If you've ever wondered why your "simple" agent deployment feels fragile — why control is hard to enforce, why audit trails are incomplete, why different agents have inconsistent security — the reason is almost always that you've built both planes in the same codebase, tangled together.

---

## What a Data Plane Does (Concretely)

The agentic data plane is responsible for:

**LLM routing and model selection.** Choosing which provider gets the prompt (OpenAI, Anthropic, Google, a local model), handling failover, optimizing for cost or latency, applying prompt templates. This is the work of products like [LiteLLM, Portkey, OpenRouter, and LLM gateways](/blog/why-api-gateways-dont-solve-ai-governance).

**Tool execution.** When the model emits a `tool_use` block, something has to actually run the tool — make the HTTP request, execute the database query, read the file. MCP servers, agent frameworks (LangChain, LangGraph, CrewAI, AutoGen), and custom tool dispatchers all live here.

**Context management.** Building the prompt, retrieving relevant documents (RAG), maintaining conversation history, managing memory across turns. Vector databases, retrievers, and memory systems are data-plane components.

**Response streaming.** Delivering the model's tokens to the end user or to the next agent in a chain, without buffering the full response.

**Orchestration and workflow.** Multi-step agent flows, chain-of-thought, sub-agent coordination, handoffs. A LangGraph supervisor-and-workers pattern, a CrewAI crew, an OpenAI Agents SDK handoff — these are all data-plane orchestration patterns.

What the data plane does *not* decide: whether the action should be allowed, who's responsible, whether the data crossing it is sensitive, or whether the right user's identity is attached. Those are control-plane questions.

---

## Why the Split Matters

Three reasons.

**1. Control gets enforced inconsistently if every data-plane product owns its own policy.**

If your LangChain deployment has its own allow-list, your MCP server has another one, and your custom workflow tool has a third, then you have three places to keep in sync. The moment an engineer adds a new integration, that integration either re-implements policy or skips it. That's how production AI systems end up with "the Claude instance has audit but the Cursor instance doesn't."

A dedicated control plane solves this by living at the trust boundary between the data plane and your real backend systems. Every data-plane execution path — whether it's LangGraph, CrewAI, Claude Desktop, or a hand-rolled Python script — flows through the same control pipeline.

**2. Audit evidence is useless if it's per-tool and per-framework.**

SOC 2 auditors, HIPAA compliance reviewers, and EU AI Act Article 14 assessors don't want to log into five different observability tools. They want one evidence trail per user action, showing who did what, with what authorization, when, and whether any policy layer denied anything.

A data-plane-only architecture produces fragmented audit. A control-plane architecture produces unified [AI agent audit trails](/blog/ai-agent-audit-trails).

**3. Agent-to-agent delegation requires both planes to coordinate.**

When agent A delegates to agent B, the data plane handles the transport (the MCP call, the handoff, the A2A protocol exchange). But "can agent B actually do this on behalf of the human who started agent A?" is a control-plane question — and a hard one. It requires [delegation chain](/what-is-an-agent-delegation-chain) primitives with scope intersection, budget propagation, and cycle detection. See [agent-to-agent governance](/agent-to-agent) for the ACP approach.

---

## The Agentic Data Plane Ecosystem

<div style="margin:28px 0 20px;overflow-x:auto;max-width:100%;">
  <svg viewBox="0 0 900 340" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Ecosystem map of agentic data plane products organized by category" style="width:100%;max-width:900px;display:block;margin:0 auto;font-family:system-ui,sans-serif;">
    <!-- Title bar -->
    <rect x="20" y="16" width="860" height="36" rx="8" fill="#f0effe" stroke="#5b5bd6" stroke-width="1.5"/>
    <text x="450" y="40" text-anchor="middle" font-size="13" font-weight="700" fill="#5b5bd6" letter-spacing="1">AGENTIC DATA PLANE ECOSYSTEM</text>
    <!-- Row 1: LLM gateways -->
    <rect x="20" y="68" width="210" height="56" rx="8" fill="#ffffff" stroke="#b8b8dc"/>
    <text x="125" y="84" text-anchor="middle" font-size="11" font-weight="700" fill="#1d1d1f">LLM gateways</text>
    <text x="125" y="99" text-anchor="middle" font-size="9" fill="#4a4a52">routing · failover · caching</text>
    <text x="125" y="115" text-anchor="middle" font-size="9" fill="#8a8a9a">LiteLLM · Portkey · OpenRouter</text>
    <!-- Row 1: Agent frameworks -->
    <rect x="240" y="68" width="210" height="56" rx="8" fill="#ffffff" stroke="#b8b8dc"/>
    <text x="345" y="84" text-anchor="middle" font-size="11" font-weight="700" fill="#1d1d1f">Agent frameworks</text>
    <text x="345" y="99" text-anchor="middle" font-size="9" fill="#4a4a52">orchestration · tool loops</text>
    <text x="345" y="115" text-anchor="middle" font-size="9" fill="#8a8a9a">LangChain · LangGraph · CrewAI</text>
    <!-- Row 1: SDKs -->
    <rect x="460" y="68" width="210" height="56" rx="8" fill="#ffffff" stroke="#b8b8dc"/>
    <text x="565" y="84" text-anchor="middle" font-size="11" font-weight="700" fill="#1d1d1f">Agent SDKs</text>
    <text x="565" y="99" text-anchor="middle" font-size="9" fill="#4a4a52">skills · handoffs · guardrails</text>
    <text x="565" y="115" text-anchor="middle" font-size="9" fill="#8a8a9a">OpenAI Agents · Claude Agent SDK</text>
    <!-- Row 1: Runtimes -->
    <rect x="680" y="68" width="200" height="56" rx="8" fill="#ffffff" stroke="#b8b8dc"/>
    <text x="780" y="84" text-anchor="middle" font-size="11" font-weight="700" fill="#1d1d1f">Orchestration runtimes</text>
    <text x="780" y="99" text-anchor="middle" font-size="9" fill="#4a4a52">stateful workflows</text>
    <text x="780" y="115" text-anchor="middle" font-size="9" fill="#8a8a9a">Temporal · Airflow · custom</text>
    <!-- Row 2: MCP clients -->
    <rect x="20" y="136" width="210" height="56" rx="8" fill="#ffffff" stroke="#b8b8dc"/>
    <text x="125" y="152" text-anchor="middle" font-size="11" font-weight="700" fill="#1d1d1f">MCP clients</text>
    <text x="125" y="167" text-anchor="middle" font-size="9" fill="#4a4a52">user-facing tool execution</text>
    <text x="125" y="183" text-anchor="middle" font-size="9" fill="#8a8a9a">Claude Desktop · Cursor · Cline</text>
    <!-- Row 2: MCP servers -->
    <rect x="240" y="136" width="210" height="56" rx="8" fill="#ffffff" stroke="#b8b8dc"/>
    <text x="345" y="152" text-anchor="middle" font-size="11" font-weight="700" fill="#1d1d1f">MCP servers</text>
    <text x="345" y="167" text-anchor="middle" font-size="9" fill="#4a4a52">expose tools to agents</text>
    <text x="345" y="183" text-anchor="middle" font-size="9" fill="#8a8a9a">filesystem · GitHub · Slack · custom</text>
    <!-- Row 2: CLIs -->
    <rect x="460" y="136" width="210" height="56" rx="8" fill="#ffffff" stroke="#b8b8dc"/>
    <text x="565" y="152" text-anchor="middle" font-size="11" font-weight="700" fill="#1d1d1f">Coding agent CLIs</text>
    <text x="565" y="167" text-anchor="middle" font-size="9" fill="#4a4a52">terminal-driven agents</text>
    <text x="565" y="183" text-anchor="middle" font-size="9" fill="#8a8a9a">Claude Code · Codex</text>
    <!-- Row 2: Vector -->
    <rect x="680" y="136" width="200" height="56" rx="8" fill="#ffffff" stroke="#b8b8dc"/>
    <text x="780" y="152" text-anchor="middle" font-size="11" font-weight="700" fill="#1d1d1f">Vector DBs · RAG</text>
    <text x="780" y="167" text-anchor="middle" font-size="9" fill="#4a4a52">context retrieval</text>
    <text x="780" y="183" text-anchor="middle" font-size="9" fill="#8a8a9a">Pinecone · Weaviate · pgvector</text>
    <!-- Unified boundary below -->
    <rect x="20" y="210" width="860" height="50" rx="10" fill="#e0f7fb" stroke="#0891b2" stroke-width="2" stroke-dasharray="6,3"/>
    <text x="450" y="232" text-anchor="middle" font-size="12" font-weight="700" fill="#0891b2">TRUST BOUNDARY — every data-plane call must pass through</text>
    <text x="450" y="250" text-anchor="middle" font-size="10" fill="#4a4a52">identity verification · policy enforcement · content safety · audit emission</text>
    <!-- Control plane below -->
    <rect x="20" y="276" width="860" height="44" rx="10" fill="#ffffff" stroke="#0891b2" stroke-width="1.5"/>
    <text x="450" y="295" text-anchor="middle" font-size="12" font-weight="700" fill="#0891b2">AGENTIC CONTROL PLANE</text>
    <text x="450" y="312" text-anchor="middle" font-size="10" fill="#4a4a52">one control layer for every data-plane product in your stack</text>
  </svg>
  <div style="text-align:center;font-size:12px;color:#8a8a9a;margin-top:8px;font-style:italic;">Every data-plane category is complementary to the control plane. Control is consistent regardless of which data-plane products you use.</div>
</div>

## Common Agentic Data Plane Products

| Category | Examples |
|---|---|
| LLM gateways | LiteLLM, Portkey, OpenRouter, Kong AI Gateway |
| Agent frameworks | LangChain, [LangGraph](/integrations/langgraph), [CrewAI](/integrations/crewai), [OpenAI Agents SDK](/integrations/openai-agents-sdk), [Anthropic Agent SDK](/integrations/anthropic-agent-sdk), AutoGen |
| MCP servers / clients | [Claude Desktop](/integrations/claude-desktop), [Cursor](/integrations/cursor), [Claude Code](/integrations/claude-code), [Cline](/integrations/cline), [Codex CLI](/integrations/codex), custom MCP servers |
| Vector DBs / retrievers | Pinecone, Weaviate, Chroma, pgvector |
| Orchestration runtimes | Temporal, Airflow, custom state machines |

These are all valuable — and all data-plane. None of them is a substitute for control-plane policy. [Agentic Control Plane](/what-is-an-agentic-control-plane) is designed to control any data plane without replacing it.

---

## How the Two Planes Interact

<div style="margin:28px 0 28px;overflow-x:auto;max-width:100%;">
  <svg viewBox="0 0 900 300" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Sequence diagram: a tool call passes through both planes" style="width:100%;max-width:900px;display:block;margin:0 auto;font-family:system-ui,sans-serif;">
    <defs>
      <marker id="dp-seq-arrow" markerWidth="8" markerHeight="6" refX="8" refY="3" orient="auto">
        <polygon points="0 0, 8 3, 0 6" fill="#5b5bd6"/>
      </marker>
      <marker id="dp-seq-arrow-cyan" markerWidth="8" markerHeight="6" refX="8" refY="3" orient="auto">
        <polygon points="0 0, 8 3, 0 6" fill="#0891b2"/>
      </marker>
    </defs>
    <!-- Vertical lane headers -->
    <rect x="30" y="20" width="160" height="40" rx="8" fill="#f0effe" stroke="#5b5bd6" stroke-width="1.5"/>
    <text x="110" y="37" text-anchor="middle" font-size="11" font-weight="600" fill="#5b5bd6">DATA PLANE</text>
    <text x="110" y="52" text-anchor="middle" font-size="10" fill="#4a4a52">Agent framework</text>
    <rect x="370" y="20" width="160" height="40" rx="8" fill="#e0f7fb" stroke="#0891b2" stroke-width="1.5"/>
    <text x="450" y="37" text-anchor="middle" font-size="11" font-weight="600" fill="#0891b2">CONTROL PLANE</text>
    <text x="450" y="52" text-anchor="middle" font-size="10" fill="#4a4a52">ACP control pipeline</text>
    <rect x="710" y="20" width="160" height="40" rx="8" fill="#f5f5fa" stroke="#b8b8dc" stroke-width="1.5"/>
    <text x="790" y="37" text-anchor="middle" font-size="11" font-weight="600" fill="#1d1d1f">BACKEND</text>
    <text x="790" y="52" text-anchor="middle" font-size="10" fill="#4a4a52">Salesforce · GitHub · DB</text>
    <!-- Lane lines -->
    <line x1="110" y1="60" x2="110" y2="280" stroke="#d0d0e8" stroke-width="1" stroke-dasharray="3,3"/>
    <line x1="450" y1="60" x2="450" y2="280" stroke="#d0d0e8" stroke-width="1" stroke-dasharray="3,3"/>
    <line x1="790" y1="60" x2="790" y2="280" stroke="#d0d0e8" stroke-width="1" stroke-dasharray="3,3"/>
    <!-- Step 1 -->
    <circle cx="110" cy="88" r="12" fill="#5b5bd6"/>
    <text x="110" y="92" text-anchor="middle" font-size="10" font-weight="700" fill="#ffffff">1</text>
    <text x="130" y="92" font-size="10" fill="#1d1d1f" font-weight="600">Agent emits tool_use</text>
    <text x="130" y="105" font-size="9" fill="#8a8a9a">database.query · salesforce.update · github.pr</text>
    <!-- Step 2: arrow to control plane -->
    <line x1="130" y1="130" x2="430" y2="130" stroke="#5b5bd6" stroke-width="1.5" marker-end="url(#dp-seq-arrow)"/>
    <text x="280" y="123" text-anchor="middle" font-size="9" fill="#5b5bd6" font-weight="600">POST /govern/tool-use</text>
    <circle cx="450" cy="130" r="12" fill="#0891b2"/>
    <text x="450" y="134" text-anchor="middle" font-size="10" font-weight="700" fill="#ffffff">2</text>
    <!-- Step 3: evaluation details -->
    <rect x="345" y="150" width="210" height="80" rx="8" fill="#ffffff" stroke="#0891b2" stroke-dasharray="4,3"/>
    <text x="450" y="166" text-anchor="middle" font-size="10" font-weight="600" fill="#0891b2">7-layer pipeline runs</text>
    <text x="450" y="180" text-anchor="middle" font-size="9" fill="#4a4a52">✓ identity verified</text>
    <text x="450" y="193" text-anchor="middle" font-size="9" fill="#4a4a52">✓ policy evaluated</text>
    <text x="450" y="206" text-anchor="middle" font-size="9" fill="#4a4a52">✓ PII scanned</text>
    <text x="450" y="219" text-anchor="middle" font-size="9" fill="#4a4a52">✓ budget checked</text>
    <!-- Step 4: allow/deny back to data plane -->
    <line x1="430" y1="245" x2="130" y2="245" stroke="#0891b2" stroke-width="1.5" marker-end="url(#dp-seq-arrow-cyan)"/>
    <text x="280" y="238" text-anchor="middle" font-size="9" fill="#0891b2" font-weight="600">{ decision: allow | deny, reason }</text>
    <circle cx="110" cy="245" r="12" fill="#5b5bd6"/>
    <text x="110" y="249" text-anchor="middle" font-size="10" font-weight="700" fill="#ffffff">3</text>
    <!-- Step 5: execute to backend -->
    <line x1="130" y1="270" x2="770" y2="270" stroke="#1d1d1f" stroke-width="1.5" marker-end="url(#dp-seq-arrow)"/>
    <text x="450" y="263" text-anchor="middle" font-size="9" fill="#1d1d1f" font-weight="600">if allowed → execute</text>
    <circle cx="790" cy="270" r="12" fill="#1d1d1f"/>
    <text x="790" y="274" text-anchor="middle" font-size="10" font-weight="700" fill="#ffffff">4</text>
  </svg>
  <div style="text-align:center;font-size:12px;color:#8a8a9a;margin-top:8px;font-style:italic;">Every tool call is round-tripped through the control plane before execution. Audit is emitted whether allowed or denied.</div>
</div>

Every action in a production AI system crosses the boundary between the two planes twice:

1. **Data plane decides to do something** — e.g., the agent emits `tool_use: { name: "database.query", input: { sql: "..." } }`.
2. **Control plane evaluates** — is the caller identified? Is this tool in scope? Is the SQL within policy? Is the user within budget? Does any PII need to be redacted?
3. **Control plane returns allow/deny/transform** — with a reason.
4. **Data plane executes** (if allowed) or surfaces the denial (if not).
5. **Control plane emits audit** — the record of what happened, with full identity and policy context.

Think of the control plane as the clerk at the bank counter. The data plane is the parrot with the account number. The parrot repeats what it heard; the clerk verifies *who actually asked* before letting anything move. See the [Three-Party Problem explainer](/what-is-an-agentic-control-plane#the-three-party-problem) for why this pattern is foundational.

---

## Data Plane vs Control Plane — Side by Side

| | Agentic Data Plane | [Agentic Control Plane](/what-is-an-agentic-control-plane) |
|---|---|---|
| Primary job | Execute actions | Control actions |
| Owns | Model calls, tool execution, streaming, orchestration | Identity, policy, audit, budget, safety |
| Examples | LangChain, CrewAI, Portkey, MCP servers | ACP, Astrix, Aembit-style NHI platforms |
| Failure mode if missing | Nothing happens | Everything happens unsafely |
| Auditable | Usually per-product | Unified across all data planes |
| Scales via | Horizontal replicas, caching, model-routing | Central policy + distributed enforcement |

---

## When You Need a Dedicated Data Plane

Most teams start with an implicit data plane — whatever framework they picked. That's fine for prototypes. The signals that you need to start treating the data plane as a first-class layer:

- You're running more than one LLM provider and need failover or cost routing
- You have more than one MCP server or agent framework in production
- You need to swap models without code changes
- You want centralized observability across multiple orchestration products
- You need to scale the tool-execution layer independently of the control layer

If any two of those apply, consider a dedicated LLM gateway or MCP proxy for the data plane. Then put a [control plane](/what-is-an-agentic-control-plane) in front of it so the control layer is consistent regardless of which data-plane product you use.

---

## Related Reading

- [Agentic Data Plane vs Agentic Control Plane](/blog/agentic-data-plane-vs-agentic-control-plane) — the deeper comparison
- [Why API Gateways Don't Solve AI Governance](/blog/why-api-gateways-dont-solve-ai-governance) — why a traditional data-plane tool isn't enough
- [MCP Gateway Comparison](/blog/mcp-gateway-comparison) — the MCP-specific data-plane landscape
- [What is an Agentic Control Plane?](/what-is-an-agentic-control-plane) — the control counterpart
- [Reference Architecture](/reference-architecture) — how the hook and gateway sit at the data-plane/control-plane boundary

---

## FAQ

**Is an agentic data plane the same as an LLM gateway?**
Close but not identical. An LLM gateway is one *component* of the agentic data plane — the part that routes and manages model calls. The data plane also includes tool execution, context management, and orchestration, none of which an LLM gateway typically handles.

**Can I have a control plane without a data plane?**
No. The data plane is where execution happens. A control plane alone has nothing to control. What you can have is the data plane tangled into application code (most startups) vs a dedicated data-plane product (most scaled teams).

**Is MCP a data plane or a control plane?**
MCP is a protocol specification that describes how clients and servers expose and invoke tools. Most MCP deployments are data-plane components — they execute tool calls. A control plane can sit in front of MCP servers (see [MCP control plane](/what-is-an-mcp-control-plane) and [MCP audit gap](/blog/mcp-audit-gap)) to enforce policy.

**Is CrewAI a data plane?**
Yes. [CrewAI](/integrations/crewai) is an agent framework — it orchestrates LLM calls, tool invocations, and multi-agent handoffs. It's a data-plane component. [Control layers on top](/integrations/crewai) via the control plane.

**Does my team need both planes from day one?**
No. Early-stage projects usually conflate them — the agent framework plays both roles. The moment you hit production scale, regulated industries, multi-framework deployments, or need for agent-to-agent control, splitting them out becomes high-leverage.

**What's the difference between an agentic data plane and an AI gateway?**
"AI gateway" is a marketing term that usually refers to an LLM-routing product (Portkey, Kong AI Gateway, NeuralTrust, LiteLLM). AI gateways are a *subset* of data-plane capability — they handle model routing and some safety features, but don't typically handle tool execution, agent orchestration, or agent-to-agent delegation. They also don't handle identity attribution or delegation-chain control.

**How does this relate to the Forrester Agent Control Plane market evaluation?**
Forrester's upcoming market evaluation is focused on the **agent control plane** — the control layer, not the execution layer. Agentic data plane products (frameworks, LLM gateways, MCP runtimes) may be adjacent but aren't the same category.

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Article",
  "headline": "What Is an Agentic Data Plane?",
  "description": "An agentic data plane is the execution layer for AI agents — LLM routing, tool execution, context management, orchestration. Distinct from the agentic control plane, which controls trust.",
  "author": {"@type": "Organization", "name": "Agentic Control Plane"},
  "publisher": {"@type": "Organization", "name": "Agentic Control Plane"}
}
</script>

