templates/forms/.agents/skills/form-building/SKILL.md
How to create and structure forms. Use when creating a new form, adding fields, modifying form structure, or understanding field types and their JSON schema.
npx skillsauth add BuilderIO/agent-native form-buildingInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Use the create-form script to create forms from natural language:
pnpm action create-form --title "Contact Form" --fields '[...]'
The script generates a unique ID, creates a URL slug, and stores the form in SQL as draft status.
| Type | Description | Options needed | Example use |
| ------------- | ------------------------------ | -------------- | --------------------- |
| text | Single-line text input | No | Name, company |
| email | Email input with validation | No | Contact email |
| number | Numeric input | No | Age, quantity |
| textarea | Multi-line text | No | Message, comments |
| select | Single-choice dropdown | Yes | Country, department |
| multiselect | Multi-choice dropdown | Yes | Skills, interests |
| checkbox | Boolean toggle | No | Consent, opt-in |
| radio | Single-choice radio buttons | Yes | Gender, preference |
| date | Date picker | No | Birthday, deadline |
| rating | Star rating (1-5) | No | Satisfaction, quality |
| scale | Numeric scale (e.g., 1-10) | No | NPS, likelihood |
Each field is a JSON object:
{
"id": "field_name",
"type": "text",
"label": "Your Name",
"placeholder": "Enter your name",
"description": "Help text shown below the field",
"required": true,
"options": ["Option A", "Option B"],
"validation": {
"min": 1,
"max": 100,
"pattern": "^[a-zA-Z]+$",
"message": "Custom error message"
},
"conditional": {
"fieldId": "other_field_id",
"operator": "equals",
"value": "show_this_field"
},
"width": "full"
}
id — unique identifier (snake_case recommended)type — one of the types abovelabel — display labelrequired — booleanplaceholder — input placeholder textdescription — help text below the fieldoptions — array of strings (required for select, multiselect, radio)validation — min/max/pattern/message for custom validationconditional — show field only when another field matches a conditionwidth — "full" (default) or "half" for side-by-side layoutUse update-form to modify any form property:
# Change title
pnpm action update-form --id <id> --title "New Title"
# Update fields
pnpm action update-form --id <id> --fields '[...]'
# Change status
pnpm action update-form --id <id> --status published
When a user asks for a common form type, use these field patterns:
Contact form:
[
{"id":"name","type":"text","label":"Name","required":true},
{"id":"email","type":"email","label":"Email","required":true},
{"id":"message","type":"textarea","label":"Message","required":true}
]
Survey/feedback:
[
{"id":"rating","type":"rating","label":"Overall satisfaction","required":true},
{"id":"recommend","type":"scale","label":"How likely to recommend? (1-10)","required":true},
{"id":"feedback","type":"textarea","label":"Additional feedback","required":false}
]
Registration/signup:
[
{"id":"first_name","type":"text","label":"First Name","required":true,"width":"half"},
{"id":"last_name","type":"text","label":"Last Name","required":true,"width":"half"},
{"id":"email","type":"email","label":"Email","required":true},
{"id":"role","type":"select","label":"Role","options":["Student","Professional","Other"],"required":true}
]
create-form with title and fieldsupdate-form --status published to go live/f/<slug>tools
Public booking flow — the state machine, animations, and URL/app-state sync.
tools
Trigger-based automations — reminders, follow-ups, webhooks — across the booking lifecycle.
tools
Team event types, round-robin assignment, collective bookings, host weights, and no-show calibration.
development
The pure `computeAvailableSlots` function — inputs, outputs, invariants, and debugging guide.