Now with AI-powered test fixing

Browser Automation That Fixes Itself

Write maintainable automation scripts with Stepwright's fluent API. When tests break, Fixwright uses AI to automatically detect and fix the issue.

search-example.ts
import { Stepwright } from '@anthropic/stepwright';

const script = Stepwright.create('DuckDuckGo Search')
  .config({ headless: false })
  .checkpoint('Setup', { required: true })

  .step('Navigate to search', async (ctx) => {
    await ctx.page.goto('https://duckduckgo.com');
  })

  .step('Enter search query', async (ctx) => {
    await ctx.page.fill('input[name="q"]', 'Playwright automation');
    await ctx.page.keyboard.press('Enter');
  })

  .endCheckpoint();

await script.run();

Everything You Need for Reliable Automation

Stepwright and Fixwright work together to keep your automation scripts running smoothly.

Fluent API

Chain steps together with an intuitive, readable API that makes automation scripts easy to write and maintain.

Checkpoints & Recovery

Group steps into checkpoints with automatic retries and graceful failure handling.

AI-Powered Fixing

When tests break, Fixwright analyzes the failure and automatically proposes fixes using Claude AI.

TypeScript First

Full TypeScript support with intelligent autocompletion and type-safe configurations.

Artifact Capture

Automatically capture screenshots, DOM snapshots, and console logs on failure for debugging.

CI/CD Ready

Run headless in CI pipelines with JSON reporting, exit codes, and easy integration.

See It In Action

Simple, readable code that's easy to maintain.

// Write automation scripts with a fluent API
import { Stepwright } from '@anthropic/stepwright';

const script = Stepwright.create('Login Flow')
  .config({
    headless: true,
    screenshotOnFailure: true,
  })
  .data({ username: 'testuser' })

  .checkpoint('Authentication')
  .step('Navigate to login', async (ctx) => {
    await ctx.page.goto('https://app.example.com/login');
  })
  .step('Enter credentials', async (ctx) => {
    await ctx.page.fill('#username', ctx.data.username);
    await ctx.page.fill('#password', process.env.TEST_PASSWORD!);
    await ctx.page.click('button[type="submit"]');
  })
  .step('Verify logged in', async (ctx) => {
    await ctx.page.waitForSelector('.dashboard');
    ctx.log('Successfully logged in!');
  })
  .endCheckpoint();

await script.run();
// AI automatically fixes broken tests
import { FixWright } from '@anthropic/fixwright';

const fixwright = new FixWright({
  ai: {
    apiKey: process.env.ANTHROPIC_API_KEY,
    model: 'claude-sonnet-4-20250514',
  },
  git: {
    baseBranch: 'main',
    fixBranchPrefix: 'fix/autowright-',
  },
});

// Watch for failures and auto-fix
fixwright.useFileSource('./failure-cases');

fixwright.on('attempt:success', (attempt) => {
  console.log('Fixed!', attempt.proposedFix?.explanation);
});

fixwright.on('pr:created', (url) => {
  console.log('PR created:', url);
});

await fixwright.start();

Get Started in Minutes

Install, write your first script, and run it.

1

Install the packages

npm install @anthropic/stepwright @anthropic/fixwright
2

Create your first script

npx stepwright init my-script.ts
3

Run it

npx stepwright run my-script.ts

Ready to Automate?

Start building reliable browser automation today. Open source and free to use.