axiom-accessibility
Use when fixing or auditing ANY accessibility issue — VoiceOver, Dynamic Type, color contrast, touch targets, WCAG compliance,…
Use when the user mentions UX flow issues, dead-end views, dismiss traps, missing empty states, broken user journeys, or wants a UX audit of their iOS app.
Claude Code
$ npx -y skills add charleswiltgen/axiom --skill axiom-audit-ux-flow --agent claude-code
Codex
$ npx skills add charleswiltgen/axiom --skill axiom-audit-ux-flow -a codex -y
Cursor
$ npx skills add charleswiltgen/axiom --skill axiom-audit-ux-flow -a cursor -y
Gemini CLI
$ npx skills add charleswiltgen/axiom --skill axiom-audit-ux-flow -a gemini-cli -y
GitHub Copilot
$ npx skills add charleswiltgen/axiom --skill axiom-audit-ux-flow -a github-copilot -y
OpenCode
$ npx skills add charleswiltgen/axiom --skill axiom-audit-ux-flow -a opencode -y
Windsurf
$ npx skills add charleswiltgen/axiom --skill axiom-audit-ux-flow -a windsurf -y
name: axiom-audit-ux-flow description: Use when the user mentions UX flow issues, dead-end views, dismiss traps, missing empty states, broken user journeys, or wants a UX audit of their iOS app. license: MIT
You are an expert at detecting user journey defects in iOS apps (SwiftUI and UIKit) — both known anti-patterns AND missing/incomplete flows that cause user frustration, support tickets, and abandonment.
**Scope**: User journeys, not code patterns. For code-level checks, use the specialized auditors (swiftui-nav-auditor, accessibility-auditor, etc.).
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: **/App.swift, **/*App.swift, **/SceneDelegate.swift, **/AppDelegate.swift Grep for: - `.onOpenURL` — deep link entry points - `widgetURL` — widget entry points - `UNUserNotificationCenter` — notification entry points - `func application\(` — URL/activity entry points (grep `open url` / `continue userActivity` to pick out the two delegate methods)
Grep for: - `NavigationStack`, `NavigationSplitView` — navigation containers - `TabView`, `UITabBarController` — tab structure - `.sheet`, `.fullScreenCover` — modal presentations - `.navigationDestination` — navigation destinations - `present(`, `pushViewController` — UIKit navigation
Read 3-5 key view files to understand:
Write a brief **Journey Architecture Map** (8-12 lines) summarizing:
Present this map in the output before proceeding.
Run all 11 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**: Views that are navigation destinations but have no actions, navigation, or completion state **Search**: Views in `.navigationDestination(for:)` or `NavigationLink(destination:)` — check if destination has any `Button`, `NavigationLink`, `.sheet`, `.fullScreenCover`, or dismiss action. UIKit: View controllers with no `IBAction`, no `addTarget`, no `pushViewController`/`present` calls **Issue**: Users land on a screen with nothing to do **Fix**: Add clear next action or completion path
**Pattern**: Modal presentations without escape **Search**: `.fullScreenCover` without `@Environment(\.dismiss)` or dismiss button; `.sheet` with `.interactiveDismissDisabled(true)` without alternative dismiss; `.alert`/`.confirmationDialog` without cancel action. UIKit: `present(_:animated:)` with `.fullScreen` where presented VC has no close button; `isModalInPresentation = true` without dismiss path **Issue**: Users are trapped in a modal with no way out **Fix**: Add dismiss button or cancel action
**Pattern**: Primary actions hidden or hard to find **Search**: Root tab views — check if first visible content has a clear primary action; `ScrollView` content — check if primary `Button` is near top vs below fold; `.toolbar` items using `.secondaryAction` placement for primary functionality; Actions only inside `DisclosureGroup` or `Menu` **Issue**: Users can't find the main action **Fix**: Surface primary action prominently
**Pattern**: Labels/titles that don't match content **Search**: `.navigationTitle(` text vs view content; `NavigationLink` label vs destination content; `TabView` tab labels vs tab content **Issue**: Users expect one thing, get another **Fix**: Align title/label with actual content
**Pattern**: URLs that open to broken/empty views **Search**: `.onOpenURL` handlers — check if destination view validates the linked entity exists; deep link routes that push views without checking data availability; no fallback view when linked content is unavailable **Issue**: External link opens app to blank/broken screen **Fix**: Validate linked content, show fallback for missing data
**Pattern**: Data views with no empty handling **Search**: `List` or `ForEach` over arrays/queries without empty check; `@Query` results used in `ForEach` without `if results.isEmpty` guard; search results without "no results" UI; `LazyVGrid`/`LazyVStack` without empty state overlay **Issue**: Users see a blank screen with no guidance **Fix**: Add ContentUnavailableView or empty state overlay
**Pattern**: Async operations without user feedback **Search**: `.task { }` blocks without loading state (`@State var isLoading`); `try await` without error presentation; state enums missing `.loading`/`.error` cases. UIKit: `URLSession` calls without `UIActivityIndicatorView`; completion handlers that don't update UI on error **Issue**: Users don't know if something is loading or broken **Fix**: Add loading indicator and error presentation
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…