Help us improve
Share bugs, ideas, or general feedback.
From dojowatch
Auto-activates when working on visual regression testing, screenshot comparison, UI diff analysis, or DojoWatch configuration. Use when the user mentions "visual regression", "screenshot diff", "UI changed", "vr-check", "dojowatch", "baseline", or "visual testing".
npx claudepluginhub dojocodinglabs/dojowatch --plugin dojowatchHow this skill is triggered — by the user, by Claude, or both
Slash command
/dojowatch:visual-regressionThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
DojoWatch is an AI-native visual regression testing engine. It captures screenshots with Playwright, pre-filters with pixelmatch, and uses Claude (locally) or Gemini (in CI) as the AI diff engine.
Provides behavioral guidelines to reduce common LLM coding mistakes, focusing on simplicity, surgical changes, assumption surfacing, and verifiable success criteria.
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Provides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.
Share bugs, ideas, or general feedback.
DojoWatch is an AI-native visual regression testing engine. It captures screenshots with Playwright, pre-filters with pixelmatch, and uses Claude (locally) or Gemini (in CI) as the AI diff engine.
Every visual difference is classified as one of:
Before AI analysis, pixelmatch classifies screenshots by change magnitude:
Only byte-identical or zero-diff screenshots are skipped. Every other screenshot is analyzed. The tiers control analysis depth, not whether analysis occurs.
DojoWatch is configured via .dojowatch/config.json:
{
"project": "my-app",
"baseUrl": "http://localhost:3000",
"viewports": [
{ "name": "desktop", "width": 1440, "height": 900 },
{ "name": "mobile", "width": 375, "height": 812 }
],
"routes": ["/", "/dashboard", "/settings"],
"maskSelectors": ["[data-vr-mask]", ".live-timestamp"],
"prefilter": {
"threshold": 0.05,
"clusterMinPixels": 500
}
}
/vr-init — Initialize DojoWatch: create config, discover routes, capture initial baselines/vr-check — Full pipeline: capture → prefilter → AI analysis/vr-approve — Promote captures to baselines/vr-report — Generate markdown summary of last check/vr-watch — File watcher with live re-capture (coming soon)DojoWatch supports capturing pages behind authentication via Playwright's storageState:
{
"auth": {
"storageState": ".dojowatch/auth.json",
"profiles": {
"admin": "e2e/.auth/admin.json",
"student": "e2e/.auth/student.json"
},
"routes": {
"/": null,
"/dashboard": "student",
"/admin": "admin"
}
}
}
storageState — default auth file for all routes (cookies + localStorage)profiles — named profiles mapping to different auth state filesroutes — per-route profile assignment. null = anonymous. Unlisted routes use the default.To generate an auth state file:
npx playwright codegen --save-storage=.dojowatch/auth.json http://localhost:3000
This opens a browser — log in manually, then close it. The session is saved.
For automated CI, use a setup script that logs in via your auth provider's API (Supabase, Clerk, NextAuth) and saves the storageState file. See DojoOS's e2e/global-setup.ts for an example.
.dojowatch/config.json — Project configuration.dojowatch/routeMap.json — Source file → route mapping.dojowatch/baselines/ — Approved baseline screenshots (committed to git).dojowatch/captures/ — Current captures (gitignored).dojowatch/diffs/ — Diff overlay PNGs (gitignored).dojowatch/last-check.json — Results of most recent check (gitignored)In Claude Code, you ARE the AI engine. When /vr-check runs:
For detailed classification criteria, see references/classification-schema.md.
For the analysis prompt template, see references/analysis-prompt.md.