mirror of
https://github.com/deepseek-ai/deepseek-harness
synced 2026-08-15 21:04:50 +00:00
@deepseek-ai/dsh-tool-ask-user
Model-facing ask_user_question tool over ctx.userInteraction. It lets the model ask the human a concise question when it needs confirmation, a choice, or missing information before continuing.
Tool
ask_user_question accepts:
questions— required non-empty array of question objects.id— required stable id on each question, echoed in the answer.question— required question text for each question.header— optional short heading.options— optional choices withlabelanddescription. If recommending a choice, put it first and append(Recommended)to that label.multi_select— whether that question may return more than one selected option.
The tool calls ctx.userInteraction.ask() and returns JSON text shaped as { "answers": [{ "id": "...", "selected": ["..."], "custom": "..." }] }. selected contains option labels; custom is present only for a free-form answer and overrides selected choices.
Role
This is the consumer package for the user-interaction seam. It does not render UI and does not know how input is collected; it only translates model arguments into AskUserQuestionRequest and returns the human answer to the agent loop.
Model Experience
| Context surface | What the model sees | Token effect |
|---|---|---|
| Tool schema | The model sees ask_user_question with question ids, prompts, headings, options, and multi-select flags. |
Fixed schema cost on every request where the tool is visible. |
| Tool-call history and result | The model's full questions remain in the assistant tool-call arguments. After the human answers, the next step sees JSON containing selected labels and optional custom text. UI interaction while the call is pending is not model context. | Arguments and answer JSON are data-dependent retained tokens; there is no token cost while waiting for the human. |
Known Limitations and Deferred Work
- A pending question blocks the tool call until the human answers — the tool declares no
timeout-policybudget; cancellation rides the turn'sexec.signalonly. - Answers return as JSON text — the seam's structured
AskUserQuestionAnsweris serialized into the tool result rather than carried as typed content blocks.