a11y-fixer
Skill1 starsChanged 3 months agoMITView on GitHub
Fix front-end accessibility issues from an a11y-eval mitigation work order (mitigations.md) — apply minimal, semantics-first patches to HTML/JSX/CSS, honor the binding anti-fix pitfalls, and verify every batch with a baseline re-run. Use when asked to fix accessibility findings, execute a mitigations.md work order, or remediate WCAG violations in a repo.
1 other project uses a version of this.
Adopted by
Most recently taken up by
- milad-ahmd/agent-skillstheir own version, first seen Nov 1, 2026
Other versions1 project uses a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 1
- milad-ahmd/agent-skills★ 5same 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 repositoryOne other file it gives its agents.
- a11y-evaluatorSkill
The file
We split this skill into the rules it gives an agent
4 rules. About 0 are common, 2 are distinctive, and 2 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈2
Distinctive · estimate
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
- Very specific: line 12
If no work order exists yet, generate one first: node src/cli.ts --repo <dir> (or --url for a running app) in an a11y-eval checkout, or …
- Distinctive: line 22
Fix at the token/component level: When the same rule fires across pages, find the shared cause — a CSS custom property, a base component, a …
- Very specific: line 25
Focus must be visible everywhere: Delete blanket outline: none.
- Distinctive: line 27
Every Do NOT in the work order is binding.
≈ “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 Fixer
You are executing accessibility fixes. Your input is a mitigation work order (mitigations.md, produced by a11y-eval); your output is minimal source changes that make the findings disappear for real users, verified by re-running the evaluator.
If no work order exists yet, generate one first: node src/cli.ts --repo <dir> (or --url for a running app) in an a11y-eval checkout, or node src/cli.ts mitigate --report <dir> from an existing report.
Fixing instructions
<!-- OPTIMIZED-INSTRUCTIONS:START — this block is the optimization target managed by optimizer/optimize.py; manual edits here are overwritten by --apply -->Fix accessibility violations with the smallest change that restores real access, in this order of preference:
- Native semantics first. Replace fake widgets with real elements:
div onclick→<button type="button">, navigationspan→<a href>, unlabeled input →<label for>+ input. Native elements bring keyboard operability, roles, names, and states for free — ARIA retrofits are the fallback, never the first move. - Content over attributes. Alt text, labels, link text, and error messages must convey the actual information ("Q3 revenue up 12%"), not restate the element ("chart", "image", "link"). Write it from the surrounding context; flag for a human if the meaning is not inferable.
- Fix at the token/component level. When the same rule fires across pages, find the shared cause — a CSS custom property, a base component, a layout wrapper — and fix it once. Never patch forty call sites when one component is the root cause.
- Preserve everything the user could do or read. Text content, interactive capabilities, and visual hierarchy must survive the fix. Deleting a feature, hiding an element (
display:none,aria-hidden), or removing focusability to silence a finding is a failed fix. - Contrast is arithmetic, not aesthetics. Compute the ratio (≥4.5:1 normal text, ≥3:1 large text/UI components); pick the nearest passing shade of the intended hue rather than jumping to black/white.
- Focus must be visible everywhere. Delete blanket
outline: none; add:focus-visibleoutlines (≥2px, offset, ≥3:1 against surroundings). Verify by tabbing. - One work-order group per change-set. Fix every listed instance of the group, then verify before starting the next. Batching unrelated groups makes regressions untraceable.
- Every Do NOT in the work order is binding. When a fix and a pitfall conflict, the pitfall wins — stop and reconsider the approach.
<!-- OPTIMIZED-INSTRUCTIONS:END -->Workflow
- Read the work order top to bottom. Groups are ordered by impact then reach — respect the order.
- Locate each instance in source: static findings carry
file:line:col; runtime findings carry a CSS selector and HTML snippet — grep the repo for the snippet, its class names, or nearby text. - Apply the group's fix to every instance, following the Fixing instructions above and the group's steps/pitfalls.
- Verify the batch: re-run the work order's verification command (the original evaluation +
--baseline <previous report>). The group is cleared when its rule appears under "fixed" with zeronewfindings. - Manual-failure sections: the reviewer's evidence is the specification. Derive the change from it, apply, and note that the criterion needs human/agent re-review — automation cannot confirm it.
- Stop conditions: an instance whose meaning you cannot infer (alt text for an unknown image, a label for an ambiguous field) gets a
TODO(a11y)comment plus a note in your summary — a wrong guess is worse than a flagged gap. - Report: score before → after, groups cleared, new findings (should be zero), items flagged for humans.
VLM suspect groups
Work orders may contain vlm-* groups (only when the evaluation ran with --vlm). Their instance rows carry the vision model's reasoning — for vlm-alt-quality-suspect, a proposed alt text. Treat the proposal as a draft: verify it against the actual image before applying, and never apply a VLM-proposed change you cannot confirm from the page itself.
What not to do
- FAIL:
tabindex+ key handlers bolted onto adivwhen a native element works - FAIL:
alt=""on informative images;aria-labelduplicating visible text mismatches - FAIL: suppressing rules, deleting elements, or
aria-hiddento make findings disappear - FAIL: eyeballed contrast tweaks without computing the ratio
- FAIL: claiming done without a verification re-run showing the rules gone
Related skills
a11y-evaluator— produces the report and work order this skill consumes
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.

