accessibility-audit
Skill2 starsChanged 57 days agoMITView on GitHub
Run a WCAG 2.2 (AA and above) accessibility audit of a live web app — automated axe-core scanning cross-referenced against the current WCAG success-criteria table, plus manual verification of what automated tools structurally can't check (keyboard operability, focus order, alt-text quality, timing/motion). Produces a per-criterion conformance report. Use when the user wants an accessibility/a11y audit, a WCAG compliance check, or to know whether a site meets AA before shipping.
55 other projects use a version of this.
Adopted by
Most recently taken up by
- ishandutta2007/Awesome-Claude-Skillstheir own version, first seen Nov 8, 2026
- ainurdev/mystical-assistanttheir own version, first seen Nov 8, 2026
- mzeleniuk/ClaudeVueProjectTemplatetheir own version, first seen Nov 8, 2026
- Smaui94/ClaudeSkillCollectiontheir own version, first seen Nov 8, 2026
- memi-design/design-skillstheir own version, first seen Nov 8, 2026
- Cure-Consulting-Group/ProductEngineeringSkillstheir own version, first seen Nov 4, 2026
Used with
Projects with it also use design-system-audit, flaky-test-triage and 10 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
jpoindexterSkilldesign-system-audit
Audit code for design system violations - grid spacing, tokens, existing components
Also in 4 projects that use this
SUDARSHANCHAUDHARISkillflaky-test-triage
Diagnoses inconsistent test results by separating product nondeterminism, automation defects, shared data, timing, infrastructure, environment, order, and concurrency effects.
Also in 3 projects that use this
tekumaraSkillapi-design-review
Reviews REST API design by inventorying routes, finding overlapping functionality, comparing payloads and pagination, and checking resource naming, URL structure, identifiers, errors, idempotency, and timestamps. Use when asked to review API routes, compare endpoints, find redundant or superseding operations, assess contract consistency, or run a REST API design review.
Also in 3 projects that use this
BufferoverflovvSkillobservability-setup
Add production observability to a FastMCP server: request IDs, slow-request logging, structured log fields, and optional Prometheus metrics. Use when: hardening logging for production, adding request tracing or correlation IDs, setting up slow-request alerts, adding a /metrics endpoint, or improving structured log output beyond the base middleware.
Also in 3 projects that use this
mmondoraSkillinfrastructure-as-code
Infrastructure as Code with Terraform and Pulumi. State management, modularity, drift detection, secrets handling. Use when provisioning cloud resources, writing Terraform/Pulumi modules, or managing infrastructure configuration.
Also in 3 projects that use this
OpenAISkilldesign-qa
Internal prototype QA helper. Use only after a Product Design prototype, URL-to-code build, or image-to-code build has a source visual target and a rendered implementation to compare before handoff. Do not use for broad UX critique, design critique, product audits, or flow reviews; route those user-facing requests to audit.
Also in 3 projects that use this
Other versions55 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 55
- me2resh/apexyard★ 542same name
- github/replica★ 230same name
- cuellarfr/design-skills★ 94same name
- adityareddy-dev/deskstudio★ 43same name
- launchapp-dev/animus-cli★ 39same name
- kumaran-is/claude-code-onboarding★ 35same name
- 5throck/ai-workspace-standards★ 25same name
- Indium-AI-Labs/indium-agentkit★ 18same name
- Ionate-Technologies/indium-agentkit★ 17same name
- ishandutta2007/Awesome-Claude-Skills★ 16same name
45 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository20 other files it gives its agents.
- AGENTS.mdAGENTS.md
- app-designSkill
- cloudflare-temporary-deploySkill
- code-reviewSkill
- codex-delegateSkill
- commit-documentorSkill
- constructorSkill
- datasecurerSkill
- dependabot-validatorSkill
- dogfoodSkill
- flask-testsSkill
- ideatorSkill
- lan-viewerSkill
- memorySkill
- ollama-delegateSkill
- pr-grill-meSkill
- rest-graphql-debugSkill
- system-oneSkill
- web-pentestSkill
- workflow-rulesSkill
The file
We split this skill into the rules it gives an agent
3 rules. 0 are common, 1 is distinctive, and 2 are very specific to this project.
0
Common
Most of the 46 edited versions we read keep these.
1
Distinctive
This author's own choices. Worth a look.
2
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 39
Create the output directory:
- Very specific: line 103
Read back {output_dir}/violations.json in full, plus manual findings.
- Very specific: line 123
If axe returns an empty violations[] array but incomplete[] is non-empty, treat incomplete entries as "needs manual review," not as passes …
“Common” is measured: kept by at least 6 in 10 of the 46 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Accessibility Audit Skill
WCAG-conformance testing of a web application: automated rule scanning against an up-to-date standards engine, manual verification of what that engine can't check by nature, and a report mapped to specific WCAG success criteria — not just a generic bug list.
This skill uses the separately installed dogfood browser runtime, or a native
browser tool that can run axe and capture equivalent manual evidence. A structural
ARIA snapshot is not an accessibility audit. Use the bundled
criteria reference to map evidence to criteria.
Prerequisites
Resolve dogfood from its loaded installation path, never from the caller's
working directory. If unavailable, report the missing dependency and stop before
launching. Follow its scripts/preflight.sh and scripts/setup.sh --install-browser
setup. Record the resulting cached driver's absolute path and repeat DRIVER=...
in each shell command; no writable skill installation or preinstalled browser is
assumed. Use a fresh output directory or explicitly resume existing findings.
Inputs
The user provides:
- Target URL — same discovery pattern as dogfood: check
package.jsonfor a dev script, probe common local ports (3000,5173,8080,4200,5000,8000), or ask for a staging/public URL if none respond. - Scope — which pages/flows to audit. Default to the site's key pages (home, nav targets, primary forms/flows) rather than every URL, and say explicitly what's in scope.
- Conformance target — default to WCAG 2.2 Level AA (includes earlier criteria except obsolete SC 4.1.1, removed in WCAG 2.2 — see references/wcag-criteria.md). Ask only if the user wants AAA on specific criteria, or wants to scope down to A-only.
- Output directory (optional, default
./accessibility-audit-output).
Workflow
Work through five phases. Track each as a task.
Phase 1: Plan
- Create the output directory:
{output_dir}/ ├── screenshots/ # Evidence for violations and manual findings ├── violations.json # Running list of findings (build this as you go) └── report.md # Final report (generated in Phase 5) - Confirm scope and conformance target with the user.
- Launch the shared browser driver in the background, same as dogfood:
Poll the state directory forDRIVER="/absolute/cache/path/browser-driver.mjs" mkdir -p {output_dir}/.browser nohup node "$DRIVER" launch --state-dir {output_dir}/.browser > {output_dir}/.browser/launch.log 2>&1 &READY; inspectlaunch.logand stop if startup fails. Close only this run’s browser in Phase 5.
Phase 2: Automated Scan
For each page in scope:
- Navigate:
DRIVER="/absolute/cache/path/browser-driver.mjs" node "$DRIVER" navigate --state-dir {output_dir}/.browser --url "https://example.com/page" - Run the axe scan, scoped to the conformance target's tags (default shown; drop
wcag22aafor a 2.1-only target, or add nothing extra for AAA — axe's AAA tags arewcag2aaa/wcag21aaa, add them explicitly only where the user asked for AAA on a specific criterion):DRIVER="/absolute/cache/path/browser-driver.mjs" node "$DRIVER" axe --state-dir {output_dir}/.browser --tags wcag2a,wcag2aa,wcag21a,wcag21aa,wcag22aa - For each violation in the result's
violations[]array, record:id,impact,tags(map to WCAG SC via references/wcag-criteria.md),description,help/helpUrl, and every entry innodes[](targetselector,html,failureSummary). - Screenshot flagged elements — use
annotateto badge and screenshot the page so violations have visual evidence, same as dogfood:DRIVER="/absolute/cache/path/browser-driver.mjs" node "$DRIVER" annotate --state-dir {output_dir}/.browser --path {output_dir}/screenshots/page-N.png - Append each violation to
{output_dir}/violations.json.
Phase 3: Manual Verification
Automated tools cover an estimated 30-50% of WCAG failures by nature — the rest require deliberate manual checks. Do these for every page/flow in scope, using the same driver:
- Keyboard-only navigation (2.1.1, 2.1.2, 2.4.3, 2.4.7): repeatedly
press --key Tabthrough the page. Verify every interactive element is reachable, focus order matches visual/logical order, focus is always visible, and nothing traps focus.DRIVER="/absolute/cache/path/browser-driver.mjs" node "$DRIVER" press --state-dir {output_dir}/.browser --key Tab DRIVER="/absolute/cache/path/browser-driver.mjs" node "$DRIVER" screenshot --state-dir {output_dir}/.browser --path {output_dir}/screenshots/focus-N.png - Screen-reader semantics (1.3.1, 2.4.6, 4.1.2): dump the accessibility tree and review landmark roles, heading hierarchy, and whether custom/ARIA controls expose sensible names and roles.
DRIVER="/absolute/cache/path/browser-driver.mjs" node "$DRIVER" snapshot --state-dir {output_dir}/.browser - Alt-text quality (1.1.1): axe only flags missing alt text. Read the
annotatescreenshots yourself (you're multimodal) and judge whether existing alt text is meaningful, not just present — "image123.png" or "photo" is a failure axe won't catch. - Reflow at 400% zoom (1.4.10): resize the effective viewport (or use
scroll+screenshotat a narrow width) and confirm no content loss or two-dimensional scrolling. - Timing, motion, flashing (2.2.1, 2.2.2, 2.3.1): observe any auto-advancing carousels, countdown timers, or animations over a few seconds; confirm pause/stop controls exist and nothing flashes more than 3×/second.
- Error identification and suggestion (3.3.1, 3.3.2, 3.3.3): submit forms with invalid/empty input, same as dogfood's form-validation testing, and judge whether errors are identified in text with a usable suggestion — not just a red border.
- Cross-page consistency (3.2.3, 3.2.4, 3.2.6), if scope spans multiple pages: confirm navigation, component labeling, and help mechanisms stay in the same relative order and use consistent names across pages.
Record each manual finding the same way as automated ones: WCAG SC, severity, evidence, expected vs. actual.
Phase 4: Categorize
- Read back
{output_dir}/violations.jsonin full, plus manual findings. - De-duplicate — the same underlying issue (e.g. a shared header component) often triggers on every page; merge those into one finding with all affected URLs listed, don't report it N times.
- For every WCAG SC actually touched by scope, assign a status: Pass, Fail, Needs manual review (axe can't be sure — e.g. it flags "check that this makes sense" rules), or N/A (criterion doesn't apply — e.g. no audio/video content means the media criteria are N/A).
- Sort automated violations by axe
impact(critical → serious → moderate → minor); sort manual findings by your own judgment of severity (Blocker/Major/Minor).
Phase 5: Report
- Fill templates/accessibility-report-template.md: executive summary, the full success-criteria checklist for the audited scope, violation details with screenshots, manual findings, not-tested section. Save to
{output_dir}/report.md. - State the overall conformance verdict explicitly and plainly — does this scope currently meet the target level, or not, and by how much (N violations across M criteria)? Don't bury this in the middle of the report.
- Close the browser session:
DRIVER="/absolute/cache/path/browser-driver.mjs" node "$DRIVER" close --state-dir {output_dir}/.browser - Surface the report and Critical/Serious violation screenshots to the user — the evidence is the point, same as dogfood.
Notes on axe-core's coverage
- axe-core is versioned via npm (
dogfood/scripts/package.json) —npm update axe-corein that directory pulls newer rules as the library evolves. This skill doesn't hardcode rule logic; it defers entirely to whatever axe-core version is installed. - A zero-violations automated scan is not a conformance guarantee — say so in the report. It means "no automated rule fired," not "meets WCAG." The Phase 3 manual checks are not optional filler; report both together.
- If
axereturns an emptyviolations[]array butincomplete[]is non-empty, treatincompleteentries as "needs manual review," not as passes — axe usesincompletespecifically for checks it can't resolve automatically (e.g. some color-contrast cases behind dynamic styles).
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

