Automation

Node Types

Workflows are built from nodes. Each node does one specific thing and produces typed output that downstream nodes consume. Pick the smallest set that solves your problem; the graph stays readable.

The 13 built-in node types fall into four categories.

Triggers#

A Workflow needs at least one trigger node. It defines when and how a run starts.

Node What it does
manual_trigger Fires when you click Run now in the canvas or call the API
schedule_trigger Fires on a cron schedule ("every Monday 9am")
webhook_trigger Fires when an HTTP request hits a unique URL (Stripe, GitHub, anywhere)

You can combine triggers. The same Workflow can run on a schedule and on demand.

Data & Control#

The plumbing of any Workflow.

Node What it does
http_request Make any HTTP call to any external API
set_fields Reshape the data: add, rename, or compute fields
filter_items Drop items that don't match a condition
if_condition Branch on a single boolean condition
switch Branch into one of N paths based on a value

These nodes are deterministic — same input, same output. Use them for everything that doesn't need an LLM.

River-native#

Nodes that act on River itself.

Node What it does
tool_call Invoke any registered River tool (e.g., entity_create, email_send)
run_agent Run a specific Agent inline as part of the Workflow

run_agent is how you compose: a Workflow handles the structured pipeline, and one of its nodes hands a creative subtask to an Agent.

Human-in-the-Loop#

Node What it does
wait_for_approval Pause the run until a human approves or rejects

Use approvals to put high-trust automation in front of high-stakes decisions: large refunds, contract sign-off, customer-facing replies, anything compliance-sensitive.

While paused, the Job appears in the Approvals queue in AutomationsApp and notifies the assigned reviewer. They click Approve or Reject, and the Workflow resumes (or fails) with their decision recorded.

LLM-in-the-Loop#

Node What it does
llm_router Use an LLM to classify the input into one of N branches
llm_transform Use an LLM to enrich a single data item

These two nodes are the bridge between deterministic Workflows and AI judgment. Use them when no rule can express what you want — when only a human (or LLM) could read the input and decide.

llm_router outputs a branch label; the graph routes accordingly. llm_transform outputs an enriched object you can keep flowing through.

Composing well#

A few patterns that show up over and over:

  • Webhook → set_fields → tool_call — the simplest possible "react to an external event" pattern.
  • Schedule → http_request → llm_transform → entity_create — pull data, enrich it, save it as an entity.
  • Trigger → llm_router → run_agent (per branch) — let an LLM pick the right Agent for the job.
  • Anything → wait_for_approval → publish — high-trust auto-drafts plus a human checkpoint.

Tips#

  • Each node has typed inputs and outputs. Hover the wire to see the schema.
  • Right-click a node to view the last 10 invocations — invaluable for debugging.
  • Keep Workflows under ~12 nodes. If yours is bigger, split it into sub-Workflows that call each other.