Form Publishing

SkillAI & models

Lets your agent publish web forms and manage their lifecycle from draft to live to closed.

Available today. Use it from your connected AI after setup.

Add ahel to your AI once: Claude, ChatGPT, Cursor, Claude Code or Codex. Then ask it to use this.

Then ask your AI: use the Form Publishing skill

About this skill

Form lifecycle management: draft, published, closed. Use when publishing forms, understanding public URLs, configuring captcha, or managing form branding.

What this skill tells your AI

The instructions your AI receives, as published by builderio/agent-native in templates/forms/.agents/skills/form-publishing/SKILL.md and read by ahel’s review.

Form Lifecycle

Forms move through three statuses:

StatusMeaningPublic access
draftWork in progress, not publicly availableNo
publishedLive and accepting responsesYes
closedNo longer accepting responsesShows closed message

Publishing a Form

# Create as draft (default)
pnpm action create-form --title "Survey" --fields '[...]'

# Publish when ready
pnpm action update-form --id <form-id> --status published

# Close when done collecting responses
pnpm action update-form --id <form-id> --status closed

Public URLs

Published forms are accessible at:

/f/<slug>

The slug is auto-generated from the title + a short unique suffix:

  • Title: "Contact Form" -> Slug: contact-form/a1b2c3
  • Full URL: https://yourapp.com/f/contact-form/a1b2c3

The slug updates automatically when the title changes.

Captcha Protection

Public form submissions can be protected with Cloudflare Turnstile (opt-in). This prevents bot submissions without degrading the user experience.

Branding

Public forms display a "Built with Agent-Native" badge by default. This can be configured in the form settings.

Form Settings

Each form has a settings JSON object:

{
  "submitText": "Submit",
  "successMessage": "Thank you! Your response has been recorded.",
  "redirectUrl": null,
  "completionMode": "message",
  "completionRefreshSeconds": 5,
  "showProgressBar": false,
  "emailOnNewResponses": false,
  "anonymous": false,
  "integrations": []
}
SettingTypeDescription
submitTextstringCustom submit button text
successMessagestringMessage shown after successful submission
redirectUrlstringURL to redirect to after submission
completionModestringmessage, redirect, message_then_refresh, or refresh
completionRefreshSecondsnumberDelay before refreshing for message_then_refresh (1–3600)
showProgressBarbooleanShow progress bar for multi-section forms
emailOnNewResponsesbooleanEmail the form owner's account when someone submits a response
anonymousbooleanSuppress IP, submitter identity, chat/run ids, page URL, and client-surface metadata for every response
integrationsarrayWebhook/Slack/Discord/Google Sheets notification configs

emailOnNewResponses sends through the configured email provider (RESEND_API_KEY / SENDGRID_API_KEY). A submission still succeeds when delivery fails, so check server logs when a notification never arrives.

For a genuinely anonymous form, set anonymous: true when creating the form. Do not describe an ordinary published form as anonymous: published forms accept public responses, but only anonymous mode suppresses identifying and source metadata.

Unset completionMode keeps legacy behavior: forms with a redirectUrl redirect and all other forms show the success message. A redirect with an invalid URL falls back to the success message.

Integration Types

Forms can notify external services on submission:

TypeDescription
webhookPOST JSON to any URL
slackSend to a Slack channel through an Incoming Webhook URL
discordSend to a Discord webhook
google-sheetsSend response JSON to a deployed Apps Script /exec URL

These are outbound form destinations configured in the form builder's Integrations tab. They are separate from the managed Slack/Messaging connection. Google Sheets Apps Script handlers should parse JSON.parse(e.postData.contents); a spreadsheet URL or /dev URL will not receive submissions.

Related Skills

  • form-building — Creating and structuring forms
  • form-responses — Viewing data after forms are published

Signals

GitHub stars
7k
Forks
613
Last commit
Sep 2026
Advanced
Item type
skill
Key
form-publishing
Source
github.com/builderio/agent-native