Skip to content
Sponsor

Typed pipes

Every port has a type, and the type is the colour of its dot and of the wires it takes: red for event, blue for text, and so on. A wire only lands where the types fit, which catches most wiring mistakes while you drag. The server checks every wire again before a graph turns On.

A Text node named Message holding The meeting moved to Thursday at 3 pm., wired into a Template named Prompt that says Translate into Spanish: {message}, which feeds an LLM: a blue wire from the Text node's out port to the Template's message socket
  1. An output port, on the right of a node. Its colour is its type: blue is text.
  2. The wire. It takes the colour of the value it carries.
  3. An input port, on the left. Dropping the wire on the Template’s + tag made this socket and named it after the node the wire comes from: Message became message, the {message} in Translate into Spanish: {message}.
  • The same type fits. text into text, event into event.
  • A trigger input takes only an event. No data output fits there, any included, so a data wire never fires a node. A Router, a Wireless pair or a disabled node carries the type of its real source, so a routed event still connects.
  • any fits both ways. A port of type any takes every type, and an any output can go into every data input. The Template’s tags, Preview, Router and the HTTP Request tags are any.
  • A subtype fits into its parent, not the other way round. An int output goes into a number input, and a list into a json input, but a plain json value does not go where a list is expected. The column Also fits into below names each type’s parent.

Some ports change type with the node’s settings. An HTTP Request’s body is text, or an image or audio data: URL, depending on its response knob. The LLM grows an image input when its model reads images. Wireless Out ports take the type of what was wired into the matching Wireless In.

A long wire across a big graph is hard to follow, so you do not have to draw it. Wire anything into a Wireless In and pick a channel, from 1 to 100. A Wireless Out on the same channel, anywhere on the canvas, gets the same ports, and you wire on from there. Several Wireless Outs can listen to one channel, so one source feeds as many places as you like.

A Chat Input named Message wired into a Wireless In on channel 7. Two Wireless Outs on channel 7, further down the canvas, pass the message on to a Log and a Preview with no wire between them
  1. The Wireless In’s channel. Message trigger and text go in; each socket is named after the node and port it comes from, such as message.text.
  2. A Wireless Out on channel 7 has the same ports. Its message.text goes into a Log, and its message.trigger fires the Log.
  3. A second Wireless Out on channel 7 feeds a Preview, triggers included.

Any wire can go wireless, events included, and it keeps its type: a Wireless Out’s port takes the type of what was wired into the matching Wireless In. A channel has one Wireless In; a graph with two on one channel does not turn On. When the graph turns On, the runtime joins each Wireless Out’s wires straight to their source, so going wireless costs nothing while the graph runs.

For a wire you do want to see, a Router is a small pill that bends it around the canvas without changing it.

TypeCarriesAlso fits intoUsed by
eventa signal to run; its value is whatever the sender attachedAgenda, Append File, Audio Input, Changed, Chat, Chat Input, DB, Delete File and 25 more
texta stringAppend File, Chat, Chat Input, Chunk, Delete File, Embed, Foreground Window, Format List and 21 more
numbera numberMeter
inta whole numbernumberDB, HTTP Request, Integer, Queue, Vectors
floata decimal numbernumberFloat
booltrue or falseBoolean, KV
jsonstructured data: an object, a list, a numberAgenda, Build JSON, DB, Foreground Window, Format List, Get, KV, List Dir and 5 more
lista list of valuesjsonChunk, List, Sentences
imagean image as a URL or a data: URLImage, Screen Capture, Window Capture
audioan audio clip as a data: URLAudio, Audio Input, STT, TTS
pcm-audioraw audio samplesno core node yet
embeddinga vector of numbers, or a list of vectorsEmbed, Vectors
memory-setsearch hits: text, score, ref and metadata for eachRerank, Vectors
statethe state of an agentno core node yet
messageone chat messageno core node yet
toola tool offered to a modelLLM
tool-calla Tool's call: offers the tool and carries the argumentstoolTool, Tool Args
tool-resultwhat a tool returnedno core node yet
mooda mood name, from Tag ParseTag Parse
actionan action name, from Tag ParseTag Parse
langa language code such as en or pt-BRtextAudio Input, STT, TTS
schedulea due reminderno core node yet
observationnotes as markdown bulletsno core node yet
secreta masked credentialno core node yet
dba handle to a Database storeAgenda, Database, DB
kva handle to a KV StoreKV, KV Store
vectorsa handle to a Vector StoredbVector Store, Vectors
anyanything: the wildcardBuild JSON, Changed, Compute, DB, For-each, Get, HTTP Request, KV and 11 more

A custom node can register types of its own. It cannot change the colour or the parent of a type that already exists, so a custom node never rewires anyone else’s graph. See Custom nodes.