Node types
This page describes the data shape of each node type. The required and optional field lists are exhaustive. Anything that is not listed is rejected by the canvas at load time. Every example on this page parses through the DSL parser.
action
Section titled “action”This is a tool-based node. It invokes a registered adapter to drive an
external tool such as the shell, the filesystem, or a CLI tool. The adapter is
selected by data.adapter, and its dispatch arm is selected by
data.actionId. All other fields are adapter-specific. See the
adapter references.
Required fields
| Name | Type | Description |
|---|---|---|
adapter | string | Adapter name; must match a registered adapter |
actionId | string | Dispatch arm within the adapter |
deps[action: "Install"] { adapter: "shell" actionId: "pnpm" args: "install"}This is a generative model node. It invokes a model from a chosen provider.
The default provider is local, which runs an LLM on the managed server with
zero egress. A cloud provider invokes a frontier model instead, and it is
gated by the cloud-AI setting and a provider API key. The selected model’s
capabilities drive both execution and the inspector. Those capabilities are
reasoning, vision, in-node tool use over bound adapters, and embeddings. A
non-empty labels array turns the node into a classifier that emits a
branchable label.
Required fields
| Name | Type | Description |
|---|---|---|
modelId | string | Id of a model loaded from the Model Hub |
input | string | Prompt text. {{input}} feeds the upstream node’s output; {{nodeId.field}} reads a named node’s output field |
Optional fields
| Name | Type | Description |
|---|---|---|
provider | string | local (default) or a cloud provider |
system | string | System prompt setting the model’s role |
maxTokens | number | Maximum output tokens (default 1024) |
temperature | number | Sampling temperature (default 0.7) |
topP | number | Nucleus-sampling probability mass (default 1.0) |
topK | number | Top-k sampling cutoff (default 0, disabled) |
explain[ai: "Explain failure"] { modelId: "local-llm" system: "You are a build engineer. Explain the failure in one paragraph." input: "{{input}}"}agentic
Section titled “agentic”This is a design-time generator node. From a natural-language request, it proposes a whole flow for you to review and apply. It is not a runtime node. Run hands it to the review flow rather than executing it.
Required fields
| Name | Type | Description |
|---|---|---|
modelId | string | Id of the model used to generate the flow |
input | string | Natural-language description of the flow to generate |
Optional fields
| Name | Type | Description |
|---|---|---|
provider | string | local (default) or a cloud provider |
workspace | string | Workspace folder the generated flow operates within |
plan[agentic: "Generate a deploy flow"] { modelId: "local-llm" input: "Build, test, and deploy the service" workspace: "."}utility
Section titled “utility”These are built-in primitives that need no external adapter. They cover timed
delays (sleep), logging (log), session memory (set-variable), downloads
(download), fan-in (merge), and schedule markers (cron).
Required fields
| Name | Type | Description |
|---|---|---|
actionId | string | One of sleep, log, set-variable, download, merge, cron. Unknown ids fail cleanly at run time |
wait[utility: "Cool down"] { actionId: "sleep" durationMs: 5000}service
Section titled “service”This is an API-based integration node. It connects to an external service
through that service’s API. The concrete service, its endpoints, and its
operations are supplied as catalog data in the entry’s serviceIntegration
descriptor, so the node stays vendor-neutral in the DSL. Credentials resolve
from the service connection.
Required fields
| Name | Type | Description |
|---|---|---|
operation | string | Id of the operation to invoke, from the installed service’s catalog descriptor |
Optional fields
| Name | Type | Description |
|---|---|---|
connection | string | Connection id selecting which stored credential to use |
call[service: "Create a record"] { operation: "create-record" title: "Release review"}