Docs
Everything you need from install to your first green run, and beyond.
Install
Add Seatbelt to your project. Requires Node 18+.
$ npm install getseatbelt # Add Seatbelt to your projectThe package is getseatbelt; the command is seatbelt. Works with pnpm, yarn, and bun too.
First run
$ npx seatbelt init # Set up Seatbelt and map your app’s critical flowsRun this once in your repo. Seatbelt writes its config, maps your critical flows, and at the end of setup offers to start the first browser replay for you — so you don’t have to remember a second command. You never paste a token.
Running Seatbelt
$ npx seatbelt run # Replay your QA flows in a visible browserUse this whenever AI changed your app, or any time you want confidence before you commit or merge. Seatbelt replays your current flow map in a visible browser and opens the report with a merge verdict when it finishes. If a step needs your Seatbelt account, login is handled automatically (see Logging in).
Logging in
Login is handled automatically. When a command needs your Seatbelt account, the CLI opens your browser and connects the account for you.
You can also manage it manually:
$ seatbelt login # Connect your account in the browser$ seatbelt status # Show your plan and connection$ seatbelt logout # Sign out on this machineSeatbelt stores access in your user config directory, not your repo.
Clean test user (reset)
So each run starts from a known state, Seatbelt uses a reset command that makes a fresh test user. During seatbelt init, Seatbelt can offer this setup. If you say yes, it generates a coding-agent prompt that adds a safe reset script to your app and automatically wires it into your Seatbelt config.
If you skip it during init, run it later:
$ seatbelt setup-reset # Generate a reset-hook prompt for your coding agentPaste the prompt into Claude, Cursor, or Codex. After that, every run starts from a clean test user.
Flow config
Flows live as simple YAML in qa-flows/. Seatbelt generates and maintains them, and you can edit them by hand. Each flow lists steps (goto, fill, click, expect…) for one critical path — login, checkout, billing, entitlements, onboarding, uploads, or whatever matters in your app. Seatbelt keeps the map in sync as your app changes.
Reports
Every run writes a self-contained report — video, screenshots, trace, console, and network — with a verdict (MERGE, MERGE WITH CAUTION, or DO NOT MERGE) and an LLM fix prompt for your coding agent. Reopen the latest report any time:
$ seatbelt report # Reopen the latest reportSeatbelt runs against your current local code. Pull or rebase first if you want the verdict to reflect the latest changes on your main branch.
Account & billing
See your connection, plan, and access, or manage your subscription (cancel, update payment, view invoices) in the Stripe portal:
$ seatbelt status # Your connection, plan, and access$ seatbelt billing # Open the Stripe billing portalAdvanced: CI tokens
For CI or scripted runs where a browser login isn’t possible, set an API token in the environment. It takes precedence over a browser login. This is a fallback — normal local use never needs it.
$ SEATBELT_API_TOKEN=sk_seatbelt_... seatbelt run # CI: authenticate via env, no browser loginPoint the CLI at a non-production backend with SEATBELT_WEB_URL.
Privacy
Browser QA runs on your machine, against your local app. When Seatbelt uses AI to generate or maintain flows, it sends a sanitized summary of your app — framework, scripts, routes, redacted code snippets, and environment variable names only. It never sends your .env secret values. You can keep everything offline with --local-only — that turns off AI flow generation and refresh, so Seatbelt won’t keep your flows up to date automatically.