Skip to content
Skip to main content
Order tickets clipped along a rail above three plated dishes under brass heat lamps at a restaurant kitchen pass, illustrating an n8n manager agent handing work to specialist sub-agents
8 min readBy Carlos Aragon

n8n AI Agent Tool vs Sub-Workflow: When to Use Each

n8n gives you two ways to let one agent hand work to another. The AI Agent Tool node hangs a second agent off a root AI Agent as a tool, so the whole hierarchy lives on one canvas and runs inside one execution. The Call n8n Sub-Workflow tool hands the job to a separate workflow with its own execution and its own log. The choice isn't about how complex your build is. It's about whether that specialist needs an execution boundary — something you can retry, replay, reuse and test on its own. Everything else follows from that.

A Manager Agent Is an Expediter, Not a Chef

I spent a couple of years around restaurant kitchens before I wrote software for a living, and the mental model I keep coming back to for multi-agent workflows is the pass. The expediter doesn't cook. They read the ticket, decide who it belongs to, call it out, and check the plate before it leaves. Grill, sauté and garde manger each own one thing and do it well.

That's exactly what a manager agent should be, and it's exactly what most n8n multi-agent builds get wrong. People give the manager tools and sub-agents, then wonder why it sometimes does the work itself instead of delegating. An expediter who starts plating is a slow expediter.

The second thing kitchens get right: every station is its own station. You can pull a cook off grill, replace them, and service continues. That's an execution boundary, and it's the thing the two n8n options actually differ on.

What the AI Agent Tool Node Actually Does

The AI Agent Tool (n8n-nodes-langchain.toolaiagent) is a sub-node you connect to the tool port of a root AI Agent. From the manager's point of view it looks like any other tool: a name and a Descriptionthat tells the model when to reach for it. Underneath, it's a complete agent with its own Prompt (User Message), its own chat model, and its own tools hanging off it.

The settings that matter once you go past the demo:

  • System Message— the specialist's actual job description. This is where the value is. If your sub-agent's system message could be swapped with the manager's without anything breaking, you didn't need a sub-agent.
  • Max Iterations— bounds the sub-agent's loop. Leave this at a low number. A runaway specialist inside a manager's turn is the worst kind of runaway, because the manager is still holding the execution open while it spins.
  • Require Specific Output Format — attaches an output parser so the manager receives structured data instead of prose. Turn this on for anything the manager has to branch on.
  • Return Intermediate Steps— surfaces the sub-agent's reasoning in the output. Useful while you're building, and a token tax you should switch off once you ship.
  • Enable Fallback Model and Batch Processing — a backup model for provider failures, and a size plus delay control for rate limits. Both matter more than they sound like they do when a manager fans out to several specialists in one turn.

You can nest these into multiple layers, so a specialist can supervise its own specialists. You can. In two years of shipping these I've never been glad I went past two levels — at three, a single execution log has to explain three layers of delegation at once, and reading it stops being possible.

What the Call n8n Sub-Workflow Tool Actually Does

The Call n8n Sub-Workflow tool (n8n-nodes-langchain.toolworkflow) points the agent at another workflow in your instance. You pick it by ID from the database, or paste workflow JSON inline. The target workflow needs a Workflow Input Schema defined on its trigger — without it, the parent has no idea what fields to offer, and this is the part people forget before they start blaming the agent.

Inputs get filled one of three ways: a fixed value, an expression reading the current workflow's data, or $fromAI(), which lets the model decide the value at call time. You can mix them in the same node — pin the tenant ID with an expression, let the model choose the search query. That mix is the feature; it means the model never gets to pick which customer's data it touches.

The thing you actually bought is the execution. A sub-workflow call produces its own execution record. You can open it, see exactly what went in and out, re-run it against a fixed input while the parent sits untouched, and let a completely different workflow call the same specialist tomorrow. That's not a nicer debugging experience, it's a different architecture.

The Comparison, Line by Line

Same job, different trade-offs:

  • Execution record— AI Agent Tool: none of its own, it's part of the parent's run. Sub-workflow: its own execution, listed separately.
  • Reuse across workflows — AI Agent Tool: none, it exists only inside this parent. Sub-workflow: any workflow can call it.
  • Retry a failed specialist alone — AI Agent Tool: you re-run the whole parent. Sub-workflow: re-run just that execution.
  • Setup cost — AI Agent Tool: drop the node on the canvas, write a description and a system message. Sub-workflow: build a second workflow, define an input schema, keep IDs in sync between dev and prod.
  • Visibility — AI Agent Tool: the entire hierarchy is on one canvas, which is genuinely great for handing a build to someone else. Sub-workflow: you follow references between workflows.
  • Blast radius of an edit — AI Agent Tool: contained to this workflow. Sub-workflow: you just changed something four other workflows call, which cuts both ways.

My rule: build it as an AI Agent Tool first. Promote it to a sub-workflow the day a second workflow wants it, or the day you find yourself scrolling a parent execution to figure out what one specialist did. Both of those are concrete events, not judgement calls, which is why the rule survives contact with a real backlog.

The Trap Both Share: Sub-Nodes Only See the First Item

This one has cost me more debugging hours than every other n8n quirk combined, and it applies to both nodes because both are sub-nodes.

Root nodes in n8n process input items one at a time — 40 items in, the node runs 40 times, and an expression resolves per item. Sub-nodes don't. A sub-node resolves every expression against the first input item, every single call. n8n documents this plainly with a five-name example: given five names, {{ $json.name }} returns the first name five times.

// 40 leads in. Sub-agent parameter set to:
{{ $json.company }}

// What the specialist sees on all 40 calls:
"Acme Corp"   // ...the first item. Forty times.

It never errors. The workflow goes green. Your enrichment agent researched one company forty times and wrote forty rows. If you've read my post on control flow and agent failures, this is the same family of problem: the failure is silent, so nothing in your monitoring fires.

Two fixes, and they're not interchangeable:

  • Loop at the root level. Put a Loop Over Items node before the manager agent so each record becomes its own agent run. Slower, correct, and you get one execution boundary per record — which is usually what you wanted anyway.
  • Let the model fill the parameter with $fromAI(). The value comes from the model's tool call, not from the input item, so the first-item rule never applies. Right answer when the manager is genuinely choosing the value; wrong answer for anything you need pinned, like a tenant ID.

Delegation Is Not Free

A plain tool — an HTTP request, a Postgres query — costs one call and returns a value. A sub-agent is a different animal. It runs its own agent loop, carrying its own system message and its own tool definitions through every iteration, and when it finishes, the manager pays again: that entire output lands in the manager's next turn as a tool result.

A manager supervising three specialists is four agent loops, not one agent with three tools. Every layer of nesting multiplies rather than adds. That's the number to hold in your head when someone shows you a canvas with nine agents on it.

So the honest test before splitting: do the specialists need different tools, different models, or genuinely different instructions? If all three answers are no, you don't have a multi-agent system. You have one agent with extra billing. A cheaper model on the specialists is the other easy win — research and extraction rarely need your manager's model. I go deeper on where the spend actually goes in AI agent cost optimization.

Do This Before You Split Anything

Multi-agent is a structure for problems you already understand. Adding it to a workflow that's failing for other reasons just gives the failure more places to hide. Three things I want in place first:

  • Tracing.If you can't already see which tool call burned the tokens in a single-agent run, a hierarchy will not clarify it. Start with agent observability.
  • A memory decision.Sub-agents don't share the manager's conversation memory — each one gets what you pass it and nothing else. That's a feature, but it means shared state has to live somewhere deliberate. My take on the storage side is in Postgres vs Redis for agent memory.
  • An eval, even a small one. Twenty saved inputs and an expected outcome is enough to tell you whether splitting made quality better or just made the canvas prettier. I wrote up the setup in n8n AI agent evaluations.

And if you're running this at volume, note that sub-workflow executions are still executions — they land in the same queue and count against the same workers. Fanning out to four specialists per record multiplies your execution count too, not just your token bill. That's a queue mode conversation before it's a prompt conversation.

For the record, the reference material here is worth reading directly: n8n's docs on the AI Agent Tool node and the Call n8n Sub-Workflow tool both spell out the first-item behaviour that costs everyone a day.

Questions I Get Asked

Should the manager agent have its own tools?

Keep it to routing tools at most. Give a manager a web search tool next to a research sub-agent and it will sometimes search directly, because that path is shorter. Then your traces show two different shapes for the same request and you can't tell whether a change helped.

Can I mix both in one workflow?

Yes, and it's often the right answer. AI Agent Tool nodes for the reasoning steps that belong to this workflow, sub-workflow tools for the shared capabilities — the enrichment routine three other automations already call. The manager doesn't care which is which.

Why did my sub-workflow inputs disappear from the parent?

The target workflow lost its Workflow Input Schema, or you selected it before defining one. The parent reads available fields from that schema. Define it on the sub-workflow's trigger, then reselect the workflow in the tool node.

Is this the same as subagents in Claude Code?

The shape is similar — a coordinator delegating to specialists with their own context — but the trade-offs differ, mostly because n8n makes you choose the execution boundary explicitly. I compared the Claude side in skills vs subagents.

Canvas Full of Agents That Nobody Can Debug?

I build production n8n and AI agent systems for teams that need them to run unattended — with the execution boundaries drawn on purpose, the traces readable, and the token bill something you can explain. If your multi-agent workflow works on demo data and falls apart on real volume, that's a fixable problem.

Related Posts

n8n

How to Trace an n8n AI Agent with Langfuse

n8n's execution view shows what every node received and returned. That is not a trace. A trace is one searchable timeline where a single agent run, its tool calls, its retries and its token cost sit under one parent span — so you can ask which prompt version caused last Tuesday's bad answer. Two ways to get there: an HTTP Request node posting to the Langfuse ingestion API, which works on n8n Cloud and survives upgrades, or OpenTelemetry instrumentation of the self-hosted n8n process, which gives you a span per node but is a community proof of concept built on n8n internals. Start with the HTTP Request node, use $execution.id as the trace ID, and pick Langfuse over LangSmith because n8n never exposes the LangChain callbacks LangSmith needs and Langfuse charges nothing per seat.

n8n

How to Evaluate n8n AI Agents Before Production

An n8n AI agent evaluation is four pieces: a dataset of real test cases in a Data Table or Google Sheet, an Evaluation Trigger node that replays every row through the live workflow, an Evaluation node that scores the answer, and a threshold you refuse to ship below. n8n gives you five built-in metrics — Correctness and Helpfulness are LLM-judged on a 1–5 scale, while String Similarity, Categorization, and Tools Used are deterministic and effectively free — plus custom metrics from a Code node. The critical detail is testing the real workflow, not a copy: the Check If Evaluating operation branches side effects out of a test run so nothing emails a real customer. Track two metrics per agent, baseline before you tune, and turn every production incident into a test case the same day.

n8n

Scaling Self-Hosted n8n: When to Switch to Queue Mode (2026)

Default n8n runs the editor, webhooks, and every execution in one Node process — it works until the UI crawls during runs and webhooks drop under load. The signal to move is the main process pinned near 80% CPU; the fix is queue mode: a main instance, a Redis broker, and dedicated workers on Postgres. The exact signals I watch, the env vars I set, and the mistakes that cost me a night of dropped executions.