Asking questions that work

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.

Explanation6 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.

Four jobs, four answers

Tip

Decide what you want back before you type: a figure, a cause, an outside fact, or a reply.

ApproachWhat you get backUse it when
Ask for a number or a sliceA 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 causeA 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 factA 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 questionA 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

Tip

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

Tip

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.
Give a cause question a symptom and a subject
Less effective
checkout is broken, tell me about it
More effective
why are checkouts dropping since the v2.2.1 release?
The second names a symptom (dropping), a subject (checkout) and an anchor (v2.2.1). The investigation splits your question into three to five sub-questions, aimed at what changed, the error signature, who is affected, and the timeline. A vague question gives all four nothing to land on.
Name which world you mean
Less effective
how is stripe doing?
More effective
how many failed stripe charges do we have this month?
The first could mean your payments or Stripe the company, so the model has to guess. The second names your records and an outcome, so it counts them instead.
But

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

Tip

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.

The limit
A record list stops at 50 rows, whatever number you ask for
What it means
The matching total printed next to the list is still exact, and the default list is 20 rows
Do this instead
Ask for the count when you want a total; ask for records when you want to read them
The limit
A count with a date range inspects up to 20,000 records
What it means
It says the scan was capped and the count may be a lower bound; a count with no date range is exact
Do this instead
Name the tool, or drop the date range, then ask again
The limit
An investigation is bounded to about five minutes of wall clock
What it means
It halts with an honest message rather than shipping half an answer, and nothing is fabricated
Do this instead
Retry it — a halted run is not a failed one
Note

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

Tip

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.

Careful

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.

Tip

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.

Note

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.

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.

How-to7 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.

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

Tip

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 subject

The thing that is happening. checkouts, signups, promo codes. This picks the search area.

The change

The direction. dropping, spiking, failing. Without a change there is no symptom to trace.

The window

When it started. since tuesday, last week, since the v2.2.1 release. Optional, but it sharpens the timeline angle.

The anchor

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.

Name the thing
Less effective
why is everything broken
More effective
why are checkouts dropping?
The first has no subject and no change, so every angle asks the same empty question. The second gives the search a subject to scope to and a symptom to trace.
Add the change you suspect
Less effective
why are checkouts dropping?
More effective
why are checkouts dropping since the v2.2.1 release?
Both work. The second names a version, so the search starts from the records that mention it instead of finding its way there.
Ask for a cause, not a count
Less effective
how many failed charges last week?
More effective
what caused the failed charges last week?
The verb decides the path. how many fetches records and counts them. what caused runs the full investigation. Neither is better — they answer different questions.
But

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

Tip

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.

Point only where you know
Less effective
why are checkouts failing in jira?
More effective
why are checkouts failing since the v2.2.1 release?
Jira holds tickets about the failure. The failure itself lives in your payments and error tools. Naming Jira anchors the search on the commentary and risks the tangential caveat. Naming the version anchors it on the change.
Note

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 badgehigh, medium, or low.

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.

Try askingwhy are checkouts dropping since the v2.2.1 release?

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.

Note

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.

The limit
Zero records survive the jury
What it means
The threshold is literally zero, not a low number.
Do this instead
You get an honest "I couldn't find grounded evidence" and the closest topic it found. Name a tool, a metric, or a time frame, and ask again.
The limit
Four or fewer records survive
What it means
You still get a real answer.
Do this instead
It ships with a "limited evidence, lower certainty" caveat. Treat it as a lead, not a verdict.
The limit
The cause sits outside the topics your wording matched
What it means
The search stays inside the area it entered, by design — a neighbouring record does not become evidence merely by being nearby.
Do this instead
Re-ask using the words your data actually uses. The no-evidence card names the closest topic it found, which is your best clue.
The limit
Your workspace graph was never built
What it means
Syncing data is not the same as building the map. An unbuilt graph looks exactly like no evidence.
Do this instead
Run Corvex once for this workspace. See Build the graph.

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 medium for 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?

Avoid the six question mistakes

Six named ways a question goes wrong, the mechanism behind each, and the one move that fixes it.

Explanation7 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.

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.

Tip

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

The unscoped why
Vernais splits a why-question along four angles — what changed, the error signature, who was hit, when it started — and a question with no subject gives all four angles nothing to land on.
Fix Name a symptom and a subject: 'why are checkouts dropping since the v2.2.1 release?'
The recomputed number
Vernais does not keep the rows from your last answer, so a follow-up runs a fresh query using the filter it infers from your words — and a bare 'those' gives it little to infer from.
Fix Restate the subject: 'of those checkout events, how many from stripe?'
The counted rows
A record list is capped at 20 records by default and 50 at most, so the rows on screen are a window while the matching total is exact.
Fix Read the total, or ask for the count instead of the list.
The invented field
A field name outside the alias table resolves to nothing, matches nothing, and returns zero from data that exists.
Fix Ask for a sample record first, then filter on the keys it shows you.
The self-asserted fact
Your name, title, role and company come only from your signed-in account, so anything you tell Vernais about yourself stays a claim.
Fix Edit Settings → Profile — that is the only path.
The re-asked investigation
Re-asking the original why-question starts the whole multi-minute run again and can overwrite the grounded numbers already sitting in the thread.
Fix Ask a follow-up in the same thread instead.

Scope is what makes a why answerable

Tip

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.

The unscoped why
Less effective
why is our product bad?
More effective
why are checkouts dropping since the v2.2.1 release?
The second names a symptom (dropping), a subject (checkout) and an anchor (v2.2.1). All four angles have something real to search for, and the topic match clears the floor.
Try askingwhy are checkouts dropping since the v2.2.1 release?
But

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

Tip

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.
The re-asked investigation
Less effective
why are checkouts dropping since the v2.2.1 release?
More effective
what was the failure breakdown by version in that investigation?
The second reads the investigation's own stored section. It takes seconds and the number matches the case file. The first spends minutes recomputing an answer you already have.
But

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

Tip

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.

The limit
A record list shows 20 records, 50 at most
What it means
Asking for 200 returns 50; the matching total stays exact
Do this instead
Read the total, or ask for the count
The limit
A cross-tool search returns about 5 records per tool, 40 merged
What it means
Per-tool counts are exact; the visible rows are a sample
Do this instead
Ask for the per-tool counts, not the rows
The limit
A count with a date range inspects up to 20,000 records
What it means
It says 'scan capped at N rows — count may be a lower bound' when it hits the ceiling
Do this instead
Name the tool or the stream to narrow it, then re-ask
But

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

Tip

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.

The invented field
Less effective
how many jira issues are in sprint 12?
More effective
show me a sample jira issue
The sample prints the real keys and their values. Jira has no 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

Tip

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.

Note

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.

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.

How-to7 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.

Ask for a count

Tip

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.

Try askinghow many stripe charges do we have?

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

Tip

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.

Try askingerror tickets in jira, sentry and datadog

You get each tool's count, sorted highest first, then the total. Each count is exact. The records printed underneath are a sample.

Note

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

Tip

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.

Try askinghow many successful mixpanel events?

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.

Scope an outcome word
Less effective
how many succeeded?
More effective
how many successful mixpanel events?
The second one names the tool, so there is one vocabulary to classify. The first has to guess across every tool at once, where 'succeeded' means a purchase, a charge status and a resolved error all at the same time.

Ask for a list instead of a total

Tip

A count returns a number. A list returns records. Say which one you want, name the order, and say how many.

Try askinglatest 5 jira tickets

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.

Try askingtop 5 jira tickets on DTF transfer and the oldest 2 zendesk tickets on checkouts

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.

The limit
A list shows 20 records by default, 50 at most
What it means
Asking for 200 returns 50. The total is still exact.
Do this instead
Ask for the count if you want the number, and use the list to read examples.
The limit
A cross-tool search reads about 5 records per tool and prints up to 12 of them
What it means
Each tool's count is exact; the visible rows are a sample.
Do this instead
Name a single tool and ask again to read more of its records.
The limit
A breakdown lists the top 12 values
What it means
Anything past that collapses into '(+N more across M other values)'.
Do this instead
Narrow the filter, or ask for the distinct values of one field.

Learn your field names first

Tip

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.

Try askingshow me a sample jira issue

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.

Use real words, fewer of them
Less effective
find records about payment problems
More effective
stripe charges with the word refund
The first needs both 'payment' and 'problems' to appear literally in one record, so it finds almost nothing. The second names the tool and uses one word your data actually contains.

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 askedIs the number exact?What to do
A count with no date rangeYes. It is a real database count of every match.Quote it.
A count with a date rangeIt 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 breakdownIt 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 resultYes. It counts every match.Read the total, not the rows.
Note

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.

The tallied list
You count the records on screen instead of reading the total. The list is a window, not the answer.
Fix Ask for the count as its own question.
The invented field
You filter on a field name you assumed, so you get zero results from data that exists.
Fix Ask for a sample record, then filter with the keys it shows.
The bare 'those'
A follow-up like 'out of those, how many from stripe' re-runs a tool from the conversation. It does not filter a frozen result set, so a vague pronoun can drift.
Fix Restate the subject: 'of those checkout events, how many are from stripe?'

A count will not tell you why

But

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'?

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.

Explanation6 min read

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

Tip

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:

text
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:

text
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

Tip

When a cap bites, the fix is almost always to ask for the count rather than to ask for more rows.

The limit
A record list prints 20 rows
What it means
50 is the hard ceiling. Asking for 200 returns 50, without an error and without complaining
Do this instead
Ask for the count: how many jira tickets mention checkout
The limit
A cross-tool search prints at most 12 example rows
What it means
The per-tool counts printed above them are exact and cover every match
Do this instead
Read the per-tool counts and the grand total. Treat the rows as examples
The limit
A breakdown lists the top 12 values
What it means
Everything past 12 collapses into a line reading (+N more across M other values)
Do this instead
Ask for the distinct values of that field, or filter to the slice you actually care about
The limit
A sample returns 5 records
What it means
It exists to teach you the real field names in your data, not to be representative
Do this instead
Use it to learn the keys, then count or filter using those keys

Here is the same idea as a lookup table. The middle column is what you can quote.

What you asked forThe number that is exactThe part that is a sample
how many stripe chargesthe count — the database counted every rownothing is sampled
latest 5 jira ticketsthe N record(s) match totalthe printed rows: 20 by default, 50 at most
error tickets in jira, sentry and datadogeach tool's count, and the grand totalthe rows: a merged sample, at most 12
stripe charges since april 1the count, unless the answer says scan cappedthe count becomes a floor once the cap is hit
break down sentry issues by severitythe listed counts, unless it warns INCOMPLETEvalues past the top 12, collapsed into (+N more)

When a count is not exact

Note

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:

text
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.

The counted rows
You ask for jira tickets, twenty print, and twenty goes in the deck. The first line said the match count was far higher. You reported the size of the window.
Fix Reread the first line. If you want a total, ask for the count and never tally what printed.
The tallied fan-out
A cross-tool search prints each tool's count, then a short merged sample of rows. Adding up those rows gives you the sample size, not the total.
Fix Add the per-tool counts, or read the grand total the answer already printed.
The quoted floor
A dated count warns that it was scan capped and may be a lower bound. The number gets quoted as the truth anyway.
Fix Narrow to one tool or stream and ask again, or drop the date range.
The total you actually want
Less effective
show me all our jira tickets about checkout
More effective
how many jira tickets mention checkout
The first prints a capped list — 20 rows by default — and you will count them. The second returns one number counted over every match, with the filter it used printed beside it.
Try askinghow many jira tickets mention checkout, and show me the latest 3

When the rows are the answer

But

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.

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.

How-to5 min read

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.

Note

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 typeWhat Vernais doesWhat to check
all events from mixpanelRuns a count scoped to MixpanelThe count step names the filter it used
successful ones on checkoutRe-queries, classifying outcomes inside that Mixpanel scopeWhich values it counted as success
of those mixpanel checkout events, how many failedRe-queries the same slice for the other outcomeThat 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.

Tip

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.

Narrowing what is on screen
Less effective
how many failed checkout events do we have
More effective
of those mixpanel checkout events, how many failed
The first names no tool, so Vernais chooses a scope from scratch — it can land wider than the set you were looking at, and answer a different question. The second carries Mixpanel and checkout forward, so the re-query lands on the slice you meant.
But

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.

text
count = 180 matching [integrations=['mixpanel']].

outcome classification [integrations=['mixpanel']]:
  success: 63  (Purchase=33, Add to Cart=30)
  failure: 62
  neutral: 55

An 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.

Note

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.

Tip

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

The limit
A new chat has no "those"
What it means
Each thread carries its own conversation, and a new one starts empty
Do this instead
Name the tool and the filter in full in your first message
The limit
A topic switch breaks the referent
What it means
those points at whatever the thread discussed last, not at what you meant three topics ago
Do this instead
Name the scope again: of those mixpanel checkout events, how many failed
The limit
A very long thread gets trimmed
What it means
Past a large budget, older tool results are cut to a short stub so the conversation still fits; the ring beside the model picker shows what is using the window
Do this instead
Start a fresh thread and restate the scope in one message

Develop 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 those meant?
  • 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?

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.

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.

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

Tip

Press + in the chat bar and pick an option. That option runs instead of whatever the AI would have chosen on its own.

OptionWhat it forcesReach for it when
InvestigationThe full root-cause pipeline, instead of a quick reply.You asked why and got a short summary instead of a case file.
Data lookupThe AI runs with its data tools pushed to the front.It answered from memory when you wanted a real number from your tools.
Web searchThe public web.You wanted current outside facts and got an answer from your data.
Deep researchA multi-source web research pass. Thinking is forced to High.One search is not enough and you want a cited report.
AI Web scrapingThe 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.

But

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

Tip

Write the instruction in the message itself. The AI reads it as part of the question.

text
what is a transformer model? don't search the web, answer from your own knowledge

Two 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.

The limit
"Don't search" is guidance, not a guarantee. The AI decides, and it can decide otherwise.
What it means
Nothing on the server blocks a web search. There is no toggle for "never search."
Do this instead
Open the thinking block and look. A web search shows as its own step with the queries it ran. If it searched anyway, say so again in your next message.
The limit
Deep research can quietly downgrade itself to one ordinary search.
What it means
A planner sizes the question first, and a question it judges simple gets a single pass rather than a research team.
Do this instead
If you wanted the full pass, ask a question with real parts to it — several angles, or a comparison — rather than one fact.

Turn thinking off, or dial it up

Tip

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.

ModelEffort rungs offeredDefault
DeepSeek V4 FlashLow · Medium · High · X-High · MaxHigh
Nemotron 3 Ultra 550BMinimal · Low · Medium · High · X-High · MaxHigh
Nemotron 3 Super 120BMinimal · Low · Medium · High · X-High · MaxHigh
  • 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.
Note

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.

Note

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

Tip

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.

Name the world you mean
Less effective
how are our checkouts doing compared to everyone else
More effective
how many failed checkout events did we log in stripe last week
The first mixes your data and the outside world in one breath, so the AI has to guess which you meant. The second names the tool and the slice, so there is nothing to guess.
Ask for the cause only when you want the cause
Less effective
why do we have so many open jira bugs
More effective
how many open jira bugs are there right now
A why-question spends a few minutes running the full root-cause pipeline. If you only wanted the number, ask for the number and get it in one step.
The stale pill
You forced Web search two questions ago, never cleared the pill, and every message since has gone to the public web.
Fix Glance at the pill next to the + before you send, and click its × to drop it.
The forced dead end
You force Web search on a question about your own records, and the public web holds none of them.
Fix Drop the pill and ask again with the tool named.
The silent reset
You set thinking to Max, then switch model — and your choice resets to that model's default.
Fix Re-open the model menu and set thinking again after any switch.
The stacked toggle
You turn on Deep research while a lane pill is already active, and it quietly clears the lane.
Fix Read the pill in the chat bar before you press send.
The muted attachment
You attach a file and ask a data question in the same message, so the turn is answered as plain chat and the data tools never run.
Fix Send the file question first, then ask the data question in its own message.

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?

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.

How-to5 min read

Ask to see it in the same message

Tip

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.

Try askingvisualize stripe charges by status as a dashboard

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
Name the split, not the tool
Less effective
show me a stripe dashboard
More effective
visualize stripe charges by status as a dashboard
The second names a dimension to break down by. That sends the AI to a breakdown tool, which returns a value and a count for every row, so every bar is a real value with a real count behind it. The first leaves the AI to guess what you wanted to see.

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.

KPI tiles

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.

Bars

One row per value, sized by count. This is where a breakdown becomes a shape you can read in a second.

Table

Columns and rows of the underlying records or counts, under the chart.

A note

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

Tip

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.

Note

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

But

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

The limit
It is a snapshot, not a live view
What it means
The numbers are frozen at the moment the tools ran. Nothing refreshes.
Do this instead
Ask again to redraw it with fresh numbers.
The limit
It cannot fetch anything
What it means
The dashboard runs in a sandboxed frame with no network access at all, so your data can never leave it.
Do this instead
Anything that needs a live fetch belongs in the Data section — see Look up a record.
The limit
It is not clickable analysis
What it means
A dashboard's buttons can only send a chat message back, at most one every 1.5 seconds, and none at all for a moment after it appears.
Do this instead
Ask your drill-down as a follow-up in chat. The AI still has the numbers.

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?

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.

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.

What it can see about a person

Tip

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.
Note

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

Tip

Ask by name, in plain words, and let it resolve the person for you.

Try askingwhat is emma working on?

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.

Name the person, not the keyword
Less effective
search jira for emma
More effective
what is emma working on?
The second resolves Emma to a person in the graph and follows her links across every connected tool. The first is a keyword hunt inside one tool, so it misses her commits and her tickets elsewhere.
But

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

Tip

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.

Qualify a name you mean from outside
Less effective
who is jay patil?
More effective
who is jay patil from duke?
A bare name is looked up in your workspace graph. The qualifier tells it you mean one specific outside person, so it searches the public web instead of your records.
Note

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

Tip

Questions about the app — members, initiatives, syncs, your inbox — read live workspace state, not your records.

Try askingwhat are my initiatives and which one has the highest confidence?
  • Who is herewho has access to this workspace?
  • Initiativesany initiative about the checkout drop? or which initiatives are stuck in validate?
  • Sourceshow many integrations are connected, and when did jira last sync?
  • Inboxwhat'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

The limit
Tasks you create inside Vernais are not in the graph
What it means
The graph holds records synced from connected tools. Act tasks live on the app's own board, in a separate place chat does not read.
Do this instead
Open My tasks, or the initiative's Act board.
The limit
A name with no synced records returns nothing
What it means
A person exists in the graph only once a connected tool synced a record carrying their name. It says the name is not a known teammate rather than guessing.
Do this instead
Connect the tool that holds their work, then build the graph.
The limit
A name that appears everywhere reads as a mention, not a person
What it means
When one name links to 15 or more scattered work items — often the workspace owner's own name — the lookup flags it as a frequent mention rather than a clear identity, so you are not handed a pile of tickets as an answer.
Do this instead
Add a qualifier, or ask that tool for its records directly.
The limit
It reads a bounded slice, not a full history
What it means
One person lookup reads up to 80 connected records and answers from a sample of them.
Do this instead
For a complete list, ask for the records with a filter and a limit.
Note

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?

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.

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.

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

Tip

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.

Try askinghttps://github.com/vercel/next.js where does it decide which router to use?

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.

Note

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.

The limit
Only a repo URL typed in the current message can be cloned
What it means
each message is judged on its own
Do this instead
paste the URL again with your follow-up question
The limit
A checkout lives about an hour, then it is deleted
What it means
the clock starts when it clones
Do this instead
paste the URL again to get a fresh checkout
The limit
A repo larger than 400 MB is refused
What it means
the cap covers the whole checkout
Do this instead
ask about a smaller repo, or read the file on GitHub directly
The limit
Private repos are not cloned from chat
What it means
chat clones are public and unauthenticated
Do this instead
someone holding Choose the GitHub repo for technical task analysis can approve one repo in Settings → Codebase, which Act uses for technical tasks

What it can do

Tip

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 wantWhat runsReach for it when
Find code by meaningcodebase_searchyou don't know the words the code actually uses
Find an exact stringcode_searchyou know the symbol, error text, or button label
Find where something is definedfind_definitionyou have a name and want its home
See who calls itfind_references, trace_callsyou want to follow a flow across files
Read the real linesread_fileyou need the logic, not the location
Get orientedrepo_map, list_dir, code_outlineyou 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

Tip

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.

Note

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

Bring the link with you
Less effective
can you take a look at that repo again and tell me how the retry logic works?
More effective
https://github.com/stripe/stripe-node how does the retry logic work?
The second one clones. The first one is refused, because only a URL in the current message counts — even if you pasted it two messages ago.
Ask for the flow, not the file
Less effective
read checkout.js
More effective
trace what happens after someone clicks pay in https://github.com/acme/storefront
You guessed a filename; it may not exist. The second one lets it search by meaning, then walk the call graph across every file the flow touches.
Say what a confirmed answer looks like
Less effective
is there a bug in the promo code logic?
More effective
in https://github.com/acme/storefront find where a promo code is validated and show me the lines that reject an expired one
"Is there a bug" has no finish line, so it stops at the first plausible file. The second names the thing to find and the proof to bring back.
But

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

Tip

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:

Valid

The file exists and was opened or matched this turn, and the line falls inside what was read.

Suspect

The file is real but was never opened, or the line sits outside the part that was read. Recorded quietly.

Invalid

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.

The stale doc
It found your answer in a README or an architecture file, and quoted a class that was renamed a year ago. Docs go out of date; code cannot.
Fix Ask again and say you want the source file, not the docs.
The wrong twin
Big repos hold several files named router.py and a dozen functions starting with handle. It stopped at the first plausible match.
Fix Name a neighbour — the route, the error string, the folder, or the thing that calls it.
The skipped repeat
You see a Skipped repeat step in the timeline. It asked for the same thing twice, so a guard stopped it going in circles.
Fix That is a safety net, not a failure. Give it a different angle: a real error message, a UI label, a file you know exists.

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?