Node reference
A workflow is built from nodes, grouped in the palette by what they do. This is the
catalogue — the same icons and colors you see in the editor. Every node reads earlier nodes’
values with {{ nodename.field }} references and publishes its own fields for later nodes to
read the same way.
The nodes that move data in, out, and around your graph.
Declares the parameters your workflow takes — name, type, default, and
description. You supply these values when you run the workflow. Required parameters (no default)
are checked before a run starts.
Publishes: parameters — read a value as {{ input.parameters.<name> }}.
Output
Section titled “Output” Collects the final results. Map each output field to a value from
another node, e.g. {{ summary.text }}. This is what a run returns and what gets delivered.
Publishes: result — the mapping you defined.
Condition
Section titled “Condition” Branches the workflow. It evaluates an expression and sends the
flow down a true or false path, so later nodes only run when they should.
Publishes: branch (which way it went) and value (the evaluated result).
Runs a section of the workflow once for each item in a list —
sequentially or several at a time. Covered in detail in Loops.
Publishes: results (a list, in input order) and count.
The nodes that think.
A single call to an AI model. Give it a prompt (with {{ }} references
to other nodes), pick the model, and optionally set max tokens and reasoning effort. Use it for
a discrete step — summarize, classify, rewrite, extract.
Publishes: text (the model’s answer) and usage (token counts).
A model that can use tools in a loop until a task is done, not just
answer once. Use it when a step needs to investigate, call tools, and decide its own next move.
Covered in detail in Agents.
Publishes: result/text (final answer), tool_calls, iterations, stop_reason, usage.
The nodes that compute.
Python
Section titled “Python” Runs Python in a private sandbox. It reads upstream values from an
inputs dict, can read files attached to the workflow (mounted read-only at inputs/), and
assigns its answer to a variable called result. Any files it writes are uploaded and exposed
for later nodes (see Delivery & files). Use it for anything code does
best — transform data, call a library, do real math, render a file.
Publishes: result (your result variable), stdout, stderr, and files.
Template
Section titled “Template” Fills in a text template with values from other nodes, using
{{ }} placeholders. Use it to assemble a prompt, an email body, or a final document from
pieces. If a reference points at something that doesn’t exist, the run stops with a clear error
instead of producing garbled text.
Publishes: text — the rendered string.
Actions
Section titled “Actions”Built-in things a workflow can do. (These are preset Tool nodes.)
Sends an email — to you by default, or to recipients you specify —
with a Markdown, HTML, or plain-text body and optional attachments. See
Delivery & files.
Publishes: result and is_error.
Generates an image from a prompt — the same engine as
image generation in chat.
Publishes: result and is_error.
Search
Section titled “Search” Searches the live web and returns results your other nodes can use.
Publishes: result and is_error.
Integration
Section titled “Integration”The nodes that reach outside Catalyst.
Calls a tool from one of your connected
integrations (MCP) — or a built-in tool. You pick the tool and fill in its
arguments from other nodes’ values.
Publishes: result and is_error.
Makes an HTTP request — method, headers, body, timeout. Use it to call
any API that doesn’t have a dedicated integration. A 4xx/5xx response marks the node as failed
so the workflow can handle it.
Publishes: status, body, and headers.
Sub-workflow
Section titled “Sub-workflow” Runs another saved workflow as a single step and returns its output.
Use it to factor a common sequence out once and reuse it everywhere — the same idea as a
function call.
Publishes: result and status.
How nodes connect
Section titled “How nodes connect”You rarely draw every connection by hand. When one node references another with
{{ othernode.field }}, Catalyst infers the dependency and runs things in the right order. If
any node fails, the nodes that depend on it are skipped (and shown as skipped) rather than
running on missing data — so a workflow fails loudly and clearly, never silently.
Want to see it built end to end? Start with Build your first workflow.