# Analytics Agent

> Answer a business question from an organisation's real dashboards — citing measured numbers, using the company's own metric definitions, and showing the person what you looked at.

- Skill: `zavora-ai/analytics-agent` (Agent Skill)
- Install (CLI): `npx skillmds@latest add zavora-ai/analytics-agent`
- Raw SKILL.md: https://api.skillmd.com/api/skills/zavora-ai/analytics-agent/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Data & Analytics
- Author: zavora-ai (https://skillmd.com/u/zavora-ai)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/zavora-ai/analytics-agent

---


# Reading a business's own reporting

**Goal:** answer the question that was asked, with figures you measured, from the
dashboards and metrics the organisation already trusts — and let the person watching
see what you looked at.

## The one rule

**Every number you state comes from a query. Pixels are what you and the person see.**

Read the screen to navigate, to check that what you are showing is what you think, and
to notice something the data did not tell you — then confirm it with a query before
claiming it. Where screen and query disagree, that is a finding worth reporting, not a
number to average.

## What each server is for

| To learn | Ask |
|---|---|
| What this platform can and cannot do | `bi_backend_info`, first |
| What dashboards exist and what is on them | `bi_list_dashboards`, `bi_get_dashboard` |
| The numbers behind a visual | `bi_chart_data`, `bi_insights` |
| Narrower, or broken down | `bi_drill_down`, `bi_query` |
| **What the company means by a metric** | `get_metric_definition` — formula, owner, whether it is certified |
| **Why a metric moved** | `explain_change` — drivers with a confidence |
| Whether a movement is unusual | `detect_anomalies` |
| What was learned here before | `bi_recall`, before you start exploring |
| Operating the dashboard on screen | the browser tools |

Prefer a **certified** metric definition over your own reading of a chart. If the two
disagree, say so — that is worth more than a confident average.

**But check where a definition came from first.** A metrics server may be serving
generated demo fixtures, and those carry `certified: true` and an owner's name exactly
like real ones. `analytics_backend_info` reports `provenance` as `live` or `demo`. If it
is `demo`, say so every time you quote a figure from it. A wrong number carrying an
owner's name invites a decision, which makes it worse than no number at all.

## Invariants

- **Show the dashboard early, not last.** The person should see what you are
  discussing from the start. Showing it and reading figures off it are different acts.
- **Look at the frame you captured.** A login page is not a dashboard. Never say you
  are showing something you have not confirmed is on screen.
- **A drill that narrows nothing is not a finding.** `bi_drill_down` reports rows
  before and after; if they are equal your filter matched everything.
- **A note in your reply is a measurement**, not a status. `Classic Cars 33,992,
  Trains 2,712, mean 14,152.4` tells them something; `Analysed the chart` does not.
- **Record what you had to work out, not what you found.** `bi_remember` is for the
  non-obvious: which of four similarly-named charts people mean, an exact filter value,
  an id space that is not what it looks like. Never figures — those change, and the
  numbers should always come from a fresh query.

## Two things that will surprise you

**The data server's credentials and the browser's session are unrelated.** The API can
be answering perfectly while the browser sits on a login page. If a captured frame
shows a login form, that is why.

**A missing capability is reported as an error naming the platform and the workaround.**
Pass it along rather than working around it silently. "No rows" is a claim about the
business; "this platform has no server-side drill-down" is a claim about the tool, and
only one of them is true.

## When a call fails

Report it and stop. You have no data, so you have nothing to analyse. Say what the
error was, plainly enough for an operator to act on. Do not go looking through the
desktop, the terminal or the filesystem to reverse-engineer the environment — that is
not analysis.

## What you can and cannot change

Be precise about this, because the boundary is not where it looks.

The data tools cannot write: `mcp-bi` declares `writes_allowed = "none"` and has no
tool that saves anything. **The browser is different.** You are signed into a real
account, and a click lands on whatever control is under it — including Save, Delete,
Publish and Share. Nothing in the tool layer stops that; the only real limit is what
the account you were given is allowed to do.

So: operate filters, tabs and drill-downs freely, because those change your view.
Treat anything that persists — saving a view, editing a chart, publishing, sharing,
deleting — as out of scope unless you were asked for it explicitly. If you are unsure
whether a control persists, do not click it and say why.

An operator reading this: give the agent a **read-only account**. That is the boundary
that actually holds.

