Workflow Nodes Reference
Complete reference for every node type available in the Agentic Designer. Each node performs a specific role in your workflow graph — from LLM calls and branching logic to state management and safety checks.
Template Variables
Many node fields support template variables that resolve at runtime. Use double-brace syntax inside any field marked with “supports templates”.
| Variable | Resolves to |
|---|---|
| {{input}} | The original user input for this run |
| {{last_output}} | Output of the previous node in the graph |
| {{state.myKey}} | Value of myKey from the run’s global state |
| {{node.nodeId.output}} | Output of a specific node by its ID |
| {{all_outputs}} | JSON object of all node outputs so far |
Node Overview
| Node | Category | Purpose |
|---|---|---|
| Start | Control | Entry point — receives input, initializes state |
| End | Control | Terminates execution, produces final output |
| LLM | Execution | Calls an LLM with a prompt template |
| Agent Call | Collaboration | Delegates to another agent |
| If | Control | Branches to true/false paths |
| While | Control | Loops while a condition holds |
| User Approval | Control | Pauses for human approval |
| Global State | State | Read/write key-value state |
| Data Transform | State | Transform data between nodes |
| Guardrails | Safety | PII detection and policy enforcement |
| Note | Annotation | Canvas-only comment, not executed |
Start Node
Every workflow must have exactly one Start node. It is the entry point that receives the user’s input and optionally initializes global state keys for downstream nodes.
Settings
| Field | Options | Description |
|---|---|---|
| Input Binding | last_user_message, full_conversation, custom_path | How the user’s input is captured. last_user_message takes the final message; full_conversation serializes the entire message array as JSON. |
| Initialize State | Array of key/value pairs | Sets initial values in the run’s global state before any other node executes. Use this to seed counters, flags, or default values that other nodes will read. |
| System Context Template | Text (supports templates) | Optional system-level context stored in __system_context state. Supports template variables. |
Outputs
Produces the bound user input as its output and connects to the first processing node via its out handle.
End Node
Terminates workflow execution and produces the final output returned to the caller. Every workflow must have at least one End node.
Settings
| Field | Options | Description |
|---|---|---|
| Response Source | last_node_output, state_key, template | Where the final output comes from. last_node_output uses the previous node’s output; state_key reads from global state; template renders a template string. |
| State Key | Text (autocomplete) | When Response Source is state_key, the key to read from global state. |
| Template | Text (supports templates) | When Response Source is template, a template string with variable substitution. |
| Include Trace Summary | Boolean | Appends step count and token usage to the output for debugging. |
LLM Node
Calls a large language model with a configurable prompt. The prompt template supports all template variables, so you can inject state, previous outputs, or user input dynamically. The model is selected via your router configuration.
Settings
| Field | Options | Description |
|---|---|---|
| Prompt Template | Text (supports templates) | The user message sent to the LLM. Use {{input}}, {{last_output}}, {{state.key}}, etc. |
| System Prompt | Text (supports templates) | Optional system message prepended to the conversation. Also supports template variables. |
| Router Selection | inherit_agent_router, fixed_router, router_from_state_key | inherit_agent_router uses the agent’s default router. fixed_router lets you specify a router ID. router_from_state_key reads the router ID from a state key at runtime. |
| Output Mode | text, json | text passes through the raw response. json validates that the LLM returned valid JSON and fails if not. |
| Write Output To State Key | Text (autocomplete) | Optionally writes the LLM response into global state under this key. |
| Tools Enabled | Boolean (default: on) | When enabled, the agent’s tools (built-in tools, skills) are passed to the LLM alongside the prompt. Disable this for simple prompt-in / text-out nodes where tool definitions would unnecessarily bloat the context and confuse the model. |
Advanced
Timeout, On Error (fail run, continue, or go to node), and Disabled toggle are available under the Advanced section for all execution nodes.
Agent Call Node
Delegates a sub-task to another agent you own. The child agent executes its own full workflow and returns its output. Supports cycle detection, call-depth limits (max 5 levels), and cost guardrails.
Settings
| Field | Options | Description |
|---|---|---|
| Target Agent Mode | fixed_agent_id, agent_id_from_state_key | fixed_agent_id uses a hardcoded agent ID. agent_id_from_state_key reads the target agent ID from global state at runtime, enabling dynamic delegation. |
| Input Mode | last_node_output, state_key, template, full_context | What to send as the child agent’s input. template supports template variables. full_context sends input, messages, state, and all node outputs as JSON. |
| Result Mode | raw_output, extract_json_path | raw_output passes through the child’s response as-is. extract_json_path parses the child’s output as JSON and extracts a value at the specified path. |
| Write Output To State Key | Text (autocomplete) | Optionally stores the child agent’s result in global state. |
| Cost Guardrail (USD) | Number | If the child execution exceeds this cost, the node fails. Prevents runaway spending from recursive or expensive sub-agents. |
An agent cannot call itself (self-call prevention). Circular call chains are also detected and blocked automatically.
If Node
Evaluates a condition and routes execution to either the true or false output handle. Supports both simple comparisons and JSON Logic expressions. Both modes fully support dynamic state and template variables.
Condition Types
Simple Compare
Compares a left operand against a right operand using an operator. Both operands support template variables, so you can branch on dynamic runtime values.
| Field | Description |
|---|---|
| Left Operand | The left side of the comparison. Use {{state.counter}} to compare a state value, {{last_output}} to compare the previous node’s output, etc. |
| Operator | ==, !=, >, <, >=, <=, contains |
| Right Operand | The right side. Can be a literal value like 10 or a template like {{state.threshold}}. |
Example: To check if a counter exceeds 5, set Left Operand to {{state.counter}}, Operator to >, and Right Operand to 5.
JSON Logic
A JSON object evaluated using JSON Logic rules. Use the var operator to reference runtime data.
Available data paths for var:
| Path | Resolves to |
|---|---|
| input | The original user input |
| last_output | Output from the previous node |
| state.myKey | Value of myKey from global state |
| node_outputs.nodeId | Output of a specific node |
// Check if state.counter > 5
{ ">": [{ "var": "state.counter" }, 5] }
// Check if last output contains "approved"
{ "in": ["approved", { "var": "last_output" }] }
// Combine conditions with "and"
{ "and": [
{ ">": [{ "var": "state.counter" }, 0] },
{ "!=": [{ "var": "state.status" }, "done"] }
] }Supported operators: ==, !=, >, <, >=, <=, and, or, !, in, var.
Advanced
| Field | Description |
|---|---|
| Null Behavior | When the condition evaluates to null or undefined, treat it as true or false. Defaults to false. |
Handles
Connect the true handle to the path that executes when the condition passes, and the false handle to the alternative path.
While Node
Evaluates a condition on each pass. If true, routes to the loop handle; if false, routes to exit. The loop body must eventually connect back to this While node to form the cycle. Uses the same condition types as the If node (Simple Compare or JSON Logic).
Settings
| Field | Options | Description |
|---|---|---|
| Condition Type | json_logic, simple_compare | Same condition system as the If node. Both support dynamic state and templates. |
| Max Iterations | Number (1–100) | Hard cap on how many times the loop can execute. Defaults to 10. |
| On Max Iterations | exit, fail_run | exit gracefully exits the loop. fail_run throws an error. |
| Iteration State Key | Text (autocomplete) | State key where the current iteration count is stored. Auto-increments on each pass. Defaults to __loop.nodeId.iteration. |
Handles
loop — connects to the first node in the loop body. exit — connects to the node that runs after the loop finishes.
User Approval Node
Pauses the workflow and waits for a human to approve, reject, or let the request time out. The decision routes execution to one of three output handles: approved, rejected, or timed_out.
Settings
| Field | Options | Description |
|---|---|---|
| Approver Role | owner, admin, member | Which user role is allowed to approve this step. |
| Action Label | Text | Label shown on the approval button (e.g. “Approve”, “Deploy”). |
| Request Template | Text (supports templates) | Message shown to the approver. Supports template variables to include dynamic context. |
| On Timeout | wait, auto_reject, route_timeout | wait keeps waiting indefinitely. auto_reject treats timeout as rejection. route_timeout routes to the timed_out handle. |
| Timeout (ms) | Number | How long to wait before the timeout behavior triggers. Defaults to 300000 (5 minutes). |
| Reason Required | Boolean | Whether the approver must provide a reason with their decision. |
| Audit Required | Boolean | Whether the approval decision is recorded for audit trail purposes. |
Handles
approved — the approver accepted. rejected — the approver declined or the request auto-rejected on timeout. timed_out — only active when On Timeout is set to route_timeout.
Global State Node
Performs read/write operations on the run’s key-value state store. Use this to set counters, flags, accumulators, or any data that other nodes need to read via {{state.key}} template variables or the var operator in JSON Logic conditions.
Settings
| Field | Options | Description |
|---|---|---|
| Operation | set, append, increment, delete, copy | set — overwrite the key with a new value. append — append to an array or concatenate to a string. increment — add a numeric delta to the existing value. delete — remove the key entirely. copy — copy the value from another state key. |
| Key | Text (autocomplete) | The state key to operate on. Supports dot-notation for nested paths (e.g. results.count). |
| Value Source | literal, last_node_output, template, state_key | Where the value comes from. literal uses the Value field directly. template supports template variables. state_key copies from another state key. |
| Value | Any | The value to use (for literal or template source). For increment, this is the delta. For copy, this is the source key name. |
| If Missing | create, skip, fail | What to do if the key doesn’t exist yet. create creates it. skip silently skips. fail throws an error (except for set, which always creates). |
Data Transform Node
Transforms data using a template expression or JSONata query and writes the result to a state key. Useful for reshaping LLM output, extracting fields, or building structured payloads between nodes.
Settings
| Field | Options | Description |
|---|---|---|
| Input Source | last_node_output, state_key | Where to read input data from. state_key requires specifying an Input Key. |
| Input Key | Text (autocomplete) | When Input Source is state_key, the key to read from global state. |
| Transform Engine | json_template, jsonata | json_template uses the template variable system. jsonata evaluates a JSONata expression against the input data. |
| Expression | Text (supports templates for json_template engine) | The transform expression. For json_template, use template variables. For jsonata, write a JSONata query. The data context includes input, last_output, state, and node_outputs. |
| Write To State Key | Text (autocomplete, required) | The state key where the transformed result is stored. |
| Output Validation Schema | JSON (optional) | An optional JSON schema to validate the transform output. Checks type and required fields. |
| On Validation Failure | fail_run, continue | What to do if the output doesn’t match the schema. |
Guardrails Node
Scans content for personally identifiable information (PII) and other sensitive patterns. Can warn, block execution, redact matches, or route based on whether content is flagged.
Settings
| Field | Options | Description |
|---|---|---|
| Input Source | last_node_output, state_key, full_context | What content to scan. |
| Checks | pii_email, pii_phone, pii_ssn, pii_credit_card, pii_ip_address, custom_regex | Which patterns to scan for. Select one or more. custom_regex lets you define additional regex patterns. |
| Action | warn, block, redact, route_by_result | warn — log a warning but continue. block — fail the run if content is flagged. redact — replace matches with the redaction token. route_by_result — route to flagged or pass handles. |
| Redaction Token | Text | The string that replaces matched PII. Defaults to [REDACTED]. |
| Write Report To State Key | Text (autocomplete) | Optionally writes the guardrails report (flagged, matches, action) to state for downstream inspection. |
Handles
When Action is route_by_result, the node exposes flagged and pass handles. Otherwise it has a single out handle.
Note Node
A canvas-only annotation. Notes are not executed at runtime and have no input or output handles. Use them to document your workflow, leave reminders, or explain complex logic to collaborators. Notes support inline editing directly on the canvas.
Common Advanced Settings
Most execution nodes (LLM, Agent Call, While, Data Transform, Guardrails) share the following advanced settings:
| Field | Description |
|---|---|
| Timeout (ms) | Maximum execution time for this node. If exceeded, triggers the On Error behavior. |
| On Error | fail_run aborts the entire workflow. continue skips the error and proceeds to the next node. goto_node jumps to a specified error-handling node. |
| Error Target Node | When On Error is goto_node, the node ID to jump to. |
| Disabled | When checked, the node is skipped during execution. Useful for temporarily disabling a step without removing it from the graph. |