Build workflows
Workflows
What a workflow is, how the assistant builds and changes it, versions, and turning triggers on and off.
A workflow is an automation made of one trigger and a list of steps. The trigger decides when it runs — on a schedule, on a GitHub or Slack event, on a webhook call, or by hand. The steps decide what happens — calling tools on your connections, asking a model, running an agent, or reshaping data with JavaScript.
Under the hood each workflow is a short YAML definition. You rarely need to read it, but it's always one click away under Definition (YAML) and is described fully in the workflow reference.
trigger:
kind: schedule
cron: "0 9 * * 1-5"
timezone: America/Toronto
steps:
- key: prs
kind: tool
tool: github.list_pull_requests
args: { repo: acme/api, state: open }
- key: summary
kind: llm
model: fast
prompt: "Summarize these pull requests for standup: {{ steps.prs.output }}"
- key: post
kind: tool
tool: slack.post_message
args: { channel: C01ENGINEER, text: "{{ steps.summary.output.text }}" }
Building with the assistant
Workflows are always written by the workflow assistant — you describe, it builds. Open any workflow and use the chat panel beside it. The assistant:
- reads your connections and models before using them, and won't reference anything that doesn't exist;
- asks when something essential is ambiguous (which repository, which channel, what to do on failure);
- writes the complete definition, validates it, fixes any errors, and saves a new version;
- tests JavaScript in the same sandbox runs use before saving it;
- explains what it built or changed in plain language;
- can run the workflow, read run results, and debug failures when you ask.
Things you can say:
| You say | The assistant |
|---|---|
| "Also post the summary to #releases" | Adds a Slack step and saves a new version |
| "Only do this for PRs labelled needs-review" | Adds a condition to the relevant steps |
| "Use the smart model for the review" | Changes the step's model |
| "Why did the last run fail?" | Reads the run's steps, errors and logs and explains |
| "Run it for PR 1482 in acme/api" | Starts a manual run with those inputs |
| "Turn it on" | Enables the trigger |
Start a fresh conversation any time with New chat; the workflow and its history are unaffected. Chatting with the assistant is included in every plan and is never billed as Murmurator AI usage; see AI models.
You can also build and edit workflows from your own agents — Claude, Cursor or anything that speaks MCP — using the same tools the assistant uses. See MCP server.
Drafts
A workflow you've just described is a draft until the assistant saves its first version. Drafts have no steps and can't run. If the assistant needs something from you first — say, a Slack connection that doesn't exist yet — the workflow stays a draft until you answer.
Versions
Every save creates a new, numbered version with a one-line summary of the change, who made it, and whether it came from the assistant or an MCP client. Open History on a workflow to see every version and a highlighted diff against the previous one.
Runs are pinned to the version that was current when they started. Editing a workflow never changes a run that's already in progress, and a run's page links to the exact version it used.
Enabling and disabling triggers
New workflows start with their trigger disabled, so nothing fires until you're ready. Use Enable trigger / Disable trigger on the workflow page, or ask the assistant.
- Enabled — the trigger fires automatically (schedules run, webhooks and events start runs).
- Disabled — nothing starts automatically. You can still press Run to start a manual run at any time.
A workflow can only be enabled when its definition is valid. The workflow list shows each workflow's status: draft, disabled or enabled.
Inputs
Workflows can declare inputs — values supplied when a run starts, like a repository name or an issue number. When you press Run, Murmurator shows a form for them; MCP clients pass them as inputs. Inputs can be required and can have defaults, which scheduled runs use.
inputs:
repo: { type: string, required: true, description: "owner/name" }
number: { type: integer, required: true }
dry_run: { type: boolean, default: true }
Steps read them with templates like {{ inputs.repo }}. See Data flow.
Settings and deleting
Use the gear icon on a workflow to rename it or change its description. Deleting a workflow removes its versions, runs and conversations permanently.
Limits
- Up to 50 steps per workflow.
- Step keys are lowercase letters, numbers and underscores, starting with a letter, and unique within the workflow.
- Never put secrets in a definition — they belong on connections. The validator rejects definitions that reference connections or models your account doesn't have.