At a glance
- Emits
- form, formTitle, timestamp, filePath, and one flat key per field
- Its edge over the trigger
- The form itself is templated from the incoming payload
Set it up
Build the field list in the inspector — the same editor, field types and validation the Form trigger uses — then title the panel and label the button. The panel is the app's floating glass surface: always on top, follows you to the active Space, works over full-screen apps. Only the branch that reached this node waits.

Inputs
Everything upstream is readable as {{...}} — and not only downstream. The title, description, field labels, placeholders and defaults all render against the incoming payload, so a form titled Triaging {{fileName}} shows the real file name, and a field can arrive already filled in.
Configure
| Field | Default | What it does |
|---|---|---|
| Fields | — | The field list: reorderable rows, per-type extras, validation. |
| Form Title | Form | The panel's title. Supports {{var}}. |
| Description | — | Optional text under the title. Supports {{var}}. |
| Submit Button Label | Submit | What the confirm button says. |
| Remember Values | Never | For This Session or Forever prefills the next presentation from the last submission. It prefills — it never skips the form. |
| Preview Form… | — | Shows the real panel in dry-run mode; Submit discards. |
| Custom Arguments | — | Extra key-value pairs merged in alongside the form's keys. |
Output
The submission is merged over the incoming payload, so everything upstream still flows through underneath.
| Key | Type | Value |
|---|---|---|
form | JSON | Every field as a real nested object — {{form.severity}} |
formTitle | String | The panel's title, after {{...}} |
timestamp | String | ISO 8601 instant of the submission |
filePath | File | The first file, image or folder field's path; absent when there is none or it was left empty |
| one per field | Typed | The same typed value as its form. twin — a number as a real number, a toggle as true or false, a date as ISO 8601, a file as a bare path, an unfilled optional as null with the key present |
Example: annotate a file as it changes
File Changed fires, the title renders as "Describe what changed in report.pdf", and the note lands in the log with the file's own keys still underneath.

Paste this into the Flow Builder to get the same flow:
Watch ~/Documents for changes, show me a form titled "Describe what changed in {{fileName}}" with a note field and a severity dropdown, and append the answer to ~/logs/changes.jsonl.
Good to know
Only form and timestamp are refused as field names. Every stored name is slugged to lowercase, so formTitle and filePath become formtitle and filepath — not envelope keys, and safe to use.
Cancelling cancels the run. Escape, Cancel and the red close button all cancel cleanly, so a wired Failure outlet never receives it. The same node firing again within five seconds on the same payload reuses the previous submission rather than stacking a second panel.
New field names reach the variable picker after the first run. Until then type {{fieldName}} by hand — it resolves fine.