View as markdown

Develop

There are three ways to put a live-layer agent in front of your visitors. Pick based on how much control you need over the experience and how much code you want to write.

Not sure which one? Default to script tag — it works on any page, takes one line of HTML, and gets you 90% of the way there. Move to NPM only when you need React-native integration or programmatic control.

The three paths

Capability comparison

CapabilityHostedScript tagNPM
Voice + avatar
Knowledge bases
Slides / fullscreen experiences
Floating bubble
Inline embed at a specific sizeiframe
Fullscreen takeover
Custom branding (colors, logo)partialpartial
Capability allowlist (navigate/scroll/click)
Agent fills forms in your app
Agent reads visible DOM context
Show/hide on specific routespartial
Custom display modes (your own layout)
Direct access to LiveKitSession
Bring your own session endpoint
Team switching (multiple agents in one widget)
Hosted / SSO into your own auth

Decision flow

  1. Are you embedding in a CMS that won't run JavaScript?

    Use Hosted — share the URL or iframe-embed.

  2. Is your site React?

    Reach for NPM. Even if you start with the script tag, NPM unlocks form-filling and page-context awareness when you need them.

  3. Anything else (WordPress, Webflow, plain HTML)?

    Use the Script tag.

Mix and match

These paths aren't exclusive. Common combinations:

  • Marketing site (Webflow) + product (Next.js) → Script tag on marketing, NPM in the app
  • Demo page + main app → Hosted URL for the demo (so a single link from email goes straight to a working agent), NPM in the app
  • Same agent everywhere → all three surfaces point to the same agentId; conversations and analytics flow into the same dashboard