Workflow Structure

August 30, 2026 · View on GitHub

Workflows are stored as JSON with nodes and edges. See Node Types for available node types and Expression DSL for expression syntax in data fields.

Workflow Object

{
  "id": "uuid",
  "name": "My Workflow",
  "description": "Optional description",
  "nodes": [],
  "edges": [],
  "auth_type": "anonymous",
  "allow_anonymous": true
}

Node Object

{
  "id": "node-uuid",
  "type": "llm",
  "position": { "x": 100, "y": 200 },
  "data": {
    "label": "llm",
    "model": "gpt-4",
    "userMessage": "$input.text"
  }
}

Agent node data (persistent memory)

Agent nodes support an optional knowledge graph per canvas node:

FieldTypeDescription
persistentMemoryEnabledbooleanWhen true, load stored graph into the system prompt and merge new facts after successful runs
memorySharesarray (optional)Grants other agents access to this node’s memory graph (peerWorkflowId, peerCanvasNodeId, permission: read | write). See Agent Persistent Memory.

Example:

{
  "id": "agent-main",
  "type": "agent",
  "position": { "x": 200, "y": 120 },
  "data": {
    "label": "assistant",
    "persistentMemoryEnabled": true,
    "credentialId": "uuid",
    "model": "gpt-4o",
    "userMessage": "$input.text",
    "memoryShares": []
  }
}

See Agent Persistent Memory for API paths, editor behavior, and extraction semantics.

Edge Object

{
  "id": "edge-uuid",
  "source": "input-node-id",
  "target": "llm-node-id",
  "sourceHandle": null,
  "targetHandle": null
}

Node Types

Common type values: Input (textInput), Cron, WebSocket Trigger (websocketTrigger), LLM, Agent, Condition, Switch, Output, JSON output mapper (jsonOutputMapper), Wait, HTTP, WebSocket Send (websocketSend), Merge, Set, Variable, Loop, and more. Full list: Node Types. Nodes in the same execution level run in parallel.

Editor layout

Each node has position.x and position.y for the desktop canvas layout. On screens below the 768px breakpoint, the editor replaces the freeform Vue Flow canvas with a full-screen, indented workflow tree. The tree follows connected execution paths, marks parallel branches, and uses the same node labels, icons, and latest run status as the desktop editor.

Tap a node to select it. If it has a recorded execution result, its full-screen detail opens with input, output, and error tabs. The mobile bottom navigation provides Nodes, Properties, Run, and More; the header retains save, history, search, settings, and share actions. Desktop continues to use the freeform Vue Flow canvas and side panels.

Use Add node in the mobile Nodes tab to search the node library. A regular node opens a connection sheet immediately after it is added: choose an anchor node and place it After, Before, or as a Parallel branch. In edit mode, tap an existing regular node to open the same sheet with its current connection selected. Trigger nodes stay independent because they do not accept regular input. The edit control also exposes a remove action for the selected node. Execution details include previous and next arrows when adjacent node results are available. The AI Assistant opens above the mobile tree as a bottom sheet, without changing the active editor tab.