Case
Claude Code が「1. Xする? 2. Yする? 3. …」のように複数の選択肢を並べてきたとき、チャットで 1,2,1 あと2はXで と返すのが面倒。これをブラウザ UI に置き換える Skill
npx -y skills add TeXmeijin/claude-case --skill caseAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 3 stars3 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Opens a browser UI for the user to answer multiple-choice design/policy decisions with recommended defaults, per-question free-text override, and shared notes; returns structured JSON. TRIGGER when about to enumerate '1. X? 2. Y? 3. Z?' style questions in chat, or when presenting 2+ decisions at once, or when a single decision has a clear recommendation worth an explicit ack. トリガー: 「いくつか方針を決めて」「選択肢を整理して」「推奨つきで意思決定したい」「〜にするか〜にするか」。SKIP: a single yes/no confirmation, or a question whose answer is derivable from code/conversation.
SKILL.md
5.0 KB, as published. Nobody here has run it
case
When you need the user to make one or more multiple-choice decisions, use this skill instead of asking via plain-text enumerated prompts. A local web UI opens in the user's browser with:
- A card per option (the recommended one carries a small
recommendedbadge) - A one-line reason shown under each question title
- An optional "Free word" input per question (caveats, counter-proposals)
- A shared "Notes" field for overall context
- Keyboard shortcuts:
↑↓/j kto move,1–9to pick,Ato accept all recommendations,⌘↩to submit
The process mirrors crit: launch in the background, the user submits, control returns to you with a JSON result path.
When to use
- You are about to enumerate 2+ decisions in chat (
"1. Should we X? 2. Should we Y? ..."). - You have a single decision with a clear recommendation, and an explicit ack from the user is worth the round-trip.
- A decision benefits from the user adding a caveat ("yes, but only if …") that is easier to type than to squeeze into a chat reply.
Do not use for:
- Simple yes/no confirmations mid-task.
- Questions whose answer you can derive from the code or recent conversation.
Step 1: Build the input JSON
Write a JSON file at a temp path (e.g. /tmp/decide-input.json) matching this schema:
{
"title": "short header shown in the browser tab and page heading",
"tag": "optional category label (e.g. 'design review')",
"intro": "optional multi-line preamble shown above the questions",
"questions": [
{
"id": "stable-id",
"title": "The actual question",
"reason": "One-line recommendation rationale, shown under the title",
"options": [
{ "label": "Short choice label", "note": "sub-line detail", "recommended": true },
{ "label": "Alternative", "note": "tradeoff" }
],
"allowFreeText": true
}
]
}
Authoring rules:
- Keep
titleterse. Put rationale intoreason, nottitle. - Mark exactly one option per question as
recommended: true(your best guess). options[].noteis optional but strongly recommended — it is what makes the cards scannable.- Set
allowFreeText: falseonly for strictly binary, non-qualifiable choices. - The UI is English-chrome only. Question text may be in any language; the user will see it verbatim.
Step 2: Launch the decide server in the background
Run the bundled decide.py in the background via run_in_background: true:
python3 ~/.claude/skills/case/decide.py /tmp/decide-input.json --output /tmp/decide-result.json
This:
- Starts a local HTTP server on a random free port.
- Opens the user's default browser to the UI.
- Blocks until the user clicks Submit.
Tell the user: "Opened decide in your browser. Pick options, optionally add free-word notes per question, and click Submit."
Do NOT proceed until the background task completes. Do not ask the user to type answers into chat as a fallback. Waiting for the background process to exit is how you know the user is done.
Step 3: Read the result file
When the background task completes, stdout contains Decision result saved to <path>. Read that file:
{
"version": 1,
"answers": [
{
"id": "stable-id",
"title": "The question",
"selectedIndex": 0,
"selectedLabel": "Short choice label",
"wasRecommended": true,
"freeText": "optional per-question caveat or null"
}
],
"notes": "optional shared notes or null",
"submittedAt": "ISO timestamp"
}
Interpret:
selectedLabelis the user's choice. It may benullwhen the user answered with free text only.wasRecommended: truemeans they accepted your recommendation (often a green light to proceed).freeText(when non-null) is a layered instruction — it refines or overrides the selected choice. When there is no selected choice, treatfreeTextas the complete answer for that question.- Top-level
notes(when non-null) applies to the whole decision set and may include scope changes or side-topics.
Step 4: Act on the decisions
Apply the selected choices. When freeText or notes is present, fold them into your plan before executing. If the user's free-text materially changes the scope (e.g. "hold off until X"), confirm with them rather than forging ahead.