13 Primitive Nodes

Workflows are composed from 13 node types. Each node declares a type, an id, a depends_on edge list, and a config block validated against a JSON Schema.

Control nodes

NodeKey configBehavior
Sequential(structural)Wiring node for ordered chains
Paralleljoin (all / any / first_n), nFan-out then join
Loopmax_iterations (1-1000), condition, bodyIterate a sub-graph
Branchcases (map), defaultRoute by expression
HITLactions (approve / edit / reject / reroute), timeout_secondsPause for a human

Leaf nodes

NodeKey configBehavior
LLMtemplate or prompt, model, roleCall a model
Tooltool (server.tool), argsCall an MCP tool
Researchquery, depth (quick / standard / deep), max_sourcesGather sources
Executiontask, sandbox (docker / firecracker / none), max_stepsRun an agent task

Dynamic and state nodes

NodeKey configBehavior
Coordinatorsub_agents, planning_model, plan_hitl, max_iterationsPlan and delegate
Memoryaction (read / write / update / delete / summarize), keyManage memory
Subworkflowref, inputs, version, timeout_secondsCall another workflow
Knowledgestore, query, top_k, rerank, min_scoreRetrieve from a store

Example

nodes:
  - id: plan
    type: LLM
    config: { role: planner, template: "Draft a plan for {{input.goal}}" }
  - id: search
    type: Research
    depends_on: [plan]
    config: { query: "{{plan.output}}", depth: standard }
  - id: approve
    type: HITL
    depends_on: [search]
    config: { actions: [approve, reject], timeout_seconds: 3600 }

Every node also accepts condition, on_error, retry, timeout_seconds, sensitivity, and disabled.