Asking User Questions
SkillDev toolsUse when composing an ask_user_question round inside a workflow, or when a workflow skill names it at a question step. Shared norms for the tool — not a workflow, nothing to execute.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Asking User Questions skill
What this skill tells your AI
The instructions your AI receives, as published by jetbrains/thinkrail in packages/pi-thinkrail-workflow/skills/asking-user-questions/SKILL.md and read by ahel’s review.
The workflow family's shared norms for ask_user_question: how to compose rounds, shape options, and
degrade when answers don't come. Process skills name this concept at the steps that ask; when to ask
— and where the answers get recorded — stays with the referencing skill.
Rounds, not chat turns
- One call = one round: up to 4 questions, 2–4 options each. Group everything the current step needs into a single round — never chain a second call straight after for a trivial follow-up.
- The call ends your turn. The questionnaire is shown and your run stops; the answers arrive as the next user message (a structured "User has answered your questions:" message). Don't keep working on the blocked step after calling, and don't assume an answer until it arrives — whether that is seconds later or days later.
- If the user replies with a free-form message instead of answering the card, that reply supersedes the round — treat it as their answer, and re-ask only what is still genuinely undecided.
- Resolve the round, act on what you learned, and open a new round only when the answers raised a genuinely new question.
Options
- Recommended option first, label suffixed "(Recommended)", plus a one-line
recommendedReasonsaying why you recommend it over the alternatives (shown inline under the option as aWhy:line). - Every option: a concise label (1–5 words, ≤ 60 chars) + a description carrying the trade-off or consequence of choosing it. Tailor options to the work at hand — never generic placeholders.
- Options must be decidable by the asked user: frame them as observable behavior or outcomes ("collapsing a project stays collapsed after a rename"), never as implementation mechanics ("semantic guard", "activation ref"). If candidate options differ only internally — identical observable behavior — don't ask: decide yourself and record the reasoning in the workflow's artifact.
- Never author your own "Other", free-text, or escape options — the tool adds a free-text row to
every question and an always-available Skip, and reserved labels are rejected. This holds under
multiSelecttoo: the free-text row stays and is additive — a typed answer arrives alongside the checked options, it does not replace them. multiSelect: truewhen several answers are valid at once (feature checklists); single-select when confirming something or choosing one path.options[].preview(markdown) when a concrete artifact — code, a config, a mockup — is clearer shown than described. Single-select only.headeris a short chip, ≤ 16 characters.
Confirming an inference
When you have inferred something and need a yes/adjust rather than an open answer: the inferred statement is the question text, with "Looks right" as the first option (description: "accurate as written") and a genuine rejection option second (e.g. "Off base — ask me directly"). Edits arrive through the tool's automatic free-text row — do not author an edit option. Read the response as:
- "Looks right" → the inference holds; continue unchanged.
- Free-text tweak (one fact changes) → update that field only; don't re-derive anything else.
- Substantial rewrite → re-derive every inference that came from that statement before continuing.
- Rejection → discard the inference entirely and ask an open-ended question instead.
Degradation
- Skipped, declined, or unanswered questions are not blockers: proceed on best-guess assumptions, explicitly recorded as unconfirmed in the workflow's artifact (the referencing skill says where).
- If the host reports no interactive UI (
ask_user_questionreturns "not available"), state your assumptions the same way instead of blocking. - "I don't know / help me understand" is a mis-framing signal, not a missing-knowledge one: re-explain from user-visible behavior in plain language, then re-ask with behavior-framed options — don't repeat the same technical options with more detail.
Signals
- GitHub stars
- 459
- Forks
- 36
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
asking-user-questions- Source
- github.com/jetbrains/thinkrail