Skip to main content
Build and run it yourself · Plugin examples
Plugin examples

Form builder

Publish shareable intake forms and review each response before it enters the pipeline.

Updated September 19, 2026 3 min read

Collect structured answers without giving the public a login. Build a form, publish a link, and accept each response into the same pipeline every other surface uses. Nothing a stranger submits becomes a lead until a person reviews it.

Forms, ready to create a draft and review responses in the fictional Northline Roofing workspace.
Forms, ready to create a draft and review responses. The real interface uses fictional demo data in this image; follow the steps below in your own workspace. Select the image to view it full size.

Publish your first form

Enable Form builder in Plugins, then open /admin/forms. The plugin starts disabled and needs no provider credentials.

  1. Create a draft, or start from the lead-capture or client-intake template.
  2. Add fields and watch the live preview. Choice fields need at least one option.
  3. Save the draft and publish it. Share the /f/... link anywhere.
  4. Test it in a private window with a real email shape.
  5. Open Responses and accept the test into the pipeline, or reject it.

Accepting records your decision and queues the standard identity check: duplicates are matched, and a response without an email is refused. The completion message distinguishes a finished intake from an accepted response whose intake needs attention. Verify the form workflow in your configured workspace; the public demo currently has no complete form-intake simulation.

Use it through AI

Ask the assistant to build the form for you, for example "a quote-request form with name, work email, company size and project details". It prepares the exact draft for your review through prepare_form_draft, stages it with propose_form_draft, and stages publication with propose_form_publish. Each stage needs your approval: drafting never publishes, and publication rechecks the unchanged draft before creating the share link.

The registered tools list_forms and read_form_submissions read the same tenant-bound records the interface shows. They cannot accept responses or create leads. Reviewing a response is a human decision in /admin/forms, so the assistant cannot approve its own intake.

Costs, disabling and recovery

Building, rendering and reviewing are deterministic and make no paid model or provider request. Hosting and database costs still apply; surrounding AI chat uses the configured model.

Disable the plugin in Plugins to hide its navigation and gate its pages and API. Existing forms, responses and receipts remain. Use normal lead controls for anything already accepted.

If publishing is refused, open the draft and fix the named field, then save and publish again. If accepting is refused, the response has no usable email or was already reviewed. Repeat posts with the same request identity return the original receipt instead of a duplicate.

Saving and publication check the version you opened. After an edit conflict, keep a copy of your changes and reload the current form before saving again. Public responses are checked against the published fields, including required answers, allowed choices and email formats. Failed submissions preserve the visitor's answers; a network retry reuses the same request identity, producing one response and one operator notification.

If acceptance reports that intake needs attention, open Responses, include reviewed responses, and retain the displayed action ID. Inspect the recorded failure in Tasks & approvals, correct the cause, then select Retry approved intake on the response. This resumes the same unexpired operation with its original response identity. For an expired operation, inspect the existing contact and recorded effects before planning recovery; do not submit the person's answers again to manufacture a new inquiry.

The developer guide covers contracts and npm run test:form-builder. Controlled tests and fictional demo behavior are distinct from verification of your own workspace permissions and database.