form
Mid-flow wait for structured form fields (desktop UI or CLI --forms)
Pauses the run until a workspace form is filled and submitted. Output is the submitted field object ({{nodes.<id>.fieldId}}). A flow may include multiple form nodes (e.g. search → pick → confirm).
Unlike input, forms are interactive mid-flow wait points. Field defaults and select options can resolve from prior node outputs.
Author forms under forms/*.form.json — see Workspace files.
Data
| Field | Type | Description |
|---|---|---|
formId | string | Workspace form id (forms/{formId}.form.json) |
label | string | Optional UI label |
bindings | object | Optional map of form input id → value/template (resolved before field defaults; available as {{form.*}} inside the form) |
value | object | Optional draft / prefill overrides (field id → value; strings may be templates) |
Reusable inputs and bindings
Forms may declare inputs (reusable parameters) separate from visible fields. Each flow’s form node binds those inputs via bindings so the same form file works in different flows:
{
"id": "pickForm",
"type": "form",
"data": {
"formId": "pick-product",
"bindings": {
"products": "{{nodes.search.body.products}}"
}
}
}
Inside the form definition, reference bound values with {{form.products}} in field defaults or optionsFrom.items. After submit, read answers with {{nodes.pickForm.productId}}.
Desktop vs CLI
| Host | Behavior |
|---|---|
| Desktop | Shows resolved fields; Submit resumes; Stop cancels |
| CLI | --forms <file.json> map keyed by form node id; missing key fails the node |
quester run search-pick-cart --workspace . --env local \
--forms ./forms/search-pick-cart.forms.json
Related
- Workspace forms
- input — initial run payload (not mid-flow wait)
- Sample:
examples/sample-workspace/flows/search-pick-cart.flow.json - Full tour:
examples/sample-workspace/flows/forms-showcase.flow.json(all field types + multi-form await)