Cheqq Docs
Core ConceptsWorkflows

Step types

Every action and control-flow step a workflow can use, and how to configure it.

A workflow's steps fall into two groups: action steps, which do something, and control-flow steps, which shape the path through the other steps.

Action steps

StepWhat it does
ToolCalls a tool exposed by one of your installed Wapps
API callCalls an external URL — method, headers, query params, body, auth, and a timeout
Integration actionCalls a specific action on a connected integration (e.g. inserting a calendar event)
CodeRuns sandboxed JavaScript
CLIRuns a shell command in your sandboxed workspace
AI AgentGenerates text, structured data, images, or videos from a prompt, optionally with live browser control for text runs
NotificationSends an in-app, email, or push notification to chosen recipients
Send emailSends (or threads a reply) from one of your Mailhook addresses
RSS readFetches items from an RSS feed URL
Call MCP ToolRuns one tool from a connected MCP server, deterministically — no model in the loop

API call

Configure the URL, HTTP method, query parameters, headers, and body. Auth supports bearer tokens, basic auth, or an API key, sourced from a saved credential. Set a timeout, and turn on continue on error if a failed call shouldn't stop the run.

Code and CLI

Code steps run sandboxed JavaScript; CLI steps run a shell command in your workspace's sandbox. Both support a timeout and continue on error, and both can require human approval before running:

  • Set approval to manual (always requires sign-off) or auto (runs immediately unless a condition you define requires review).
  • Choose approvers — specific workspace members who can approve — and optionally an escalation: if no approver responds within a set time, it escalates to a different set of members.
  • A declined approval stops that step without throwing an unhandled error — the run records it as a normal decline.

AI Agent

Model selection defaults to Auto (Cheqq's managed default) or can be pinned to a specific model, including one from your own connected provider key. Configure a prompt/system prompt, a temperature, and a max output token limit. An AI step can optionally return structured output matching a schema you define, or drive a live browser session through the Companion extension for that run. Image-generating AI steps are a separate output mode and can't combine with structured output, browser control, temperature, or token limits.

Choose Video as the output mode to generate a private workspace video. Configure its supported duration, resolution, orientation, and audio setting. The model picker is filtered to admin-approved video models. Previous-step image paths can be used as image-to-video references, and the step returns the active video path plus file metadata for downstream steps. Like Image mode, Video mode cannot combine with structured output, browser control, temperature, or token limits.

MCP tools

Every tool on a connected MCP server appears in the step picker under its provider's group, with a form generated from the tool's own schema — pick the tool, fill the arguments (with {{...}} templating), done. Providers you haven't connected yet show as Available to connect, linking to the integrations catalog.

The generic Call MCP Tool step is the escape hatch: choose any server and tool by hand and pass arguments as JSON. Either way the call is deterministic — the tool runs with exactly the arguments configured, no model involved. A connection that needs re-authorization fails the step with a reconnect hint rather than running with stale access.

Notification

Choose a channel (in-app, email, or push), a category, and recipients. The body can reference other steps' output, and is rendered as Markdown — links in it are clickable.

Link sets where the notification opens when it is selected. Leave it empty and the notification is read-only; point it at a Wapp, a workflow run, or any URL to give it a destination. It accepts {{...}} expressions, so a step can send someone to the exact thing the run just touched:

/workflows/{{trigger.workflowId}}/runs/{{trigger.workflowRunId}}

Recipients are chosen as workflow members or roles, so one step can notify the person who triggered the run, the workflow's author, or everyone with a given role in the Wapp.

See Notifications for how they are read and acted on.

Send email

Sends from one of your Mailhook addresses, as a new message or threaded as a reply to a specific prior message.

Control-flow steps

StepWhat it does
BranchEvaluates a list of conditions in order and runs the steps under the first one that matches, with an optional else path
For EachRuns its steps once per item in a collection or a fixed count, sequentially
Do WhileRepeats its steps while a condition stays true, checked after each iteration
Do UntilRepeats its steps until a condition becomes true, checked after each iteration
ParallelRuns two or more branches of steps at the same time
WaitPauses the run until a condition is met — see below

For Each runs sequentially

Despite iterating over a list, For Each processes one item at a time, not concurrently. Use Parallel if you specifically need concurrent branches.

For Each and the two Do loops cap out at a maximum iteration count (100 by default) to prevent runaway loops. Branch and loop conditions are written as JavaScript expressions evaluated in a sandbox — see Expressions for the syntax, which is different from the {{...}} templating used elsewhere.

Wait

A Wait step pauses the run until one of five conditions is met:

  • Delay — a fixed duration (up to 30 days).
  • Datetime — an absolute date and time.
  • Expression — a datetime computed from a prior step's output.
  • Event — an external event: a collection change or an incoming webhook.
  • Manual — pauses until someone explicitly resumes it, with the same approvers/escalation options as Code and CLI approval routing.

Not yet available

A Browser action step type exists for driving a browser session as a standalone step, but isn't runnable yet — use an AI step's browser mode, or an API call/code step, in the meantime.

Continue with Triggers for what starts a run, or Error handling for retries, atomic mode, and dry runs.

Was this page helpful?