a11y-analyzer
Skill36 starsChanged 15 days agoMITView on GitHub
Accessibility analysis from session data — keyboard-only navigation patterns, focus order issues, screen reader compatibility, and accessibility regressions. Use when auditing a11y compliance, investigating accessibility bugs, or validating inclusive design.
In this repository45 other files it gives its agents.
- annotation-opsSkill
- anomaly-detectorSkill
- api-monitorSkill
- benchmark-analyzerSkill
- campaign-trackerSkill
- changelog-detectiveSkill
- cohort-compassSkill
- comparisonsSkill
- customer-360Skill
- dashboard-builderSkill
- deploy-radarSkill
- error-forensicsSkill
- experiment-analyzerSkill
- feature-adoptionSkill
- form-analyzerSkill
- frustration-hunterSkill
- funnel-doctorSkill
- general-analysisSkill
- heatmap-generatorSkill
- incident-responderSkill
- jira-bug-reporterSkill
- journey-builderSkill
- lifecycle-analyzerSkill
- metric-auditorSkill
- mobile-analyzerSkill
- nps-proxySkill
- onboarding-tutorSkill
- page-performanceSkill
- persona-builderSkill
- predictive-alertsSkill
- privacy-auditorSkill
- query-translatorSkill
- quick-statsSkill
- report-deckSkill
- retention-analyzerSkill
- revenue-impactSkill
- scroll-depth-analyzerSkill
- segment-wizardSkill
- session-playlistSkill
- session-reviewSkill
- session-searchSkill
- slack-reporterSkill
- user-journeySkill
- webhook-healthSkill
- weekly-digestSkill
The file
We split this skill into the rules it gives an agent
7 rules. About 0 are common, 5 are distinctive, and 2 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈5
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
- Distinctive: line 69
Do labels associate with inputs (clicking label focuses the input)?
- Distinctive: line 75
After a UI deploy, compare keyboard navigation before/after:
- Distinctive: line 82
If users start spending more time tabbing or rage-clicking after deploy, something broke in the focus order.
- Very specific: line 86
Use review-snapshot to visually verify at key interaction points:
- Distinctive: line 140
Don't claim WCAG compliance or non-compliance.
- Very specific: line 141
Always cross-reference with the mobile-analyzer — many mobile a11y issues overlap (touch targets, zoom, text size).
- Distinctive: line 142
After any UI deploy, run a quick keyboard audit on the changed pages.
≈ “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 Analyzer
Analyze accessibility from real user sessions — keyboard navigation patterns, focus traps, missing labels, and a11y regressions. Complement automated audits with evidence from actual users.
When to Use
- "Are keyboard-only users able to navigate our checkout?"
- "Did the redesign break accessibility for screen reader users?"
- "Find sessions where users tabbed through the page — did they get stuck?"
- "Are our form labels working for assistive technology?"
- "Validate WCAG compliance from real session data"
- "Show me sessions where users struggled with focus order"
Mental Model
Automated a11y tools (Axe, Lighthouse) catch ~30% of accessibility issues. Real user sessions catch the rest — focus traps, keyboard dead ends, unlabeled interactive elements, content that changes without announcement.
Fullstory captures all DOM interactions. By looking at how users interact with your site without a mouse, you can identify where the experience breaks.
For visual checks, follow session-review: open with fullstory:review-open, pass its client_id to fullstory:review-snapshot at the target timestamp, and always call fullstory:review-close, including on errors. Delegate repeated captures to session-replay.
Workflow
Step 1: Identify a11y-relevant sessions
Build segments for users likely relying on assistive technology:
fullstory:build_segment("users who navigated using only keyboard (tab key usage, no mouse clicks)")
fullstory:build_segment("users who used form fields extensively (screen reader users fill forms via keyboard)")Or filter sessions by interaction patterns:
fullstory:get_sessions(
event="keydown", # keyboard interactions
exclude_event="click", # no mouse clicks = likely keyboard-only
limit=10
)Step 2: Audit keyboard navigation
For each keyboard-navigated session, use session-context agent:
"What was the user's tab order? Did they tab through elements in a logical sequence? Did they get trapped in any element (modal, form, menu)? Were there dead tab stops where nothing was focused?"
Common keyboard issues:
- Focus trap: User tabs into a modal/dropdown and can't tab out
- Skip link missing: User tabs through 50 nav items before reaching content
- Focus not visible: Element receives focus but no focus ring — user doesn't know where they are
- Tab order illogical: Focus jumps from header to footer, skipping main content
Step 3: Check form accessibility
For form-heavy pages, check:
fullstory:build_metric(
query="users who interacted with /signup form using keyboard only",
output_type="single_number"
)With review-snapshot, check:
- Are all form fields reachable via Tab?
- Do labels associate with inputs (clicking label focuses the input)?
- Are error messages announced (do they have
aria-describedbyorrole="alert")? - Are required fields indicated both visually AND programmatically (
aria-required)?
Step 4: Check for focus-order regressions
After a UI deploy, compare keyboard navigation before/after:
fullstory:build_metric(query="sessions with keyboard navigation on /checkout", output_type="trend")
fullstory:compute_metric(metric_id, time_range="last_14_days")
→ look for a change in navigation patterns at the deploy timestampIf users start spending more time tabbing or rage-clicking after deploy, something broke in the focus order.
Step 5: Simple checks from session screenshots
Use review-snapshot to visually verify at key interaction points:
- Focus indicator visible on the active element?
- Color contrast sufficient for the active element?
- Text readable without zooming on mobile?
- Interactive elements have clear affordance (looks clickable)?
Step 6: Report
## Accessibility Audit — /checkout (last 30 days)
### Keyboard Navigation
- 142 sessions with keyboard-only navigation (estimated)
- Primary issue: Focus trap in promo code modal — 12 sessions show users tabbing repeatedly inside the modal without escape
- Tab order: Logical (Header → Shipping → Payment → Submit) ✅
### Form Accessibility
- All 8 form fields reachable via Tab ✅
- 3 fields missing explicit <label> associations: Promo Code, Gift Card, CVV 🔴
- Error messages not associated with fields (no aria-describedby) — screen reader users won't hear them 🔴
- Required fields visually indicated (red asterisk) but no aria-required ✅?
### Regressions
- No a11y regressions detected since Jul 15 deploy ✅
### WCAG Impact
| Issue | WCAG Criterion | Severity | Affected Users |
|-------|---------------|----------|---------------|
| Focus trap in modal | 2.1.2 No Keyboard Trap | High | 12 sessions (8%) |
| Missing form labels | 1.3.1 Info and Relationships | High | All keyboard users |
| Error announcement | 4.1.3 Status Messages | Medium | All form users |
### Recommendations
1. Add Escape key handler to promo code modal (WCAG 2.1.2)
2. Add explicit <label for="..."> to Promo Code, Gift Card, CVV fields
3. Add aria-describedby linking error messages to their fieldsCommon A11y Issues Detectable in Sessions
| Session Signal | Likely A11y Issue | Fix |
| Repeated Tab on same few elements | Focus trap (modal, menu, carousel) | Add Escape handler, focus trap management |
| Long pause, then rage click | Focus landed on invisible/inactive element | Check visibility of focused elements, add skip links |
| Click on label doesn't focus input | Missing for attribute on <label> | Add explicit label-input association |
| User tabs past important content | Heading/skip-link not keyboard accessible | Add tabindex="-1" for programmatic focus |
| Form submission with keyboard, then immediate correction | Error not announced to screen reader | Add role="alert" or aria-live to error container |
| Dead click on icon-only button | Missing aria-label or title on icon | Add accessible name to all interactive elements |
Guidelines
- Fullstory can't directly detect screen reader usage — infer from keyboard-only interaction patterns. Be transparent about this limitation.
- Automated tools catch code-level issues. Your job is to find interaction-level issues that only appear in real usage.
- A single focus trap affecting 12 sessions out of 142 is an 8% failure rate — that's high enough to fail WCAG 2.1.2 conformance.
- Don't claim WCAG compliance or non-compliance. You're providing evidence, not a certification.
- Always cross-reference with the
mobile-analyzer— many mobile a11y issues overlap (touch targets, zoom, text size). - After any UI deploy, run a quick keyboard audit on the changed pages. Focus-order regressions are the most common deploy-caused a11y bug.
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.

