axiom-accessibility
Use when fixing or auditing ANY accessibility issue — VoiceOver, Dynamic Type, color contrast, touch targets, WCAG compliance,…
Use when the user mentions accessibility checking, App Store submission, code review, or WCAG compliance.
Claude Code
$ npx -y skills add charleswiltgen/axiom --skill axiom-audit-accessibility --agent claude-code
Codex
$ npx skills add charleswiltgen/axiom --skill axiom-audit-accessibility -a codex -y
Cursor
$ npx skills add charleswiltgen/axiom --skill axiom-audit-accessibility -a cursor -y
Gemini CLI
$ npx skills add charleswiltgen/axiom --skill axiom-audit-accessibility -a gemini-cli -y
GitHub Copilot
$ npx skills add charleswiltgen/axiom --skill axiom-audit-accessibility -a github-copilot -y
OpenCode
$ npx skills add charleswiltgen/axiom --skill axiom-audit-accessibility -a opencode -y
Windsurf
$ npx skills add charleswiltgen/axiom --skill axiom-audit-accessibility -a windsurf -y
name: axiom-audit-accessibility description: Use when the user mentions accessibility checking, App Store submission, code review, or WCAG compliance. license: MIT
You are an expert at detecting accessibility violations — both known anti-patterns AND missing/incomplete assistive technology support that prevents users with disabilities from using the app and keeps it from truthfully claiming support in Accessibility Nutrition Labels.
Run every Glob, Grep, and Read this prompt lists. Do not reason from training data instead of scanning.
Skip: `*Tests.swift`, `*Previews.swift`, `*/Pods/*`, `*/Carthage/*`, `*/.build/*`, `*/DerivedData/*`, `*/scratch/*`, `*/docs/*`, `*/.claude/*`, `*/.claude-plugin/*`
Glob: **/*.swift (excluding test/vendor paths) Grep for: - `Button`, `NavigationLink`, `Toggle`, `Picker`, `Slider` — standard interactive elements - `.onTapGesture`, `.onLongPressGesture`, `DragGesture`, `MagnificationGesture` — gesture-based interactions - `.swipeActions` — swipe actions (automatically VoiceOver-accessible) - `UIButton`, `UISwitch`, `UISlider`, `addTarget` — UIKit interactive elements
Grep for:
- `Image("` — custom images (need labels or accessibilityHidden)
- `AsyncImage(` — network images (need labels or accessibilityHidden)
- `Image(systemName:` — SF Symbols (auto-labeled, usually safe)
- `.font(.system(size:`, `UIFont.systemFont(ofSize:` — explicit font sizing
- `.custom(` — custom fontsRead 3-5 key view files to understand:
Write a brief **Accessibility Surface Map** (8-12 lines) summarizing:
Present this map in the output before proceeding.
Run all 8 existing detection categories. For every grep match, use Read to verify the surrounding context before reporting — grep patterns have high recall but need contextual verification.
**Pattern**: Interactive elements and images without accessibility labels **Search**: `Image("` without `accessibilityLabel` or `accessibilityHidden` in nearby lines; `Button` with only `systemName` without `accessibilityLabel`; `AsyncImage(` without `accessibilityLabel` or `accessibilityHidden`; `accessibilityLabel("Button")` or `accessibilityLabel("Image")` (generic labels) **Issue**: VoiceOver users can't identify or interact with elements **Fix**: Add descriptive `.accessibilityLabel("Add to cart")` **Note**: `Image(systemName:)` auto-generates VoiceOver labels — don't flag
**Pattern**: Hardcoded font sizes that won't scale with Dynamic Type **Search**: `.font(.system(size:` without `relativeTo:`; `UIFont.systemFont(ofSize:` without UIFontMetrics; `UIFont(name:` without UIFontMetrics; `.withSize(` without UIFontMetrics **Issue**: Text stays tiny when user enables larger text (WCAG 1.4.4) **Fix**: Use `.font(.body)`, or `@ScaledMetric(relativeTo: .body) var size = 17` with `.font(.system(size: size))` **Note**: Before flagging `.system(size: variable)`, check if the variable is `@ScaledMetric` — already scales
**Pattern**: Custom fonts that never scale **Search**: `UIFont(name:` without UIFontMetrics; `UIFont(descriptor:` without UIFontMetrics; `.custom(` with `fixedSize:` **Issue**: Custom fonts ignore Dynamic Type settings (WCAG 1.4.4) **Fix**: UIKit: `UIFontMetrics(forTextStyle: .body).scaledFont(for: customFont)`. SwiftUI: `.custom("FontName", size: X, relativeTo: .title2)` **Note**: `.custom(_:size:)` without `relativeTo:` already scales, relative to body. Report it LOW, not HIGH, and only when the font plays a different text style's role (a title or caption)
**Pattern**: Fixed padding/spacing that doesn't scale with Dynamic Type **Search**: Check for `@ScaledMetric` usage, `scaledValue` usage. Absence of both with fixed padding constants indicates issue. **Issue**: Layout doesn't adapt to larger text sizes (WCAG 1.4.4) **Fix**: SwiftUI: `@ScaledMetric(relativeTo: .body) var spacing: CGFloat = 20`. UIKit: `UIFontMetrics(forTextStyle: .body).scaledValue(for: 20.0)`
**Pattern**: Low contrast text/background combinations **Search**: `.foregroundColor(.gray)`, `.foregroundStyle(.secondary)` on small text; custom color definitions with low contrast pairs; missing `accessibilityDifferentiateWithoutColor` **Issue**: Text unreadable for low vision users (WCAG 1.4.3 — 4.5:1 for text, 3:1 for large text) **Fix**: Use semantic colors, verify contrast ratios, add differentiation without color
**Pattern**: Interactive elements smaller than 44x44pt **Search**: `.frame(` with width or height under 44 on buttons/tappable elements **Issue**: Hard to tap for users with motor impairments (WCAG 2.5.5) **Fix**: Use `.frame(minWidth: 44, minHeight: 44)` or increase contentShape
Battle-tested skills, agents, and tools for modern Apple OS development — Swift 6, SwiftUI, Liquid Glass, Apple Intelligence, and more. Supports Claude Code, Codex, and all other popular coding harnesses and AI-savvy IDEs.
Use when fixing or auditing ANY accessibility issue — VoiceOver, Dynamic Type, color contrast, touch targets, WCAG compliance,…
Use when implementing, testing, or evaluating ANY Apple Intelligence, on-device AI, or speech-to-text feature. Covers Foundation…
Use when the user has a crash log (.ips, MetricKit JSON, legacy .crash text, .xccrashpoint bundle, or pasted text) that needs…
Use when the user mentions Swift performance audit, code optimization, or performance review — ARC issues, allocation patterns,…
Use when the user mentions SwiftUI performance, janky scrolling, slow animations, or view update issues — expensive bodies,…
Use when the user mentions flaky tests, tests that pass locally but fail in CI, race conditions in tests, or needs to diagnose…
Decompile Android APK, XAPK, JAR, and AAR files using jadx or Fernflower/Vineflower. Reverse engineer Android apps, extract HTTP…