Genuinely local-first
Every app repo gets its own .ghostrun/ workspace. Secrets stay in env vars and CI
secrets โ never in the npm package, never in a third party's cloud.
Local-first ยท no cloud account ยท MCP-native
The local-first QA agent for SaaS teams. Record browser flows once, replay them in CI, monitor staging, and let AI assistants run your test suite via MCP โ all on your machine.
npm install -g ghostrun-cli
Why GhostRun
Playwright MCP and Stagehand automate a browser. Reflect, Momentic, and Mabl want an account and a hosted dashboard. GhostRun is the one that's actually local, actually SaaS-specific, and actually speaks to your AI agent.
Every app repo gets its own .ghostrun/ workspace. Secrets stay in env vars and CI
secrets โ never in the npm package, never in a third party's cloud.
OTP bypass for phone/WhatsApp auth. db:assert against staging Postgres for
multi-tenant RLS checks. Webhook signature verification for Razorpay, Meta, and custom HMAC.
A real MCP server with tools for running suites, inspecting failures, and reviewing repair
proposals โ not just raw click/type primitives.
Selector repairs are reviewable proposals, never silent mutations. Nothing changes your flow graph in CI without a human saying yes.
How it works
# record a flow against staging
$ ghostrun learn https://staging.yourapp.com
# run it in CI
$ export STAGING_QA_PASSWORD='...'
$ ghostrun run smoke --profile staging --ci --reporter junit
โ checkout-guest passed ยท 2.1s
โ login-basic passed ยท 0.8s
โ signup-verify passed ยท 3.4s
Key commands
ghostrunZero-config home menughostrun learn <url>Record a flowghostrun explore <url>Auto-discover flows via BFS crawl + AIghostrun run <id> --ciRun a flow in CI modeghostrun suite:run smokeRun a named suiteghostrun repair listReview self-healing proposalsghostrun auditScan for secret leaks before committingghostrun doctorHealth checkAgent-native
Connect Claude Desktop or Cursor and ask it to operate GhostRun directly โ run flows, inspect failures, review repairs โ through a real MCP server, not a screenshot loop.
โบ Run the smoke suite against staging and tell me
what broke, with a proposed fix if there's a selector issue.
โ suite:run smoke --profile staging --ci
โ 7 passed, 1 failed โ checkout-guest
โ repair proposal: selector drift on "#submit-btn"
โ awaiting your review, nothing applied
{
"mcpServers": {
"ghostrun": {
"command": "ghostrun-mcp",
"cwd": "/path/to/your-saas-app"
}
}
}
Pairs with
Most flaky SaaS tests fail because of the providers behind the app โ Razorpay retries, WhatsApp rate limits, delayed webhooks. Atlas is a stateful simulator for exactly those dependencies. Point your staging app at Atlas, then let GhostRun click through the UI and assert on what happens when a payment fails three times in a row.
Explore Atlas โGet started
jobs:
qa:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: npm ci && npx playwright install chromium
- run: ghostrun suite:run smoke --profile staging --ci --reporter junit
env:
STAGING_QA_PASSWORD: ${{ secrets.STAGING_QA_PASSWORD }}
MIT licensed. Node โฅ 20. No account, no telemetry you didn't ask for.