101 · Under a minutePoint the crawler at your site
Sign up, paste a URL, and the crawler follows your sitemap and the obvious hub pages (about, pricing, FAQ, docs). Tick the ones you want indexed, and the jobs run in the background — they honour robots.txt, skip authenticated paths, and never wander into internal hosts.
- Cloudflare Browser Rendering for JavaScript-heavy pages
- Plain HTTP fetcher as a fast fallback
- OAuth-backed Notion and Google Docs sources
202 · About half a minuteYour content goes into a vector index
Crawled pages are extracted with Readability, chunked along semantic boundaries (about 500 tokens with overlap), embedded with Cloudflare bge-base-en-v1.5 or OpenAI text-embedding-3-small, and upserted into Vectorize or Qdrant. Every chunk is tagged with workspace and agent so retrieval is strictly tenant-scoped.
- Recursive splitter — paragraphs first, sentences as fallback
- Two-stage retrieval: ANN recall, then a cross-encoder rerank
- Workspace isolation enforced by a global query scope
303 · A short tuning passShape the persona and the rules
Set the persona, tone, default language, theme colours, starter prompts, and the behaviour rules. Pin curated answers for the questions you want answered in your exact words (refunds, pricing caveats, disqualification rules). A live preview shows what the visitor will actually see.
- Eight shipped widget languages (en, es, fr, de, pt, ja, ar, zh)
- Behaviour rules: scroll depth, idle, exit intent, intent keyword
- A/B test rule variants and read the conversion delta in the gap report
404 · One clickSnapshot, then publish
Hitting Publish writes the agent into an immutable version row. The widget runtime always reads the published version, so edits to a draft never leak to live visitors. Any prior version is one click away if you need to roll back.
- Versioned per-publish history with timestamps
- Strict allowed-origin enforcement on the widget init endpoint
- One-click rollback to any prior snapshot
505 · Half a minuteDrop a single script tag
Paste a single <script> tag before </body>. The widget bundle is under 50 KB gzipped, loads asynchronously, and renders inside a Shadow DOM so it cannot fight your site's CSS. It works on any framework — WordPress, Shopify, Next.js, plain HTML, Webflow.
- Shadow DOM isolation — no CSS bleed in either direction
- Persistent visitor sessions across reloads
- Optional voice input via the browser SpeechRecognition API
606 · Sub-second to the first characterA visitor asks, the agent answers
A visitor types a question. The hot path: curated short-circuit check, embed the query, vector search, rerank, assemble the prompt with sources tagged for prompt-injection defence, stream the LLM response back over SSE. No DB writes, no synchronous webhooks — persistence and analytics fire asynchronously after the stream finishes.
- Hot-path budget: 1 second p95 to the first character
- Inline citations [1] [2] that link back to your source pages
- Per-agent confidence threshold — the agent declines before it guesses
707 · When the intent is realCapture the lead, hand it to a human
Behaviour rules fire when a visitor signals real intent — asks about pricing, requests a demo, or reaches the third turn — and offer the inline lead form. Captured leads land in your inbox, fire a Slack alert, and POST to your webhook for HubSpot, Pipedrive, or Mailchimp. A human can take over mid-conversation without the visitor noticing the swap.
- Realtime inbox over a Reverb WebSocket
- One-click human takeover — visitor sees a "human is here" tag
- Outgoing webhooks with HMAC-signed payloads for replay