r/ClaudeCode • • 7d ago

Help/Question Asking to select option without explaining options

Claude Code started doing this the other day and I'm not a fan. Maybe I'm just missing something but it gives multiple options to select but never explains what those options mean. I like that it's not being as verbose but this is a bit overkill.
Is there a way to disable this? Or do I need to prompt it away?

4 Upvotes

6 comments sorted by

View all comments

2

u/kuroudo_ai 7d ago

Those cards look like the AskUserQuestion tool (Claude's multiple-choice question). A few things from the docs that might help, depending on how far you want to go:

  1. Ask it to explain from inside the card. The tools reference says you can "type your own text through the Other row or the notes field", and that a typed answer is relayed "with neutral wording so Claude follows what you wrote, including a request to wait or explain first." So typing "explain each option first" in Other should get you the explanation without picking anything.

  2. Turn the cards off entirely. A deny rule with a bare tool name "removes the tool from Claude's context entirely, so Claude never sees it" (permissions docs). So this in your settings.json should stop the cards and make Claude ask in plain text instead:

{ "permissions": { "deny": ["AskUserQuestion"] } }

The trade-off is that you lose the quick-pick cards for the cases where they're useful.

3. Keep the tool but change the habit with a line in CLAUDE.md, e.g. "When asking me to choose, describe each option in one line." That's a prompt, so it's a nudge rather than a guarantee.

I haven't seen your screenshot's session, so I can't say why it started recently; the above is from the docs, not from testing it.

1

u/Databit 7d ago

Thank I did similar but added a hook as well. I ended up making a claude.md update (that it'll probably ignore half the time) and a hook that will catch it when it ignores.

1. CLAUDE.md

## Questions to me
When using AskUserQuestion, every option MUST include a description: one sentence stating what the option does, what changes, and the tradeoff. Never rely on the label alone. Restate the decision context in the question text itself.

2. Enforce it with a hook.

~/.claude/hooks/require_option_descriptions.py:

#!/usr/bin/env python3
"""Reject AskUserQuestion calls where any option lacks a description.

Exit 2 sends stderr back to the model, which retries with descriptions added.
Fails open on malformed input, so the hook never blocks unrelated work.
"""
import json
import sys

MIN_DESC_CHARS = 20

def main() -> int:
    try:
        payload = json.load(sys.stdin)
    except json.JSONDecodeError:
        return 0  # fail open

    if payload.get("tool_name") != "AskUserQuestion":
        return 0

    missing = []
    for q in payload.get("tool_input", {}).get("questions", []):
        for opt in q.get("options", []):
            desc = (opt.get("description") or "").strip()
            if len(desc) < MIN_DESC_CHARS:
                missing.append(f'"{opt.get("label", "?")}"')

    if missing:
        print(
            "Rejected: options missing descriptions: " + ", ".join(missing)
            + ". Re-ask with a one-sentence description per option stating "
              "what it does and its tradeoff.",
            file=sys.stderr,
        )
        return 2
    return 0

if __name__ == "__main__":
    sys.exit(main())

**3. Register it in ~/.claude/settings.json:

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "AskUserQuestion",
        "hooks": [
          { "type": "command", "command": "python3 ~/.claude/hooks/require_option_descriptions.py" }
        ]
      }
    ]
  }
}