agentleFS
ZachArticulateVZachArticulateV/designer-pro-and-seo/skills/design-accessibility/SKILL.md

design-accessibility

Skill10 starsChanged 26 days agoMITView on GitHub

Audits HTML against WCAG 2.2 — no-tools structural checks (alt text, heading order, form labels, lang, landmarks, skip link, viewport meta, token-based contrast), plus a full axe-core scan covering computed contrast, keyboard/focus order, reduced-motion, and 200% zoom. Uses Playwright + @axe-core/playwright when connected; otherwise the structural subset runs alone (clearly lower fidelity). Produces a severity-ranked report with per-issue remediation. Trigger when the user says "accessibility check", "a11y check", "wcag audit", "axe scan", "is this accessible", "screen reader check", or "keyboard nav check".

1 other project uses a version of this.

Adopted by

Most recently taken up by

The file

We split this skill into the rules it gives an agent

1 rule. About 0 are common, 1 is distinctive, and 0 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈1

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 0

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Detect Playwright: If available → deep path (step 3).

    line 33

≈ “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.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

design-accessibility

Family: design Status: Stable

Purpose

A dedicated accessibility skill. Runs structural WCAG 2.2 checks on any HTML with no tools required (the free path) and a full axe-core scan when Playwright is installed (the deep path), producing a severity-ranked report that downstream skills (qa-gate, design-build) can act on.

Triggers

  • "accessibility check" / "a11y check" / "wcag audit"
  • "axe scan" / "is this accessible"
  • "screen reader check" / "keyboard nav check"

Inputs

  • Target URL or local build path
  • WCAG level: AA (default) | AAA
  • Viewports to test (defaults: 375 / 768 / 1280)
  • Optional: a design-system token file (from design-system-gen); the token-based contrast check in Step 2 runs only when it is present

Steps

  1. Detect Playwright. If available → deep path (step 3). If not → static path (step 2). Always say which path ran.
  2. Static WCAG checks (free path, on the page source): run scripts/design/a11y_static.py --file <page.html> — a stdlib html.parser structural checker that emits severity-ranked JSON findings for image alt coverage, heading order (no skipped levels / one <h1>), form-control labels, <html lang>, a skip-to-content link, <main>/landmark presence, and a responsive (non-zoom-blocking) viewport meta. When a design-system-gen token file is present, pass --tokens <tokens.json> to add the token-contrast cross-check (the engine's own WCAG luminance math over the text/bg/ surface/primary/on_primary/accent slots). See references/design-accessibility/structural-checks.md for the full check catalog + severity model.
  3. Deep axe scan (Playwright path): for each viewport, run axe-core; test keyboard nav (tab order, visible focus, focus traps in modals, escape routes); test prefers-reduced-motion; test 200% text scaling for truncation/overflow; verify computed-style color contrast.
  4. Classify findings critical / serious / moderate / minor with the WCAG success criterion and remediation guidance (file:line when source is available).
  5. Render the report; note clearly that the static path is a subset and a full axe scan needs Playwright.

Capability routing

Accessibility auditing runs on a two-tier cascade. The free Tier-2 structural checker (a11y_static.py) is the product — it delivers a real severity-ranked WCAG artifact with no browser and no network; a connected Playwright + axe-core (Tier 1) deepens it with rendered-pixel contrast and live keyboard/motion/zoom testing. See references/CAPABILITY-TIERS.md for the cascade grammar.

capability:   structural-a11y
tier1:        Playwright + @axe-core/playwright (rendered scan)
tier1_signal: none
tier2:        a11y_static.py (stdlib html.parser structural WCAG checker + token-contrast cross-check, no browser)
tier2_yields: severity-ranked WCAG findings (alt, heading order, labels, lang, viewport, landmarks, skip link, token contrast) with per-issue WCAG SC + fix, zero spend
tier3:        none
tier3_signal: none
tier4:        manual WCAG 2.2 walkthrough; connect Playwright for a full axe-core scan
needs_tier1:  computed rendered-pixel contrast, live keyboard/focus order, reduced-motion behavior, 200%-zoom reflow

Outputs

OutputWhat it containsFormatQuality bar (how it is scored)
Structural WCAG reportSeverity-ranked findings (critical/serious/moderate/minor), each with its WCAG 2.2 success criterion + a concrete fixJSON (default) or ASCII --humanevery finding names a WCAG SC and a specific remediation; findings are severity-ranked and the run is deterministic (same input → identical output)
Token-contrast cross-checkAny design-token color pair below its ratio (4.5:1 body / 3:1 UI), with the measured ratiorows inside the report (contrast-below-min)only fires with --tokens; uses the engine's own WCAG math; reports the exact ratio, never a guess
Coverage statementWhich path ran and what a full axe scan would addone sentencestates the static subset honestly; never implies full-scan coverage

Filed to: the user's project workspace. The structural path is a genuine subset — computed-contrast, live keyboard, reduced-motion, and 200%-zoom facts are marked needs_tier1 (Playwright + axe-core), never synthesized.

Error Handling

ConditionDetectionBehavior (degrade, never fail)User-facing message
Playwright absentMCP not exposed / not connectedrun the Tier-2 a11y_static.py structural checker alone"Ran Tier 2 (static structural checks). Connect Playwright for computed-contrast + live keyboard/motion/zoom testing."
No token file supplied--tokens omittedrun every structural check except the token-contrast cross-check"Contrast cross-check skipped — pass a design-system token file to grade color pairs."
Bad / missing HTML inputa11y_static.py validates and exits non-zero with a JSON errorreport the validation error; analyze nothing invented"--file/--html is required or the file is unreadable — here is the expected input."
Unparseable --tokens JSONjson.load raises; script exits non-zeroreport the parse error; skip the cross-check, keep structural findings"Could not parse the token JSON — fixed the path and re-run for the contrast cross-check."
Malformed markuphtml.parser tolerates itanalyze what parses; still emit a report"Parsed leniently — findings reflect the recoverable structure."

Dependencies

  • None required for the static path (analyzes provided HTML)
  • Playwright extension + @axe-core/playwright (optional — adds computed-contrast verification + live keyboard/focus testing + reduced-motion + 200%-zoom checks; free path: the static structural checks in Step 2)

Notes

Mandatory inside the qa-gate workflow (phase 3); also standalone. The static path catches a real subset of WCAG issues, but only a browser-based axe scan covers computed contrast and live keyboard behavior — the report says so rather than implying full coverage.

Download now (ZIP)

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
What did you use it for? e.g. Reviewing pull requests in a Rails app

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.