accessibility-compliance-monitor
Paste into Claude Code, Claude.ai, the desktop app, or the browser extension — ⌘/Ctrl+V. ✓ Copied. Switch to Claude and paste — ⌘/Ctrl+V.
Accessibility Compliance Monitor
Run a recurring accessibility health-check, compare against a saved baseline, report regressions, and generate a compliance status dashboard for the specified regulation(s).
Intended for use in:
- Managed services sprints — run monthly or after each release
- Ongoing client programmes — track progress toward full WCAG 2.2 AA conformance
- CI/CD regression guard — integrate into release pipelines to block regressions
Usage
/accessibility-compliance-monitor <URL or sitemap> [--baseline <path>] [--output dashboard|regression|full] [--regulation ada|eaa|508|all]
Examples:
/accessibility-compliance-monitor https://localhost:3000 --baseline .a11y/baseline.json --output regression/accessibility-compliance-monitor sitemap.txt --output dashboard --regulation eaa/accessibility-compliance-monitor https://localhost:3000— first run, creates baseline
Phase 1 — Determine Run Mode
First run (no baseline):
Run the axe scan, save results as the baseline. Produce the initial compliance report.
Output: baseline-<YYYY-MM-DD>.json and a full audit report.
Subsequent runs (baseline exists): Run the axe scan, compare against baseline, report regressions and improvements. Output: regression report + updated dashboard.
Phase 2 — Axe Scan
If a single URL is provided:
npx @axe-core/cli <URL> \
--tags wcag2a,wcag2aa,wcag21a,wcag21aa,wcag22aa \
--reporter json \
--save .a11y/scan-<YYYY-MM-DD>.json
If a sitemap or multi-URL list is provided, iterate over each URL:
while IFS= read -r url; do
slug=$(echo "$url" | sed 's|https\?://||;s|/|-|g')
npx @axe-core/cli "$url" --tags wcag2a,wcag2aa,wcag21a,wcag21aa,wcag22aa \
--reporter json --save ".a11y/pages/$slug-<YYYY-MM-DD>.json"
done < sitemap.txt
Merge per-page results into a single aggregate JSON for comparison.
Phase 3 — Regression Detection
Compare the current scan against the baseline to identify:
New violations (regressions): Violations present in the current scan that were NOT in the baseline. These represent accessibility regressions introduced since the last audit.
Resolved violations (improvements): Violations present in the baseline that are NOT in the current scan. These represent successfully remediated issues.
Persistent violations: Violations present in both baseline and current scan. These are known open issues that have not yet been addressed.
# Extract violation IDs from JSON files using jq
BASELINE_IDS=$(jq -r '.violations[].id' .a11y/baseline.json | sort)
CURRENT_IDS=$(jq -r '.violations[].id' .a11y/scan-<date>.json | sort)
# New regressions
comm -13 <(echo "$BASELINE_IDS") <(echo "$CURRENT_IDS")
# Resolved issues
comm -23 <(echo "$BASELINE_IDS") <(echo "$CURRENT_IDS")
Regression gate rule:
If any critical or serious regressions are detected, mark the health-check as FAILED.
Moderate/minor regressions are flagged but do not fail the check.
Phase 4 — Compliance Status Dashboard
Generate a dashboard in the requested format. Map axe violation counts and AI-judged criterion status to regulatory conformance levels.
Regulatory mapping
| Regulation | Minimum bar | RBA target |
|---|---|---|
| ADA (USA) | WCAG 2.1 AA | WCAG 2.2 AA |
| Section 508 (US Federal) | WCAG 2.0 AA | WCAG 2.2 AA |
| EAA / EN 301 549 (EU) | WCAG 2.1 AA (Clause 9) | WCAG 2.2 AA |
| AODA (Ontario) | WCAG 2.0 AA | WCAG 2.1 AA |
WCAG 2.2 AA conformance ⊇ WCAG 2.1 AA ⊇ WCAG 2.0 AA — satisfying 2.2 AA satisfies all the above.
Dashboard output (--output dashboard)
# Accessibility Compliance Dashboard
**Product:** <name>
**Scan date:** <YYYY-MM-DD>
**Baseline date:** <YYYY-MM-DD>
**Pages scanned:** N
**Regulation(s):** <ada | eaa | 508 | all>
## Status
| Regulation | Status | Blocker count | Last reviewed |
|---|---|---|---|
| WCAG 2.2 AA | ⚠ Partially Compliant | N critical | <date> |
| ADA | ⚠ At Risk | N critical | <date> |
| EAA (EN 301 549) | ⚠ At Risk | N critical | <date> |
| Section 508 | ✅ Baseline Met | 0 critical | <date> |
## Finding Trend
| Sprint / Date | Critical | Serious | Moderate | Minor | Total |
|---|---|---|---|---|---|
| Baseline (<date>) | N | N | N | N | N |
| <date> | N | N | N | N | N |
| Today (<date>) | N | N | N | N | N |
| **Change** | **▼N** | **▼N** | **▲N** | **▼N** | **▼N** |
## Regressions Introduced (Action Required)
| Finding | SC | Severity | Page | Introduced |
|---|---|---|---|---|
| <description> | <SC> | critical | <URL> | <date> |
## Issues Resolved This Period
| Finding | SC | Resolved |
|---|---|---|
| <description> | <SC> | <date> |
## Open Known Issues
| Finding | SC | Severity | Sprint target |
|---|---|---|---|
| <description> | <SC> | serious | Sprint N |
Phase 5 — Regression Report (--output regression)
Focused output for CI/CD pipeline integration or post-release review:
# Accessibility Regression Report
**Status:** PASSED / FAILED
**Scan date:** <YYYY-MM-DD>
**Compared to baseline:** <YYYY-MM-DD>
## Summary
- New critical violations: N (FAILED if > 0)
- New serious violations: N
- Resolved since baseline: N
- Net change: ▼N / ▲N
## New Violations (Regressions)
<table of new violations with SC, element, and severity>
## Resolved Violations
<table of resolved findings>
Phase 6 — EAA-Specific Compliance Statement Data
For EU-market products subject to the European Accessibility Act (enforcement active since June 28, 2025), the EAA requires an Accessibility Statement published on the website.
Extract data for the statement:
## EAA Accessibility Statement Data
**Compliance status:** Fully compliant / Partially compliant / Not compliant
**Standard:** EN 301 549 v3.2.1 (WCAG 2.1 AA Clause 9) — evaluated against WCAG 2.2 AA
**Evaluation date:** <YYYY-MM-DD>
**Next evaluation date:** <YYYY-MM-DD + 12 months>
**Known non-conformances:**
<list of open critical/serious findings with target remediation dates>
**Enforcement body:** <relevant national authority>
**Feedback mechanism:** <URL or email for accessibility feedback>
**Escalation path:** <enforcement body contact link>
Note: The Accessibility Statement must be updated annually or within 30 days of a significant product change. The EAA national enforcement bodies actively monitor statements for currency.
Phase 7 — Baseline Management
After each run, offer to update the baseline:
Current scan produced N total violations.
Baseline has N violations.
Net improvement: ▼N resolved, ▲N new.
Update baseline to today's scan? (y/n)
When updating:
- Archive the old baseline:
.a11y/archive/baseline-<old-date>.json - Save new baseline:
.a11y/baseline.json - Append a line to
.a11y/history.mdwith date, total violations, and critical count.
Phase 8 — Managed Services Schedule Recommendation
For managed services engagements, recommend a cadence based on the client's regulatory exposure:
| Exposure | Recommended cadence |
|---|---|
| Active EAA enforcement (EU market) | Monthly scan + quarterly full audit |
| ADA litigation risk (US, > 10k monthly users) | Quarterly scan + annual full audit |
| Internal tools only | Semi-annual scan |
| Post-launch stabilisation | Weekly scan for first 90 days |
Output this recommendation at the end of the first-run report.
Reference files
See accessibility-wcag-scan/reference.md for the full WCAG 2.2 AA criterion list.
See accessibility-vpat-acr/SKILL.md for producing a formal ACR from the dashboard data.
Technical details
- Plugin
- accessibility-auditor
- Author
- Dakota Smith
- Skill name
accessibility-compliance-monitor- Maturity
- experimental
- Security review
- No security review
- Owners
-
- design
- engineering
- security
- Argument hint
<URL or site-map-path> [--baseline <baseline-json-path>] [--output dashboard|regression|full] [--regulation ada|eaa|508|all]- Allowed tools
-
ReadWebFetch(domain:localhost)WebFetch(domain:*.localhost)Bash(npx axe *)Bash(npx @axe-core/cli *)Bash(npx playwright *)Bash(node *)Bash(bash *)Bash(cat *)Bash(ls *)Bash(diff *)Bash(jq *)WriteEdit
- Source
plugins/accessibility-auditor/skills/accessibility-compliance-monitor/SKILL.md
Edit this skill on GitHub — opens GitHub's web editor. No git knowledge needed.