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.
Trusted by the world's leading engineering teams
Every change clears review
Human or agent written, every change passes the same checkpoint before it lands.
- 01PlanA ticket, a prompt, a fix.
- 02Change landsAn agent or dev writes it.
- 03Visual TestsView diffed, pixel by pixel.
- 04Human reviewApprove, or send it back.
- 05Baseline updatedThe new reference is set.
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.
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.
Built for the pipeline
Baselines, approvals and auth - handled in the run that ships your code.
One baseline per branch.
Each branch compares against its own approved baseline - you review a change once.
Gates the pipeline.
The run waits for your approval; on GitHub, the commit status blocks the merge.
Buddy Works behind auth.
Hand Buddy your login state and pages behind auth test like any other.
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.
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");
});Agent-ready by design
The whole loop runs without a browser: capture, compare, review. Whatever writes your UI can also check it.
- Connect to Buddy
- bdy mcp --tools suites
- visual test suites · 1 linked
- Run the visual suite
- bdy tests visual session create "npx playwright test"
- session 128 · 12 views · 3 changed
- Read back what changed
- pricing/herolayout shift
- pricing/plan-cardstyle drift
- checkout/summarymissing element
- checkout/summary lost its total row - that one's mine
- Edit src/checkout/Summary.tsx
- Re-run the suite
- session 129 · 2 changed · 0 unintended
- Handing off 2 intentional changes for review
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.
Go deeper
Hands-on guides for the stack you already run.
