Claw through bugs before your users do.
Crawlix is an open-source autonomous QA agent that spawns AI-powered user personas and unleashes them on your product. Each persona navigates independently, makes real decisions, hits dead ends, and finds bugs - without you writing a single test script.
It also ships with crawlix generate โ a polyglot unit test generator that reads your source code and writes native test scripts for any language (Python, Rust, Go, TypeScript, and more).
Crawlix spawns multiple AI agents simultaneously. Each one opens your app in a real browser, reads the UI, and navigates toward the goal exactly as that type of user would behave - including their mistakes, impatience, and confusion. When they find something broken, confusing, or unexpected - they report it.
๐พ Crawlix - Claw through bugs before your users do.
target โ http://localhost:3000/
goal โ Check the landing page is everything working fine
agents โ First-Timer, Impatient, Power User, Adversarial, Non-Native Speaker, Slow Network
โ First-Timer 2 critical ยท 3 warnings 18 steps ยท 12.3s
~ Impatient 1 warning 6 steps ยท 4.1s
โ Power User no findings 22 steps ยท 15.7s
โ Adversarial 3 critical 14 steps ยท 9.2s
~ Non-Native 106 warnings ยท 1 info 10 steps ยท 27.5s
~ Slow Network no findings 4 steps ยท 27.7s
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ
โ ๐พ Crawlix - run complete โ
โ โ
โ 1 critical 106 warnings 1 info โ
โ โ
โ 0 passed 0 stuck 6 incomplete โ
โ โ
โ total time โ 539.8s โ
โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
๐ report saved โ ./crawlix-reports/report-2026-05-24.md
No test scripts. No selectors. No maintenance.
npm install -g crawlixRun once. Crawlix asks for your LLM provider and API key - remembers it forever.
crawlix setupDuring setup you can configure:
- A primary provider (required)
- A fallback provider โ used automatically if the primary fails
- Round robin providers โ load is spread across multiple providers to avoid rate limits
Config is saved to ~/.crawlix/crawlix.config.json.
Supported providers:
| Provider | Notes |
|---|---|
| Groq | Fast inference, free tier available |
| Gemini | Google's models |
| Cerebras | Ultra-fast inference |
| Mistral | European models |
| OpenRouter | Access to 100+ models |
| Ollama | Fully local, no API key needed |
| OpenAI | GPT-4o and family |
| Anthropic | Claude models |
| Custom | Any OpenAI-compatible API |
You can provide Crawlix with context about your application so the agents can make smarter decisions.
Create a CONTEXT.md file inside a .crawlix folder at your project root:
your-project/
โโโ .crawlix/
โ โโโ CONTEXT.md
โโโ src/
โโโ ...
Crawlix also looks for CONTEXT.md at the project root if .crawlix/CONTEXT.md doesn't exist.
Example CONTEXT.md:
# My App Context
This is an e-commerce web app. Test the main checkout flow.
- Stack: Next.js, Postgres
- Auth: Required โ use test@example.com / password123
- Off-limits: Do not delete user data or submit real orders# Run all built-in agents against your app
crawlix run --url https://myapp.com --goal "complete the signup flow"
# Run specific agent(s) only โ comma separated
crawlix run --url https://myapp.com --goal "login" --agent first-timer,adversarial
# Run headed โ watch agents navigate in a real browser window
crawlix run --url https://myapp.com --goal "checkout" --headed
# Control max steps per agent (default: 100)
crawlix run --url https://myapp.com --goal "find pricing" --steps 15
# Control how many agents run in parallel (default: 2)
crawlix run --url https://myapp.com --goal "test signup" --concurrency 1
# Spread load across multiple providers to avoid rate limiting
crawlix run --url https://myapp.com --goal "test signup" --round-robin
# List all available agents
crawlix agents
# reconfigure your LLM provider
crawlix setup| Agent | Behavior |
|---|---|
first-timer |
Never seen this app. Reads everything carefully. Gets lost easily, clicks whatever looks obvious. |
impatient |
Skips everything. Rage-clicks. Abandons if stuck for more than 2 steps. |
power-user |
Tries every edge case, advanced flow, keyboard shortcut, and boundary condition. |
adversarial |
SQL injection, XSS attempts, malformed inputs, broken sequences, ID tampering. |
non-native |
Misreads labels, confused by jargon and idioms. Tests copy clarity ruthlessly. |
slow-network |
Throttled connection. Finds missing loading states and timeout issues. |
Drop a JSON file into .crawlix/agents/ in your project root:
{
"name": "doctor",
"description": "Medical professional, time-pressured, technically literate",
"systemPrompt": "You are a busy doctor with 2 minutes between patients. You know what you want, you don't read instructions, and you get frustrated fast if the UI isn't obvious.",
"patience": 4,
"aggression": 3,
"readingBehavior": "skim"
}Crawlix picks it up automatically on the next run. No code, no imports, no build step.
crawlix run --url https://myapp.com --goal "book an appointment" --agent doctorValid readingBehavior values: thorough, skim, skip.
After every run, Crawlix generates an AI-powered markdown report saved to ./crawlix-reports/.
The report includes:
- Executive summary
- Critical issues with suggested fixes
- Warning patterns across agents
- Agent performance breakdown
- Prioritized recommendations
Crawlix reports three severity levels:
| Severity | Meaning |
|---|---|
critical |
Broken element, crash, security issue, complete blocker |
warning |
Confusing flow, missing feedback, slow response, unclear copy |
info |
Minor friction, accessibility gap, copy improvement |
Crawlix can also analyze your source code and generate native unit tests for any language.
# Analyze specific files โ generates the right test framework automatically
crawlix generate src/api.py src/utils.py --out ./tests
# Pass multiple paths (files or directories)
crawlix generate src/lib/ src/api.ts --out ./tests
# Scan the entire repository (requires interactive confirmation due to token usage)
crawlix generate --full-scan --out ./tests
# Use round robin providers to spread the analysis load
crawlix generate src/api.py --round-robin --out ./testsCrawlix automatically detects the language and picks the right framework:
| Language | Framework |
|---|---|
| Python | pytest |
| Rust | cargo test |
| Go | go test |
| TypeScript / JavaScript | vitest / jest |
Smart Dependencies: Crawlix dynamically detects your package manager (via lockfiles like pnpm-lock.yaml or uv.lock) and automatically prompts you to install the exact test framework dependencies needed for the generated tests.
Token safety: Crawlix automatically ignores common heavy folders (node_modules, venv, target, .next, __pycache__) and binary files. It also fully respects your project's .gitignore rules โ so gitignored files are never sent to the LLM.
The --full-scan flag will prompt you to confirm before it reads the entire repository:
โ ๏ธ WARNING: You are about to scan the entire repository.
This will read all text files in the project and may consume a large amount of LLM tokens.
? Are you sure you want to continue with a full scan? (y/N)
Traditional QA tools require you to write and maintain selectors, flows, and assertions. They break when your UI changes. They only test paths you already thought of.
Crawlix's web agents don't know your app. That's the point. They find the paths you didn't think of โ the ones your real users will find on their own.
For backend and non-web code, Crawlix takes the opposite approach: use crawlix generate to have the AI read your source and write the unit tests for you.
- Web testing (Playwright)
- AI-generated reports
- Custom agents via JSON
- Unit test generation (polyglot)
- API testing (no UI)
- Mobile testing (Appium)
- Desktop testing (Electron / WinAppDriver)
- CI/CD integration (GitHub Actions)
- HTML report export
Contributions are welcome - bug fixes, new agents, adapter improvements, or anything that makes it better. Please see CONTRIBUTING.md for details on how to get started.
MIT - see LICENSE
