Workflows
A workflow is a pipeline you draw on a canvas: a trigger, then a chain of steps that run in the order you connected them. Some steps are AI, some aren’t — a condition, an API call, an email, a pause for a human to sign off. Nothing about the sequence is left to a model’s judgment, which is exactly why you’d choose one.
In one line
Reach for a workflow when the order of steps is the requirement. If you’d be upset that it ran the steps in a different order, it’s a workflow, not an agent.
Workflow or agent?#
Both automate. They differ in who decides the steps:
- An agent works out how to do the job each time, within the brief you wrote. Good when the situation varies and judgment is the point.
- A workflow does the steps you drew, every time, in that order. Good when consistency, branching, or non-AI steps are the point.
They compose: a workflow can call an agent as one of its steps, which is usually the right shape. Let the workflow own the sequence and the plumbing, and let an agent own the one step that genuinely needs thinking.
Building one#
Go to AI Studio → Workflows → New workflow. You get a canvas; drop nodes onto it and connect them.
Choose how it starts#
Every workflow begins with a Trigger node. The kind you pick decides what sets it off:
- On demand — you run it, or something else calls it.
- Scheduled — a recurring clock. See Schedules.
- Event — an incoming webhook.
- Integration — an event from a connected service.
- Data enrichment — a new or changed row in one of your tables.
Lay out the steps#
Drag in the nodes the job needs and connect them. The output of one becomes available to the next.
| Node | What it does |
|---|---|
| Agent | Hands the step to one of your agents |
| AI | A single model call with your prompt |
| Tool | Calls one specific tool — including Create PDF from HTML, which turns the HTML an earlier step built into a branded PDF file |
| Knowledge Retrieval | Looks something up in a knowledge base |
| Condition | Branches on a test |
| Loop | Repeats a section |
| List Operator | Works through a list item by item |
| Code | Runs a code step |
| API Call | Calls an external HTTP endpoint |
| Image Generation | Produces an image |
| Send Email | Emails the result out |
| Human Input | Pauses for a person to answer or approve |
| Delay | Waits before continuing |
| Engagement Branch | Splits on how a recipient responded |
Test it#
Run the workflow from the canvas and watch each node light up as it executes. A node that fails shows you what it received, which is nearly always enough to spot the problem.
Publish a release#
When it works, cut a release with a short note. Releases are snapshots: you can promote one to production, and you can revert to an earlier one if a change turns out badly. Scheduled runs and external callers use the production release, so editing the canvas doesn’t disturb anything live until you promote.
Document steps#
When a workflow computes a report’s contents (say, a Code node turning rows into tables), add a Tool node set to Create PDF from HTML rather than asking an agent to retype the data. It renders exactly the HTML it is given using your organization’s Brand kit (Settings → Brand kit) — colors, typefaces, footer, and the logo on the cover and page header when the kit has one — and outputs a PDF file for later steps to use. The file is stored privately in your workspace.
Copy and import a workflow#
From the ⋮ Workflow options menu next to Save on the canvas, Copy config as JSON puts the whole workflow on your clipboard. In another workflow (or another organization), choose Import from JSON and paste it. Import replaces the current canvas, including unsaved changes, and stays unsaved until you save it.
Human approval in the middle#
The Human Input node is the one that makes long automations safe to adopt. Put it after the analysis and before anything consequential: the run pauses, a person answers, and the rest of the pipeline continues with their answer.
Use it when the decision is genuinely a judgment call and you want it made inside the pipeline. When the decision is a campaign change, prefer the Suggestions route instead — the proposal lands in Home with impact numbers attached, and the run doesn’t sit half-finished waiting.
Most other steps don’t need a dedicated node for this: a Tool, API Call, Send Email, AI, Code, Image Generation, or Agent step can each be switched to ask for approval on their own, without adding Human Input as a separate step. See Approvals for how to turn one on, who can decide, and where a decision gets made — the run’s page, the Approvals inbox, or straight from an email.
Workflows can't quietly change your ad accounts
The same rule that governs scheduled agents applies here: a run with no human attached can’t push a change to a platform directly. Route campaign changes through proposal cards, or gate them behind a Human Input node or an approval-gated step.
Running a workflow#
- From the canvas, while you’re building.
- On a schedule — point a schedule at it.
- From an agent — give the agent the workflow as an integration and it can call it.
- Over the API — see the MCP note below.
Common flows#
- Monday client pack. Scheduled trigger → Agent node writes the analysis → Artifacts produce the PDF → Send Email delivers it to the client list.
- Guarded budget shifts. Agent node finds pacing problems → Condition on size of change → small ones become proposal cards, large ones hit a Human Input node first, or run through an API Call step gated on approval.
- Enrich a list. Data-enrichment trigger on a table → List Operator over the new rows → API Call per row → write results back to the table.
The judgment inside a step — brief one, then call it from a node.
ApprovalsGate a step so a person decides before it runs or before its output is used.
SchedulesPut the whole pipeline on a clock.
TablesStructured rows a workflow can read from and write back to.
When to use whatThe mental model behind agents, workflows, and schedules.
List, inspect, and run workflows from your own tooling with list_workflows, run_workflow, and get_run_status. Releases are managed with create_release and set_production_release.