Connect Claude or OpenAI and a failing report gets an AI Analysis card. The agent reads the failure, its recent history and a screenshot, tells you whether it's a real bug, a flake, or a mistake in the test itself, and for a test-code bug, opens a real pull request with the fix.
The agent weighs the failure against each scenario's recent pass/fail history before it decides. A re-run is slow and takes a node away from the team, so it only reaches for one when the history alone is inconclusive.
The E2E test itself is wrong: a stale selector, a bad assertion, a missing wait. The only verdict that unlocks Fix it and open a PR.
The application under test is genuinely broken. Nothing to fix in the test, so it goes to the team.
Nondeterministic. The test and the app both check out, so no fix is needed, just noise to ignore.
Not enough evidence either way. Re-analyze from a different angle, or dig in by hand.
Every failing report gets an AI Analysis card. One click, and the agent reads the failing scenario, its recent pass/fail history and a screenshot from the moment it failed, then settles on a verdict, a plain-language summary, and the evidence behind it.

When the verdict is a test-code bug, Fix it and open a PR appears. The agent clones your repo into an isolated workspace on its own branch, makes the smallest change that addresses the cause, and opens a real pull request, or says it isn't confident and stops, rather than guessing.

Every fix lands as a normal GitHub pull request: what was wrong, what changed, and how to verify it, written by the agent. Nothing reaches your default branch without you reviewing and merging it yourself, same as a PR from anyone else on the team.

Every fix runs inside a fresh, isolated clone, never your live project folder, on its own branch, deleted once the PR is pushed or the attempt is abandoned. This is enforced server-side in the tools the agent gets, not something a prompt has to be trusted to honor.
✓ read the failing scenario & its history ✓ work inside its own isolated clone ✓ commit, push its own branch ✓ open a pull request ✕ push to the default branch ✕ merge anything, ever ✕ touch a file outside its workspace
Connect Claude or OpenAI and a GitHub personal access token in Settings → Integrations, owner only, instance-wide. Every key is verified against the provider itself before it's saved, so a bad or expired one is rejected immediately instead of failing silently later. Connect either provider; if both are set, Claude is used.
AI provider keys Anthropic API key sk-ant-… OpenAI API key sk-… GitHub connection Personal access token github_pat_…
Self-hosted, your keys, your repo. The agent proposes; you still merge.
Get started →