openagentics

Workflow Node Types

Registered Flow canvas node types, source-derived from the workflow-engine node registry.

7 sections 71 items generated from services/shared/workflow-engine/src/nodes/registry.ts, services/shared/workflow-engine/src/nodes/text/schema.json, services/shared/workflow-engine/src/nodes/http_request/schema.json, services/shared/workflow-engine/src/nodes/llm_completion/schema.json, services/shared/workflow-engine/src/nodes/wait/schema.json, services/shared/workflow-engine/src/nodes/transform/schema.json, services/shared/workflow-engine/src/nodes/merge/schema.json, services/shared/workflow-engine/src/nodes/webhook_response/schema.json, services/shared/workflow-engine/src/nodes/error_handler/schema.json, services/shared/workflow-engine/src/nodes/slack_message/schema.json, services/shared/workflow-engine/src/nodes/teams_message/schema.json, services/shared/workflow-engine/src/nodes/discord_message/schema.json, services/shared/workflow-engine/src/nodes/outlook_email/schema.json, services/shared/workflow-engine/src/nodes/send_email/schema.json, services/shared/workflow-engine/src/nodes/pagerduty_incident/schema.json, services/shared/workflow-engine/src/nodes/servicenow_ticket/schema.json, services/shared/workflow-engine/src/nodes/jira_issue/schema.json, services/shared/workflow-engine/src/nodes/knowledge_ingest/schema.json, services/shared/workflow-engine/src/nodes/file_upload/schema.json, services/shared/workflow-engine/src/nodes/document_loader/schema.json, services/shared/workflow-engine/src/nodes/embedding/schema.json, services/shared/workflow-engine/src/nodes/text_splitter/schema.json, services/shared/workflow-engine/src/nodes/vector_store/schema.json, services/shared/workflow-engine/src/nodes/rag_query/schema.json, services/shared/workflow-engine/src/nodes/splunk_search/schema.json, services/shared/workflow-engine/src/nodes/bedrock/schema.json, services/shared/workflow-engine/src/nodes/vertex/schema.json, services/shared/workflow-engine/src/nodes/azure_ai/schema.json, services/shared/workflow-engine/src/nodes/openagentic_chat/schema.json, services/shared/workflow-engine/src/nodes/reasoning/schema.json, services/shared/workflow-engine/src/nodes/structured_output/schema.json, services/shared/workflow-engine/src/nodes/guardrails/schema.json, services/shared/workflow-engine/src/nodes/mcp_tool/schema.json, services/shared/workflow-engine/src/nodes/agent_spawn/schema.json, services/shared/workflow-engine/src/nodes/a2a/schema.json, services/shared/workflow-engine/src/nodes/agent_single/schema.json, services/shared/workflow-engine/src/nodes/agent_pool/schema.json, services/shared/workflow-engine/src/nodes/agent_supervisor/schema.json, services/shared/workflow-engine/src/nodes/multi_agent/schema.json, services/shared/workflow-engine/src/nodes/trigger/schema.json, services/shared/workflow-engine/src/nodes/user_context/schema.json, services/shared/workflow-engine/src/nodes/data_query/schema.json, services/shared/workflow-engine/src/nodes/sub_workflow/schema.json, services/shared/workflow-engine/src/nodes/human_approval/schema.json, services/shared/workflow-engine/src/nodes/human_input/schema.json, services/shared/workflow-engine/src/nodes/data_source_query/schema.json, services/shared/workflow-engine/src/nodes/condition/schema.json, services/shared/workflow-engine/src/nodes/switch/schema.json, services/shared/workflow-engine/src/nodes/parallel/schema.json, services/shared/workflow-engine/src/nodes/loop/schema.json, services/shared/workflow-engine/src/nodes/anomaly_detect/schema.json, services/shared/workflow-engine/src/nodes/filter_data/schema.json, services/shared/workflow-engine/src/nodes/select_data/schema.json, services/shared/workflow-engine/src/nodes/extract_key/schema.json, services/shared/workflow-engine/src/nodes/parse_json/schema.json, services/shared/workflow-engine/src/nodes/regex/schema.json, services/shared/workflow-engine/src/nodes/prompt_template/schema.json, services/shared/workflow-engine/src/nodes/conversation_memory/schema.json, services/shared/workflow-engine/src/nodes/flow_tool/schema.json, services/shared/workflow-engine/src/nodes/wait_for/schema.json, services/shared/workflow-engine/src/nodes/rate_limiter/schema.json, services/shared/workflow-engine/src/nodes/csv_processor/schema.json, services/shared/workflow-engine/src/nodes/grounding_check/schema.json, services/shared/workflow-engine/src/nodes/llm_router/schema.json, services/shared/workflow-engine/src/nodes/save_file/schema.json, services/shared/workflow-engine/src/nodes/aggregate/schema.json, services/shared/workflow-engine/src/nodes/knowledge_search/schema.json, services/shared/workflow-engine/src/nodes/rerank/schema.json, services/shared/workflow-engine/src/nodes/multi_query/schema.json, services/shared/workflow-engine/src/nodes/retry_with_backoff/schema.json, services/shared/workflow-engine/src/nodes/map_reduce/schema.json, services/shared/workflow-engine/src/nodes/dedup/schema.json

Action

2 action node types

HTTP Request

Make an HTTP/HTTPS request to any external API. Supports GET/POST/PUT/DELETE/PATCH, custom headers, JSON or string bodies, templating, and per-request timeout.

Webhook Response

Send a response back to the webhook caller. Sets the HTTP status code, headers, and body for the inbound webhook that triggered this workflow.

Ai

21 ai node types

A2A (Agent-to-Agent)

Agent-to-Agent protocol — alias of agent_spawn that takes a 'prompt' (instead of 'task') and routes through openagentic-proxy.

Agent Pool

Run a fixed list of agents in parallel through openagentic-proxy. Aggregates their results with the configured strategy (merge/first/vote).

Single Agent

Run one agent through openagentic-proxy with orchestration='parallel'. Returns the unwrapped output plus the per-agent results array.

Agent Spawn

Spawn a single agent through openagentic-proxy. The proxy resolves the agent role to a DB-backed agent record and runs the task.

Agent Supervisor

Run a supervisor + worker pool through openagentic-proxy with orchestration='supervisor'. The supervisor delegates subtasks to workers.

Aggregate (LLM)

LLM-driven reduce over an array. Two modes: `reduce` (single LLM call with the entire array serialized into the prompt → one summary string + one usage entry) and `map` (N LLM calls, one per item → array of N results). Uses the SAME /v1/chat/completions endpoint as llm_completion

Azure OpenAI

Send a prompt through Azure OpenAI via the platform's OpenAI-compatible chat-completion endpoint (provider:'azure_openai').

AWS Bedrock

Send a prompt through AWS Bedrock via the platform's OpenAI-compatible chat-completion endpoint (provider:'bedrock').

Conversation Memory

Read / write / clear / summarize / semantic-search a tenant-scoped chat conversation history. Backs stateful agents and HITL flows that span multiple user turns.

Grounding Check

Verify that an LLM-produced claim references only entities that appear in one or more upstream ground-truth sources. Extracts pod-like / component-like tokens from the claim and intersects with tokens present in the truth sources. Deterministic, no LLM round-trip. Use BEFORE noti

Guardrails

Validate content against safety rules (PII, toxicity, prompt-injection). Calls the platform's DLP scanner API; falls back to local regex on failure.

LLM Completion

Send a prompt to a chat-completion model via the platform's OpenAI-compatible endpoint. Supports system + user messages, automatic context injection, and Smart Router model selection.

LLM Router

LLM-as-condition. Given a prompt + a configured set of named routes (each with a description), the model picks exactly one route by name. The chosen route is used as the outgoing `sourceHandle` so downstream branches gate naturally. Goes through the SAME /v1/chat/completions endp

Multi-Agent

Concurrent fan-out across N agents via openagentic-proxy. Falls back to direct LLM batch when openagentic-proxy is unavailable.

Multi-Query Expand

Expand one question into N retrieval query variants to widen RAG recall (the 'multi-query retriever' pattern). The default path is a DETERMINISTIC rule-based expander — it derives reformulations (keyword-only, question→statement, synonym/paraphrase prefixes, and the original) wit

OpenAgentic Chat

Conversational LLM via the platform's Smart Router. Same shape as openagentic_llm — supports modelOverride, sliderPosition, and chain-of-thought thinking.

Prompt Template

Build a reusable prompt with {{variable}} placeholders. Outputs either a single rendered string ('prompt' mode) or a structured chat conversation split on {{system}} / {{user}} / {{assistant}} role markers ('messages' mode).

Reasoning

Extended chain-of-thought via the platform's Smart Router. Forces enableThinking:true at max quality (sliderPosition:100). Use for hard problems.

Rerank Chunks

Re-order a list of retrieved chunks by relevance to a query using a deterministic lexical relevance scorer (BM25-style term-overlap with IDF weighting + phrase-match boost). No model round-trip on the default path, so it is deterministic and harness-friendly. Optionally an LLM cr

Structured Output

Force the LLM to emit valid JSON matching the supplied schema. Retries on parse failure.

Google Vertex AI

Send a prompt through Google Vertex AI via the platform's OpenAI-compatible chat-completion endpoint (provider:'vertex').

Annotation

1 annotation node type

Text Annotation

Visual annotation node — passes input through untouched. Useful for documentation/comments embedded in the canvas.

Control

16 control node types

Condition

Evaluate a JavaScript expression and route to the matching downstream branch (true/false or custom labels).

Deduplicate

Idempotency gate. Computes a key from the configured expression and drops (or errors on) items whose key has already been seen — within the current execution by default, or across executions with an optional TTL window.

Error Handler

Receives routed errors from upstream nodes and handles them via log, notify, transform, or retry actions.

Flow as Tool

Wrap a saved Flow as a callable tool. Maps caller args to the wrapped flow's trigger input via inputMapping, runs the flow as a sub-execution, and extracts a value at outputExtract from the result. V1: callable from a parent flow; agent dynamic-tool integration is V1.1.

Human Approval

Pause the workflow until a configured approver accepts or rejects. The engine returns control downstream once an approval decision is recorded, or applies the configured timeout action if the timeout elapses first.

Request Data from User

Pause the workflow and ask the user to fill a typed form, then resume with their answers. Unlike human_approval (which only yields approve/reject), human_input collects actual values mid-run — a missing parameter, a decision the model can't make, or a credential to bind. Downstre

Loop

Iterate over a collection by re-executing the downstream subgraph once per item, with the iteration variable bound in the per-iteration input.

Map / Reduce

Fan out over an input collection — run the downstream subgraph once per item under a concurrency limit — then reduce the per-item results into a single value (collect, concat, sum, avg, min, max, count).

Merge

Combine results from multiple incoming branches into a single output using array, object, or concat strategy.

Parallel

Fan out to all outgoing branches and execute them in parallel. Returns each branch's result + an aggregate success rate.

Rate Limiter

Fixed-window throttle for fan-out to rate-limited APIs. Per-(tenant, key) counter; choose block (sleep until reset), drop (return without invoking), or error (throw) on overflow.

Retry with Backoff

Wraps a downstream operation and retries it with exponential backoff on failure. Returns the first successful result; throws a clear error naming the last failure once all retries are exhausted.

Sub-workflow

Invoke another saved workflow by id and inline its output. Lets you compose flows the way you compose functions.

Switch

Evaluate an expression and route to the matching case branch. Supports a default fallback case.

Wait

Pause workflow execution for a specified duration. Short waits (< 30 s) sleep in-process; long waits store state and schedule a resume.

Wait For Condition

Poll an expression until it becomes truthy (or a timeout elapses). Differs from `wait`, which sleeps a fixed duration. Useful for: 'wait until job_status == done', 'wait until pod ready', 'wait until queue depth < N'. Reference: n8n's Wait node 'until condition' variant + the n8n

Data

20 data node types

Anomaly Detect

Statistical anomaly detection over a time-series window. Flags outliers and exposes a top-level hasAnomaly verdict for downstream branch nodes (policy_guard, runbook_executor, etc.).

CSV Processor

Parse CSV text into records (objects keyed by header) or rows (string arrays). V1 ships text-mode only; binary/file mode is a follow-up after the binary data plane lands.

Data Query

Run a vector / collection query against a configured datasource. Returns the matching results so downstream nodes can summarise, rank, or feed an LLM.

Data Source Query

Run a query against a configured DataSource. Supports raw SQL/REST queries (mode='raw') and natural-language questions that the platform translates to SQL (mode='nl'). Distinct from data_query which performs vector search.

Document Loader

Fetch a document from a URL (or pass through inline input). Optional parseMode strips HTML or pretty-prints JSON.

Embedding

Generate vector embeddings for one or more texts via the platform's /api/v1/embeddings endpoint. Falls back to /api/v1/vector/embed on primary failure.

Extract Key

Pull a single value at a dot/bracket path from an object, with optional default. Replaces the transform-extract case for the common 'give me steps.X.data.id' pattern.

File Upload (Embed)

Upload content for chunking + embedding into a Milvus collection via the platform's /api/files/embed endpoint.

Filter Array

Filter an array by a typed field predicate. Replaces the JS-expression-only path through `transform` for the common 'keep rows where X' case.

Knowledge Ingest

Ingest content into a Milvus knowledge base via the platform's /api/chat/knowledge/ingest endpoint.

Knowledge Search

Semantic search against the platform knowledge base (shared_knowledge + the calling user's private collection) via /api/chat/knowledge/search. Returns ranked chunks merged across both. Pair this with knowledge_ingest: the ingest endpoint writes to shared_knowledge / user_<id>_pri

Parse JSON

Parse a JSON string into a structured object. Replaces the JS-expression-only path through `transform` for the common 'LLM returned a JSON string' case.

RAG Query

Run a semantic search against a Milvus collection via the platform's /api/v1/vector/search endpoint. Returns ranked results with optional score threshold.

Regex

Apply a regex pattern to a string. Supports match, replace, and test modes. Replaces the JS-expression-only path through `transform` for pattern extraction and substitution.

Save File

Persist arbitrary text content to the artifact store (MinIO/GCS/Azure via the platform's BlobStorageService). Returns {artifactId, url, sizeBytes, mimeType}. Text payloads only for now — binary mode lands when the binary plane (Tier 2 #5) is wired through. For string-valued flow

Select Fields

Pick or omit specific fields by dot-path from an object or each row of an array. Replaces the JS-expression-only path through `transform` for the common 'project these columns' case.

Text Splitter

Split text into chunks for embedding. Strategies: recursive (separator-aware) or fixed (fixed-size). Runs in-process, no HTTP.

Transform

Apply map, filter, reduce, or extract operations to the input using sandboxed JavaScript expressions.

User Context

Inject the calling user's profile, memories, and recent chats into the workflow. Calls the platform's /api/user-context endpoint.

Vector Store

Upsert or delete vectors in a Milvus collection via the platform's /api/v1/vector/store endpoint. Falls back to /api/files/embed when the primary endpoint fails.

Integration

10 integration node types

Discord Message

Send a message to a Discord channel via webhook. Supports plain content, custom username, and embeds.

Jira Issue

Create a Jira issue via REST API v3. Auth via JIRA_BASE_URL + JIRA_EMAIL + JIRA_API_TOKEN env vars.

MCP Tool

Invoke an MCP (Model Context Protocol) tool through the platform's mcp-proxy. Auth runs as the user (OBO federation for AWS/Azure).

Outlook Email

Send an email via Microsoft 365 / Outlook SMTP (smtp.office365.com:587). Credentials read from OUTLOOK_USER / OUTLOOK_PASSWORD env vars (or SMTP_USER / SMTP_PASS fallback).

PagerDuty Incident

Trigger / acknowledge / resolve a PagerDuty incident via Events API v2. Supports dedupKey, severity, custom_details, and client/client_url fields.

Send Email (SMTP)

Send email via SMTP. Requires explicit per-node credentials — either literal values or {{secret:NAME}} workflow-secret references. No env-var fallback (2026-05-15 hardening: every flow that sends mail must carry its own credentials).

ServiceNow Ticket

Create a ServiceNow record via the REST Table API. Defaults to creating an incident; supports any configurable table (change_request, problem, etc).

Slack Message

Send a message to a Slack channel via incoming webhook. Supports templated text, channel override, and Block Kit blocks.

Splunk

Run SPL searches, acknowledge notable events, or push events via HEC against Splunk Enterprise / Splunk Cloud REST APIs.

Microsoft Teams Message

Post a message to a Microsoft Teams channel via incoming webhook. Supports plain text or Adaptive Cards.

Trigger

1 trigger node type

Trigger

Workflow entry point. Emits the input as the first event so downstream nodes can reference it via {{trigger.body.*}} and {{trigger.<key>}}.