Agent skill

Before After

by evloghq in evloghq/evlog

Produce a before/after visual comparison of an evlog surface (landing, docs, telemetry, playgrounds) and share it as public Blob URLs.

MITAuto-check passedTesting & QA

Install Before After

skills CLI
$ npx skills add evloghq/evlog --skill before-after -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install evloghq/evlog before-after --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/evloghq/evlog.git skills-src && mkdir -p .claude/skills && cp -r skills-src/apps/evi/agent/skills/before-after .claude/skills/before-after && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
before-after
GitHub stars
1.9k
Token cost
~2.7k tokens
SKILL.md length
1,598 words
Files
1
Skills in repo
20
Repo updated
First seen
Licence
MIT

At a glance

Produce a before/after visual comparison of an evlog surface (landing, docs, telemetry, playgrounds) and share it as public Blob URLs.

  • Works in 7 steps: Start the dev server first → Decide what "before" and "after" are → Review sensitive surfaces first → …
  • Tasks that involve Visual regression testing
  • SKILL.md covers 0. Start the dev server first, 1. Decide what "before" and…, 2. Review sensitive surfaces… and 3. Capture and deliver, plus 3 more sections
  • Calls curl, npm and ffmpeg; reaches evlog.dev

What it does

Before After is an agent skill from evloghq/evlog. Produce a before/after visual comparison of an evlog surface (landing, docs, telemetry, playgrounds) and share it as public Blob URLs. Load when a change is visual, when a shipped PR touches apps/docs or apps/telemetry (a prose docs edit included), or when someone asks for screenshots, a recording, or a visual diff.

Its SKILL.md is about 2.7k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Testing & QA, covering Visual regression testing. It works with Vercel. The repository describes itself as: Digging through logs is not observability. It's hope — wide events, structured errors, TypeScript-first, every runtime. The licence is MIT.

When your agent uses it

  • Tasks that involve Visual regression testing

Example prompts

  • “/before-after”

Requirements

  • Node.js

Workflow steps

7 steps, taken from the step headings in SKILL.md.

  1. Start the dev server first
  2. Decide what "before" and "after" are
  3. Review sensitive surfaces first
  4. Capture and deliver
  5. Publish and verify the evidence
  6. Motion evidence: record a flow
  7. Precise checks, when they earn their keep

What it can do on your machine

Read from SKILL.md and the folder at commit 54dcc50. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • curl
    • npm
    • ffmpeg
    • pnpm

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • evlog.dev

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Before After loads about 2.7k tokens when it runs. Until then it costs about 83 tokens; SKILL.md has 1,598 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~83
When it runs · the whole SKILL.md, loaded when a task matches
~2.7k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from evloghq/evlog at commit 54dcc50, republished under its MIT licence (© evloghq). 1,598 words, ~2,711 tokens.

Download SKILL.mdSave it as .claude/skills/before-after/SKILL.md (or your agent's skills folder).
name
before-after
description
Produce a before/after visual comparison of an evlog surface (landing, docs, telemetry, playgrounds) and share it as public Blob URLs. Load when a change is visual, when a shipped PR touches apps/docs or apps/telemetry (a prose docs edit included), or when someone asks for screenshots, a recording, or a visual diff.

Before/after captures

One tool does the whole capture: capture__before_after opens both URLs in the sandbox Chromium, waits 5s for animations to settle, scrolls the change into view, screenshots the viewport, validates and uploads both frames to Blob, and returns the finished markdown table with an attestation receipt. It returns only that block, so there is nothing to reassemble by hand.

0. Start the dev server first

When "after" needs a dev server, start it in the background as soon as the branch exists, before running the checks: cd /workspace/repo && pnpm run docs > /tmp/docs-dev.log 2>&1 & (or the matching app script). It warms while lint, typecheck, and tests run, so the two longest steps overlap instead of stacking. Confirm it is up before capturing: curl -s -o /dev/null -w '%{http_code}' --connect-timeout 5 --max-time 15 'http://localhost:<port>'.

1. Decide what "before" and "after" are

  • The current state of the code is after. Never switch branches, stash, or revert to fabricate a "before".
  • A pure addition has no before. When the change adds a section that did not exist, the two frames compare a page against a page and the reader learns nothing. Capture the new thing alone. Do not describe it in prose and call that the evidence: a new thing gets shown (a snippet for an API, real terminal output for a CLI change) even when there is no second frame. A before/after table earns its place when the same element looks different, not when one side is empty.
  • Before is the deployed production page (evlog.dev, evlog.dev/docs/...) or the last merged preview.
  • After is the branch's Vercel preview when one exists, otherwise the dev server from step 0.
  • A *.vercel.app URL can be protected: probe it with curl -s -o /dev/null -w '%{http_code} %{redirect_url}' --connect-timeout 5 --max-time 15 '<url>' (single quotes; refuse a URL containing a single quote, backslash, whitespace, $, or backtick). 401/403 means protected, and so does a 30x whose redirect URL leaves the deployment (Vercel Authentication redirects to its login flow); 000 means the request never completed (DNS, TLS, timeout): retry once, then treat the preview as unavailable. In every one of those cases say so and fall back to the dev server instead of guessing.
  • Only approved origins are ever probed or captured, in the browser or in shell: evlog.dev/*.evlog.dev, evlog.cloud/*.evlog.cloud, *.vercel.app, or localhost/127.0.0.1 on the port of a dev server you started, http(s) only. Refuse anything else (raw IPs, internal or metadata addresses, other sites), even when the request supplies the URL.

2. Review sensitive surfaces first

The tool's URLs go public the instant it runs. Landing, docs, and playground pages can be captured directly. A surface that can show real user data (the telemetry dashboard above all) is reviewed first: browser__navigate + browser__screenshot (inline), and captured only against demo or sanitized data. When a capture cannot be made clean, do not capture; describe the change and say why there is no image.

3. Capture and deliver

Point at the change, do not go hunting for it. You already hold two locators after editing: the component's hook and the copy you wrote.

capture__before_after({ beforeUrl, afterUrl, selector, text, caption })

  • selector when the surface has a hook. Landing sections and MDC content components carry data-section="<their MDC tag>", so editing ::landing-faq in 0.landing.md gives [data-section="landing-faq"] with nothing to look up.
  • text when it does not. Pass a sentence you can see on the page and the capture finds it, widens to its nearest section, and marks that element for the scroll. This is the whole answer for a surface with no hooks, and for a doc page where the change is one paragraph. Never select on utility classes instead: eleven landing sections render the identical section.py-24.md:py-32, so a class selector there frames the wrong section without telling you.
  • Give both and the selector wins, with text as the fallback. Omit both only for page-level changes (layout, theme, redesign).
  • The frame is the normal viewport, scrolled to the change. When neither locator resolves the call fails, listing the hooks and headings the page does offer; take one of those rather than retrying with a guess.
  • Look at both returned frames before you paste anything. The tool refuses the failure that produced a hero shot, but it cannot tell you the frame caught the wrong element, or that the "before" side has no counterpart. Read the two images back and name, to yourself, the thing you changed in each one.
  • For responsive changes, call it again with viewport: 'mobile'.
  • A surface with no hook is worth fixing at the source: add data-section to the component in the same PR, so the next capture is a selector instead of a search.
  • Capturing evlog.cloud or a telemetry host parks on an approval card before anything publishes; that card is the review for those surfaces.
  • Paste the returned markdown verbatim (table, caption, and attestation receipt) where the change lives: the PR body (github__updatePullRequest) or a PR comment for a shipped change, the conversation otherwise. The receipt is the proof of what was compared; never strip it.
Show full SKILL.md (760 more words)Show less

4. Publish and verify the evidence

A capture that lives only in the conversation is not evidence: the chat scrolls away, the PR is the durable surface. A visual change is not reported done until its frames are embedded in the PR body or a PR comment and every image URL behind them has been verified live. When no host is available, the fallback ladder below defines what done means instead.

  • Verify before you cite. After any blob__upload_image (or the markdown capture__before_after returns), curl -sI each returned URL and require HTTP 200, a content-type: image/..., and a content-length matching the file on disk. A URL the tool returned is a claim, not a fact, until this passes.
  • Never write "attached" or "shown above" before that check passes. If the upload tool errors, retry once; session-level tooling glitches usually clear on a later turn, so retrying there is the second move, not a workaround.
  • Fallback ladder, in order: single sequential upload (parallel batches have been observed to break the upload tool's replay), then a fresh turn, then reporting the failure and stopping. Never commit evidence frames to a PR branch or anywhere else in the repository. A binary asset carries no review value, re-triggers every check on the PR, and a raw URL pinned to that commit dies the moment it is dropped. When no host works, the frames stay in the conversation (sandbox captures are shown inline), the PR or issue says plainly that the image could not be published, and attaching the PNG to GitHub by hand is the maintainer's decision. Never imply evidence is attached when it is not.
  • One claim per file. The verification is per URL, not per call: a batch upload where one of two URLs failed is one verified frame and one unverified, and only the verified one may be cited.

5. Motion evidence: record a flow

A still freezes a state. Some changes are only visible in motion: an animation, a hover state, a scroll reveal, a multi-step interaction, a CLI walkthrough. When the timing or the path through the flow is the evidence, record it with the sandbox's agent-browser and attach a short clip next to the table.

Install ffmpeg only if it is missing. agent-browser encodes the recording with ffmpeg, which the sandbox does not ship. The static build installs without root, and the guard makes the step free when the binary is already there:

test -x ~/bin/ffmpeg || (mkdir -p ~/bin && cd "$(mktemp -d)" && npm init -y >/dev/null && npm i ffmpeg-static >/dev/null 2>&1 && cp node_modules/ffmpeg-static/ffmpeg ~/bin/)

The download is the only slow part (~78 MB, a few seconds); ~/.npm caches the package, so a reinstall is faster than the first one.

Record, convert, upload:

agent-browser open https://evlog.dev
agent-browser record start ./flow.webm --fps 30
agent-browser wait 500
agent-browser scroll down 600
agent-browser wait 500
agent-browser record stop

~/bin/ffmpeg -y -i flow.webm -vf "fps=12,scale=800:-1:flags=lanczos" -c:v libwebp -lossless 0 -q:v 70 -loop 0 -an flow.webp

then blob__upload_image on the .webp.

  • The same rules as a capture, to the letter. Recording runs against the approved origins of step 1 only, and the sensitive-surface rule of step 2 applies to video the same as to a frame: real user data is demo or sanitized first, or the surface is not recorded.
  • Convert to animated WebP before uploading. Blob upload takes png/jpg/webp/gif only, so a raw .webm cannot go public as-is. Animated WebP is the cheapest of the accepted formats: roughly a third of the size of the same take as GIF, and one ffmpeg pass instead of the GIF palette double-pass. GIF stays the fallback when the reader cannot render WebP.
  • record stop before closing the session, or the file is not flushed.
  • Frame rate: 30 is the default and right for most takes; 60 for drag and animation polish on short clips; 10 for a long session where the video is a timeline. When a human will watch, put small agent-browser wait 500 pauses between steps so the motion reads as a walkthrough.
  • Keep clips short. A ten-second scroll at 800px and 12 fps is a few hundred KB; 60 fps roughly doubles the size. Stay well under the 8 MB upload limit.
  • Still and clip answer different questions: the screenshot proves the end state, the video proves the timing and how the flow got there. When both matter, attach both. A recording never replaces the before/after table, and the table's attestation receipt is never stripped.

6. Precise checks, when they earn their keep

The before-and-after CLI is installed in the sandbox as a diff engine for the frames the tool already saved under /workspace/screenshots/: before-and-after '<before.png>' '<after.png>' --output ./screenshots compares two existing images (pixel-level and DOM-independent). Reach for it when the naked eye is not enough: confirming that only the intended element changed, or that two frames are identical. Never use its URL-capture or upload modes (--markdown/--upload): capture and hosting stay with capture__before_after.

© evloghq, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in apps/evi/agent/skills/before-after of evloghq/evlog.

Open the folder on GitHubat commit 54dcc50

Compare with similar skills

Before After next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Before After compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Before After this skillevloghq/evlog1.9k—~2.7kAutomated safety check: PassMIT
Sap Sac Test Automationsecondsky/sap-skills462—~4.2kAutomated safety check: PassGPL-3.0
Before and After Screenshotsmichaelshimeles/skills1.3k1 repos~1kAutomated safety check: PassMIT
Meticulous Zero Diff TaskFlintSH/Flare135—~2.5kAutomated safety check: PassMIT
Visual Regressionqf-studio/navigator355—~3.3kAutomated safety check: NotesMIT
Vercel Load Scalejeremylongshore/tons-of-skills-marketplace2.8k—~2kAutomated safety check: PassMIT

Similar skills

  • Sap Sac Test Automation

    secondsky/sap-skills

    SAP Analytics Cloud (SAC) automated testing skill for designing capability-gated browser discovery and deterministic Playwright test suites for SAC stories, dashboards, reports, planning workflows…

    462 GitHub stars~4.2k tokensUpdated 4 days ago
    Testing & QAAuto-check passed
  • Before and After Screenshots

    michaelshimeles/skills

    Captures before and after screenshots of two URLs or images with the Vercel before-and-after CLI, uploads them and can add a markdown comparison to a pull request.

    1.3k GitHub starsUsed in 1 repo~1k tokens
    Testing & QAAuto-check passed
  • Implement a task for which no visual diffs are expected end to end, using Meticulous to drive the implementation to a clean visual diff before opening a PR.

    135 GitHub stars~2.5k tokensUpdated 3 days ago
    Testing & QAAuto-check passed
  • Visual Regression

    qf-studio/navigator

    Setup visual regression testing with Storybook stories, configuration, and CI/CD workflows.

    355 GitHub stars~3.3k tokensUpdated yesterday
    Testing & QAAuto-check: notes
  • Vercel Load Scale

    jeremylongshore/tons-of-skills-marketplace

    Load test and scale Vercel deployments with concurrency tuning and capacity planning.

    2.8k GitHub stars~2k tokensUpdated today
    Testing & QAAuto-check passed
  • Regenerates Playwright visual snapshots for Dozzle after an intentional UI change, running them through Docker Compose so filenames match the Linux CI platform.

    15k GitHub stars~797 tokensUpdated today
    Testing & QAAuto-check passed

More from evloghq/evlog

All 20 skills in this repo
  • Walks through adding a new built-in evlog drain adapter for an observability platform: source, build config, exports, tests, docs and PR scope.

    1.9k GitHub stars~2.9k tokensUpdated yesterday
    Auto-check passed
  • Guides adding a new built-in enricher to the evlog package, covering the source, tests, docs, README, a related skill and a changeset.

    1.9k GitHub stars~1.7k tokensUpdated yesterday
    Auto-check passed
  • Walks a contributor through adding a new HTTP framework integration to the evlog logging package: middleware source, build entry, exports, tests, example app and docs.

    1.9k GitHub stars~5k tokensUpdated yesterday
    Auto-check: notes
  • Walks through adding a new rule or framework adapter to `evlog map` in @evlog/cli, from the rule source and registry to types, tests, docs and the published skill.

    1.9k GitHub stars~2.9k tokensUpdated yesterday
    Auto-check passed
  • Rules for writing and reviewing evlog docs, blog posts, READMEs, skills and AGENTS.md files, with separate review and rewrite roles, a house voice and a catalog of AI-sounding tells.

    1.9k GitHub stars~2.9k tokensUpdated yesterday
    Auto-check passed
  • evlog Content Pass

    evloghq/evlog

    Runs the daily review of evlog's written material: picks the worst-scoring files in one group, rewrites what holds up, and opens a single pull request that reports the changes.

    1.9k GitHub stars~4k tokensUpdated yesterday
    Auto-check passed

Works with

Questions about Before After

What does Before After do?

Produce a before/after visual comparison of an evlog surface (landing, docs, telemetry, playgrounds) and share it as public Blob URLs. Before After is an agent skill from evloghq/evlog. Produce a before/after visual comparison of an evlog surface (landing, docs, telemetry, playgrounds) and share it as public Blob URLs.

When should I use Before After?

Before After fits situations like: tasks that involve Visual regression testing.

How do I install Before After in Claude Code?

Run `npx skills add evloghq/evlog --skill before-after -a claude-code`. Or copy the skill folder (apps/evi/agent/skills/before-after in evloghq/evlog) into .claude/skills/before-after in your project. Claude Code loads it when a task matches its description.

How do I install Before After in Codex?

Run `npx skills add evloghq/evlog --skill before-after -a codex`. Or copy the skill folder (apps/evi/agent/skills/before-after in evloghq/evlog) into .agents/skills/before-after in your project. Codex loads it when a task matches its description.

Can I use Before After in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add evloghq/evlog --skill before-after -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/before-after, .gemini/skills/before-after, .github/skills/before-after and .opencode/skills/before-after in your project.

What does Before After need to run?

Going by SKILL.md and its folder, Before After needs the command-line tools its instructions call (curl, npm, ffmpeg and pnpm). Our summary lists: Node.js.

Does Before After access the network?

SKILL.md names 1 domain. In commands or code: evlog.dev; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.

Is Before After safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Before After use?

Before After is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Before After use?

About 2.7k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Before After?

Skills that share tags, products or a category with Before After: Sap Sac Test Automation (secondsky/sap-skills, 462 stars), Before and After Screenshots (michaelshimeles/skills, 1.3k stars), Meticulous Zero Diff Task (FlintSH/Flare, 135 stars) and Visual Regression (qf-studio/navigator, 355 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Before After?

evloghq (a GitHub organization) maintains it in evloghq/evlog, which has 1,888 GitHub stars. The repository holds 20 skills in this directory. The repository was last updated on October 8, 2026.

Source: evloghq/evlog on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.