Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .claude/skills/expo-skill-eval/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ Read `references/runtime-matrix.md` to find the skill's default mode before sugg

Pass the choice to the snapshot scripts via the `EXPO_SKILL_EVAL_RUNNER` env var (`expo-go` default, or `dev-build`), and reflect it in each eval case's `runtime.mode` (`expo-go` or `dev-build`). See step 5.

**Pick the platforms — always ask, regardless of skill.** Offer iOS / Android / web (multi-select) with `AskUserQuestion`; default to iOS + Android, but always present web as an option — don't pre-filter by skill. **Web is a valid choice for most skills**: `@expo/ui`'s *universal* components (`Host`, `Row`, `Column`, `Button`, `List`, …) render on web, as do `use-dom`, NativeWind/Tailwind, API routes, and plain React Native. The only thing that won't show on web is a *platform-specific* native tree (`@expo/ui/swift-ui` or `@expo/ui/jetpack-compose`), which renders blank there — and that blank is itself a useful signal, so it's still the user's call. Web runs via `snapshot-web.sh` (`expo start --web` + Playwright/Chromium) **regardless of the runner** (`expo run` is native-only; there's no web dev build), and it's the least-exercised path. Write the chosen set into each eval case's `runtime.platforms` and have `run_snapshots.py` loop them.
**Pick the platforms — always ask, regardless of skill.** Offer iOS / Android / web (multi-select) with `AskUserQuestion`; default to iOS + Android, but always present web as an option — don't pre-filter by skill. **Web is a valid choice for most skills**: `@expo/ui`'s *universal* components (`Host`, `Row`, `Column`, `Button`, `List`, …) render on web, as do `use-dom`, Nativewind/Tailwind, API routes, and plain React Native. The only thing that won't show on web is a *platform-specific* native tree (`@expo/ui/swift-ui` or `@expo/ui/jetpack-compose`), which renders blank there — and that blank is itself a useful signal, so it's still the user's call. Web runs via `snapshot-web.sh` (`expo start --web` + Playwright/Chromium) **regardless of the runner** (`expo run` is native-only; there's no web dev build), and it's the least-exercised path. Write the chosen set into each eval case's `runtime.platforms` and have `run_snapshots.py` loop them.

**Confirm how `claude -p` subprocesses run — once, before starting.** Ask with `AskUserQuestion` whether they may run with `--dangerously-skip-permissions`, then apply the same answer to every subprocess this run (never re-prompt mid-run):

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ Modes:
| Skill | Mode | Platforms | Notes |
|-------|------|-----------|-------|
| building-native-ui | expo-go | ios, android | Core target for visual evals. Expo Router + RN primitives all work in Expo Go. Native tabs sections may need a dev build — verify per case. |
| expo-tailwind-setup | expo-go | ios, android, web | NativeWind v5 / react-native-css are JS-level; works in Expo Go. Good web candidate too. |
| expo-tailwind-setup | expo-go | ios, android, web | Nativewind v5 / react-native-css are JS-level; works in Expo Go. Good web candidate too. |
| native-data-fetching | expo-go | ios, android | Fetch/React Query/SWR are pure JS. Mock or use stable public endpoints so evals are deterministic. |
| use-dom | expo-go | ios, android, web | DOM components run in a webview on native (Expo Go, SDK 52+) and as-is on web. Allow extra settle time for the webview to paint. |
| expo-api-routes | static-only + HTTP | — | No screenshot: while Metro runs, `curl` the route and save the response as an output file for grading. |
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ npx skills@latest update building-native-ui
After installing, ask your agent Expo-specific questions like:

- "Build a native-feeling Expo Router screen with tabs, modals, and animations."
- "Set up Tailwind CSS v4 and NativeWind v5 in this Expo app."
- "Set up Tailwind CSS v4 and Nativewind v5 in this Expo app."
- "Create an EAS workflow that builds previews on pull requests."
- "Help me upgrade this app to the latest Expo SDK."
- "Check whether this EAS Update rollout is healthy."
Expand All @@ -98,7 +98,7 @@ Agents choose the right skill from the task context and each skill's description
| `building-native-ui` | Expo Router screens, navigation, styling, animations, native tabs, and app UI patterns. |
| `native-data-fetching` | API calls, React Query, SWR, caching, offline support, and Expo Router data loaders. |
| `expo-api-routes` | Expo Router API routes with EAS Hosting. |
| `expo-tailwind-setup` | Tailwind CSS v4, `react-native-css`, and NativeWind v5 setup. |
| `expo-tailwind-setup` | Tailwind CSS v4, `react-native-css`, and Nativewind v5 setup. |
| `use-dom` | Expo DOM components for gradually using web code in native apps. |
| `expo-dev-client` | Local and TestFlight development client builds. |

Expand Down
4 changes: 2 additions & 2 deletions plugins/expo/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ Official AI agent skills from the Expo team for building, deploying, upgrading,
- Explains native iOS controls, SF Symbols, animations, and visual effects
- Guides API route creation with EAS Hosting
- Covers data fetching patterns with React Query, offline support, and Expo Router loaders
- Helps set up Tailwind CSS v4 with NativeWind v5
- Helps set up Tailwind CSS v4 with Nativewind v5
- Explains DOM components for running web code in native apps
- Covers iOS App Clips and brownfield Expo integration into existing native apps
- Wires Expo projects into the Codex app Run button and action terminal
Expand Down Expand Up @@ -69,7 +69,7 @@ Official AI agent skills from the Expo team for building, deploying, upgrading,
- **expo-api-routes** — Create API routes in Expo Router with EAS Hosting
- **expo-brownfield** — Integrate Expo and React Native into existing native iOS or Android apps
- **expo-dev-client** — Build and distribute Expo development clients locally or via TestFlight
- **expo-tailwind-setup** — Set up Tailwind CSS v4 in Expo with NativeWind v5
- **expo-tailwind-setup** — Set up Tailwind CSS v4 in Expo with Nativewind v5
- **expo-ui** — Native UI with @expo/ui: universal cross-platform components first, with SwiftUI and Jetpack Compose for platform-specific needs
- **native-data-fetching** — Network requests, API calls, caching, and offline support
- **use-dom** — Run web code in a webview on native using DOM components
Expand Down
4 changes: 2 additions & 2 deletions plugins/expo/skills/expo-examples/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
name: expo-examples
description: Expo's official example projects — the expo/examples repo of ~70 `with-*` integrations (Stripe, Clerk, Supabase, OpenAI, maps, Reanimated, SQLite, Skia, NativeWind, and more). Use when integrating a third-party library or service into an existing Expo app and you want the canonical, version-matched pattern to adapt, or when scaffolding a new project from one with `npx create-expo --example`.
description: Expo's official example projects — the expo/examples repo of ~70 `with-*` integrations (Stripe, Clerk, Supabase, OpenAI, maps, Reanimated, SQLite, Skia, Nativewind, and more). Use when integrating a third-party library or service into an existing Expo app and you want the canonical, version-matched pattern to adapt, or when scaffolding a new project from one with `npx create-expo --example`.
allowed-tools: "Read,Bash(gh api:*),Bash(git clone:*),Bash(npx create-expo:*),Bash(npx degit:*),Bash(bun create:*)"
version: 1.0.0
license: MIT
Expand Down Expand Up @@ -87,7 +87,7 @@ When the user already has an app, **add only what the example introduces; never

## Related skills

- Tailwind / NativeWind styling → `expo-tailwind-setup`
- Tailwind / Nativewind styling → `expo-tailwind-setup`
- Native UI components → `building-native-ui`
- Authoring a native module → `expo-module`
- Upgrade the SDK before adopting a latest-SDK example → `upgrading-expo`
Expand Down
2 changes: 1 addition & 1 deletion plugins/expo/skills/expo-examples/references/catalog.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ Most are single-screen integrations; a few differ:
- `with-react-router` — React Router (web)

## Styling & UI
- `with-tailwindcss` — Tailwind / NativeWind (see also `expo-tailwind-setup` skill)
- `with-tailwindcss` — Tailwind / Nativewind (see also `expo-tailwind-setup` skill)
- `with-styled-components` — styled-components
- `with-shadcn` — shadcn-style components
- `with-moti` — Moti animations
Expand Down
Loading