Build & Run
Once you have opened the editor, build your workflow by adding nodes, connecting them, configuring each step, and running it.
Add Nodes
There are two ways to drop a node onto the canvas from the palette on the left:
- Click a node to place it in the center of the canvas.
- Drag a node onto the canvas to place it at a specific spot.
Once a node is on the canvas you can drag it around to reposition it. Use the search box at the top of the palette to filter the list before you pick.
Connect Nodes
Each node has handles on its sides. Output handles sit on the right, input handles on the left. Trigger nodes only have output handles because they start the flow.
To connect two nodes, drag from an output handle on one node to an input handle on another. A curved line appears between them. This line represents the data path between the two steps.
Hover over a connection to highlight it and reveal a red delete button at the midpoint. Click the button or select the connection and press Delete to remove it.
Configure a Node
Click any node on the canvas to open its settings in the configuration panel on the right. Every node has at least two fields:
- Node Label. A custom name for this step, shown on the node body.
- Node ID. A read-only identifier used in exports and logs.
Below those, each node type has its own configuration fields. An HTTP Request node asks for a URL and method. A Conditional node asks for a boolean expression. A Schedule Trigger asks for a cron expression and timezone. Required fields are marked with a red asterisk.
Some nodes have specialized pickers. Invoke Specialist includes a searchable specialist selector. Chat Respond includes a channel picker. AI Content Analysis includes a model picker for your connected providers.
To remove a node, scroll to the bottom of the configuration panel and click Delete Node. A confirmation dialog appears before the node is removed along with any connected edges.
Choose an Execution Mode
The toolbar has a mode dropdown with three options:
- Dataflow. Pure data passing between nodes, similar to n8n. Each node receives input from the previous node and passes output to the next.
- State Machine. Shared state that nodes can read from and write to, similar to LangGraph. Good for workflows that need to track progress across steps.
- Hybrid. Combines both patterns in a single workflow.
Pick the mode that fits your use case. Dataflow is the simplest starting point for most workflows.
Invoke Specialists
Use Invoke Specialist when a workflow needs a specialist to synthesize, classify, or draft text from upstream data. Treat it as a text-producing node unless you configure structured output with response_format and response_schema.
Output Contract
Invoke Specialist returns generated text and runtime metadata.
With JSON Schema output, response_schema_strict controls schema enforcement. Strict mode is the default and fails the node when valid JSON does not satisfy the schema. Non-strict mode still requires a valid JSON object, but treats the schema as guidance so downstream nodes can read the parsed object from json or structured.
If you ask the specialist to "return JSON" in the prompt but do not enable structured output, the JSON is still text in content and output. Downstream references like {{rows}}, {{response.rows}}, or {{pr_number}} will be blank because those fields do not exist. Either enable structured output with response_format=json_object, enable structured schema output with response_format=json_schema plus response_schema, and read json or structured; or add a Code node that parses and validates content.
Use these references most often:
- Direct downstream node:
{{output}}or{{content}}. - Later node in the graph:
{{steps.review.firstOutput.output}}, wherereviewis the Invoke Specialist node ID. - Structured direct downstream node:
{{json.summary}}or{{structured.summary}}. - Structured later node:
{{steps.review.firstOutput.json.summary}}.
Prompt Templates
Prompt templates can read from two different scopes:
{{inputs.foo}}reads the root run input supplied to the workflow trigger.{{input.foo}}reads the direct upstream node input for the Invoke Specialist node.{{steps.<nodeId>.firstOutput.foo}}reads a specific earlier node when it is not the direct upstream input.
The direct upstream input and the prompt are bound separately:
- If the whole prompt is exactly
{{input}}, the specialist receives the direct upstream input as the prompt body. Objects and arrays are serialized as JSON. - If the prompt contains text plus templates, each template is rendered in place. Object and array values are serialized as JSON inside the rendered prompt, and the executor appends an
Input:block with the serialized direct upstream input. - If the prompt contains no input templates, the executor still appends an
Input:block with the serialized direct upstream input so the specialist receives the data. - If a template cannot be resolved, fix it before relying on the run result. Unresolved templates usually mean the node is reading the wrong scope or a field that the upstream node never produced.
Normalize large objects before the specialist call. A Code node that creates stable scalar fields and Markdown strings is easier to prompt against than a raw object array.
Invocation Modes
Invoke Specialist can run once for a whole payload or once for each item. Pick the mode that matches the downstream shape you need.
Legacy flatten_array_input: true maps to Run once per array item and only applies when the node receives one top-level array as its input. It does not flatten nested arrays such as input.rows, and it does not flatten multiple upstream inputs. If your data is shaped like { "rows": [...] }, add a Code or Loop node that exposes the rows as the top-level item stream before invoking the specialist.
Write Specialist Results to Knowledge Garden
Knowledge Garden write, upsert, and append nodes are mutation nodes. By default, the node output is write metadata, such as the plot, path, action, and write result. That metadata replaces the downstream data stream.
Choose the output mode based on graph placement:
For dynamic plot selection, set Plot Reference Mode to From Input and provide the input path in plot_id_path, such as plot.id or sourcePlotId. Selected-plot IDs use plot_id; input-derived plot references should not be stored there.
Imported or hand-authored workflows may use operation: "upsert" as a legacy alias for Upsert File. It is still a write/upsert operation and must provide non-empty content before the workflow can run.
Leave Emit Events on when Knowledge Garden event triggers should react to the write. Turn it off for cache writes or workflows that might otherwise retrigger themselves. Self-event filtering is configured on the Knowledge Garden event trigger, not on the write node.
Prefer terminal or parallel Knowledge Garden branches. For example, connect the Markdown Report node to both zephyr.knowledgeGarden and zephyr.chatRespond and use {{output}} in direct downstream nodes, or {{steps.report.firstOutput.markdown}} from later nodes. If the write must sit in the middle of the graph, use pass-through or merge-metadata mode so downstream nodes do not receive only write metadata.
Write content must be non-empty and fully resolved. Empty strings, missing report output, and unresolved template text such as {{output}} should fail before the write happens. If a section is intentionally empty, create an explicit message such as data_unavailable with the reason before writing.
Canvas Controls
The bottom-left corner of the canvas has standard controls:
- Zoom in / Zoom out.
- Fit view zooms to fit all nodes in the visible area.
- Lock freezes the canvas so you can scroll without accidentally dragging nodes.
The bottom-right corner shows a minimap with colored dots, one per node — colors match the node category. Drag the highlighted rectangle in the minimap to pan around large workflows.
Save and Run
The toolbar provides these actions:
- Save. Persists the workflow. Disabled when there are no unsaved changes.
- Execute (green button). Runs the workflow. If there are unsaved changes, it saves automatically first. The button shows "Running..." while the workflow executes, and a status banner appears below the toolbar with the result.
- Undo / Redo. Step backward or forward through your edits. Keyboard shortcuts:
Cmd+ZandCmd+Shift+Zon macOS,Ctrl+ZandCtrl+Shift+Zon Windows and Linux. - New. Clears the canvas for a fresh start. Prompts to confirm if there are unsaved changes.
When the workflow runs, node states update in real time, and any errors surface directly on the failing node.
Import and Export
Export
Click Export JSON in the toolbar to download the workflow as a JSON file. The file uses The AI Platform's native format and is named after your workflow.
Import
Click Import in the toolbar to open a dialog with a large text area. Paste workflow JSON and choose one of three import formats:
- Import as n8n for workflows exported from n8n.
- Import as LangGraph for LangGraph workflow definitions.
- Import as The AI Platform JSON for The AI Platform's native format.
The sidebar also has a collapsible Import n8n Workflow section for quick n8n imports without opening the full dialog.
Attach to Channels and Specialists
Workflows can run automatically in response to chat activity. From a channel's right panel or a specialist's configuration, click Add Workflow to browse and attach a saved workflow.
When attaching to a channel, you pick a trigger type: Manual, Slash Command (users type a command like /analyze), Keyword Monitor (watches for specific words), Event Trigger, or Scheduled.
When attaching to a specialist, you pick an invocation mode: Manual, Automatic, or On Demand.
Each attachment has a priority (0 to 100) and an active/inactive toggle. Higher priority workflows execute first when multiple are attached.
Start with a Manual Trigger node and the Dataflow execution mode. This is the simplest combination and lets you test your workflow by clicking Execute in the toolbar.