Task recipes
Practical routing recipes for common Expo work.
Ordered, skill-named procedures only—no large code samples. Stop conditions and authorization boundaries are part of each recipe.
Standard app audit
$expo-development-foundation→ classify as existing consumer app andaudit_scope: consumer-app.$expo-project-orientation→ emit the evidence-backed stack card.$expo-app-auditat standard depth → select only relevant domain skills.- Add
$expo-design-review,$expo-native-ui, and$expo-a11ywhen UI is in scope. $expo-verify→ safe local checks only; report exact evidence, skipped checks, remediation order, and residual risk.
Stop: the audit is read-only. Findings and recommendations do not authorize fixes, native builds, EAS, store, OTA, telemetry, or production actions.
Quick app health check
- Orient the existing app.
- Run
$expo-app-auditat quick depth. - Check critical security/config/runtime stops, SDK/dependency health, verification availability, and highest-severity architecture risks.
- Close with safe local
$expo-verifyevidence.
Stop: do not silently expand a quick check into a standard/deep audit or implementation.
Design and accessibility review
- Orient and identify the UI surfaces and platforms.
$expo-design-review→ hierarchy, tokens, responsive layout, complete states, interaction feedback, motion, and accessibility.- Compose
$expo-native-ui,$expo-ui,$expo-router, and$expo-a11yonly where their boundaries match. - Separate source inspection from screenshots/device evidence and report unavailable visual or assistive-technology checks as residual risk.
Stop: do not claim visual verification without screenshots/runtime evidence and do not edit without authorization.
Audit, then separately authorized remediation
- Complete and hand off the read-only audit report.
- Stop and obtain a second explicit request authorizing named fixes.
- Reconfirm scope and prioritize critical/high findings in dependency order.
- Implement only the authorized findings with their owning domain skills.
- Close with
$expo-verify; keep unaddressed findings and residual risk in the handoff.
Stop: an audit request is never the authorization for step 3.
Bootstrap a new app
$expo-development-foundation→ classify as new app$expo-bootstrap→ ordered chain$expo-project-structurethen$expo-router$expo-native-ui/$expo-uiwhen screens need native-feeling UI- Data, DOM, modules, upgrade, EAS only when boundaries match
Stop: do not treat showcase/ as the product app; no EAS without explicit
authorization.
Onboard an existing app
$expo-development-foundation→ classify as existing app$expo-project-orientation(mandatory first)- Emit stack card + ordered shortlist
- Stop unless implementation is authorized
- Proceed only with shortlisted domain skills; never
$expo-project-structurerestructure of a mature layout
Stop: monorepo style-only flatten; inventing credentials; foundation audit by default.
Add a route
Use $expo-router for route groups, typed dynamic parameters, tabs, modals,
form sheets, headers, and not-found behavior. Keep route files focused and
move shared code into existing consumer folders (do not invent a new tree layout
on mature apps).
Add data
Use $expo-data-fetching for a typed boundary with loading, error, cancellation,
cache, and offline behavior. Keep secrets out of the client bundle. Full session
/ OAuth lifecycle → $expo-auth (not data-fetching alone).
Add an authenticated screen
- Existing app →
$expo-project-orientationfirst $expo-authfor session, secure storage, Auth Session / PKCE, logout$expo-linkingwhen deep-link / redirect schemes are involved$expo-data-fetchingfor authenticated API clients and cache invalidation$expo-examplesfor vendor-specific SDK patterns (Clerk, etc.)
Stop: tokens in AsyncStorage; secrets in EXPO_PUBLIC_*; inventing OAuth
client secrets.
Add camera / media (permissioned capability)
- Orientation if existing app
$expo-permissionsfor timing, privacy strings, denial UX, Expo Go limits- Package APIs only after permission policy is clear
$expo-dev-clientwhen Expo Go is insufficient
Stop: permission prompt on first frame; store submit is not part of this recipe.
Publish OTA or submit to stores
OTA updates and store submissions are outside this skill catalog. Do not run paid EAS or store actions by inference. Confirm explicit authorization, credentials, and JS-only OTA safety (decision tree 5) first, then follow the Expo/EAS vendor docs for the authorized action.
Works in Expo Go, fails in build
$expo-project-orientation+$expo-debugging- Re-run Expo Go vs development-client tree
$expo-dev-client/ config plugins / native modules as indicated- Local static checks before any cloud build
Add a config-plugin dependency
- Orientation if existing app
$expo-config-envfor app config / plugins surface$expo-permissionswhen privacy strings are required- Mark development client required;
$expo-dev-clientfor runtime - New binary for native-breaking changes—not OTA alone
SDK upgrade dry-run
$expo-project-orientationon existing apps$expo-upgradefor version matrix and breaking changes- Plan-only until implementation is authorized
- Consumer typecheck / doctor; no store submit by inference
Use web code incrementally
Use $expo-dom for an isolated DOM Component and $expo-web-to-native for an
end-to-end migration. Keep props serializable and actions explicit.
Native capability or release
Use $expo-module and $expo-dev-client for custom native code. Use
$eas-hosting only for explicitly authorized hosting deploys. Store and OTA
releases are outside this catalog.