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.