agentleFS
MKS-01MKS-01/appscreenmap/.claude/skills/a11y-audit/SKILL.md

a11y-audit

Skill2 starsChanged 19 days agoMITView on GitHub

Run a WCAG 2.2 accessibility audit of an Android app with AppScreenMap — automated checks across a crawl, a 200% font-scale crawl, device tests (rotation, Switch Access/keyboard, TalkBack spot checks), manual review of the rest, triage into notes.json, and a findings report mapped to success criteria and levels. Use when asked to audit, check, or report on an app's accessibility or WCAG conformance.

34 other projects use a version of this.

Adopted by

Most recently taken up by

Used with

Projects with it also use perf-audit, design-tokens 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.
  • WhatIfWeDigDeeperSkill

    perf-audit

    Profile and optimize React application performance

    Also in 4 projects that use this

  • ilikescienceSkill

    design-tokens

    Expert in design tokens using the DTCG specification. Use this skill when users ask about design tokens, DTCG format, token validation, formatting, transformation, color spaces (sRGB, Display P3, OKLCH), references and aliasing, resolvers, theming with modifiers/contexts, multi-platform design systems, accessibility, or working with tools like jq, jsonata, and terrazzo. Helps with token file creation, resolver configuration, structure, naming conventions, and best practices.

    Also in 4 projects that use this

  • Sagargupta16Skill

    dependency-audit

    Audit project dependencies for security vulnerabilities, licensing issues, maintenance health, and optimization opportunities. Use it during regular security audits (monthly or quarterly); before a major release when you want to ensure the dependency tree is clean; when evaluating whether to adopt or replace a dependency; after a security advisory affects one of your dependencies; when your install times or bundle sizes have grown noticeably.

    Also in 3 projects that use this

  • lbednerSkill

    i18n

    Use when a code or template change introduces a new translation message key, in either the framework CLI (aegis/i18n/locales/) or a generated project's CLI (the app/i18n/locales/ template tree). Covers adding the real English string, stubbing the same key into every other locale for parity, and the separate translation PR that later replaces placeholders with reviewed native text.

    Also in 3 projects that use this

  • GitHubSkill

    refactor

    Surgical code refactoring to improve maintainability without changing behavior. Covers extracting functions, renaming variables, breaking down god functions, improving type safety, eliminating code smells, and applying design patterns. Less drastic than repo-rebuilder; use for gradual improvements.

    Also in 5 projects that use this

  • VercelSkill

    deploy

    Deploy applications to Vercel. Use when the user says "deploy", "deploy to Vercel", "push to production", "deploy my app", or "go live".

    Also in 4 projects that use this

The file

We split this skill into the rules it gives an agent

8 rules. 0 are common, 2 are distinctive, and 6 are very specific to this project.

  • 0

    Common

    Most of the 27 edited versions we read keep these.

  • 2

    Distinctive

    This author's own choices. Worth a look.

  • 6

    Very specific

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

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Read wcag-mobile-rules first.

    line 8
  2. Very specific:

    Use the newest good run, or crawl first (crawl-app skill):

    line 14
  3. Very specific:

    Every crawl also writes <run>/a11y.json.

    line 21
  4. Very specific:

    If density_exact is false, the run predates density recording.

    line 25
  5. Very specific:

    Run device tests only with the app pinned or on screens you navigated to deliberately, and don't leave the app (stay_in_app rule).

    line 51
  6. Very specific:

    When the app's source is available (Playground: samples/playground-app/app/), grep it to confirm or rule out findings: contentDescription, …

    line 66
  7. Distinctive:

    When writing up findings yourself (e.g.

    line 93
  8. Distinctive:

    If the user wants a shareable report, publish it rather than leaving it in the terminal.

    line 104

“Common” is measured: kept by at least 6 in 10 of the 27 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.

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

WCAG 2.2 accessibility audit

Read wcag-mobile-rules first. It defines terms, thresholds, and how to word findings. Target app: the Playground sample (dev.appscreenmap.playground; it has deliberate A11Y BUG screens) unless the user names another. Default level: AA.

1. Automated pass on a normal crawl

Use the newest good run, or crawl first (crawl-app skill):

uv run appscreenmap-engine a11y runs/<project>/<run-id>                 # level ≤ AA, open + confirmed issues
uv run appscreenmap-engine a11y runs/<project>/<run-id> --level AAA --json > <scratchpad>/a11y.json

Every crawl also writes <run>/a11y.json. The web viewer's Accessibility tab adds the per-screen scanner rules (labels, 48 dp guideline, contrast estimate). Look at both. Their issue keys share one format, so one triage covers both.

If density_exact is false, the run predates density recording; dp values are estimates. Re-crawl for exact numbers.

2. Resize text: crawl at 200%

APP_PASSWORD=playground-demo uv run appscreenmap-engine crawl --package dev.appscreenmap.playground \
  --config samples/playground-app/appscreenmap.toml --clear-data --font-scale 2.0 --name font200
uv run appscreenmap-engine a11y runs/playground/font200-<stamp>
uv run appscreenmap-engine diff runs/playground/<normal-run> runs/playground/font200-<stamp>

The font scale is restored afterwards. Look for text-truncated (1.4.4), screens missing compared to the normal run (content no longer reachable), and overlapping or clipped controls in screenshots (1.4.4 / 1.4.10). Read the screenshots; the diff only says what changed.

3. Device tests (adb). Restore every setting afterwards.

SCTest
1.3.4 Orientationadb shell settings put system accelerometer_rotation 0; adb shell settings put system user_rotation 1 → screenshot each main screen → set back to 0. Fails if the UI stays portrait (or breaks). Manifest locks are already in a11y.json (orientation-locked).
2.1.1 / 2.1.2 / 2.4.3 / 2.4.7 Keyboard & focusUse adb shell input keyevent KEYCODE_TAB (and DPAD_DOWN, ENTER) and screenshot after each step: can you reach and activate every control, is focus visible, does the order make sense, can you leave every component?
2.4.11 Focus Not ObscuredWhile tabbing, note any focused control hidden behind a sticky bar or FAB.
1.3.2 / 4.1.2 TalkBackadb shell settings put secure enabled_accessibility_services com.google.android.marvin.talkback/com.google.android.marvin.talkback.TalkBackService (only if TalkBack is installed). Swipe through 2–3 key screens and check the reading order and announcements. Turn it off afterwards (settings delete secure enabled_accessibility_services). Ask the user before enabling it, because it changes how the emulator responds to touches.
3.2.1 On FocusFocus moves alone must not navigate.

Run device tests only with the app pinned or on screens you navigated to deliberately, and don't leave the app (stay_in_app rule).

4. Manual review of what can't be automated

Walk the screen list (map.json) and screenshots, guided by each screen's patterns:

PatternCheck
login / form3.3.1 errors in text, 3.3.2 persistent labels, 3.3.3 suggestions, 1.3.5 input purpose (look in the app source for autofillHints/contentType), 3.3.8 paste/password manager/passkey support, 3.3.7 repeated data
list / cards2.4.4 / 2.4.6 specific names ("Read more about …"), 1.3.1 headings
dialogFocus moves into the dialog and back out, 2.1.2
media, timers, carousels1.2.x captions/transcripts, 2.2.1 time limits (a focus timer is user-started, so it's fine), 2.2.2 pause for auto-moving content
everything1.4.1 colour-only signals, 1.4.11 icon/border contrast, 1.3.3 sensory instructions, 2.5.1 gesture alternatives, 4.1.3 status messages (snackbars/toasts announced?)

When the app's source is available (Playground: samples/playground-app/app/), grep it to confirm or rule out findings: contentDescription, semantics, Role., paneTitle, liveRegion, autofillHints, screenOrientation, maxLines.

5. Triage

Each issue's status lives in <run>/notes.json under a11y: { "<issue key>": { "status": "confirmed" | "wontfix" | "false_positive", "note": "…", "updated": "<iso>" } }. The viewer edits the same file. To write it from the CLI, load the existing file, merge your decisions, and validate with appscreenmap.core.notes.validate before saving (format owned by the web session; don't change it). appscreenmap a11y then hides false positives and won't-fixes.

6. Report

Generate the report after triage, so confirmed viewer findings and your decisions are included:

uv run appscreenmap-engine a11y runs/<project>/<run-id> --report            # AA (default)
uv run appscreenmap-engine a11y runs/<project>/<run-id> --report --level AAA

This writes a11y-report.html (self-contained, shareable) and a11y-report.md (+ a11y/crops/). For every WCAG 2.2 criterion it gives a status: Fails (confirmed), Issues found, Needs review, No issues detected (automated, not proof), Check in viewer, or Not tested. Repeated elements (a nav item on every screen) are grouped into one finding. Open the HTML and read it before handing it over. Then add what the generator can't know: your device and manual test results.

When writing up findings yourself (e.g. in a PR or the chat), group by success criterion, A then AA (AAA only if asked). For each finding include:

  • SC number and name, level, and status: Fails (confirmed) / Needs review / Advisory (native) / Guideline only
  • Screens (ids and titles), evidence (screenshot path plus what's wrong, with dp sizes or ratios)
  • Fix for Views and/or Compose (from wcag-mobile-rules/reference/criteria.md), as specific to the code as you can make it

End with:

  • coverage: which criteria were tested automatically, on device, or manually, and which were not tested
  • a clear statement that automated results are not a conformance claim

If the user wants a shareable report, publish it rather than leaving it in the terminal.

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.