# Widget Forms

Use when the agent should ask the user for structured input with an in-chat form...

- Repository: https://github.com/0xsline/OpenChatCut (2832 stars)
- Category: AI and agents
- License: AGPL-3.0
- Last updated: 2026-10-21
- Runs scripts: no, instructions only

## Install

Claude Code: `npx skills add 0xsline/OpenChatCut --skill widget-forms -g -a claude-code -y`
Codex: `npx skills add 0xsline/OpenChatCut --skill widget-forms -g -a codex -y`
Cursor: `npx skills add 0xsline/OpenChatCut --skill widget-forms -g -a cursor -y`
Gemini CLI: `npx skills add 0xsline/OpenChatCut --skill widget-forms -g -a gemini-cli -y`

## Description

Use when the agent should ask the user for structured input with an in-chat form, including single-select, multi-select, text fields, style pickers, or voice audition choices.

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# Widget Forms

Use the form tool instead of hand-writing markup: the editor chat renders the
form as an interactive card and returns the user's structured answer.

## Runtime Rule

Call `ask_followup_questions`. It serializes your fields into the editor's
native form card; the user's submission comes back as their next message.

Plan the whole questionnaire before calling the tool. Send one final form, not a
trial form followed by a corrected form. The tool supports at most 12 fields; if
the user asks for more questions, merge related prompts into combined fields
before the first call.

After calling `ask_followup_questions`, stop the turn and wait for the submitted
answer to appear in chat. Do not apply a choice, create assets, or continue
planning from a recommendation until the user's selection is present in the
conversation.

## Supported Field Mapping

Build a `fields` array. Write every visible string in the user's conversation
language.

- Native `<form-single>` -> `{ type: "single", variant: "default" }`
- Native `<form-multi>` -> `{ type: "multi", variant: "default" }`
- Native `<form-text>` / `<form-textarea>` -> `{ type: "text" }`
- Native `<form-visual>` -> `{ type: "single", variant: "visual" }`
- Voice audition cards -> `{ type: "single", variant: "voice" }`
- Native start-scenario cards -> `{ type: "single", variant: "scenario" }`

## Form Copy Tone

For form-level text (`title`, `prompt`, `fields[].label`, `submitLabel`, and
`messagePrefix`), write like OpenChatCut is a capable video-making partner inviting
the user to describe what they want, not like a rigid survey.

Aim for:

The rest: https://github.com/0xsline/OpenChatCut/blob/HEAD/src/agent/skills/widget-forms/SKILL.md
