Skip to content

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: . Requires channel: notification or channel: whatsapp (inline and modal are on-canvas channels with no delivery surface for off-canvas questions). The save gate refuses any fire-and-continue ask that lacks a label, uses channel=inline or channel=modal, or has no downstream Checkpoint reading it. Orthogonal to auto_approve.

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 {{

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.

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

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

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

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

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

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

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

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”

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

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
  • response

Auto-generated from the skill registry (load_skills()). Do not edit by hand.