The open-source, self-hosted alternative to fragile E2E test suites.
Write tests in plain language. Get screenshot evidence for every run.
Cypress and Playwright make you code against DOM selectors that break when the UI changes. SkyTest Agent works differently: describe what a user would do in plain language, and a browser agent runs those steps, capturing screenshots as evidence.
It is self-hosted, open source, and uses your own API key.
Welcome.mp4
- Plain-language tests - Write test cases the way you'd explain them to a colleague. No CSS selectors or XPaths.
- Visual evidence - Every run captures screenshots and logs so you see what happened, not just pass/fail.
- Multi-session flows - Coordinate across browser roles (e.g., "Browser A" sends a message, "Browser B" receives it) for multi-user scenarios.
- Custom Playwright code - Mix AI-driven steps with your own Playwright scripts when you need precise control.
- Android Support — Run cross-platform tests on web and Android apps with a single test suite.
- MCP & Agent SKill — Use MCP to let AI coding agents generate test cases from your specs.
- Bring Your Own Key - Use your own OpenRouter API key. You pay only your LLM costs.
Example test case:
1. Open the app
2. Sign in as a user
3. Add an item to the cart
4. Verify checkout succeeds
Start Docker, then run:
npm install
cp .env.example .env.local
# Edit .env.local with your credentials
make devOpen http://localhost:3000 and sign in.
Enter your OpenRouter API key in settings and start testing!
Don't want to self-host? We're building a managed version of SkyTest.
- Environment Variables: See
.env.examplefor the required PostgreSQL, S3-compatible storage, Authgear, and encryption settings. Configure an OpenRouter or OpenAI-compatible provider for each team in the app's AI settings. - Local Development:
make bootstrapinstalls dependencies and browser tooling, starts PostgreSQL, MinIO, and Authgear, applies migrations, and seeds the local defaults.make devstarts the control plane with its maintenance, scheduler, and browser workers. Seeinfra/README.mdfor the local service topology. - Android Testing: Install
skytest-runneron a macOS host, then pair and manage the runner from Team Settings → Runners. Seeapps/macos-runner/README.mdfor CLI usage anddocs/maintainers/android-runtime-maintenance.mdfor the runtime model. - macOS CLI (Homebrew):
brew tap oursky/skytest && brew install skytest-runner
- Browsers not found: Run
make playwright-install - Database errors: Verify
DATABASE_URLand that PostgreSQL is running, then runmake db-migrate-deploy - Object storage errors: Verify the
S3_*settings in.env.local; runmake services-upwhen using the bundled MinIO service
Bug reports, feature requests, and pull requests are all welcome.
- Report a bug - Open an issue
- Request a feature - Start a discussion
- Contribute code - Fork the repo, create a branch, and open a pull request