Skip to content

Workflows

A workflow is a graph of nodes joined by connections. It starts from a trigger, passes items (rows of data) from node to node, and can drive browser profiles, accounts, mail, SMS, files, AI models, phones and outside apps. The engine runs in the app’s core, on your computer.

  • Canvas: drag nodes from the panel, connect their ports, and arrange them. Branching nodes (If, Switch, Loop) have one output per branch.
  • Node panel: opens on a node to edit its parameters. Fields accept fixed values or expressions that read the incoming item, earlier nodes, variables and the run’s context. The ? next to a field opens its help and links to the node reference.
  • Drafts: a workflow saves while it is still invalid; errors are listed so you can finish later.
  • Versions: every save keeps a version you can compare and restore.

A workflow starts from one of:

  • Manual, from the editor, the workflow list, the Local API or mzb run;
  • Schedule (interval or cron);
  • Webhook, an HTTP call to a URL the app gives you;
  • Event inside MZBase, an error in another workflow, or a call from another workflow;
  • Chat messages from the AI Agents page or a chat app;
  • app triggers such as a new Google Sheets row, a Telegram or Zalo OA message.

Turn a workflow on to let its schedule, webhook or event trigger start it.

A run can target one or many profiles. The engine opens each profile when a browser node needs it (see Profiles: proxy check, lock, sync) and can close it afterwards. Concurrency, retries and rate limits are set per workflow and per node.

  • Nodes receive a list of items and, by default, run once per item.
  • Data nodes edit, filter, sort, merge, aggregate and reshape items; Data tables keep rows between runs.
  • Code (data.code) runs JavaScript in a sandbox with memory and time limits.
  • Credentials for outside services are stored encrypted and picked by name; values never appear in logs.

The Browser script node runs JavaScript with Playwright’s syntax: page, locator, getByRole, click, fill, waitForResponse and more. It does not run real Playwright: every call goes to MZBase’s own browser driver, which:

  • never turns on the browser signals that pages use to detect automation;
  • runs helper code in isolated worlds, invisible to the page;
  • types and moves the mouse like a person.

The same script runs on every engine the driver supports. A call outside the supported set fails with a clear error naming it and the nearest supported call; it never falls back to a detectable path.

AI nodes chat, extract, classify, write and act on the page (ai.act), using the models of the AI gateway (your keys, or local models on your GPU). An AI agent node can call other nodes as tools. Anything that posts, sends, buys or deletes can be routed through an approval step.

Every run is kept as an execution with each node’s input, output, logs and timing. From an execution you can:

  • re-run from any node with the earlier data (partial re-run);
  • pin a node’s output while you build the rest;
  • see why a node failed and retry it.
  • Local API: POST /workflows/run with the workflow and profile ids. See Local API.
  • Terminal: mzb run "<workflow>" --profile "<profile>" --wait.
  • AI agents and MCP clients see workflows and nodes as tools.

The node reference lists every node type with its parameters and outputs. It is generated from the app’s node registry.