Ask the User a Question
request_inputRegister a question only the user can answer, and keep your place on the task while it is open. Use it ONLY for what is irreversible (money, publishing outward, production, anything legal) or a real fork with no reasonable default — never for 'may I continue?'. Give options whenever the answer is a choice: a question with alternatives gets read, a yes/no gets rubber-stamped. By default the answer is YOURS TO COLLECT: the call returns at once and tells you to put the question to the user the way your own client does it best, then call submit_answer with what they said. If you have no user in front of you, do not invent one — say nothing more and stop: your claim is KEPT, the question waits in their queue, and the answer reaches you at your next start_task or get_my_work. If the user says they answered in the Weft app or asks you to wait while they do, calling this again with the SAME arguments turns it into a wait: each repeat holds ~20 seconds and returns their answer the moment it lands, with fresh credentials to continue — but do not poll on your own initiative. Pass channel:'form' instead to have Weft show a form itself and wait inside this call. Each question spends the user's attention: it counts against the same limit that stops you claiming new work.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Task ID | |
| runId | Yes | From start_task | |
| channel | No | 'ask' (default) — you put the question to the user yourself and call submit_answer. 'form' — Weft shows a form in your client and waits inside this call. | |
| options | No | The alternatives, when there are any. Strongly preferred over yes/no. | |
| urgency | No | Default 'blocking' | |
| question | Yes | What you need to know, in one sentence a person can answer | |
| leaseToken | Yes | From start_task | |
| holdSeconds | No | How long to wait in-call: for channel:'form' before parking (default 120); for a repeated ask-poll per call (default 20, max 30). |