audit-a11y
Skill5 starsChanged 4 months agoMITView on GitHub
Performs a multi-agent WCAG accessibility audit of the frontend codebase. This skill should be used when the user asks to "audit accessibility", "check WCAG compliance", "run an accessibility review", "a11y audit", "check screen reader support", "fix accessibility issues", or "verify keyboard navigation", or when the transmute-pipeline agent reaches Stage 6B of the pipeline.
1 other project uses a version of this.
Adopted by
Most recently taken up by
- JoviDeCroock/prachttheir own version, first seen Oct 11, 2026
Other versions1 project uses a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 1
- JoviDeCroock/pracht★ 106same name
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 repository24 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- templates/CLAUDE.mdCLAUDE.md
- audit-completenessSkill
- audit-securitySkill
- brdSkill
- docsSkill
- feedbackSkill
- hardenSkill
- implementSkill
- maintainSkill
- optimizeSkill
- polishSkill
- prdSkill
- prelaunchSkill
- redesignSkill
- refactorSkill
- remediateSkill
- scaffoldSkill
- seed-dataSkill
- smokeSkill
- tech-stackSkill
- user-guideSkill
- validate-specsSkill
- verifySkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
44 rules. About 0 are common, 19 are distinctive, and 25 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈19
Distinctive · estimate
This author's own choices. Worth a look.
25
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 17
Read the detailed guide at ${CLAUDE_SKILL_DIR}/references/audit-a11y-detailed-guide.md for the complete audit procedures, teammate spawn …
- Distinctive: line 25
Before any audit work, verify:
- Distinctive: line 28
If 5B shows FAIL, STOP — the codebase has unresolved implementation gaps that must be fixed before accessibility auditing.
- Very specific: line 29
If ./plancasting/_audits/security/report.md (6A) exists, read it to understand security changes that should not be undone during …
- Very specific: line 30
If ./plancasting/_audits/performance/report.md (6C) exists, read it to understand performance optimizations (e.g., font loading, animation …
- Very specific: line 31
Read ./CLAUDE.md and ./plancasting/tech-stack.md for project conventions.
- Distinctive: line 32
Read relevant PRD sections for implementation context.
- Very specific: line 45
Check ./plancasting/tech-stack.md for the Session Language setting.
- Very specific: line 59
Redundant ARIA on library components: Do not add aria-label, role, or aria-expanded to components that already handle these via their …
- Very specific: line 60
aria-hidden="true"to suppress violations: Never hide elements from the accessibility tree instead of fixing the issue. - Very specific: line 61
role="button"on div: Always prefer semantic HTML (<button>) over ARIA roles. - Distinctive: line 62
Inconsistent focus styles: Always use the project's established focus ring pattern from CLAUDE.md.
- Very specific: line 63
Layout breaks from semantic changes: Verify visual appearance after changing <div> to <section> or <nav>.
- Very specific: line 64
Missing
langattribute: Always check <html lang="..."> (WCAG 3.1.1 Level A). - Very specific: line 70
Read ./CLAUDE.md, ./plancasting/tech-stack.md, and BRD/PRD accessibility requirements.
- Distinctive: line 73
If targeting 2.1, still audit 2.2 criteria (e.g., 2.5.8 Target Size Minimum) as forward-looking best practices.
- Very specific: line 75
Write ./plancasting/_audits/accessibility/checklist.md with the full checklist.
- Distinctive: line 76
Create a task list for all teammates with dependency tracking.
- Very specific: line 87
Landmarks: Verify every page has exactly one <main>, <nav> with aria-label for each navigation region, <header> and <footer> where …
- Very specific: line 95
Keyboard navigation: Verify all interactive elements are Tab-reachable (and Shift+Tab for reverse).
- Very specific: line 96
Focus management: Verify visible focus on all interactive elements (no outline: none without replacement).
- Very specific: line 97
ARIA on interactives: Verify buttons have accessible names.
- Very specific: line 104
Text alternatives: Verify all <img> have meaningful alt text (or alt="" for decorative).
- Distinctive: line 106
Responsive accessibility: Verify readability at 200% zoom without horizontal scrolling.
- Very specific: line 107
Empty and error states: Verify empty states have descriptive text.
- Distinctive: line 114
When a violation cannot be fixed without architectural changes:
- Distinctive: line 116
Document the full conflict with evidence.
- Distinctive: line 125
If semantic-structure-auditor changes a div to a button, notify interactive-elements-auditor for keyboard handler review.
- Distinctive: line 126
If content-and-media-auditor finds contrast issues, notify semantic-structure-auditor for landmark styling adjustments.
- Very specific: line 132
Check for an existing accessibility test file before creating one.
- Very specific: line 133
Run accessibility tests: bun run test:e2e -- e2e/accessibility.spec.ts
- Very specific: line 134
Run the full test suite: bun run typecheck, bun run lint, bun run build, bun run test, bun run test:e2e
- Distinctive: line 144
PASS: No Level A violations; all Level AA violations fixed or verified as false positives
- Distinctive: line 145
CONDITIONAL PASS: All Level A violations fixed.
- Distinctive: line 152
Verify all file modifications are saved and committed.
- Very specific: line 156
always prefer semantic HTML over ARIA roles (<button> over <div role="button">).
- Very specific: line 157
never add aria-hidden="true" to suppress axe violations — fix the underlying issue.
- Distinctive: line 158
never add ARIA attributes that conflict with your component library's built-in accessibility.
- Distinctive: line 159
always use the project's focus ring convention from CLAUDE.md.
- Distinctive: line 160
always verify visual layout is preserved after semantic HTML changes.
- Very specific: line 161
always check <html lang="..."> matches the session language.
- Very specific: line 162
always verify prefers-reduced-motion is respected for animations.
- Distinctive: line 163
always run the full test suite after changes.
- Distinctive: line 164
Use commands from CLAUDE.md for testing.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Accessibility Audit — Stage 6B
Read the detailed guide at ${CLAUDE_SKILL_DIR}/references/audit-a11y-detailed-guide.md for the complete audit procedures, teammate spawn prompts, WCAG checklist patterns, and report templates.
Lead a multi-agent accessibility audit of the complete frontend codebase against BRD/PRD WCAG requirements. Identify violations and fix them.
Stage Sequence (recommended ordering): Stage 5B → (6A ‖ 6B (this stage) ‖ 6C) → 6E → 6F → 6G → 6D → 6H → 6V → 6R → 6P/6P-R → 7 (Deploy). Note: 6A, 6B, and 6C run in parallel (each in a separate session). If running in parallel, commit 6A changes as soon as 6A completes to avoid config file conflicts — see CLAUDE.md § "Stage 6 ordering".
Prerequisite Checks
Before any audit work, verify:
- Check that
./plancasting/_audits/implementation-completeness/report.mdexists and shows PASS or CONDITIONAL PASS. If missing, STOP: "Stage 5B report not found — run Stage 5B before starting Stage 6 audits." (Override: if the operator explicitly confirms 5B was intentionally skipped, proceed with a WARN in the report noting unverified implementation completeness.) - If 5B shows FAIL, STOP — the codebase has unresolved implementation gaps that must be fixed before accessibility auditing. If CONDITIONAL PASS, read documented Category C issues and skip accessibility auditing for those incomplete features.
- If
./plancasting/_audits/security/report.md(6A) exists, read it to understand security changes that should not be undone during accessibility fixes (e.g., CSP headers, CORS configuration). - If
./plancasting/_audits/performance/report.md(6C) exists, read it to understand performance optimizations (e.g., font loading, animation patterns, lazy loading) that should not be regressed. - Read
./CLAUDE.mdand./plancasting/tech-stack.mdfor project conventions. - Read relevant PRD sections for implementation context.
Inputs
- Codebase:
./src/(adapt paths per tech stack) - Tech Stack:
./plancasting/tech-stack.md - BRD Accessibility Requirements:
./plancasting/brd/08-non-functional-requirements.md(WCAG section). If not found, search:grep -rlE "WCAG|accessibility" ./plancasting/brd/ - BRD UX Requirements:
./plancasting/brd/11-user-experience-requirements.md - PRD Screen Specs:
./plancasting/prd/08-screen-specifications.md(accessibility annotations) - PRD Interaction Patterns:
./plancasting/prd/09-interaction-patterns.md - Project Rules:
./CLAUDE.md - Implementation Completeness:
./plancasting/_audits/implementation-completeness/report.md
Check ./plancasting/tech-stack.md for the Session Language setting. Generate reports in that language. Keep code and file names in English.
Stack Adaptation
Adapt references to your actual stack:
src/app/becomes your pages/routes directorysrc/components/becomes your component directory- React Aria patterns become your accessibility library's patterns
bun runbecomes your package manager command
Component Library Rule: If using a component library with built-in accessibility (React Aria, HeadlessUI, Radix, shadcn/ui, Untitled UI), do not add redundant ARIA attributes that conflict with the library's built-in handling — this can actually break accessibility. Check the library's documentation before adding ARIA attributes to library-provided components.
Known Failure Patterns
- Redundant ARIA on library components: Do not add
aria-label,role, oraria-expandedto components that already handle these via their accessibility library. Always check library handling first. aria-hidden="true"to suppress violations: Never hide elements from the accessibility tree instead of fixing the issue. Only use for genuinely decorative elements.role="button"on div: Always prefer semantic HTML (<button>) over ARIA roles.- Inconsistent focus styles: Always use the project's established focus ring pattern from CLAUDE.md. Verify the focus ring token resolves correctly in your Tailwind version (Tailwind v4 uses CSS-first configuration).
- Layout breaks from semantic changes: Verify visual appearance after changing
<div>to<section>or<nav>. - Missing
langattribute: Always check<html lang="...">(WCAG 3.1.1 Level A).
Phase 1: Analysis and Planning
Complete before spawning teammates:
- Read
./CLAUDE.md,./plancasting/tech-stack.md, and BRD/PRD accessibility requirements. Check BOTH./plancasting/brd/08-non-functional-requirements.md(or grep fallback) ANDprd/15-non-functional-specifications.mdfor WCAG version and conformance level. If they conflict, PRD takes precedence. Determine:- WCAG version: 2.2 (preferred, released Oct 2023), 2.1, or 2.0. If not specified, default to WCAG 2.2.
- Conformance level: A, AA, or AAA. If not specified, default to AA. If targeting 2.1, still audit 2.2 criteria (e.g., 2.5.8 Target Size Minimum) as forward-looking best practices.
- Build an Accessibility Checklist organized by WCAG principle (Perceivable, Operable, Understandable, Robust).
- Write
./plancasting/_audits/accessibility/checklist.mdwith the full checklist. - Create a task list for all teammates with dependency tracking.
Phase 2: Spawn Audit Teammates
Spawn 3 parallel teammates. Each prompt must include the accessibility checklist and target WCAG level. Replace directory paths with your project's actual paths per Stack Adaptation.
Teammate 1: semantic-structure-auditor
Scope: Semantic HTML, headings, landmarks, document structure.
- Heading hierarchy: Scan every page. Verify one h1 per page (or
aria-labelon main landmark). Verify sequential heading levels (h1 to h2 to h3). Sibling sections may restart hierarchy. Verify headings use semantic elements, not styled divs. - Landmarks: Verify every page has exactly one
<main>,<nav>witharia-labelfor each navigation region,<header>and<footer>where appropriate, and no significant content outside landmarks. - Semantic HTML: Flag
<div>/<span>where semantic elements should be used (<button>,<a>,<nav>,<article>,<section>,<form>,<table>,<ul>/<ol>/<li>). Verify lists, tables, links, and buttons use correct elements. - Fix each violation found.
Teammate 2: interactive-elements-auditor
Scope: Keyboard navigation, focus management, interactive components.
- Keyboard navigation: Verify all interactive elements are Tab-reachable (and Shift+Tab for reverse). Verify custom components follow correct keyboard patterns (dropdowns: arrow keys + Enter/Space/Escape; modals: focus trap + Escape + focus return; tabs: arrow keys between tabs, Tab to content). Flag onClick without onKeyDown. Flag tabIndex > 0.
- Focus management: Verify visible focus on all interactive elements (no
outline: nonewithout replacement). Verify logical focus movement after dynamic content changes (modal open, toast appear, route change). Verify skip-to-main-content link exists. - ARIA on interactives: Verify buttons have accessible names. Verify icon-only buttons have
aria-label. Verify toggle buttons usearia-pressed/aria-expanded. Verify form inputs have associated labels (<label htmlFor>oraria-label). Verify error states usearia-live/aria-describedby. Verify loading states usearia-live="polite"/role="status". - Fix each issue found.
Teammate 3: content-and-media-auditor
Scope: Text alternatives, color contrast, responsive accessibility.
- Text alternatives: Verify all
<img>have meaningful alt text (oralt=""for decorative). Verify SVG icons havearia-hidden="true"or accessible labels. Verify video/audio have captions/transcripts. - Color and contrast: Extract actual hex/RGB values from design tokens or CSS variable definitions — static Tailwind class analysis alone is insufficient for computed colors. Use automated contrast checking tools (axe-core, wcag-contrast-verifier) as the primary method. Manual calculation when needed: relative luminance L = 0.2126R + 0.7152G + 0.0722B (after sRGB linearization); contrast ratio = (L1 + 0.05) / (L2 + 0.05). Target: >= 4.5:1 normal text, >= 3:1 large text (WCAG AA). If dark mode exists, verify both themes pass. Verify information is not conveyed by color alone.
- Responsive accessibility: Verify readability at 200% zoom without horizontal scrolling. Verify touch target minimum sizes (WCAG 2.2 AA: 24x24px; WCAG 2.1 AAA: 44x44px; mobile-first: 44x44px recommended). Verify no content hidden at different breakpoints.
- Empty and error states: Verify empty states have descriptive text. Verify error messages use
aria-describedby. Verify form validation errors are announced. - Motion sensitivity (WCAG 2.3.1 Level A, 2.3.3 Level AAA): Check all animation types (CSS transitions, CSS animations, JS-driven, animated SVGs). Verify
@media (prefers-reduced-motion: reduce)is used. For JS animations verifymatchMediacheck. Verify no auto-playing animations without control. Verify parallax effects respectprefers-reduced-motion. Verifyscroll-behavior: smoothis wrapped in aprefers-reduced-motion: no-preferencemedia query. - Language (WCAG 3.1.1, 3.1.2): Verify
<html lang="...">is set correctly. Verifydirattribute for RTL if applicable. - Fix each issue found.
Unfixable Violation Protocol
When a violation cannot be fixed without architectural changes:
- Document the full conflict with evidence.
- Mark as REQUIRES HUMAN DECISION.
- Include recommended approach and estimated effort.
- If WCAG Level A: mark CRITICAL and flag as potential launch blocker — Level A is the minimum legal compliance level in most jurisdictions.
- Record unfixable Level A violations in
./plancasting/_audits/accessibility/unfixable-violations.mdAND summarize in report.md under "Blocking Issues". - Continue with remaining fixable violations.
Phase 3: Coordination
- If semantic-structure-auditor changes a div to a button, notify interactive-elements-auditor for keyboard handler review.
- If content-and-media-auditor finds contrast issues, notify semantic-structure-auditor for landmark styling adjustments.
- Resolve conflicts when multiple teammates modify the same component.
Phase 4: Automated Testing and Report
- Install and run axe-core automated tests AFTER all teammates complete manual audits — axe tests serve as final verification, not the primary audit. Install the appropriate package for your E2E framework (
@axe-core/playwright,cypress-axe, or@axe-core/webdriverio). Checkplancasting/tech-stack.mdandCLAUDE.mdfor the project's E2E framework. If installation fails, proceed with manual review and document the limitation. - Check for an existing accessibility test file before creating one. If none exists, create
e2e/accessibility.spec.ts. Run axe on every page and report violations. - Run accessibility tests:
bun run test:e2e -- e2e/accessibility.spec.ts - Run the full test suite:
bun run typecheck,bun run lint,bun run build,bun run test,bun run test:e2e - Generate
./plancasting/_audits/accessibility/report.mdcontaining:- WCAG conformance level achieved
- Violations by principle (Perceivable/Operable/Understandable/Robust) and severity
- Fixes applied with code references
- Automated test results (axe-core)
- Remaining issues requiring manual testing (screen reader, cognitive review)
- Scope note: Screen reader testing (with NVDA, JAWS, or VoiceOver) is not in scope for 6B — it is a runtime verification done in Stage 6V. Stage 6B focuses on code-level accessibility.
- BRD NFR accessibility compliance matrix
- Include a Gate Decision under a
## Gate Decisionheading (6H parses this heading):- PASS: No Level A violations; all Level AA violations fixed or verified as false positives
- CONDITIONAL PASS: All Level A violations fixed; remaining Level AA issues documented as requiring manual verification (e.g., screen reader testing)
- FAIL: Level A violations remain unresolved; document in
./plancasting/_audits/accessibility/unfixable-violations.mdand escalate to Stage 6H as a launch blocker
- Output summary: total violations found, total fixed, automated test pass rate.
Phase 5: Shutdown
- Request shutdown for all teammates.
- Verify all file modifications are saved and committed.
Critical Rules
- always prefer semantic HTML over ARIA roles (
<button>over<div role="button">). - never add
aria-hidden="true"to suppress axe violations — fix the underlying issue. - never add ARIA attributes that conflict with your component library's built-in accessibility.
- always use the project's focus ring convention from CLAUDE.md. If unspecified, define one and document it.
- always verify visual layout is preserved after semantic HTML changes.
- always check
<html lang="...">matches the session language. - always verify
prefers-reduced-motionis respected for animations. - always run the full test suite after changes.
- Use commands from CLAUDE.md for testing.
- Reference Stage 5B output to identify incomplete features — skip auditing them entirely. Calculate compliance percentages based on audited features only (e.g., "Audited 12/15 features; 3 skipped as incomplete per Stage 5B").
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.

