Open-source Claude skill ยท MIT

Your users are monkeys. Bongo got there first.

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@bongo

Run both in Claude Code. Bongo then guards every change automatically. You can also call him any time: "monkey test the checkout flow".

PythonJS / TSGoRustJava ยท KotlinC#RubyPHPSwiftWeb UIsHTTP APIs
Six lanes of chaos

Bongo doesn't read your happy path.

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.

๐ŸŒ

Input chaos

Empty, huge, emoji, right-to-left text, null bytes, NaN, MAX_INT, malformed dates and JSON, and injection-shaped strings.

""โ€ฎ2โตยณ+1Feb 30
๐Ÿ”€

Sequence chaos

Wrong call order, double submit, use-after-close, retry storms. Random operation sequences are checked against a model.

close();close()undo ร—99
โšก

Concurrency chaos

Parallel calls, read-modify-write races, cancellation mid-flight, promises resolving in the "wrong" order.

Promise.all ร—50abort()
๐ŸŒช๏ธ

Environment chaos

Missing env vars, full disks, flaky or slow networks, clock skew, Turkish locales, timezones with 45-minute offsets.

ENOSPCTZ=+05:45429
๐Ÿ–ฑ๏ธ

UI chaos

A seeded Playwright monkey clicks, types, resizes, goes back and goes offline, and catches XSS, uncaught errors and white screens.

dblclickoffline320ร—568
๐ŸŒ

API chaos

Wrong methods, malformed bodies, giant payloads, type confusion and prototype pollution. It flags 5xx responses, hangs and leaked stack traces.

{"a":__proto__?limit=1e9
Live playground ยท runs in your browser

Go on. Let him loose.

These 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.


        
    bongo โ€” monkey-test (quick mode)
    ๐Ÿ’ Bongo is waiting in his tree. Press the banana.
    Runs on every change

    A monkey on Claude's shoulder.

    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.

    Claude edits code

    A tiny hook notes each changed source file. Tests, docs, config and vendored code are ignored.

    Bongo blocks "done"

    When Claude tries to finish, Bongo blocks the stop once and hands Claude the exact files to check.

    Quick monkey test

    Recon, properties, seeded chaos, then triage. It's time-boxed to about 5 minutes and every crash is reproduced and shrunk.

    Bongo Report

    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=nudge

    Never blocks. Bongo whispers a reminder after the first code edit.

    BONGO_MODE=off

    Skill only: call Bongo yourself with "monkey test this". Per-project via .bongo.json.

    The Bongo Report

    Bananas, not vibes.

    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.

    ๐Ÿ’ Bongo Report: examples/buggy-utils/src (targeted)

    "Ooh ooh! I bought five plums at $19.99 and the cart charged me $99.94999999999999."
    31/100๐ŸŒ๐ŸŒ Shaky: Bongo is swinging from the chandeliers
    Thrown: ~13,150 chaos cases across 18 properties ยท seed 42 ยท real run of this repo's example
    highThe documented example fails
    slugify("Hello World!") โ†’ "hello-world-": only the leading hyphen is stripped.
    high"1.5h" parses as 5 hours
    parseDuration("1.5h") === 18000000: unknown characters are silently skipped, so "-5m" becomes +5m and "abc" becomes 0.
    highCart totals drift off the cent
    add("plum", 19.99, 5) โ†’ 99.94999999999999. fast-check shrank a random add/remove sequence down to this one call.
    mediumNon-Latin titles vanish
    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

    Survived Bongo? Show it off.

    Bongo tested badge
    
              
    Share on X
    Built to be trusted

    Chaotic monkey. Strict handler.

    ๐Ÿ”ฌ

    Prove every banana

    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.

    ๐Ÿ›Ÿ

    Safe by default

    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.

    ๐ŸŽฒ

    Reproducible chaos

    Every generator is seeded. Re-run with the same seed and get the same mayhem. Confirmed bugs become regression tests in your real suite.

    FAQ

    Questions, peeled.

    Won't this slow Claude down?

    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.

    Can it loop forever?

    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.

    Which languages?

    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.

    Does it work on claude.ai or the API?

    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.

    Can I make Bongo less silly?

    Yes. Say "no persona" or set BONGO_VOICE=off. The report stays the same; it just drops the jokes. Bongo will sulk, privately.

    Is it free?

    MIT licensed, forever. Bananas welcome: star the repo, add the badge, send a PR with a new chaos trick.

    Bongo the monkey

    Ship code that survived the monkey.

    Two commands. Then every change Claude makes gets a visit from Bongo.

    Install Bongo โ˜… Star on GitHub