Comparing Branches Visually
spencerpauly/awesome-cursor-skills
Check out two branches in separate worktrees, start both dev servers on different ports, screenshot the same pages, and produce a visual diff.
Check what your change did to a web app's pages before you say you're done — berthd shots compare screenshots your worktree's dev server and the main checkout's at phone, tablet and desktop widths…
$ npx skills add sean-brydon/berthd --skill berth-visual-diff -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install sean-brydon/berthd berth-visual-diff --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/sean-brydon/berthd.git skills-src && mkdir -p .claude/skills && cp -r skills-src/internal/integrations/skills/berth-visual-diff .claude/skills/berth-visual-diff && rm -rf skills-srcUse ~/.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/
Install the "berth-visual-diff" agent skill from https://github.com/sean-brydon/berthd/tree/main/internal/integrations/skills/berth-visual-diff into .claude/skills/berth-visual-diff/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "berth-visual-diff", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/sean-brydon/berthd/tree/main/internal/integrations/skills/berth-visual-diffType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add sean-brydon/berthd --skill berth-visual-diff -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install sean-brydon/berthd berth-visual-diff --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/sean-brydon/berthd.git skills-src && mkdir -p .agents/skills && cp -r skills-src/internal/integrations/skills/berth-visual-diff .agents/skills/berth-visual-diff && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "berth-visual-diff" agent skill from https://github.com/sean-brydon/berthd/tree/main/internal/integrations/skills/berth-visual-diff into .agents/skills/berth-visual-diff/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "berth-visual-diff", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add sean-brydon/berthd --skill berth-visual-diff -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install sean-brydon/berthd berth-visual-diff --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/sean-brydon/berthd.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/internal/integrations/skills/berth-visual-diff .cursor/skills/berth-visual-diff && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "berth-visual-diff" agent skill from https://github.com/sean-brydon/berthd/tree/main/internal/integrations/skills/berth-visual-diff into .cursor/skills/berth-visual-diff/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "berth-visual-diff", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/sean-brydon/berthd.git --path internal/integrations/skills/berth-visual-diff--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add sean-brydon/berthd --skill berth-visual-diff -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install sean-brydon/berthd berth-visual-diff --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/sean-brydon/berthd.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/internal/integrations/skills/berth-visual-diff .gemini/skills/berth-visual-diff && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "berth-visual-diff" agent skill from https://github.com/sean-brydon/berthd/tree/main/internal/integrations/skills/berth-visual-diff into .gemini/skills/berth-visual-diff/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "berth-visual-diff", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install sean-brydon/berthd berth-visual-diffInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add sean-brydon/berthd --skill berth-visual-diff -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/sean-brydon/berthd.git skills-src && mkdir -p .github/skills && cp -r skills-src/internal/integrations/skills/berth-visual-diff .github/skills/berth-visual-diff && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "berth-visual-diff" agent skill from https://github.com/sean-brydon/berthd/tree/main/internal/integrations/skills/berth-visual-diff into .github/skills/berth-visual-diff/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "berth-visual-diff", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add sean-brydon/berthd --skill berth-visual-diff -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install sean-brydon/berthd berth-visual-diff --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/sean-brydon/berthd.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/internal/integrations/skills/berth-visual-diff .opencode/skills/berth-visual-diff && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "berth-visual-diff" agent skill from https://github.com/sean-brydon/berthd/tree/main/internal/integrations/skills/berth-visual-diff into .opencode/skills/berth-visual-diff/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "berth-visual-diff", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
berth-visual-diffCheck what your change did to a web app's pages before you say you're done — berthd shots compare screenshots your worktree's dev server and the main checkout's at phone, tablet and desktop widths…
Berth Visual Diff is an agent skill from sean-brydon/berthd. Check what your change did to a web app's pages before you say you're done — berthd shots compare screenshots your worktree's dev server and the main checkout's at phone, tablet and desktop widths, diffs every pair pixel by pixel, prints which pages changed, where (named by the element), and what broke (a 404, a 500, a page that now scrolls sideways), and shows the result in the user's Berth as a visual diff with a before/after slider and a heatmap. Use after any change that can show on a page (CSS, components…
Its SKILL.md is about 1.9k 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 and Git worktrees. The repository describes itself as: Run coding agents on your dev boxes: worktrees, terminals, orchestration, kits and automations, with a desktop app. The licence is MIT.
7 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit add33bd. It shows what the files ask for, not the result of running them.
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.
No scripts in the folder and no shell commands in SKILL.md (its code samples are bash and json).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Berth Visual Diff loads about 1.9k tokens when it runs. Until then it costs about 165 tokens; SKILL.md has 958 words of instructions outside code blocks.
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.
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.
The full file from sean-brydon/berthd at commit add33bd, republished under its MIT licence (© sean-brydon). 958 words, ~1,932 tokens.
.claude/skills/berth-visual-diff/SKILL.md (or your agent's skills folder).After a UI change, look before you say done. One command shoots your worktree's pages and the same pages of a base, at several widths, and says what moved:
berthd shots compare # pages and sizes from .berth/config.json
berthd shots compare --pages / /search /login --sizes 375 768 1280
berthd shots compare --base turn-start # against the start of your turn
berthd shots compare --color-scheme both # light and darkIt prints a few lines (about 450 tokens for 6 pages × 3 sizes) and keeps
the screenshots, the heatmap and the regions as a visual diff the user sees
in their Berth app, beside your chat. You need a dev server running in your
worktree ($BERTH_PORT, see berth-preview). The default base is the main
checkout's dev server; when it isn't running, the compare uses your
turn-start baseline instead and says so on a note: line, or, with no
baseline either, tells you what to do.
berthd shots baseline (saves your pages as turn-start, ~5 s).berthd shots compare. About 5-7 s for 6 pages × 3 sizes.look: <name>.png,
a before|after crop of its biggest region (the folder is on the look:
line at the end), at most 800 px wide (about 500 tokens to read). Read
one only when the numbers and the element name don't tell you enough.--new) unless the base changed.Never say a UI change is done while the summary shows an ERROR, a page
that now scrolls sideways, or a changed page you can't explain.
visual diff vd-8f4c600c v1: search-perf vs main, 6 pages × 3 sizes in 5.3s
2 of 6 pages changed · most: /search at 768 (48%) · 1 layout warning · 3 new shots · 3 errors
/account 375,768,1280 ERROR: after: HTTP 500
/deals 375,768,1280 NEW: 404 before
/search 375 changed 30% 5 regions, largest 359x712 at 16,704 (section.wrap in main)
⚠ now scrolls sideways: 125px wider than the screen
look: 86882c2594cf18d7.png
/ 375 changed 1.7% 1 region, largest 344x64 at 16,296 (form.hero-search in section.wrap.hero); height 1811 → 1823; 450px from y=1277 only moved +12px
/login unchanged at every size
look: before|after crops of each shot's largest change, in /…/diffs/vd-8f4c600c/img/NEW: not in the baseline means the
baseline didn't shoot that page or size.around … means the region spans several elements.375 768 1280 (phone, tablet, laptop) covers most breakpoints.
Add the project's own breakpoints (read its CSS or Tailwind config) when a
change is near one.--color-scheme both shoots every page in light and dark (twice the
shots); dark only dark. Use it when you touch colours or theme tokens..berth/config.json so every compare is the same:{
"shots": {
"pages": ["/", "/search", "/login", "/account"],
"sizes": [375, 768, 1280],
"mask": ["time", "[data-testid=avatar]", ".relative-date"]
}
}Anything that differs between two loads of the same page (clocks, "5
minutes ago", random avatars, ads, carousels, live counts) shows as a change
every time. Mask it with CSS selectors: in shots.mask, or --mask SEL for
one run. A masked area is painted flat on both sides and left out of the
diff. Prefer the narrowest selector (time.updated, not header); a mask
hides real changes too. If a page keeps changing with no change of yours,
compare with a baseline you just took: what differs is what to mask.
Berth already makes loads repeatable: reduced motion, animations settled
(finite ones at their end, endless ones removed), no transitions or caret,
fonts and images loaded, lazy content scrolled in, the network quiet, UTC
and en-US, a fixed viewport. "seed_random": true makes Math.random
repeat too.
--base main (the default): the main checkout's dev server, as it runs
now. Best for "what does my branch change?". Without --base, a stopped
main falls back to turn-start; with --base main it doesn't.--base turn-start: what berthd shots baseline saved (at the start of
your turn, or before you began). Best for "what did this turn change?".--base accepted: what the user accepted with Accept as baseline in
the visual diff (or berthd shots accept ID). After they accept, compare
against it to show nothing else moved.berthd shots baseline --name NAME saves your worktree's pages now, to
compare with later (--base NAME): before a refactor that should change
nothing, say.© sean-brydon, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in internal/integrations/skills/berth-visual-diff of sean-brydon/berthd.
Open the folder on GitHubat commit add33bd
Berth Visual Diff 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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Berth Visual Diff this skillsean-brydon/berthd | 272 | — | ~1.9k | Automated safety check: Pass | MIT | |
| Comparing Branches Visuallyspencerpauly/awesome-cursor-skills | 842 | — | ~532 | Automated safety check: Pass | CC0-1.0 | |
| Verifymorapelker/hive | 470 | — | ~709 | Automated safety check: Pass | MIT | |
| UI Visual DebuggingNangoHQ/nango | 13k | — | ~1.3k | Automated safety check: Pass | Custom licence | |
| Nv Implementnovuhq/novu | 40k | — | ~1.7k | Automated safety check: Pass | Custom licence | |
| Terminal Screenshot CaptureQwenLM/qwen-code | 28k | — | ~2k | Automated safety check: Pass | Apache-2.0 |
spencerpauly/awesome-cursor-skills
Check out two branches in separate worktrees, start both dev servers on different ports, screenshot the same pages, and produce a visual diff.
morapelker/hive
Build, launch, and drive this worktree's Hive app over CDP to verify a change end-to-end with playwright-cli
NangoHQ/nango
A skill your agent uses when modifying or visually debugging Nango frontend UI, including packages/webapp, packages/connect-ui, browser interactions, screenshots, and visual regressions.
novuhq/novu
Implement planned work by fanning out parallel subagents on isolated worktrees — TDD at pre-agreed seams, per-slice nv-park-and-review, merge back, full suite once at the end.
QwenLM/qwen-code
Drives a CLI through a TypeScript scenario and saves terminal screenshots at each step, so pull requests that change command output can be checked visually.
gambitph/Stackable
Local quality gate for the current worktree: review for risk/correctness (break, leak, undo intent), standards, spec, and anti-slop; then test, document, lint.
sean-brydon/berthd
Use berth to work across development boxes — list repos (locations) and their worktrees, make a worktree or a task (a worktree with an agent in it), start or read terminal sessions, find which port…
sean-brydon/berthd
Show the user data as a chart, table, diagram, notes or one small page in their Berth app instead of a wall of text — write a berth.chart JSON, a CSV, Mermaid, Markdown or a self-contained HTML file…
sean-brydon/berthd
Use your worktree's own page in a headless browser on the box — open it, read a compact snapshot with @refs, click, fill, press keys, wait, take a screenshot to a file, read console errors, and set…
sean-brydon/berthd
Automate berth with hooks — run a command when something happens (an agent finishes or needs the user, a worktree is created or removed, a session starts) or gate an action with a before: hook that…
sean-brydon/berthd
Drive other coding agents through berth — prompt a running agent, wait for its turn to end, run a check in its worktree, loop until a check passes, hand work to a fresh agent in a new worktree, ask…
sean-brydon/berthd
Run a worktree's dev server on its own port and show the page to the user in their Berth app — start the app on $BERTHPORT, check it answers, and open it as a browser tab next to your terminal with…
Categories
Check what your change did to a web app's pages before you say you're done — berthd shots compare screenshots your worktree's dev server and the main checkout's at phone, tablet and desktop widths…. Berth Visual Diff is an agent skill from sean-brydon/berthd. Check what your change did to a web app's pages before you say you're done — berthd shots compare screenshots your worktree's dev server and the main checkout's at phone, tablet and desktop widths, diffs every pair pixel by pixel, prints which pages changed, where (named by the element), and what broke (a 404, a 500, a page that now scrolls sideways), and shows the result in the user's Berth as a visual diff with a before/after slider and a heatmap.
Berth Visual Diff fits situations like: asks what changed visually; confirm a refactor changed nothing.
Run `npx skills add sean-brydon/berthd --skill berth-visual-diff -a claude-code`. Or copy the skill folder (internal/integrations/skills/berth-visual-diff in sean-brydon/berthd) into .claude/skills/berth-visual-diff in your project. Claude Code loads it when a task matches its description.
Run `npx skills add sean-brydon/berthd --skill berth-visual-diff -a codex`. Or copy the skill folder (internal/integrations/skills/berth-visual-diff in sean-brydon/berthd) into .agents/skills/berth-visual-diff in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add sean-brydon/berthd --skill berth-visual-diff -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/berth-visual-diff, .gemini/skills/berth-visual-diff, .github/skills/berth-visual-diff and .opencode/skills/berth-visual-diff in your project.
SKILL.md names no scripts, command-line tools or credentials: Berth Visual Diff is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
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.
Berth Visual Diff is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.9k tokens (SKILL.md is roughly 7.7k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Berth Visual Diff: Comparing Branches Visually (spencerpauly/awesome-cursor-skills, 842 stars), Verify (morapelker/hive, 470 stars), UI Visual Debugging (NangoHQ/nango, 13k stars) and Nv Implement (novuhq/novu, 40k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
sean-brydon (a GitHub user) maintains it in sean-brydon/berthd, which has 272 GitHub stars. The repository holds 7 skills in this directory. The repository was last updated on October 7, 2026.
Source: sean-brydon/berthd on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.