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.

- An output port, on the right of a node. Its colour is its type: blue is
text. - The wire. It takes the colour of the value it carries.
- An input port, on the left. Dropping the wire on the Template’s
+ tagmade this socket and named it after the node the wire comes from: Message becamemessage, the{message}inTranslate into Spanish: {message}.
What fits where
Section titled “What fits where”- The same type fits.
textintotext,eventintoevent. - A trigger input takes only an event. No data output fits there,
anyincluded, 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. anyfits both ways. A port of typeanytakes every type, and ananyoutput can go into every data input. The Template’s tags, Preview, Router and the HTTP Request tags areany.- A subtype fits into its parent, not the other way round. An
intoutput goes into anumberinput, and alistinto ajsoninput, but a plainjsonvalue does not go where alistis 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.
Wireless: a wire without the cable
Section titled “Wireless: a wire without the cable”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.

- The Wireless In’s channel. Message
triggerandtextgo in; each socket is named after the node and port it comes from, such asmessage.text. - A Wireless Out on channel 7 has the same ports. Its
message.textgoes into a Log, and itsmessage.triggerfires the Log. - 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.
Every type
Section titled “Every type”| Type | Carries | Also fits into | Used by |
|---|---|---|---|
event | a signal to run; its value is whatever the sender attached | Agenda, Append File, Audio Input, Changed, Chat, Chat Input, DB, Delete File and 25 more | |
text | a string | Append File, Chat, Chat Input, Chunk, Delete File, Embed, Foreground Window, Format List and 21 more | |
number | a number | Meter | |
int | a whole number | number | DB, HTTP Request, Integer, Queue, Vectors |
float | a decimal number | number | Float |
bool | true or false | Boolean, KV | |
json | structured data: an object, a list, a number | Agenda, Build JSON, DB, Foreground Window, Format List, Get, KV, List Dir and 5 more | |
list | a list of values | json | Chunk, List, Sentences |
image | an image as a URL or a data: URL | Image, Screen Capture, Window Capture | |
audio | an audio clip as a data: URL | Audio, Audio Input, STT, TTS | |
pcm-audio | raw audio samples | no core node yet | |
embedding | a vector of numbers, or a list of vectors | Embed, Vectors | |
memory-set | search hits: text, score, ref and metadata for each | Rerank, Vectors | |
state | the state of an agent | no core node yet | |
message | one chat message | no core node yet | |
tool | a tool offered to a model | LLM | |
tool-call | a Tool's call: offers the tool and carries the arguments | tool | Tool, Tool Args |
tool-result | what a tool returned | no core node yet | |
mood | a mood name, from Tag Parse | Tag Parse | |
action | an action name, from Tag Parse | Tag Parse | |
lang | a language code such as en or pt-BR | text | Audio Input, STT, TTS |
schedule | a due reminder | no core node yet | |
observation | notes as markdown bullets | no core node yet | |
secret | a masked credential | no core node yet | |
db | a handle to a Database store | Agenda, Database, DB | |
kv | a handle to a KV Store | KV, KV Store | |
vectors | a handle to a Vector Store | db | Vector Store, Vectors |
any | anything: the wildcard | Build 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.