Mid-Flow Form

Action list.bullet.rectangle

action.form — appears as Form in the Actions palette

Pauses a running flow to collect input, then continues with the submission merged over the incoming payload. It presents the same floating glass panel as the Form trigger — always on top, follows you to the active Space, works over full-screen apps, resizable in height, sized to its content — and shares the same field editor, field types, validation, and payload contract. Only the branch that reached this node waits; the rest of the flow is untouched.

Its superpower over the trigger: {{…}} interpolates into the form itself. The title, description, field labels, placeholders, and defaults all render against the incoming payload — a form titled Triaging {{fileName}} shows the real filename in the panel, and a field can arrive prefilled from an upstream value.

This is the multi-field successor to User Input: same pause-and-ask shape, but with typed fields, validation, images, and Destination routing instead of a single text box.

Ports

DirectionNameData TypeDescription
InputInputAnyIncoming payload — interpolated into the form's title, description, labels, placeholders, and defaults
OutputOutputAnyThe incoming payload with the submission merged over it — upstream keys flow through; a field with the same name as an upstream key wins

Configuration

FieldTypeDefaultDescription
FieldsField EditorThe form's field list — reorderable rows, per-type extras, validation. Same editor and field types as the Form trigger.
Form TitleTextFormPanel title. Supports {{var}} against the incoming payload.
DescriptionText AreaOptional text under the title. Supports {{var}}.
Submit Button LabelTextSubmitLabel on the confirm button.
Remember ValuesDropdownNeverNever / For This Session / Forever — prefills the next presentation from the last submission; it never skips the form. Session memory clears when the flow disarms. Destination picks are never prefilled stale.
Preview Form…ButtonPresents the real panel in dry-run mode (Submit discards).
Custom ArgumentsKey-ValueExtra key/value pairs merged under the form's keys.

Output Variables

The submission contract is identical to the Form trigger's — here it is merged over the incoming payload, so everything upstream still flows through underneath.

VariableTypeDescription
formJSONAll fields as a real nested object — {{form.fieldName}}
<fieldName>TypedOne flat key per field: number as a real number, toggle as true/false, date as ISO 8601, file/image as a bare POSIX path, a Directory pick as the chosen folder's path, Multiple Images as a real array of paths, a Destination pick as a {provider, account, teamId, teamLabel, projectId?, projectLabel?} object, unfilled optional as null (key present)
formTitleStringThe form's (interpolated) title
timestampStringISO 8601 instant of the submission
filePathStringThe first file/image/directory field's path (first element for Multiple Images); absent when no file field exists

Field names may not use the reserved names form, formTitle, timestamp, or filePath — the editor rejects them inline. And note: a form's per-field {{…}} entries appear in downstream nodes' variable pickers after the first run (the picker learns keys from real payloads); until then, type {{fieldName}} by hand and it resolves fine.

Cancellation & Rapid Fires

Cancel cancels the run. Esc, the Cancel button, or the red close button cancel the run cleanly — it is a cancellation, not a failure, so a wired Failure outlet does not receive it. Stopping the flow or quitting the app closes any open form and cancels the same way.

Rapid duplicate fires don't stack panels. If the same node fires again within a few seconds carrying the same payload — an echoing file event, say — the node reuses the previous submission instead of presenting a second panel.

Example

Annotate file changes as they happen: the form's title renders as “Describe what changed in report.pdf”, and the note lands in the log with the file's own payload keys intact underneath.