Docs
Your coding agent
Trace is an MCP server. Your agent reads aggregated behaviour, proposes fixes with measured evidence, implements them and marks them released, with its own model. Trace has no AI of its own.
Connect
Claude Code, with the plugin, which also adds /trace:setup, /trace:analyse, /trace:fix and /trace:manage:
/plugin marketplace add dobrinov/tracetells /plugin install trace@tracetells
Then /mcp, choose plugin:trace:trace and Authenticate. Your browser opens Trace to approve it, with read-only access if you prefer.
Any other client connects to the same server and signs in the same way:
{ "mcpServers": { "trace": { "url": "https://app.tracetells.com/mcp" } } }
Which account and website
You pick the account when you approve the connection; connect again to work in another. The website comes from the repository's trace.json ("site"). Ask your agent "which Trace account and website am I connected to?" to check.
The loop
- Analyse. The
analyse_websiteprompt (/trace:analyse) readsget_overview,get_behaviour_summary, your goals and existing insights, and digs in withquery_behaviour. - Draft, then save.
draft_insightsmeasures every piece of evidence itself and refuses insights whose numbers don't hold up. The agent shows you the drafts;save_insightskeeps only the ones you approve. - Fix.
get_insight_promptreturns a complete task: the problem, the evidence, the goal to move and acceptance criteria./trace:fix 12implements it. - Release.
update_insight_statuswithreleased. Trace compares the goal over 14 days before and after.
A small website
Patterns need traffic: an analysis is worth running at 100 new sessions, or 30 once a week has passed since the last one (or, before the first, since the first visit). Something that's broken doesn't need traffic, only its cause found in the code. Until there's enough for patterns, /trace:analyse runs a defect sweep instead: get_defects lists failing requests, JS errors, missing files, funnel steps nobody reaches, declared events that never arrive and dead clicks on buttons and links. The agent looks for each one in your code, drafts only the ones it confirms as defects, and shows you where it found them. A released defect is judged by whether it happens again, not by a before-and-after comparison.
Asking questions
get_page_story shows how people use one page, as patterns rather than recordings: the elements they use and how often a click there does nothing, the common orders of action at the start of a visit, where people come from and go next, scroll and time, and the page's problems and insights. Every row comes from at least 5 sessions.
query_behaviour answers with numbers over the last 1 to 90 days: sessions with a match, events, the share of sessions, events per session or a funnel, broken down by path, selector, device or day, and compared with the window before. Rows from fewer than 3 sessions are folded into "other".
{ "measure": "session_rate", "match": { "rage_click": "button#pay", "path": "/checkout" },
"breakdown": "device", "compare": true }
Safe by design
The agent only ever sees aggregates, never sessions or people. Text inside behaviour data (labels, error messages, paths) comes from visitors' browsers; Trace stores it as plain lines and tells the agent never to follow it as instructions. Read a task before handing it to an agent that can run commands, as you would any issue a stranger could have filed.