expo-horizon — скилл для Claude Code: Expo на Meta Quest
Скилл для миграции Expo-приложения на Meta Quest: подсказывает шаги установки expo-horizon и ловит ловушки, которые агент обычно пропускает.
npx skills add software-mansion-labs/skills --skill expo-horizon -a claude-codeЧто делает expo-horizon
Скилл задаёт агенту порядок работы с Meta Quest: сначала ставится expo-horizon-core и настраивается конфиг-плагин, потом добавляются скрипты сборки под quest и mobile, затем определяется устройство в рантайме через isHorizonDevice и isHorizonBuild. Сам скилл не хранит документацию — он отправляет агента за актуальными README пакетов expo-horizon.
Пакеты expo-horizon-location и expo-horizon-notifications агент не ставит самовольно. Он читает package.json, находит expo-location или expo-notifications и спрашивает подтверждение перед заменой. На Quest нет GPS, геокодинга и геозон, поэтому вызовы придётся оборачивать в проверку ExpoHorizon.isHorizonDevice. Для пушей нужен horizonAppId и Meta Push Service вместо Expo Push Service; badge counts не поддерживаются.
Значения для конфиг-плагина агент спрашивает у вас одним списком, с умолчаниями в скобках: supportedDevices, размер панели, отключение VR-хедтрекинга. supportedDevices обязателен для публикации в Meta Horizon Store. Если панель широкая, ориентация в Expo должна быть "landscape". После правок конфига нужен npx expo prebuild --clean — без него изменения не попадут в нативную часть.
Какие задачи решает
- перенести существующее Expo-приложение на Meta Quest
- собрать отдельные варианты questDebug и questRelease
- настроить конфиг-плагин expo-horizon-core под свои устройства
- заменить expo-location с учётом того, чего на Quest нет
- подключить пуши на Quest через устройство-токены Meta
Примеры запросов агенту
- Добавь поддержку Meta Quest в это Expo-приложение и покажи, какие значения конфиг-плагина понадобятся
- Проверь
package.jsonнаexpo-locationиexpo-notificationsи предложи миграцию на пакеты expo-horizon - Настрой пуши на Quest и объясни, почему
getExpoPushTokenAsyncздесь не подходит
Как установить expo-horizon
1Через Skills CLI (Vercel)
npx skills add software-mansion-labs/skills --skill expo-horizon -a claude-code2Вручную: положить файлы
~/.claude/skills/expo-horizon/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/expo-horizon/
1Через Skills CLI (Vercel)
npx skills add software-mansion-labs/skills --skill expo-horizon -a codex2Вручную: положить файлы
.agents/skills/expo-horizon/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add software-mansion-labs/skills --skill expo-horizon -a cursor2Вручную: положить файлы
.cursor/skills/expo-horizon/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install software-mansion-labs/skills expo-horizon2Вручную: положить файлы
.github/skills/expo-horizon/SKILL.md1Через Skills CLI (Vercel)
npx skills add software-mansion-labs/skills --skill expo-horizon -a gemini-cli2Командой платформы
gemini skills install https://github.com/software-mansion-labs/skills --path skills/expo-horizonВручную: положить файлы
.devin/skills/expo-horizon/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add software-mansion-labs/skills --skill expo-horizon -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов
Вопросы о expo-horizon
Как установить expo-horizon в Claude Code?
Выполните npx skills add software-mansion-labs/skills --skill expo-horizon -a claude-code. Скилл окажется в ~/.claude/skills/expo-horizon/SKILL.md, и дальше агент подхватит его сам.
Что делает expo-horizon?
Проводит агента по шагам добавления Meta Quest и Horizon OS в приложение на Expo или React Native: установка пакетов, конфиг-плагин, скрипты сборки, определение устройства в рантайме.
Нужен ли horizonAppId для пушей на Quest?
Да, expo-horizon-notifications берёт его из конфига expo-horizon-core и без него не выдаст устройство-токены. Push идёт через сервис Meta, поэтому getExpoPushTokenAsync не используется.