Audit a mobile screen for accessibility
Audits an iOS, Android, React Native or Flutter screen for labels, traits, focus order, text scaling, touch targets, contrast and gestures, with platform fixes and a VoiceOver or TalkBack test script.
Mobile accessibility bugs are mostly invisible to sighted developers testing by tapping: an icon button that VoiceOver reads as "button" or TalkBack reads as "unlabelled", a card whose five text pieces are read as five separate stops, focus that jumps to the bottom of the screen after a dialog closes, text that clips or overlaps at the largest font sizes, a 28-point close button, a swipe-to-delete with no alternative for people who cannot swipe, and status messages that change silently. Each platform has its own accessibility API, so fixes must use the platform's own properties, and the only reliable check is a real screen reader run.
Audit this screen for accessibility.
Only if [CODE] is given:
- Check each area, using the code when given and the description or screenshot otherwise:
- Labels and names: every interactive element and meaningful image has a concise accessible name that says what it is or does; decorative images are hidden from assistive technology; labels do not repeat the role ("button") or include visible-only cues ("tap the red icon").
- Roles, traits and states: buttons, headings, links, toggles, tabs and adjustable controls expose the right role, and state (selected, checked, expanded, disabled) is exposed and announced when it changes.
- Grouping and focus order: related content is grouped into one stop where that helps (a list cell, a card); reading and focus order follows the visual and logical order; focus moves sensibly when dialogs, sheets or new content appear and returns when they close.
- Text scaling: text uses scalable type (Dynamic Type on iOS, sp units or scalable typography on Android, font scaling left enabled in React Native and Flutter) and the layout reflows without clipping or overlap at the largest accessibility sizes.
- Touch targets: at least 44 by 44 points on iOS (Apple's guidance) and 48 by 48 dp on Android and Material (Google's guidance), with adequate spacing; WCAG 2.2 sets 24 by 24 CSS pixels as the minimum.
- Contrast and colour: text contrast at least 4.5:1 (3:1 for large text) and 3:1 for icons and control boundaries, in light and dark mode; colour is never the only signal.
- Gestures and motion: every custom or multi-finger gesture (swipe actions, long press, drag to reorder) has an accessible alternative such as custom accessibility actions or a visible button; animations respect the reduce-motion setting.
- Announcements: errors, loading results and toasts are announced to screen readers without stealing focus unnecessarily. Prefer live regions and state changes the platform announces on its own; Android has deprecated direct announcement events because they interrupt TalkBack, so use one-off announcement calls only where a live region cannot work, and say so.
- For each problem found, give the fix using the platform's own API:
- ios:
accessibilityLabel,accessibilityHint,accessibilityTraitsor SwiftUI.accessibilityAddTraits,accessibilityElement(children: .combine)orshouldGroupAccessibilityChildren,accessibilityCustomActionsor.accessibilityAction,UIFont.preferredFont(forTextStyle:)withadjustsFontForContentSizeCategoryor SwiftUI text styles, andUIAccessibility.post(notification:argument:). - android:
contentDescription, ComposeModifier.semantics { }withcontentDescription,role,stateDescriptionandheading(),mergeDescendants,importantForAccessibility,accessibilityHeading,accessibilityLiveRegionor ComposeliveRegionsemantics, custom accessibility actions,minimumInteractiveComponentSize, and sp text sizes. - react-native:
accessible,accessibilityLabel,accessibilityHint,accessibilityRoleorrole,accessibilityState,accessibilityActionswithonAccessibilityAction,importantForAccessibility,accessibilityElementsHidden,hitSlop,allowFontScaling,accessibilityLiveRegion(Android) andAccessibilityInfo.announceForAccessibilitywhere a live region does not fit. - flutter:
Semantics(label, button, header, value),MergeSemantics,ExcludeSemantics,Semanticscustom actions,Semantics(liveRegion: true)for status text (withSemanticsService.sendAnnouncementorannounceonly as a fallback, checked againstMediaQuery.supportsAnnounceOf), text that respectsMediaQuerytext scaling, andkMinInteractiveDimension. Show a short before-and-after code snippet for each fix when code was given.
- Map each finding to its WCAG 2.2 success criterion and rate severity by user impact: blocker (a task cannot be completed with a screen reader, switch control or large text), serious, moderate or minor.
- Write a manual screen reader test script for the screen on the platform's reader (VoiceOver for iOS, TalkBack for Android, both for cross-platform frameworks): the setting to enable, the gestures to use (swipe right and left to move, double-tap to activate, the rotor or reading controls, the escape or back gesture), and for each step what should be announced. Add checks for the largest text size, a switch or keyboard pass if relevant, and the automated tools to run (Xcode Accessibility Inspector, Android Accessibility Scanner, Espresso or Compose accessibility checks, Flutter's accessibility guideline tests).
- Report only problems you can see in the code, description or screenshot. Mark anything that can only be confirmed on a device as "verify on device" and put it in the test script.
- Use only APIs that exist on the named platform; if you are unsure of an API's exact name or availability for the OS version, say so.
- Prefer native semantics and standard controls over custom accessibility workarounds.
- Do not claim the screen is compliant; an audit from code or screenshots cannot prove that.
- Read the relevant code before making a claim about it. Do not guess what a file, function or config contains.
- If the information you need is not available, say what is missing and how to get it instead of inventing it.
Summary
The number of findings by severity and the most important fix, in at most 4 lines.
Findings
Numbered, most severe first. Each: element, problem, who is affected, WCAG criterion, severity, fix (with code when available).
Screen reader test script
Numbered steps: action or gesture, expected announcement or result.
Not checked
What could not be assessed from the input and how to check it.
2 required values still a placeholder; the assistant will ask for them.
details
- kind
- Prompt: a task you run by name to get one finished thing back
- domain
- Software engineering
- category
- Accessibility
- level
- Intermediate
- made for
- Mobile engineer, QA / test engineer, Product / UX / UI designer
- risk
- read-only
- version
- v1.1.0 · incubating
- reviewed
- 2026-10-02
- works in
- Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Antigravity, OpenCode, Windsurf, Zed, Continue, AGENTS.md, ChatGPT, claude.ai
use in
npx @hermes-hq/hodios install audit-mobile-accessibility --target claude-codenpx skills add hermes-hq/hodios-dist --skill audit-mobile-accessibility -a claude-codeclaude plugin marketplace add hermes-hq/hodios-distclaude plugin install hodios-software-engineering@hodiosThe plugin brings every entry in this domain at once.
pairs well with
All of AccessibilityAccessibility specialist
Accessibility specialist who builds and reviews with WCAG, the ARIA Authoring Practices and real assistive-technology behaviour in mind, ranking barriers by who is blocked.
accessibility-specialistMobile engineer
Acts as a mobile engineer who designs for flaky networks, battery and memory limits, platform conventions and app-store releases. Use for iOS, Android or cross-platform work.
mobile-engineerWrite a screen-reader test plan
Writes a manual screen-reader test script for a user flow on NVDA, JAWS, VoiceOver or TalkBack, with keystrokes and expected announcements per step. Use before releasing a key flow.
write-screen-reader-test-planReview colour contrast and fix the palette
Checks colour pairs or design tokens against contrast requirements and proposes the nearest passing alternatives that keep the brand hue. Use when defining or auditing a palette or theme.
review-color-contrastAudit web accessibility against WCAG 2.2
Audits markup or components against WCAG 2.2 and reports each issue by success criterion with user impact, severity and a concrete code fix. Use before a release or a compliance review.
audit-web-accessibilityBuild an accessible ARIA widget
Implements a combobox, tabs, dialog, menu, disclosure, tree or listbox per the ARIA Authoring Practices pattern, using native elements whenever they suffice. Use for custom interactive widgets.
build-aria-widget