expo-horizon — Claude Code skill: taking Expo apps to Meta Quest
A skill that walks the agent through adding Meta Quest support to an Expo app, including the package swaps it should never do without asking.
npx skills add software-mansion-labs/skills --skill expo-horizon -a claude-codeWhat expo-horizon does
The skill hands the agent a fixed order for Quest work: install expo-horizon-core, set up its config plugin, add quest and mobile build scripts, then detect the device at runtime with isHorizonDevice and isHorizonBuild. It ships no copy of the docs. Whenever detail is needed, the agent is told to fetch the README of the matching expo-horizon package.
Location and notifications are gated behind a question. The agent reads package.json, spots expo-location or expo-notifications, and waits for your answer before replacing anything. Quest hardware has no GPS, geocoding or geofencing, so those calls have to be guarded with ExpoHorizon.isHorizonDevice. Push requires a horizonAppId and goes through Meta's own service; Expo push tokens and badge counts are out.
Config values arrive as one list with defaults in brackets, so you can accept or override in a single reply. supportedDevices is required to submit to the Meta Horizon Store. A wide panel means your Expo orientation needs to be "landscape". Any config change only lands after npx expo prebuild --clean, and skipping that step leaves the native project untouched.
What it helps with
- add Meta Quest support to an existing Expo app
- produce separate questDebug and questRelease builds
- configure the expo-horizon-core plugin for the devices you target
- swap expo-location while handling what Quest lacks
- route push notifications through Meta device tokens
Example prompts for the agent
- Add Meta Quest support to this Expo app and list the config plugin values I need to decide on
- Look through
package.jsonforexpo-locationandexpo-notificationsand propose moving to the expo-horizon packages - Set up push notifications on Quest and explain why
getExpoPushTokenAsyncdoes not apply here
How to install expo-horizon
1Skills CLI (Vercel)
npx skills add software-mansion-labs/skills --skill expo-horizon -a claude-code2Manually: put the files in place
~/.claude/skills/expo-horizon/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/expo-horizon/
1Skills CLI (Vercel)
npx skills add software-mansion-labs/skills --skill expo-horizon -a codex2Manually: put the files in place
.agents/skills/expo-horizon/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add software-mansion-labs/skills --skill expo-horizon -a cursor2Manually: put the files in place
.cursor/skills/expo-horizon/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install software-mansion-labs/skills expo-horizon2Manually: put the files in place
.github/skills/expo-horizon/SKILL.md1Skills CLI (Vercel)
npx skills add software-mansion-labs/skills --skill expo-horizon -a gemini-cli2Platform CLI
gemini skills install https://github.com/software-mansion-labs/skills --path skills/expo-horizonManually: put the files in place
.devin/skills/expo-horizon/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add software-mansion-labs/skills --skill expo-horizon -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about expo-horizon
How do I install expo-horizon in Claude Code?
Run npx skills add software-mansion-labs/skills --skill expo-horizon -a claude-code. The skill lands in ~/.claude/skills/expo-horizon/SKILL.md and the agent picks it up from there.
What does expo-horizon do?
It guides the agent through bringing Meta Quest and Horizon OS support into an Expo or React Native project: packages, config plugin, build scripts, runtime device checks.
Which expo-horizon packages might I end up swapping?
Depending on your answer, expo-location becomes expo-horizon-location and expo-notifications becomes expo-horizon-notifications. The skill detects both in package.json and asks first.