kensaurus

Field note · Open-source bug reports

From “this is broken” to a fix PR I merge by hand: Mushi Mushi

Mushi Mushi catches the bugs users feel but error trackers miss, diagnoses them and drafts a fix PR. How it works, why I still merge by hand, and what's free.

Kenji Sakuramoto · kensaurus合同会社 ·

A tester on my household-budget app, yen-yen, reported that on the Transactions screen the fixed header covered the first transaction row. It was a layout bug, so nothing threw, and my error tracker had nothing to show. The row was still hidden.

Mushi Mushi (虫虫) is my attempt to close the gap between errors that throw and bugs that users feel. It is an open-source bug reporter, built for people who ship fast with Cursor or Claude Code.

What happens to one report

With the SDK in your app, users get a small bug widget. Someone taps it, types a sentence, and sends it. Then:

The Mushi console home: a banner reading Nothing waiting to triage, 9 reports received in the last 14 days; an SDK upgrade notice; TOP 3 TO TRIAGE with two classified reports; and a team activity list below
Home: what needs a look comes first (live console, captured 2026-10-15)
The Bugs to fix screen: severity cards reading Critical 0, High 2, Medium 1, Low 4; a note that the-wanting-mind's chapter 3 page is the most fragile area; status filters; and the list of reports
Bugs, counted by severity (live console, 2026-10-15)
The Fixes screen: cards for fix attempts in the last 30 days, then a list of stopped dispatches, each marked Failed with the reason review_failed: the proposed change only adds or removes comments, which is not a fix
Fix attempts. A change that only adds comments is stopped as not a fix (live console, 2026-10-15)

All three are my own account, and every report on them is about one of my own apps, the-wanting-mind.

Why I still click merge

A fix opens as a draft pull request, and CI runs on it. The merge stays manual. The header comment of the fix worker states the rule: a human confirms the merge, and nothing auto-merges.

When someone reports a bug and later gets a "fixed" notice, they learn that the app is looked after. A fix that changes the wrong thing and breaks something else teaches them the opposite. A wrong fix costs more than a slow one, so I made the path from report to reviewable PR fast and kept the last call for myself.

The draft Mushi opened for the header bug, yen-yen #68, is public. I closed it without merging. On 2026-10-16 it opened two more drafts on glot.it, #179 and #180. One only added a note that the error needed human review. I closed both the same day without merging.

What's free, and what costs money

The SDKs are MIT: @mushi-mushi/web for any site, plus React, Vue, Svelte, Angular, React Native, Capacitor and Node. The CLI and the MCP server are MIT too. npx mushi-mushi detects your framework, installs the SDK and sends a test report.

The server is AGPLv3. You can host it yourself for your own product at no cost, with your own LLM key and no diagnosis cap. The one exception is the Enterprise Edition under packages/server/ee/: its source is public, but production use needs a commercial license.

On the hosted service, Free Cloud covers 50 diagnoses a month with no card. Reports are kept for 7 days, and at 50 it stops diagnosing new reports until the next month. Indie is US$15 a month, Pro is US$49 a month, and Enterprise is by contact. Mushi is still in beta, and the console says so at the top.

See it in the exhibit hall