Autonomous browser agents that compile into deterministic Playwright specs.
ReproGrid runs on every pull request against your preview deployments. Our agents explore real user flows over CDP, catch functional and state regressions, and hand your engineers a reproducible .spec.ts with full network and DOM traces.
AXTree snapshot captured (412 nodes) • Session hydrated via storageState
Selector [data-testid="apply-coupon"] removed in commit a81c4f9. Re-bound via AXTree role button[name="Apply"].
Uncaught exception in client bundle + HTTP 500 on POST /api/v2/subscriptions
prorationDate (camelCase); API schema in PR #418 expects proration_date.// Run locally in one command:
// $ npx reprogrid replay rg_94f8a2
import { test, expect } from '@playwright/test';
test('repro: 500 on annual upgrade with coupon', async ({ page }) => {
await page.goto('/billing/upgrade');
await page.getByRole('radio', { name: /Annual/i }).check();
await page.getByPlaceholder('Promo code').fill('TEAM25');
await page.getByRole('button', { name: 'Apply' }).click();
const [res] = await Promise.all([
page.waitForResponse('/api/v2/subscriptions'),
page.getByRole('button', { name: 'Confirm' }).click(),
]);
expect(res.status()).toBe(200); // Returns 500
});
trace.zip + network.har
3/3 deterministic repros
@playwright/test files committed directly to your repo or downloadable via CLI—no vendor lock-in.
import { test, expect } from '@playwright/test';
// Generated by ReproGrid Agent • PR #418 • Deterministic Replay Verified (3/3)
test.use({ storageState: '.reprogrid/auth/enterprise-admin.json' });
test('checkout upgrade flow preserves proration_date payload', async ({ page }) => {
await page.goto('https://checkout-pr-418.preview.acme.dev/billing/upgrade');
await page.getByRole('radio', { name: 'Enterprise Annual' }).check();
await page.getByPlaceholder('Promo code').fill('TEAM25');
await page.getByRole('button', { name: 'Apply' }).click();
await expect(page.getByText('25% discount applied')).toBeVisible();
const [subResponse] = await Promise.all([
page.waitForResponse((r) => r.url().includes('/api/v2/subscriptions') && r.request().method() === 'POST'),
page.getByRole('button', { name: 'Confirm Subscription' }).click(),
]);
expect(subResponse.status(), 'Expected 200 OK from /api/v2/subscriptions').toBe(200);
});
Billing Upgrade Flow failed on preview deployment checkout-pr-418.preview.acme.dev.
POST /api/v2/subscriptions → 500 Internal Server Errornpx reprogrid replay rg_94f8a2Explore with multimodal agents. Execute at Playwright speed.
Running an LLM on every click is slow and non-deterministic. Hand-writing CSS selectors breaks every sprint. ReproGrid combines agentic exploration with deterministic AST compilation.
CDP + Accessibility Tree Grounding
Instead of relying solely on brittle screenshots or raw HTML dumps, ReproGrid hooks directly into the Chrome DevTools Protocol (CDP) to fuse the live Accessibility Tree (AXTree), computed layout bounds, and visual frames.
Self-Healing Deterministic Cache
Once an agent resolves an intent (act("Upgrade to Annual")), ReproGrid compiles the path into deterministic Playwright locators. Subsequent CI runs execute in milliseconds—only invoking the agent when the UI drifts.
Full-Stack Trace Correlation
When an assertion fails, ReproGrid correlates the exact DOM mutation, console stack trace, and failing network payload with the git diff in your pull request—pinpointing which commit introduced the bug.
Write intents in plain English or drop straight into Playwright.
Mix natural-language agent actions with standard Playwright assertions in the same test file, or let ReproGrid autonomously discover and fuzz critical user journeys from your staging URL alone.
- rg.explore() — Autonomous multi-step flow discovery
- rg.act() — Semantic UI interaction with auto-healing
- rg.extract() — Typed Zod schema extraction from live DOM
- rg.exportSpec() — Eject to pure @playwright/test anytime
import { test, expect } from '@reprogrid/playwright';
import { z } from 'zod';
test('admin can invite member with RBAC role and verify audit log', async ({ page, rg }) => {
await page.goto(process.env.PREVIEW_URL);
// Semantic action: adapts to UI refactors, compiles to cached Playwright locator
await rg.act('Open workspace settings and invite [email protected] as Billing Admin');
// Extract structured state directly from the rendered DOM
const inviteRow = await rg.extract({
instruction: 'Extract the pending invite row for [email protected]',
schema: z.object({
email: z.string(),
role: z.enum(['Billing Admin', 'Member', 'Owner']),
status: z.string(),
}),
});
expect(inviteRow).toEqual({
email: '[email protected]',
role: 'Billing Admin',
status: 'Pending',
});
});
Gate every Vercel, Render, or ephemeral PR environment.
Trigger suites automatically when your preview URL goes live, or point ReproGrid at a staging environment after merge.
Listens for deployment_status events from Vercel, Netlify, Fly.io, or Kubernetes preview namespaces.
Spins up 50+ parallel ephemeral Chromium sessions with pre-authenticated storage states and deterministic network mocking.
Engineers run npx reprogrid replay <id> to launch the exact failing browser state locally with Playwright Inspector attached.
Built for private staging networks and strict data boundaries.
Your staging environments, auth tokens, and source code never leave isolated execution boundaries.
Ephemeral MicroVM Sandboxes
Every test run executes inside a dedicated, single-tenant browser microVM that is destroyed immediately after teardown.
Zero Model Training
DOM snapshots, HAR logs, and application data are never used to train foundation models or shared across tenants.
Private Tunnel & Static Egress
Test internal staging environments behind Cloudflare Access, Tailscale, or IP allowlists via static egress IPs or local CLI tunnels.
Encrypted Credential Vault
Inject short-lived preview bypass tokens, OAuth sessions, and TOTP secrets at runtime with envelope encryption.
Built by engineers obsessed with developer velocity and deterministic software.
ReproGrid is built by Trench Tech, Inc. We started ReproGrid after spending too many nights debugging "cannot reproduce" tickets and maintaining flaky Playwright suites that broke on every UI tweak.
Ship without staging blindspots
We work directly with your engineering team to wire up your first 10 critical user journeys in under 30 minutes.