Files
claude-nova/docs/features/questions.md
T
2026-08-11 12:38:02 -03:00

48 lines
1.5 KiB
Markdown

# Questions
**Status:** Implemented · **Code:** `Scripts/permissions.js` (`_askQuestions`,
`_askOne`, `_askMultiple`)
When Claude needs a decision it calls `AskUserQuestion`, which arrives as a
`can_use_tool` request with `requires_user_interaction: true`.
## Input
```jsonc
{"questions":[{
"question":"Do you prefer tabs or spaces?",
"header":"Indentation",
"multiSelect":false,
"options":[{"label":"Tabs","description":"…"},{"label":"Spaces","description":"…"}]
}]}
```
## Answering
The host **rewrites the tool input**; there is no separate answer channel:
```jsonc
{"behavior":"allow",
"updatedInput":{…input, "answers":{"<question text>":"<chosen label>"}}}
```
Keyed by the question's exact text. The CLI feeds it to the tool, which reports
back *"Your questions have been answered: …"*. Verified end to end: answering
`"Tabs"` produced a model reply of "You chose **Tabs**."
Multi-select answers are joined with `, `.
## Presentation
Each question becomes a `showChoicePalette` with `label — description` rows,
asked in sequence.
- **Single select** appends `Other…`, which opens an input panel for free text.
- **Multi select** toggles rows with a `✓` marker and appends
`Done — N selected`; with nothing selected that row is `Other…` instead.
- Dismissing a palette resolves `deny` with "The user dismissed the question
without answering" — matching Claude Code's own Escape behaviour.
Unit-covered: multi-select, free text, dismissal, and several questions in
sequence.