Manage your workflows
Building one workflow and living with twenty are different jobs. The Build your first workflow tutorial covers the canvas, the node palette and the trigger lane; this page covers the list they all land in — how to find the workflow you want, read whether it is healthy, start it by hand, move it between projects with YAML, and retire it safely.


Where the list lives
Section titled “Where the list lives”The workflows list is the first tab of the Build hub, and the hub landing is
the list itself. The canonical URL is /build — not /build/workflows,
which holds only the deeper pages (the builder, the template gallery, the
unrouted-email view). The sibling tabs Scripts, Apps and Schedules sit one
segment deeper.
An old /workflows bookmark still works: it redirects to /build, and
/workflows/<id> redirects to /build/workflows/<id>. The redirect is a
courtesy for stale links, so share the hub URL rather than the redirect — see
Navigation and hubs.
Read the list
Section titled “Read the list”A strip of five counters sits above the table. All five cover the selected project, and the three time-boxed ones cover the last 24 hours:
- Active runs — runs of this project’s workflows that are still going, with a sub-line naming how many distinct workflows they span.
- Workflows — how many exist, and across how many projects in total.
- Success 24h — completed runs divided by completed plus failed runs. The sub-line names the exact sample, so a flattering percentage over three runs is visible as such.
- Failed 24h — the failure count, plus how many workflows were affected. The card inks red as soon as it is non-zero.
- Duration — the median run duration (not the mean, so one pathological run does not move it), over the sample named in the sub-line.
Each row below then describes one workflow:
| Column | What it tells you |
|---|---|
| Workflow | The name, behind a coloured tile carrying the first letter of its trigger kind. The sub-line reads project · detail, where the detail is the trigger’s concrete setting — a git branch, a Telegram command, the +slug of an email alias, a subject filter. Triggers with no such detail (manual, webhook, schedule, Discord, IMAP) show the project alone. |
| Status | The last run’s outcome, as Running, Done, Error, Ready or Cancelled. A workflow that has never run reads Ready. |
| Nodes | How many nodes the graph has. |
| Runs 24h | How many runs started in the last 24 hours, in any state. Always a number, 0 included. |
| Success | Completed divided by completed plus failed, over the same 24 hours, as a percentage. An em-dash means no run finished in the window — either nothing ran, or everything that ran is still in flight. |
| Trigger | The kind of the workflow’s primary trigger. |
| Last run | How long ago the most recent run started, or Never run. |
The Runs 24h and Success columns fold away on a phone, where the card keeps the name, the status word and the node count.
Reading a low success rate
Section titled “Reading a low success rate”Success is a ratio over a deliberately narrow window, so read it together with its neighbours before concluding anything:
- A low percentage next to a high Runs 24h is the real signal — the workflow is firing often and failing often. Open it and look at where the runs stop.
- A low percentage next to Runs 24h of 1 or 2 is arithmetic, not a diagnosis. One failure out of two runs is 50%.
- An em-dash with a non-zero Runs 24h means the runs have not finished — a workflow parked at a human-approval node sits here indefinitely, because nothing has decided it yet.
- Cancelled runs count in neither half of the ratio. They inflate Runs 24h without moving Success at all.
Find the one you want
Section titled “Find the one you want”The toolbar above the table filters and sorts on the server, so it searches the whole project, not just the page you are looking at.
-
Use Filter to pick a lifecycle view. The four buckets are precise:
- All — no filter.
- Active — the latest run is still going. A run paused at a human approval counts as active, which is usually what you want: it is waiting on a person, not stuck.
- With errors — the latest run failed outright. Cancelled runs do not appear here.
- Scheduled — the workflow’s primary trigger is a Schedule. This is a property of how it fires, not of any run.
-
Narrow further with Trigger (Manual, Schedule, Git, Webhook, Telegram, Discord, IMAP, Email, App run) and Status (Running, Done, Error, Ready, Cancelled). Both default to All and combine with the view above.
-
Type in the search box to match workflows by name.
-
Click a column header to sort. Workflow, Status, Nodes, Runs 24h, Success, Trigger and Last run are all sortable — sorting by Last run is the quickest way to surface a workflow that quietly stopped firing.
-
Use Columns to hide any column you do not need on a narrow screen.
Open a workflow
Section titled “Open a workflow”Clicking a row does not navigate away. It opens a wide peek drawer
holding the complete builder — palette, canvas and properties panel — over the
list, with a sub-line reading N nodes · N edges · N triggers. Press
Esc or click the sliver of list still visible to close it and stay
where you were in the table.
When you want the immersive canvas instead, click Open fullscreen in the
drawer’s header. That navigates to /build/workflows/<id>, the shareable
deep-link for a single workflow. Both surfaces are the same editor over the same
data — the drawer is for a look, the fullscreen route is for a session.
Trigger a run by hand
Section titled “Trigger a run by hand”-
Open the workflow (drawer or fullscreen).
-
Click Run workflow in the builder header. The run starts immediately and the canvas begins showing it — node states, durations, and the path the run took.
A manual start works whatever triggers the workflow carries. You do not need a Manual trigger on the canvas to press the button; the trigger lane governs what fires the workflow without you, not what you may start yourself. The one place that behaves differently is the Start run launch dialog, which offers a workflow only when its trigger is Manual or absent — a deliberately narrow list, not a limit on the workflow itself.
From the web terminal the same thing is one line:
workflows # list every workflow across projectsworkflow <id> # its detailsworkflow trigger <id> # start a run nowStart from a template
Section titled “Start from a template”SupaCloud ships a set of ready-made workflow templates. A template is not a live object you subscribe to: choosing one clones its graph into your project as an ordinary, fully editable workflow, and drops you in the builder on the copy. Nothing links back to the original afterwards.
There are two doors to the same set:
- From template in the action row beside the tabs opens a picker modal.
- The caret next to it opens an overflow menu whose first entry, Start from a
template, is the full-page gallery at
/build/workflows/templates— the same templates as tiles, with a project chooser of its own.
Every template ships as an autodev variant — plain autodev, the pull-request flow, the Linear and Notion tracker flows, the git-issue flow, and the gated and concept-first versions. Each tile names the trigger kind it provisions, and the description says what the graph does.
For what these graphs are actually for, see Choose the autodev mode and Automations.
Move a workflow with YAML
Section titled “Move a workflow with YAML”Every workflow round-trips through a server-authoritative YAML document. This is how you copy one between projects, review a change in a pull request, or keep an off-platform copy.
-
Open the workflow and switch the header toggle from Canvas to YAML.
-
Click Export from server to load the currently saved graph into the editor — not your unsaved canvas edits. Use Copy to put it on the clipboard.
-
To bring a document back in, paste it into the same panel and click Import as new workflow.
The exported document opens with a # yaml-language-server: $schema=… line
pointing at SupaCloud’s published workflow JSON Schema, so an editor that
understands that comment validates and completes the file as you type. The full
node and edge vocabulary is in the
Workflow YAML reference.
Importing from Windmill
Section titled “Importing from Windmill”The same overflow menu offers two Windmill paths, and they are not equally available:
- Import from Windmill converts a single exported flow’s JSON into a SupaCloud workflow. Any workspace member can use it.
- Import from repo walks a whole Windmill sync repository — flows, apps and scripts at once. It is an admin-grade operation and the server refuses it for anyone else, even though the menu entry is visible to everyone. See Import a Windmill repository.
Imported database bindings are read-only until you say otherwise. A step
that received a Postgres resource as a resource("f/…") parameter is imported
as a code node with a resource binding — and the converter deliberately binds
it read-only (pg.query works, pg.execute is denied). A step that writes
— an INSERT, UPDATE, DELETE or MERGE — therefore fails at run time with
resource 'pg' is bound read-only until an operator opts in. The import report
names every such step. To enable the write: open the workflow in the builder,
select the node, and in Properties → Resource bindings switch on Write
access for that binding, then Save. The toggle is per binding and per
node; an import never switches it on for you. The same section lets you add,
rebind or remove a node’s bindings by hand.
Keeping a copy of a working version
Section titled “Keeping a copy of a working version”SupaCloud does not keep a version history for workflows. There is no revisions tab, no diff between yesterday’s graph and today’s, and no restore button — a Save overwrites the stored graph. (Scripts do have revisions; workflows do not.)
So before a risky edit, export the YAML and keep it. That exported document is a complete, re-importable definition, which makes the YAML panel the practical answer to “can I get the old one back?” — and makes a workflows directory in your repository a reasonable habit.
Unrouted email
Section titled “Unrouted email”If you have wired a workflow to an email trigger, this is the page you will
eventually need. Messages arriving at SupaCloud’s central trigger mailbox are
routed to a workflow by the +suffix in the address they were sent to. Anything
that cannot be matched is parked, rather than left to sit in the inbox
forever, and lands at /build/workflows/email-unrouted.
The page is a plain table of the parked messages — From, Subject, Attempted address, Received — with two actions per row:
- Create alias mints a real email trigger on a workflow you pick, then moves the message back so the next poll fires that workflow with it. This is the “actually, that one was meant for this workflow” repair.
- Delete discards the message.
A message ends up here when the address carried no +suffix at all, when the
suffix matches no workflow alias, when the alias points at a trigger that has
since been deleted or disabled, or when the trigger’s own sender or subject
filter rejected it. That last case is worth remembering: a filtered-out message
is not silently dropped, it is parked.
For the trigger style where you poll your own mailbox instead, see Set up an IMAP trigger.
Stop a workflow without deleting it
Section titled “Stop a workflow without deleting it”There is no on/off switch on a workflow itself. What you switch off is the thing that fires it:
-
Open the workflow and select its trigger on the trigger lane.
-
In the trigger properties panel, turn Enabled off.
-
Repeat for every trigger the workflow carries — the list’s Trigger column only ever shows one of them.
A workflow with every trigger disabled keeps its graph, its name and its whole run history, stops reacting to events, and can still be started with Run workflow. That combination is exactly what you want while you are repairing one.
Two related throttles:
- If the workflow is fired by a schedule, pausing that schedule is the cleaner stop — see Set up a schedule.
- The gear in the builder header sets a Concurrent runs limit for this workflow. Leave it blank for no limit; excess runs queue and start as slots open up, rather than being dropped.
Delete a workflow
Section titled “Delete a workflow”The trash icon at the right end of a desktop row deletes that workflow, behind a Delete workflow confirmation. (The phone card has no delete button — tapping it opens the builder instead.) Any workspace member may delete a workflow; no admin role is required, and a run still in flight does not block the deletion — that run is removed along with everything else.
Where the runs go
Section titled “Where the runs go”The list tells you about runs; it is not where you read them. Every execution — started by hand, by a schedule, by a webhook or by an incoming mail — is a run under Runs, with the workflow run as the parent and each node’s execution as a child run beneath it. Open a run there for the full event log, the per-node timings and any approval it is waiting on.
See also
Section titled “See also”- Build your first workflow — the canvas, the palette and the trigger lane.
- Runs and tasks — why a definition and an execution are separate things.
- Web terminal commands —
workflows,workflow <id>,workflow trigger <id>. - Set up a schedule — the time-driven way to fire one.