MonkeyTest Core is an open-source AI agent that opens a real browser, works out what a user would try on your site, does it, and hands you back a triaged bug report with screenshots. No test scripts, no selectors, no recorders. Two lines to your first run.
Prefer not to install anything? The hosted cloud has a free tier too →
$ npm install -g @mtai/monkeytest-core
$ monkeytest run https://example.com
explore crawled 8 pages
plan 4 flows a real user would try
run 3/4 flows passed
bug [blocking] Checkout never submits
observed: button click, no network call
evidence: 3 screenshots
# ship a fix, then verify it
$ monkeytest rerun
$ monkeytest diff prev latest
2 fixed, 0 new, 0 regressed Quick start
Three commands. No config file, no account, no sign-up.
Node 20+ and a real Chromium. Nothing else to configure.
Or OPENAI_API_KEY, ANTHROPIC_API_KEY, MISTRAL_API_KEY, GROQ_API_KEY — your key, your bill, your choice of model.
Crawls the site, plans the flows a real user would try, runs them, and exits non-zero if it finds a blocking bug.
Full walkthrough in the quick start guide , or read our step-by-step CLI tutorial .
The bug-finding loop
Most AI testing tools stop at finding bugs. MonkeyTest closes the loop, so you can show a bug is actually gone rather than hoping it is.
monkeytest run <url> Explore the site, plan the flows an LLM thinks a real user would try, execute them, and triage what broke.
monkeytest rerun Re-execute the exact plan from last time. No LLM re-planning, so no cost and no plan drift after you ship a fix.
monkeytest diff prev latest Compare two runs by bug fingerprint: what got fixed, what is new, what regressed, what is still broken.
Because plans are stable JSON and bugs carry fingerprints, a rerun costs no LLM tokens for planning and a diff tells you exactly what changed between two deploys.
The full engine, not a crippled community edition.
Proper exit codes, JSON output and no interactive prompts, so it drops straight into GitHub Actions or any other CI runner and fails the build when a flow regresses.
OpenAI, Gemini, Anthropic, Mistral, Groq, or any OpenAI-compatible endpoint including Ollama, vLLM and OpenRouter. Pick a different model per phase — a cheap one to explore, a smart one to plan.
Per-step screenshots, optional WebM video, console errors and failed network calls attached to every bug report, with stable fingerprints so the same bug is recognisable across runs.
The generated plan.json is stable and versioned. Review it, edit it, commit it — your test suite stops being a black box and starts being code your team can read.
Subscribe to a typed EventBus and pipe explorer, planner, runner and triager events into your own dashboard, Slack channel or internal tool.
Fork it, self-host it, embed it in your own product. The Affero clause only asks that modifications stay shareable when you run it as a service.
Free either way
Same engine, same plan format, same bug fingerprints. Pick whichever fits how you work — plans are portable between the two.
| MonkeyTest Core (CLI) | MonkeyTest Cloud | |
|---|---|---|
| Price | Free forever (AGPL-3.0) | Free tier, no credit card |
| Install required | npm + Chromium | None — runs in your browser |
| LLM cost | Your own API key | Included in the tier |
| Runs in CI | Yes, exit codes included | Yes, on paid tiers |
| Run history & dashboards | Local JSON files | Hosted, searchable, shareable |
| Browser infrastructure | Your machine or runner | Managed by us |
| Best for | Developers and CI pipelines | Founders, agencies, non-technical teams |
See the full breakdown on the pricing page.
Yes. MonkeyTest Core is published on GitHub under the AGPL-3.0 licence. There is no paid edition of the CLI, no seat limit and no telemetry gate. The only cost of running it is whatever your own LLM provider charges for the tokens the agent uses, which for a small site is typically a few cents per run.
Classic monkey testing fires random clicks and keystrokes at an app hoping to trip it up, which finds crashes but almost never finds broken user journeys. MonkeyTest keeps the name and drops the randomness: an LLM looks at your actual pages, decides what a real user would try, and executes those flows deliberately. You get reproducible plans instead of noise.
No. There are no fixtures, page objects, selectors or recorders. You give it a URL and it works out the rest by looking at the rendered pages. If you want determinism later, commit the generated plan.json and re-run that instead.
Yes, that is the main use case. The CLI exits non-zero when a blocking bug is found, so it gates a pull request like any other check. Teams commonly run it against Vercel or Netlify preview URLs so every PR gets tested by an agent before a human looks at it.
For day-to-day runs a cheap fast model such as Gemini Flash or GPT-4o-mini is usually enough for exploring and executing. For planning, a stronger model such as Claude Sonnet produces noticeably better flows. Because you can set a provider per phase, mixing the two gives you most of the quality at a fraction of the cost.
No, and it is not meant to. Deterministic tests for your critical paths are still the right tool for the paths you already know matter. MonkeyTest covers the enormous surface area nobody has written a test for yet, which is where most escaped bugs actually live.
New to the idea? Start with what monkey testing actually is , or compare the field in our round-up of monkey testing tools .