Review before your agents ship

Agents change UI faster than anyone can open a browser. Buddy renders every change, diffs it against an approved baseline, and hands you, or your agent, the exact pixels that moved.

How Visual Tests work

Every change, human or agent written, clears the same checkpoint before it touches your baseline.

  1. 01PlanA ticket, a prompt, a fix.
  2. 02Change landsAn agent or dev writes it.
  3. 03Visual TestsView diffed, pixel by pixel.
  4. 04Human reviewApprove, or send it back.
  5. 05Baseline updatedThe new reference is set.
Change detection

See what your agents changed

Buddy compares what the browser actually painted, not the code behind it. You get baseline and current displayed side by side. Every difference outlined — per browser, per device.

Every browser, every device

Chrome, Firefox and Safari, from HD desktop to iPhone, Pixel and Galaxy. Each variant resolves its own baseline, so a mobile-only regression can't hide behind a clean desktop.

Only the changes worth your time

Set the diff threshold, or hand Buddy the CSS and XPath selectors for the parts that never sit still — clocks, carousels, ad slots — so rendering noise never fails a build.

What Visual Tests do

Every comparison runs in the pipeline that ships your code.

One baseline per branch.

Compared against the approved version from your branch's ancestor commit — you review each change once.

Gates the pipeline.

The approval action suspends the run while in GitHub, the commit status blocks the merge.

Buddy Works behind auth.

Headers, cookies and localStorage keys injected on page visit. Auth-protected pages included.

The AI workflow

Agent-ready by design

The whole loop runs without a browser: capture, compare, review. Whatever writes your UI can also check it.

CLI

Everything the UI does, scriptable from your terminal.

MCP

Buddy as an MCP server, scoped tools for any agent.

Skills

Portable know-how for agents, added in one command.

Plugin

MCP, skills and commands, bundled.

TerminalMCP · bdy
  1. Connect to Buddy
  2. bdy mcp --tools suites
  3. visual test suites · 1 linked
  4. Run the visual suite
  5. bdy tests visual session create "npx playwright test"
  6. session 128 · 12 views · 3 changed
  7. Read back what changed
  8. pricing/herolayout shift
  9. pricing/plan-cardstyle drift
  10. checkout/summarymissing element
  11. checkout/summary lost its total row — that one's mine
  12. Edit src/checkout/Summary.tsx
  13. Re-run the suite
  14. session 129 · 2 changed · 0 unintended
  15. Handing off 2 intentional changes for review
Works with your stack

90-second setup

Wrap your existing E2E run and Buddy captures snapshots as your tests navigate, or skip the test code entirely with Storybook.

Set up tests for Playwright

Wrap Playwright's test with the Buddy fixture, then call takeSnap() on any stable UI state.

Playwright docs
import { test as base } from "@playwright/test";
import withVisualTestPluginFixture
  from "@buddy-works/visual-tests-playwright";

const test = withVisualTestPluginFixture(base);

test("Homepage", async ({ page, visualTestPlugin }) => {
  await page.goto("http://localhost:3000/");
  await visualTestPlugin.takeSnap(page, "homepage");
});

One CLI to run it all

Scriptless capture, wrapped E2E runs, CI gating — every flow above starts from the bdy CLI. Install it and capture your first snapshot.

>_ Install npm i -g bdy
>_ Capture bdy tests capture --urls "https://your.app"

Get started

Add visual review to your pipeline

Start scriptless with the CLI or wrap your existing tests. Free while in Preview — no credit card required.

Get started