meticulous-simulate-and-diff
alwaysmeticulous/skills
Run Meticulous session simulations and detect visual regressions via pixel and HTML diffs.
What is meticulous-simulate-and-diff?
This skill runs a single Meticulous session replay against a live URL and analyzes visual output by comparing screenshots against a base replay. Use it to verify whether code changes have introduced visual regressions in a specific user session.
- Run session simulations in headless mode against a live app URL or original recorded URL
- Compare pixel diffs and HTML snapshots against a base replay to detect visual changes
- Inspect screenshots directly in quick-check mode when no baseline is available
- Extract and analyze per-screenshot metadata including DOM state and route information
- Generate comparison URLs for visual verification in the Meticulous web UI
How to install meticulous-simulate-and-diff
npx skills add https://github.com/alwaysmeticulous/skills --skill meticulous-simulate-and-diff- A sessionId to replay
- An appUrl (local dev server or original recorded URL)
- Optionally: a baseReplayId from a prior replay to diff against
- Meticulous CLI installed and up to date (run meticulous-cli-update skill first)
How to use meticulous-simulate-and-diff
- 1.Run meticulous-cli-update skill to ensure CLI is current
- 2.Execute meticulous simulate with --sessionId, --appUrl, and optionally --baseReplayId and --headless flags
- 3.Extract the headReplayId from the 'View simulation at' URL in stdout
- 4.Locate the replay directory using ls -lt ~/.meticulous/replays/
- 5.List diffed screenshots in ~/.meticulous/replays/<replayDir>/diffs/<baseReplayId>/
- 6.Read .metadata.json files for both head and base replays to compare DOM and route data
- 7.Analyze pixel diff images and HTML diffs to identify what changed and why
- 8.Summarize findings with affected routes, CSS classes, and whether changes are structural or visual
Use cases
- Verify a code change hasn't introduced visual regressions before merging
- Compare a new build against a known-good baseline replay to catch UI breakage
- Inspect screenshots from a session replay to manually verify UI correctness
- Identify which routes and components changed by analyzing HTML diffs and pixel mismatch data
- Validate CSS or layout changes by reviewing pixel diff images and DOM modifications
- Frontend developers checking for visual regressions
- QA engineers validating UI changes against baselines
- CI/CD workflows automating visual regression detection
- Teams using Meticulous for session-based testing
meticulous-simulate-and-diff FAQ
Omit the --baseReplayId flag and run in quick-check mode. Screenshots are stored locally in <replayDir>/screenshots/ for direct visual inspection, but no automated diff comparison is performed. You can re-run later with a baseReplayId to enable diff analysis.
Download a prior test run with 'meticulous download test-run', then inspect ~/.meticulous/test-runs/<testRunId>/coverage.json or check the testCases[].replayId fields.
Each screenshot line shows the fraction of pixels that differ from the base replay. If it exceeds the threshold (default 0.100%), the screenshot is marked FAIL. Use this to prioritize which diffs to investigate.
Pixel diff images are in ~/.meticulous/replays/<replayDir>/diffs/<baseReplayId>/ with .png files for full diffs and thumb_ prefixed thumbnails. HTML metadata is in ~/.meticulous/replays/<replayDir>/screenshots/<screenshotFilename>.metadata.json.
Compare the before.dom HTML strings from both metadata files. If they're identical but pixels differ, the change is purely visual (e.g. color shift). If DOM differs, the change is structural (elements added/removed or classes changed).
Full instructions (SKILL.md)
Source of truth, from alwaysmeticulous/skills.
name: meticulous-simulate-and-diff description: Run a Meticulous session simulation against a live URL and analyze the visual output — either by inspecting screenshots directly (quick-check mode) or by comparing pixel and HTML diffs against a base replay. Use when checking whether a code change has introduced visual regressions for a specific session. user-invocable: true
Simulate a session and analyze diffs
This skill covers running a single simulation and interpreting the results. For the simulate command's full option reference see the meticulous-cli-simulate skill.
Before starting, run the
meticulous-cli-updateskill to ensure the Meticulous CLI is up to date — unless it has already run earlier in this conversation, in which case skip it.
Prerequisites
- A
sessionIdto replay - An
appUrl(local dev server, or leave blank to use the original recorded URL) - Optionally: a
baseReplayId— the ID of a prior replay to diff screenshots against. Without this, screenshots are stored but not compared.
If you don't have a baseReplayId, you can find one from a downloaded test run:
meticulous download test-run
# Then inspect ~/.meticulous/test-runs/<testRunId>/coverage.json
# or check the testCases[].replayId fields
Step 1 — Run the simulation
With a base replay (diff mode)
meticulous simulate \
--sessionId=<sessionId> \
--appUrl=<url> \
--baseReplayId=<baseReplayId> \
--headless
Capture the full stdout. Key things to look for:
# Per-screenshot diff outcomes (one line each):
0.412% pixel mismatch for screenshot screenshot-1234.png (threshold is 0.100%) => FAIL!
0.000% pixel mismatch for screenshot screenshot-5678.png (threshold is 0.100%) => PASS
# Final summary block:
=======
View simulation at: https://app.meticulous.ai/projects/<org>/<project>/simulations/<headReplayId>
View comparison with base: https://app.meticulous.ai/projects/<org>/<project>/simulations/<baseReplayId>/compare-to/<headReplayId>
=======
If there are no FAIL! lines: the session is visually identical to the base — stop here and report no regressions.
Proceed to Steps 2–5 to locate and analyse any diffs.
Without a base replay (quick-check mode)
If no baseReplayId is available, omit it. Screenshots are still stored locally for direct visual inspection:
meticulous simulate \
--sessionId=<sessionId> \
--appUrl=<url> \
--headless
Then locate the replay directory (Step 2) and open the screenshots in <replayDir>/screenshots/ to verify the UI looks correct. There are no diff images in this mode — inspection is purely visual. Steps 3–5 do not apply.
Step 2 — Extract the head replay ID and locate the replay directory
From the View simulation at: URL, extract the <headReplayId> (the last path segment).
To find the local replay directory created by this run:
ls -lt ~/.meticulous/replays/ | head -5
The most recently created entry will be the head replay's directory (named with a timestamp, e.g. 2024-01-15T12-30-45.123Z-abc123/). Note this path — it's referred to below as <replayDir>.
Step 3 — Identify which screenshots diffed
ls ~/.meticulous/replays/<replayDir>/diffs/<baseReplayId>/
Each .png file here corresponds to a screenshot where a visual difference was detected. The pixel diff image highlights changed pixels in color. There are also thumb_ prefixed thumbnail versions.
Note the filenames — they match the screenshot identifiers (e.g. screenshot-after-event-42.png).
Step 4 — Analyze the HTML diff for each diffed screenshot
Each screenshot has a corresponding metadata file containing a full HTML snapshot of the page taken just before the screenshot was captured. These files are already on disk:
- Head metadata:
~/.meticulous/replays/<replayDir>/screenshots/<screenshotFilename>.metadata.json - Base metadata:
~/.meticulous/replays/<baseReplayId>/screenshots/<screenshotFilename>.metadata.json
The base metadata is permanently cached when the simulation downloads the base replay, so no additional download is needed.
Read both .metadata.json files. The relevant fields are:
before.dom— full HTML of the page at screenshot time; diff these two strings to understand what changedbefore.routeData.url— which page/route the screenshot was taken on
When diffing the HTML, focus on tag additions/removals, class attribute changes, and text content changes.
The per-screenshot stdout lines also report mismatchFraction (proportion of pixels that changed). If there is a pixel diff but the before.dom strings are identical, the change is purely visual (e.g. a color shift) rather than structural.
Step 5 — Summarize the findings
The key output from this skill is a high-level human-readable description of what visually changed and why. Use the pixel diff counts, route URLs, changed class names, and HTML diffs gathered above to answer: what did the user experience change, and which part of the UI is responsible?
Present this in whatever format fits the current context (conversational answer, structured report, input to a calling workflow, etc.). Useful signals to draw on:
- Which routes were affected
- Which CSS classes appeared in the changed DOM regions (these usually map directly to components)
- Whether changes were structural (DOM additions/removals) or purely visual (pixel shift with no HTML diff)
- Whether the same change appears across multiple screenshots (suggesting a shared component changed) vs. isolated to one screenshot
The comparison URL logged to stdout is always worth surfacing, as it lets a human quickly verify the diff visually:
https://app.meticulous.ai/.../simulations/<baseReplayId>/compare-to/<headReplayId>
Notes
- The pixel diff images at
~/.meticulous/replays/<replayDir>/diffs/<baseReplayId>/can be opened directly for visual inspection. - If
--baseReplayIdis omitted, no diff analysis is possible. Screenshots are still stored locally and can be compared later by re-running with--baseReplayIdset to the head replay ID from the first run. - For the full iterative development workflow (session discovery, per-step commits, and final cloud run), see the
meticulous-iterative-devskill.
Related skills
More from alwaysmeticulous/skills and the wider catalog.

meticulous-test
Run visual regression tests on frontend changes and classify diffs as intended or unintended.

meticulous-use-session-data
Download and use Meticulous session data—user flows and network mocks—to test code changes locally.

meticulous-cli
CLI tool to record user sessions and replay them for visual regression testing.

meticulous-cli-update
Ensure the Meticulous CLI is installed and up to date before running other Meticulous skills.

Agent Browser
A fast Rust-based headless browser automation CLI with Node.js fallback that enables AI agents to navigate, click, type, and snapshot pages via structured commands.

context7
|