Reading the answer
Tool calls, charts, tables, citations — how to trust what the Agent tells you, and how to push back when it's wrong.
Every Agent answer is a short narration with receipts. The narration is what the Agent thinks happened. The receipts — tool calls, tables, charts — are what it actually did. If you trust anything, trust the receipts.
Anatomy of an answer
| SKU | Product | Margin Δ |
|---|---|---|
| SKU-1047 | Oat Milk 1L | −$4,120 |
| SKU-0912 | Cold Brew | −$2,640 |
| SKU-2238 | Matcha 50g | −$1,660 |
Five things are on screen here:
- Tool call rows (grey, mono font) — each one names the tool, a one-line description, and how long it took.
- Narration — what the Agent thinks the data shows.
- Data rendering — tables, charts, maps. Live markup, not screenshots.
- Bolded claims — the Agent uses bold to highlight the single thing you should take away.
- Interpretation — the sentence after the data, explaining why it matters.
Read in this order: tool calls → data → narration. Not the other way around. The narration can be wrong; the data usually isn’t.
Tool calls
Each tool call shows:
✓ tool_name · one-line description · duration
- The ✓ means it succeeded. ✗ means it failed — the Agent usually recovers and tries again, but a failed row is worth clicking.
- The tool_name tells you what domain the call belongs to (
sql.query,python.analyze,app.create,watch.create,fetch.get, etc.). - The description is what the Agent was trying to accomplish, not the raw arguments.
- Click any row to expand it: you’ll see the exact query / code / payload that was run, and the raw result before the Agent interpreted it.
Editable: once a row is expanded, you can change the query and re-run it. The Agent uses the new result in subsequent narration.
Data renderings
Three shapes the Agent uses:
- Tables — when the answer is rows. Sortable by column, exportable as CSV.
- Charts — bars for comparison, lines for time series, small multiples for breakdowns. All live markup — crisp at any zoom, theme-aware.
- KPI cards — for one-number answers. Big value, small delta, context underneath.
You can change the rendering by asking: “show this as a line chart instead” or “flatten this to a table.” The Agent respects the ask without re-running the query.
Citations and provenance
Good data hygiene means every number has a source. The Agent tracks it automatically.
- Hover a number in the narration — a small tooltip shows which tool call produced it.
- “Show me the query” — any time, in any turn. The Agent opens the relevant tool call inline.
- Copy with provenance — the copy-to-clipboard action for a table copies the rows + a comment block with the SQL used to produce them.
This matters most when you’re writing a Report or pasting results into a shared doc. Sourceable numbers are trustable numbers.
When the Agent flags uncertainty
The Agent isn’t shy about saying when it doesn’t know:
- “The data is inconsistent here.” — usually means timezone or duplicates. Click the tool call.
- “This is based on a sample — want me to run on the full dataset?” — happens on very large tables. Say yes if the sample’s conclusion matters.
- “I can only see data from
.” — integration or upload boundary. The Agent won’t fabricate what’s missing. - “These two data sources disagree.” — common with GA4 vs Stripe revenue, or webhooks vs integrations. The Agent surfaces the gap and offers both numbers.
Take these seriously. They’re the Agent doing the right thing.
Pushing back
When you think the Agent is wrong:
- “That doesn’t look right” — ask the Agent to recheck. It’ll re-run with a narrower sanity query.
- Give a known-correct value. “Revenue was $42K last week, not $38K — find the discrepancy.” It’ll trace the gap.
- Challenge the method. “Is this comparing like with like? Last week had one extra business day.” The Agent adjusts and re-runs.
You’re not being rude. This is how the Agent gets better inside a single session.
When to inspect the SQL yourself
You don’t need to read every query — but for the answers you’re about to share with someone else, spending 30 seconds reading the SQL is cheap insurance.
Things to look for:
- Joins that might explode rows.
LEFT JOINon a non-unique key duplicates revenue. - Missing filters. An
updated_at > now() - interval '7 days'is right; no filter at all is wrong. - Wrong aggregation.
AVG(price)vsSUM(price) / COUNT(*)— usually the same, sometimes not (NULLs are treated differently). - Timezone drift. If dates in the result are off by a day, the Agent is probably using UTC and your data is in local time.
If you spot something off, you can edit the SQL in place. The Agent re-runs and updates the narration.
Exporting the answer
Every answer is exportable:
- Copy — copies the narration and the data.
- Save as Report — the narration + charts become a Markdown page. See Reports.
- Download CSV — table data only.
- Screenshot — the answer panel is screenshot-friendly; use your OS tool.
- Link to turn — each turn has a stable URL; copy it and paste in Slack to show a teammate exactly this answer.
Next steps
- Asking questions — the other half of the loop.
- Split view & artifacts — what happens when an answer is too big for the chat.
- Reports — turn this answer into something you (or a teammate) can re-read later.