Debugging a flow run
When a flow misbehaves you do not read logs in a terminal: the run is drawn on the flow itself. Every step carries its status and time, the side panel holds what went in and came out, and a few tools take you straight to the cause — the first failure, the slow step, the one loop iteration out of five hundred that broke.
- Read a run on the canvas and in the Run tab
- Re-run only what failed with Retry from the failure
- Find slow steps and waits on the Timeline
- Jump to failed loop iterations and test one step with real inputs
The run is on the canvas
Click Run Flow (or pick a run in the Runs tab) and the canvas switches to that run: the header says Showing run, each step turns green, red, amber or dashed as it finishes, and its duration appears on the node. A loop header tells its own story — 500 items · 5 at a time, then 498 ok · 2 failed. Back to editing (or Clear run) takes the run off the canvas so you can edit again.
The colours mean the same thing on every surface: red failed, amber failed but the flow went on (Continue on error), dashed skipped or not reached, a cache mark for a result reused from cache.
The Run tab
The side panel’s Run tab is “the run on the canvas: its data, logs and timeline.” At the top, a progress bar counts 7 of 9 steps (or stopped at Fetch prices). When anything failed, an error banner sits above everything: Failed (or Failed · the flow went on), in Fetch prices, the message, Copy error, and +2 more failures › when there are several. Inside a loop it adds iteration 3 of 20 and Go to failed iteration.
Two buttons start a new run from this one:
| Button | What it does |
|---|---|
| Retry from the failure | A new run with the same inputs that reuses every step that already succeeded — only the failed ones run again, with the flow as it is now. Reused steps read Reused from the run being retried. |
| Run again | A new run of the whole flow with this run’s inputs. |
One step’s detail
Click a step on the run canvas to open its detail: Data (Fetch prices Input and Output), Bindings (where each input got its value), Logs (what was printed, in order), Code (the exact code this run executed), plus Iterations on a loop and Timeline. Secret values show as ••• (Secret value — not recorded). A failed script step can be handed to the flow assistant with Fix with AI.
The Timeline
Timeline shows when each step ran and how long it waited — for the whole run, or for one step’s iterations. Each bar has two parts: waited (queued, waiting for a free worker) and ran. The step’s duration counts only the running part, so a step that waited 2 s and ran 40 ms says 40 ms, with a separate waited 2 s mark. A cold start mark means a fresh interpreter had to start before the code ran — also outside the duration.
- Lanes are real concurrency: bars side by side in different lanes ran at the same time (parallel branches, a parallel loop). A lane label reads lane 2.
- A Retry wait segment is the pause before another attempt of a step with a retry.
- A long waited part on many steps means the workers were busy, not that your code is slow — see workers.
Loop iterations
A loop of five hundred items is one node, but every iteration is recorded. On the canvas the loop header carries a Next failure · #37 · 1 of 2 pill: click it to jump the body to the next failed iteration. The loop’s Iterations tab is a table — Item, Status, Duration — with Failed only to keep just the broken ones and Show all to undo it; pick a row to see that iteration’s steps on the canvas.
Debugging while you edit
- Peek at the last run
Select a step in the editor: if the flow’s last run reached it, two chips appear under it, In and Out. They open what that step received or returned in the last run, without leaving the editor; for a step inside a loop, pick the iteration. Open the run shows the whole run.
- Run up to here
Hover a step and click its ▶, or right-click it and choose Run up to here (“Run the flow and stop after this step”). Everything above runs for real; nothing below it does — the quickest way to check a step’s output before building the rest.
- Test one step with real inputs
A step’s Run test tab runs only that step. Use inputs from the last run fills its test values with what the step really received last time — for a step in a loop, one iteration’s real item and index.
The Runs tab
Runs lists every run of this flow, newest first — from the editor, schedules, API calls, triggers or other flows. Pick one to see it on the canvas. The project-wide Runs page lists every flow and script together, with filters, and nests a flow’s child runs under it.
What is kept
- A step value over 64 KB is cut in the live view (marked as truncated) and loaded whole when you open it.
- Secret inputs are never recorded; outputs are recorded as returned — do not return secrets.
- Retry from the failure runs the flow as it is now: if you changed a step that already succeeded, it is still reused, not re-run.