ai-infrastructure-hugg…
Hugging Face Inference SDK patterns for TypeScript/Node.js — InferenceClient setup, chat completion, text generation, streaming,…
Expo managed workflow
Claude Code
$ npx -y skills add agents-inc/skills --skill mobile-framework-expo --agent claude-code
Codex
$ npx skills add agents-inc/skills --skill mobile-framework-expo -a codex -y
Cursor
$ npx skills add agents-inc/skills --skill mobile-framework-expo -a cursor -y
Gemini CLI
$ npx skills add agents-inc/skills --skill mobile-framework-expo -a gemini-cli -y
GitHub Copilot
$ npx skills add agents-inc/skills --skill mobile-framework-expo -a github-copilot -y
OpenCode
$ npx skills add agents-inc/skills --skill mobile-framework-expo -a opencode -y
Windsurf
$ npx skills add agents-inc/skills --skill mobile-framework-expo -a windsurf -y
name: mobile-framework-expo description: Expo managed workflow
> **Quick Guide:** Build production-ready React Native apps with Expo. Use managed workflow with Continuous Native Generation for most projects, Expo Router for file-based navigation, and EAS for builds/updates. Development builds replace Expo Go for production testing.
---
<critical_requirements>
**(You MUST use development builds for production testing - Expo Go is for prototyping only)**
**(You MUST update runtimeVersion when making native dependency changes to prevent OTA update crashes)**
**(You MUST use config plugins for native customization - NEVER manually edit android/ios directories in managed workflow)**
**(You MUST use `EXPO_PUBLIC_` prefix for client-side environment variables - NEVER store secrets in these variables)**
</critical_requirements>
---
**Auto-detection:** Expo, expo-router, EAS Build, EAS Update, expo-dev-client, app.config.js, app.json, expo prebuild, npx expo, eas.json, expo-constants, expo-notifications, Continuous Native Generation, CNG
**When to use:**
**Key patterns covered:**
**When NOT to use:**
---
<philosophy>
Expo transforms React Native development from "write once, debug everywhere" to "write once, deploy confidently." The key insight is that **most apps don't need direct native access** - they need well-maintained native modules with consistent APIs.
**Core principles:**
1. **Managed by default** - Let Expo handle native complexity; prebuild only when necessary 2. **Continuous Native Generation** - Treat android/ios as build artifacts, not source code 3. **Development builds for truth** - Expo Go is for learning; development builds show production reality 4. **OTA for velocity** - Ship JavaScript updates without app store delays 5. **Config plugins over ejection** - Customize native code declaratively when needed
**Mental model:**
Expo is NOT a limitation on React Native - it's a professional-grade abstraction. You can always drop down to native code via Expo Modules API or prebuild, but most apps never need to.
</philosophy>
---
<patterns>
Use `app.config.ts` for environment-specific builds. Use named constants for SDK versions and build numbers.
// app.config.ts - Environment-aware config
const IS_PRODUCTION = process.env.APP_ENV === "production";
const BUILD_NUMBER = 1;
export default ({ config }: ConfigContext): ExpoConfig => ({
...config,
name: IS_PRODUCTION ? "MyApp" : "MyApp (Dev)",
ios: {
bundleIdentifier: IS_PRODUCTION ? "com.app" : "com.app.dev",
buildNumber: String(BUILD_NUMBER),
},
android: {
package: IS_PRODUCTION ? "com.app" : "com.app.dev",
versionCode: BUILD_NUMBER,
},
});> Full examples: [examples/core.md](examples/core.md) - App Configuration section
---
Modify native code declaratively -- changes survive `expo prebuild --clean`. Use config plugins for permissions, SDK versions, and native settings.
// app.config.ts plugins array
plugins: [
[
"expo-camera",
{ cameraPermission: "Allow $(PRODUCT_NAME) to access your camera." },
],
[
"expo-build-properties",
{ android: { minSdkVersion: 24 }, ios: { deploymentTarget: "15.1" } },
],
];> Full examples: [examples/core.md](examples/core.md) - Config Plugins section
---
Use `EXPO_PUBLIC_` prefix for client-side variables. Metro requires direct property access -- destructuring and bracket notation don't work.
// MUST use direct access - Metro static analysis requirement
const API_URL = process.env.EXPO_PUBLIC_API_URL; // Works
// const { EXPO_PUBLIC_API_URL } = process.env; // BROKEN - undefined at runtime> Full examples: [examples/core.md](examples/core.md) - Environment Variables section
---
Use `expo-dev-client` for production-accurate testing. Expo Go is for prototyping only -- it lacks your native dependencies, push notifications, and accurate splash screens.
# Cloud build eas build --profile development --platform ios # Local build npx expo run:ios
> Full configuration: [examples/eas.md](examples/eas.md) - Development Builds section
---
Block splash screen while loading fonts, use `expo-image` for remote images with blur hash placeholders and disk caching.
SplashScreen.preventAutoHideAsync(); // Load fonts, then call SplashScreen.hideAsync() when ready
> Full examples: [examples/core.md](examples/core.md) - Font Loading and Image Handling sections
</patterns>
---
<red_flags>
The official skills marketplace for Agents Inc. 230+ skills covering everything from React and Prisma to Redis, ElevenLabs, and infrastructure tooling. Pick the skills that match your stack and install them via Claude Code. Need more control?
Hugging Face Inference SDK patterns for TypeScript/Node.js — InferenceClient setup, chat completion, text generation, streaming,…
LiteLLM proxy server setup, TypeScript client patterns via OpenAI SDK, model routing, fallbacks, load balancing, spend tracking,…
Serverless GPU compute platform for AI model deployment — web endpoints, GPU functions, model serving, and TypeScript client…
Local LLM inference with the Ollama JavaScript client -- chat, streaming, tool calling, vision, embeddings, structured output,…
Replicate SDK patterns for TypeScript/Node.js -- client setup, predictions, streaming, webhooks, file handling, model versioning,…
Together AI SDK patterns for TypeScript — client setup, chat completions, streaming, structured output, function calling,…
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Ask which skill or flow fits your situation. A router over the skills in this repo.