Verb

Docs

Add an AI assistant to your SaaS

Four steps, about five minutes, and you have an AI assistant inside your product answering from your real data. There is no library to install and nothing to change in your codebase: one script tag, and a file describing what your product can do.

This gets you a read-only assistant, which is the right place to start for every product. Letting it change things takes two more steps, and one of them is real backend work: an endpoint on your own server that mints a signed token saying who is logged in. Budget for it rather than meeting it as a surprise. What that involves →
Using Claude Code, Cursor or VS Code? Your coding agent can do all four steps for you. Set up Verb from your editor →

1. Create a site

In the dashboard, create a site for the product you are adding this to. You get a widget key straight away. It is a public identifier that ships in your frontend, not a secret, so it is fine in your repository.

You also get a test site automatically, with its own key that only works on localhost, so you can try it inside your own app first. You will use it in a minute.

2. Add the script tag

Once, in your app’s root layout, not on a single page. A floating Ask AI button appears bottom right; there is nothing else to place.

html
<script src="https://api.askverb.com/v1/verb.js"
        data-verb-site="YOUR_SITE_KEY" defer></script>
Running a Content-Security-Policy? Add api.askverb.com to both script-src and connect-src, or the script is blocked and the page gives no sign of it.

3. Tell it what your product can do

Every action the assistant may take lives in one file, verb.md, at your repository root. Not a dashboard toggle: a real file, reviewed in a diff, before any tool exists to be called.

In a monorepo, put it at the root of the deployable app the widget runs in, not the workspace root. Two deployable products means two sites and two verb.md files, because the tools, the domain and the keys all belong to one running app rather than to one repository.

The fastest way to write it is to hand the copy-paste prompt in your dashboard’s install step to your own coding agent. It installs a skill that teaches the format, reads your actual routes rather than guessing at endpoints, and writes the file for you.

Start with one real workflow rather than a mirror of your whole route table, then cover what your users actually ask for. Describing each tool precisely matters more than keeping the list short. Paste the finished file into the dashboard and it goes through an automatic safety review before anything is callable.

The format, and how tools are classified →

4. Verify your domain

Declare the domain the widget will run on. The first time it boots there, on a domain you declared, it verifies itself. No extra click.

A domain nobody declared, say a copied widget key running on somebody else’s site, sits and waits for a human to confirm it by hand. That is the case the confirmation step exists for, and it is why a stolen key is worth nothing.

Working on localhost

Your own machine is a domain like any other, so declare it the same way. Paste the tag, load any page, and the widget booting there is enough for us to see it: your dashboard moves that origin to seen and you confirm it in one click.

Include the port. localhost:3000 and localhost are not the same origin. Confirm it, then reload the page: a panel opened while the origin was still unverified cannot be revived by verifying it afterwards, and it will keep saying the session ended until you do.

Use your test twin here, whose key starts site_test_. It is the one that runs on your own computer. It is not a way around declaring an origin, which is a separate thing and still applies.

That is it. Go and ask it something

Open your product, click Ask AI, and ask it one of the things your users ask for every week. It is reading your live data, as the person looking at the screen, and it will tell you plainly when something is outside what you have given it.

Everything from here is optional and depends on what you want next.

Where to go next

Stuck on something this does not cover? Write to us and you reach the person who built it.