Core Nodes
Every flow must have exactly one start node. It defines the entry point and trigger configuration.
{ "id": "start-1", "type": "start", "position": { "x": 0, "y": 0 }, "data": { "type": "start", "inputVariable": "input", "welcomeMessage": "Hello! How can I help you?", "trigger": { "type": "manual" } }}| Field | Type | Default | Description |
|---|---|---|---|
inputVariable | string | "input" | Variable name receiving user input |
welcomeMessage | string | — | Greeting shown before first input |
trigger | TriggerConfig | — | How the flow is activated |
The core workhorse — sends messages to an LLM with a system prompt, tools, and context.
{ "id": "agent-1", "type": "agent", "position": { "x": 0, "y": 200 }, "data": { "type": "agent", "modelId": "openai/gpt-4o-mini", "systemPrompt": "You are a helpful assistant.", "temperature": 0.7, "maxTokens": 4096, "responseTone": "professional", "mcpTools": [], "brandMemoryCollectionIds": [], "outputVariable": "response", "streaming": true, "chatHistoryLimit": 20, "maxToolIterations": 10 }}| Field | Type | Default | Description |
|---|---|---|---|
modelId | string | — | Model ID from OpenRouter (e.g., openai/gpt-4o) |
systemPrompt | string | — | Instructions for the agent |
temperature | number | 0.7 | Response randomness (0–2) |
maxTokens | number | 4096 | Maximum response length |
responseTone | string | — | Tone: professional, casual, friendly, formal, technical, creative |
mcpTools | AgentMCPServerConfig[] | [] | MCP tool server configurations |
maxToolIterations | number | 10 | Max tool-call loop iterations (max 50) |
brandMemoryCollectionIds | string[] | [] | RAG collection IDs |
outputVariable | string | — | Variable to store the response |
streaming | boolean | true | Stream the response |
chatHistoryLimit | number | — | Limit chat history messages (0 = none) |
routingStrategy | RoutingStrategy | — | Dynamic model selection |
fileAccess | FileAccessConfig | — | File access permissions |
MCP Tool Configuration
Section titled “MCP Tool Configuration”{ "mcpTools": [ { "catalogId": "memory", "name": "Memory", "transport": "streamable-http", "url": "http://mcp-memory:8001/mcp", "authType": "none", "selectedTools": ["create_memory", "search_memory"], "timeout": 30000 } ]}classify
Section titled “classify”Routes input to different branches based on LLM classification.
{ "id": "classify-1", "type": "classify", "data": { "type": "classify", "modelId": "openai/gpt-4o-mini", "categories": [ { "id": "question", "name": "Question", "description": "User is asking a question" }, { "id": "complaint", "name": "Complaint", "description": "User has a complaint" }, { "id": "praise", "name": "Praise", "description": "User is giving positive feedback" } ], "instructions": "Classify the user's intent", "confidenceThreshold": 0.7 }}Each category ID becomes a source handle for outgoing edges.
Terminates the flow and returns output.
{ "id": "end-1", "type": "end", "data": { "type": "end", "status": "success", "outputVariable": "response", "targetPlatform": "twitter", "platformConnectionId": "conn-123" }}| Field | Type | Description |
|---|---|---|
status | success | error | cancelled | Completion status |
outputVariable | string | Variable with the final output |
message | string | Static message (if no variable) |
targetPlatform | string | Platform to post response to |
Non-executable annotation node for documentation on the canvas.
{ "id": "note-1", "type": "note", "data": { "type": "note", "content": "This section handles user authentication", "backgroundColor": "#1a1a2e", "width": 300, "height": 150 }}agent_ref
Section titled “agent_ref”Delegates to a sub-agent by slug or ID.
{ "id": "ref-1", "type": "agent_ref", "data": { "type": "agent_ref", "agentRef": "research-assistant", "refType": "slug", "inputMapping": { "message": "{{input.query}}" }, "outputVariable": "research_result", "inheritContext": true, "timeout": 60000 }}agent_pool
Section titled “agent_pool”Runs multiple agents and combines results.
{ "id": "pool-1", "type": "agent_pool", "data": { "type": "agent_pool", "agents": [ { "ref": "writer", "refType": "slug", "weight": 1 }, { "ref": "editor", "refType": "slug", "weight": 1 } ], "strategy": "best_of", "evaluationPrompt": "Pick the best written response", "evaluatorModelId": "openai/gpt-4o", "maxConcurrency": 3, "agentTimeout": 30000 }}Strategies: best_of, aggregate, vote, fastest
map_reduce
Section titled “map_reduce”Processes an array of items in parallel with a map agent, then reduces results.
{ "id": "mr-1", "type": "map_reduce", "data": { "type": "map_reduce", "inputVariable": "articles", "mapAgentRef": "summarizer", "mapAgentRefType": "slug", "itemTemplate": "Summarize: {{item.title}}\n{{item.content}}", "reduceStrategy": "concatenate", "maxConcurrency": 5 }}Reduce strategies: concatenate, merge, custom