
Accessibility Diff
Skill对比改动前后同一页面的无障碍问题:默认用 git stash 暂存未提交的改动来取得基线,也可与指定分支比较,报告新增、已修复与原有的 WCAG 违规,附选择器与修复建议,只定位不改代码,可用作 CI 关卡。通过 npx 调用 AccessLint 的 Chrome 与 CLI 工具,需要页面正在运行。
name: accessibility-diff
description: "Regression check — diff a live page's web accessibility (a11y) violations against a baseline. By default it compares your uncommitted changes (stash-based); pass `--branch [<name>]` to compare against a branch. Reports the new WCAG violations introduced, the ones fixed, and the count of pre-existing ones. Use it for 'did my change break accessibility', 'what a11y issues did this PR add', or as a CI gate. For a full scan of one page use `accessibility-scan`; for a whole site use `accessibility-audit`."
argument-hint: "[--branch [<name>]] [target|url]"
allowed-tools: Bash, Read, Glob, Grep, Skill, Task
Default branch: !git symbolic-ref refs/remotes/origin/HEAD --short 2>/dev/null | sed 's|.*/||' || echo main
Report only what changed. Locate; don't fix.
Shared grounding and honesty conventions: ../shared/methodology.md.
Parse $ARGUMENTS: if --branch <name> is present, remove it and use branch mode (no value means the default branch above). The rest is the target: a URL, a config target name, or empty for the default target from accesslint.config.json. If it's empty and there's no config, ask for a URL.
1. Audit
PORT=$(npx -y @accesslint/chrome@latest ensure | node -e 'process.stdin.on("data",d=>process.stdout.write(""+JSON.parse(d).port))')
Stash mode (default; uncommitted changes). Tell the user first: "Running in diff mode — stashing your changes to capture a baseline, then restoring. Your working tree will be fully restored." If git stash push fails, warn and exit.
git stash push -u -m "accesslint-diff-baseline"
npx -y @accesslint/cli@latest scan <target> --port "$PORT" --snapshot accesslint-diff --snapshot-dir /tmp --update-snapshot
git stash pop && sleep 2
npx -y @accesslint/cli@latest scan <target> --port "$PORT" --snapshot accesslint-diff --snapshot-dir /tmp --format json
Branch mode (--branch <name>). Tell the user first: "Diffing against <name> — checking out that branch to capture a baseline, then restoring. Your working tree will be fully restored." Branch switching triggers a rebuild but not a browser reload, so the CLI opens a fresh tab each run to read the current build. Use --wait-for "<selector>" to hold the audit until the rebuild is ready; without it, warn that a slow build may give a stale baseline.
git diff --quiet && git diff --cached --quiet || git stash push -u -m "accesslint-diff-branch"
git checkout <branch>
npx -y @accesslint/cli@latest scan <target> --port "$PORT" --snapshot accesslint-diff --snapshot-dir /tmp --update-snapshot [--wait-for "<selector>"]
git checkout - && git stash pop 2>/dev/null
npx -y @accesslint/cli@latest scan <target> --port "$PORT" --snapshot accesslint-diff --snapshot-dir /tmp --format json [--wait-for "<selector>"]
Pass --selector and --include-aaa to both runs.
2. Report
Accessibility diff — http://localhost:3000/ vs main (94 rules, live DOM)
2 new · 1 fixed · 4 pre-existing hidden
New — Critical
- color-contrast — 2.1:1 (needs 4.5:1), #bbb on #fff
where: main > p.subtitle fix: darken to #767676
Fixed
- img-alt — <img src="old.jpg"> (no longer present)
For each new violation: where (selector verbatim, plus file:line (symbol) if source is present; don't fabricate), evidence, and fix (mechanical change or NEEDS HUMAN).
Don't edit. For fixes, apply the mechanical ones and re-run accesslint:accessibility-diff to verify; for bulk work hand off to accesslint:accessibility-fix.
3. Tear down
npx -y @accesslint/chrome@latest stop --all # skip if ensure reported "managed":false
Notes
ensuredetermines the port; don't hardcode 9222.- CLI exit 2 means a bad URL or target, or the page never loaded; check the dev server.
- A target name resolves the same in both runs only if
accesslint.config.jsonis unchanged across the stash or checkout. If your changes touch the config, pass an explicit URL. - Stash mode:
sleep 2covers most HMR cases; if the baseline looks identical to current, add--wait-for "<selector>". - Branch mode: no HMR; the CLI opens a fresh tab each run, and
--wait-foris the rebuild gate. - Large DOM changes between runs cause selector drift; re-run
accesslint:accessibility-scanfor the full picture.
相關資源

Accessibility Scan
Skill用 AccessLint 规则引擎扫描一个正在运行的页面,列出可自动检出的 WCAG 2.2 违规,每条附 DOM 选择器、源码位置(有映射时)、证据与修复建议,只定位不修改。会自动准备可调试的 Chrome,通过 npx 运行 AccessLint CLI,可读取 accesslint.config.json 里配置的目标。
AccessLint/skills107
Web Design Guidelines
Skill按 Vercel 的 Web Interface Guidelines 审查界面代码,覆盖无障碍、焦点、表单、动画、排版、深色模式等规则,以「文件:行号」列出问题;每次审查前联网拉取最新规则。Vercel 官方维护。
vercel-labs/agent-skills32.5k
Web Quality Skills
Skill以实测为先审计并优化网页质量:结合 Lighthouse、Chrome DevTools 性能追踪与 CrUX 数据,覆盖 Core Web Vitals、WCAG 2.2 无障碍、SEO 与最佳实践,适用于任意前端框架。Addy Osmani 出品(非 Google 官方)。
addyosmani/web-quality-skills3k
Accessible Animation
Skill让网页动画尊重系统的「减少动态效果」设置:把动画分为直接移除(视差、大范围位移、接管滚动)、减弱缩短、始终保留三档,而不是一刀切全部关掉;给出 CSS 媒体查询与 JS matchMedia 的写法,覆盖 GSAP、Framer Motion、Lenis 等库,对应 WCAG 2.3.3。
iart-ai/web-animation-skills44
Accessibility Compliance
Plugin无障碍审查插件,含审计命令、界面校验子代理和 WCAG 2.2、读屏测试两个技能。设计走查或上线前,可让 agent 检查对比度、键盘操作与读屏兼容等问题并给出整改建议。需 Claude Code,自动化检测需本机 Node.js 环境。
wshobson/agents40.9k
Skills For Designers and Engineers
SkillSonner、Vaul 作者 Emil Kowalski 编写的设计工程技能:帮助选择动画曲线与时长,评审和改进动效,吸收 Apple 设计原则,让网页在手机上更像原生应用,并协助选择 UI 库、做多版本原型。
emilkowalski/skills46.5k