Runs & execution
A run is one execution instance of a workflow. This page covers what happens after it starts: the statuses a run moves through, how to pause, stop, cancel, or reactivate it, how signals and approvals hold it, how to re-run a step, and how to read the run panel.
What a run is
Every execution belongs to a run, identified by a run id and listed in the workflow's run history. Because every trigger type is reusable, a run usually lives for a long time: each time a trigger fires, it opens a new epoch on the same run and executes the graph again. The run's start time is when it was created; each epoch has its own start time, and the most recent one is the run's last fire.
Which run a fire lands in
| Fire | Run it lands in |
|---|---|
| From the editor | The live run of the same version, when it exists and is compatible. A new run is created only for a new version or when no live run exists. |
| From production (webhook, schedule, table, chain, public chat or form) | The production run of the pinned version. See Triggers. |
| Error trigger | The handler workflow’s newest live run. |
Run statuses
A run is always in exactly one of 11 statuses: 5 non-terminal (active or idle) and 6 terminal (finished).
| Status | Terminal? | Meaning |
|---|---|---|
| PENDING | No | Created, not started yet. |
| RUNNING | No | Actively executing. |
| PAUSED | No | Paused by a user. The only status that can be resumed. |
| AWAITING_SIGNAL | No | A node is waiting on a signal, such as an approval (see below). |
| WAITING_TRIGGER | No | Idle between two fires of a reusable trigger. |
| COMPLETED | Yes | Finished successfully. The only status counted as a success. |
| PARTIAL_SUCCESS | Yes | A node verdict (some items failed). Runs no longer end with it; older runs may still carry it. |
| SKIPPED | Yes | Finished with the relevant path skipped. |
| FAILED | Yes | Finished with a failure. |
| CANCELLED | Yes | Stopped permanently by a user or an agent. |
| TIMEOUT | Yes | Ended on a time limit. Counted as a failure. |
Only COMPLETED counts as a success, and only FAILED, CANCELLED, and TIMEOUT count as a failure. PARTIAL_SUCCESS and SKIPPED are terminal but count as neither.
Epochs and spawns
Two different things can make part of a run happen again, and they are tracked separately:
- Epoch: a new trigger fire. Epochs start at 0 (before the first fire) and go up by one on each fire. Each epoch's results stay browsable on their own.
- Spawn: a re-execution within an epoch, produced by re-running a step (see below). Re-running raises the spawn, never the epoch.
Node counts shown for a whole run are cumulative across every epoch and every spawn: re-running a step never lowers what already happened.
Execution modes
| Mode | How it runs |
|---|---|
| Automatic (default) | Every ready node executes as soon as its predecessors are resolved. |
| Step-by-step | The run pauses after each node. You advance every node by hand, including control nodes like Decision. |
In Step-by-step mode, triggers are never executed for you: they still fire on their own. After a re-run in Step-by-step mode, the run goes back to PAUSED if non-trigger nodes are still ready, or to WAITING_TRIGGER if only triggers remain. For how nodes, ports, and branching behave, see Workflows.
Run controls
Five actions control a run's lifecycle. They act on runs in your current workspace: in an organization, members can act on the organization's runs.
| Action | What it does | Works from | Resulting status |
|---|---|---|---|
| Pause | Stops execution where it stands and suspends the workflow’s schedules. | An active run | PAUSED |
| Resume | Continues from where the run paused. Completes the run if every step has already settled. | PAUSED only | RUNNING, then a terminal status once finished |
| Stop | A graceful stop: closes the running epoch, cancels its pending signals, and returns the run to idle. Triggers stay armed. | RUNNING, PAUSED | WAITING_TRIGGER |
| Cancel | A hard, terminal stop: cancels active signals, closes epochs for good, and suspends the workflow’s schedules. | RUNNING, PAUSED, WAITING_TRIGGER, AWAITING_SIGNAL | CANCELLED |
| Reactivate | Revives a finished run so its triggers can fire again, and re-enables the schedules a cancel suspended (while the workflow is pinned). | Any terminal status | WAITING_TRIGGER |
- Stop is refused on a run that is
PENDING,WAITING_TRIGGER, orAWAITING_SIGNAL. On a run that already finished it only cleans up, with no status change and no error. - Cancel is the one action that reaches a run parked on a signal. Cancelling a run that is already cancelled does nothing.
- Reactivate works from every terminal status, including a failed or timed-out run.
A Stop or Cancel records who stopped the run and why. An agent can stop a run too: a graceful stop only closes the running epoch, while a cancel is terminal and suspends the schedules, exactly like the buttons.
Signals and pauses
A node can hold a run by yielding a signal. There are six signal types:
| Signal | Holds the run? | Resolved by |
|---|---|---|
| WAIT_TIMER | Yes | Time passing (a Wait node’s duration expiring). See the note below. |
| USER_APPROVAL | Yes | A person approving or rejecting, or the approval timing out. |
| WEBHOOK_WAIT | Yes | An external HTTP callback arriving. |
| INTERFACE_SIGNAL | Only when its action is set to advance the run | A user action on an interface page. Otherwise the page displays without holding anything. |
| AGENT_EXECUTION | Yes (internal) | An agent step running in the background finishing on its own. Not a user-facing pause. |
| BROWSER_USER_TAKEOVER | Yes | A person taking over a live browser session. |
Resolving approvals
A USER_APPROVAL signal is resolved one at a time or in bulk. When the node has a context template, the approver sees the rendered context next to the request.
| Action | What it does |
|---|---|
| Resolve one | Sets one pending approval to approved, rejected, timeout, or cancelled, with an optional comment and extra data. When a node has several pending signals (for example one per item inside a Split), you can target an exact item; otherwise the latest epoch’s signal is resolved, so you never resolve a stale one by accident. |
| Resolve all | Resolves every pending approval of a node at once with the resolution you choose (approved or rejected), either within one epoch or across every epoch. |
| Cancel | Cancels every pending signal on that node across the whole run. |
Approvals can also be answered from a linked chat channel (Slack, Microsoft Teams, Discord, Telegram, or WhatsApp). See Chat channels.
Re-running a step
You can re-run a step that completed, failed, is awaiting a signal, or is ready, optionally editing its configuration first. On the canvas, use Re-run from this step (Step-by-step) or Restart from this step (the rest runs again automatically) (Automatic). Re-running:
- Raises the epoch's spawn, not the epoch itself.
- Resets that step and everything downstream of it, then makes them ready again.
- In Automatic mode, lets the ready steps continue on their own; in Step-by-step mode, returns the run to
PAUSED(orWAITING_TRIGGERif the epoch is done) for you to advance.
Re-running an older epoch
By default the most recent epoch is replayed. When an older epoch is on screen in the canvas, the re-run replays that epoch instead, and its new spawn starts above that epoch's own highest spawn. Replaying a chosen epoch is not available on a Step-by-step run, and it is refused while other epochs of the same trigger are still executing.
When a re-run is refused
- The step is still executing on an Automatic run. Wait for it to settle, or stop the run.
- The run was
CANCELLEDor endedTIMEOUT. Fire the workflow again instead. - The edit changes the graph's topology (adding or removing nodes, rewiring edges). Edits at re-run time are limited to parameters, prompts, and configuration.
- The step's branch was not taken in the chosen epoch, so there is nothing to redo.
Every attempt at a step is kept, with its epoch, status, start and end time, and error, so you can compare re-runs.
The run panel
A workflow's runs are listed in a paged history, most recent first. The pinned production run is always pulled to the top. Each row shows:
- the status, as an icon and a label;
- the version it ran, with a pin marker on every run of the pinned version;
- the current epoch (calendar icon), once the run has fired at least once;
- a Step-by-step marker, and a flask marker for a Mock run (a dry run with mocked integrations);
- when it last fired, as a relative time;
- how long its last execution took, measured from the first node start to the last node end of the latest epoch, so the idle time between fires is not counted.
Hover a row to see its run id, creation time, and last fire time.
| Status | Color |
|---|---|
| Completed | Emerald |
| Running | Blue, with a pulse |
| Failed | Red |
| Waiting for trigger, Paused, Pending, Partial Success | Amber |
| Awaiting signal | Violet |
| Timeout | Orange |
| Cancelled, Stopped, Skipped | Gray |
Last-cycle result
Between fires, a reusable run sits at WAITING_TRIGGER, but the history shows something more useful: the outcome of its last cycle.
| The last epoch had | The row shows |
|---|---|
| A failed step (even with other steps completed) | failed |
| Every step completed | completed |
| No steps that cycle | the idle status |
Cancelling a run clears this result, so a cancelled run always shows Cancelled.
Steps, timeline, and cost
Opening a run shows its graph in run mode, each node colored by its status, with an epoch selector: view one past epoch frozen in time, or switch back to all epochs. The steps panel lists every step and switches between List view and Timeline view, which draws one bar per step sized by how long it took. Its status filter keeps All, completed, failed, running, awaiting signal, or skipped steps.
With no epoch selected, the counts for finished steps (completed, failed, skipped) are cumulative, so a re-run never makes them go backwards, while running and awaiting-signal counts stay live.
The panel also shows the Cost of this run, for the selected epoch or across every epoch. When the workflow has a spending cap, a gauge shows the spend of the current period. Once the cap is reached, the run shows Budget reached, no new run will start: the run stays in WAITING_TRIGGER and opens no new epoch until the allowance starts again (or until you raise the cap, for a cap that never resets). Test fires from the builder are not counted. See Plans & billing.
Logs
Logs lists every time a node ran, with what went in and what came out. The Simple view reads one pass at a time; the Table view puts every pass of the node in one table, filtered by epoch and status. Click an input or an output cell to open that field as a table: it lists the field for every pass loaded in the table, one row per element. Use the breadcrumb to come back.
The ID comes first and already says where a row comes from. The status, input, and output follow, then Epoch, Spawn, and Iteration one per column, to filter and sort on. They stay visible inside an opened field too: each element keeps the coordinates of the pass it came from, so a value you drilled into never loses its origin.
The ID is those coordinates written together, epoch.spawn.iteration.item, with trailing zeros left out. Each number is the value of its own column, and they all count from 0. Because it describes the row itself, the ID never changes when you filter, scroll to older rows, or when new passes arrive. Hover or tap the info icon next to the ID header for a reminder.
| ID | Means |
|---|---|
21 | Epoch 21, first pass. |
20.1 | Epoch 20, spawn 1: the step was re-run. |
20.0.2 | Epoch 20, loop iteration 2. |
20.0.0.3 | Epoch 20, the item at index 3 of a Split. |
21:3 | Inside an opened field: the element at index 3 of the list from row 21. |
An ID is not unique. A node that waits and then completes writes two rows at the same coordinates, and a node reached from two different triggers can show the same ID for both. Use the status and the times to tell them apart. An element that carries its own id field (a table row, for example) shows that value instead, and an opened field that is a single value (not a list) shows the ID of its pass.
Troubleshooting
| Symptom | What to check |
|---|---|
| Stop is refused | The run is idle or waiting on a signal. Use Cancel to end a run parked on a signal. |
| Schedules stopped after I cancelled a run | Cancel suspends schedules. Reactivate the run to re-enable them. |
| Re-run is refused | The step is still executing, the run was cancelled or timed out, or the edit changes the topology. |
| The duration looks short for a run that lives for days | It is the last execution’s working time, not the run’s lifetime. |
| No new epoch opens | Look for a reached spending cap on the run, or CREDIT_EXHAUSTED on the trigger node. |
| Two rows in Logs have the same ID | Expected: a wait and its completion, or two triggers, can share coordinates. Compare the status and the times. |