axiom-accessibility — скилл для Claude Code: аудит доступности iOS
Скилл для разбора проблем доступности в приложениях Apple: VoiceOver, Dynamic Type, контраст, размеры целей нажатия, WCAG.
npx skills add CharlesWiltgen/Axiom --skill axiom-accessibility -a claude-codeЧто делает axiom-accessibility
Скилл включается, когда вы правите или проверяете доступность в приложении под Apple-платформы. Он разводит задачу по симптомам: подписи и подсказки VoiceOver, масштабирование Dynamic Type, провалы по контрасту, цели нажатия меньше 44x44pt, навигация с клавиатуры, Reduce Motion, Assistive Access. Отдельная ветка — UX-аудит: тупиковые экраны, ловушки закрытия, потерянные CTA, отсутствие состояний загрузки и ошибки. Для watchOS есть свой файл про ротор на Digital Crown, AssistiveTouch и Double Tap.
Внутри — роутер с таблицей симптомов и решающим деревом, которое ведёт к skills/accessibility-diag.md, skills/ux-flow-audit.md или skills/watchos-a11y.md. Автоматический скан отдан отдельным аудиторам: axiom-audit-accessibility проверяет подписи, Dynamic Type, контраст и WCAG, axiom-audit-ux-flow ищет тупики и пропущенные состояния. В Codex эти аудиторы вызываются как скиллы, а не как агенты Claude. Проверки, которые собирают проект, гоняют тесты или симулятор, требуют доступа к шеллу.
Ставить стоит до того, как интерфейс готов: подписи VoiceOver, добавленные в конце, обходятся дороже, и до них поддержку VoiceOver заявить нельзя. Контраст на глаз не оценивается — нужны замеры по WCAG, и скилл как раз на это и опирается.
Какие задачи решает
- разметить подписи и подсказки VoiceOver для элементов интерфейса
- найти нарушения масштабирования Dynamic Type
- проверить контраст по порогам WCAG AA и AAA
- увеличить цели нажатия до 44x44pt
- найти тупиковые экраны и ловушки закрытия в UX-потоке
Примеры запросов агенту
- проверь доступность экрана настроек: подписи VoiceOver и порядок обхода
- почему у меня ломается Dynamic Type на карточках — прогони диагностику
- запусти axiom-audit-accessibility по проекту и покажи провалы по контрасту
Как установить axiom-accessibility
1Через Skills CLI (Vercel)
npx skills add CharlesWiltgen/Axiom --skill axiom-accessibility -a claude-code2Вручную: положить файлы
~/.claude/skills/axiom-accessibility/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/axiom-accessibility/
1Через Skills CLI (Vercel)
npx skills add CharlesWiltgen/Axiom --skill axiom-accessibility -a codex2Вручную: положить файлы
.agents/skills/axiom-accessibility/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add CharlesWiltgen/Axiom --skill axiom-accessibility -a cursor2Вручную: положить файлы
.cursor/skills/axiom-accessibility/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install CharlesWiltgen/Axiom axiom-accessibility2Вручную: положить файлы
.github/skills/axiom-accessibility/SKILL.md1Через Skills CLI (Vercel)
npx skills add CharlesWiltgen/Axiom --skill axiom-accessibility -a gemini-cli2Командой платформы
gemini skills install https://github.com/CharlesWiltgen/Axiom --path axiom-codex/skills/axiom-accessibilityВручную: положить файлы
.devin/skills/axiom-accessibility/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add CharlesWiltgen/Axiom --skill axiom-accessibility -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов
Вопросы о axiom-accessibility
Как установить axiom-accessibility в Claude?
Выполните npx skills add CharlesWiltgen/Axiom --skill axiom-accessibility -a claude-code. После этого файл скилла лежит в ~/.claude/skills/axiom-accessibility/SKILL.md.
Что делает axiom-accessibility?
Разбирает задачи доступности в приложениях Apple: VoiceOver, Dynamic Type, контраст, размеры целей нажатия, клавиатурная навигация, WCAG. Часть проверок вынесена в аудиторы axiom-audit-accessibility и axiom-audit-ux-flow.
Чем отличается от обычного сканирования доступности?
Скилл ведёт по симптомам к нужному файлу с диагностикой, а аудиторы дают автоматический скан. Проверки со сборкой, тестами и симулятором требуют доступа к шеллу.
Исходный текст
SKILL.md · MIT
---
name: axiom-accessibility
description: Use when fixing or auditing ANY accessibility issue — VoiceOver, Dynamic Type, color contrast, touch targets, WCAG compliance, App Store accessibility review.
license: MIT
---
# Accessibility
**You MUST use this skill for ANY accessibility work including VoiceOver, Dynamic Type, color contrast, WCAG compliance, and UX flow auditing.**
<!-- AXIOM_AUDITOR_INLINE_BEGIN — rewritten for Codex by scripts/build-codex.ts; do not hand-edit -->
> **Auditors are skills here.** Where this router says "Launch `some-auditor` agent", invoke the
> matching Codex skill instead — same procedure, no Claude Code agent required.
>
> Available: `axiom-audit-accessibility`, `axiom-audit-concurrency`, `axiom-audit-swiftdata`, `axiom-audit-swiftui-nav`, `axiom-audit-ux-flow`.
>
> The ones that shell out — builds, tests, simulators, crash symbolication — need shell access to run.
<!-- AXIOM_AUDITOR_INLINE_END -->
## Quick Reference
| Symptom / Task | Reference |
|----------------|-----------|
| VoiceOver labels, hints, navigation | See `skills/accessibility-diag.md` |
| Dynamic Type scaling violations | See `skills/accessibility-diag.md` |
| Dynamic Type on tvOS (Large Text, tvOS 27) | See `skills/accessibility-diag.md` |
| Long-form reading apps (continuous reading, Speak Screen, text navigation) | See `skills/accessibility-diag.md` |
| Captions & subtitle styling in video players (generated subtitles, style preview) | See `skills/accessibility-diag.md` |
| Custom control technique choice (adjustable, passthrough, direct touch) | See `skills/accessibility-diag.md` |
| Accessibility Nutrition Labels | 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` |
| Button Shapes, Large Content Viewer, Full Keyboard Access, Switch Control | See `skills/accessibility-diag.md` |
| VoiceOver order broken after resize / column collapse; table & grid semantics | 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` |
| 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` |
## Cross-Suite Routes
- Full watchOS development context → See axiom-watchos
- Live accessibility validation on the simulator (set toggles, assert announcements) → `simulator-tester` agent + `xcui` — see axiom-tools (skills/xcui-ref.md)
- Asserting VoiceOver speech in an XCUITest (`XCUIDevice.shared.voiceOverService`, `OS27`) → axiom-testing (skills/ui-testing.md Pattern 7)
## Decision Tree
```dot
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="resizable window / desktop-class"];
what -> "skills/accessibility-diag.md" [label="Reduce Motion"];
what -> "skills/accessibility-diag.md" [label="Assistive Access"];
what -> "skills/accessibility-diag.md" [label="custom control techniques"];
what -> "skills/accessibility-diag.md" [label="continuous reading / text navigation"];
what -> "skills/accessibility-diag.md" [label="captions / subtitle styling"];
what -> "skills/accessibility-diag.md" [label="App Store prep / Nutrition Labels"];
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];
}
```
1. ANY VoiceOver, Dynamic Type (including tvOS Large Text), contrast, touch target, or WCAG issue → `skills/accessibility-diag.md`
2. Assistive Access (cognitive disabilities, iOS 17+) → `skills/accessibility-diag.md`
3. Accessibility Nutrition Labels, or an App Review note about accessibility → `skills/accessibility-diag.md`
4. Reading app: VoiceOver stops at paragraphs/pages, Speak Screen halts → `skills/accessibility-diag.md`
5. UX dead ends, dismiss traps, buried CTAs, missing states → `skills/ux-flow-audit.md`
6. watchOS-specific accessibility (rotor on Digital Crown, AssistiveTouch, Double Tap) → `skills/watchos-a11y.md`
7. Want automated accessibility scan? → `accessibility-auditor` agent or `axiom-audit-accessibility`
## Automated Scanning
**Accessibility audit** → `axiom-audit-accessibility`
- VoiceOver labels and hints
- Dynamic Type violations
- Color contrast failures
- WCAG compliance scanning
**UX flow audit** → `axiom-audit-ux-flow`
- Dead-end views, dismiss traps
- Buried CTAs, missing empty/loading/error states
- Deep link dead ends, accessibility dead ends
## Critical Patterns
#### Image Accessibility
- Use `Image(decorative: "photo")` for purely decorative images — automatically hidden from VoiceOver (equivalent to `accessibilityHidden(true)` but semantically clearer)
- Use `accessibilityInputLabels()` for buttons with complex or changing labels — improves Voice Control accuracy by providing alternative labels
- Respect `accessibilityDifferentiateWithoutColor` environment value — when active, provide non-color cues (icons, patterns, labels) alongside color indicators
## Anti-Rationalization
| Thought | Reality |
|---------|---------|
| "I'll add VoiceOver labels when I'm done building" | Accessibility is foundational, not polish. Retrofitting labels across a finished app takes far longer, and until they're done VoiceOver support can't be declared. |
| "My app doesn't need accessibility" | All apps need accessibility. It isn't an App Store rule, but people who rely on VoiceOver or Larger Text can't use the app without it, and its Accessibility Nutrition Labels show that before they download. |
| "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. |
## Example Invocations
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"
→ `axiom-audit-accessibility`
User: "How do I support Assistive Access?"
→ See `skills/accessibility-diag.md`
User: "How do I prepare my tvOS app for Large Text?"
→ See `skills/accessibility-diag.md`
User: "VoiceOver reads my screen in the wrong order after the window resizes"
→ See `skills/accessibility-diag.md`
User: "How do I support Button Shapes / the Large Content Viewer in my custom controls?"
→ See `skills/accessibility-diag.md`
User: "VoiceOver stops reading at the end of each page in my book app"
→ See `skills/accessibility-diag.md`
User: "How do I let users restyle subtitles or get generated captions in my video player?"
→ 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`
© CharlesWiltgen · MIT · CharlesWiltgen/Axiom