Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Diff a live page's accessibility violations against a baseline — by default compares uncommitted changes (stash-based), or pass --branch [<name>] to diff against a branch. Reports only new violations introduced, violations fixed, and pre-existing count. Use `scan` for a full audit with no diffing.
.claude/skills/sickn33-accesslint-diff/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-06 | ✗→✓ | ▲ Improved | 7% | 0% |
| case-07 | ✗→✓ | ▲ Improved | -12% | 0% |
| case-08 | ✗→✓ | ▲ Improved | -9% | 0% |
| case-10 | ✗→✓ | ▲ Improved | -4% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 7% | 0% |
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. If no URL in $ARGUMENTS, ask for one.
Parse $ARGUMENTS: strip --branch <name> if present → branch mode. If --branch has no value, use the default branch above. Remainder is the URL.
scan for a full audit with no diffing.bashPORT=$(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.
bashgit stash push -u -m "accesslint-diff-baseline" npx -y @accesslint/cli@latest "<url>" --port "$PORT" --snapshot accesslint-diff --snapshot-dir /tmp --update-snapshot git stash pop && sleep 2 npx -y @accesslint/cli@latest "<url>" --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 — the CLI opens a fresh tab each time so it always reads the current build. Use --wait-for "<selector>" to gate the audit until the rebuild is ready; without it, warn the user that a slow build may yield a stale baseline.
Keep the branch value in the quoted branch variable below; never paste or evaluate a branch name as shell syntax.
bashgit diff --quiet && git diff --cached --quiet || git stash push -u -m "accesslint-diff-branch" branch="<branch>" git check-ref-format --branch "$branch" >/dev/null case "$branch" in -*) echo "Refusing option-like branch name: $branch" >&2; exit 1 ;; esac git rev-parse --verify --quiet "$branch^{commit}" >/dev/null git switch "$branch" npx -y @accesslint/cli@latest "<url>" --port "$PORT" --snapshot accesslint-diff --snapshot-dir /tmp --update-snapshot [--wait-for "<selector>"] git switch - && git stash pop 2>/dev/null npx -y @accesslint/cli@latest "<url>" --port "$PORT" --snapshot accesslint-diff --snapshot-dir /tmp --format json [--wait-for "<selector>"]
Pass --selector, --include-aaa to both runs.
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)Each new violation: where (selector verbatim + file:line (symbol) if source present — never fabricate), evidence, fix (mechanical change or NEEDS HUMAN).
Don't edit. For fixes: apply mechanical ones then re-run accesslint:diff to verify; for bulk work hand off to accesslint:audit.
bashnpx -y @accesslint/chrome@latest stop --all # skip if ensure reported "managed":false
ensure always determines the port — never hardcode 9222.sleep 2 covers most HMR cases; if baseline looks identical to current, add --wait-for "<selector>".--wait-for is the rebuild gate.accesslint:scan for the full picture.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 14,726 | 7,176 | -51% | 1 | 1 | 0% | 3,014 | 1,668 | -45% | 0 | 0 | — |
case-02 | fail→fail | 55,134 | 3,745 | -93% | 1 | 1 | 0% | 6,939 | 1,604 | -77% | 0 | 0 | — |
case-03 | fail→fail | 18,924 | 3,557 | -81% | 1 | 1 | 0% | 2,429 | 1,654 | -32% | 0 | 0 | — |
case-04 | pass→pass | 9,668 | 2,171 | -78% | 1 | 1 | 0% | 1,672 | 1,505 | -10% | 0 | 0 | — |
case-05 | pass→pass | 12,057 | 3,923 | -67% | 1 | 1 | 0% | 1,962 | 1,826 | -7% | 0 | 0 | — |
case-06 | fail→pass | 10,921 | 4,033 | -63% | 1 | 1 | 0% | 1,782 | 1,898 | +7% | 0 | 0 | — |
case-07 | fail→pass | 11,105 | 2,927 | -74% | 1 | 1 | 0% | 1,873 | 1,655 | -12% | 0 | 0 | — |
case-08 | fail→pass | 17,254 | 8,459 | -51% | 1 | 1 | 0% | 2,877 | 2,627 | -9% | 0 | 0 | — |
case-09 | pass→pass | 7,497 | 2,692 | -64% | 1 | 1 | 0% | 1,296 | 1,614 | +25% | 0 | 0 | — |
case-10 | fail→pass | 14,424 | 6,438 | -55% | 1 | 1 | 0% | 2,557 | 2,450 | -4% | 0 | 0 | — |
case-11 | fail→pass | 7,925 | 2,250 | -72% | 1 | 1 | 0% | 1,413 | 1,511 | +7% | 0 | 0 | — |
case-12 | pass→pass | 6,490 | 2,069 | -68% | 1 | 1 | 0% | 1,111 | 1,548 | +39% | 0 | 0 | — |
case-13 | fail→pass | 10,989 | 2,742 | -75% | 1 | 1 | 0% | 1,815 | 1,669 | -8% | 0 | 0 | — |
case-14 | pass→pass | 12,853 | 2,940 | -77% | 1 | 1 | 0% | 2,086 | 1,713 | -18% | 0 | 0 | — |
case-15 | fail→pass | 9,169 | 1,528 | -83% | 1 | 1 | 0% | 1,634 | 1,453 | -11% | 0 | 0 | — |
case-16 | pass→pass | 12,144 | 2,693 | -78% | 1 | 1 | 0% | 2,024 | 1,634 | -19% | 0 | 0 | — |
case-17 | pass→pass | 8,156 | 3,250 | -60% | 1 | 1 | 0% | 1,402 | 1,574 | +12% | 0 | 0 | — |
case-18 | fail→pass | 14,205 | 3,931 | -72% | 1 | 1 | 0% | 2,307 | 1,839 | -20% | 0 | 0 | — |
case-19 | pass→pass | 10,471 | 2,964 | -72% | 1 | 1 | 0% | 1,640 | 1,631 | -1% | 0 | 0 | — |
case-20 | pass→pass | 13,158 | 5,729 | -56% | 1 | 1 | 0% | 2,380 | 2,253 | -5% | 0 | 0 | — |
case-21 | pass→fail | 4,954 | 4,494 | -9% | 1 | 1 | 0% | 867 | 2,039 | +135% | 0 | 0 | — |
case-22 | pass→pass | 12,856 | 10,382 | -19% | 1 | 1 | 0% | 2,599 | 3,325 | +28% | 0 | 0 | — |
case-23 | pass→pass | 12,429 | 13,462 | +8% | 1 | 1 | 0% | 2,910 | 4,332 | +49% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted. The headline lift of +30 percentage points is the difference between those two pass rates over the 23 comparable cases. 2 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.