From accessibility-agents
Drive a power-user static accessibility audit of one or more source files (no live URL required) — parallel specialist dispatch, cited by WCAG SC, consolidated into a CSV report, and followed by a batched fix-and-verify loop. Use this whenever the user asks to audit, scan, review, or fix accessibility for a specific file, directory, or set of files — including phrasings like "audit a11y on Button.tsx", "scan this component for accessibility issues", "WCAG check src/components/Modal.jsx", "find a11y bugs in src/features/settings", "static accessibility audit of this file", or any request that names source file paths (not a URL) and asks for an accessibility check. Prefer this skill over route-audit when no dev server is available or the user only wants source-level analysis. Prefer it over ad-hoc specialist dispatch because it enforces parallel delegation, WCAG SC citations, structured CSV output, a triage gate before any edits, and batched remediation — the coordination pieces Claude otherwise skips.
npx claudepluginhub gautam-bansal-toddle/a11y-plugin --plugin accessibility-agentsThis skill uses the workspace's default tool permissions.
This skill orchestrates the `accessibility-agents` plugin specialists to produce a complete, WCAG-cited, source-grounded audit of one or more files — without requiring a live URL or dev server — and drives a controlled fix loop against them.
Generates design tokens/docs from CSS/Tailwind/styled-components codebases, audits visual consistency across 10 dimensions, detects AI slop in UI.
Records polished WebM UI demo videos of web apps using Playwright with cursor overlay, natural pacing, and three-phase scripting. Activates for demo, walkthrough, screen recording, or tutorial requests.
Delivers idiomatic Kotlin patterns for null safety, immutability, sealed classes, coroutines, Flows, extensions, DSL builders, and Gradle DSL. Use when writing, reviewing, refactoring, or designing Kotlin code.
This skill orchestrates the accessibility-agents plugin specialists to produce a complete, WCAG-cited, source-grounded audit of one or more files — without requiring a live URL or dev server — and drives a controlled fix loop against them.
It exists because the plugin's specialists are individually powerful but the model, left to its own devices, tends to invoke them serially, skip WCAG citations, produce unstructured findings, and fix issues one-at-a-time instead of by criterion. Those four mistakes cost 3–5× more turns and produce inconsistent fixes. This skill codifies the coordination so the plugin operates at full capacity on a source-only target.
Use this variant when:
When a live URL is available and the user wants complete coverage, prefer route-audit — it catches runtime-only issues (focus management, dynamic announcements, computed contrast, reflow) that source-only inspection cannot see.
Before proceeding, confirm you have:
src/components/Button.tsx),src/features/settings/) — the skill will walk it for UI-shaped files (.jsx, .tsx, .vue, .svelte, .astro, .html, .css).UserPromptSubmit hook detects web projects by grepping package.json in CWD; if you are outside the repo, delegation won't fire automatically.If the user gave a vague target ("the new feature", "my component"), ask once for concrete paths, then proceed.
Output a one-paragraph plan first: the file list that will be audited, which specialists will run, and why each is relevant. Base specialist selection on what the file(s) actually render — open each file briefly to check imports and top-level markup, don't guess from path names.
If the target is a directory, enumerate the UI files under it once and show the user the list before dispatching. For lists over 20 files, offer to batch (e.g., by subdirectory) or narrow to changed files only (git diff --name-only).
Dispatch accessibility-agents:accessibility-lead with an explicit specialist list. The lead has a bias toward running only a subset if you don't name them — name them. Base the list on what the file(s) render, not on their paths:
aria-specialist, keyboard-navigator, contrast-master, alt-text-headings, cognitive-accessibility, i18n-accessibility.forms-specialist — any <input>, <select>, <textarea>, or form-library usagemodal-specialist — any dialog, drawer, popover, tooltip, or portal patternlive-region-controller — any toast, notification, loading spinner, dynamic status texttables-data-specialist — any <table> or grid componentmedia-accessibility — any <video>, <audio>, <iframe> embedsdata-visualization-accessibility — any chart/graph library (recharts, d3, chart.js)web-component-specialist — any custom element (<my-el>) or shadow DOMDispatch the lead in a single assistant message. The lead itself fans out to specialists in parallel and normalizes their output — do not invoke specialists directly from this skill; direct dispatch breaks normalization and produces inconsistent CSV column values.
Instruct the lead that every finding must be tagged with its exact Success Criterion (e.g., 2.1.1 Keyboard, 4.1.2 Name, Role, Value, 1.4.3 Contrast (Minimum)). Findings without WCAG anchors drift into style preferences and cannot be filed as tickets. If the lead is unsure which SC applies, tell it to call get_accessibility_guidelines (MCP resource) for the component type first.
Static inspection of source cannot confirm:
aria-live regions.Flag this coverage gap to the user in the report summary (Phase 4). For any route where these runtime concerns matter, the user should follow up with route-audit once the dev server is running.
On second and subsequent audits of files in the same repo, instruct the lead to call check_audit_cache first. If a file's hash is unchanged since the last audit, skip re-scanning it and reuse prior findings. On directories of 50+ files, this drops incremental audits from minutes to seconds.
Collect findings from Phase 2 and invoke accessibility-agents:web-csv-reporter:
CSV path: reports/a11y/static-<target-slug>-<YYYY-MM-DD>.csv — where <target-slug> is the file basename for single-file runs, or the directory name for multi-file runs.
Columns (exact order): id, severity, wcag_criterion, source, tool_or_agent, file, line_range, element_selector, issue, fix_suggestion, status
severity: P0 (AT-blocking WCAG violation), P1 (serious AT degradation), P2 (usability issue), P3 (best practice).source: always static for this skill.element_selector: the JSX tag, component name, or CSS selector identified in source. Static audit cannot confirm a runtime selector path — report what is visible in the file.status: all rows start as open.severity ascending, then wcag_criterion.Markdown summary: reports/a11y/static-<target-slug>-<YYYY-MM-DD>.md — one page with:
route-audit would add.Present the report summary to the user in chat:
Then ask a scoped question: which issues should I fix now — all P0s, P0+P1, specific row IDs, or none yet? Do not start fixing until the user answers.
The reason: severity triage and fix-scope are subjective enough that automated judgment creates rework. A clear decision point here saves more time than it costs, and gives the user a chance to defer issues that need runtime context instead.
Hand the approved row set and the CSV path to accessibility-agents:web-issue-fixer. Give these specific instructions:
wcag_criterion before fixing. Repeated ARIA, focus, or labeling issues should land as one coordinated change — not one row at a time — so the fixes share a style across the file/module.status=fixed only after the specialist re-check passes. If the specialist surfaces a new issue that the fix introduced, revert the edits in that group, mark the rows open with a note in issue, and continue to the next group.The Edit/Write gate from the plugin's hooks will already be unlocked from Phase 2 (the accessibility-lead touched the session marker). If the user started a fresh session between audit and fix, re-invoke the lead first or the fix tool calls will be blocked.
After the fix loop completes:
update_audit_cache to record current file hashes so the next audit is incremental.reports/a11y/CHANGELOG.md:
YYYY-MM-DD static:<target-slug> P0: 4→0 P1: 7→2 P2: 12→8 files: 3 deferred: "P1 modal focus (needs route-audit)"
route-audit as the follow-up once the dev server is up.For a target that was audited earlier today and a small edit was just made:
accessibility-lead for a single-specialist re-check — that adds a dispatch hop with no normalization benefit when only one specialist is involved.accessibility-lead. Direct dispatch breaks normalization and produces inconsistent CSV column values.route-audit.wcag_criterion.run_axe_scan, run_playwright_*). They need a live URL — that's route-audit's job.accessibility-agents:*)Coordinator: accessibility-lead (always the entry point for the audit pass).
Web specialists (use these for source files): aria-specialist, keyboard-navigator, contrast-master, forms-specialist, modal-specialist, alt-text-headings, live-region-controller, cognitive-accessibility, i18n-accessibility, tables-data-specialist, media-accessibility, data-visualization-accessibility, web-component-specialist.
Reporting/remediation: web-csv-reporter, web-issue-fixer.
Skip non-web specialists (office, PDF, EPUB, desktop, markdown) and playwright-verifier / mobile-accessibility (runtime-dependent) — they're for other workflows.
A run of this skill has succeeded when all of the following are true:
reports/a11y/static-<target-slug>-<date>.csv with every row WCAG-cited and source=static.status=fixed row was re-verified by the originating specialist after the fix..a11y-cache.json was updated.route-audit is the right next step.