[FEATURE] Interactive UI for "AskUserQuestion" in VS Code Extension (Similar to Cursor Plan Mode)
Preflight Checklist
- [x] I have searched existing requests and this feature hasn't been requested yet
- [x] This is a single feature request (not multiple features)
Problem Statement
When using Plan Mode in the Claude Code VS Code extension, the agent often needs to clarify ambiguity before generating a plan (e.g., asking about architectural choices, file locations, or specific feature requirements).
Currently, answering these questions involves reading a text block and typing a response back into the chat interface (e.g., typing "Option A" or "Use the src/components folder"). This context switching from "reviewing" to "typing" slows down the planning phase and feels cumbersome compared to a native IDE experience. The friction of typing answers reduces the speed at which a user can steer the agent toward the correct solution.
Proposed Solution
I propose upgrading the UI rendering for the AskUserQuestion tool within the VS Code extension to support interactive, mouse-clickable elements, similar to Cursor's "Improved Plan Mode."
When Claude triggers a clarifying question during planning:
- Render Native UI Controls: Instead of plain text, display specific questions as a structured UI card within the chat sidebar.
- Radio Buttons/Checkboxes: Use radio buttons for single-choice questions (e.g., "Which framework?") and checkboxes for multi-select (e.g., "Which files should be refactored?").
- One-Click Submission: Users should be able to click their choice and hit a "Continue" or "Confirm" button without touching the keyboard.
- Auto-Skip: Include a "Skip" or "Default" button if the user wants Claude to make the best guess.
This utilizes the existing AskUserQuestion tool logic but creates a specific frontend renderer for it in the VS Code extension.
Alternative Solutions
- Status Quo (Text Chat): Continuing to type "Option 1" or copying/pasting preferences. This works but is slower and error-prone.
- Terminal-style Selection: Rendering an ANSI-style arrow-key selection menu. This works in the CLI but feels unnatural and clunky inside the VS Code sidebar GUI.
- Slash Commands: Using specific slash commands to answer, which adds cognitive load to remember syntax.
Priority
High - Significant impact on productivity
Feature Category
CLI commands and flags
Use Case Example
Scenario: Adding a new "Playground" page to a web app.
- Prompt: I type "Add an interactive model playground page" into the Claude Code extension.
- Plan Mode Analysis: Claude enters Plan Mode and scans the codebase. It realizes there are two ways to implement this based on existing patterns.
- Clarification Trigger: Claude pauses generation to ask clarifying questions.
- The Experience:
- A UI card appears in the chat stream titled "Clarifying Questions".
- Question 1: "Where should the interactive model playground be added?"
- [ ] On the models page (
/docs/models) as an embedded component - [x] As a separate dedicated page (
/docs/models/playground) - Question 2: "What features should the playground include?"
- ( ) Basic: Model selector, prompt input
- (x) Advanced: Model selector, prompt input, token usage, context support
- Action: I click the two options using my mouse and click "Continue."
- Result: Claude immediately generates a plan based on those specific constraints without me typing a sentence.
Additional Context
Visual Reference:
This feature is heavily inspired by the interaction model seen in Cursor's 2.1 update. See the workflow below where the user clicks options rather than typing:
(Mockup description based on Cursor UI)
- User interface shows a list of questions.
- Options A, B, C are clickable rows.
- Selected rows are highlighted.
- A primary action button at the bottom allows the user to submit choices.
Technical Considerations:
- This relies on the backend
AskUserQuestiontool correctly identifying the format of the options. - The VS Code extension webview would need to parse this tool call and render React/HTML components instead of a raw text block.
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗