Skip to main content

Metrics

The Capability Matrix: What Each AI Export Can Actually Tell You

A source-by-source reading of the AI Stats capability matrix — Verified versus Beta, Not in export versus Not parsed yet, and why a blank Claude or Gemini tile is evidence rather than a bug.

By Novus Stream Solutions Editorial Team. Published 2026-08-08. Last reviewed 2026-08-09. 6 min read.

Most AI usage dashboards publish a grid of numbers and hope you do not ask where each one came from. AI Stats publishes the grid that answers that question first: a capability matrix with one cell per supported source and metric, graded against real export fixtures rather than against a vendor marketing page.

This post is a reading guide for that matrix, and for the methodology centre that is built from the same registry. It is not a token-usage round-up. Claude web, Gemini Takeout, and ChatGPT web exports do not contain tokens or API-equivalent cost. Those cells read Not in export. They are not priced at zero.

If you want the live dashboard that these grades constrain, import a history you actually exported and open /app/dashboard. Nothing here is ambient tracking.

Why a matrix instead of a feature list

A feature list says "tokens, models, and AI-active time." A matrix says which of those three your ChatGPT zip can support, which your Claude Code JSONL can support, and which your Gemini Takeout HTML can support. Those answers are different, and pretending they are the same is how a cross-tool total becomes a fiction.

The authoritative table lives in code (capability-matrix.ts) and is locked by a contract suite that parses every sanitized fixture. The public rendering is on Integrations and on each /integrations/[provider] page. The methodology page then counts the live cells: today that is 91 source-by-metric claims across seven adapters and thirteen metrics.

Novus Stream Solutions (opens in a new tab) is the hub for every Novus app. The matrix is the original-data contribution this particular app makes to that hub: not a larger model catalog, but an honest map of what consumer and coding-agent exports actually contain.

Verified versus Beta

The provider import docs and the integrations pages grade each source Verified or Beta.

  • Verified means the adapter was confirmed against a real export shape, with fixtures in the repository. ChatGPT, Gemini Takeout, Claude Code, Codex, and Gemini CLI are in this group today.
  • Beta means the shape is recognized and the adapter runs, but the export family is still narrower or more variable than we would like. Claude web and Cursor sit here. Claude web recovers tool calls and AI-active time only when assistant content[] blocks carry them. Cursor reports tool calls only when a workspace snapshot spells each turn out as parts, and Background Agent chats are absent from regular local history.

Beta is not a disclaimer sticker. It is a grade that should change how much weight you give a total from that source when you compare it with a Verified one. The comparison view will refuse a numeric delta when the two sides were not recorded the same way.

Seven sources, thirteen metrics, and four different meanings of a blank cell — none of them a silent zero.Generated motif, seeded from this article’s slug. It is decorative and encodes no measurements.

Four meanings of a blank cell

A blank metric is not one thing. The matrix uses four states that are easy to collapse and expensive to confuse:

  • Not in export — the file does not contain the information. No future adapter release changes that. ChatGPT tokens, Claude web tokens, Gemini Takeout tokens, Claude web agents, and Gemini Takeout AI-active time all live here.
  • Not parsed yet — the file does contain it and AI Stats does not read it yet. The machine-checked matrix currently has no supported metric in this state. Every remaining gap is a property of the format or of a particular export shape.
  • Shown as AI active time — deliberately not computed, because a better measurement of the same thing is already on the page. Waiting time is the standing example: waiting on the model is the AI-active span.
  • Sometimes — some exports of this format carry the field and some do not. When yours does not, the value stays null rather than becoming a confident zero.

User active time and waiting time are permanently blank on purpose across every supported source. No export records how long a person spent reading or typing, and relabelling AI-active time as "user active" would be a lie with a friendlier name. The database columns stay so a future source with a real measurement can fill them without a migration; the dashboard tiles were removed.

What the seven sources can actually report

Read this as a summary of the matrix, not as a substitute for it. If the two ever disagree, the matrix and the adapter tests are right.

ChatGPT (Verified). Official ZIP or numbered conversations*.json. Message counts and timestamps work. Tools, agents, tokens, cost, and any working duration are absent from the format. Model names are present.

Claude web (Beta). Official account ZIP/JSON. Tool calls, AI-active time, and model names are recovered when the relevant assistant content blocks or model fields exist. The current reference shape omits model fields, so those sessions remain Unavailable rather than receiving a guessed name. Tokens, cost, and agents are absent.

Gemini web / Takeout (Verified). Google Takeout Gemini Apps activity. Activity is grouped into 30-minute windows and only Prompted rows count as prompts. The HTML form can carry responses but not model names; the JSON form can name a model but carries no answers. AI-active time, tokens, and cost are absent from both.

Claude Code (Verified). Current transcript JSONL and official OTel. Parent and subagent files merge. Tokens and turn durations depend on what the transcript actually recorded. OTel content-bearing fields are discarded on purpose.

Codex CLI/Desktop (Verified). Persisted rollout JSONL. Embedded IDs, cumulative tokens, turn durations, and tool IDs are preserved and de-duplicated. Input tokens include cache reads for this source. This is the source for which token and cost tiles can be real numbers rather than Unavailable.

Gemini CLI (Verified). Local $set.messages snapshots and official OTel. Snapshots collapse to the newest complete one. Snapshots carry no tokens, model names, or durations. Subagent launches are not recorded by either input.

Cursor (Beta). Exported Markdown and recognized SQLite snapshots. Background Agent chats are not in regular local history. A workspace snapshot reports tool calls only when its rows spell each turn out as parts.

Unknown shapes fail closed. Planned providers accept no files until they have sanitized fixtures and pass the same contract. That is why sixteen names appear on the integrations index as planned and noindex, not as greyed-out importers.

How to use the matrix when you read a dashboard

  1. Open Metric coverage on /app/dashboard before you read any total. Coverage tells you what fraction of the sessions in view actually reported the metric.
  2. Open /methodology when you need the formula, the high/low reading, and the ways that formula can mislead.
  3. Open /app/dashboard/compare when you want a delta. Comparison prints a number only when both sides were fully covered and shared adapter version, normalization version, quality, source, and calculation. Blocked rows stay visible and name the gate that fired.
  4. If a Claude, Gemini, or ChatGPT web token or cost tile is blank, believe it. Unavailable is not zero is the companion essay.

If you are building study notes from an AI-heavy week rather than measuring it, Novus Learn (opens in a new tab) turns articles, papers, and codebases into cited material. If you need synthetic files to test an importer of your own, Novus Examples (opens in a new tab) publishes specced fixtures. Neither app invents AI Stats metrics, and AI Stats does not invent theirs.

The matrix is slow to grow on purpose. Adding a provider against a guessed schema is the worst failure this product can have: a parser that silently mis-reads real user data. Until a real export is in hand, the honest cell is empty, planned, and noindex — not a zero, and not a demo number.

Was this page helpful?

Your answer stays in this browser. It is not sent anywhere, and no account or cookie is involved.