Skip to content
Product · Nerv

The widget in the corner of this page is Nerv

The messenger your customers talk to. It answers from your help center, hands the conversation to your team the moment it’s unsure, and you restyle it from a settings screen — not from your code

Start free
Free plan · no cardOne script tagNo developer to change it
The AI

Watch it answer one

A customer asks. It reads your help center, shows the article it used, and only answers when it's sure. Click any step

Conversation#4192
triage
“Can I still get a refund on invoice #4192?”
Triage
Intent
Refund request
Priority
Urgent
Language
Russian
Route
Billing team
Read from your help center3 of 142
KB-127Refund policy0.91
KB-204Subscription tiers0.86
KB-307Cancellation flowstale 14d0.74
Drafted · grounded
Your invoice #4192 is 6 days old, and refunds are available within 14 days on the Pro plan — so you’re still eligible. To start one, open Billing → Invoices and choose Request refund.
cites KB-127cites KB-204
Safety checks
GroundedOn policyPII redacted

Card numbers, emails and order data are stripped before anything reaches a model — grounding and policy are verified before it can send.

Decision
Confidence0.94
Outcomeanswered from KB · no handoff

Below its confidence threshold it doesn’t guess — it hands the conversation to a human in Portal, with the sources it was working from.

It answers from the help center you give it. No articles, nothing to answer from. Each article carries its own switch for the customer-facing AI, so you choose what it’s allowed to use.

When it isn’t sure, it doesn’t guess. It hands the conversation to a person, with a card in the chat and their real name on it — so your customer is never quietly switched from bot to human.

Anatomy

Every element, named and accounted for

Most vendors show you a screenshot. Nothing on this diagram is a mock-up of something we plan to build

tap any element
AcmeOnline

Hi! How can we help?

Ask us anything, or browse the topics below

Usually replies in a few minutes
Search for help…
SupportYour refund is on its way — it lands in…2
Where is my order?How do refunds work?Talk to a person
HomeChats2Help
Powered by TruSend

Admin panel means you change it yourself and visitors pick it up on their next page load. Built in means the widget just does it — there’s nothing to set.

NervAI-powered assistant
You’re chatting with an AI assistant. Ask for a person at any time.
Order #4192 · Refund window closes 14 Jul
Your invoice is 6 days old and refunds run for 14 days — so you’re still eligible. I’ve started it.
👍 2❤️ 2
Perfect, thank you
Read

How did that go?

😞🙁😐🙂😄
Message…

Admin panel means you change it yourself and visitors pick it up on their next page load. Built in means the widget just does it — there’s nothing to set.

Help Center
refund3 results
Getting started12Billing & refunds8Integrations5
Still need help?Ask us — we’ll keep your question
Powered by TruSend

Admin panel means you change it yourself and visitors pick it up on their next page load. Built in means the widget just does it — there’s nothing to set.

Nothing you just clicked needs a developer — it’s the panel, or it’s built in.

Start freeFree · 50 AI resolves, one-time · no card
Make it yours

Set in the panel, not in your code

Colour, wording, where the button sits, which pages it shows on — the controls below are the same settings your admin panel has. Push on them

Customizelive preview
Brand color
Theme
Launcher
Header
Position
Help center
Hidden

Change any of this in the panel — no deploy, no developer.

yoursite.com
preview
My Company

Your product, beautifully supported

Get startedLearn more
My Company

Hi! How can we help?

Ask us anything or browse topics below

Search for help…
ConversationsStart a conversation
Powered by TruSend

The preview covers the look; the same panel screen also holds your logo, conversation starters, page targeting, language, the pre-chat form and white-label — all in the panel, none of them a deploy.

When a change reaches people

Change it in the panel and visitors pick it up on a page load within the next few minutes — we hold onto your settings for five minutes so the widget starts fast. A chat that’s already open keeps the settings it started with until they reload

Your brand colour

Pick any colour. We work out whether the text on it should be black or white so it stays readable, and lift it in dark mode if it’s too dark to see against the panel

Install

One tag, and it's live

You need one line in your page. Everything above happens after that, from the panel

<script
  type="module"
  src="https://cdn.chatly.tech/widget.js"
  data-app-id="YOUR_APP_ID">
</script>
  • Loads after your page — it never holds up what your visitors see
  • Checks the site it's running on is one you allowed
  • Loads your settings
  • Starts an anonymous session for the visitor

That’s the whole install — no backend, no glue code. Add your domains to the allowlist and the widget only boots on them — an App ID copied off your page won’t load anywhere else.

From zero to live
  1. 01
    Create your workspace

    Free plan, no card — the panel is yours in a minute

  2. 02
    Give it answers

    Write help articles in the platform, or import the ones you already have

  3. 03
    Paste the tag

    One line, on the pages you choose from the panel

  4. 04
    Go live

    The AI answers from your content; everything else lands in your team's inbox

Proactive

Catch the visitor who was about to leave

Someone stalls on your pricing page, drifts toward the close button, or comes back for a second look — Nerv opens with the right message at exactly that moment. Three of the triggers you can build:

Greet first-time visitors

Message
whenFirst visit30s on page
New here? Ask anything — a real person answers.

Nudge the pricing reader

Banner
whenScroll depth 50%URL is /pricing
Got a pricing question? Ask here — it takes two minutes.

Catch leads after hours

Collect data
whenOutside business hoursIdle 60s
We’re offline until morning — leave an email and we’ll pick it up first thing.
you@company.comSend
Mix any moment
Time on pageTime on siteIdle timeExit intentFirst visitReturning visitorScroll depth (fires at 50%)
With conditions
Page URLClick on a selectorCustom eventBusiness hours

The copy, the pages, the caps and the cooldowns are all yours, authored in the panel — no code, no deploy.

And it can’t become the annoying kind. Proactive chat got its bad name from tools that let you spam. Nerv’s anti-spam limits are built into the widget itself — however aggressively it’s configured, your visitors stay protected. One visit, drawn:

Forms

Ask them who they are, before the first message

A gate screen is where a visitor turns around. This one arrives as an incoming message instead, with the composer already sitting under it

  • Switch it on in the panel — Name and Email are there by default, both required
  • Add your own: a label, a type (text, email or phone), required or not
  • Nothing gets through half-filled: required fields have to be answered, and we check the email and phone are the right shape before the chat starts
  • Asked once per session, not on every page
Compliance

Your customer can always tell it's a bot

Disclosure and data care are built in and on by default — not a setting your team has to remember, or one they can quietly switch off

That is the whole difference the law is about — your customer can always tell which one they’re talking to.

EU AI ActArticle 50
  • The AI disclosure is on by default and locked on — white-label can restyle the copy, never remove the marker
  • While the AI has the conversation: its name, an “AI-powered assistant” label, and no green online dot. A bot is never dressed up as an available human
  • On handoff, an explicit card with the agent's real name — the responder is never silently switched
GDPRAligned
  • Conversations encrypted in transit, end to end
  • Crash reports are scrubbed in the visitor's own browser before they reach us — passwords, tokens, cookies and anything that looks like an email address are stripped first
  • Your team's accounts can export their data or delete the account themselves, confirmed by an emailed link
PCI-DSSAligned
  • Nerv doesn't take payments — it isn't a cardholder data environment
  • Agent drafts are scanned for card numbers, IBANs and national IDs; a flagged draft is never saved in their browser. We log that it happened — never what it said

We describe what’s built, not what’s certified — the full security posture is on the security page →

What it costs

Start free. You pay when the AI closes one on its own

The conversations your team answers are free and unlimited, on every plan. The meter only moves when the AI resolves one end to end, with no human involved

Free
$0/mo
free — no card
50 AI resolves, one-time
3 seats
kick the tires
Starter
$39/mo
billed yearly · $49 monthly
150 AI resolves /mo
4 seats
a small team
Popular
Growth
$99/mo
billed yearly · $129 monthly
800 AI resolves /mo
6 seats
teams of 3+
Pro
$349/mo
billed yearly · $449 monthly
3,000 AI resolves /mo
12 seats
high volume

Free is a sandbox, not a free tier: 50 AI resolves, one-time, no card. When they’re used up the AI stops auto-resolving — your widget and inbox keep working, and upgrading turns it back on.

The widget carries a “Powered by TruSend” footer on Free, Starter and Growth — white-label is a Pro feature.

Full pricing and calculator

Coming from Intercom, Crisp or Tidio? Why teams switch →

Billing · JuneGrowth · $129 / mo
512 / 800
AI resolves this cycle
64%
forecast
Used
512
Remaining
288
Projected
672
overage · $0.20 / AI resolvesoft cap · email alert at 90%
Questions

The ones owners actually ask

The developer questions have their own section below — these are yours

What happens when the AI can’t answer?

It doesn’t guess. The conversation goes to your team with an explicit handoff card and the agent’s real name — and the visitor can ask for a person at any time. Handoffs are free on every plan.

Do I need a help center before I start?

No — but the AI only answers from content you’ve approved. Write articles in the platform or import what you already have; until then Nerv still works as a live-chat widget with your team’s inbox behind it.

Can I run it without the AI?

Yes. The widget and your inbox work on every plan even with zero AI resolves — the meter only runs when the AI closes a conversation end to end. Each help article also carries its own switch for the customer-facing AI, so you decide what it’s allowed to use.

Can I try it next to Intercom or Crisp?

Yes. The install is one script tag, and you choose which pages it appears on from the panel — so Nerv can run on a few pages while your current tool keeps the rest. Nothing to migrate before you’ve decided.

Where do conversations land for my team?

In Portal — the team inbox that ships with TruSend: assignment, notes, macros and SLAs, in the browser. The widget and the inbox are one platform, so a handoff is instant.

You’d be among the first teams on TruSend — and the person on the other end of founders@trusend.ai is the one building it.

Founder · TruSend

Founding customers

No logo wall yet. Be the reason there is one

12 founding spots
01

Apply

Two sentences about your support queue, then a short call. We pick 12 teams in two waves for fit — and say no to the rest.

02

Pilot for 6 weeks

Full Growth for your whole team, 5,000 resolve credits, $0 base. Before day one we agree what success means on your queue — say, the AI holding half of it with CSAT steady.

03

Your call

Criteria missed — you walk away free; the performance risk is ours. Criteria hit — Growth at $768 a year, billed annually, locked for as long as you stay (list $1,188/yr)

What we ask back, in writing: a feedback call every two weeks, a case study with real numbers by week 8, and your logo — only once it has earned its place

Apply for a founding spottwo sentences about your queue is a fine application
The technical bit

Everything your developer will ask

How it loads, what you can drive from code, who the visitor is, and the security answers — drawn where a diagram beats a paragraph. Forward it, or skim it yourself

01

Off your critical path

The tag is an ES module — deferred by spec, so your page paints first and never waits. Watch the boot happen

02

Drive it from your own code

Click a method — the widget shows you what it does

six of the methods on window.NervChat
NervChat.open({
  message: 'Where is my order?',
});
NervChat.setBranding({
  brandColors: { primary: '#0ea5a3' },
});
NervChat.setTranslations({
  'chat.input.placeholder': 'Ask us…',
});
// your backend signs the token — see below
NervChat.identify({ userId, token });
NervChat.getUnreadCount();  // → 2
// call it from your sign-out
NervChat.logout();

Anything you hard-code in init() wins over the panel — hard-code sparingly, or your support lead can’t change it without you. Pre-1.0: pin an exact version.

03

Who the visitor is

Anonymous out of the box; a signed token from one endpoint when your customers log in

The default
visitor
  1. Script tag loads
    nothing to build — this is the whole install
  2. Bot check
    no token, no chat — junk can't reach your inbox
  3. Anonymous session
    the widget starts it on its own
  4. Continuity cookie
    one cookie, in one browser — not a login
<!-- the whole install — anonymous needs nothing else -->
<script
  type="module"
  src="https://cdn.chatly.tech/widget.js"
  data-app-id="YOUR_APP_ID">
</script>

Continuity isn’t a security boundary — identify your signed-in customers if you need one.

customer
  1. Customer signs in
    on your site, the way they already do
  2. Your backend signs a token
    with your key — it never leaves your server
  3. Widget presents it
    no Intercom-style user_hash — the token is the whole verification
  4. Refreshed before it expires
    we re-call your endpoint rather than dropping the chat
// your backend signs it — we never see the key
NervChat.init({
  appId: 'YOUR_APP_ID',
  tokenProvider: async () => {
    const r = await fetch('/api/nerv-token');
    return (await r.json()).token;   // re-called before it expires
  },
});

We don’t hold your signing key — and can’t: client-side signing was removed on purpose, and the build forces the secret to empty in every mode.

04

Send these to your developer

Every verdict reads without opening a row — the detail is inside

Is your signing key in my page?No

The bundle carries public identifiers only. Client-side token signing was removed deliberately, and the build forces the JWT secret to empty in every mode, so it can't be reintroduced by accident.

Can someone else embed my App ID on their site?Not with the allowlist on

The widget calls a verify endpoint with its own origin before it renders anything — an origin that isn't on the list fails with DOMAIN_NOT_ALLOWED, and the widget never fetches your config and never opens a socket. Wildcards and a separate test-mode list are supported.

How do I rotate a leaked key?Two live keys

Two live API keys per workspace. Create the second, migrate to it, revoke the first — no window where the widget is down.

Can a malicious message run script in my page?Sanitized, both paths
Message markdown
Rendered through react-markdown. Raw HTML is only ever enabled together with rehype-sanitize, applied after it — so inline handlers and dangerous tags are stripped rather than trusted. Link protocols are checked: javascript:, data:, vbscript: and file: are blocked.
Help-center HTML
DOMPurify against a strict allowlist that forbids script, style, iframe, object, embed and form outright.

Both paths have regression tests.

What's on the wire?TLS · no cookies sent

The conversation runs over RSocket on a secure WebSocket; the bootstrap calls — verify, config, triggers, anonymous token — go over HTTPS, each with credentials omitted, so your cookies are never attached to them.

What does it put in my visitor's browser?A session, the chat history, 2 cookies
localStorage
Session token, cached transcript, read state
IndexedDB
Media blobs
Cookies
Two, first-party

Session data lives in the visitor's browser — note it in your privacy records.

Is it isolated from my page?Light DOM, no iframe

Nerv renders in the light DOM and injects its stylesheet into your head — that's what makes it restylable from the panel. Budget a CSS check on first install.

Accessibility

Tested on every commit

Not a one-off audit that goes stale the week it’s signed — the checks run in CI, against the widget itself

axe suites in CIARIA feed patternLive-region announcementsprefers-reduced-motion honouredNon-modal — Tab returns to your page
If your site sends a Content-Security-Policy headerthe directives
script-src
The CDN host serving widget.js, and challenges.cloudflare.com for the bot check
connect-src
Our API host and WebSocket gateway for config and the conversation, plus the two attachment buckets a file is uploaded to and read back from
img-src
The same two buckets and our API host, plus data: and blob: — logos, image attachments, and the preview of a file before it leaves the browser
media-src
The same two buckets, plus data: and blob: — voice and video attachments. Miss it and they fail silently
frame-src
challenges.cloudflare.com, for the bot check
style-src
'self' is enough — the widget's stylesheet is adopted, not injected, and style-src doesn't govern that

The install snippet and the panel settings live in the docs → The platform’s security posture is on the security page →

Open the widget in the corner — that’s the demo

No sandbox to request and no call to book. Open it, push on it, ask it something — then talk to us

Start free

Curious where handoffs land for your team? See Portal →