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.
Counts clicks, scrolls, forms and errors.
Scrubs, aggregates, ranks problems.
Reads Trace over MCP, edits your repo.
Trace compares the goal before and after.
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.
<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.
"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.
> /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