[FEATURE] Interactive option selection in UserPromptSubmit hooks

Resolved 💬 3 comments Opened Mar 20, 2026 by Jamil-Najafov Closed Mar 24, 2026

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

  1. User types "Let's create a new feature for handling webhooks"
  2. A UserPromptSubmit hook detects this matches the /brainstorming skill
  3. Instead of blocking with a wall of text, Claude Code shows:

``
⚡ Suggested skill:
> /brainstorming — Explore ideas before implementation
Continue without skill
``

  1. User presses ↓ Enter to skip, or Enter to use the skill
  2. 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.

View original on GitHub ↗

This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗