Inspiration

Every developer knows the feeling: you ship something, test the happy path, and an hour later a real user double-clicks "Buy", rotates their phone, or loses signal on the train, and the whole thing falls over. Manual QA can't imitate that kind of chaos, and test scripts only check what you already thought of. We wanted to know what would happen if we let a crowd of impatient, clumsy, unpredictable AI users loose on a site before the real ones arrive.

What it does

Paste a URL, pick how many agents and for how long, and a swarm of AI users goes after your live site. Each agent has a personality: a rage-clicker, a phone user, a form-filler typing junk, a keyboard-only user, someone on a dying connection, someone resizing the window non-stop. You watch every agent's browser live.

When something breaks (a crash, an unhandled promise, a page that scrolls sideways on mobile, a 500 error, a blank screen, a frozen tab, a broken link, script injection), you get a bug card with a screenshot, the exact steps to reproduce it, and the raw error. Click any agent and it tells you, in its own words, what it tried.

Then hit Suggest a fix. Tavily searches docs, Stack Overflow and GitHub for that exact error, and NVIDIA Nemotron 3 Ultra reads the evidence and your code and writes a diff. Apply it, press Replay to verify, and watch the bug disappear.

How we built it

  • Agents: Python + Playwright drive real Chromium browsers. Nemotron Nano on Nebius Token Factory plans each agent's next 1–4 moves as JSON from a compact page summary. It's cheap: an 8-agent, 3-minute swarm cost about $0.005. If Nano is slow or returns junk, a coverage-guided rule planner takes over instantly.
  • Detectors run after every action, deduplicate bugs across the whole run, and filter out third-party noise like ad scripts and cookie banners.
  • Fixes: Tavily finds grounded sources; Nemotron 3 Ultra (reasoning on) writes search-and-replace edits that are checked against the real files before they're shown as a diff.
  • Web app: a plain Python HTTP server that streams live browser frames and events to the page.
  • Deployment: Docker on Google Cloud Run, with a public mode that rate-limits runs and blocks internal network addresses.

Challenges we ran into

  • False alarms. Our first version caught 2 of 12 planted bugs and reported about 6 fake ones per run. Real sites are noisy. Tuning the detectors to tell real breakage from harmless noise took most of our time.
  • Trusting the AI's fixes. A diff that doesn't match the real file is useless, so every edit Ultra writes is checked against the source before anyone sees it.
  • Hosting a browser swarm for free. Most free tiers give 512 MB of RAM, and Chromium laughs at that. We ended up on Cloud Run.
  • Making a public demo safe. A tool that points browsers at any URL can be abused, so we added rate limits, capped runs, and blocking of private and internal addresses.

Accomplishments that we're proud of

  • On our benchmark site with 12 planted bugs and lots of realistic noise, 4 agents catch about 9 of 12 with zero false alarms, and 11.3 of 12 with more time.
  • On a real production site, it found a broken /enquire-now link nobody had noticed.
  • The full loop works end to end: find → reproduce → fix → verify.

What we learned

Small, fast models are great at moment-to-moment decisions when you give them a tight, well-structured view of the page; save the big model for the hard thinking. And a bug report is only as good as its repro: a screenshot plus exact steps beats a vague "it crashed sometimes" every time.

What's next for Swarm AI

Testing behind logins, running in CI on every pull request, opening GitHub issues and PRs automatically, and more agent personalities (screen-reader users, slow old devices, people who never read instructions).

Honestly, we just wanted to break our own stuff before our users did. Turns out a few dozen fake, impatient people are really good at that. 🐝

Built With

Share this project:

Updates

Submission history