Skip to content

Building a workflow

Opening an automation takes over the screen with the builder: a node canvas on the right, a palette or inspector on the left, and a toolbar across the top. It stays open on top of your workspace; there is no separate page or tab.

Quick overview

  1. Create or open an automation to enter the builder.
  2. Drag a node from the palette onto the canvas.
  3. Drag from a node's connector to the next node to link them.
  4. Click a node to open its settings in the left panel.
  5. Click Validate, then Test to run it once, or Activate to go live.

Detailed reference

Layout

RegionWhat it holds
Icon rail (far left)Three views: Flow (the canvas), Settings (per-automation options), Activity (run history).
Left panelThe node palette when nothing is selected, or the selected node's settings when one is. The two swap in place.
CanvasThe graph itself: a grid background, pan and zoom, a minimap, and zoom controls.
ToolbarExit, the automation's name and autosave status, undo and redo, Validate, a status pill, and Test / Activate / Pause.

The node palette

The left panel's palette has a search box and three tabs matching the node catalog: Triggers, Actions, and Rules, each grouped into smaller subcategories (for example Design, AI, or Notification under Actions). Drag any node onto the canvas to place it; see Nodes for the full catalog.

Connecting nodes

Drag from a node's bottom connector to the top of the next node to link them. A trigger has no input; an exit node has no output. Condition-style nodes (like If) expose two connectors, one for each branch, so you wire a "yes" path and a "no" path separately.

Configuring a node

Click a node to swap the left panel to its inspector: a title, a short description, and its fields.

Field typeRendered as
TextA single-line input
TextareaA multi-line input, for prompts and longer content
NumberA numeric input, with min and max where relevant
SelectA dropdown; some (like folders) load your live workspace data
BooleanA toggle switch
Part pickerA button that opens the part picker described below

Picking a project part

Some action nodes, starting with Pick a part, need a specific piece of a project rather than a whole design. The picker is a two-step overlay above the builder: choose a project first, then a part inside it, a page, a frame, or a slide, with a live preview thumbnail per project. Once picked, an Open in editor link jumps straight to that exact part.

Per-node error handling

Every node's inspector has two tabs: Parameters, the fields covered above, and Settings, which only shows options for action-kind nodes (triggers and logic nodes have nothing to configure here, since they have no side effect to retry):

SettingDoes
On errorContinue swallows the failure and moves on, Stop the run fails the whole run, Route to an error output adds a second, red "Hata" connector out of the node so you can wire a dedicated failure path
Retry (0-5)Re-attempts the same step this many times before falling through to the On error behavior
Wait (ms)How long to pause between retry attempts
NoteA free-text note on the node, for your own reference; it has no effect on execution

A node left on the default Continue just logs an error step and moves the run forward as if nothing happened, so an unreachable webhook or a bounced email does not by itself stop the rest of the graph.

The Settings view

The icon rail's Settings view holds options for the whole automation, saved with the draft:

GroupSettingDoes
ExecutionConcurrencyFree (many runs at once), Single at a time, Skip if busy, or Queue up to a cap
ExecutionMax concurrentThe queue's cap, only shown in Queue mode
ExecutionMax run durationA run older than this many seconds is auto-failed, even mid-delay
ExecutionPriorityHigher-priority automations' runs are advanced first when the engine has a backlog
ErrorDefault on-error behaviorContinue or Stop, used by any node that has not set its own On error
ErrorError notificationsIn-app, email, and/or Slack, sent when a run fails
ErrorError automationAnother automation to start (fire-and-forget) whenever this one fails
ErrorCircuit breakerAuto-pauses the automation after this many runs fail back to back
SchedulingQuiet hoursA start/end time window (in the automation's timezone) during which triggers are deferred rather than fired
SchedulingDebounceA minimum gap enforced between fires, on top of any debounce set on the trigger node itself
Data & retentionSave execution dataAll step logs, errors only, or none, a privacy/storage trade-off
Data & retentionRun history retentionFinished runs older than this many days are deleted automatically; empty keeps everything

None of this is checked by Validate, only the graph itself is; a nonsensical setting (like a Queue cap of 0) simply behaves conservatively rather than blocking Activate.

Toolbar controls

ControlDoes
ExitCloses the builder and returns to the overview.
Name + status textShows the automation's name and whether it is saved, saving, or failed to save.
Undo / RedoSteps back and forward through your edits to the graph.
ValidateChecks the graph and lists errors and warnings inline, under the toolbar.
Status pillDraft, Active, Paused, or Error, at a glance.
TestSaves, then runs the graph once immediately. See Running and monitoring.
Activate / PausePublishes and goes live, or stops listening without losing the draft.

Keyboard shortcuts

ShortcutAction
Delete / BackspaceDelete the selected node (and its connected edges)
Ctrl/Cmd + ZUndo
Ctrl/Cmd + Shift + Z (or Ctrl+Y)Redo
Ctrl/Cmd + C / VCopy and paste the selected node
Ctrl/Cmd + DDuplicate the selected node

Dragged nodes snap to a grid, and dragging on empty canvas box-selects multiple nodes at once.

Step by step

These build complete, real automations from nodes that run for real today (see Nodes for which ones do). Anchors below are linked from other pages.

Walkthrough: a scheduled AI digest, by email

  1. Drag a Scheduled trigger onto the canvas (Triggers tab, Zaman group). Open its inspector and set Frequency: pick Weekly for a fixed day, Interval plus an "Every (minutes)" value for a tight cadence, or Cron with a raw cron expression and a timezone for exact control (see Triggers).
  2. Drag a Generate copy node from Actions > AI and connect the trigger's connector to it. Open its inspector and write a prompt, for example "Write 3 short social post ideas for this week, one line each." This step runs through whatever AI provider key you've connected under Settings > AI; without one, it logs a skipped step instead of failing the run.
  3. Drag a Send email node from Actions > Notification and connect Generate copy to it. Set To to your address, Subject to something like "This week's post ideas," and Body to {{ context.__aiText }} so it carries the AI step's output through.
  4. Click Validate, fix anything it flags (a common one: To or Subject left blank), then click Test. Open the Activity view and confirm the AI step produced text and the email step shows ok (or a clear skipped reason if no SMTP connection or AI key is configured yet).
  5. Click Activate. It now runs itself on the schedule you configured; you do not need to keep the app open.

Walkthrough: webhook intake with an AI reply

  1. Drag an Incoming webhook trigger onto the canvas. Its inbound URL is built from the automation's own id (/api/workflow/hook/<automation id>); there is no copy-URL button in the builder yet, so find the id from the network requests the page already makes (for example the browser's dev tools while the builder is open) rather than expecting it printed on the node. Optionally set an HMAC secret so only requests carrying a valid signature are accepted.
  2. Point an external form tool, CRM, or chat widget at that URL as its webhook target, with a JSON body such as { "email": "...", "message": "..." }.
  3. Drag a Set a variable node after the trigger to normalize a field you will reuse, for example key customerEmail, value {{ context.email }}.
  4. Drag a Generate copy node after it with a prompt like Write a short, friendly reply to: {{ context.message }}.
  5. Drag a Slack / Discord node, paste your channel's incoming webhook URL, and set the message to New submission from {{ context.customerEmail }}: {{ context.__aiText }}.
  6. Validate, then Test with a sample JSON body (any HTTP client, or your tool's own "send test event" button works, since it just needs to POST the webhook URL). Check Activity, then Activate.

Walkthrough: branch on a condition after a save

  1. Start from a Design updated trigger; of the design/workspace event triggers, this is the one the app fires automatically today, whenever a design is saved (see Triggers).
  2. Drag on Pick a part so later steps have something concrete to act on; open the part picker and choose a project, then a page, frame, or slide inside it.
  3. Drag on a Condition (yes/no) node. Its inspector builds a rule (a field, a comparison such as equals or contains, and a value) rather than a raw typed expression; either side of the rule can pull from the run's context.
  4. On the yes branch, add an In-app notification telling your team the part is ready for review. On the no branch, add a Write an audit entry step so the pass-through case is still recorded.
  5. Validate, then Test; Test runs immediately regardless of the trigger, so you can try both branches without actually saving a design. Confirm both paths show up correctly in Activity, then Activate.

Troubleshooting

  • A node's Settings tab looks empty. Only action-kind nodes have an On error / Retry / Note tab. Triggers and logic nodes (Condition, Filter, Delay, Set a variable, and similar) have no side effect to retry, so their Settings tab has nothing but the Note field.
  • I set "Route to an error output" but there's nowhere to connect the failure path. A second, red connector only appears on the node itself after you flip that setting; look at the bottom of the node again; the new "Hata" handle sits next to the normal output.
  • Copy/paste (Ctrl/Cmd+C/V) seems to have done nothing. The pasted copy lands a little offset from the original, at a small random jitter, not exactly on top of it; look just below and to the right of the source node.
  • Validate is clean but Activate still fails. Activate re-validates and publishes in one step; if a field depends on live data (like a folder that has since been deleted), it can fail at that moment even though Validate looked fine a minute earlier. Re-open the failing node's inspector and re-pick the value.
  • A required field shows an error I can't find. Validate's message names the node and field, but the inspector only shows fields whose displayIf condition is currently met; a field can be required yet hidden if a different field controls its visibility (for example the HTTP node's body only appears once a body-carrying method is chosen).

Tips

Validate before you activate

Validation catches an empty graph, more than one trigger, a required field left blank, a dangling connection, or an unwired branch, before you try to go live.

Changes save on their own

Edits autosave a moment after you stop typing or moving something; the toolbar's status text confirms it. There is no separate save button.

Deleting a node removes its edges

There is no separate step to clean up connections; deleting a node takes any edges touching it with it.