Agent skill

Clerk Expo

by geekskai in geekskai/blog

Add Clerk authentication to Expo and React Native apps using @clerk/expo.

MITAuto-check: notesMobile

Install Clerk Expo

skills CLI
$ npx skills add geekskai/blog --skill clerk-expo -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install geekskai/blog clerk-expo --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/geekskai/blog.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/clerk-expo .claude/skills/clerk-expo && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
clerk-expo
GitHub stars
103
Token cost
~2.8k tokens
SKILL.md length
1,304 words
Files
8 (incl. references)
Skills in repo
20
Repo updated
First seen
Licence
MIT

At a glance

Add Clerk authentication to Expo and React Native apps using @clerk/expo.

  • Works in 3 steps: Default to prebuilt native components… → Fall back to custom flows when any of… → If the developer has an existing auth…
  • Prebuilt native components (AuthView
  • SKILL.md covers Activation Rules, Intent Map, Default Path Decision and Quick Workflow, plus 4 more sections
  • Calls npx, expo and pnpm; reaches dashboard.clerk.com; needs EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY

What it does

Clerk Expo is an agent skill from geekskai/blog. Add Clerk authentication to Expo and React Native apps using @clerk/expo. Use for Expo setup, prebuilt native components (AuthView, UserButton), custom sign-in/sign-up flows (email, password, SMS/phone OTP, MFA), OAuth/SSO, native Google/Apple sign-in, Expo Router protected routes, biometrics, and push notifications. Do not use for native Swift/iOS, native Android/Kotlin, or web-only framework projects.

Its SKILL.md is about 2.8k tokens, which your agent loads only when the skill is triggered. The skill folder holds 9 other files, including reference files (for example `evals/evals.json`, `references/custom-flows.md` and `references/prebuilt-components.md`). Compatibility notes: Requires @clerk/expo v3.4+ (written against v3.6.x, July 2026). Expo SDK 53-56, React Native 0.75+.

It sits in Mobile, covering Cross-platform mobile apps and Authentication. It works with Expo, React Native, Android and Kotlin. The repository describes itself as: 🚀 2026 Most Popular FREE Blog Template! Next.js 14, Zero Code - Just Write & Deploy | 2026最火免费博客模板!支持Markdown,一键部署,极致性能!⚡️ ✨ Write in Markdown, get your professional blog in…. The licence is MIT.

When your agent uses it

  • Prebuilt native components (AuthView
  • Custom sign-in/sign-up flows (email
  • Native Google/Apple sign-in
  • Expo Router protected routes

Example prompts

  • “/clerk-expo”

Requirements

  • Node.js
  • A credential in EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY
  • Compatibility (from SKILL.md): Requires @clerk/expo v3.4+ (written against v3.6.x, July 2026). Expo SDK 53-56, React Native 0.75+.
  • Pre-approved tools (allowed-tools): WebFetch

Workflow steps

3 steps, taken from the first numbered list in SKILL.md.

  1. Default to prebuilt native components (AuthView + UserButton from @clerk/expo/native). Fastest to working auth; UI is maintained by Clerk…
  2. Fall back to custom flows when any of these hold — say why when you switch
  3. If the developer has an existing auth UI, extend what's there — don't rip out custom flows to insert AuthView (or vice versa) without…

What it can do on your machine

Read from SKILL.md and the folder at commit e24bf43. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves these tools, so the agent can use them without asking each time:

    • WebFetch

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • npx
    • expo
    • pnpm

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • dashboard.clerk.com

    Also links to:

    • clerk.com
    • github.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

  • Compatibility

    Requires @clerk/expo v3.4+ (written against v3.6.x, July 2026). Expo SDK 53-56, React Native 0.75+.

    From compatibility in the SKILL.md frontmatter.

Context cost

Clerk Expo loads about 2.8k tokens when it runs, and up to ~11k if it reads all its reference files. Until then it costs about 104 tokens; SKILL.md has 1,304 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~104
When it runs · the whole SKILL.md, loaded when a task matches
~2.8k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~11k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NoteMentions a .env fileSKILL.md:72
    env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY` (`.env` file). Never `NEXT_PUBLIC_`, never hardcoded. If no key exists, ask the d

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from geekskai/blog at commit e24bf43, republished under its MIT licence (© geekskai). 1,304 words, ~2,812 tokens.

Download SKILL.mdSave it as .claude/skills/clerk-expo/SKILL.md (or your agent's skills folder). This skill also uses 7 other files; get the full folder from GitHub.
name
clerk-expo
description
Add Clerk authentication to Expo and React Native apps using @clerk/expo. Use for Expo setup, prebuilt native components (AuthView, UserButton), custom sign-in/sign-up flows (email, password, SMS/phone OTP, MFA), OAuth/SSO, native Google/Apple sign-in, Expo Router protected routes, biometrics, and push notifications. Do not use for native Swift/iOS, native Android/Kotlin, or web-only framework projects.
allowed-tools
WebFetch
compatibility
Requires @clerk/expo v3.4+ (written against v3.6.x, July 2026). Expo SDK 53-56, React Native 0.75+.
license
MIT
metadata.author
clerk
metadata.version
2.0.0

Clerk Expo (React Native)

Implement Clerk in Expo / React Native projects. This skill inlines verified patterns for the stable surface (provider, token cache, flows) and requires source inspection of the installed @clerk/expo package for anything volatile (component props, hook signatures).

Activation Rules

Activate when either is true:

  • The user asks for auth in an Expo or React Native app, or mentions @clerk/expo, ClerkProvider, Expo Router auth, or Clerk hooks in a native app.
  • The project is Expo/React Native (app.json / app.config.js, expo in package.json, metro.config.js, @clerk/expo dependency).

Route away when:

  • Native iOS/Swift project (.xcodeproj, Package.swift) → clerk-swift
  • Native Android/Kotlin project (build.gradle without React Native) → clerk-android
  • Web-only framework (Next.js, Remix, plain React, etc.) → the matching framework skill

Intent Map

Match what the user asked for, then load the reference(s) listed. Load only what the task needs.

User intent (examples)PathReference
"Add auth to my app" / "add sign-in with Clerk"Prebuilt native components (default)references/setup.md + references/prebuilt-components.md
"Add auth" but Expo Go / web / custom UI requiredCustom flowsreferences/setup.md + references/custom-flows.md
"Add phone / SMS auth", "email OTP", "passwordless"Custom flow, phoneCode / emailCodereferences/custom-flows.md
"Sign in with Google/Apple/GitHub", "social login", "SSO"Browser SSO or native buttonsreferences/sso-and-native-auth.md
"MFA / 2FA / TOTP", "forgot password", "email link"Custom flow additionsreferences/custom-flows.md
"Protect routes/screens", "redirect if signed out"Expo Router guardsreferences/protected-routes.md
"Show user profile", "org switching", "push notifications", "sign out", "call my backend"App recipesreferences/recipes.md
"Biometric login", "Face ID", "passkeys"Device featuresreferences/recipes.md

Default Path Decision

When the user says "add auth" without specifying UI:

  1. Default to prebuilt native components (AuthView + UserButton from @clerk/expo/native). Fastest to working auth; UI is maintained by Clerk. Tell the developer they are in beta and require a development build.
  2. Fall back to custom flows when any of these hold — say why when you switch:
    • The project must run in Expo Go (no dev build).
    • The app targets web (native components don't render on web).
    • The developer wants their own UI or a specific brand experience beyond theming.
  3. If the developer has an existing auth UI, extend what's there — don't rip out custom flows to insert AuthView (or vice versa) without being asked.

Do not blend prebuilt components and custom flows for the same auth step (e.g. AuthView plus a custom password form). Blending is allowed only when the developer explicitly asks.

Quick Workflow

  1. Confirm project type (Expo/RN) and pick the path per the Intent Map / Default Path rules.
  2. Follow references/setup.md: install, env key, provider, token cache, config plugin, build type.
  3. Verify dashboard prerequisites (Gate 2 and Gate 3 below).
  4. Implement from the selected reference only.
  5. Verify by building, not just by writing:
    • Run the project's typecheck (npx tsc --noEmit or equivalent).
    • Build and launch: npx expo run:ios / run:android for native features, npx expo start for Expo Go flows. If the build fails, fix and rebuild iteratively — build errors against the installed SDK are the ground truth when this skill and the SDK disagree. After ~5 failed fix attempts, stop and ask the developer how to proceed instead of thrashing.
    • Walk the developer through one real sign-in, then confirm the session survives an app restart (token cache working).

Execution Gates (Do Not Skip)

  1. Publishable key — Read from process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY (.env file). Never NEXT_PUBLIC_, never hardcoded. If no key exists, ask the developer for one (or run npx clerk@latest init --framework expo, which installs the SDK and writes the env file) and wait before editing files.
  2. Native API dashboard toggle — Clerk's Native API must be enabled for the instance: Clerk Dashboard → Native applications (https://dashboard.clerk.com/~/native-applications). Tell the developer to verify this during setup; it is required for any native integration.
  3. Factor availability — Before implementing a specific strategy (SMS, email code, social provider), confirm it's enabled for the instance. Derive the Frontend API URL from the publishable key (base64-decode the middle segment) and fetch <frontendApiUrl>/v1/environment?_is_native=true, or ask the developer to check the dashboard (User & authentication). SMS in particular is instance-configuration-dependent — code written for a disabled factor fails at runtime, not build time.
  4. Current custom-flows API only — useSignIn() / useSignUp() from @clerk/expo (v3.4+) return { signIn, errors, fetchStatus } and use method-based flows: signIn.password(), signIn.phoneCode.sendCode(), signIn.finalize(). Never generate the legacy pattern: destructuring isLoaded/setActive from useSignIn()/useSignUp() (the current hooks don't return them), or signIn.create() chained with prepareFirstFactor()/attemptFirstFactor() + setActive({ session }). That pattern lives at @clerk/expo/legacy and is only for maintaining existing legacy code, never for new work. Scope notes: isLoaded from useAuth()/useUser() is current API and required in guards; signIn.create() itself still exists for advanced cases — prefer the factor-specific methods.
  5. useSSO(), never useOAuth() — useOAuth is deprecated. Note the asymmetry: startSSOFlow() still returns { createdSessionId, setActive } and requires setActive({ session: createdSessionId }) — SSO does not use finalize().
  6. Token cache — tokenCache from @clerk/expo/token-cache on ClerkProvider. Never use expo-secure-store directly for session tokens, never AsyncStorage.
  7. resourceCache, never secureStore — if offline resource caching comes up, @clerk/expo/secure-store is deprecated; use resourceCache from @clerk/expo/resource-cache.
  8. Build-type gating — Native components (@clerk/expo/native) and native hooks (useSignInWithGoogle, useSignInWithApple, useLocalCredentials) require a development build (npx expo run:ios / run:android), not Expo Go, and don't exist on web. For web targets use @clerk/expo/web components or custom flows. State the build requirement before implementing a native-only feature.
  9. Combined sign-in-or-up default — one combined flow unless the developer asks for separate sign-in and sign-up screens.
  10. Bot protection — custom sign-up screens must render <View nativeID="clerk-captcha" />; Clerk's bot protection is on by default and needs this mount point.
  11. Source verification for volatile surfaces — before using native component props or native hook options, confirm against the installed package: node_modules/@clerk/expo/dist/native/*.d.ts and package.json exports. The installed version wins over this skill if they disagree.
  12. Freshness gate — this skill was verified against @clerk/expo 3.6.x. Check the installed version (node_modules/@clerk/expo/package.json). If it is a newer minor or major, treat this skill's code snippets as suspect: re-verify against the docs URL cited next to each snippet (every reference section carries one) or the installed .d.ts before using them. If it is older than 3.4, the method-based custom-flows API may not exist — offer an upgrade instead of writing legacy code.
Show full SKILL.md (304 more words)Show less

Version Notes (v3.5–v3.6, June 2026)

  • Minimum React Native raised to 0.75 in v3.5.0 (iOS SDK now links via SPM podspec). Peer range: expo >=53 <57.
  • Native components matured: iOS moved to Expo Modules; native↔JS session sync is automatic and bidirectional — never call setActive() after native-component auth.
  • The config plugin accepts a theme JSON file for native component styling (see references/prebuilt-components.md).
  • Native Google sign-in will move to a separate @clerk/expo-google-signin package in the next major (the @clerk/expo/google import keeps working in v3; a dev warning announces the migration). Don't preinstall the new package on v3.

Common Pitfalls

LevelIssuePrevention
CRITICALGenerating legacy custom-flow code (signIn.create + prepareFirstFactor + setActive)Use the current method-based API (Gate 4)
CRITICALUsing useOAuth()Use useSSO() (Gate 5)
CRITICALImplementing SMS/social auth without checking the factor is enabledCheck environment/dashboard first (Gate 3)
CRITICALNative components targeted at Expo Go or webRequire a dev build; offer custom flows otherwise (Gate 8)
CRITICALSign-up screen missing <View nativeID="clerk-captcha" />Always include it (Gate 10)
HIGHNEXT_PUBLIC_ env prefix, or env var read inside node_modulesEXPO_PUBLIC_CLERK_PUBLISHABLE_KEY, passed explicitly to ClerkProvider
HIGHSession lost on restarttokenCache from @clerk/expo/token-cache on the provider
HIGHCalling setActive() after AuthView / UserButton authNative components sync sessions automatically
HIGHPairing AuthView with useSignInWithGoogle/useSignInWithAppleAuthView renders enabled social providers itself
HIGHCalling WebBrowser.maybeCompleteAuthSession() manuallyClerkProvider handles it
HIGHSplitting sign-in / sign-up without being askedCombined flow by default (Gate 9)
MEDIUMMissing isLoaded check before isSignedIn in guardsAlways gate on isLoaded first
MEDIUMUsing yalc/pnpm link for local @clerk/expo developmentUse Verdaccio or pkg.pr.new

See Also

© geekskai, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 7 other files (references) in .agents/skills/clerk-expo of geekskai/blog.

  • SKILL.md
  • evals/evals.json
  • references/custom-flows.md
  • references/prebuilt-components.md
  • references/protected-routes.md
  • references/recipes.md
  • references/setup.md
  • references/sso-and-native-auth.md

Open the folder on GitHubat commit e24bf43

Compare with similar skills

Clerk Expo next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Clerk Expo compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Clerk Expo this skillgeekskai/blog103—~2.8kAutomated safety check: NotesMIT
Expo Brownfield Integrationmweinbach/agent-coworker1562 repos~900Automated safety check: NotesCustom licence
Code Review React Nativetalsec/Free-RASP-ReactNative176—~3.7kAutomated safety check: PassMIT
Expo Brownfieldexpo/skills2.7k—~1.4kAutomated safety check: PassMIT
Expo Tailwind SetupCherryHQ/cherry-studio-app4k8 repos~3kAutomated safety check: PassMIT
Screenmapaleqsio/screenmap244—~7.2kAutomated safety check: PassMIT

Similar skills

  • Expo Brownfield Integration

    mweinbach/agent-coworker

    Helps add Expo and React Native to an existing native iOS or Android app, and choose between a prebuilt AAR or XCFramework and a fully integrated build.

    156 GitHub starsUsed in 2 repos~900 tokens
    MobileAuto-check: notes
  • Code Review React Native

    talsec/Free-RASP-ReactNative

    Performs strict code reviews on React Native plugin projects covering TypeScript, the Kotlin (Android) and Swift (iOS) native bridges, and the Expo config plugin.

    176 GitHub stars~3.7k tokensUpdated 5 days ago
    MobileAuto-check passed
  • Expo Brownfield

    expo/skills

    Official

    Integrate Expo and React Native into an existing native iOS or Android app.

    2.7k GitHub stars~1.4k tokensUpdated 3 days ago
    MobileAuto-check passed
  • Expo Tailwind Setup

    CherryHQ/cherry-studio-app

    Set up Tailwind CSS v4 in Expo with react-native-css and NativeWind v5 for universal styling

    4k GitHub starsUsed in 8 repos~3k tokens
    MobileAuto-check passed
  • Screenmap

    aleqsio/screenmap

    Generate a visual navigation map of an Expo / React Native or NativeScript app.

    244 GitHub stars~7.2k tokensUpdated 6 days ago
    MobileAuto-check passed
  • Simulator Audio E2E

    hyochan/react-native-nitro-sound

    Build and run repeatable react-native-nitro-sound recorder/player regression tests on an iOS Simulator or Android emulator, with explicit virtual-device selection, microphone permission, Maestro…

    961 GitHub stars~1.1k tokensUpdated 11 days ago
    MobileAuto-check passed

More from geekskai/blog

All 20 skills in this repo
  • React SPA auth patterns with @clerk/react for Vite/CRA - ClerkProvider setup, useAuth/useUser/useClerk hooks, React Router protected routes, custom sign-in flows.

    103 GitHub starsUsed in 1 repo~1k tokens
    Auto-check: notes
  • React Router v7/v8 patterns with Clerk — rootAuthLoader, getAuth in loaders, clerkMiddleware, protected routes, SSR user data, org switching.

    103 GitHub starsUsed in 1 repo~1.8k tokens
    Auto-check passed
  • TanStack React Start auth patterns with @clerk/tanstack-react-start - createServerFn, beforeLoad guards, loaders, Vinxi server.

    103 GitHub starsUsed in 1 repo~875 tokens
    Auto-check: notes
  • Clerk Android

    geekskai/blog

    Implement Clerk authentication for native Android apps using Kotlin and Jetpack Compose with clerk-android source-guided patterns.

    103 GitHub stars~2.1k tokensUpdated yesterday
    Auto-check passed
  • Astro patterns with Clerk — middleware, SSR pages, island components, API routes, static vs SSR rendering.

    103 GitHub stars~822 tokensUpdated yesterday
    Auto-check: notes
  • Clerk Billing

    geekskai/blog

    Clerk Billing for subscription management - render Clerk's PricingTable and in-app checkout drawer, configure subscription plans, seat-limit plans for B2B, feature entitlements with has(), and…

    103 GitHub stars~5.1k tokensUpdated yesterday
    Auto-check passed

Categories

Questions about Clerk Expo

What does Clerk Expo do?

Add Clerk authentication to Expo and React Native apps using @clerk/expo. Clerk Expo is an agent skill from geekskai/blog. Add Clerk authentication to Expo and React Native apps using @clerk/expo.

When should I use Clerk Expo?

Clerk Expo fits situations like: prebuilt native components (AuthView; custom sign-in/sign-up flows (email; native Google/Apple sign-in; expo Router protected routes.

How do I install Clerk Expo in Claude Code?

Run `npx skills add geekskai/blog --skill clerk-expo -a claude-code`. Or copy the skill folder (.agents/skills/clerk-expo in geekskai/blog) into .claude/skills/clerk-expo in your project. Claude Code loads it when a task matches its description.

How do I install Clerk Expo in Codex?

Run `npx skills add geekskai/blog --skill clerk-expo -a codex`. Or copy the skill folder (.agents/skills/clerk-expo in geekskai/blog) into .agents/skills/clerk-expo in your project. Codex loads it when a task matches its description.

Can I use Clerk Expo in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add geekskai/blog --skill clerk-expo -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/clerk-expo, .gemini/skills/clerk-expo, .github/skills/clerk-expo and .opencode/skills/clerk-expo in your project.

What does Clerk Expo need to run?

Going by SKILL.md and its folder, Clerk Expo needs the command-line tools its instructions call (npx, expo and pnpm) and credentials named EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY. Our summary lists: Node.js; A credential in EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY. Its frontmatter pre-approves these tools: WebFetch. Compatibility (from SKILL.md): Requires @clerk/expo v3.4+ (written against v3.6.x, July 2026). Expo SDK 53-56, React Native 0.75+..

Does Clerk Expo access the network?

SKILL.md names 3 domains. In commands or code: dashboard.clerk.com; the agent is likely to contact it when it follows the instructions. As links in the text: clerk.com and github.com. This is read from the text; nothing was executed.

Is Clerk Expo safe to install?

Our automated static check of SKILL.md found notes only (mentions a .env file), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.

What licence does Clerk Expo use?

Clerk Expo is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Clerk Expo use?

About 2.8k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 8.4k tokens, read only when the agent opens those files.

What are the alternatives to Clerk Expo?

Skills that share tags, products or a category with Clerk Expo: Expo Brownfield Integration (mweinbach/agent-coworker, 156 stars), Code Review React Native (talsec/Free-RASP-ReactNative, 176 stars), Expo Brownfield (expo/skills, 2.7k stars) and Expo Tailwind Setup (CherryHQ/cherry-studio-app, 4k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Clerk Expo?

geekskai (a GitHub user) maintains it in geekskai/blog, which has 103 GitHub stars. The repository holds 20 skills in this directory. The repository was last updated on October 9, 2026.

Source: geekskai/blog on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.