mcpbeat Sign in

Asking User Questions Agent Skill

Use 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.

1k tokens
context cost
the whole folder, loaded on every use
1
files
instructions only
0
copies elsewhere
how many repositories repackaged it
103
stars on the repo
on the repository, not the skill itself

Install

one command, takes just this skill from the repository
npx skills add https://github.com/JetBrains/thinkrail --skill asking-user-questions

The instruction itself

5 sections, as written by the author

Asking User Questions

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 recommendedReason saying

why you recommend it over the alternatives (shown inline under the option as a Why: 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

multiSelect too: the free-text row stays and is *additive* — a typed answer arrives alongside the

checked options, it does not replace them.

  • multiSelect: true when 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.

  • header is 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_question returns "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.

How to use it

Copy the folder

Take jetbrains/asking-user-questions from the repository into ~/.claude/skills for personal use, or into .claude/skills inside a project.

Check the name does not clash

The agent identifies a skill by the name field in its header. Two skills with the same name cannot sit side by side — one of them will be ignored.