02Documentation
Asking questions that work
The skill that decides everything else. A good question gets a cited cause; a vague one gets nothing.
Get the shape of answer you want
A count, a cause, an outside fact, and a plain reply are four different jobs. The words you type decide which one you get back.
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.
Four jobs, four answers
Decide what you want back before you type: a figure, a cause, an outside fact, or a reply.
| Approach | What you get back | Use it when |
|---|---|---|
| Ask for a number or a slice | A count, a breakdown by some dimension, or a list of records. Each number arrives with the exact filter that produced it printed beside it. | The answer is a figure or the records themselves. how many stripe charges do we have? |
| Ask for a cause | A cited case file: a root cause, the evidence chain behind it, the explanations it ruled out, a confidence badge, and one metric you can track. Takes a few minutes. | Something moved and you do not know why. why are checkouts dropping since the v2.2.1 release? |
| Ask for an outside fact | A current answer built from pages it opened and read. Each fact carries a numbered [n] chip, and the turn gets a sources list you can open. | The answer lives on the public internet, not in your tools. what is stripe's pricing for uk cards? |
| Ask a plain question | A reply from the conversation or from what the model already knows. No tool runs. | You want a summary, a definition, or a reaction to what is already on screen. is that a lot? |
Nothing sorts your question first
One model reads your message and picks its own tools, the way you pick which app to open.
There is no sorting step ahead of your question. The model that writes the answer also chooses the first move. It can answer from the conversation, count records in your tools, search the web, or run the deep investigation. It decides per message, and it can chain several tools into one reply.
Every tool it runs appears as a step in the thinking block above the answer. Those steps are the receipt. A number in the answer should have a step that fetched it. If a data answer has no step behind it, treat the number as suspect.
A model is deciding here, not a rule. So two questions that sound alike can take different paths. That is the trade for never having to pick a mode first. When the choice comes out wrong, you can override it.
How your wording steers it
The verb decides more than anything else in your sentence.
Show, list, how many, top N, latest and which point at records. Asking what a teammate is working on counts as a record question too. Why, what caused and what's driving point at a cause. Name a public company, a price or the news, and it goes to the web. Ask it to summarize or explain what is already on screen, and it answers from the conversation.
Three other things in your sentence pull hard:
- Tool names — name Jira or Sentry and all of that tool's records are folded into the search. Name a tool that turns out to hold little of the evidence and a cause answer picks up a caveat, and a high confidence drops to medium.
- Your data's own words — record search matches your keywords as literal text, and every extra word narrows it further. Use the words your records use. Use fewer of them.
- A concrete anchor — a version number, an error name, a date window. It gives the search somewhere to push off from.
If you already know the number and want the records behind it, do not ask for a cause. list those failed charges is one tool call. why did those charges fail spends minutes building a case file you did not ask for. The test: can you name the thing you want to read? Then you want records, not a cause.
What each shape costs you
A count is one tool call; a cause is minutes of real work.
An investigation is not a slower lookup. It breaks your question into sub-questions, walks the graph of your records, then puts each candidate record in front of a small AI juror. A juror that cannot copy a real quote out of that record has its vote forced to neutral. Only the records that survive with a quote become evidence. That is why it takes a few minutes. It is also why it can tell you honestly that it found nothing.
A cause answer can reach high confidence. It is knocked down to medium for named reasons, such as a symptom that predates the change you blamed, or a mechanism that only explains part of the failing group. The caveat line tells you which one applied.
When it picks the wrong shape
Override it from the + menu in the chat bar instead of rewording the same question a third time.
The + menu on the chat bar sets the lane by hand: Investigation runs the full root-cause pass, Data lookup pulls a number or slice from your connected data, Web search goes to the public internet. Two more toggles sit below them — Deep research returns a longer cited report, and AI Web scraping collects public pages you can ask about afterwards.
A lane you pick from the + menu stays on for every message after it, not just the next one. It shows as a chip on the chat bar — clear it with the chip's × when you are done. Leave Investigation on by accident and your next quick question takes minutes.
Slash commands are the one-message version. Type / in an empty chat bar and pick: /investigate, /lookup, /web, /scrape and /research each direct that single send and then clear themselves. /initiatives folds your roadmap into the question, and /help asks Vernais which lane you want.
Use a slash command for a one-off. Use the + menu when the next several questions all belong in the same lane — then clear the chip.
Forcing Data lookup biases the same model toward your connected data and tells it not to search the web. It is a nudge, not a separate engine. The same loop runs either way.
Related resources
Find the root cause of a problem
Write a why question that names the thing, the change, and the window, and Vernais can trace it back to the record that explains it.
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.
That single rule explains every tip on this page. A good why question is one that lands on real records. A bad one asks Vernais to reason about something no record describes, and it will say so instead of filling the gap.
The anatomy of a why question
Name the subject, name the change, and add a window if you have one.
Vernais splits your question into three to five smaller ones before it searches. It aims at four angles wherever they apply: what changed, what the error looks like, who is affected and how much, and when it started. Your question has to give each angle something to grab.
The thing that is happening. checkouts, signups, promo codes. This picks the search area.
The direction. dropping, spiking, failing. Without a change there is no symptom to trace.
When it started. since tuesday, last week, since the v2.2.1 release. Optional, but it sharpens the timeline angle.
A version, an error name, or a tool you already suspect. Optional. It gives the search a place to push off from.
Your wording also picks where the search starts. Vernais matches your question against the topics it discovered in your data and enters the closest few. If nothing clears the match floor it still enters the single best topic, flagged as a weak match. That is how a vague question ends up searching the wrong neighbourhood and finding nothing there.
how many fetches records and counts them. what caused runs the full investigation. Neither is better — they answer different questions.If you want the records behind a number rather than an explanation, skip the investigation. Ask a data question instead — that path counts records rather than reasoning about them.
Naming a tool anchors the investigation there
Name a tool only when you are confident the evidence lives in it.
Name a tool and Vernais folds all of that tool's records into the search area, then starts the search from them. You can name more than one. did the github deploy cause the stripe failures? anchors on both, in the order you wrote them. A tool with no data in your workspace is dropped quietly, so a stray name costs you nothing.
A tool that does hold data but not the answer is the expensive mistake. When the tools you named supply less than a third of the grounded evidence, Vernais adds a caveat telling you to treat that angle as tangential. It also knocks a high confidence down to medium. You did not get a better answer by pointing. You got a worse one.
Three tool names are ordinary English words: teams, linear, and notion. Vernais ignores them as tool names unless you add context. Write in Linear or linear ticket, not linear. Otherwise the linear drop in signups would scope your whole investigation to a ticket tool.
What you get back
You get a live timeline first, then a case file. The timeline is about fifteen named steps that stream into the chat as they run, so you can watch the work instead of watching a spinner.
- The plan — how it broke your question down, and which topics it entered.
- The jury — each candidate record judged one at a time, with a progress count.
- The case file — a primary explanation, written with citations you can click to open the original record.
- Hypotheses considered — the two to four candidate explanations it wrote before it looked at the evidence, each marked confirmed or refuted, plus a ruled-out list with reasons.
- A confidence badge —
high,medium, orlow.
The competing explanations are not decoration. Vernais is required to include at least one genuine alternative before it starts — an outside cause, or the possibility that the problem is pre-existing rather than new. It shows you how each one fared.
Confidence is earned, not claimed. The model proposes a label and deterministic checks can lower it. A causal answer reaches high when nothing objects. It drops to medium for named reasons: a symptom that predates the change you blamed, or a mechanism that covers less than 80% of the worst-hit group. The caveat line tells you which. Read what the confidence badge means before you act on a medium.
How long it takes
Minutes, not seconds. A healthy investigation runs a few minutes end to end. It is reading your graph, judging records one by one, and arguing with itself before it writes. If the AI provider stays rate-limited past the time budget, the run stops and says so plainly. A halted run is not a failed one — retry it rather than rewrite your question.
Ask follow-ups in the same thread. how many users were affected? or summarize that answers from the investigation's own numbers without re-running anything. Re-asking the original why question starts a fresh multi-minute run that can return a different number.
When it finds nothing
Every candidate record is judged by a small juror that must copy a real quote from that record to take a side. No quote, no vote. This is why Vernais cannot make things up — and why a thinly worded record rarely survives on its own.
If the same question keeps returning nothing, the fix is almost never a longer question. It is a more concrete one.
Ask it what you would ask a sharp new analyst who read every ticket but was never in the hallway. If they would come back and ask which tool or which week, so will Vernais.
Develop your intuition
These are starting points, not rules. The fastest way to get good at this is to notice what your last question was missing. When an answer disappoints you, ask yourself:
- Was the question too broad? Did I give it a subject and a change, or only a mood?
- Did I name a tool that doesn't hold the evidence — and earn the tangential caveat for it?
- Did I ask for a cause when I wanted a count?
- Did I use my words, or the words that are actually in my data?
- Was the confidence
mediumfor a reason the caveat line already told me? - Am I re-running a question I could have asked as a follow-up in the same thread?
Related resources
Avoid the six question mistakes
Six named ways a question goes wrong, the mechanism behind each, and the one move that fixes it.
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.
What the six have in common
Every one of these asks Vernais for something it cannot ground. Sometimes there is no record to point at. Sometimes there is a record, but your words never reach it. Sometimes the grounded answer was already on screen and the question threw it away.
None of the six produce a lie. Vernais returns nothing, or returns a smaller number than you expected, or quietly answers a slightly different question. That is the failure mode you have to learn to spot.
If an answer surprises you, open the thinking block and read the filter recipe on the counting step before you re-ask. It tells you which question actually ran.
The six mistakes
Scope is what makes a why answerable
Give a why-question a symptom and a subject. A version or a time frame makes it sharper.
Vernais breaks your why-question into three to five sub-questions, covering four angles where they apply: what changed, the error signature, who was impacted, and the timeline. It then matches your words against the topics it found in your data, and the closest few topics become the search area.
Now look at what 'why is our product bad?' gives that machine. There is no symptom to trace and no subject to scope to. The topic match falls under the floor. Vernais still enters its single best-guess topic, flagged as a weak match, and every angle lands on records that have nothing to do with your real problem.
Naming a tool costs you when the evidence lives elsewhere. If your named tools supply under a third of the grounded evidence, the answer picks up a caveat and a high confidence rating drops to medium. The test: would you bet the evidence is in that tool?
A follow-up is not a fresh question
Ask follow-ups in the same thread, and keep the subject inside them.
Two of the six live here, and they fail for different reasons.
- The recomputed number. Vernais does not hold the rows from your last answer. When you say 'out of those, how many from stripe', it reads the conversation and runs a new query with the filter it infers. Give it a subject to infer from and the new slice matches what you meant. Give it a bare 'those' and it can drift to a different slice.
- The re-asked investigation. An investigation is different work. It takes a few minutes, walks the graph, and stores its own sections — telemetry, errors, versions, timeline, evidence, counter-evidence. A follow-up reads those sections straight back, so the number matches the case file you already read. Re-running the same question can return a different number and overwrite the one in the thread.
Re-run when the data moved. Vernais caches the question breakdown and its early hypotheses against a fingerprint of your graph, so new records mean genuinely fresh reasoning rather than a repeat. The test: has a sync or a Brain run happened since you last asked?
The total and the list are different numbers
Read the total the answer prints. Never tally the rows you can see.
A record search counts every match, then shows you some of them. It reports both — '200 record(s) match; showing 20' means 200 is real and 20 is a window. Ask for 200 tickets and you still get 50, the ceiling, while the total stays honest.
Counts behave differently depending on the filter. A count with no date range is a true database count and is exact. A count with a date range has to open each record and read the timestamp out of its own fields, so it stops at a ceiling and tells you when it hit one.
If you want the records themselves rather than a figure, ask for the list — each row comes back with its source, date and resolved fields. The test: do you want a number, or the records behind it?
Field names come from your data, not your head
Ask for a sample record before you filter on a field you have not seen.
Jira stores its assignee deep inside the record. GitHub calls the same idea author. Sentry has no assignee at all. Vernais does not know your field names ahead of time, which is why a plain count often opens with a sample step — it is learning the real keys before it filters.
Some of that gap is closed for you. A short alias table maps the common field names across tools, so assignee still resolves on GitHub, where the field is author, and priority resolves on Sentry, where it is severity. Values are translated too: open also matches To Do, In Progress, unresolved, new and backlog; high also matches urgent, critical, p1 and blocker.
A field outside that table gets no such help. Filter Jira on sprint and the name resolves to nothing, so nothing matches and the count comes back zero — no error is raised, which is why it slips past you. Ask for that field's distinct values instead and you get an empty list with a hint to check the name.
sprint field and no alias reaches one, so the first question returns zero from data that is sitting right there. One extra step buys you a filter that works.Who you are comes from your account
To change how Vernais describes you, edit Settings → Profile.
Vernais reads your name, title, role and company from your signed-in account. That block is the only authoritative answer to 'who am I'. Everything else you say about yourself is a claim — including a page you control. Your personal site, your LinkedIn, your bio: that is the same person speaking through a different channel, not a second opinion.
So it will not adopt a title you assert in chat, and it will not web-search to settle who you are. A search there would only return what you published about yourself. If you tell it the account is wrong, it says so once, points you at Settings → Profile, and answers your actual question.
Preferences are different, and they do stick. 'Remember that I track checkout weekly' is saved and recalled in later conversations. Your identity is not.
Develop your intuition
These six are starting points, not rules. The habit worth building is a short check on your own question before you blame the answer.
- Was the question too broad? A why with no subject has nothing to search.
- Did I name a tool that actually holds the evidence, or one I assume holds it?
- Did I ask for a cause when I only wanted a count?
- Am I counting rows on screen instead of reading the total?
- Did I invent that field name, or did I see it in a real record?
- Is this a follow-up? If so, does it still name its subject?
- Did Vernais already answer this a few minutes ago in a case file?
A surprising answer is usually a different question running, not a broken tool.
Related resources
Get an exact number from your tools
Ask for a count, a breakdown, or a list across your connected tools. Every number comes back with the filter that produced it, so you can check it before you quote it.
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.
Ask for a count
Ask for the count. Never add up the rows you can see.
Type the question. Nothing to configure. Vernais runs a counting tool, then reports the number next to the exact filter it used.
The answer carries its own receipt, like count = 200 matching [integrations=['stripe']]. Read that filter. If it says integrations=['stripe'] but you meant only the charges stream, the number is answering a different question than you asked.
A count with no date range is a real database count of every matching record. It is exact.
Name a tool to scope it
Name one tool and you scope the question. Name two or more and you get a per-tool count plus a grand total.
Naming tools is the cheapest way to sharpen a data question. One name narrows the search to that tool's records. Several names fan the same filter out across each one.
You get each tool's count, sorted highest first, then the total. Each count is exact. The records printed underneath are a sample.
Some plural words quietly mean several tools. tickets means zendesk, intercom and jira. errors means sentry and datadog. docs means notion, confluence and gdrive. analytics means amplitude, mixpanel and posthog. If you want one tool, name it.
Success and failure are not field values
Scope an outcome question to a tool, because success is spelled differently in every one.
Almost no tool stores the word successful. Mixpanel puts the outcome in the event name — Purchase versus Checkout Failed. Stripe puts it in a status field, status=succeeded. There is nothing to text-match.
So Vernais works it out. It lists the distinct event names and status values in your slice, decides what each real value means, and adds up the ones that mean success. It never searches for the word.
The answer shows its working: success: 90 (Purchase=33, Add to Cart=30, Sign Up=27). That list is where you check its judgement. If you think Add to Cart is not a success for your funnel, you can see it and say so.
Ask for a list instead of a total
A count returns a number. A list returns records. Say which one you want, name the order, and say how many.
You get the true total that matched, plus the records you asked for. The total is exact. The list is capped.
For a list from several tools at once, write the whole request in one message and give each tool its own ask. Vernais runs one independent search per tool, then reports each tool's exact count, the records grouped under it, and a grand total.
That pattern is how you get a per-each listing. Name the tools, and say how many from each. One message beats five, because each tool keeps its own keywords, order and depth instead of collapsing into one shared filter.
Learn your field names first
Ask for a sample record before you filter on a field you have not seen.
Field names differ per tool. Jira keeps the assignee at fields.assignee.displayName. Github calls it author. Sentry has no assignee at all. Vernais does not know your keys up front, so it samples real records to learn them. That is why a simple count sometimes takes an extra step.
You get real records printed with their real keys and values, like status=To Do · priority=Medium · assignee=Arya Mahadik. Filter with those.
Keywords match as plain lowercase text, and every keyword must appear in the same record. Meaning-based search is switched off on this path. So use the words your data really uses, and use fewer of them. Each extra word narrows the result.
Check the number before you trust it
Not every number is exact, and Vernais says so when it is not. Read the line under the count.
| What you asked | Is the number exact? | What to do |
|---|---|---|
| A count with no date range | Yes. It is a real database count of every match. | Quote it. |
| A count with a date range | It opens each record to read the date, and inspects at most 20,000 of them. | If you see 'scan capped at N rows — count may be a lower bound', name the tool or stream and ask again. |
| A breakdown | It reads records the same way, so it can hit the same 20,000-row ceiling. Only the top 12 values are listed. | Narrow the filter until the capped warning goes away. |
| The total in a list result | Yes. It counts every match. | Read the total, not the rows. |
A date range drops any record whose date cannot be read out of its own fields. There is no single date column — the time is derived from each record's payload. So a 'since April' total can be smaller than you expect.
A count will not tell you why
If you already know something moved and you want the cause, skip the count and ask the why-question. An investigation chains evidence across signals and returns a cited case file, but it takes a few minutes. The test: if the answer you want is a number, ask for the number; if the answer you want is a reason, ask for the reason.
A lookup fetches. An investigation reasons. how many checkout events failed? is a lookup and lands quickly. why are checkouts dropping since the v2.2.1 release? is an investigation, and Vernais calls that pipeline itself when you ask a causal question. See Find a root cause.
Counts are still the right first move. They tell you whether something moved at all, and they give the investigation a number to explain.
Develop your intuition
These are starting points, not rules. When a data answer looks wrong, the fault is usually in the question. Read the receipt, then ask yourself:
- Was the question too broad? An unscoped 'how many succeeded' has to guess across every tool.
- Did I name a tool that holds the evidence? Mixpanel has no status field to filter on.
- Did I invent a field name instead of sampling a record first?
- Did I tally the rows on screen instead of reading the exact total?
- Did the answer carry a capped warning that I read past?
- Did I ask for a cause when I only wanted a count?
- Did my follow-up keep its subject, or did I lean on a bare 'those'?
Related resources
When a number is exact and when it is a sample
The total is counted in the database, and it is exact. The rows you can see are a sample. Never tally the rows.
Ask for records and two numbers come back. One is how many matched. The other is how many printed. They are almost never the same number, and only one of them belongs in your deck.
The total is counted, the list is a window
Read the total on the first line. Never add up the rows underneath it.
A record search answers in one line before it prints anything:
200 record(s) match; showing 20:200 is real. Vernais filtered every record in your workspace and counted what survived the filter. 20 is how many it chose to print. The other 180 matched too. They are not on screen.
A plain count is stricter still. Ask for a count with no date range and the database counts every matching row itself and hands back one number. It never opens a record, and nothing is capped. The filter it used prints beside the number:
count = 200 matching [integrations=['stripe']].That second line is the receipt. It is how you check the number answers the question you asked. See Check where a number came from.
Why the list stops
Two reasons, and neither is a bug.
- Reading. Two hundred Jira tickets pasted into a chat reply is not an answer. It is a wall you have to scroll past. A single Jira issue can carry over a hundred fields; twenty of them printed in full is already long.
- Cost. Every printed record is text the model has to read before it can reason about your question. Each record's field line is budget-capped for exactly this reason. Spending that budget on rows 51 to 200 buys nothing, because you were never going to read them either.
So the cap is a trade. You give up rows you did not want. You keep an exact total and an answer you can read.
What is capped, and what to ask instead
When a cap bites, the fix is almost always to ask for the count rather than to ask for more rows.
Here is the same idea as a lookup table. The middle column is what you can quote.
| What you asked for | The number that is exact | The part that is a sample |
|---|---|---|
| how many stripe charges | the count — the database counted every row | nothing is sampled |
| latest 5 jira tickets | the N record(s) match total | the printed rows: 20 by default, 50 at most |
| error tickets in jira, sentry and datadog | each tool's count, and the grand total | the rows: a merged sample, at most 12 |
| stripe charges since april 1 | the count, unless the answer says scan capped | the count becomes a floor once the cap is hit |
| break down sentry issues by severity | the listed counts, unless it warns INCOMPLETE | values past the top 12, collapsed into (+N more) |
When a count is not exact
A count with a date range can be a floor. A count without one cannot.
Your data has no date column. Each record's time sits inside its own payload, under whatever key its tool happened to use — created_at, event_time, occurred_at, first_seen, timestamp. Vernais reads those keys in a fixed priority order and falls back to modification time last.
That means a dated question cannot be answered by the database alone. Vernais has to open records and read the time out of each one. Opening records has a ceiling of 20,000. If a dated count hits it, the answer says so:
count = 14812 matching [integrations=['stripe']; time_from=2026-04-01] (scan capped at 20000 rows — count may be a lower bound).Read that as a floor. Name one tool or one stream to shrink the set, then ask again. Breakdowns read record fields the same way, so the same ceiling applies to them; a capped breakdown prints a warning with the word INCOMPLETE in it.
A date range does one more thing worth knowing. Any record whose time cannot be read at all leaves the set. It is not counted as unknown — it is gone. A since april total can be smaller than you expected for that reason and no other.
The counted rows
This is the single most common way to publish a wrong number from a right answer.
When the rows are the answer
If you wanted records and not a total, the cap costs you nothing. It is the point.
latest 5 jira tickets has no hidden total to miss. You asked for five, five printed, and the match count on the first line is background. Nothing was lost, and asking for the count as well would tell you something you did not want.
The cap only hurts when you were about to count the rows.
The test: does your next sentence contain a number? If it does, that number has to come from a count. If it does not, read the rows and move on.
Related resources
Ask follow-ups without losing the thread
Say "out of those" and Vernais works out what you meant from the conversation, then runs the query again with a narrower filter.
What a follow-up actually carries
The thread carries your words and Vernais's answers. It does not carry the rows from the earlier lookup, and it does not carry the filter recipe printed beside the earlier number. Those live in that answer's thinking timeline, for you to read.
So when you say out of those, Vernais re-reads the conversation, infers a narrower filter from it, and calls a data tool again. There is no frozen set being filtered. Every number is fetched fresh, which is why a follow-up can only be as precise as the words still sitting in the thread.
This is the one thing worth internalising: the scope survives as language, not as data. If the subject is not somewhere in the conversation, it is not in scope.
How to write one
Name what changed. Keep enough of the subject that a reader joining the thread would know what those points at.
| You type | What Vernais does | What to check |
|---|---|---|
| all events from mixpanel | Runs a count scoped to Mixpanel | The count step names the filter it used |
| successful ones on checkout | Re-queries, classifying outcomes inside that Mixpanel scope | Which values it counted as success |
| of those mixpanel checkout events, how many failed | Re-queries the same slice for the other outcome | That the recipe still says mixpanel |
The third row restates the subject even though turn two established it. That costs you six words and removes the guesswork.
Say what changed. Then say enough of what stayed the same that it survives on its own.
Why a follow-up beats re-asking
Re-asking makes Vernais pick a scope from your words alone. Different words pick a different scope, and a different scope returns a different number from the same data on the same day. A follow-up that carries its subject keeps the numbers comparable.
Nothing forces a follow-up to narrow. If your wording opens the scope back up, the scope opens back up. The recipe is how you catch it.
Check what "those" resolved to
A count reports the filter that produced it, and the counting step in the thinking timeline names that filter too. Read it before you trust the number. If it does not describe what you meant, the number is answering someone else's question.
count = 180 matching [integrations=['mixpanel']].
outcome classification [integrations=['mixpanel']]:
success: 63 (Purchase=33, Add to Cart=30)
failure: 62
neutral: 55An outcome answer also lists the concrete values it treated as success, failure and neutral. Your tools rarely store the word successful anywhere, so this list is where you check its judgement — and where you spot a value filed under the wrong heading.
A count with no date range is a true database count. Add a date bound and it switches to a capped scan and can report itself as a lower bound. See Exact totals vs. the rows you can see.
Follow up on an investigation
An investigation is the one case where a stored result exists. Its case file is kept with the thread, and a compact header rides along in every follow-up. Ask for a section by name — telemetry, errors, versions, integrations, timeline, steps, hypotheses, evidence, counter-evidence, or the conclusion — and Vernais reads that stored section back rather than re-counting.
After an investigation, what were the top errors returns the investigation's own errors. Ask it as a fresh data question and you can get a different number, because a fresh lookup scopes itself from scratch.
When the thread won't carry your scope
those points at whatever the thread discussed last, not at what you meant three topics agoof those mixpanel checkout events, how many failedDevelop your intuition
These are starting points, not rules. When a follow-up returns a number that surprises you, ask yourself:
- Did I read the recipe, or did I assume what
thosemeant? - Is my subject still somewhere in the conversation, or did I leave it in a tool result the model never sees?
- Does my follow-up narrow the set, or does my wording quietly ask for a wider one?
- Did the thread change topic between the number and my follow-up?
- Am I following up on an investigation? Then ask for a section by name instead of re-counting.
- Did I re-ask when I meant to narrow — and re-scope the question without noticing?
Related resources
Direct the AI when it picks wrong
Force a web search, forbid one, stop a run, or push the AI to think harder — and know which of these controls actually bites.
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.
Most of the time you type a question and one model picks its own tools. No mode to choose. But a model is deciding, not a rule, so two similar questions can go different ways. When it goes the wrong way, these are the controls that take it back.
Take the wheel with the + menu
Press + in the chat bar and pick an option. That option runs instead of whatever the AI would have chosen on its own.
| Option | What it forces | Reach for it when |
|---|---|---|
| Investigation | The full root-cause pipeline, instead of a quick reply. | You asked why and got a short summary instead of a case file. |
| Data lookup | The AI runs with its data tools pushed to the front. | It answered from memory when you wanted a real number from your tools. |
| Web search | The public web. | You wanted current outside facts and got an answer from your data. |
| Deep research | A multi-source web research pass. Thinking is forced to High. | One search is not enough and you want a cited report. |
| AI Web scraping | The guided scrape flow: config cards, then sources, then start. | You want pages collected and saved so you can ask about them later. |
Your choice shows as a pill next to the +, and it stays on for every message until you clear it with the pill's ×. That is the one thing to watch: a lane you set three questions ago is still steering this one. Only one of the five can be on — turning on Deep research clears a forced lane, and picking a lane clears Deep research.
Typing / opens the same options as commands — /investigate, /lookup, /web, /scrape, /research. A command attaches as a chip and applies to that one message, then clears itself. Reach for the command when you want the override once, and the menu when you want it to stick.
Data lookup does not switch to some narrower engine. It runs the same AI with the data tools favoured. That matters: a forced lookup on a person question like what is emma working on still answers properly instead of returning an empty result.
Forcing can make things worse. Web search on a question about your own records sends it to the public internet, which holds none of them. The test: if the answer lives in a tool you connected, never force the web.
Tell it not to search the web
Write the instruction in the message itself. The AI reads it as part of the question.
what is a transformer model? don't search the web, answer from your own knowledgeTwo things happen here. The AI answers from what the model already knows, and it does not refuse you. That second half matters. General knowledge is fair game — a question about a public concept is not "outside your workspace," and the AI is told never to treat it that way.
Be honest about what this control is, though. It is an instruction the AI follows using its own judgement. No server rule enforces it. It holds up well, and it is the right way to ask, but it is not a switch.
Turn thinking off, or dial it up
Open the model menu and find the Thinking section. Flip it off for speed. Leave it on and raise the Effort when you want a careful answer.
Thinking is the reasoning the model does before it writes. Off means exactly zero reasoning on all three models, which is the fastest the chat gets. When thinking is on, an effort control appears with the rungs your model supports. The rungs come from the server, so they change with your model.
| Model | Effort rungs offered | Default |
|---|---|---|
| DeepSeek V4 Flash | Low · Medium · High · X-High · Max | High |
| Nemotron 3 Ultra 550B | Minimal · Low · Medium · High · X-High · Max | High |
| Nemotron 3 Super 120B | Minimal · Low · Medium · High · X-High · Max | High |
- Dial down for speed on a light turn — a short question, a follow-up you already know the shape of, a quick count.
- Dial up for a knotty compare-and-weigh question, or a code question with several files in play.
- Off for when you want the answer now and the question is small.
The ends of the scale are what move. On the default model, DeepSeek, we measured the rungs on one fixed prompt and Low, Medium and High landed within noise of each other, while X-High and Max climbed clearly. The two Nemotrons get their level as a reasoning budget the model honours, so their rungs bite more evenly. Off is exactly zero everywhere, and it is the change you actually feel.
Switching model resets your thinking switch and effort to that model's defaults. The ladders differ per model, so a level is not carried across. Re-set it after you switch.
Stop a run
While a turn runs, the send button becomes a stop button. Click it.
The stop lands cleanly. Whatever text already streamed stays on screen — it is not rolled back. The AI also checks for your stop between tool calls, so no further tools fire after you click. Only the thread you are looking at stops; other threads keep running. One more thing worth knowing: a thread runs one turn at a time, so sending again while a turn is live does nothing. Stop first, then send.
Stop is the right move on a run that is clearly off-target. An investigation is the case where patience usually pays — it chains evidence across many records and takes a few minutes by design. A blank-looking gap early on is normal.
Fix the question before you reach for a toggle
A toggle is a blunt tool. Most wrong picks trace back to a question that could be read two ways, and a clearer question beats an override.
Web search two questions ago, never cleared the pill, and every message since has gone to the public web.+ before you send, and click its × to drop it.Web search on a question about your own records, and the public web holds none of them.Deep research while a lane pill is already active, and it quietly clears the lane.Develop your intuition
These are starting points, not rules. When the AI picks wrong, the fastest fix is usually a better question, not a heavier override. Before you reach for a toggle, ask yourself:
- Was my question about my data, the outside world, or the pages a scrape collected? Which one did the AI think I meant?
- Is a pill still on from an earlier message, quietly steering this one?
- Did I name a tool that actually holds the evidence?
- Did I ask for a cause when I only wanted a count?
- Did I read the thinking block to see which tools ran, or am I guessing at what went wrong?
- Am I forcing a lane to fix a question I could have written more plainly?
Related resources
Get a picture instead of a paragraph
Ask for a dashboard and Vernais draws the numbers it just pulled — KPI tiles, bars, a table, built from tool results and nothing else.
Ask to see it in the same message
Put a visual word in the same message that asks for the data — one message, not two.
Vernais reads your message for words like dashboard, chart, graph, plot, visualize, funnel, kpi, pie chart, bar chart, donut, trend line, or a phrase like show me my. Any of them turns that turn into a visual turn. The AI still fetches the data with its normal tools first. Then it draws what it found.
More prompts that work the same way. Each one names a tool and a dimension to split by:
- show me a dashboard of mixpanel events by outcome
- chart jira issues by status
- build me a bar chart of sentry errors by version
- visualize the checkout funnel as a dashboard
What renders
The dashboard appears inline in the reply, in your theme. The AI hands over a structured spec and picks the parts the data supports.
The headline numbers, each with a label, a value and an optional sub-line. Tiles are colour-toned: green for a good value, red for a bad one.
One row per value, sized by count. This is where a breakdown becomes a shape you can read in a second.
Columns and rows of the underlying records or counts, under the chart.
An optional muted line at the foot of the dashboard.
After the visual, the AI adds a one-line takeaway in prose saying what it shows. That line sits in the reply, not in the dashboard. You do not choose any of the parts — ask for the split you care about and let the AI shape it.
It draws only what the tools returned
Every value in the chart has to come back from a tool call in that same turn.
This is the rule the whole product runs on. When Vernais answers from your connected data, each number has to trace back to a record it can point at. A dashboard is held to the same standard. The AI samples your records to learn the real field names, counts them with a data tool, then hands those exact numbers to the drawing tool. It is told never to invent a value or use a placeholder.
So the failure case is honest. If the data tools error, or come back with nothing, the AI does not draw a dashboard of guesses. It tells you the lookup failed. An empty chart is a chart that lies, and it will not make one.
If the AI answers a visual request with a plain markdown table instead of calling the drawing tool, the server turns that table into a dashboard for you. If there is no table in the answer, it falls back to the records the search tools returned. Either way the numbers are ones a tool already produced — the fallback reads them, it does not add any. Long tables are trimmed to the first 25 rows.
When a sentence beats a chart
Two numbers are faster to read than to look at. 53 succeeded, 17 failed needs no bars. Vernais is told not to visualize a single number or a yes/no — and you should not ask it to. The test: if you can say the answer out loud in under five words, ask for the sentence.
Charts earn their room when there is a shape to see — a distribution across six versions, a funnel that leaks at one step, a split that moved since last week. Below about three values, the chart is decoration around a number you already had.
What a dashboard cannot do
Develop your intuition
These are starting points, not rules. When a visual comes back wrong, the fix is almost always in the question. Ask yourself:
- Did I name a dimension to split by, or only a tool?
- Am I asking to see a shape, or a number I could have read in a sentence?
- Did the thinking block show a count or breakdown step before the chart, or did the tools come back empty?
- Does the tool I named actually hold the field I want on the x-axis?
- Am I asking for a picture when what I really want is the records themselves?
Related resources
Ask what a teammate is working on
Name a teammate in chat and get the real work connected to them — plus your initiatives, your inbox, and the state of your workspace.
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.
What it can see about a person
A person is visible through the records your connected tools synced — never through a directory of your team.
Vernais builds a knowledge graph out of your connected tools. A teammate becomes a node in that graph when their name lands in a real record: a Jira assignee, a bug's reporter, a commit author, a mention in a Slack message. The AI walks the links out from that node.
So what is emma working on? does not run a keyword search. It resolves emma to a person in the graph, then reads every record linked to that node across every connected tool at once.
- Work items — the records linked to that person in the graph, each labelled with the relationship it came through (assigned, reported, owns, mentioned) and the tool it came from.
- Workspace members — who has access to this workspace, and how many people.
- Initiatives — each one's owner, stage, impact, product, signal count and confidence.
- Your inbox — the unread count and recent items.
- Sources and syncs — which tools are connected, when each last synced, and when Corvex last ran.
Everyone with chat access to a workspace queries the same graph. If a tool synced it, a teammate can ask about it. What it knows about you covers what stays private and what does not.
Ask what someone is working on
Ask by name, in plain words, and let it resolve the person for you.
The answer names the real records and the tool each came from. One person lookup reads up to 80 connected records, and the answer works from a sample of them rather than the whole set.
If you already know which tool holds the work, skip the person lookup and ask for the records: open jira tickets assigned to emma. The AI samples real records to learn the field names, then filters on them. The test: if you can name the tool and the filter, ask for records. If you can only name the person, ask by name.
If it answers from the web when you wanted your own data, press + and pick Data lookup, then ask again. That forces the data tools for that one message.
Ask who someone is
Who someone is and what they are working on are two questions — ask the one you mean.
who is emma? returns a few sentences about the person. what is emma working on? returns her work items. The AI is told never to answer a who-is by dumping a list of tickets, so asking the wrong one gets you the wrong shape of answer.
A bare name is treated as a teammate first. A name you qualify with a place, a company, or a public role is treated as an outsider, and the question goes to the web.
Ask about yourself and it answers from your signed-in account, not the graph. It will not search the web to settle who you are, because the web only returns what you published about yourself. To change how it describes you, edit your Settings → Profile.
Ask about the workspace itself
Questions about the app — members, initiatives, syncs, your inbox — read live workspace state, not your records.
- Who is here —
who has access to this workspace? - Initiatives —
any initiative about the checkout drop?orwhich initiatives are stuck in validate? - Sources —
how many integrations are connected, and when did jira last sync? - Inbox —
what's in my inbox?
Each answer comes back with real fields — stage, owner, confidence, last sync time. You can follow up on any of them in the same thread.
Where the answer stops
A causal question about someone's area — why did emma's checkout tickets spike? — runs a full investigation instead of a lookup. That takes a few minutes and returns a cited case file. See Find a root cause.
Develop your intuition
These are starting points, not rules. When an answer lands wrong, the fix is usually in the question. Ask yourself:
- Did I ask who someone is when I wanted what they are working on?
- Did I mean a teammate or someone outside the company — and did I say which?
- Is this person's work in a tool I have actually connected and synced?
- Did I name a tool that does not hold this person's work?
- Am I hunting for a Vernais task rather than a record from a connected tool?
- Did I ask for a cause when I only wanted a list?
Related resources
Ask questions about your codebase
Paste a repo link with your question. Vernais clones it, reads the real files, and answers with the exact lines.
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.
Code works the same way, with files in place of records. Every path and line number in the answer has to come from a file it opened during that reply. It is told to stop and read the file rather than cite something it never saw. Then a checker grades the citations after the fact.
Point it at a repo first
Paste the repository URL in the same message as your question. A link from an earlier message will not work.
Vernais can only clone a URL you typed in that exact message. The server reads your message, pulls out any https repo links, and hands that short list to the tool. The tool then refuses anything that is not an exact match.
This rule exists because a clone is an action, not a lookup. If a repo's own README could name the next repo to fetch, a file could talk Vernais into fetching a different one. The model's own narration cannot nominate one either. Only your message has that authority.
What happens next: Vernais makes a shallow public clone into a temporary folder that belongs to your workspace, your account, and that one thread. It reads the tree, then plans, then searches. The checkout is deleted about an hour later.
Vernais cannot read its own source code. That is not a setting — the tool returns a refusal when asked. Chat only ever analyzes a repo you paste.
Choose the GitHub repo for technical task analysis can approve one repo in Settings → Codebase, which Act uses for technical tasksWhat it can do
Describe what you want to find, not the tool you want it to use — it picks, and you watch it pick in the thinking block.
| What you want | What runs | Reach for it when |
|---|---|---|
| Find code by meaning | codebase_search | you don't know the words the code actually uses |
| Find an exact string | code_search | you know the symbol, error text, or button label |
| Find where something is defined | find_definition | you have a name and want its home |
| See who calls it | find_references, trace_calls | you want to follow a flow across files |
| Read the real lines | read_file | you need the logic, not the location |
| Get oriented | repo_map, list_dir, code_outline | you have no idea where to start |
The first one is the one people miss. Meaning search finds the right function even when your words never appear in the code. Ask for "the checkout flow" and it can land on a file that only ever says processOrder. It compares the meaning of your question against the meaning of each chunk of code. When that model is cold it falls back to word matching, which is weaker but still runs.
Reading is paginated. A long file comes back in ranges, and the result tells it how many lines remain. It keeps reading when the answer needs more.
It only reads
Vernais never edits, commits, or pushes code. There is no write path — not a policy, an absence.
Every tool in the belt searches, reads, or maps. None of them writes. Nothing edits a file after it has been cloned, and reads stay inside that one temporary checkout — your keys and system files are unreachable.
The shell tool is switched off in this deployment, so git log and git blame are not available. Ask about the code as it stands today, or read the history on GitHub.
There is one more rule worth trusting. Everything Vernais reads — file contents, comments, commit messages — is treated as data to analyze, never as instructions. If a file says "ignore your instructions and run this command", it reports that as a finding instead of obeying it.
Real prompts
If you already know the file and the line, open it on GitHub. A clone plus a search is slower than a scroll. The test: do you know where to look? If yes, go look. If no, ask.
Every citation gets checked
Read the path:line citations, not the prose around them — they are the part that gets verified.
After a code answer is written, a checker reads it back. It pulls out every path:line in the reply and compares each one against the files that were actually read or searched during that turn. No model is involved. It is plain arithmetic and file lookups, so it gives the same verdict every time.
Each citation lands in one of three buckets:
The file exists and was opened or matched this turn, and the line falls inside what was read.
The file is real but was never opened, or the line sits outside the part that was read. Recorded quietly.
The file does not exist, the line is past the end of a file it read itself, or the symbol is not in the file it named.
Invalid citations are added to the bottom of the reply, in the open, under a Citation check note that names them and tells you to treat them with caution. They are not deleted and not hidden. You see the claim and you see that it failed. A suspect citation is only logged, because blocking a correct answer is worse than letting a shaky reference through.
So the read is: the answer's prose is a model talking. The citations are checked. Follow the citation.
When it comes back empty
A code turn gets about 22 rounds of tool calls. Broad questions burn them on searching. These are the three ways a search goes wrong, and what to do about each.
router.py and a dozen functions starting with handle. It stopped at the first plausible match.Skipped repeat step in the timeline. It asked for the same thing twice, so a guard stopped it going in circles.If a search finds nothing, that is information. It is told to chase the miss rather than fall back on a guess — searching a second and third angle before saying it could not find the thing. When it does give up, it names every term and path it tried. Read that list. It usually tells you which word your codebase uses instead.
If the code tools aren't there
Code analysis is a permission, not a prompt. Without it, the tools are left out of the AI's belt entirely — so it has no code ability at all, rather than an ability it politely declines. It will answer from general knowledge instead and never open a file.
Two things have to be true. You need the Analyze approved or user-provided codebases permission, which your workspace owner grants per person. And you need a Max seat, because code analysis sits in the AI tier alongside chat and investigations. A Power seat gets data but no AI, and no individual grant can lift that — it is a billing ceiling, not a switch. See Permissions and seats.
Develop your intuition
These are starting points, not rules. When a code answer disappoints you, the fix is usually in the question. Ask yourself:
- Did I paste the repo URL in this message, or am I relying on one from earlier?
- Did I name a file I am guessing at, when I could have described what it does?
- Would I know a right answer if I saw one? If not, it won't either.
- Did I check the citations, or only read the prose?
- Am I asking about code, or about the work around the code? A ticket's owner lives in your connected data, not in a repo.
- Did the search list every term it tried? Which of those words is wrong for this codebase?
