Form

Trigger list.bullet.rectangle

trigger.form

Manual trigger that presents a multi-field form when you run the flow. Press Run — from the canvas or the menu bar — and a floating glass panel appears; Submit seeds the run with every field as a typed payload value, Cancel means the run never starts.

The panel is an always-on-top window: it follows you to the active Space, works over full-screen apps, and is resizable in height. It sizes itself to its content and grows when the content grows — image thumbnails, for example. Esc, the Cancel button, and the red close button all cancel it.

Like the Input trigger, a form flow has no watcher to arm, so it is always active — its status dot reflects the health of its recent runs rather than an on/off state, and the Enabled switch is shown turned on but inert.

Summon it from anywhere: pair a Keyboard Shortcut trigger with a Mid-Flow Form action and the form pops up on a global hotkey, no canvas visit required.

Fields

Fields are defined in the inspector's Fields editor: reorderable rows (drag handle) with per-type extras — placeholder, default value, help text, options, validation. The Preview Form… button presents the real panel in dry-run mode (Submit discards). Field names are auto-slugged from their labels, editable, and must be unique; the reserved names form, formTitle, timestamp, and filePath are rejected inline. The AI Flow Builder can author fields conversationally (“add title, description, and a priority dropdown”).

Validation runs live in the panel: required fields gate the Submit button until valid, numbers must parse, email and phone formats are checked, a Select value must be one of its options, and optional min/max, regex, and max-length rules apply per field.

Field type Emits Example value
Text / Text Area String "Crash when exporting a PDF"
Number Number (a real number, not a string) 42
Email / Phone String (format-validated) "greg@example.com"
Date String (ISO 8601) "2026-07-11T09:30:00Z"
Select String (one of the configured options) "High"
Toggle Boolean true
File / Image String (bare POSIX path, no file://) "/Users/greg/Desktop/crash.png"
Directory String (bare POSIX path to the chosen folder — pick or drop one) "/Users/greg/Documents/Reports"
Multiple Images Array of paths (a real array — drop, pick, or paste several at once) ["/…/before.png", "/…/after.png"]
Destination (Linear) Object — see Routing with a Destination field below {"provider": "linear", "teamLabel": "Watchflows", …}
Any unfilled optional field null — the key is still present null

A Destination (Linear) field is a dropdown whose choices are live entities from a connected integration — Linear Teams or Linear Projects — grouped under workspace/team headers and served instantly from cache. It requires a connected Linear account (see Integrations).

Ports

Direction Name Data Type Description
Outlet Output Any The submitted form as the run's seed payload

Configuration

Field Type Default Description
Fields Field Editor The form's field list: reorderable rows with per-type extras and validation rules
Form Title Text Form Title shown at the top of the panel; also emitted as formTitle
Description Text Area Optional text shown under the title in the panel
Submit Button Label Text Submit Label on the confirm button (“File It”, “Send”, …)
Preview Form… Button Presents the real panel in dry-run mode — Submit discards, nothing runs
Custom Arguments Key-Value Extra key/value pairs merged under the form's keys (a field with the same name wins)

The Submission Payload

Submitting emits every field twice: once inside the nested form object ({{form.severity}}) and once as a flat key under the field's own name ({{severity}}). Both carry the identical typed value from the table above.

Variable Type Description
form JSON All fields as a real nested object — {{form.fieldName}}
<fieldName> Typed One flat key per field, by field name — number as a real number, toggle as true/false, unfilled optional as null (key present)
formTitle String The form's title
timestamp String ISO 8601 instant of the submission
filePath String Bridge convenience: the first file/image/directory field's path (first element for Multiple Images) so file-hungry nodes work unconfigured; absent when no file field exists

One expectation to set: 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.

Routing with a Destination field

A Destination field emits a structured object under its field name:

"destination": {
  "provider": "linear",
  "account": "acme-workspace",
  "teamId": "team_01H…",
  "teamLabel": "Watchflows",
  "projectId": "proj_01H…",
  "projectLabel": "Bug Bash"
}

(projectId/projectLabel appear only when the field's source is Linear Projects.) Downstream Linear nodes can route with {{destination.teamId}} and friends — or, easier, pick “Use the form's pick” in the Linear: Create Issue node's Destination dropdown, which writes those templates for you.

Headless & Agent Runs

The form's schema is the tool's API

Agents and MCP clients can't see a panel — so the form describes itself instead. Every field is advertised to the caller as a named, typed parameter: required fields are flagged, help text and Select options are included, and a Destination field documents its JSON-object shape.

When an agent or MCP client runs the flow, each field resolves in order: the caller-supplied value, else the configured default — and if a required field has neither, the run is refused with a message naming that field. The panel never appears for agent runs, and values flow through the same payload builder, so headless payloads are identical in shape to interactive ones.

Example

A bug-report intake: the form collects a title, a description, a Destination pick, and screenshots; an AI Agent triages the report; Linear: Create Issue files it where the form pointed.

Where Template Resolves to
Issue title {{title}} The form's title field, as typed
Issue description {{result}} The agent's triage write-up
Issue images {{images}} The Multiple Images field — a real array of screenshot paths
Issue destination {{destination.teamId}} Routed from the form's Destination pick (or use “Use the form's pick”)