Bongo is a chaos-testing monkey for Claude. Every time Claude changes code, Bongo throws cursed unicode, double clicks, dead networks and -0 at it. Then he reports only the bugs he can prove.
โบ /plugin marketplace add Devenio/bongoโบ /plugin install bongo@bongoRun both in Claude Code. Bongo then guards every change automatically. You can also call him any time: "monkey test the checkout flow".
Unit tests check what you thought of. Bongo checks what you didn't. He picks the right lanes for your code and writes real, seeded property-based tests in your own framework: Hypothesis, fast-check, Go fuzzing, proptest, jqwik and more.
Empty, huge, emoji, right-to-left text, null bytes, NaN, MAX_INT, malformed dates and JSON, and injection-shaped strings.
""โฎ2โตยณ+1Feb 30Wrong call order, double submit, use-after-close, retry storms. Random operation sequences are checked against a model.
close();close()undo ร99Parallel calls, read-modify-write races, cancellation mid-flight, promises resolving in the "wrong" order.
Promise.all ร50abort()Missing env vars, full disks, flaky or slow networks, clock skew, Turkish locales, timezones with 45-minute offsets.
ENOSPCTZ=+05:45429A seeded Playwright monkey clicks, types, resizes, goes back and goes offline, and catches XSS, uncaught errors and white screens.
dblclickoffline320ร568Wrong methods, malformed bodies, giant payloads, type confusion and prototype pollution. It flags 5xx responses, hangs and leaked stack traces.
{"a":__proto__?limit=1e9These functions look fine and would pass a typical code review. Press the button and Bongo fuzzes them right here in your browser, shrinking every crash to a minimal repro.
The plugin ships a skill and a pair of hooks. Claude can't say "done" on new code until Bongo has had a go. Trivial edits get waved through.
A tiny hook notes each changed source file. Tests, docs, config and vendored code are ignored.
When Claude tries to finish, Bongo blocks the stop once and hands Claude the exact files to check.
Recon, properties, seeded chaos, then triage. It's time-boxed to about 5 minutes and every crash is reproduced and shrunk.
You get a banana score, verified findings with minimal repros, and regression tests for anything fixed.
BONGO_MODE=gate (default)Blocks the stop once per batch of changes. Safe from loops by design.
BONGO_MODE=nudgeNever blocks. Bongo whispers a reminder after the first code edit.
BONGO_MODE=offSkill only: call Bongo yourself with "monkey test this". Per-project via .bongo.json.
Every run ends with a scored, scannable report. A failing test is only a suspect. Bongo reproduces it, shrinks it and checks it against the contract before it counts.
slugify("Hello World!") โ "hello-world-": only the leading hyphen is stripped.parseDuration("1.5h") === 18000000: unknown characters are silently skipped, so "-5m" becomes +5m and "abc" becomes 0.add("plum", 19.99, 5) โ 99.94999999999999. fast-check shrank a random add/remove sequence down to this one call.slugify("ๆฅๆฌ่ช") โ "": every CJK, Arabic or Persian title gets the same empty slug.โฆplus 3 more, including string quantities that concatenate ("2" โ "021"). ๐ช Survived: format โ parse round-trip for 1,000 integers up to 2โตยณโ1, and 120 hostile SKUs such as __proto__.
| 95โ100 | ๐๐๐๐๐ Bongo-proof |
| 80โ94 | ๐๐๐๐ Sturdy |
| 60โ79 | ๐๐๐ Wobbly |
| 30โ59 | ๐๐ Shaky |
| 0โ29 | ๐ Banana peel |
Reproduce, shrink, verify against the contract, then classify. This follows agentic property-based testing research, where a reflection step cut false positives. Unverifiable hunches get their own "suspicious" section.
Bongo works only on localhost and temp dirs. The scripts refuse remote hosts, the UI monkey avoids "Delete", "Pay" and "Log out", and the HTTP monkey skips DELETE unless you say --reckless.
Every generator is seeded. Re-run with the same seed and get the same mayhem. Confirmed bugs become regression tests in your real suite.
Quick mode is time-boxed to about 5 minutes and covers only the files Claude just changed. Trivial edits like comments, formatting or config get a one-line "nothing to monkey with". If you want zero friction, set BONGO_MODE=nudge or off.
No. The gate fires once per batch of changes. It honors Claude Code's stop_hook_active flag and forgets edits made during Bongo's own run.
Any. Bongo prefers whatever your project already uses: Hypothesis, fast-check, Go native fuzzing, proptest, jqwik, Kotest, FsCheck, Eris and SwiftCheck. Without a library he falls back to a seeded loop. The UI and HTTP monkeys need Node 18+, and the UI one also needs Playwright.
The skill does. Zip skills/monkey-test and upload it under Settings โ Capabilities โ Skills, or via the Skills API. The automatic "every change" hooks are a Claude Code feature.
Yes. Say "no persona" or set BONGO_VOICE=off. The report stays the same; it just drops the jokes. Bongo will sulk, privately.
MIT licensed, forever. Bananas welcome: star the repo, add the badge, send a PR with a new chaos trick.
Two commands. Then every change Claude makes gets a visit from Bongo.