Before you begin
You have a studio workspace, fromunoverse studio. Building and running the node needs
nothing else. For the last step, where you use it in a workflow, your universe is running
and you have the workflow from Create Your First Agent.
Here is the node you are about to build, as canvas will draw it:
My custom node
Quote
Ready
Quote, which never changes.
The colour and the type come from the files below. So do the handles: one on the left for the input, one on the right per output. Hover a handle and its connector name appears.
Build it
Four small files, and none of them is code.What a node cannot do
- It adds no code. The platform makes every call itself, the same way for every node.
- It reaches only declared hosts. Anything else is refused, and https only.
- It carries no keys. Yours stay in canvas, supplied as it runs.
- It is sealed. A deployed copy that was changed by hand is refused.
nodes/samples, and
studio lists them beside your own. Open one to see the same files you are about to write,
already filled in.
1
Create the package
A package holds one or more nodes and declares which hosts they may call. In your studio workspace, create
nodes/quote/ with one file in it:package.yaml
allowedHosts is the list of hosts this package may reach, and everything else is refused. A node cannot call anywhere you have not named here.2
Describe the node
Create Each entry in
quote/nodes/Quote/node.yaml. This one file says what the node is, what it connects to, and how to test it.nodes/Quote/node.yaml
outputs becomes a connector on the node. Downstream nodes read them as signal.quote1.quote and signal.quote1.author, where quote1 is the id canvas gives the node when you drag it in.A bigger node splits interface and test into their own files. This one is small, so they stay here.whenToUse decides whether the AI workflow builder can find your node at all. The catalogue ranks it against the task being built, so lead with the outcome in plain words and keep it to one or two sentences. Describe what disqualifies your node as a property (βno settings to fill inβ), and never name another node. The full guide is Node discoverability; read it before writing this field for a real node.3
Describe the call
Create It is a list even with one call, because a node often needs two: fetch a record, then fetch something the first reply pointed at. Naming each one is how a later call reads an earlier reply.
quote/nodes/Quote/api/run.yaml. It lists the calls the node makes, and this node makes one.nodes/Quote/api/run.yaml
transport: json says the reply arrives as one body. A streaming service uses transport: sse instead, and the node emits as tokens arrive.4
Describe what comes out
Create This API returns an array with one object in it, so
quote/nodes/Quote/api/events.yaml. One row per output connector, in the order the node declares them.nodes/Quote/api/events.yaml
response[0].q is the quote text. Read this file and you know everything the node emits, without opening another one.5
Run it against the real API
Open studio and go to the Nodes tab. Your node is listed there. Load its sample, press
Run, and the output appears beside the settings.This calls the real API. No platform is running, the keys come from your own
.env, and
nothing is published. Testing nodes covers it in full.6
Check it and deploy it
From anywhere in your workspace:Every rule a node must meet is checked, and each message names the one it broke. Then ship
it to your universe:Deploy runs the same check first, and Quote is in the
node library in canvas the moment it finishes.
7
Use it in a workflow
Open your workflow from Create Your First Agent, drag Quote in, and connect Input Trigger to it.Step through the workflow. Quoteβs Debug tab shows a fresh quote from the API.Now feed it to the model: reference
signal.quote1.quote in the OpenAI Stream prompt, and your Agent opens its answer with a famous quote.When a node needs a key
Quote needs no key. Most services do, and the key never goes in these files. A node declares what it needs, by name:nodes/YourNode/node.yaml
nodes/YourNode/api/run.yaml
Sharing it
Your node runs from the files in your repo, which is all you need while you build. To give it to anyone else, ship it from your terminal withunoverse deploy studio. That writes the node into a universe as a record: no build, no package, nothing to download, and it is live in that universeβs node library as soon as the deploy finishes.
The node carries a URL and asks for a key, so the two things anyone installing it will read are its allowedHosts and its credential declaration. Keep both honest.
Have Claude Code build it

Installed by unoverse update
unoverse-create
Claude Code already knows everything on this page. Open your project and describe the node you want:Create a node that fetches the top story from a news API.The skill writes the files, adds the host to
allowedHosts, and follows the same rules this page just walked through.How the skills work.
.md to the URL.
Next steps
Ingest content to Spatial
Ground your Agentβs answers in your own content.
Create a component
Design the interfaces your Agents speak through.

