The description, rendered
This renders the markdown inside the description, so it isn’t quite the description itself.
The raw view and the plain text are the bytes as they were sent.
Use this tool only when you are blocked on a decision that is genuinely the user's to make: one you cannot resolve from the request, the code, or sensible defaults.
Usage notes:
- Users will always be able to select "Other" to provide custom text input
- Use multiSelect: true to allow multiple answers to be selected for a question
- If you recommend a specific option, make that the first option in the list and add "(Recommended)" at the end of the label
Plan mode note: To switch into plan mode, use EnterPlanMode (not this tool). Once in plan mode, use this tool to clarify requirements or choose between approaches BEFORE finalizing your plan. Do NOT use this tool to ask "Is my plan ready?", "Should I proceed?", or otherwise reference "the plan" in questions — the user cannot see the plan until you call ExitPlanMode for approval.
Preview feature:
Use the optional preview field on options when presenting concrete artifacts that users need to visually compare:
- ASCII mockups of UI layouts or components
- Code snippets showing different implementations
- Diagram variations
- Configuration examples
Preview content is rendered as markdown in a monospace box. Multi-line text with newlines is supported. When any option has a preview, the UI switches to a side-by-side layout with a vertical option list on the left and preview on the right. Do not use previews for simple preference questions where labels and descriptions suffice. Note: previews are only supported for single-select questions (not multiSelect).
What it accepts
4 parameters
The JSON parameter schema sent beside this description, 3,713 characters of it. Name, type, then whether the client marked it required.
annotations
object
optional
Optional per-question annotations from the user (e.g., notes on preview selections). Keyed by question text.
answers
object
optional
User answers collected by the permission component
metadata
object
optional
Optional metadata for tracking and analytics purposes. Not displayed to user.
questions
object[]
required
Questions to ask the user (1-4 questions)
sha256 c85672df4104 · the schema as the client sent it:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"annotations": {
"additionalProperties": {
"additionalProperties": false,
"properties": {
"notes": {
"description": "Free-text notes the user added to their selection.",
"type": "string"
},
"preview": {
"description": "The preview content of the selected option, if the question used previews.",
"type": "string"
}
},
"type": "object"
},
"description": "Optional per-question annotations from the user (e.g., notes on preview selections). Keyed by question text.",
"propertyNames": {
"type": "string"
},
"type": "object"
},
"answers": {
"additionalProperties": {
"type": "string"
},
"description": "User answers collected by the permission component",
"propertyNames": {
"type": "string"
},
"type": "object"
},
"metadata": {
"additionalProperties": false,
"description": "Optional metadata for tracking and analytics purposes. Not displayed to user.",
"properties": {
"source": {
"description": "Optional identifier for the source of this question (e.g., \"remember\" for /remember command). Used for analytics tracking.",
"type": "string"
}
},
"type": "object"
},
"questions": {
"description": "Questions to ask the user (1-4 questions)",
"items": {
"additionalProperties": false,
"properties": {
"header": {
"description": "Very short label displayed as a chip/tag (max 12 chars). Examples: \"Auth method\", \"Library\", \"Approach\".",
"type": "string"
},
"multiSelect": {
"default": false,
"description": "Set to true to allow the user to select multiple options instead of just one. Use when choices are not mutually exclusive.",
"type": "boolean"
},
"options": {
"description": "The available choices for this question. Must have 2-4 options. Each option should be a distinct, mutually exclusive choice (unless multiSelect is enabled). There should be no 'Other' option, that will be provided automatically.",
"items": {
"additionalProperties": false,
"properties": {
"description": {
"description": "Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.",
"type": "string"
},
"label": {
"description": "The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.",
"type": "string"
},
"preview": {
"description": "Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.",
"type": "string"
}
},
"required": [
"label",
"description"
],
"type": "object"
},
"maxItems": 4,
"minItems": 2,
"type": "array"
},
"question": {
"description": "The complete question to ask the user. Should be clear, specific, and end with a question mark. Example: \"Which library should we use for date formatting?\" If multiSelect is true, phrase it accordingly, e.g. \"Which features do you want to enable?\"",
"type": "string"
}
},
"required": [
"question",
"header",
"options",
"multiSelect"
],
"type": "object"
},
"maxItems": 4,
"minItems": 1,
"type": "array"
}
},
"required": [
"questions"
],
"type": "object"
}