axiom-codex/skills/axiom-accessibility/SKILL.md
Use when fixing or auditing ANY accessibility issue — VoiceOver, Dynamic Type, color contrast, touch targets, WCAG compliance, App Store accessibility review.
npx skillsauth add charleswiltgen/axiom axiom-accessibilityInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
You MUST use this skill for ANY accessibility work including VoiceOver, Dynamic Type, color contrast, WCAG compliance, and UX flow auditing.
| Symptom / Task | Reference |
|----------------|-----------|
| VoiceOver labels, hints, navigation | See skills/accessibility-diag.md |
| Dynamic Type scaling violations | 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 |
| 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 |
| App Store Review preparation | 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 |
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="Reduce Motion"];
what -> "skills/accessibility-diag.md" [label="Assistive Access"];
what -> "skills/accessibility-diag.md" [label="App Store prep"];
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/ux-flow-audit.mdskills/watchos-a11y.mdaccessibility-auditor agent or /axiom:audit accessibilityAccessibility audit → Launch accessibility-auditor agent or /axiom:audit accessibility
UX flow audit → Launch ux-flow-auditor agent
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. accessibility-diag prevents App Store rejection. | | "My app doesn't need accessibility" | All apps need accessibility. It's required by App Store guidelines and benefits all users. | | "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"
→ Launch accessibility-auditor agent
User: "How do I support Assistive Access?"
→ 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
development
Use when building ANY watchOS app — app structure, independent apps, Watch Connectivity, Smart Stack widgets, complications, controls, RelevanceKit, background tasks, ClockKit migration.
development
Use when working with HealthKit, WorkoutKit, health data, workouts, or fitness features on iOS or watchOS. Covers permissions, queries, background delivery, custom workouts, multidevice coordination.
development
Use when building, fixing, or improving ANY SwiftUI UI — views, navigation, layout, animations, performance, architecture, gestures, debugging, iOS 26 features.
content-media
Use when working with camera, photos, audio, haptics, ShazamKit, or Now Playing. Covers AVCaptureSession, PHPicker, PhotosPicker, AVFoundation, Core Haptics, audio recognition, MediaPlayer, CarPlay, MusicKit.