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.
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.
Install the packages
npm install @anthropic/stepwright @anthropic/fixwright Create your first script
npx stepwright init my-script.ts Run it
npx stepwright run my-script.ts Ready to Automate?
Start building reliable browser automation today. Open source and free to use.