Docs
Server errors
The browser shows that a request failed. Your server knows why. With the tracetells client, Trace shows both: the exception, where in your code, on which route, since which release, and how many visits it broke.
With your coding agent
/trace:setup server errors
It installs the client for your stack, creates the website's server key and tells you where to put it. Then /trace:fix server error 7 fixes one, and Trace tells you whether it stopped.
By hand
Create the key: /trace:manage create a server key, or ask an admin. Set it as TRACE_SERVER_KEY in your server's environment or secret store, never in the repository. Set TRACE_RELEASE to the commit or version you deploy, if your platform doesn't.
Rust
tracetells = { version = "0.1", features = ["axum", "tracing"] }
let _trace = tracetells::init(tracetells::Config::from_env());
let app = Router::new().route("/orders/{id}", get(show)).layer(tracetells::TraceLayer);
Panics, 5xx responses and, with TracingLayer, events logged at error level. The crate's README.
Node.js
npm install @tracetells/node import * as trace from "@tracetells/node"; trace.init(); app.use(trace.expressErrorHandler()); // Express, after your routes await app.register(trace.fastifyPlugin); // Fastify
Uncaught exceptions and unhandled rejections too. The package's README.
Ruby
gem "tracetells" # Rails: nothing else use Tracetells::Rack # Rack and Sinatra, after Tracetells.configure
In Rails it subscribes to Rails.error, so controller and job errors are reported with their route. The gem's README.
What is sent, and what never is
| Sent | Never sent |
|---|---|
| The error's class and its message, scrubbed | Request or response bodies |
| The backtrace: files relative to your project, lines, functions | Parameters and query strings |
The route template, like /orders/:id | Headers and cookies |
| HTTP method and status | Environment and local variables |
| Environment, release, runtime version | Source code and host names |
| When it happened, and how often | Who was signed in |
Emails, tokens, card numbers, IBANs and phone-like numbers are replaced in messages before they leave, and again on Trace's server. Trace stores counts per hour and one sample backtrace per group, never individual requests. Keep personal data out of exception messages anyway: no pattern catches a name.
What Trace does with them
- Groups errors by class and the first frame of your own code, so the same bug with different ids is one group.
- Ties them to visits: when browsers saw the same request fail, Trace shows how many visits it broke, on which pages, and which goals those pages feed. That's how it ranks them.
- Follows releases: new in a release, back after a fix (a regression), or stopped a week after resolving.
- Hands them to your agent over MCP, with a task prompt for each.
How the clients behave
They send from the background, in batches, at most once a second, and never slow a request. The first occurrence goes at once; repeats within a minute go as one count. When Trace can't be reached, they drop errors and back off rather than pile up. Each occurrence counts as an event towards your plan's monthly limit.