Use when fixing or auditing ANY accessibility issue — VoiceOver, Dynamic Type, color contrast, touch targets, WCAG compliance, App Store accessibility review.
61%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Passed
No findings from the security scan
Fix and improve this skill with Tessl
tessl review fix ./axiom-cursor/skills/axiom-accessibility/SKILL.mdxcui is Axiom's own tool, distributed separately from the Cursor plugin; it has no Axiom MCP wrapper. Before UI automation, check command -v xcui. If absent, use a stable Axiom repository checkout and locate <axiom-checkout>/.claude-plugin/plugins/axiom/tools/xcui, where <axiom-checkout> is that checkout's absolute root. Before using either discovered executable, verify it is executable and run --help; substitute that verified absolute path for every xcui command, then run doctor. Do not use the cached axiom-cursor/ plugin directory as the checkout root. If xcui remains unavailable, AXe fallback is limited to compatible input verbs: tap, slider, type, swipe, drag, touch, gesture, button, key, key-sequence, key-combo, and screenshot. Then check command -v axe before that fallback; add --tap-style physical to every axe tap and handle DEVELOPER_DIR explicitly if AXe reports a SimulatorKit loading error. AXe cannot replace wait, assert, a11y, dialog, voiceover, resize, or doctor. If neither tool is available, stop UI automation, explain the checkout setup requirement, and continue only with non-UI simulator and log checks. If AXe exists but the requested workflow requires an xcui-only capability, stop that UI workflow and report the limitation.
You MUST use this skill for ANY accessibility work including VoiceOver, Dynamic Type, color contrast, WCAG compliance, and UX flow auditing.
Delegate to the appropriate Cursor subagent when this router calls for a specialized auditor.
| Symptom / Task | Reference |
|---|---|
| VoiceOver labels, hints, navigation | See skills/accessibility-diag.md |
| Dynamic Type scaling violations | See skills/accessibility-diag.md |
| Dynamic Type on tvOS (Large Text, tvOS 27) | See skills/accessibility-diag.md |
| Long-form reading apps (continuous reading, Speak Screen, text navigation) | See skills/accessibility-diag.md |
| Captions & subtitle styling in video players (generated subtitles, style preview) | See skills/accessibility-diag.md |
| Custom control technique choice (adjustable, passthrough, direct touch) | See skills/accessibility-diag.md |
| Accessibility Nutrition Labels | See skills/accessibility-diag.md |
| Color contrast (WCAG AA/AAA) | See skills/accessibility-diag.md |
| Touch target sizes (< 44x44pt) | See skills/accessibility-diag.md |
| Keyboard navigation (iPadOS/macOS) | See skills/accessibility-diag.md |
| Button Shapes, Large Content Viewer, Full Keyboard Access, Switch Control | See skills/accessibility-diag.md |
| VoiceOver order broken after resize / column collapse; table & grid semantics | See skills/accessibility-diag.md |
| Reduce Motion support | See skills/accessibility-diag.md |
| Assistive Access (cognitive, iOS 17+) | See skills/accessibility-diag.md |
| Accessibility Inspector workflows | See skills/accessibility-diag.md |
| UX dead ends, dismiss traps | See skills/ux-flow-audit.md |
| Buried CTAs, missing empty states | See skills/ux-flow-audit.md |
| Missing loading/error states | See skills/ux-flow-audit.md |
| Deep link dead ends | See skills/ux-flow-audit.md |
| Accessibility dead ends (gesture-only) | See skills/ux-flow-audit.md |
| watchOS-specific (VoiceOver rotor on Digital Crown, AssistiveTouch, Double Tap) | See skills/watchos-a11y.md |
simulator-tester agent + xcui — see axiom-tools (skills/xcui-ref.md)XCUIDevice.shared.voiceOverService, OS27) → axiom-testing (skills/ui-testing.md Pattern 7)digraph accessibility {
start [label="Accessibility issue" shape=ellipse];
what [label="What type?" shape=diamond];
start -> what;
what -> "skills/accessibility-diag.md" [label="VoiceOver/labels/hints"];
what -> "skills/accessibility-diag.md" [label="Dynamic Type"];
what -> "skills/accessibility-diag.md" [label="color contrast"];
what -> "skills/accessibility-diag.md" [label="touch targets"];
what -> "skills/accessibility-diag.md" [label="keyboard nav"];
what -> "skills/accessibility-diag.md" [label="resizable window / desktop-class"];
what -> "skills/accessibility-diag.md" [label="Reduce Motion"];
what -> "skills/accessibility-diag.md" [label="Assistive Access"];
what -> "skills/accessibility-diag.md" [label="custom control techniques"];
what -> "skills/accessibility-diag.md" [label="continuous reading / text navigation"];
what -> "skills/accessibility-diag.md" [label="captions / subtitle styling"];
what -> "skills/accessibility-diag.md" [label="App Store prep / Nutrition Labels"];
what -> "skills/ux-flow-audit.md" [label="UX dead end/dismiss trap"];
what -> "skills/ux-flow-audit.md" [label="missing states"];
what -> "skills/watchos-a11y.md" [label="watchOS VoiceOver / AssistiveTouch / Double Tap"];
what -> "accessibility-auditor" [label="automated scan" shape=box];
}skills/accessibility-diag.mdskills/accessibility-diag.mdskills/accessibility-diag.mdskills/accessibility-diag.mdskills/ux-flow-audit.mdskills/watchos-a11y.mdaccessibility-auditor agent or /axiom-audit accessibilityAccessibility audit → Delegate to the accessibility-auditor subagent or /axiom-audit accessibility
UX flow audit → Delegate to the ux-flow-auditor subagent
Image(decorative: "photo") for purely decorative images — automatically hidden from VoiceOver (equivalent to accessibilityHidden(true) but semantically clearer)accessibilityInputLabels() for buttons with complex or changing labels — improves Voice Control accuracy by providing alternative labelsaccessibilityDifferentiateWithoutColor environment value — when active, provide non-color cues (icons, patterns, labels) alongside color indicators| Thought | Reality |
|---|---|
| "I'll add VoiceOver labels when I'm done building" | Accessibility is foundational, not polish. Retrofitting labels across a finished app takes far longer, and until they're done VoiceOver support can't be declared. |
| "My app doesn't need accessibility" | All apps need accessibility. It isn't an App Store rule, but people who rely on VoiceOver or Larger Text can't use the app without it, and its Accessibility Nutrition Labels show that before they download. |
| "Dynamic Type just needs .scaledFont" | Dynamic Type has 7 common violations. accessibility-diag catches them all. |
| "Color contrast looks fine to me" | Visual assessment is unreliable. WCAG ratios require measurement. accessibility-diag validates. |
| "UX issues are just polish" | UX dead ends cause 1-star reviews. They're defects, not enhancements. |
| "The dismiss gesture handles it" | fullScreenCover has no dismiss gesture. That's the trap. |
User: "My button isn't being read by VoiceOver"
→ See skills/accessibility-diag.md
User: "How do I support Dynamic Type?"
→ See skills/accessibility-diag.md
User: "Check my app for accessibility issues"
→ See skills/accessibility-diag.md
User: "Prepare for App Store accessibility review"
→ See skills/accessibility-diag.md
User: "Scan my app for accessibility issues automatically"
→ Delegate to the accessibility-auditor subagent
User: "How do I support Assistive Access?"
→ See skills/accessibility-diag.md
User: "How do I prepare my tvOS app for Large Text?"
→ See skills/accessibility-diag.md
User: "VoiceOver reads my screen in the wrong order after the window resizes"
→ See skills/accessibility-diag.md
User: "How do I support Button Shapes / the Large Content Viewer in my custom controls?"
→ See skills/accessibility-diag.md
User: "VoiceOver stops reading at the end of each page in my book app"
→ See skills/accessibility-diag.md
User: "How do I let users restyle subtitles or get generated captions in my video player?"
→ See skills/accessibility-diag.md
User: "Check for UX dead ends and dismiss traps"
→ See skills/ux-flow-audit.md
User: "My fullScreenCover has no way to dismiss"
→ See skills/ux-flow-audit.md
User: "Are there missing empty states in my app?"
→ See skills/ux-flow-audit.md
CharlesWiltgen/Axiom
58ae15a
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.