Works with the AI Agents you already use

    Claude CodeClaude CodeCursorCursorCodex CLICodex CLIMuseMuseDotsDots+22 more

    Expo Production Pack

    2

    Eight agent skills that stop your AI agent from guessing about EAS builds, OTA updates, deep links, push, Live Activities and App Store review in Expo SDK 57 apps.

    $24

    Secure checkout via Stripe

    Money-back guarantee

    Converts to your local currency at checkout

    Security scanned
    Expo Production Pack

    Expo Production Pack

    Example session with this skill installed

    My Live Activity deep link works when I tap the Lock Screen banner, but tapping the Dynamic Island just opens the app on the home screen. I'm using expo-widgets on SDK 57 with a widgetURL modifier, and I start the activity with a push. How do I fix it?

    • Read your context and instructions
    • Compiled the expo production

    Summary

    The island ignores your link because of where widgetURL is applied, not because of your router. Move the URL to the activity's url attribute and send it in the push.

    Why it happens

    Compact leading, compact trailing and minimal presentations only honour a widgetURL applied to the DynamicIsland itself. The widgetURL modifier from @expo/ui is a view modifier (content.widgetURL(url)), so it lands inside a region view and the island skips it. SwiftUI Link only works in expanded regions. That is why the banner deep-links and the island does not.

    expo-widgets applies exactly one URL at the island level: the activity-level url attribute, read from context.attributes.url. The same attribute is applied to the banner.

    Fix

    Push-to-start payload (apns-push-type: liveactivity, topic <bundle id>.push-type.liveactivity):

    {
      "aps": {
        "timestamp": 1791590400,
        "event": "start",
        "attributes-type": "LiveActivityAttributes",
        "attributes": { "url": "courier://orders/A1" },
        "content-state": {
          "name": "DeliveryActivity",
          "props": "{\"orderId\":\"A1\",\"etaMinutes\":15}"
        },
        "alert": { "title": "Order A1", "body": "Your courier is on the way" }
      }
    }
    

    Starting locally instead? Pass the URL as the second argument: Delivery.start(props, 'courier://orders/A1').

    Checklist

    CheckWhy
    Remove the widgetURL modifier from the bannerTwo widgetURLs in one hierarchy is undefined behaviour
    Use your app's custom scheme URLexpo-router routes it like any other deep link
    Need a different target later? End and restart the activityurl is a static attribute, fixed for the activity's lifetime
    DeliveryActivity registered on the deviceThe app must have run createLiveActivity('DeliveryActivity', ...) once since install

    Next steps

    • Send the payload with the pack's send-liveactivity.mjs script against the sandbox APNs endpoint from a development build.
    • Tap the compact island, the minimal island (start a second activity from another app) and the banner; all three should open courier://orders/A1.

    Connects securely to your tools. The creator never sees your data.

    About this skill

    Agents write Expo screens well. They get production wrong: invented eas.json keys, secrets in EXPO_PUBLIC_ variables, updates that never reach a build because the channel was never set, an AASA file behind a redirect, assetlinks.json with the upload key instead of the Play signing key, push tokens fetched before the Android channel exists, Dynamic Island taps that ignore your deep link.

    This pack gives the agent the rules it needs for each of those, checked against Expo SDK 57 source and docs, Apple and Google documentation, and current store policy text.

    What's inside

    • expo-production: routes to the right guide, pre-launch checklist, SDK 57 and 58 changes that affect production.
    • expo-eas-builds: profiles, environment variables and secrets, signing, caching, monorepos, reading failed build logs.
    • expo-updates: channels and branches, runtimeVersion and fingerprint, staged rollouts, rollbacks, what may ship OTA.
    • expo-deep-links: Universal Links, App Links, AASA and assetlinks.json hosting, expo-router mapping, cold-start navigation.
    • expo-push-notifications: APNs and FCM V1 credentials, push API, receipts and every error code, background push, channels.
    • expo-widgets-live-activities: expo-widgets, Live Activities, push-to-start tokens, APNs payloads, Dynamic Island deep links.
    • expo-store-submission: EAS Submit, build numbers, TestFlight and Play tracks, privacy manifests, account deletion, common rejections.
    • nativewind-gotchas: NativeWind v4 and v5, Tailwind v4 config, the lightningcss pin, rtl:, dark mode.

    Scripts included

    Six zero-dependency Node scripts: an eas.json linter, a .well-known file checker, an Expo push sender with receipt polling, an APNs Live Activity sender, a privacy manifest generator and a NativeWind config checker.

    Things it knows that the docs get wrong

    • enablePushNotifications in expo-widgets writes ExpoWidgets_EnablePushNotifications, not the key the docs name.
    • NSSupportsLiveActivitiesFrequentUpdates set by hand is overwritten on prebuild; only the plugin's frequentUpdates option sets it.

    Versions

    Expo SDK 57, React Native 0.86, EAS CLI 24, NativeWind 4.2 and 5.0 RC. Notes where the SDK 58 beta changes behaviour. Reviewed after each stable Expo SDK release.

    Works with Claude Code, Codex, Gemini CLI, Cursor and any agent that reads SKILL.md.

    How to use

    Skills on Agensi run inside your AI agent. Copy the prompt, paste it into your agent, and it connects to Agensi and installs this skill for you. If a payment is needed, your agent shows it to you first.

    Reviews

    No reviews yet

    Be one of the first to try it. Every listed skill passes our trust checks below.

    Security scanned

    Passed our 8-point scan before listing

    Fresh listing

    Recently published to Agensi

    Money-back guarantee

    Doesn't do what its page promises? You get your money back.

    Trust & safety

    Security scanned

    Verified clean 7 days ago

    • Passed all security checks, Safe to install

    Requires

    Exp
    Cdn Apple
    expo
    Node.js
    create-target
    expo-updates
    @expo/fingerprint
    expo-doctor
    testflight
    sentry-expo-upload-sourcemaps
    macOS
    eas-cli
    @expo/repack-app
    uri-scheme

    Listed7 days ago

    What's inside

    Frequently Asked Questions