Token导航 LogoToken导航TokenDH.com
研究检索只读github未标认证来源可访问许可证需确认审计通过

mobile-accessibility移动辅助功能

Agent Skill

用于辅助无障碍访问检查、页面可用性审计和前端可访问性改进。它适合让 Agent 检查语义标签、键盘操作、颜色对比、ARIA 属性和自动化检测结果。使用时需要结合真实页面和浏览器验证,不应只依赖静态文本判断;涉及修复建议时,应兼顾设计系统、组件复用和 WCAG 等通用无障碍规范。

总安装

3,128

周安装

133

GitHub Stars

256

下载量

1,096
CodexClaudeCursorGemini CLI

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

GitHub

来源数

2

许可证

unknown

最后核验

2026-05-01

来源状态

来源可访问

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:mobile-accessibility(移动辅助功能)
来源仓库:https://github.com/community-access/accessibility-agents
仓库路径:skills/mobile-accessibility
安装命令:
npx skills add https://github.com/community-access/accessibility-agents --skill mobile-accessibility
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 npx skills 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

skills.shnpx skills
npx skills add https://github.com/community-access/accessibility-agents --skill mobile-accessibility

简介

mobile-accessibility 用于辅助无障碍访问检查和页面可用性审计,适合验证语义标签和键盘操作。

  • 适用于需要改进前端可访问性的场景。
  • 使用时需结合真实页面和浏览器验证,不应仅依赖静态文本判断。
  • 涉及修复建议时应兼顾设计系统和 WCAG 规范。
  • 适用宿主包括 Codex、Claude、Cursor、Gemini CLI,接入前应确认版本、权限和运行环境要求。

SKILL.md

Mobile Accessibility Skill

This skill provides mobile accessibility reference data for React Native, Expo, iOS, and Android auditing. Used by mobile-accessibility.agent.md.


React Native Accessibility Props - Full Reference

PropTypeValues / NotesWCAG SCRequired
accessiblebooleantrue marks the view as an accessibility node4.1.2Conditional
accessibilityLabelstringHuman-readable name - overrides all child text1.1.1, 4.1.2Yes (all interactive + image elements)
accessibilityLabelledBystring / string[]References ID(s) of labelling element1.3.1For form inputs
accessibilityRolestring (see roles table)Communicates element type to AT4.1.2Yes (all interactive elements)
accessibilityHintstringAdditional context spoken after label + role1.3.3When action isn't obvious
accessibilityStateobject{checked, disabled, expanded, selected, busy}4.1.2State-bearing elements
accessibilityValueobject{min, max, now, text}1.3.1Sliders, steppers, progress bars
accessibilityActionsarray[{name, label}] - defines custom actions4.1.3Context menus, long-press alternatives
onAccessibilityActionfunctionHandles custom action triggers4.1.3Paired with accessibilityActions
accessibilityLiveRegionstring'none' / 'polite' / 'assertive'4.1.3Dynamic content updates
accessibilityViewIsModalbooleantrue traps VoiceOver focus inside modal1.3.4Modals, drawers, sheets
accessibilityElementsHiddenbooleaniOS - hides element and children from VoiceOver1.1.1Decorative elements
importantForAccessibilitystringAndroid - 'auto' / 'yes' / 'no' / 'no-hide-descendants'1.1.1Decorative / grouped elements
accessibilityIgnoresInvertColorsbooleaniOS - preserves colors in Inverted Colors mode-Images, video
aria-labelstringRN 0.73+ alias for accessibilityLabel1.1.1, 4.1.2Preferred in new code
aria-labelledbystringRN 0.73+ alias for accessibilityLabelledBy1.3.1Form inputs
aria-describedbystringRN 0.73+ alias for accessibilityHint1.3.3Additional description
aria-rolestringRN 0.73+ alias for accessibilityRole4.1.2All interactive elements
aria-checkedboolean / 'mixed'RN 0.73+ alias for accessibilityState.checked4.1.2Checkboxes
aria-disabledbooleanRN 0.73+ alias for accessibilityState.disabled4.1.2Disabled elements
aria-expandedbooleanRN 0.73+ alias for accessibilityState.expanded4.1.2Accordions, dropdowns
aria-selectedbooleanRN 0.73+ alias for accessibilityState.selected4.1.2Tabs, list items
aria-busybooleanRN 0.73+ alias for accessibilityState.busy4.1.3Loading elements
aria-hiddenbooleanRN 0.73+ - maps to importantForAccessibility / accessibilityElementsHidden1.1.1Decorative content
aria-livestringRN 0.73+ alias for accessibilityLiveRegion4.1.3Dynamic content
aria-modalbooleanRN 0.73+ alias for accessibilityViewIsModal1.3.4Modals

Accessibility Role Values

RoleMaps to (iOS)Maps to (Android)Use For
'button'UIAccessibilityTraitButtonAccessibilityNodeInfo.ROLE_BUTTONButtons, submission triggers
'link'UIAccessibilityTraitLinkAccessibilityNodeInfo.ROLE_LINKNavigation links, external URLs
'search'-ROLE_SEARCHSearch bars
'image'UIAccessibilityTraitImageROLE_IMAGEImages (when accessible=true)
'imagebutton'UIAccessibilityTraitImage+ButtonROLE_BUTTONIcon buttons
'header'UIAccessibilityTraitHeaderROLE_HEADINGHeadings
'text'UIAccessibilityTraitStaticTextROLE_LABELStatic text
'adjustable'UIAccessibilityTraitAdjustableROLE_SCROLL_VIEWSliders
'checkbox'-ROLE_CHECKBOXCheckboxes
'combobox'-ROLE_DROP_DOWN_LISTDropdowns
'menu'-ROLE_MENUMenus
'menuitem'-ROLE_MENU_ITEMMenu items
'menubar'-ROLE_MENU_BARMenu bars
'progressbar'UIAccessibilityTraitUpdatesFrequentlyROLE_PROGRESS_BARProgress indicators
'radio'-ROLE_RADIO_BUTTONRadio buttons
'radiogroup'--Radio button groups
'scrollbar'-ROLE_SCROLL_BARScrollbars
'spinbutton'-ROLE_SCROLL_VIEWSteppers, number inputs
'switch'-ROLE_SWITCHToggle switches
'tab'-ROLE_TABTab elements
'tablist'-ROLE_TAB_LISTTab containers
'timer'UIAccessibilityTraitUpdatesFrequently-Countdown timers
'toolbar'-ROLE_TOOL_BARToolbars
'grid'-ROLE_GRIDData grids
'list'-ROLE_LISTLists
'listitem'-ROLE_LIST_ITEMList items
'summary'UIAccessibilityTraitSummaryElement-Summary/status views
'alert'UIAccessibilityTraitCausesPageTurnROLE_ALERTAlert dialogs
'none'UIAccessibilityTraitNoneROLE_NONESuppress role

Touch Target Size Requirements

PlatformMinimum SizeRecommendedStandard
iOS44 x 44 pt44 x 44 ptHIG
Android48 x 48 dp48 x 48 dpMaterial Design
Web mobile44 x 44 CSS px (AAA)44 x 44 CSS pxWCAG 2.5.5
Web mobile (AA, 2.2)24 x 24 CSS px with spacing44 x 44 CSS pxWCAG 2.5.8

Detection Pattern (React Native)

// Violation: TouchableOpacity below minimum
const styles = StyleSheet.create({
  closeBtn: { width: 24, height: 24 },          // FAIL - below 44pt
  iconBtn: { width: 32, height: 32 },            // FAIL - below 44pt
  navBtn: { padding: 4 },                        // CONDITIONAL - depends on content size
  compliant: { width: 44, height: 44 },          // PASS
  compliantWithPadding: { padding: 12 },         // PASS if content >= 20pt
});

iOS UIAccessibility - Quick Reference

SwiftUI Modifiers

ModifierPurpose
.accessibilityLabel("...")Overrides spoken name
.accessibilityHint("...")Spoken usage hint (after pause)
.accessibilityValue("...")Spoken current value
.accessibilityHidden(true)Removes from VoiceOver tree
.accessibilityElement(children:.combine)Merges child elements into one node
.accessibilityElement(children:.contain)Groups children as sub-elements
.accessibilityElement(children:.ignore)Container becomes accessible, children hidden
.accessibilityAddTraits(.isButton)Adds role trait
.accessibilityRemoveTraits(.isImage)Removes wrong role trait
.accessibilityInputLabels(["..."])Voice Control activation labels
.accessibilitySortPriority(n)Overrides VoiceOver reading order (higher = earlier)
.accessibilityAction(named: "...", {})Custom action in the Actions rotor
.accessibilityActivationPoint(CGPoint)Override activation tap point
.accessibilityCustomContent("label", "value")Extra info in Accessibility Inspector

SwiftUI Trait Values

isButton, isHeader, isLink, isImage, isStaticText, isSelected, isKeyboardKey, isSearchField, playsSound, isModal, updatesFrequently, startsMediaSession, allowsDirectInteraction, causesPageTurn, isTabBar, isSummaryElement

UIKit Properties

PropertyTypeNotes
isAccessibilityElementBoolSet true on custom views
accessibilityLabelString?Overrides spoken name
accessibilityHintString?Spoken after pause
accessibilityValueString?Current value (sliders, progress)
accessibilityTraitsUIAccessibilityTraitsBitfield of traits (.button, .header, etc.)
accessibilityFrameCGRectDetermines VoiceOver focus rect
accessibilityActivate()funcOverride activation behavior
accessibilityElements[Any]?Set container's VoiceOver child order
shouldGroupAccessibilityChildrenBoolGroups all children into single node
accessibilityViewIsModalBooltrue = VoiceOver trapped inside
accessibilityElementsHiddenBoolHides all children from VoiceOver

Android Jetpack Compose Semantics - Quick Reference

Modifier / PropertyPurpose
semantics {contentDescription = "..."}Accessible name
semantics {role = Role.Button}Element role
semantics {stateDescription = "..."}Current state text
semantics {heading()}Marks as heading
semantics {selected = true/false}Selected state
semantics {toggleableState = ToggleableState.On}Toggle state
semantics {onClick(label = "...", action = {...})}Click action with label
semantics {disabled()}Disabled state
semantics {focused = true}Force focus
semantics {liveRegion = LiveRegion.Polite}Live region announcements
semantics {invisibleToUser()}Hide from TalkBack
semantics {mergeDescendants = true}Merge child semantics into one node
clearAndSetSemantics {...}Replace all descendant semantics
Modifier.semantics(mergeDescendants = true) {}Short merge pattern

Role Values

Role.Button, Role.Checkbox, Role.DropdownList, Role.Image, Role.RadioButton, Role.Switch, Role.Tab


Common Violation Patterns and Fixes

RN-001: Missing accessibilityLabel on icon button

// VIOLATION
<TouchableOpacity onPress={close}>
  <Icon name="x" size={20} />
</TouchableOpacity>

// FIX
<TouchableOpacity
  onPress={close}
  accessibilityRole="button"
  accessibilityLabel="Close"
>
  <Icon name="x" size={20} aria-hidden />
</TouchableOpacity>

RN-002: Image missing label

// VIOLATION
<Image source={productImage} style={styles.product} />

// FIX - informational image
<Image
  source={productImage}
  style={styles.product}
  accessibilityLabel="Blue suede shoes, size 10"
/>

// FIX - decorative image
<Image
  source={decorativeBackground}
  style={styles.bg}
  accessible={false}
  importantForAccessibility="no"
/>

RN-003: TextInput missing label

// VIOLATION - placeholder is not a label
<TextInput placeholder="Email" value={email} onChangeText={setEmail} />

// FIX
<View>
  <Text nativeID="emailLabel">Email address</Text>
  <TextInput
    value={email}
    onChangeText={setEmail}
    accessibilityLabelledBy="emailLabel"
    accessibilityHint="Enter your email address"
    keyboardType="email-address"
    autoComplete="email"
  />
</View>

RN-004: Checkbox missing state

// VIOLATION
<TouchableOpacity onPress={toggle}>
  <Image source={checked ? checkedIcon : uncheckedIcon} />
  <Text>Accept terms</Text>
</TouchableOpacity>

// FIX
<TouchableOpacity
  onPress={toggle}
  accessibilityRole="checkbox"
  accessibilityState={{ checked }}
  accessibilityLabel="Accept terms and conditions"
>
  <Image source={checked ? checkedIcon : uncheckedIcon} accessible={false} />
  <Text>Accept terms</Text>
</TouchableOpacity>

RN-005: Modal not trapping focus

// VIOLATION - custom modal without VoiceOver trap
<View style={styles.modal}>
  <Text>Are you sure?</Text>
  <Button title="Confirm" onPress={confirm} />
</View>

// FIX - use Modal component (traps focus automatically) or set accessibilityViewIsModal
<Modal
  visible={visible}
  transparent
  accessibilityViewIsModal={true}  // traps VoiceOver
  onRequestClose={close}           // Android back button
>
  <View style={styles.overlay}>
    <Text>Are you sure?</Text>
    <Button title="Confirm" onPress={confirm} />
    <Button title="Cancel" onPress={close} />
  </View>
</Modal>

AND-001: Compose image missing content description

// VIOLATION
Image(
    painter = painterResource(id = R.drawable.product),
    contentDescription = null  // null = decorative, but wrong for informational image
)

// FIX - informational
Image(
    painter = painterResource(id = R.drawable.product),
    contentDescription = stringResource(R.string.product_image_description)
)

// FIX - truly decorative
Image(
    painter = painterResource(id = R.drawable.divider),
    contentDescription = null,
    modifier = Modifier.semantics { invisibleToUser() }
)

Testing Tool Commands

iOS Accessibility Inspector (Xcode)

Xcode -> Xcode menu -> Open Developer Tool -> Accessibility Inspector
- Run audit: Click "Audit" tab -> "Run Audit" button
- Inspect: "Inspection" tab -> hover over elements in Simulator
- Keyboard: Use +F7 to toggle VoiceOver in Simulator

Android Accessibility Scanner

# Install (Play Store or adb)
adb install com.google.android.apps.accessibility.auditor

# Enable TalkBack via ADB (for CI)
adb shell settings put secure enabled_accessibility_services \
  com.google.android.marvin.talkback/.TalkBackService

# Check accessibility node tree
adb shell uiautomator dump /sdcard/ui_dump.xml
adb pull /sdcard/ui_dump.xml

React Native Testing Library

npm install --save-dev @testing-library/react-native
import { render, screen, fireEvent } from '@testing-library/react-native';

test('button has accessible name and role', () => {
  render(<SubmitButton onPress={jest.fn()} />);
  const btn = screen.getByRole('button', { name: /submit/i });
  expect(btn).toBeTruthy();
});

test('checkbox updates state', () => {
  render(<TermsCheckbox />);
  const checkbox = screen.getByRole('checkbox', { name: /accept terms/i });
  expect(checkbox).toHaveAccessibilityState({ checked: false });
  fireEvent.press(checkbox);
  expect(checkbox).toHaveAccessibilityState({ checked: true });
});

Maestro (E2E)

# .maestro/accessibility-checks.yaml
appId: com.example.myapp
---
- launchApp
- assertVisible:
    label: "Submit form"
- tapOn:
    label: "Close"
- assertNotVisible:
    label: "Are you sure?"

适合场景

01

用户想查找某类 Agent Skill 时

02

需要根据任务场景推荐可安装能力包时

03

需要对比不同来源的安装命令和来源信息时

能力概览

能力 1

按任务关键词查找相关 Skills

能力 2

展示可复制的安装命令

能力 3

保留来源站点、仓库和原始说明,方便继续核验

能力 4

展示第三方安全扫描或审计结果

安装后应在对应宿主中按原始 README 的触发条件使用;具体调用方式请以来源页面和 README 为准。

平台分布

Codex

35.71%
按下载量换算391

Claude

29.98%
按下载量换算329

Cursor

19.89%
按下载量换算218

Gemini CLI

11.59%
按下载量换算127

安全审计

Gen Agent Trust Hub

通过

Socket

通过

Snyk

通过

权限和风险

只读

该 Skill 主要提供规则、说明或参考内容,本身偏只读;真正读写文件、联网或执行命令仍取决于宿主 Agent 的任务。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。当前只有一个来源,正式发布前建议补源仓库或其他目录站核验。

来源信息

继续浏览同类 Skills