[FEATURE] Interactive option selection in UserPromptSubmit hooks
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
UserPromptSubmit hooks can only block (with a reason string) or pass through. When a hook wants to offer the user a choice — e.g., "use this skill" vs "continue as-is" — the only pattern is to block, show a text message, and ask the user to resubmit their prompt. This is confusing: users must re-type/re-send the same prompt to skip, and there's no visual affordance that a choice is being offered.
The alternative (additionalContext without blocking) removes user control — the suggestion is injected silently and the user can't opt out.
Proposed Solution
Allow hooks to return an options array. Claude Code renders them as an interactive menu (arrow keys + Enter):
{
"decision": "choose",
"reason": "A skill may help with this task:",
"options": [
{ "label": "/brainstorming — Explore ideas before implementation", "additionalContext": "User chose /brainstorming" },
{ "label": "Continue as-is" }
]
}
TUI rendering:
⚡ A skill may help with this task:
> /brainstorming — Explore ideas before implementation
Continue as-is
↑↓ to select, Enter to confirm
- Selecting an option with
additionalContext→ injects that context and proceeds - Selecting an option without it → passes through unchanged
Alternative Solutions
Current workaround: Block + passthrough file. The hook blocks with a message ("resubmit to skip"), drops a marker file, and on the next identical prompt the marker is consumed and the hook passes through. Works, but UX reads like a hack — users see "resubmit your prompt as-is" and get confused.
additionalContext only: Doesn't block, but injects skill suggestion into Claude's context. Problem: user can't opt out — Claude will always reference the suggestion.
Priority
Medium - Would be very helpful
Feature Category
Interactive mode (TUI)
Use Case Example
- User types "Let's create a new feature for handling webhooks"
- A
UserPromptSubmithook detects this matches the/brainstormingskill - Instead of blocking with a wall of text, Claude Code shows:
````
⚡ Suggested skill:
> /brainstorming — Explore ideas before implementation
Continue without skill
- User presses ↓ Enter to skip, or Enter to use the skill
- No resubmission needed, no confusion about "1/3" counters
Additional Context
This would make the hook system viable for non-blocking interactive workflows — skill discovery, safety confirmations, workflow branching — without the block-and-resubmit workaround.
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗