Give it more to work with

04Documentation

Give it more to work with

Vernais can only reason over what it can reach. This is how you feed it.

Connect a tool and sync it

Point Vernais at a tool, prove the credentials work, choose exactly which fields come in, and pull the data.

How-to8 min read

Integrations is where a tool goes from a logo in a catalog to records Vernais can reason over. There are 18 tools and 72 streams to draw from. You connect and sync each one per workspace.

Note

Integrations is an elevated section. The workspace owner grants integrations.manage to each person, and it is off by default. Without it, you will not see Integrations in the nav at all. See permissions and seats.

The order that works

Tip

Sync once with every field selected before you narrow anything — that first sync is what makes the field tree appear.

  1. 1
    Connect

    Open the tool's card and hit Connect. The form shows only the fields that tool needs, plus a collapsible guide on where to find them. Secrets are encrypted before storage and never shown back to you. You see ********.

  2. 2
    Test

    Hit Test sync. Vernais makes one real authenticated call and reports what came back: connection live, credentials rejected, server error, or could not reach the API. The result sticks as Last test with a timestamp.

  3. 3
    Pick streams

    Open Field mapping. Toggle off any stream you do not need. Each row shows its record and field counts. Changes save on their own about half a second after you stop clicking.

  4. 4
    Sync wide

    Hit Sync now with every field still selected. Fields are discovered from your real stored records, so a stream that has never synced has no tree to show.

  5. 5
    Pick fields

    Return to Field mapping, select a stream, and narrow its tree. Deselected fields are dropped as records are stored.

  6. 6
    Schedule

    Open SettingsSync schedule and set Auto-sync. Every connection starts at Manual only, so nothing runs until you set it.

What each tool asks for

The connect form is generated from each tool's declared credential fields. You never see a field that tool does not need. A tool that lives at your own address asks for that address as well as the token.

Auth styleWhat the form asks forTools
One valueA single token or keyFigma, GitHub, Intercom, Sentry, Linear, Notion, Slack, Stripe
A key and its second keyTwo values from the same page in the toolAmplitude (API key and secret key), Datadog (API key and application key)
A token plus a locationThe token, plus the host, project or folder it should readGitLab, PostHog, Google Drive
Site, email and tokenYour subdomain or cloud ID, your account email, and an API tokenJira, Zendesk, Confluence
Service accountAn account name, its secret, and a project IDMixpanel
App registrationTenant ID, client ID and client secretMicrosoft Teams
Careful

Ten streams need a parent record that Vernais cannot supply yet, and syncing the parent does not unlock them. GitHub commits, releases and workflow_runs; GitLab pipelines; Slack messages; Teams channels and channel_messages; Figma team_projects, project_files and file_comments fail every run with needs a parent … id. Toggle them off in Field mapping so your runs stay clean. Everything else in the run still succeeds. See supported tools.

Read the field tree

Note

The tree is built from your real records, sampled up to 400 per stream. A rare field in a large stream can honestly show 0% or miss the tree.

Each row is one field. The checkbox on the left has three states. Tick a parent object and everything under it ticks too. Tick only some children and the parent shows a dash. That dash means partial.

The right side of each row tells you whether a field is worth keeping.

Fill-rate bar

The share of your sampled records where this field holds a real value. Measured on your data, not on a vendor list. A field at 3% exists but is nearly always empty.

`id` badge

The field that uniquely identifies a record, so re-syncing updates it instead of duplicating it. Kept for you automatically, even if you deselect everything else.

`cursor` badge

The timestamp field Vernais stores as its bookmark. Also kept for you automatically.

`doc` badge

The tool's API documents this field, but it never appeared in your sampled records.

The doc badge is the one worth understanding. It does not mean the field is broken. It means your account has not produced a value for it. You can select it. It stays empty until your data contains it.

Deselected fields are dropped when the record is written. They are not hidden. A later question that needs one cannot be answered until you re-select the field and sync again.

But

Narrowing is the standard advice, and it is wrong on day one. You do not yet know which questions you will ask. Sync wide, live with it for a week, then cut the fields whose fill-rate bar never moves. The test: if you cannot name a question a field would answer, it can go.

Full refresh, incremental, and the cursor

A cursor is a bookmark — a timestamp field like updated_at or created that Vernais remembers so a later sync knows roughly where it left off.

Full refresh means re-read everything each run. Incremental means ask only for what changed. Most streams ship set to incremental.

Here is what actually happens on every run. Vernais fetches, then compares each record against what you already stored. If the content is identical, the record is counted and skipped. No write, no graph work. That comparison is what makes re-syncing cheap and safe to repeat.

Note

The per-stream mode dropdown in Settings records your choice, but the fetch does not narrow on the cursor today. Many APIs expose a created date while letting the record change later, so filtering on it would silently miss edits. The content comparison protects you instead.

When a record changes at the source, the new version lands as a new revision. The old one is marked superseded, hidden from Events and from all counts, and the graph material built from it is retracted. Yesterday's version and today's never sit in the graph together.

The limit
A live sync brings in at most 20 pages or 2,000 records per stream
What it means
The cap applies to every run, per stream
Do this instead
Turn on the webhook so new events push in as they happen instead of waiting on a capped fetch
The limit
Amplitude and Mixpanel exports only reach back 30 days
What it means
The window moves with today's date
Do this instead
Put the tool on a schedule so each run banks its window before those days age out
The limit
A request that stalls past about 20 seconds is dropped
What it means
Per request — other streams in the same run still finish
Do this instead
Open Logs, expand the run, and read which stream failed and why

Syncing does not make the data answerable

Synced records sit in raw form. Vernais cannot reason over them yet. A separate write path turns records into a graph it can traverse: dedup, embed, route, extract, verify, resolve, write, then topics.

Tip

Run Corvex once after your first sync. Until a full build finishes for the workspace, new records will not fold into the graph on their own.

Find it in Integrations under PipelineRun Corvex. It takes a few minutes and shows live stage progress. Running it needs brain.run, which the owner grants separately from integrations.manage — you can hold one without the other.

After that first full build, any sync that brings in new or changed records queues an incremental run by itself. A sync that changed nothing does nothing. See Build the graph.

The same applies after a purge. Re-syncing restores the records, but the graph material was deleted. A brain run is what rebuilds it.

Set a schedule

Open SettingsSync schedule. Set Auto-sync to Manual only, Every 15 min, Every hour, Every 6 hours or Daily, then Save changes. A background worker picks it up and runs the sync. No browser needed. The Paused switch stops the schedule without losing the setting.

Note

The Settings tab is the one that saves. Overview shows a matching dropdown and a Pause button that change the screen only and revert on reload. Overview's Send test event also runs the credential test, not a webhook test — the real one is on Webhooks.

The detail tabs

TabWhat it is for
OverviewA read-only summary: connection facts, a 14-day sync chart, recent activity. Its schedule dropdown and Pause button do not save.
EventsThe records that arrived. Search by id, filter by stream, click a row for its full raw JSON. Superseded versions are hidden, so you see the current one.
Field mappingThe streams rail and the field tree. This is where you narrow what comes in.
ProductsWhich products this tool's data feeds. Add a product, then enable, disable or remove the link. See set up a product.
WebhooksAn inbound URL and signing secret so a sender can push events in between syncs. See push events in live.
LogsSync-run history. Expand a run for a per-stream breakdown with record counts and the actual error text when a stream failed.
PermissionsWhich credential fields are set (masked, never shown), the last test result, and which teammates can manage this tool versus only view its data.
SettingsDisplay name, the sync schedule that saves, per-stream mode, and the danger zone.

Disconnect or purge

These two are opposites, and they are the easiest thing here to mix up. Neither one does both jobs.

DisconnectPurge
CredentialsRemovedKept
Stream and field choicesRemovedKept
Synced recordsKeptDeleted
Graph built from themKeptDeleted
Tool then shows asNot connectedConnected

Disconnect when someone rotated a key or you connected the wrong account. Purge when you want Vernais to forget a tool's data but keep the connection ready to pull again.

Careful

Purge cannot be undone. It deletes this tool's raw records, cleaned signals, dedup entries, extracted candidate facts, and its signal nodes, edges and facts — in both databases. It keeps the connection, your credentials, your stream and field choices, and the source snapshot it re-syncs from. Sync cursors reset to zero, so the next Sync now re-pulls from the start. Shared things other tools also rely on, like a version or a customer, are left alone.

Set up a product

A product groups the tools and the workflow behind one slice of your company. The workflow is the part that changes what your team sees on the Act board every day.

How-to6 min read

A product is a folder for one slice of your business — Checkout, Subscriptions, Onboarding. It collects the initiatives and metrics for that slice. It also carries a workflow, and that workflow decides the columns on your Act board. The second job is the one people miss, so most of this page is about it.

What a product owns

Tip

A workflow can only live on a product, so a team that wants a custom Act board needs at least one product.

Initiatives

An initiative binds to one product — set when you generate it from an investigation, or changed later from the Initiatives row menu. That binding fills the product's Overview table and KPIs.

Coverage

The list of tools added to the product, each marked enabled or disabled. A new product starts with none.

Workflows

The states your work moves through. These become the columns on the Act board. This is the part with teeth.

Health and owner

Two labels you set by hand. Health is healthy or at risk and shows as a dot on every tile. Owner is one name.

Create a product

Tip

Make one product per slice of the business you review separately, not per repository or service.

  1. 1
    Open Products and click New product

    The button sits at the top right of the catalog, and there is a + on the Catalog rail too. Both appear only if you hold the elevated products.edit permission.

  2. 2
    Name the slice, not the software

    Checkout reads better than checkout-service. The name shows on every tile and in the workflow picker later.

  3. 3
    Set the owner and health

    Owner pre-fills to you, and the server defaults it to you if you clear it. Health is a label you choose — Vernais does not work it out from your data.

  4. 4
    Click Add product

    You land on the product's detail page. Status is set to active for you. The product now covers no tools at all.

Note

Coverage is opt-in. A brand-new product is added to zero of the 18 tools, and you add them one at a time from each tool. That is the next section.

But

One product is often enough. Act falls back to another product in your workspace when an initiative is not bound to anything, so a second product mainly buys you a second workflow. The test: do these two slices need different board columns? If not, keep one.

The limit
Creating or editing a product needs the elevated products.edit permission
What it means
Viewing is on by default for everyone in the workspace
Do this instead
Without products.edit you still open the catalog and every product's Overview — the New product button and the product's Settings tab are hidden. Ask the workspace owner to grant it

Map the tools that feed it

Tip

Coverage is stored on the product but edited from the tool, so start in Integrations.

  1. 1
    Open the tool, not the product

    Integrations, then click a tool, then the Products tab. Its heading reads PRODUCTS FED.

  2. 2
    Add the product

    Click Add product. Pick one you already have, or create a new one from inside that dialog.

  3. 3
    Enable or pause it

    With the toggle on, the row reads Stripe feeds this product — your tool's name in place of Stripe. Off, it reads Disabled — Stripe paused. The trash icon removes the product from this tool and sends it back to the picker.

Note

What enabling really does. It writes the tool onto the product's coverage map, which the product's own Signal sources pane then mirrors as Feeding signals or Paused. It does not filter what an investigation reads. An investigation reads your workspace's whole graph either way. Treat coverage as a decision your team wrote down and can see, not as a switch that narrows the AI.

The limit
The product's own Signal sources pane has no toggles
What it means
It is a read-only mirror of the coverage map
Do this instead
Open Integrations, then the tool, then its Products tab to change anything

Shape the Act board with a workflow

Tip

The workflow you set on a product becomes the columns on every Act board for that product's initiatives.

Act works out a board by walking a chain. It takes the task, finds its initiative, finds that initiative's product, and reads that product's workflows. The states become your columns. The arrows become the only moves the board will accept. None of this is visible from the Act tab itself, which is why a board that looks wrong is usually a workflow nobody set.

  1. 1
    Open Settings, then Workspace, then Workflows

    Not the product's own Settings tab. The editor lives in the main Settings hub. This is the step most people hunt for and miss.

  2. 2
    Pick the product

    The pane leads with a product picker, because workflows live on a product. Each product opens with a starter set: Engineering, Design, Content, Bug triage, and a branching Custom workflow example.

  3. 3
    Edit the flow

    Rename it, add or remove states, and draw the arrows on the canvas. Every state carries a status band — To Do, Active or Done — and the system reads that band, never the name you typed.

  4. 4
    Close the canvas

    There is no Save button. Every edit persists as you make it, and a Saving… then Saved marker appears in the editor header. Done closes the canvas.

The next Act board that loads for that product's initiatives uses the new states. Work already in flight keeps its column: a task sitting in In Progress stays in an active column instead of being dumped back to the start.

Note

When an initiative has no product. Act still needs a rulebook, so it falls back to a product in your workspace — the most recently created one that has workflows — and uses its workflows. With no product anywhere in the workspace, it uses the built-in flows. So a product's workflow can govern boards you never bound to it.

The limit
The Engineering workflow cannot be edited or swapped out
What it means
The branch, merge and Sentry regression engine is wired to its exact states, so it is locked on purpose
Do this instead
Edit Design, Content, Bug triage or a custom workflow instead — a custom workflow you tag tech is forced inactive and will never govern engineering tasks. To start from Engineering's shape, duplicate it into an editable copy
But

The starter workflows are good defaults. If your team already runs To Do, In Progress, In Review, Merged, Verifying, Done, change nothing. The test: is a column your team actually uses missing from the board? Edit for that, not to rename one.

What a product will not do

Four things people expect from a product and do not get. Each one has a real screen that hints otherwise.

The scoping product picker
Chat asks you to pick a product before a deep investigation, and the Integrations tab says a product's investigations pull from that tool. Neither narrows what the investigation reads — the choice is handed to the read path and nothing there uses it.
Fix Expect no filter. The picker's real job is to tag the resulting initiative to the product, and that tag is what fills the product's Overview table.
The paused product
Status is Active, Planning or Paused. It saves to the database and then appears on no screen and filters nothing.
Fix Use Health instead — at risk shows as a dot on every tile and filters the catalog rail.
The New initiative button
It sits on the product page and looks like it creates work. It navigates you to Initiatives and does nothing else.
Fix Run an investigation in chat, then generate an initiative from that investigation.
The Members pane
It lists the product owner and then your entire workspace team, which reads like access control. It is not.
Fix Set who sees what in Team. Permissions are per person, per workspace — never per product.
Careful

Deleting a product cannot be undone. Its initiatives are not deleted — they are unlinked and survive without a product. The confirm dialog tells you how many before you commit.

Make your synced data answerable

Syncing a tool copies its records in. Running Corvex is what turns them into something the AI can reason over.

How-to6 min read

A sync is a delivery. It drops raw records into your workspace and stops there. Those records are not yet connected to each other, so the AI cannot follow a thread from a Sentry error to the release that caused it. Corvex is the run that builds those connections.

Until Corvex finishes, a new workspace answers nothing.

One constraint shapes most of what follows: when Vernais answers from YOUR CONNECTED DATA, every claim has to trace back to a record it can point at. It will not invent a cause. A question it cannot ground in your data returns nothing rather than a guess. Questions about the outside world, or about general knowledge, it answers like any good assistant — and tells you which world the answer came from.

Run it

Tip

Run Corvex once in every new workspace, and again each time you connect a tool.

  1. 1
    Open Integrations

    Left nav → Integrations. The section is called Connect & Sync.

  2. 2
    Find the runner

    In the left rail, under Pipeline, click Run Corvex. It is not in the Data section — that catches most people out.

  3. 3
    Check the raw count

    The screen shows Raw records at the top. If it reads 0, sync a tool first. The run refuses to start on nothing and tells you there is nothing to process.

  4. 4
    Click Run Corvex

    Stages stream in one at a time, each reporting its real numbers. The screen refreshes about every second and a half.

  5. 5
    Wait for Pipeline complete

    It takes a few minutes. The run happens on the server, so you can navigate away. A second click while it runs does not start a second run.

  6. 6
    Check it worked

    Go to Data. The Nodes table now has rows and the graph draws. Then ask the AI something you already know the answer to.

Try askinghow many jira tickets are open right now?

What the run does to your records

Each stage hands its output to the next. Nothing here is a black box — you can open any result in the Data section and read the source record behind it.

StepWhat happens
Removes duplicatesThe same ticket pulled twice collapses into one record. The copy is kept and marked with the record it folded into, so you can always see what was set aside.
Reads meaningEach record becomes a set of numbers that captures what it is about. That is how the AI knows a 'cart' record sits near a 'checkout' record without you writing a rule.
Pulls out factsIt reads the text and lifts out the things and the links between them: this ticket mentions v2.2.1, this error hits checkout.
Checks each fact against its sourceA fact has to be entailed by the words of the record it came from. If the source does not support it, the fact is thrown out rather than stored. Borderline ones are held back for review instead of entering the graph.
Merges the same thing seen in different toolsStripe's Acme Corp and Zendesk's acme.com become one thing. This is the move that lets a question cross from one tool to another.
Groups it into topicsRelated records cluster together, and each cluster gets a name drawn from your own text. Nobody types the list.

When to run it

Tip

Run it whenever the shape of your data changed — a new tool, new streams or fields, or a purge.

  • After you connect a tool — sync it first, then run. The Brain works on records, not on credentials.
  • In a new workspace — every workspace has its own private graph. Nothing carries over from another one, so a fresh workspace starts genuinely empty.
  • After a purge — a purge deletes that tool's records and the graph built from them, while keeping the connection itself. Re-syncing brings the records back. The Brain is what rebuilds the graph over them.

Data can also flow in on its own. Once one full run has completed for the workspace, a sync that brings in new or changed records queues an incremental run by itself. This is on by default. A sync that changed nothing does nothing. See Stream data in live for how that works.

But

After that first full build, a routine sync does not need a manual run — new records join the graph on their own. Re-run the Brain when you change what is in scope, not when you add more of the same. The test: did the shape of your data change, or only its volume?

What you see while it runs

The screen is a live receipt, not a spinner. Each stage reports the numbers it actually produced, and four counts sit above them:

  • Raw records — what your tools delivered.
  • Signals (clean) — what survived de-duplication. These are the records the AI reasons from.
  • Duplicates — the copies that were folded away.
  • Dedup index — the fingerprints used to spot those copies.

A header line traces the same path in one sentence: raw → dedup index → clean, followed by the duplicate count. The run ends on Pipeline complete or Pipeline failed.

Note

This takes a few minutes, not seconds. It reads every record, checks every extracted fact against its source, and re-clusters the whole corpus. There is no faster partial mode for a first build.

What survives a re-run

Tip

Re-running is safe: it rebuilds what the AI derived and never touches the records your tools sent.

The split is simpler than it looks. Everything your tools sent stays exactly as it arrived. Everything the AI worked out gets thrown away and worked out again from those same records.

WhatOn a re-run
Your raw recordsUntouched. The run reads them and never writes them.
Your connections and field choicesUntouched. Running the Brain is not a sync.
Topics and umbrellasRebuilt from scratch. Names and ids can change between runs, so a topic you bookmarked may come back with a different name.
Merged entitiesAlso rebuilt from scratch. The AI re-derives the same merges from the same records, but the ids behind them are new. Treat an entity id as a detail of one run, not a stable handle.
The limit
Five brain runs every five minutes, per workspace
What it means
The window rolls; a sixth run is refused until it clears
Do this instead
One run rebuilds everything, so a second click adds nothing. Wait for Pipeline complete.
The limit
Running Corvex takes two grants, both off by default
What it means
You need Connect / sync / disconnect / purge to reach the section, and Run Corvex manually to start a run
Do this instead
Ask your workspace owner to grant both, or ask them to run it for you. See Permissions and seats.

When the graph stays empty

The silent sync
You connected a tool and synced it, but never ran the Brain. The records sit in raw form and the graph has nothing in it.
Fix Run Corvex once for this workspace.
The wrong workspace
The Brain always builds into the workspace you are in, and no workspace can read another one's graph. A run in one leaves the other empty.
Fix Switch to the workspace you want answers from, then run it there.
The refused run
There are no roles here — each person holds the permissions the workspace owner assigned them. Without Run Corvex manually the button still appears, and the run is refused when you click it.
Fix Ask the workspace owner to grant you Run Corvex manually.

Send data in as it happens

Give a sender a private URL and a signing secret, and new records land in Vernais the moment they happen — no waiting for the next sync.

How-to5 min read

A sync pulls. A webhook pushes. Instead of Vernais asking your tool for new records on a timer, your tool sends each record the moment it happens.

You turn this on per tool, on that tool's own detail page. Vernais mints a private URL and a signing secret. Any sender that can POST JSON can use them — the tool itself, or a small service you own.

But

A schedule covers most needs. If a 15-minute delay is fine, set an auto-sync interval on the Settings tab and skip this page. The test: would an answer be wrong if the record showed up 15 minutes late?

Before you start

  • Connect the tool first. The Webhooks tab shows Connect first until credentials are saved. A webhook hangs off a connection.
  • You need the integrations permission. It is an elevated permission the workspace owner grants per person. Without it the whole Integrations section is hidden, so there is nothing to find.
  • Have a sender in mind. Vernais receives. It does not configure the far end for you. Someone has to point a tool or a script at the URL.
Note

This is an inbound path only. Vernais does not push data out to other systems.

Turn on the webhook

Tip

Enabling mints a secret, so plan to sign from the very first delivery.

  1. 1
    Open the Webhooks tab

    Go to Integrations, open the tool, then the Webhooks tab. Before it is on, you see one button: Enable webhook.

  2. 2
    Enable it

    Click Enable webhook. Vernais generates an unguessable token and a signing secret. The page flips to the live view: four counters across the top, an ENDPOINT card below.

  3. 3
    Copy the URL

    The Webhook URL field holds your address. It reads like https://your-host/api/webhooks/ingest/stripe/<token>. The token in the path is the only thing that identifies your connection, so treat the whole URL as a secret.

  4. 4
    Copy the signing secret

    Click the eye icon to reveal Signing secret, then the copy icon. Paste the URL and the secret into your sender's settings.

  5. 5
    Check the target stream

    The Target stream counter names where events land — webhook by default. Deliveries show up under that stream on the tool's Events tab.

Sign every delivery

Tip

The signing secret proves a delivery really came from your sender and was not altered on the way.

Your sender computes an HMAC of the exact request body, keyed with the secret, and sends it as a header. Vernais recomputes it and compares. Two header names work: X-Atmos-Signature and X-Hub-Signature-256. The value format is identical.

http
POST /api/webhooks/ingest/stripe/<your-token>
Content-Type: application/json
X-Atmos-Signature: sha256=<hex hmac of the raw body, keyed with your secret>

{"id": "evt_1a2b3c", "type": "charge.failed", "amount": 4900}

Send one record as an object, or several as a JSON array. Vernais keys each record on its id, or failing that its uuid or key, or a hash of the record itself. Resending the same key updates that record instead of duplicating it.

Note

Once a secret exists, an unsigned or wrong-signed delivery is rejected with a 401 — not accepted with a warning. Enabling mints a secret, so this applies to every webhook you make.

Rotating the secret

Rotate secret issues a fresh secret. It also issues a fresh token, which changes the URL.

Careful

Rotating destroys the old secret and the old URL for good. Every sender still using them stops working until you paste in both new values. The button reads Rotate secret, but the URL moves too.

Send a test event

Click Send test event. Vernais writes a small synthetic record through the same ingest step a live delivery uses, and logs it. A toast reports Test delivered · 1 event ingested, and a row appears in the history below.

Note

The test starts inside Vernais, so it skips the token lookup and the signature check. It proves the write path and the target stream, not your sender's signing. Only a real POST proves that.

Note

The Send test event action on the Overview tab is mislabelled — it runs the credential test instead. Use the button on the Webhooks tab.

Read the delivery history

RECENT DELIVERIES lists the last 40, newest first: arrival time, status, and the event and byte counts. A rejection carries its reason on the same row.

What you seeWhat it meansWhat to do
deliveredThe events were written to your workspace.Nothing. Check the Events tab to see them.
rejected · missing signatureYour sender is not signing at all.Add the X-Atmos-Signature header.
rejected · bad signatureThe secret does not match. Common right after a rotate.Re-copy the secret into the sender.
nothing at allA wrong URL, a disabled webhook, an oversized body, or too many deliveries at once. These are refused before anything is logged.Read the status code the sender got back: 404 means the URL, 413 means the body, 429 means the rate.

Make it answerable

A delivery lands as a raw record, and the Events tab shows its status as raw. Raw records are stored, not understood. Corvex is what turns them into the signals, entities and topics the AI reasons over.

Once a full build has finished for the workspace, Vernais folds new records in on its own. A background worker checks every couple of minutes and drains whatever is waiting. Before that first full build, deliveries stack up raw and no question can reach them.

Tip

Run Corvex once by hand before you rely on any webhook.

Limits

The limit
1 MB per request body
What it means
Checked per request; the sender gets a 413 and nothing is logged.
Do this instead
Split one large batch into several smaller POSTs.
The limit
500 events per delivery
What it means
A longer array is accepted, but only the first 500 are written. The response reports how many were ingested.
Do this instead
Send more than one delivery.
The limit
120 deliveries a minute
What it means
Counted per sender IP and per connection, over a rolling 60 seconds. Over it, the sender gets a 429.
Do this instead
Batch several records into one array instead of one POST each.

A webhook fills the gap between syncs. It is not a way to backfill history — a live sync is itself capped, so for anything older, run a sync. See Limits and caps for the rest.

Turn a chat message or page into evidence

Your team already knows things Vernais can't read. Tag a chat message or a page to an initiative and it becomes a signal that shows up in the evidence.

How-to6 min read

Vernais reads your connected tools. It does not read the hallway. When a support lead explains the real cause in a channel, or you write the context up in a page, that knowledge sits outside the graph. Tagging pulls it in. Each tag becomes one signal on the initiative you picked, scored and filed like any other piece of evidence.

Tag a message in live chat

Tip

Tag while you type. The picker attaches to the message you are about to send, not to one already posted.

  1. 1
    Open the picker

    Type / at the very start of the composer and pick Capture as a signal. Or click the Capture as signal button in the composer toolbar. A search box opens listing your workspace's initiatives.

  2. 2
    Pick the initiatives

    Click one or more. Each appears as a removable chip above the input. Use the + button to add another. If the list is empty you get No initiatives yet — create one in the Initiatives section.

  3. 3
    Type the message and send

    The message posts to the channel or DM exactly as normal. It also files one signal per tagged initiative. The sent message carries a small target chip for each one, with the initiative code and name.

Note

Staged tags clear when you switch channel or DM. That is deliberate — it stops a message routing to an initiative you picked in a different conversation. If you navigate away mid-compose, pick again.

Send a page into an initiative

A page carries more than a chat line. Use it when you have written the background up properly.

  1. 1
    Open the editor menu

    In the page, type / and pick Send page to initiative.

  2. 2
    Pick the initiatives

    A picker opens listing the initiatives that are not archived. Choose one or more.

  3. 3
    The whole page becomes one signal

    Title and body are captured together as a single signal on each initiative you picked. Not one signal per paragraph — one per initiative. The editor confirms with a count, and tells you if a destination failed.

Note

A private or restricted page stays restricted. Tagging never widens who can read it. The signal is visible to the page's original audience, its owner and you — so teammates on the initiative may not see it at all.

Find it in the initiative

This is the step most people miss. A tagged signal does not land on the initiative's front page — it lands under two toggles in Identify, both of which default away from it.

  1. 1
    Open the Identify tab

    Go to Initiatives, open the initiative, pick Identify and scroll to Signal clusters.

  2. 2
    Switch to Post-initiative creation

    The toggle opens on Pre-initiative creation, which shows only what the investigation clustered before this initiative existed. Everything tagged afterwards lives under Post-initiative creation.

  3. 3
    Pick the right kind

    Solutions & tasks is selected by default and holds signals that propose a fix. A message that describes what is happening is a statement — click Statements to see it, along with anything judged noise.

  4. 4
    Read the two cards

    Related signal clusters and Non-related signal clusters. Your tag is in one of them. Click through to the records table for the full list.

SourceGlyphLabelShown as
Live chat💬Live-chat messagethe first 60 characters of the message
Page📃Tagged pagethe page title
File upload📄Uploaded filethe file name
Meeting🎙️Meeting transcriptthe meeting title

Each signal carries who tagged it. Tagging the same message to three initiatives creates three separate signals — one per initiative, scored separately against each problem.

Tagging is not a promise that something counts. Vernais scores every captured signal against that initiative's problem and files it into one of the two buckets, with a 0–10 relation score and a written reason. A tangential message honestly lands in the non-related card rather than padding the case. Related signals are ranked, strongest first.

It judges against the whole problem area, not the narrow root cause. A message about the same funnel counts even when it blames a different cause or proposes a different fix. A message about a different product area does not, however actionable it sounds.

Both buckets are rebuilt from your signals every time you open the initiative. There is no refresh button and no backfill step. A newly tagged message shows up on its own, and the same text always lands in the same bucket.

But

The AI is not the last word. If it filed something as unrelated and you know it matters, open the initiative's Validate tab, expand the Unrelated signals row and click Mark as evidence. That holds the signal in the related bucket and on the graph while the mark stands, and un-marking sends it back. It is a flag to keep the signal — it does not assert a cause. The test: can you say which part of the problem this record speaks to? Then mark it. If you cannot, the AI is probably right.

What a signal can change

Most tags land quietly in a bucket and nothing else moves. Some do more. A signal has to clear two bars first: relevant, and fresh — meaning it adds genuinely new information rather than restating what the initiative already says. Clear both and it can nudge the initiative's confidence, refine the problem statement, or add an insight.

The nudge is bounded. Confidence can move at most 25 points in either direction, and the result is clamped between 0 and 100. One chat message cannot swing an initiative from nothing to certain, and most signals do not move the number at all. The Activity log records what happened: Chat signal added with related — initiative updated., related., or filed as unrelated.

Where tagging silently does nothing

Three failures give you no error at all. They are worth knowing by name.

The wordless message
An attachment with no typed text gives Vernais nothing to read, so the message and its tag chip post but no signal is filed.
Fix Type a sentence into the message before you send it.
The edit that changes nothing
The signal is built from the message you sent, so editing it afterwards updates the chat for everyone and never re-routes or updates the filed signal.
Fix Send a new tagged message with the correction.
The delete that leaves evidence
The chat message and the initiative signal are separate records, so deleting the message leaves the signal on the initiative.
Fix Remove it from the cluster's records table — the initiative's owner or reporter only.
The encrypted DM
An end-to-end encrypted DM is unreadable to the server by design, so the message posts with its tag chip and no signal is ever filed. A mention in one raises no notification either, for the same reason. The lock and the E2EE chip in the conversation header are the only tell.
Fix Tag from a channel or an ordinary DM. To keep something from an encrypted DM, paste it into a page and use Send page to initiative.
Note

A chat tag takes a few seconds to appear inside the initiative. The message posts at once, then the scoring runs in the background with no progress bar. The target chip on the sent message records what you tagged — it does not confirm the signal was filed. A page tag is the opposite: it finishes before the editor's confirmation, so that count is real.

The limit
8 initiatives per message
What it means
Picks past the eighth are dropped with no warning. Each new message gets its own eight, and tagging a page is capped the same way.
Do this instead
Send a second tagged message for the rest.

Attach files and notes as evidence

Drop a PDF on an initiative. Vernais reads it, judges it against your problem, files it as evidence — and it can move the initiative's confidence.

How-to6 min read

One constraint shapes most of what follows: when Vernais answers from YOUR CONNECTED DATA, every claim has to trace back to a record it can point at. It will not invent a cause. A question it cannot ground in your data returns nothing rather than a guess. Questions about the outside world, or about general knowledge, it answers like any good assistant — and tells you which world the answer came from. A file you attach becomes one of those records.

Attach a file to an initiative

Tip

Attach to an initiative to keep a file as evidence. Attach to a chat message to ask a question about it.

  1. 1
    Open the initiative

    Go to Initiatives and open the one the file is about. Click the Files tab.

  2. 2
    Drop the file

    Drag it onto the dashed zone, or click the zone to pick one. You can pick several at once.

  3. 3
    Wait for the read

    A progress line shows while the server reads the file. A big scan takes longer than a Word doc.

  4. 4
    Read the verdict

    The file appears as a card with a badge: ↑ Updated initiative, Fresh evidence, Relevant, Not relevant or Filed. That badge is the AI's judgement of your file against this initiative's problem.

  5. 5
    Open the card

    Click it to read the file as a page. If the file moved the initiative, the top of that page says so and lists what changed.

What Vernais does with it

Four things happen to every file, in order. A fifth happens only when the file earns it.

Reads it

The file is read on the server and turned into text. Both engines run locally — nothing is sent to a cloud parser.

Turns it into a page

The text becomes editable blocks — headings, lists and tables survive. The original bytes are not kept.

Judges it

The AI reads the start of your file next to this initiative's problem, root cause, current confidence and top hypotheses. It decides two things: is this relevant, and is it new.

Files it as a signal

The file is scored 0-10 against the problem and lands in a Related or Unrelated cluster on the Identify tab, with a written reason.

Can update the initiative

Only a file judged both relevant and new. It can then move the initiative's confidence, sharpen the problem statement, or record an insight.

Note

The judge is deliberately hard to please. It only calls a file new when the file says something the initiative does not already reflect, and any confidence move is capped at 25 points in either direction. Most files change nothing. That is the design, not a failure.

A file is a full signal, not a passive attachment. It joins the clusters, the Correlations graph on the Validate tab and the hypotheses, like any other piece of evidence. See Tag evidence for how a signal is scored.

What it can read

Tip

If a human can read the text on it, Vernais can almost certainly read it too.

What you attachHow it gets readWhat survives
Office and structured docs.docx .pptx .xlsx .csv .tsv .html .epub .json .xml .rtf .odt .mdMarkItDown converts it to markdown firstHeadings, lists and tables
A digital PDFRead natively, text intactThe text as written
A scanned PDFThe native read finds no text, so it falls through to OCRRecognised text, no layout
A screenshot or photo.png .jpg .jpeg .tif .tiff .webp .bmp .gifOCR reads the text off the imageRecognised text only
Logs, code, config, odd extensionsDecoded as plain text as a last resortThe raw text

Each file card names the engine that read it, so you can tell an OCR read from a native one. An OCR read of a blurry screenshot is the one worth double-checking.

The limit
25 MB per file
What it means
Rejected before any text is extracted, so an oversize file fails fast
Do this instead
Split the document and attach the section that carries the evidence
The limit
About 120,000 characters kept per file
What it means
Text past that is cut; the stored page keeps what fits
Do this instead
Attach the relevant chapter as its own file instead of the whole book
The limit
About 8,000 characters reach the judge
What it means
The relevance verdict reads the opening of the file only, however long the file is
Do this instead
Put the evidence near the front, or attach that section on its own
The limit
10 file reads a minute, per workspace
What it means
A sliding 60-second window, shared with chat attachments and page imports
Do this instead
Wait a moment, then upload the rest
The limit
No original download
What it means
Only the read text is kept, as a page — the bytes are never stored
Do this instead
Keep your own copy of the source file
But

Attaching everything is worse than attaching nothing. Each file is judged alone against the problem, and the verdict reads only the opening of it. A 200-page deck whose one relevant paragraph sits on page 140 reads as noise. The test: can you point at the page that changes someone's mind? Attach that.

Four ways evidence arrives

A file is one of four ways evidence reaches an initiative. All four become signals, and all four get scored the same way.

  • A file — upload it on the Files tab. This page.
  • A page you wrote — in Pages, use Tag to initiative. The whole page goes, not a selection. See Write things down.
  • A live-chat message — tag an initiative on the message. See Talk to your team.
  • A meeting transcript — it attaches on its own if the meeting was linked to the initiative. See Run a meeting.

Chat attachments are a different thing

A chat attachment goes on one message. Click + in the composer, then Attach file. Vernais reads it with the same engines, hands the text to the model for that turn, and answers your question about it.

Try askinghere's the support export from last week — does it back up the promo-code theory?
Chat attachmentInitiative file
Lives onOne chat messageThe initiative, on the Files tab
What it is forAsking a question about the file right nowKeeping the file as evidence for the work
Gets scored 0-10NoYes — Related or Unrelated, with a reason
Can move confidenceNoYes, when it is relevant and new
Shows up laterIn that thread's historyIn the clusters, the Correlations graph and the hypotheses
Note

One overlap is worth knowing. If the chat thread you attach to is the thread that produced an initiative, Vernais routes the file to that initiative too — the same read, judge and file flow as the Files tab. The attachment chip then reads Filed to initiative, or ↑ Updated initiative if it moved the number. Attaching in any other thread does none of that.

Who can see it, and deleting

A file you upload is visible to your whole workspace. Meeting transcripts are the exception: a transcript is restricted to the people who were in the meeting, so a teammate who missed it will not see it in Files at all. Two people can therefore see honestly different file counts on the same initiative.

Careful

Deleting a file removes the only copy Vernais has. The original bytes were never stored, so the read text goes with it, along with its signal, its score and its contribution to the graph. Re-uploading means re-reading. Only the initiative's owner or reporter can delete a file — a teammate cannot quietly destroy your evidence.

Run a meeting that becomes evidence

Meet in Vernais, turn on the transcript, and it files itself — as a page for the people who were there, and as evidence on the initiative you linked.

How-to7 min read

A meeting here is a calendar event with video switched on. Add a guest and the event turns into a meeting on its own. There is no separate meetings list.

Tip

Link the initiative in the composer before the call, not after. That link is the whole difference between notes and evidence.

  1. 1
    Open the composer

    Calendar → Create, or click an empty slot on the Day or Week grid. The form opens in the left panel. The Create dropdown also has a Video meeting preset if you want it on from the start.

  2. 2
    Add your guests

    Search workspace members. Adding one flips the Video meeting switch on for you.

  3. 3
    Link an initiative

    Use the Link to initiative… field. Its owner, assignee and reporter show up as one-tap guests, so you can invite the people who own the problem.

  4. 4
    Save

    The event now carries the initiative id. That id is what routes the transcript later.

Note

The composer lets you add a second initiative, but the event stores only the first one. The transcript routes to that one and no other. Add the initiative you actually want the evidence on first.

Answer the invitation

RSVP is not manners here. It is the gate on your own join button.

Open the event and use Going?Yes, No or Maybe. Only people on the guest list can respond. The organizer is told either way, so a decline is never silent.

Your answerWhat you getWhat the organizer gets
Yes or MaybeThe join button on the event card"is going to" or "might attend"
NoThe event greys out on your grid"declined"
PendingNo join button. The card tells you to respond firstNothing yet

Ask for a different time

Guests cannot edit an event. Only the organizer can. Your one lever is Propose a new time.

Pick the slot on the calendar, where you can see everyone's schedule while you choose, then Send proposal. The organizer reviews it on their own grid and picks Accept or Decline. Accepting moves the meeting for everyone and notifies them. Declining tells only you. If you propose twice, the newer one replaces your pending one, and the button reads Propose a different time.

The limit
Propose a new time only works on a single, timed meeting
What it means
A recurring series or an all-day block is refused, because there is no per-occurrence model to move
Do this instead
Ask the organizer to change the series time directly

Join the call

Click the event, then Join meeting — or Join now once someone has started it. The room opens inside the app, not in an external tab.

The first person in flips the meeting to live, and everyone else gets a notification to join. Inside you get the participant grid, a docked chat panel, emoji reactions, raise hand, and live captions you can toggle with Captions on.

The limit
The Calendar bell lists Join now only from 5 minutes before the start through 30 minutes after it
What it means
A meeting that is already live stays in the bell the whole time it runs; outside that window the bell drops it
Do this instead
Open the event itself — the card joins any time until the meeting ends
The limit
A meeting nobody ever started closes itself about 14 hours after its scheduled end
What it means
It goes grey and reads that the meeting wasn't held in time; an ended meeting cannot be opened
Do this instead
Create a new event for the conversation you still need
Note

Video is off until an operator sets the three LiveKit keys. Until then every join answers "Video meetings aren't configured yet". The rest of the calendar — invites, RSVPs, proposed times — works without them.

What keeps the room private

Put a member on the guest list and the door closes: the organizer and the invited members get in, and anyone else is refused. A meeting carrying no member guests is the exception — it stays open to the whole workspace. If you want the room private, invite the people you want in it.

When you join, Vernais mints you a pass for that one room. The pass expires. Its life is tied to that meeting's scheduled end, plus about an hour of slack, and never runs past three hours.

That short life is doing real work. The video service accepts any unexpired pass and has no way to cancel one it already handed out. So the pass is built to die on its own. Ending for all is the other half: it disconnects every person in the room at once.

Tip

To get people out of a room now, use End everyone. Closing your own tab removes you and nobody else.

Record the transcript

Tip

Only the organizer can start recording, and everyone in the room sees it running.

Hit Record transcript in the control bar. A red Transcript recording pill appears for every person in the room. There is no silent capture.

Here is the mechanism, because it decides who ends up in your transcript. Each person's own browser turns that person's own speech into text and sends it up. Nothing listens to the room as a whole. That is why the transcript carries real speaker names instead of "Speaker 1".

Note

That trick needs the browser's speech engine, which in practice means Chrome or Edge. Someone on another browser joins fine, talks fine, and contributes nothing to the transcript. If a key voice is on Safari, ask them to switch before you start.

The wrong record button
Record screen sits in the same control bar and reads like the same thing. It saves a WebM to your own downloads folder and never reaches Vernais, and it only lights up while you are sharing your screen.
Fix Use Record transcript for anything you want the AI to read.
The silent room
Recording was on, but nobody spoke, or every speaker was on an unsupported browser. Nothing was captured, so nothing is filed.
Fix Watch the live captions during the call — if you see your words, you are in the transcript.

End it, and the transcript files itself

The organizer clicks End everyone. That ends the meeting and files the transcript. If instead everyone drifts out, the last person to leave files the transcript too — but the meeting stays open, so anyone invited can still rejoin it.

Careful

End everyone disconnects every person at once, and an ended meeting cannot be rejoined. Anyone who still needs the room has to be re-invited to a new one.

If anything was captured, Vernais assembles the transcript and files it. If nothing was said, nothing is filed. It routes once and only once, so an end plus a stray leave cannot produce two copies. A sweep runs in the background about once a minute and picks up any ended meeting whose transcript never landed.

Where the transcript lands

Every captured meeting writes a page: Pages → Transcript → the date → <meeting title> — <date>. That page is restricted to the invited people, plus anyone who actually spoke in the room.

The page carries a Summary, then Decisions, then Action items as real checkboxes, then the speaker-labelled transcript under a Transcript heading. Each of those sections only appears if the call produced one. If you linked an initiative, a live view of it sits at the top. The model that writes the summary is told to stay faithful to the transcript and to return empty lists when there is nothing to report.

Note

The date folder is visible to the workspace, but the transcript pages inside it are not. A teammate who was not in the call sees an empty-looking folder. That is the restriction working, not a bug.

The handoff into an initiative

This is the step the rest of Vernais depends on. If the meeting was linked, the transcript is also filed on that initiative as a signal.

Vernais reads it, judges whether it is actually relevant to that initiative, and files it into the correlations, hypotheses and Decide. It only edits the initiative when it judges the transcript both relevant and new — a call that repeats what is already there is filed as evidence and changes nothing.

Everyone in the meeting gets an inbox note either way. When the meeting was linked and the call produced action items, that note counts how many were routed into the initiative. Otherwise it tells you the transcript is ready.

But

Not every meeting deserves a link. A weekly status call with no bearing on an open question will file a signal that adds nothing to it. The test: could one sentence from this call change what you believe about the initiative? If not, leave it unlinked and let the transcript live in Pages.

From there the transcript behaves like any other evidence you hand over. See Tag evidence for the same handoff from a page or a chat message, and Work out the cause for what the initiative does with it.

Collect public web data with a scrape

Ask Vernais to gather public pages about a topic, and answer the two questions it asks before it starts.

How-to7 min read

A scrape is a net, not a question. A web search opens two pages, answers you, and keeps nothing. A scrape crawls many sites, pulls out what it finds, and saves every item. You can ask about the collection later.

One constraint shapes most of what follows: when Vernais answers from YOUR CONNECTED DATA, every claim has to trace back to a record it can point at. It will not invent a cause. A question it cannot ground in your data returns nothing rather than a guess. Questions about the outside world, or about general knowledge, it answers like any good assistant — and tells you which world the answer came from.

Start it from the chat composer

Tip

Turn the AI Web scraping toggle on before you type. Chat is the only place a scrape can be started.

The toggle matters more than it looks. With it on, the server takes over and walks you through a fixed flow, one step per turn. Without it, your message falls through to the AI's own improvised version, which asks a third question that no longer does anything. Click + in the composer and pick AI Web scraping, or type /scrape.

  1. 1
    Turn on the toggle

    Click + in the chat composer and pick AI Web scraping. A chip appears in the chat bar showing the lane is active.

  2. 2
    Name your subject

    Type the topic and send. Name a concrete thing — a brand, a product, and what you want from it.

  3. 3
    Answer two cards

    A popup asks how many pages per site, and how broad the search should be. Tap one option on each. Nothing has been scraped yet.

  4. 4
    Choose paid or public

    It searches for sources, then shows what it found. A card lists any paid sites by name and asks you to include or skip them. Still nothing has been scraped.

  5. 5
    Watch it run

    Once you tap, the scrape starts. A chip appears at the bottom right and a live panel opens on its own.

Try askingreviews of jiffy shirts dtf printing quality
But

If you want an answer now and do not need it saved, use Web search instead — it reads a couple of pages and replies in one turn. The test: would you ask a second question about this data next week?

The two settings

These two cards decide everything about the run. One controls depth inside each site. The other controls how many sites get found in the first place.

FieldDescription
pagesrequired2 / 5 / 10 / allHow far it keeps clicking 'next page' inside each site it finds. This multiplies against every site, so it drives run time more than anything else.
intensityrequiredlow / medium / highHow many differently-worded searches it runs to FIND sites. Low is about 6 angles. Medium is about 20. High has no cap. It changes how many sites turn up, not how deeply each page is read.
Your goalTap thisWhat it costs you
A quick read on opinion2 pages, LowA few sites, a few minutes
A solid review corpus5 pages, MediumMany sites, many minutes
An exhaustive sweep10 or All pages, HighTens of minutes, and a lot of near-duplicate items
The limit
All pages is not unlimited
What it means
One run stops after 500 pages in total across every site, or after one hour, whichever comes first.
Do this instead
Pick 2 or 5 when you want a run you can predict. Narrow the subject to spend those pages on the sites you care about.
The limit
A scrape uses at most 300 starting URLs
What it means
The cap holds however many the search finds.
Do this instead
Narrow the subject so the best sites make the cut.
The limit
One scrape runs at a time
What it means
Stop the running one, or let it finish.
Do this instead
Open the live panel to see what is already in flight.
The limit
The setup cards expire after an hour
What it means
An unanswered popup is dropped. Your next message starts the flow over.
Do this instead
Answer both cards in one sitting.
The limit
20 source searches and 20 starts every 5 minutes
What it means
The window rolls forward on its own.
Do this instead
Refine one query rather than firing off many.

Some sites block scrapers on purpose. The only way in is their official API, which usually costs money. Vernais separates those out by name and asks you before touching them. Skip is the effective default: only an explicit Include paid sources opts in, so anything else starts a public-only run.

  • Blocked without an API — X/Twitter, LinkedIn, Instagram, Facebook, TikTok, YouTube, the App Store, the Play Store, Glassdoor, SurveyMonkey.
  • Public and scrapable — Reddit, Trustpilot, G2, Capterra, forums, blogs, news, and the company's own site.
  • Why skip works fine — the sources that carry real review text are almost all on the public side.
Note

When the search finds no paid sites, the card asks Start scraping or Cancel instead. Either way, you tap before anything runs.

It never starts in the same turn it searched

This is a deliberate gate, enforced by the server and not by the AI's manners. A start that fires in the same turn as the source search is refused outright. So a reply that says "starting the scrape now" has not started one. The scrape begins on the turn after you tap a choice — never before.

Tip

If you are not sure whether something is running, look at the chip at the bottom right. No chip, no scrape.

How long it takes

Plan on tens of seconds per page. That is not a setting — it is what the work costs. Each page waits about 8 seconds for a Cloudflare challenge to clear, then a few more for the page to settle. A slow load gets up to 30 seconds before it gives up. Only then does one AI call read the text out of the page.

one pagetens of seconds
a few sites at 2 pages eacha few minutes
20 sites at 5 pages eachtens of minutes
a High-intensity sweep at 10 pageslonger still — watch the panel
Note

An early status showing 6 items is progress, not failure. Items land as pages finish, so the count climbs the whole way. A scrape that looks small at minute one is often large at minute ten.

Watch it, and stop it

A chip appears at the bottom right the moment a scrape starts, and the panel opens on its own. It refreshes about every 1.5 seconds while the run is live. You get the status, the page count, the item count, the scraper's own log lines as they happen, and the items themselves. The panel has a Stop button, and you can also say stop the scrape in chat.

Tip

Stopping keeps everything collected so far. The partial data stays searchable — a stopped scrape is a short scrape, not a wasted one.

But

Read the panel rather than asking "status?" in chat. The AI is told not to poll a run that takes minutes, so it may answer with something stale. The test: does the chip already show what you were about to ask?

Ask about what it collected

Ask in the same chat. Vernais searches the scraped items by keyword across each item's title, text, and source URL, and returns the best matches with their site. This corpus is kept apart from your connected tools on purpose — a question about your Jira or Stripe data goes to your data, never to the scrape.

Try askingfrom the scraped data, what are people saying about print quality
Name the collection
Less effective
what do people think of our print quality
More effective
from the scraped data, what do people say about print quality
The first could be answered from your connected tools or from a fresh web search. The second points at the corpus the scrape saved, so it searches those items.

To browse without chatting, open the Data section and pick the Scrapes tab in the left rail. The badge shows how many items you have. Filter by target site, search the text, and click through to the original page.

How scraped pages reach the knowledge graph

This happens on its own — you do not run anything. Each scraped item becomes a signal in your workspace's graph, tagged with the integration name web_scrape. It flows through the same pipeline your synced tools use, so it joins the graph beside your Jira tickets and Stripe charges. The panel shows the handoff: Mapping to KG… then Mapped to KG.

Note

Scraping the same page twice will not duplicate it. Each item is keyed on its URL and text, so an item already in the graph is skipped rather than added again. The items land in the workspace that started the scrape, and stay there.

Develop your intuition

These are starting points, not rules. When a scrape disappoints, the fix is usually in the request, not the settings. Ask yourself:

  • Did I name a subject, or a superlative? "best shirts" finds Best Buy. A brand plus a product plus an intent finds reviews.
  • Did I need this saved at all, or did I want an answer this minute?
  • Did I turn the toggle on, or did I type the word "scrape" and hope?
  • Was the run actually short, or did I check the panel two minutes in?
  • Are the sources I wanted on the paid list — and did I skip them without noticing?
  • Am I asking the scraped corpus a question my connected tools already answer better?

Write a scrape request that finds good sources

The words you choose decide which sites it finds. Name the subject, not the adjective.

How-to6 min read

Your words never reach the search engine alone. Vernais hands them to a model first. That model writes several differently-angled searches around your subject, and those angles do most of the work. A vague subject produces vague angles. Vague angles bring back weak sources.

Turn on the scraping toggle first

Tip

Open the + button in the chat box — its tooltip reads Add files and tools — and turn on AI Web scraping before you type your topic.

The toggle forces the scrape flow for that turn. You then get a fixed set of taps: how many pages per site, then how broad the search should be. Nothing crawls until you tap. Without the toggle your message can take an older path that asks an extra question.

Note

If a flow asks you for a match keyword, you are on that older path. The keyword filters nothing now. Every page found gets opened and read either way.

Why an adjective drags in junk

Tip

Lead with the thing, not with how you feel about the thing.

A search backend matches words, not meaning. Type best running shoes and best is a word it can match. It finds a store called Best Buy. It finds a dictionary page for the word best. None of that is about shoes.

Vernais defends against this, but only partly. Your raw words are searched too — they are one query among several. The merge takes the top result from every search, then every second result, and interleaves them, so no single search fills the list. Dictionary and definition sites are blocked outright. A model then drops pages that only share a word with your query.

That machinery cleans up after a weak request. It cannot rescue one. The angles are written from your words. If your words name no subject, every angle inherits the hole.

Name a subject the web writes about

Tip

A good subject is a thing strangers already publish opinions about.

A product

A named thing people review. hoka clifton 9, not shoes.

A company

A business people rate or complain about. jiffy shirts, not printing vendors.

A topic

A subject with an opinion trail. dtf printing durability, not quality.

Build the request in two parts, and a third when it helps.

  • The subject — the brand, product or topic under its real name.
  • What you want — reviews, complaints, comparisons, ratings. This tells the model which angles to write, because it adapts to the subject's genre.
  • A place wordreddit or trustpilot becomes part of the searches. It is a nudge toward that kind of page, not a filter.
Try askingjiffy shirts dtf printing reviews and complaints
But

If you want the shape of a whole market, stay broad on purpose. crm software reviews is a real subject: many people write about it, so many domains come back. The test: could a stranger write a page about your words? If yes, the web already did.

Four requests, rewritten

The adjective trap
Less effective
best running shoes
More effective
hoka clifton 9 running shoe reviews
The first one hands the backend the word best to match, and it matches shops and dictionaries. The second names a shoe, so every angle the model writes is about that shoe.
The bare word
Less effective
checkout
More effective
shopify checkout abandonment complaints
One ambiguous word gives the model nothing to angle on. The second names a platform, a moment and what you want to read, so the angles land on pages that discuss it.
The company with no topic
Less effective
jiffy shirts
More effective
jiffy shirts dtf printing reviews
A company name alone pulls the company's own site to the top of every angle. Adding the product and the intent makes room for customers talking about it.
The question
Less effective
why do people hate our onboarding?
More effective
acme crm onboarding complaints reddit
A scrape searches, it does not answer. A question gets turned into angles around its weakest words. Name the product and the kind of page you want instead.

One site cannot take the whole list

Tip

Vernais keeps at most six starting URLs from any single domain.

The official site often ranks first on every angle you send. Left alone it would fill the whole list, and you would scrape a company's own marketing instead of what its customers said. The cap pushes it aside. Reddit, Trustpilot, G2, forums and news then have room.

You lose no depth to this. The crawler paginates inside each site it starts on. Six front doors into one site is plenty, and your pages-per-site setting decides how far it walks from each.

What you cannot control

The limit
Six seed URLs per domain
What it means
Per scrape, reset on the next run.
Do this instead
Raise pages per site — the crawler walks deeper inside each site it entered.
The limit
All pages stops at 50 pages per site
What it means
Per site, per scrape. It is a cap, not endless pagination.
Do this instead
Run a second scrape on a narrower subject.
The limit
300 seed URLs per scrape
What it means
Per scrape.
Do this instead
Narrow the subject so the 300 are the right 300.
The limit
20 source searches every 5 minutes
What it means
Per workspace, sliding window.
Do this instead
Reuse the sources from the search you already ran instead of starting over.
Note

The source count moves between runs. A model does the final quality pass, and it does not repeat itself. Vernais guards both ends. If that model drops too much of a healthy pool, its verdict is thrown out and the ranked pool is kept. If too few survive, the list is topped back up from vetted candidates. Read the number as a rough size, not a figure to compare.

Develop your intuition

These are starting points, not rules. The fastest way to learn what a strong request looks like is to read the sources a weak one found. Then ask yourself:

  • Did I name a thing, or describe a feeling about it?
  • Would a stranger know what to write about from my words alone?
  • Do people publish opinions about this subject, or only my team?
  • Did the sources come back from six different sites, or six pages of one site?
  • Did I want the web at all, or a number from my own connected tools?