Dynamiq
Workflows

Build Your First Workflow

A hands-on tutorial: wire Input → Agent → Output, map the data between them, test-run it, inspect the trace, and release v1.

This tutorial builds the smallest useful workflow — an Agent sitting between the Input and Output nodes — and takes it all the way from blank canvas to released version. Along the way you do the three things every workflow needs: connect nodes, map data into them, and map data out to the Output node.

Before you start

  • You need a Connection for the LLM provider your agent will use (or use a system-provided connection if your org has one).
  • No deployment is required to follow along — the Test panel runs the canvas directly.

Build the workflow

Create a new workflow

Go to Workflows in your project and create a new workflow. A template gallery opens first — you can pick a template or generate a workflow from a prompt later; for this tutorial, close the gallery to start from a blank canvas.

The canvas is not empty: every workflow starts with an Input node and an Output node. Neither can be deleted.

A new workflow canvas with the Input node on the left and the Output node on the right

Add an Agent node

In the left palette, expand the AGENTS category and drag Agent onto the canvas between Input and Output.

The Agent node is a container: its card shows a Tools section with an "Add tools here" placeholder and an LLM section with an "Add LLM here" placeholder.

The Agent node on the canvas showing empty Tools and LLM slots

Give the agent an LLM

Drag the LLM node (in the TOOLS category of the palette) and drop it onto the agent's Add LLM here placeholder. Only LLM nodes are accepted here — dropping anything else shows "Only LLMs are allowed to be added here".

Click the LLM inside the agent to open its configuration on the right: pick the Provider (for example OpenAI or Anthropic), the Connection, and the model. The LLM lives inside the agent — it is not a separate node on the canvas and needs no edges.

An LLM dropped into the Agent node's LLM slot with its configuration panel open

The same pattern applies to tools: drop a search or scraping tool onto Add tools here to let the agent call it. Tools inside an agent are invoked by the agent's reasoning loop, not by edges. See Agent tools.

Connect Input → Agent → Output

Drag from the small handle on the right edge of the Input node to the handle on the left edge of the Agent node. Repeat from the Agent's right handle to the Output node's left handle.

Edges connecting Input to Agent and Agent to Output

Edges set execution order and, just as importantly, decide which variables each node can see: a node's variable picker only offers outputs from nodes upstream of it. If you skip the Input → Agent edge, the agent cannot reference the request fields.

Configure the agent

Click the Agent node (its header, not the LLM inside) to open the inspector. On the CONFIGURATION tab:

  • Set a Name — this name is how other nodes reference the agent's outputs (for example $.agent.output.content).
  • Fill Role & Instructions with what the agent should do, for example: "You are a concise research assistant. Answer the user's question directly."
  • Map the agent's Input field: click into the field and press / to open the variable picker, then choose the Input node's input field. The selector $.input.output.input is inserted as a token.
The agent's Input field with the variable picker open, listing fields from the Input node

The field placeholder tells you the rule: "Type text or press '/' to add variables". A field holds either a variable token or literal text — clear the text to insert a variable.

Map the Output node

Click the Output node. Its panel lists the Output node fields — by default output (Required) and files. For the output field, open the variable picker and select your agent's content output. This writes the selector $.agent.output.content (using your agent's name).

The Output node panel with the output field mapped to the agent's content output

This mapping step is the one beginners skip most often. An edge into the Output node is not enough — every Output field gets its value from the selector you choose here.

Test-run it

Click Test in the toolbar. The test panel has two tabs: Request (a form generated from your Input node's fields) and Chat (a conversational view). On the Request tab, type a question into the input field and run.

The Test panel's Request tab with the input field filled in

Inspect the trace

When the run finishes, the panel shows the execution trace: every node that ran, with its input, output, and timing. Click the Agent node in the trace to see the prompt it built and the content it produced; click the Output node to confirm your mapping delivered the agent's answer into output.

The test trace showing per-node inputs and outputs for Input, Agent, and Output

If output is empty, the mapping in the previous step is wrong or missing. See Testing and debugging workflows for more trace-reading techniques.

Save and release

Click Save. The save panel shows the version about to be created — v1 for a new workflow — and asks for a Name and Description. Click Create.

The save panel showing the v1 version label with Name and Description fields

If validation fails you'll see "Your workflow has errors. You need to fix them before saving." — nodes with problems are outlined in red on the canvas.

Every subsequent Save creates the next version (v2, v3, …). The saved version is a Release that Apps can pin to.

Deploy (optional)

With at least one saved version, the Deploy button becomes active. Deploying creates an App — a hosted endpoint you can call over HTTP. Follow Deploy a Workflow App, then call it.

What you built

Input (input: Any, files: Files)
  └─► Agent  [LLM inside; input ⇐ $.input.output.input]
        └─► Output (output ⇐ $.agent.output.content)

Three ideas carry over to every workflow you build from here:

  1. Edges = order + visibility. A node can only reference outputs of nodes upstream of it.
  2. Data moves through mappings. Each input field and each Output field picks its source explicitly.
  3. Save = version. Test as often as you like; only Save creates a release.

Next steps

On this page