How it works

Analytics your coding agent can read.

A script measures in the browser. A server adds it up and ranks the problems. Your coding agent reads them over MCP, does the thinking and the fixing with the model you already use, and Trace checks the result.

YOUR WEBSITEThe collector

Counts clicks, scrolls, forms and errors.

TRACE SERVERTotals, goals, verdicts

Scrubs, aggregates, ranks problems.

YOUR CODING AGENTAnalyses and fixes

Reads Trace over MCP, edits your repo.

A RELEASEDid it work?

Trace compares the goal before and after.

Visitor data flows left to right as totals. Your agent only ever reads the totals.

01 · The collector

One tag, 8.4 KB.

It records pageviews, clicks, rage and dead clicks, scroll depth, time on page, form starts and submits, JavaScript errors and failed requests. It works on multi-page sites and single-page apps alike.

It never reads what people type. It keeps no ids beyond the open page, and writes nothing to the device. Each click costs about 3 microseconds, and events leave in small batches when the browser is idle.

Install the tag

<script src="https://app.tracetells.com/d.js"
        data-key="YOUR_KEY" defer></script>

// optional: your own events
trace.track("signed_up", { plan: "free" })

02 · The server

One Rust binary.

It scrubs every batch a second time and turns events into totals: per page, per element, per funnel step, per product area. Visits are told apart with a hash of address and browser, salted daily, so the same person counts again the next day unless they sign in.

SQLite to try it, Postgres for production. The dashboard ships inside the same binary.

Problems, ranked

By the number of visits they hurt, not by how loud they are.

Goals, against targets

Conversion, completion and error rates, with the target you set.

A verdict for every release

14 days before against 14 days after, with a Welch test, so a lucky week isn't called a win. Too little data, and it says so instead of guessing.

03 · Goals as code

Your goals live in your repo.

Events, goals, funnels and product areas go in trace.json, next to the code that sends them. Review them in a pull request. Check and apply them from CI.

The trace.json reference

"checkout_conversion": {
  "from": { "pageview": "/checkout" },
  "to":   { "pageview": "/checkout/success" },
  "goal": "increase",
  "target": "55%"
}

04 · Your coding agent

The analysis runs on your side.

Trace has no AI of its own. Your agent connects over MCP, reads the totals and your goals, and proposes a few fixes with their evidence. You choose which to keep. It then makes the change in your code. No agent? Every problem is also a ready-written task you can send to a developer.

Works with Claude Code, Cursor, Codex or any MCP client, with whichever model you trust.

The MCP tools, one by one

> /trace:setup
  adds the tag, writes trace.json
> /trace:analyse
  3 problems found, 2 saved
> /trace:fix 12
  card is now one link · PR opened

See it working on a real shop.