Skip to Content
v1.32.0 · shipped See what shipped. Read the changelog →

The bug mediator for AI-built apps

Your AI wrote it. Mushi tells you why it broke.

For solo builders shipping Cursor- or Claude-written apps to real users. When someone hits a bug, Mushi turns what they felt into a plain-English diagnosis and a paste-ready fix in your editor. Sentry starts from what the code threw; Mushi starts from what the user felt.

One queue for every bug. Sentry flows in, fixes flow out. Open source.

Free Cloud: 50 diagnoses a month, no credit card. Self-hosting is free. Star on GitHub

This is what a diagnosis looks like

A user writes one or two sentences about what went wrong. Mushi reads them with the screenshot, console and network tail, and writes back a plain-English title, a severity, the likely cause and a suggested fix. Below is a real one.

The report
After finishing the daily lesson the celebration sheet shows '+0 XP earned today' but my streak counter on the home screen incremented by 1. … Also the haptic 'tada' on the celebration sheet that used to fire is silent now. …
Mushi’s diagnosis

Celebration screen shows +0 XP and haptic feedback is silent after lesson

  • severity high
  • category bug
  • confidence 0.82
Likely cause
… The XP value passed to the CelebrationSheet is read from state or props before the XP award async operation resolves, resulting in a stale 0 value being displayed … The haptic 'tada' feedback call is either gated on the XP value being non-zero, is invoked before the component is fully mounted, or … missing/unreachable on this code path entirely.
Suggested fix
… Ensure the XP earned value is sourced from the resolved result of the lesson-completion API call … Guard against rendering '0' as a fallback when the value is undefined/null — use a loading indicator instead. … Verify the haptic 'tada' trigger is called unconditionally on sheet presentation … and is not gated behind the XP value being truthy.
In your editor
Your agent calls get_fix_context and gets one paste-ready fix prompt: this diagnosis, the reproduction steps, the suggested fix and the relevant code. No second LLM key.
Pull a diagnosis into Cursor or Claude Code →
Real classifier output from the public demo project, 2026-09-20, trimmed where marked with an ellipsis (numbering and headings inside the answer included). The report itself is a sample we wrote to resemble a real one. A diagnosis is a model’s reading and can be wrong; check it before you merge.

What happens after a user reports something

Step 1

User reports

On glot.it, a learner shakes the phone instead of emailing support. Mushi keeps the screen and what they were doing.

Step 2

Plain read

Severity and cause in English you already use — not a raw stack trace.

Step 3

One row

Twenty reports about the same broken checkout button collapse to one issue.

Step 4

Draft PR

Optional: an agent opens a PR on your repo. You merge, edit, or ignore it.

Get started in 60 seconds

Run the wizard. It detects your framework, installs the SDK, writes env vars, and prints the snippet. When something breaks in prod, the report lands in your queue with a plain-English read on the cause and what to change. Pull it into your editor over MCP.

  1. Step 1Run one commandThe wizard detects your framework, installs the SDK, and writes your env vars.
  2. Step 2Send a test report (or ship and wait)When a user hits a bug, the report lands with a plain-English read on the cause.
  3. Step 3Pull the fix into your editorCursor or Claude Code picks it up over MCP — paste the fix, merge, done.
npx mushi-mushi
detects framework · writes env · prints snippet
npx mushi-mushi setup --ide cursor
ask Cursor: "what's broken in prod?"

50 diagnoses/month on the free tier — no card. Self-host in under five minutes if you want.

See it in action

Admin console, the SDK on a real app (glot.it), and light/dark screenshots — click a frame to open the live surface.
Console triage · for operators who need the queue, not another IDE tab · · open live demo ↗
Real users · shake / tap report on glot.it, a Thai-learning app we run in prod · · open live demo ↗
Dashboard· light and dark stills of the same cockpit · · open live demo ↗
One report· screenshot + plain read + fix timeline · · open live demo ↗

What this is (and is not)

Mushi Mushi is the bug mediator for AI-built apps, an open-source bug-reporting SDK and queue: plain-English diagnosis + a ready fix, in your editor.

Built for solo founders who ship with AI and lose afternoons debugging code they did not fully write. Works inside your editor — not another dashboard. Sentry, Linear, and Slack plug into the same queue; none of them are required to start.

Get started with the SDK

Pick the path that matches what you are doing right now — each card links to the right next step.

Install in your framework

Classification lands in about 10 seconds today; we are chasing sub-10. Pick a starting point:

One queue. Sentry flows in, fixes flow out.

Sentry is built around what the code threw, with a User Feedback widget and replay alongside. Mushi starts from what the user reported, ingests Sentry’s errors too, explains each one in plain English, and hands your agent a fix prompt to start from. With or without Sentry.

Sentry is one on-ramp of several. Bugs come in from your users, your monitoring and your voice; fixes and status go out to your editor, your coding agents, your tracker and your chat. Nothing has to be ripped out.

QuestionSentry aloneMushi
What it seesErrors and performance, plus Session Replay and a User Feedback widgetUser reports from the widget with a screenshot, plus the errors Sentry catches, in one queue
What lands in your queueA stack traceA short user note plus the screenshot they were looking at
Repeat bugsRepeat events of the same error group into one issueRepeat user reports of the same broken button collapse to one row, even when nothing threw
What you learn from fixesA resolved issue reopens as a regression if it recurs; there is no lessons file for your editorPast fixes become rules your editor sees on the next PR (.mushi/lessons.json)
Closing the loopResolve by hand, from a commit that references the issue, or in a release; Seer, the paid AI debugging add-on, is on Team and aboveA draft PR from your agent; merging it resolves the linked Linear issue, and the linked Sentry issue once the Sentry plugin is on (Indie and above, or self-hosted)
Reporter attributionThe user you set with setUser, or the name and email on a feedback submission; no credit when it is fixed"Fixed by Kenji" in the changelog and an SDK toast, once Releases is enabled
From your IDESentry's MCP server lets Cursor or Claude Code read issues and ask SeerCursor reads the report + relevant lessons and proposes the diff
Where it runsTheir cloud, or yours with getsentry/self-hosted (no Seer)Yours, ours, or both

See Concepts → Architecture for the wire-level sequence diagram and component-by-component spec.

Pricing you can predict

You pay per diagnosis, not per event. Duplicates collapse, noise is filtered, and both are free. Every paid plan has a spend cap.

  • Free Cloud$0Diagnoses: 50 / mo
  • Indie$15 / moDiagnoses: 500 / mo
  • Pro$49 / moDiagnoses: 2,000 / mo
  • Self-hostFree foreverDiagnoses: Unlimited (your own LLM key)
Full pricing and the estimator →

Frequently asked questions

It can be, or it can run alongside Sentry. Sentry is built around what the code threw, with a User Feedback widget and replay alongside. Mushi starts from what the user reported, ingests Sentry's errors too, explains each one in plain English, and hands your agent a fix prompt to start from. One queue, with or without Sentry.

Run the 60-second proof

Need SSO, audit trails, or adapters for a team? Setup notes live in the operators docs on GitHub. Operators docs →

Shipped an app an AI mostly wrote, and hear about bugs from users? Tell us what you do with those messages today. GitHub Discussions →