sugarforever/interactive-input
Enables rich interactive UI components in chat responses. When presenting questions that require structured input (multiple choice, true/false, forms), embed interactive blocks that compatible clients render as native UI elements. Use when user asks for quizzes, exercises, surveys, or any structured input scenario.
npx skills add https://github.com/sugarforever/01coder-agent-skills --skill interactive-input
Embed interactive UI components (radio buttons, checkboxes, text fields, toggles) directly in chat responses. Compatible clients render these as native UI elements; other clients show a readable JSON code block as fallback.
Wrap a JSON block in a interactive ` code fence within your normal markdown response. You can mix regular text and interactive blocks freely in the same message.
See references/schema.md for the complete schema specification.
When presenting a multiple-choice question, instead of listing options as text:
Here's your first question:
{
"id": "q1",
"card": {
"body": [
{ "type": "TextBlock", "text": "What is the capital of France?", "weight": "bold" },
{ "type": "Input.ChoiceSet", "id": "answer", "style": "expanded",
"choices": [
{ "title": "A. London", "value": "london" },
{ "title": "B. Paris", "value": "paris" },
{ "title": "C. Berlin", "value": "berlin" },
{ "title": "D. Madrid", "value": "madrid" }
]
}
],
"actions": [{ "type": "Action.Submit", "title": "Submit" }]
}
}
id fieldcard.bodyAction.Submit in card.actions so the user can submit their response"style": "expanded" for choice sets to show all options visually (recommended for quizzes)"style": "compact" for dropdown selects when there are many options"isMultiSelect": true on Input.ChoiceSet for multiple-choice questionsTextBlock in the body is used as the question label in the submitted response interactive code fence — never use json for interactive blocks10. Keep the JSON compact and valid — no comments, no trailing commas
Take sugarforever/interactive-input from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.