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

  1. Analyse. The analyse_website prompt (/trace:analyse) reads get_overview, get_behaviour_summary, your goals and existing insights, and digs in with query_behaviour.
  2. Draft, then save. draft_insights measures every piece of evidence itself and refuses insights whose numbers don't hold up. The agent shows you the drafts; save_insights keeps only the ones you approve.
  3. Fix. get_insight_prompt returns a complete task: the problem, the evidence, the goal to move and acceptance criteria. /trace:fix 12 implements it.
  4. Release. update_insight_status with released. 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.