Every node a graph can use, one page each: what it takes, what it returns, when to reach for
it, and a graph that uses it. The field tables come from the registry the canvas inspector
reads, so they list the fields the node takes. The groups match the canvas palette, and the
? beside a step’s kind in the inspector opens its page here.
| Node |
Kind |
What it does |
| Trigger |
trigger |
Start this graph from an event: a bus subscription or a webhook the graph owns. |
| Node |
Kind |
What it does |
| HTTP request |
http |
Make an HTTP request to an external service. |
| Shell command |
shell |
Run a shell command on an agent; its spool output set values become the node’s output. |
| Polyglot script |
code |
Run a script in your language of choice on an agent. |
| Sub-workflow |
workflow |
Run another workflow and wait for it. |
| Transform |
transform |
Reshape a value with JavaScript: build the output field by field, or write the expression yourself. |
| Node |
Kind |
What it does |
| Switch |
switch |
Route to one branch by evaluating conditions in order. |
| Fan out |
fan_out |
Run a body once per item, in parallel. |
| Wait |
wait |
Pause the run for a fixed duration, or until a signal arrives. |
| Approval |
approval |
Pause for a human to approve or reject before continuing. |
| Wait for event |
event |
Wait until a matching event arrives on the project bus. |
| Emit event |
emit |
Publish an event onto the project bus. |
| State cell |
state |
Read or write a durable state cell, or settle a race between runs. |
Each action of a connector is a node of its own, typed <connector>.<action>. The actions of
one connector share its with fields and its credential. Connectors covers
credentials, connector versions and script actions. Google Sheets authenticates as a Google
account a project member connected under Settings > Connections > Connected accounts; name
that account as the step’s credential.
| Node |
Kind |
What it does |
| Send message |
matrix.send_message |
Posts a message to a Matrix room, as the account whose access token the credential holds. |
| Node |
Kind |
What it does |
| Create message |
anthropic.messages |
Sends one prompt to the Claude Messages API and returns the reply. |
| Node |
Kind |
What it does |
| Chat completion |
openai-compatible.chat |
Sends one prompt to any API that speaks OpenAI’s /chat/completions (OpenAI, Mistral, Ollama, vLLM, LM Studio, LiteLLM) and returns the reply. |
| Node |
Kind |
What it does |
| Post message |
slack.post_message |
Posts a message to a Slack channel, as the bot whose token the credential holds. |
| Node |
Kind |
What it does |
| Send message |
telegram.send_message |
Sends a plain-text message to a Telegram chat, group or channel, as a bot. |
| Node |
Kind |
What it does |
| Set commit status |
github.set_commit_status |
Sets a commit status on GitHub: the check with a pending, green or red mark beside a commit and on its pull request. |
| Report a run’s status |
github.report_run_status |
Turns a run’s lifecycle event into a GitHub commit status: run.started posts pending, run.succeeded success, run.failed failure and run.cancelled error. |
| Node |
Kind |
What it does |
| Set commit status |
gitea.set_commit_status |
Sets a commit status on a Gitea or Forgejo server: the check mark beside a commit and on its pull request. |
| Report a run’s status |
gitea.report_run_status |
Turns a run’s lifecycle event into a commit status on Gitea or Forgejo: run.started posts pending, run.succeeded success, run.failed failure and run.cancelled error. |
| Node |
Kind |
What it does |
| Send SMS |
46elks.send_sms |
Sends a text message through 46elks, for the alert that has to reach someone who isn’t looking at a screen. |
| Send SMS (dry run, nothing sent) |
46elks.send_sms_dryrun |
Checks and prices a text message with 46elks without sending it. |
| Node |
Kind |
What it does |
| Read rows as objects |
google-sheets.read_rows |
Reads the rows under a sheet’s header row as objects keyed by the header, a chunk at a time, however long the table is. |
| Append rows |
google-sheets.append_rows |
Adds rows below a sheet’s table, once, even when the step is retried. |
| Update or append a row by key |
google-sheets.update_row_by_key |
Finds the row whose key column holds a key and writes the given cells into it, or appends a new row when there is none. |
| Read range |
google-sheets.read_range |
Reads a block of cells in A1 notation and returns it as a list of rows, each a list of cells. |
| Update range |
google-sheets.update_range |
Writes a list of rows into a block of cells, starting at the range you give. |
| Clear range |
google-sheets.clear_range |
Empties a block of cells and keeps their formatting. |
| Get spreadsheet details |
google-sheets.get_spreadsheet |
Returns a spreadsheet’s title, locale and time zone, and each sheet’s properties: its title, id, position and size. |
| Create spreadsheet |
google-sheets.create_spreadsheet |
Creates a new spreadsheet in the connected account’s Drive and returns its id and address. |
| Add sheet |
google-sheets.add_sheet |
Adds a sheet (a tab) to an existing spreadsheet. |
A node in a graph document is id, type and
config, where config is what each page here lists. Beside config a node also takes:
note: why the step is there
if: a CEL condition; the node is skipped unless it is true
continue_on_error: a failure is recorded and the run carries on
retry, timeout, requires, agent: for nodes that run on an agent (http, shell,
code, and every connector action)
concurrency: a lease group, with {{ … }} holes
Values in config can be computed: { $expr: "<cel>" } keeps the value’s type and
{ $template: "text {{ cel }}" } builds a string. Both read nodes.<id>.output, input,
vars and run.