Before you begin
The platform is running (unoverse dev) and Canvas is open at http://localhost:3001. You have an OpenAI API key, and the OpenAI package is installed from the marketplace.
Build it
1
Add your OpenAI credential
In Canvas, open Credentials and click New credential. Select the OpenAI API type, name it, paste your API key, and save. Nodes never read keys from config or env files; they request credentials at execution time, decrypted and injected by the platform.

2
Create a workflow
Click Create New Workflow and name it. An empty Canvas opens.
3
Add three nodes
The workflow needs three nodes:
Streaming Text is a component, so it comes from Studio. Open Components in Studio, select StreamingText, and click Copy for Canvas. Then paste it into your Canvas.
Now connect them left to right: Input Trigger β OpenAI Stream β Streaming Text.The dots on a nodeβs edges are connectors. Each output connector carries one named signal. Hover over a connector to see its name and what it carries. The names matter: they are how downstream fields reference the data, as in 
- Input Trigger receives the userβs message.
- OpenAI Stream sends it to the model and streams the reply.
- Streaming Text displays the reply to the user.


signal.openaistream1.stream.OpenAI Stream has more than one output, so pick the right one: connect from its stream connector. stream carries the live text, so the reply flows into Streaming Text as the model writes it.
Every node instance gets an id: its type, lowercased, plus a number. Your three nodes are
inputtrigger1, openaistream1, and airesponse1. Downstream nodes read upstream outputs through these ids: signal.<nodeId>.<output>.4
Set a test message
Double-click Input Trigger to open its settings. Under Testing, enter a Message. This is the question that kicks off the flow when you run the trigger.

5
Configure the model
Double-click OpenAI Stream to open its settings:
- OpenAI API: select the credential you created in step 1.
- Model: pick a GPT-5.6 variant.
-
System Prompt:
You are a helpful assistant. Please answer the user's question. -
User Prompt:
The user's question is {{signal.inputtrigger1.output.message}}
6
Configure the response
Double-click Streaming Text:
- Main response text:
return signal.openaistream1.stream
stream is the modelβs streaming output, so text appears live as the model writes. The complete reply is also available as signal.openaistream1.text once the node finishes.Config fields accept two syntaxes: Handlebars (
{{signal...}}) for templating text, and JavaScript (return signal...) for computing a value. Use either; donβt mix them in one field.7
Step through it
Your workflow saves automatically as you build; there is no save button. Just run it: press the play button on Input Trigger to execute it with your test message. When a node completes, the next node in the chain becomes armed and flashes, meaning it is ready to run. Press its play button to step forward, inspecting each nodeβs output as you go.
The moment a node runs, its output is ready to inspect. Double-click the node and open the Debug tab. It shows every signal the node produced and the exact value each one carried on this run.
Step through all three nodes and watch the reply stream into Streaming Text.


One more thing
Everything you just built by hand, Claude Code can build for you. The platform ships a builder MCP, registered by this repoβs.mcp.json:
- With the platform running, open this repo in Claude Code and approve the
unoverse-builderserver when it asks. Type/mcpat any time to confirm it shows as connected. - In Canvas, create a new empty workflow and copy the
wf-xxxxxxid from the URL. - Ask:
Bind workflow wf-xxxxxx, then build a chat agent: input trigger β OpenAI β response display. Test each stage with runTest before adding the next.Claude binds to that one Canvas, builds stage by stage, and runs each stage while you watch the nodes appear live. It canβt see or touch any other workflow.
Next steps
Create your first node
Extend the platform with your own logic.
Ingest content to Spatial
Ground your Agentβs answers in your own content.

