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
MIT-licensed SDKs · self-hostable · no second LLM key
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.
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. …
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_contextand gets one paste-ready fix prompt: this diagnosis, the reproduction steps, the suggested fix and the relevant code. No second LLM key.
What happens after a user reports something
User reports
On glot.it, a learner shakes the phone instead of emailing support. Mushi keeps the screen and what they were doing.
Plain read
Severity and cause in English you already use — not a raw stack trace.
One row
Twenty reports about the same broken checkout button collapse to one issue.
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.
- Step 1Run one commandThe wizard detects your framework, installs the SDK, and writes your env vars.
- 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.
- Step 3Pull the fix into your editorCursor or Claude Code picks it up over MCP — paste the fix, merge, done.
npx mushi-mushidetects framework · writes env · prints snippetnpx mushi-mushi setup --ide cursorask 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.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.I use Cursor / Claude
Connect Mushi to your editor first — read reports and pull fix prompts without leaving the window.
npx mushi-mushi setup --ide cursorI have a web or mobile app
Drop in the SDK, file the first report, get a plain-English read in about 10 seconds.
npx mushi-mushiI operate the console
Create a project, connect GitHub, and walk through the onboarding checklist.
mushi login && mushi status
Install in your framework
Classification lands in about 10 seconds today; we are chasing sub-10. Pick a starting point:- Incident loopStart here
npx mushi-mushiBroken prod → plain-English read → paste-ready fix prompt in Cursor.
- MCP serverEditor-first
npx mushi-mushi setup --ide cursorAsk your editor what broke — fix briefs from Claude, Cursor, or Codex. No second LLM key.
- React
npx mushi-mushiWizard installs the SDK, writes env vars, optional test report.
- MobileMobile
npx mushi-mushiReact Native and Capacitor: shake-to-report and an offline queue. iOS, Android, and Flutter SDKs in preview.
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.
Bugs come in from
- Your usersWidget or shake-to-report, with a screenshot and the console tail
- SentryAn issue-alert webhook drops errors into the same queue
- Datadog · Bugsnag · Crashlytics · moreMonitoring webhooks translated into reports by @mushi-mushi/adapters
- Your voiceDictate a bug from an iOS Shortcut, Slack, or a Telegram bot
One queue: deduplicated, diagnosed in plain English, remembered as lessons
Fixes and status go out to
- Your editorCursor or Claude Code reads the diagnosis and fix prompt over MCP
- Cloud coding agentsA Cursor Cloud Agent drafts the fix and opens a PR
- Linear · Jira · GitHub IssuesAn issue is filed when a report is classified
- Slack · Discord · TeamsSlack gets a card with buttons to dispatch a fix or resolve
The SDK, the widget, the diagnosis and the MCP server work on Free Cloud. Plugins need Indie or above on Mushi Cloud, or a self-hosted stack.
| Question | Sentry alone | Mushi |
|---|---|---|
| What it sees | Errors and performance, plus Session Replay and a User Feedback widget | User reports from the widget with a screenshot, plus the errors Sentry catches, in one queue |
| What lands in your queue | A stack trace | A short user note plus the screenshot they were looking at |
| Repeat bugs | Repeat events of the same error group into one issue | Repeat user reports of the same broken button collapse to one row, even when nothing threw |
| What you learn from fixes | A resolved issue reopens as a regression if it recurs; there is no lessons file for your editor | Past fixes become rules your editor sees on the next PR (.mushi/lessons.json) |
| Closing the loop | Resolve by hand, from a commit that references the issue, or in a release; Seer, the paid AI debugging add-on, is on Team and above | A 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 attribution | The 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 IDE | Sentry's MCP server lets Cursor or Claude Code read issues and ask Seer | Cursor reads the report + relevant lessons and proposes the diff |
| Where it runs | Their 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)
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.
No. Mushi is standalone by default. If you already run Sentry, point an issue-alert webhook at Mushi and errors land in the same queue as user reports — deduped, diagnosed in plain English, and resolved back into Sentry when the fix merges.
It runs a setup wizard that detects your framework (React, Next.js, Vue, Nuxt, Svelte, Angular, React Native, Expo, Capacitor, or Node), installs the matching SDK, writes your env vars, and prints the snippet to paste.
Connect your editor over MCP with `npx mushi-mushi setup --ide cursor`. Bug reports arrive as plain-English diagnoses your agent can read, and the fix prompt is ready to apply without leaving the editor.
Yes — SDKs are MIT-licensed and the server is AGPLv3. You can self-host the whole stack with one command, and the free cloud tier includes 50 diagnoses a month with no card.
Web: React, Vue, Svelte, Angular, and any site via the browser widget. Mobile: React Native and Capacitor. Server: Node. One wizard installs any of them. Native iOS, Android, and Flutter SDKs are in preview and install from the GitHub repo.
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 →