Skip to content

Why it broke.Not just that it broke.

Tripwire drives your app like a real user — and when a flow breaks, it traces the failure to the exact backend line that caused it, then files the fix. Run it fully self-hosted — your keys, your data, nothing leaves your infra.

A Tripwire run — a UI failure traced to the exact backend line and filed as a ticket

What it does

Plain-English tests.
Backend-deep answers.

One platform: describe a suite in English and AI agents drive a real browser, run your regression, and root-cause every failure to its exact cause — UI, API, or the exact backend line.

01

Plain-English suites

Describe a flow the way you'd explain it to a teammate. No selectors, no page objects, no brittle scripts.

Write a suite →
02

A real browser, any OS

The LLM is the brain, Playwright the hands — headless or headed on Linux, macOS, or Windows.

How it works →
03

Self-healing

When the UI shifts, Tripwire re-grounds against the live DOM each run instead of failing on a stale locator.

Self-heal →
04

Root-caused to the backend

A failing request's trace_id is correlated to your server logs — the backend error, the likely cause, a suggested fix.

Connect logs →
05

Auto-filed, deduped issues

Verified failures become root-caused tickets on the built-in board — and optionally GitHub, GitLab, or Jira. Re-runs comment, never duplicate.

Filing issues →
06

In your IDE & CI

An MCP server for Cursor and Claude Code, plus a GitHub Action and CLI that gate every PR.

IDE & MCP →

How it works

Three steps.
No test-writing.

01

Describe it in plain English

Author a suite, generate one from a URL or your docs, or record a click-through.

02

It drives a real browser

The LLM is the brain, Playwright the hands — headless on any OS. A suite shares state across its cases.

03

You get the cause & the fix

A failure is traced to its exact cause — UI, API, or the exact backend line — root-caused, and filed (deduped) where your team works.

The differentiator

Every other tool stops
at “the UI broke.”

A UI failure → correlated by trace_id to the real backend error → the cause and a suggested fix → filed as a deduped ticket. In plain English.

UI — what the user hit

“Save profile” returned a silent 500 — nothing shown to the user.

Backend — the real cause

NullPointerException in upload.py:142 — avatar saved before the user row commits.

Filed — GitHub #284

Cause + suggested fix, deduped. The ticket was waiting for you.

Author

A suite is
just YAML.

Describe a flow the way you'd explain it to a teammate — no selectors, no page objects. Cases run in order and share fixtures, so “sign up, then log in as that user” just works.

suite: "Signup & Login"
base_url: http://localhost:8500
fixtures:
  email:    { gen: unique_email }
  password: { gen: password }
cases:
  - title: "A new user can sign up"
    steps:
      - { do: "Open the sign-up page" }
      - { do: "Enter ${email} and ${password}" }
      - { do: "Click 'Create account'" }
    expect:
      - { assert: "'Account created' is shown" }
  - title: "That same user can log in"
    steps:
      - { do: "Log in with ${email} / ${password}" }

Built in

Everywhere your team
already works.

In your editor

An MCP server puts “test this URL” inside Cursor and Claude Code.

In CI

A GitHub Action and CLI gate every PR with a JUnit report and a meaningful exit code.

In your tracker

The built-in board, plus GitHub, GitLab, or Jira — deduped by fingerprint.

In your backend

Server-log correlation turns a UI failure into a backend diagnosis.

Pricing

Free to self-host.
A license for companies.

Source-available — run the whole platform yourself, bring your own key.

Self-hosted
Free

For any noncommercial use. The full platform — authoring, backend root-cause, plans, CI gating — bring your own LLM key.

Get started →

Get started

You ship it.
Tripwire tests it.

Plain English in. A root-caused bug out — automatically. Self-hosted, bring your own key.

Get started →

Tripwire — AI-native, self-healing E2E testing. Terms · Privacy · Legal Notice