Super Agent node
An agent whose tools are your project's published workflows. It decomposes a request, delegates to the right capabilities, and answers from their results
Purpose
The Super Agent node is an agent that plans and delegates. Instead of being handed a fixed list of tools by the builder, it discovers the published workflows in its own project and treats each one as a callable capability. Given a request, it decomposes the work, calls the capabilities it needs in the right order, and writes the final answer from what came back.
This is the difference between a workflow that does one thing well and a front door that routes across everything the project already automates. If your project has a leave-balance lookup, an expense-policy answerer, and a ticket-creation workflow, a Super Agent in front of them can take "I'm travelling next month, how much leave do I have and what's the per-diem?" and handle both halves without you ever authoring the branch.
The Super Agent's tool belt is governance-bounded by construction. It can only call workflows that were explicitly published, in its own project, minus anything you switched off on the node. It cannot invent a tool, reach into another project, or call an unpublished draft.
The Super Agent node is a preview capability. It appears in the Studio node palette only when your deployment has it enabled (NEXT_PUBLIC_ENABLE_ORCHESTRATOR). If you don't see Super Agent in the palette, ask your platform administrator to turn it on for your environment.
When to use it
| Node | Use it for |
|---|---|
| Super Agent | One entry point over many published workflows, where the request decides which run and in what order |
| Agent | LLM reasoning within one step, using MCP tools and knowledge bases you attach |
| Use Case node | Calling one specific child workflow at an authored point in the graph |
| Condition | Deterministic routing you can express as rules |
If you can draw the routing on the canvas, draw it. A Condition node is cheaper, faster, and fully predictable. Reach for a Super Agent when the set of possible requests is open-ended and the routing is genuinely a judgement call.
How it works
Capabilities are discovered
When the node runs, MagOneAI lists every published use case in the project, excludes the workflow the Super Agent itself lives in, and removes anything you turned off on the node. Each survivor becomes one tool the model can call.
The prompt is assembled
Your instructions become the system prompt. The platform appends the delegation protocol, the signed-in user's identity, any remembered entries for that user, chat attachments, and the recall nudge, so every Super Agent gets the same baseline discipline without you writing it.
The model plans and calls
The agent loop runs: the model reads the request, calls one or more capabilities (several at once when they're independent), reads the results, and decides what to do next. Every call and result stays inside the loop's conversation.
Each capability runs as a real execution
A capability call isn't a function call. It starts a child workflow execution of that use case's published version, with its own execution row, audit log, and variable store. Its output comes back to the model as the tool result.
The Super Agent answers
When the model produces a content reply instead of another tool call, the loop ends. The reply is the node's output. If long-term memory is on, a post-run pass records what should be remembered about this user.
Capabilities
How a workflow becomes a capability
Every published use case in the project is turned into one tool:
- Tool name: derived from the workflow's slug, prefixed
uc_(for exampleuc_leave-balance), capped at 60 characters and de-duplicated with a numeric suffix if two slugs collide. - Description: the workflow's own description, truncated at 1,024 characters. If it has none, the platform falls back to
Run the '<name>' workflow. - Parameters: the Start node's input schema from the pinned published snapshot, exactly as a direct caller would send it.
Your workflow descriptions become the routing signal. A Super Agent picks capabilities by reading them, so a vague description ("handles requests") is the single most common cause of bad routing. Say what the workflow takes in, what it returns, and when it should be used.
File and image inputs
A Start field typed file or image is exposed to the model as a string file_id, not as a file upload. The description tells the model to pass a file_id it already holds and never to invent one. When the call is made, the id is validated against the child's real schema with a project-scoped check, and the child resolves the file exactly as it would for a direct submission.
If a document is attached to the conversation, the Super Agent is told its file_id so it can hand the reference onward instead of retyping the content into the capability's arguments. Retyping silently loses content that neither side can detect afterwards.
Which workflows are excluded
A workflow in the project will not appear as a capability if any of these apply:
| Reason | What it means |
|---|---|
not published | The use case has no published version. Drafts are never callable. |
disabled for this super agent | You switched it off in the node's Capabilities section. |
contains unsupported node type: human_task | The workflow pauses for a human, which a capability call cannot wait on. |
contains unsupported node type: orchestrator | Super Agents cannot call other Super Agents. |
over capability cap | The project exceeded the 50-capability ceiling for one node. |
capabilities disabled (max_capability_calls=0) | Capabilities are switched off entirely on this node; nothing is exposed. |
Every one of these is recorded on the execution, with its reason. See What the debugger shows.
Turning capabilities off
The Capabilities section of the properties panel lists every workflow in the project. Published ones carry a callable badge; click it to switch that workflow off for this Super Agent. Unpublished ones show not published and can't be toggled.
This is a deny list scoped to the node, which has two useful consequences:
- Two Super Agents in the same project can each expose a different subset.
- A newly published workflow is callable immediately, with no reconfiguration. If you don't want that, switch it off explicitly.
Save the workflow to apply a capability change, then publish it for the change to affect live runs.
What happens on a capability call
Each call is validated and recorded before anything executes:
Depth and cycle guard
The call is rejected if it would exceed the maximum nesting depth (5 levels) or re-enter a use case already in the current chain. The model receives the violation as a tool error and re-plans.
Availability re-check
The target must still exist, still be active, still be in the same project, and still be published. A workflow unpublished mid-run stops being callable immediately (governance wins over convenience), and the model is told Capability was unpublished.
Argument validation
The model's arguments are validated server-side against the pinned snapshot's real Start schema, using the same machinery as the public execute API, including project-scoped file_id checks. A validation failure returns an error to the model rather than raising, so the run continues and the model corrects itself.
Child execution and audit row
A child execution row and a per-call audit log entry are created in one transaction, stamped with the Super Agent node that owns them.
The child workflow runs
The child use case executes its published snapshot end to end, with its own timeout. Its output returns to the model as the tool message.
Capability calls never crash the Super Agent. Every failure path, whether an unavailable capability, invalid arguments, an infrastructure error, or a timeout, comes back as an error string in the tool result, so the model can retry differently or explain what it couldn't do.
Budgets
Two limits bound what one run can spend:
max_capability_calls(default 10) is a run-wide counter across the whole loop. When it's exceeded, the next call returnsCapability call limit reached (N). Answer with available information.and the model is expected to conclude. Setting it to 0 disables capabilities entirely: nothing is exposed to the model at all, and the node becomes a plain instructions-driven agent.capability_timeout_minutes(default 15) is the ceiling on a single child workflow.
The delegation protocol
Beyond your instructions, the platform appends a fixed set of delegation rules to every Super Agent's prompt. You don't write these, and you can't turn them off. They exist so builders don't have to rediscover them:
- One goal per call. Keep enumeration (listing candidates) separate from interpretation (choosing and reading one).
- Each call is self-contained. The capability cannot see the conversation or the agent's other calls, so every detail it needs must be in the arguments.
- Pass ids forward. When a result includes an id, the exact id goes into follow-up calls instead of a re-description.
- A "not found" is one data point, not a conclusion. The agent must retry with a genuinely different angle (a different field, a wider range, an alternate spelling) before reporting failure.
- Results accumulate, they don't replace. If a retry returns less than an earlier call did, the agent answers from the earlier result and says which one it used.
- Never pretend. If no capability fits part of the request, the agent says so and names the capability that would be needed.
Write your instructions as the role and domain ("You help employees with HR questions; always confirm the employee's location before quoting policy"), not as routing mechanics. The routing discipline is already there.
Long-term memory
When Memory is on (the default), the Super Agent remembers things about the signed-in user, scoped to this specific node in this project. It is written only by a post-run pass. The agent never writes memory mid-task.
What is remembered
| Type | What it holds |
|---|---|
preference | How the user likes answers shaped: tone, format, language, level of detail |
correction | A correction the user made, in the user's own words |
fact | A piece of company data the run actually verified through a capability |
episode | A code-written record of which capabilities a run invoked. The model can never create, edit, or delete these. |
Guardrails
Memory on a Super Agent is deliberately conservative, because the failure mode is severe: a remembered "fact" read as authoritative data means the agent answers directory and policy questions from a stale note instead of calling the capability.
- Memory is advisory, never evidence. It is fenced in the prompt and explicitly labelled non-authoritative. The agent is instructed to use it for tone, format and preference only, never to answer a factual question from it, and to re-verify with the capability and trust the capability's answer if a note contains a fact it is about to assert.
- Facts require verification. If a run made no successful capability call, it verified nothing, and the store pass is blocked from writing a
factat all. Preferences and corrections come from the user's own words, so they're always allowed. - Facts age out of the prompt. A
factolder than 30 days stops being injected. The row stays for audit; only the prompt is bounded. - Episodes are an audit trail, not answers. Each line records that a capability ran, never that its answer is still known. The results are not retained anywhere. A run that called nothing is recorded but withheld from future prompts, because "this question was answered with no retrieval" reads as precedent and compounds.
- Caps. Up to 100 entries and 10 episodes per user per node, each entry up to 1,000 characters.
Everything is inspectable in an execution's Debugger → Memory tab.
Choosing which memory a Super Agent uses
A Super Agent can draw on the platform's own memory store, on an external context provider, on both, or on neither.
| Setting | Uses |
|---|---|
| Internal | The platform's own memory store, described above |
| External | A configured context provider, described below |
| Both | Both paths run |
| None | No long-term memory |
Leave it unset and MagOneAI infers it from what is configured: memory on with a provider means both, memory on alone means internal, a provider alone means external, and neither means none.
External context providers
A context provider is an external HTTP service a Super Agent may consult for extra context before a turn, and report to afterwards.
The platform deliberately does not know what a provider is for. It knows how to ask a configured endpoint for advisory text before a turn, and how to report what happened after one. Memory is the first thing built on it, but a deployment can implement the same two endpoints for something else entirely, or configure none and see no change.
The contract is two calls:
| Call | When | Purpose |
|---|---|---|
POST {url}/recall | Immediately before the first model call | Returns text that is appended to the system prompt |
POST {url}/observe | After the answer is on its way | Reports what happened |
Configuration:
| Field | Default | Notes |
|---|---|---|
| Enabled | Off | Leave it off and the node runs normally, with no memory provider |
| URL | n/a | The base URL, with no trailing slash. /recall and /observe are appended. |
| Secret reference | n/a | Where the shared secret comes from, in the same env:NAME form a model configuration uses. The secret itself is never stored in the workflow definition, which is exported, shared and diffed. |
| Recall timeout | 2 seconds | 0.2 to 15 |
| Observe timeout | 10 seconds | 0.5 to 60 |
| Recall limit | 12 | 1 to 50 |
Recall sits in front of the first model call, so its timeout is latency the user feels on every turn. Two seconds is long enough for a call inside your own network and short enough that a degraded provider costs a noticeable pause rather than a broken assistant. Raise it only if you know the provider is slow and you accept the cost.
Observe runs after the answer is already on its way, so nobody waits on it, which is why its timeout is much larger.
What recall returns is appended to the system prompt verbatim. The platform does not parse it, so the provider is responsible for fencing and labelling its own content. A provider that returns unlabelled text from an untrusted source is handing that text to the model as instructions.
Never put the shared secret in the workflow definition. Use a secret reference, because the definition is exported and shared.
Attachments and structured data
A Super Agent handles chat attachments the same way an Agent node does:
- Documents are extracted and fenced into the system prompt as attached content.
- Spreadsheets and CSVs register a
__query_<dataset>SQL tool backed by DuckDB. The agent is instructed to answer any counting, summing, averaging, grouping, ranking, or lookup question by running SQL and using only the returned rows, never by estimating from prose. - When a tabular file is attached and you've left
max_iterationsat its default, the budget is floored at 25 iterations, because a schema peek, a query, a refine and an answer all compete with capability calls.
The Super Agent also gets the __query_blackboard recall tool when the deployment has harness retrieval enabled, so it can pull back the full body of an earlier capability result. See Execution artifacts and the Debugger.
Context compression
The agent loop summarizes its own history when that history grows past a character threshold. For a Super Agent this matters more than for a normal agent, because compression replaces the message list with a short summary rather than trimming it, so capability results gathered before it runs are gone, and the evidence the answer was built from goes with them.
The Advanced → Context compression threshold field controls this:
| Value | Behaviour |
|---|---|
| Empty (Auto, the default) | Derived from the model's own context window, minus the system prompt, the opening user message, and headroom reserved for the reply. Never derived below 20,000 characters. |
0 | Compression disabled entirely. |
| A number | That exact character budget. |
Leave this on Auto unless you have a specific reason. A hand-set low value on a large-context model throws away capability evidence the model still needs; the auto-derived value sizes the budget to the model you actually configured.
Inputs and outputs
By default the previous step's output flows in automatically, and the node produces one text field called response. Downstream nodes reference it as:
<node-id>.responseThe panel shows the exact reference for your node.
You can replace either default with a declared contract.
Declared inputs
Declaring input fields replaces the automatic chaining from the previous step. Each declared field names where its value comes from, so the node reads exactly what you point it at rather than whatever happened to arrive.
{
"input_fields": {
"question": { "source": "input.message" },
"account_tier": { "source": "lookup-account.tier" }
}
}Two rules are enforced when you save, both because getting them wrong is silent:
A field with no source does not fall back to the previous step the way automatic chaining does. It reads the execution's trigger input instead.
Those are different values, so MagOneAI refuses the save rather than shipping a node that quietly reads the wrong thing.
Both prefixes are reserved for inputs the platform supplies, including chat attachments. A declared field using either name would be silently overwritten, and underscore-prefixed names are additionally hidden from the debugger's input snapshot, which would make the loss invisible.
Declared outputs
Declaring output fields replaces the single response field. Each one becomes its own path downstream, so a Condition node can branch on one value without parsing prose.
One declared field can still be answered as prose, because the loop can return its raw reply under that field's name. Two or more cannot, so a multi-field contract requires structured output.
Both defaults mean "unset", so a Super Agent built before declared contracts existed runs exactly as it did.
Declaring either field is a one-way step for that node in one respect: the configuration is re-validated at run time against the published version, so rolling the platform back after you save one turns that node's executions into a configuration error. Publish declared contracts deliberately rather than experimentally.
Configuration reference
| Field | Default | Range | Purpose |
|---|---|---|---|
name | n/a | n/a | Display label on the canvas. Falls back to "Super Agent". |
instructions | n/a | required | The system prompt: role, domain, and how to help. |
llm_config_id | workflow default | n/a | Model override. Falls back to the workflow's LLM config, then the org default. |
max_iterations | 20 | 1–50 | Maximum LLM loop iterations per execution. |
timeout_minutes | 60 | 1–1440 | Wall-clock ceiling for the whole loop. |
max_capability_calls | 10 | 0–50 | Run-wide cap on capability invocations. 0 disables capabilities. |
capability_timeout_minutes | 15 | 1–180 | Timeout for one capability child workflow. |
memory_enabled | true | n/a | Legacy toggle for the platform's own memory. Consulted only when memory_sources is unset. |
memory_sources | inferred | internal / external / both / none | Which memory systems this node uses. Wins over memory_enabled. |
context_provider | disabled | n/a | An external service consulted for extra context. See External context providers. |
disabled_capability_ids | [] | n/a | Use case ids switched off for this node. Empty means every published workflow is callable. |
context_compression_threshold | auto | ≥ 0 | Character budget before history is summarized. 0 disables. |
input_fields | {} | n/a | Declared inputs, each with a source. When set, these replace automatic chaining. |
output_fields | {} | n/a | Declared outputs. Unset means the single response field. |
Workflow JSON
{
"id": "support-super-agent",
"type": "orchestrator",
"config": {
"name": "Support Super Agent",
"instructions": "You help employees with IT and HR questions. Confirm the employee's office location before quoting any location-specific policy.",
"llm_config_id": null,
"max_iterations": 20,
"timeout_minutes": 60,
"max_capability_calls": 10,
"capability_timeout_minutes": 15,
"memory_enabled": true,
"disabled_capability_ids": [],
"context_compression_threshold": null
}
}The node's configuration is its persona. Unlike an Agent node, a Super Agent has no separate agent entity to attach: no persona record, no attached knowledge bases, no MCP tool picker. Its instructions and its discovered capabilities are the whole definition.
Timeouts and nesting
- The loop's timeout is clamped to the parent workflow's own ceiling minus five minutes of headroom, so a configured value larger than the deployment's workflow timeout produces a clean Super Agent timeout rather than an opaque parent failure.
- Capability children are cancelled if the Super Agent is cancelled.
- Nesting is capped at 5 levels across the whole chain, and a use case already in the chain cannot be re-entered.
What the debugger shows
The Super Agent is deliberately not a black box. Its step's input snapshot records:
capabilities_visible: every tool the model could see this run, with the workflow name and id behind each.capabilities_skipped: every other workflow in the project and why it was excluded, using the reasons in the table above.memory_entries_injectedandepisodes_injected: how much remembered context was in the prompt.
Each capability call also produces its own child execution and audit row, so you can open the child run and see exactly what it received and returned. If the deployment captures artifacts, each capability result is also written to the Blackboard as a sub_agent_result, queryable alongside the agent's own tool results.
Best practices
Write descriptions for the router
A capability's description is how it gets chosen. State the inputs, the outputs, and the situations it's for.
Publish before you rely on it
Only published workflows are callable, and only the published snapshot runs. A draft edit changes nothing until you publish.
Keep capabilities single-purpose
One goal per workflow routes far better than one workflow with a mode switch. The delegation protocol assumes it.
Prune the belt
Switch off workflows the Super Agent has no business calling. A smaller, sharper belt beats 50 near-duplicates.
Limitations
- No human tasks inside a capability. A workflow containing a Human Task node can't be a capability, because a capability call runs to completion rather than pausing for input.
- No Super Agent calling a Super Agent. Orchestrator nodes are excluded from discovery.
- Same project only. Discovery never crosses project boundaries.
- A declared contract is re-validated at run time. Declared inputs and outputs are checked against the published version on every execution, so rolling the platform back after you save one turns that node's runs into a configuration error. See Inputs and outputs.
- 50 capabilities per node. Beyond that, workflows are skipped with
over capability cap.
Next steps
Agent node
The single-step agent, with its own tools and knowledge bases
Versions and publishing
Why only published snapshots are callable, and how publishing works
Execution artifacts and the Debugger
Inspect what an agent did, what it was sent, and what it recalled
Use Case node
Authored, deterministic calls to one specific child workflow