accessibility-audit
Skill0 starsChanged 9 days agoMITView on GitHub
Static accessibility audit of web and UI code (HTML, JSX/TSX, Vue, Svelte, Angular, XAML, Android XML, Flutter, Godot Control nodes) against WCAG 2.2 level AA - missing alt texts, unlabeled form fields, non-semantic clickable elements, keyboard access and focus order, visible focus, color contrast, ARIA misuse, missing lang and page title, heading order, target size, autoplay and zoom blocking - naming the WCAG success criterion for each finding. Use when asked to check/review/audit accessibility, a11y, WCAG, screen reader or keyboard support, or barrier-free UI.
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
- memi-design/design-skillstheir own version, first seen Nov 8, 2026
- Cure-Consulting-Group/ProductEngineeringSkillstheir own version, first seen Nov 4, 2026
- wormeyman/wormeyman-skillstheir own version, first seen Nov 2, 2026
Used with
Projects with it also use design-system-audit, flaky-test-triage and 8 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
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
Sagargupta16Skillupgrade-dependencies
Upgrade a project's dependencies one at a time, running the test suite after each bump and reverting the ones that break it. Use it during routine dependency maintenance, when a batch of updates has accumulated; before a major release, to go into it on current and patched dependencies; when Renovate or Dependabot PRs have piled up and you want them resolved locally in one sitting; when a security advisory means you need the patched version in, and you need to know what it breaks.
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 repository28 other files it gives its agents.
- api-design-reviewSkill
- architecture-reviewSkill
- complexity-checkSkill
- concurrency-reviewSkill
- config-reviewSkill
- cpp-google-styleSkill
- csharp-google-styleSkill
- dead-code-finderSkill
- dependency-auditSkill
- doc-comment-auditSkill
- error-handling-reviewSkill
- full-reviewSkill
- java-google-styleSkill
- logging-reviewSkill
- markdown-readme-google-styleSkill
- naming-reviewSkill
- owasp-security-reviewSkill
- performance-reviewSkill
- privacy-reviewSkill
- python-google-styleSkill
- regex-reviewSkill
- repo-hygieneSkill
- review-without-fixingSkill
- secrets-scanSkill
- shell-google-styleSkill
- sql-reviewSkill
- test-coverage-reviewSkill
- todo-auditSkill
The file
We split this skill into the rules it gives an agent
4 rules. 0 are common, 3 are distinctive, and 1 is very specific to this project.
0
Common
Most of the 46 edited versions we read keep these.
3
Distinctive
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 17
Check page/screen-level rules (AX8, AX9, AX14, AX17), then components (forms, buttons, links, images, dialogs, menus), then CSS (AX5, AX6, …
- Very specific: line 19
Use linters if installed (never install.
- Distinctive: line 60
Every finding has a concrete location and a WCAG success criterion.
- Distinctive: line 63
Do not change code. Apply fixes only when the user explicitly asks for it.
“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 (WCAG 2.2 AA)
Review only: report findings, never change UI code unless the user explicitly asks. A static review finds many problems but can't prove compliance: never claim the UI "is WCAG compliant". Recommend runtime tools and testing with a screen reader and keyboard only.
Source: https://www.w3.org/TR/WCAG22/ · Understanding docs: https://www.w3.org/WAI/WCAG22/Understanding/
Scope
Check the files/directories the user names, otherwise all UI code: *.html, templates (Razor, Jinja, Blade, Thymeleaf), *.jsx/*.tsx, *.vue, *.svelte, Angular templates, CSS/SCSS for focus and contrast, XAML, Android layouts, Flutter widgets, Godot .tscn UI scenes. Skip .git/, build output, vendor/, node_modules/, generated code and third-party component libraries (report their use, not their internals).
Steps
- Detect the UI technology and component library (MUI, Bootstrap, Angular Material … often handle ARIA already).
- Check page/screen-level rules (AX8, AX9, AX14, AX17), then components (forms, buttons, links, images, dialogs, menus), then CSS (AX5, AX6, AX12).
- Contrast (AX6): compute the ratio only when both colors are statically known. Relative luminance L = 0.2126 R + 0.7152 G + 0.0722 B with each channel c = c/255, then c ≤ 0.04045 ? c/12.92 : ((c+0.055)/1.055)^2.4; ratio = (L1 + 0.05) / (L2 + 0.05). Required: 4.5:1 normal text, 3:1 large text (≥ 24 px, or ≥ 18.66 px bold) and UI components/graphics.
- Use linters if installed (never install; mention if helpful):
eslint-plugin-jsx-a11y,eslint-plugin-vuejs-accessibility,@angular-eslinttemplate a11y rules, Android Lint accessibility checks. - Report (format below) and recommend runtime checks: axe DevTools /
@axe-core/cli, Lighthouse, Pa11y, Accessibility Insights, Android Accessibility Scanner, plus manual tests with NVDA/VoiceOver/TalkBack and keyboard only.
Rules (WCAG 2.2 success criterion)
- AX1 error: image/icon without text alternative, or decorative image not hidden (
alt="",aria-hidden) - 1.1.1 Non-text Content - AX2 error: form control without a programmatic label (
<label for>,aria-label(ledby)), placeholder used as the only label - 1.3.1, 3.3.2, 4.1.2 - AX3 error: clickable non-semantic element (
div/spanwithonClick) without role,tabindexand key handling - usebutton/a- 2.1.1 Keyboard, 4.1.2 Name, Role, Value - AX4 error: keyboard trap,
tabindex> 0, focus order that doesn't follow the visual order, dialogs that don't move/contain/restore focus - 2.1.2 No Keyboard Trap, 2.4.3 Focus Order - AX5 error: focus indicator removed (
outline: none/0without a visible replacement) or hidden behind sticky elements - 2.4.7 Focus Visible, 2.4.11 Focus Not Obscured (Minimum) - AX6 error: text contrast below 4.5:1 (3:1 large text); UI component/graphic contrast below 3:1 - 1.4.3 Contrast (Minimum), 1.4.11 Non-text Contrast
- AX7 warning: ARIA misuse - role that contradicts the native element,
aria-hidden="true"on focusable content, invalid/misspelledaria-*attributes, ARIA where native HTML would do - 4.1.2 - AX8 error: missing or wrong
langattribute on the page; language changes not marked - 3.1.1 Language of Page, 3.1.2 Language of Parts - AX9 warning: skipped heading levels, no
h1, headings used for styling, missing landmarks (main,nav) - 1.3.1, 2.4.6 Headings and Labels - AX10 error: link/button without accessible name (icon-only); warning: non-descriptive text ("click here", "more") - 2.4.4 Link Purpose (In Context), 4.1.2
- AX11 warning: autoplaying audio/video without pause/stop; media without captions - 1.4.2 Audio Control, 1.2.2 Captions (Prerecorded)
- AX12 warning: moving/blinking/auto-updating content longer than 5 s without pause - 2.2.2 Pause, Stop, Hide; info: animations without
prefers-reduced-motion(best practice, 2.3.3 is AAA) - AX13 error: information conveyed by color only (error fields only red, links only by color) - 1.4.1 Use of Color
- AX14 warning: missing or generic page title (
<title>, document title in SPAs on route change) - 2.4.2 Page Titled - AX15 warning: interactive targets smaller than 24×24 CSS px without enough spacing - 2.5.8 Target Size (Minimum)
- AX16 error: form errors not identified in text or not linked to the field (
aria-describedby,aria-invalid) - 3.3.1 Error Identification - AX17 error: zoom blocked (
user-scalable=no,maximum-scale=1) or layout that breaks at 200 % / 320 px width - 1.4.4 Resize Text, 1.4.10 Reflow - AX18 warning: functionality that needs dragging without a single-pointer alternative - 2.5.7 Dragging Movements
Framework notes
| Technology | Watch for |
| React / JSX | alt, htmlFor (not for), onClick on div, focus management in modals and route changes |
| Vue / Svelte / Angular | v-html/{@html}/[innerHTML] content without structure, custom components that drop aria-* attributes |
| XAML (WPF, WinUI, MAUI) | AutomationProperties.Name/HelpText, IsTabStop, TabIndex, keyboard accelerators |
| Android | contentDescription, importantForAccessibility, touch target ≥ 48 dp, labelFor |
| Flutter | Semantics widgets, semanticLabel on Image/Icon, excludeSemantics |
| Godot | focus_mode, focus neighbors for keyboard/gamepad navigation, readable font sizes and contrast in themes; screen reader support depends on the engine version - check the docs of the version used |
False positives to drop
Components from an accessible library used as documented · decorative images correctly marked · contrast findings where colors depend on runtime themes you couldn't resolve (mark as "possible") · hidden content that is intentionally removed from the accessibility tree.
Report
In the user's language, grouped by file/component:
path/to/file:line - error|warning|info - <ID> <rule> - WCAG <number> <name> - <who is affected and how, e.g. "screen reader users hear only 'button'"> - direction: <what must be true afterwards>- Every finding has a concrete location and a WCAG success criterion. Mark findings that depend on runtime state as "possible".
- Bulk hits with one root cause (e.g. one
Buttoncomponent without accessible name used 50 times): report once at the component with the count. - End with a summary: technology, findings per severity and per WCAG principle (perceivable, operable, understandable, robust), the runtime tools to run next, then the 3 most important things to fix first.
- Do not change code. Apply fixes only when the user explicitly asks for it.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
Reviews can't be read right now.
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.

