One script tag adds a Report a bug button to your app. Your coding agent gets the element the user pointed at, the error it threw, the failing request and the steps.
So fix SHOP-142 just works — in Cursor, Claude Code or Codex. No agent yet? Reports land in your inbox or tracker.
Use the “Add to Cursor” button, or add this URL as a remote MCP server. Then click Allow.
Free plan, no card
Users install nothing
localhost → production
Example. A shopper clicks Apply coupon and the order total does not change. The picker outlines the button in red because it threw a TypeError right after the click. SnagRelay sends the button, the error, the coupon request and the steps. A coding agent reads the report over MCP, edits lib/coupons.ts to read the total from the new response shape, and marks the ticket fixed.
Cursor Claude Code Codex VS Code Next.js Lovable Bolt v0 Vite Linear GitHub Jira Cursor Claude Code Codex VS Code Next.js Lovable Bolt v0 Vite Linear GitHub Jira
The gap
Your IDE’s browser sees your session. The bug happened in someone else’s.
Your agent can read the repo, run tests and change code. But what reaches it from a real user is a sentence and a cropped screenshot.
Today · what arrives
From a shopper · via support
“The coupon thing doesn’t work?? Tried 3 times.”
IMG_4021.png · cropped
Which button?
Console?
Network?
Steps?
Browser?
Your agent
I can’t reproduce this locally. Which button? Was there a console error? What was in the cart?
Back to the user. Wait. Ask again. The bug sits.
With SnagRelay · same bug
SHOP-142 · “Apply does nothing”
Element
Checkout › “Apply coupon” button
Error
TypeError: reading ‘total’ · 180 ms after the click
Source
lib/coupons.ts:27
Request
POST /api/coupons/apply → 200
Steps
Open /checkout → enter SAVE10 → Apply
Replay
The 60 seconds before the report
Your agent
Reproduced. The API now nests the total under order. Fixing lib/coupons.ts:27.
One report. No follow-up questions.
How it works
Three steps. Two aren’t yours.
You add one line once. Your users report. Your agent does the rest.
The shopper clicked Checkout › “Apply coupon” button. POST /api/coupons/apply returned 200, then 180 ms later TypeError: reading ‘total’ at lib/coupons.ts:27. The response now nests the total under order.
How is this different from my IDE’s browser or Chrome DevTools MCP?
Those see your own session on your machine — great for testing what you just built. SnagRelay captures the session of whoever hit the bug: a user on their phone, a client on production, a tester on staging, hours before you looked. Use both.
Which agents does it work with?
Cursor, Claude Code, Codex and VS Code agent mode, plus any other client that supports remote MCP servers with browser sign-in. One server URL. Your agent opens a SnagRelay page, you click Allow, and there is no token to copy.
What exactly does my agent receive?
get_issue_context returns the user’s description, the element they pointed at with the errors tied to it, AI repro steps, console errors with file and line, failed requests with full request and response bodies, environment, a screenshot and a replay link. Bodies can be fetched one at a time with get_issue_payload to keep context small.
Do I need to change my code for the element picker?
No. The picker names elements from what is already on the page — the accessible name, the role and the section around it — and outlines anything that just failed. One script tag, no build plugin.
What about privacy?
Passwords, tokens, cookies, authorization headers and emails are redacted in the browser before anything is sent. Nothing leaves the page until someone presses Send. History is kept 7 days on Free and up to a year on paid plans.
Do I need a coding agent?
No. Reports land in the SnagRelay inbox or in your tracker, and you or your team fix them from the evidence. Connect an agent whenever you want it to read and fix reports for you.
Do I need Jira or Linear?
No. Bugs land in a simple SnagRelay inbox and your agent reads them from there. Connect Linear, GitHub Issues, Jira, GitLab, Trello or Azure DevOps whenever you want.
Does it work with Lovable, Bolt, v0 or plain Next.js?
Yes. It’s one script tag (or an npm package), so it works on any web app — localhost, preview deployments and production.