Use case

Stack traces from real users, without asking anybody to open the console.

“Could you press F12, click Console and send me a screenshot?” is a request most customers cannot complete, and the ones who try send a picture of the Network tab. The error is already in the browser when they decide to report the problem — the widget just has to have been listening.
Start freeNo credit card required.
what actually arrives
TypeError: Cannot read properties of undefined (reading 'total')
    at CartSummary (app.4f2c1.js:284:19)
    at renderWithHooks (vendor.8a1e.js:11121:18)

Chrome 131 · macOS 15.1 · 1440 × 900 @2x · Europe/Madrid
1 /cart → 2 click "Apply code"3 submit form#discount

The difference

Same bug, two reports

Nothing about the customer changed between these. The second one simply had somewhere to press that was already collecting.

Without the widget

From: a.customer@example.com
Subject: doesn't work

hi, the page just goes blank when i try to pay.
i'm on a mac. thanks

With it

TypeError: Cannot read properties of undefined (reading 'total')
    at CartSummary (app.4f2c1.js:284:19)
    at renderWithHooks (vendor.8a1e.js:11121:18)

Chrome 131 · macOS 15.1 · 1440 × 900 @2x · Europe/Madrid
1 /cart → 2 click "Apply code"3 submit form#discount

How it works

Two standard browser events, from page load

The collectors attach when the script runs, not when the widget opens — by the time somebody decides to report a problem, the thing worth reporting has already happened. It listens to window.onerror and unhandledrejection, so an async failure is not invisible, and keeps the ten most recent. Nothing leaves the page unless the person presses send. The full field list is on the widget data page.

Then hand it to your agent

A stack trace is most useful somewhere other than your inbox

Reading the trace is not the job; fixing the line it points at is. The MCP server hands the whole report — frames, browser, viewport, numbered steps and screenshot link — to Claude Code or Cursor in one call, so the agent starts from the same evidence you would have.

FAQ

Questions

How do you get a stack trace without an SDK?
The widget listens for window.onerror and unhandledrejection from the moment the script runs. Both are standard browser events, so no instrumentation of your own code is needed and nothing enters your build.
Will the frames be minified?
They arrive exactly as the browser reported them, truncated at two thousand characters. If your bundle is minified you get minified frames, so ship source maps to your production build if you want readable file names.
How is this different from Sentry?
Sentry catches every exception whether or not anybody noticed. This only sees errors on reports a person chose to file, and adds what they were trying to do. They answer different questions and pair well.
How many errors come with a report?
Up to ten, kept as a ring buffer so you get the most recent ten rather than the first ten from a tab that has been open all day. Each one carries its source file, line and column.

Break something on purpose.

Throw an error in your console, then file a report from the widget on this page and watch the frames come with it.