Ask a person
Step · Stable
Pause execution and ask a human actor for input. response_type: text (default), int, float, bool, choice, acknowledge, date, time, datetime, image, pdf, file. File types require an on-canvas channel: inline or modal. Set auto_approve to resolve unattended without waiting.
Halts the run and presents a form to the assigned actor. response_type controls the input widget: text (default), int, float, bool, choice, acknowledge, date, time, datetime, image, pdf, file. The temporal types render native pickers and store a canonical ISO string — date → YYYY-MM-DD (date-only), time → HH:MM:SS, datetime → YYYY-MM-DDTHH:MM:SS. File response types (image, pdf, file) require an on-canvas channel (inline or modal). The actor’s answer is exposed as {{
Fire-and-continue (fire_and_continue: true): the ask dispatches its question and the run KEEPS RUNNING instead of pausing. Use this to fan out parallel asks — e.g. ask two managers at the same time, then join their responses at a downstream Checkpoint (Wait with conditions and policy: all). Each parallel ask needs a label; the Checkpoint adds one signal condition per ask with from_step:
When to use
Section titled “When to use”Use whenever a human decision, approval, or data entry must gate the flow — review an extracted field, approve an amount, upload evidence. The actor’s response flows downstream as {{
When not to use
Section titled “When not to use”If no human needs to be in the loop and you just want to delay, use Wait. If you need to pause on multiple independent conditions (not a single question), use Checkpoint. For a fully automated response, set auto_approve: true rather than removing the step.
Inputs
Section titled “Inputs”choice · optional
Who is asked. Options are populated per-tenant from the actor registry (roles and/or specific people) at drawer-open time — this field has no static option list. Pick a role for “whoever holds that role today” or a specific person for a named individual.
Example: Manager
- ✓
Manager— routes to whoever currently holds the Manager role - ✓
jakub@firma.cz— routes to one named actor, regardless of role - ✗
{{ trigger.assignee_email }}— actor is picked from the registry at save time, not templated at run time — collect a free-form recipient with a different step (e.g. Send email) instead
question
Section titled “question”string · required
The prompt shown to the actor. Template refs pull in the specific facts they need to decide — an amount, a name, a document link — so the question is self-contained and does not require the actor to go look anything up.
Example: Approve the {{ trigger.amount }} {{ trigger.currency }} expense from {{ crm_lookup.name }}?
- ✓
Approve the {{ trigger.amount }} EUR expense from {{ crm_lookup.name }}?— self-contained — the actor can decide without extra lookups - ✗
Approve?— no context — the actor has to go find what they are approving; include the concrete details in the question
response_type
Section titled “response_type”choice · optional · one of text, int, float, bool, choice, acknowledge, date, time, datetime, image, pdf, file
Controls the input widget the actor sees and the type of {{
Example: bool
- ✓
bool— a simple yes/no approval gate - ✓
choice— pick-one-of-N — pair with the Choice options field - ✗
image— requires channel: inline or modal — an image upload has no delivery surface over notification/email/whatsapp
options
Section titled “options”list · optional
The pick-list shown when response_type is “choice”; ignored for every other response type. Order is preserved in the UI.
Example: ["Approve", "Reject", "Escalate"]
- ✓
["Approve", "Reject", "Escalate"]— three clear, mutually exclusive choices - ✗
Approve, Reject— must be a JSON list, not a comma-separated string
channel
Section titled “channel”choice · optional · one of inline, modal, notification, email, whatsapp, slack, voice
inline — shown on the run detail page (default). modal — synchronous on-canvas pop-up: the run blocks until the watching user answers; requires a present user (same constraint as inline). notification — delivered via the bell panel (off-canvas, supports fire-and-continue). email / whatsapp / slack — delivered via the named carrier. voice — spoken aloud through a paired Scout device, which listens for the answer and transcribes it (needs a device with speak + listen; response type must be free text, choice, yes/no, or a number).
Example: notification
- ✓
inline— default — the run detail page; needs someone watching the run - ✓
notification— off-canvas via the bell panel; required for fire_and_continue - ✗
modal— combined with fire_and_continue: true this is rejected at save — modal has no off-canvas delivery surface
device_id
Section titled “device_id”choice · optional
Only meaningful when channel is “voice” — hidden otherwise. Options are populated per-tenant from paired Scout devices that hold BOTH speak and listen capabilities.
Example: kitchen-scout-01
- ✓
kitchen-scout-01— a specific paired device, when more than one could answer - ✓ “ — leave empty to auto-select the first capable device
- ✗
front-desk-speaker— a speak-only device (no listen capability) cannot be picked here — only devices with both capabilities are offered
timeout_seconds
Section titled “timeout_seconds”int · optional
How long to wait for the actor before giving up. Leave unset for no timeout (the run waits indefinitely). On timeout the step fails rather than silently proceeding — branch on failure if you need a default path.
Example: 86400
- ✓
86400— 24 hours — a same-day approval window - ✓
3600— 1 hour — an urgent, time-sensitive ask - ✗
30— unrealistically short for a human response — almost guaranteed to time out before anyone sees the notification
auto_approve
Section titled “auto_approve”bool · optional
When true the step never waits — it resolves immediately using auto_approve_value (or a per-type default). Use for unattended test runs of a flow that normally has a human in the loop; leave false for real approvals.
Example: false
- ✓
false— default — waits for a real actor response - ✓
true— unattended test run, or a trigger with no human present - ✗
"true"— must be a real boolean, not the string “true”
auto_approve_value
Section titled “auto_approve_value”string · optional
The value recorded as the response when auto_approve is on. Must match response_type — e.g. one of the Choice options for response_type: choice, or “Yes”/“No” for bool. Ignored when auto_approve is false.
Example: Approve
- ✓
Approve— matches an option declared in Choice options - ✓
Yes— the default for response_type: bool - ✗
Maybe— not one of the declared Choice options — must match exactly
fire_and_continue
Section titled “fire_and_continue”bool · optional
Dispatches the question and lets the run continue immediately instead of pausing. Requires a label on this step, a non-inline/modal channel, and a downstream Checkpoint reading it via from_step — the save gate blocks the flow otherwise.
Example: true
- ✓
true— fan out to two managers in parallel, joined at a downstream Checkpoint - ✗
true— set on a step with channel: inline — rejected at save; inline has no off-canvas delivery surface for a fire-and-continue ask
Outputs
Section titled “Outputs”Auto-generated from the skill registry (load_skills()). Do not edit by hand.