[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-clerk-clerk-swift":3,"mdc-voa1ak-key":34,"related-org-clerk-clerk-swift":1657,"related-repo-clerk-clerk-swift":1853},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":23,"repoUrl":24,"updatedAt":25,"license":26,"forks":27,"topics":28,"repo":29,"sourceUrl":32,"mdContent":33},"clerk-swift","implement Clerk auth for native Swift apps","Implement Clerk authentication for native Swift and iOS apps using ClerkKit and ClerkKitUI source-guided patterns. Use for prebuilt AuthView or custom native flows. Do not use for Expo or React Native projects.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"clerk","Clerk","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fclerk.png",[12,14,17,20],{"name":9,"slug":8,"type":13},"tag",{"name":15,"slug":16,"type":13},"iOS","ios",{"name":18,"slug":19,"type":13},"Mobile","mobile",{"name":21,"slug":22,"type":13},"Swift","swift",59,"https:\u002F\u002Fgithub.com\u002Fclerk\u002Fskills","2026-04-10T05:00:17.178105","MIT",4,[],{"repoUrl":24,"stars":23,"forks":27,"topics":30,"description":31},[],"AI Skills to enhance working with Clerk","https:\u002F\u002Fgithub.com\u002Fclerk\u002Fskills\u002Ftree\u002FHEAD\u002Fskills\u002Fmobile\u002Fclerk-swift","---\nname: clerk-swift\ndescription: Implement Clerk authentication for native Swift and iOS apps using ClerkKit\n  and ClerkKitUI source-guided patterns. Use for prebuilt AuthView or custom native\n  flows. Do not use for Expo or React Native projects.\nlicense: MIT\nallowed-tools: WebFetch\nmetadata:\n  author: clerk\n  version: 1.2.0\ncompatibility: Requires Xcode and ClerkKit Swift package\n---\n\n# Clerk Swift (Native iOS)\n\nThis skill implements Clerk in native Swift\u002FiOS projects by reading installed package source and mirroring current ClerkKit\u002FClerkKitUI behavior.\n\n## Activation Rules\n\nActivate this skill when either condition is true:\n- The user explicitly asks for Swift, SwiftUI, UIKit, or native iOS Clerk implementation.\n- The project appears to be native iOS\u002FSwift (for example `.xcodeproj`, `.xcworkspace`, `Package.swift`, Swift targets).\n\nDo not activate this skill when either condition is true:\n- The project is Expo.\n- The project is React Native.\n\nIf Expo\u002FReact Native signals are present, route to the general setup skill instead of this one.\n\n## What Do You Need?\n\n| Task | Reference |\n|------|-----------|\n| Prebuilt AuthView \u002F UserButton (fastest) | references\u002Fprebuilt.md |\n| Custom API-driven auth flows (full control) | references\u002Fcustom.md |\n\n## Quick Start\n\n| Step | Action |\n|------|--------|\n| 1 | Confirm project type is native Swift\u002FiOS and not Expo\u002FReact Native |\n| 2 | Determine flow type (`prebuilt` or `custom`) and load the matching reference file |\n| 3 | Ensure a valid publishable key exists (or ask developer) and wire it directly in configuration |\n| 4 | Ensure `clerk-ios` package is installed with correct products for selected flow; if missing, install latest available release using an up-to-next-major version requirement |\n| 5 | Inspect installed `ClerkKitUI` source to identify which `Environment` fields drive feature\u002Fstep gating |\n| 6 | Call `\u002Fv1\u002Fenvironment` after step 5 and evaluate only against the `ClerkKitUI`-aligned field map |\n| 7 | Find the iOS quickstart URL in the installed `clerk-ios` package README, append `.md`, then visit and read the markdown URL to compile a required-step checklist |\n| 8 | Verify and complete all quickstart prerequisites for this project (for example associated domains and required capabilities) |\n| 9 | Implement flow by following only the selected reference checklist |\n\n## Decision Tree\n\n```text\nUser asks for Clerk in Swift\u002FiOS\n    |\n    +-- Expo\u002FReact Native project detected?\n    |     |\n    |     +-- YES -> Do not use this skill\n    |     |\n    |     +-- NO -> Continue\n    |\n    +-- Existing auth UI detected?\n    |     |\n    |     +-- Prebuilt views detected -> Load references\u002Fprebuilt.md\n    |     |\n    |     +-- Custom flow detected -> Load references\u002Fcustom.md\n    |     |\n    |     +-- New implementation -> Ask developer prebuilt\u002Fcustom, then load matching reference\n    |\n    +-- Ensure publishable key and direct wiring\n    |\n    +-- Ensure clerk-ios is installed\n    |\n    +-- Inspect ClerkKitUI Environment field usage\n    |\n    +-- Call \u002Fv1\u002Fenvironment using that field map\n    |\n    +-- Visit\u002Fread quickstart URL from installed clerk-ios package README\n    |\n    +-- Verify all quickstart prerequisites are completed\n    |\n    +-- Implement using selected flow reference\n```\n\n## Flow References\n\nAfter flow type is known, load exactly one:\n- Prebuilt flow: [references\u002Fprebuilt.md](references\u002Fprebuilt.md)\n- Custom flow: [references\u002Fcustom.md](references\u002Fcustom.md)\n\nDo not blend the two references in a single implementation unless the developer explicitly asks for a hybrid approach.\n\n## Interaction Contract\n\nBefore any implementation edits, the agent must have both:\n- flow choice: `prebuilt` or `custom`\n- a real Clerk publishable key\n\nIf either value is missing from the user request\u002Fcontext:\n- ask the user for the missing value(s)\n- pause and wait for the answer\n- do not edit files or install dependencies yet\n\nOnly skip asking when the user has already explicitly provided the value in this conversation.\n\n## Source-Driven Templates\n\nDo not hardcode implementation examples in this skill. Inspect current installed package source before implementing.\n\n| Use Case | Source of Truth in Installed Package |\n|----------|--------------------------------------|\n| SDK package products, platform support, and dependency constraints | Package manifest and target product definitions for `ClerkKit` and `ClerkKitUI`, plus package requirement style (up-to-next-major) |\n| Publishable key validation and frontend API derivation | Clerk configuration logic (search symbols: `configure(publishableKey`, `frontendApiUrl`, `invalidPublishableKeyFormat`) |\n| Environment endpoint contract and field semantics | Environment request path and request construction plus `ClerkKitUI` `Environment` field usage for gating (search symbols: `\u002Fv1\u002Fenvironment`, `Request\u003CClerk.Environment>`, `Environment` usage in `ClerkKitUI`) |\n| iOS quickstart requirements | Installed `clerk-ios` package README quickstart link plus the visited\u002Fread quickstart page checklist steps (including project setup prerequisites) |\n| Native Sign in with Apple implementation | Apple capability and native sign-in behavior in selected flow reference |\n\n## Execution Gates (Do Not Skip)\n\n1. No implementation edits before prerequisites\n- Do not edit project files until flow type is confirmed and a valid publishable key is available.\n\n2. Missing flow or key must trigger a question\n- If flow choice is missing, explicitly ask: prebuilt views or custom flow.\n- If publishable key is missing\u002Fplaceholder\u002Finvalid, explicitly ask for a real key.\n- Do not continue until both answers are provided.\n\n3. Publishable key wiring mode is mandatory\n- Use the developer-provided publishable key plainly in app configuration passed to `Clerk.configure`.\n- Do not introduce plist\u002Flocal-secrets\u002Fenv-file\u002Fbuild-setting indirection unless explicitly requested.\n\n4. Package install\u002Fversion policy is mandatory\n- If `clerk-ios` is not installed, add it using the latest available release with an up-to-next-major requirement.\n- Do not pin an exact package version unless the developer explicitly asks for exact pinning.\n\n5. ClerkKitUI Environment field inspection is mandatory\n- After package install, inspect installed `ClerkKitUI` source and identify which `Environment` fields gate auth behavior for the selected flow.\n- Build an agent-internal field map before any `\u002Fv1\u002Fenvironment` call.\n\n6. Environment call is mandatory (both flows)\n- Make a direct HTTP call to `\u002Fv1\u002Fenvironment` only after package install and step 5 field-map inspection.\n- Pass the response into the selected reference workflow using the `ClerkKitUI`-aligned field map:\n  - prebuilt: use it to determine whether Apple is enabled and capability changes are needed\n  - custom: perform full normalization\u002Fmatrix handling as agent-internal analysis only (never persist matrix artifacts in project code)\n\n7. Reference-file discipline is mandatory\n- Once flow is selected, follow only that flow reference file for implementation and verification.\n\n8. Quickstart compliance is mandatory\n- Find the iOS quickstart URL in the installed `clerk-ios` package README, append `.md`, then visit and read that markdown URL.\n- Audit the project against all quickstart setup steps before finishing.\n- If required quickstart setup is missing, implement it before completing the task.\n- This includes adding any missing Associated Domains entries and any other required app capabilities from the quickstart.\n- Explicitly execute the quickstart step `Add associated domain capability` (`https:\u002F\u002Fclerk.com\u002Fdocs\u002Fios\u002Fgetting-started\u002Fquickstart#add-associated-domain-capability`) and ensure the associated-domain entry matches quickstart requirements (`webcredentials:{YOUR_FRONTEND_API_URL}`).\n\n9. Custom-flow AuthView structure parity is mandatory\n- For `custom` flow, layout and flow structure must remain materially close to ClerkKitUI `AuthView` defaults.\n- If the developer did not explicitly request a different UX, do not introduce major structural\u002Flayout deviations from `AuthView`.\n- If unsure\u002Fconfused about custom sequencing, gating, or `Environment` usage\u002Fsemantics, defer to installed `ClerkKitUI` behavior and mirror it.\n\n## Workflow\n\n1. Detect native iOS\u002FSwift vs Expo\u002FReact Native.\n2. If flow type is not explicitly provided, ask user for `prebuilt` or `custom`.\n3. If publishable key is not explicitly provided, ask user for it.\n4. Wait for both answers before changing files.\n5. Load matching flow reference file.\n6. Ensure publishable key is valid and directly wired in `Clerk.configure`.\n7. Ensure package install\u002Fproducts match selected flow and package requirement follows latest up-to-next-major policy when newly added.\n8. Inspect installed `ClerkKitUI` source to map `Environment` fields used for gating\u002Frequired behavior in the selected flow.\n9. Call `\u002Fv1\u002Fenvironment` and interpret response through the step 8 field map.\n10. Find iOS quickstart URL from installed `clerk-ios` package README, append `.md`, then visit and read it.\n11. Build quickstart checklist from the visited markdown quickstart, detect missing required setup, and apply the missing setup in the current project.\n12. Ensure the quickstart associated-domain capability step is fully applied (`webcredentials:{YOUR_FRONTEND_API_URL}` when missing).\n13. Implement using selected reference checklist.\n14. Verify using selected reference checklist plus shared gates.\n\n## Common Pitfalls\n\n| Level | Issue | Prevention |\n|-------|-------|------------|\n| CRITICAL | Not asking for missing flow choice before implementation | Ask for `prebuilt` vs `custom` and wait before edits |\n| CRITICAL | Not asking for missing publishable key before implementation | Ask for key and wait before edits |\n| CRITICAL | Starting implementation before flow type is confirmed | Confirm flow first and load matching reference |\n| CRITICAL | Using plist\u002Flocal\u002Fenv indirection for publishable key without request | Wire key directly in configuration by default |\n| CRITICAL | Skipping `\u002Fv1\u002Fenvironment` call before implementation | Always call environment endpoint for both prebuilt and custom flows |\n| CRITICAL | Calling `\u002Fv1\u002Fenvironment` before package install + ClerkKitUI `Environment` field inspection | Install `clerk-ios` first, inspect ClerkKitUI `Environment` usage, then call endpoint |\n| HIGH | Installing `clerk-ios` with exact\u002Fstale version by default | If missing, install latest available release using up-to-next-major requirement |\n| CRITICAL | Skipping quickstart prerequisite audit | Visit\u002Fread quickstart URL from installed `clerk-ios` package README and verify all required setup steps are completed |\n| CRITICAL | Detecting missing quickstart capabilities\u002Fdomains but not applying them | Add all missing required quickstart capabilities and Associated Domains before completing |\n| CRITICAL | Skipping quickstart associated-domain capability step | Execute quickstart `Add associated domain capability` and ensure `webcredentials:{YOUR_FRONTEND_API_URL}` is present |\n| CRITICAL | Writing capability\u002Frequired-field matrices into app code | Keep matrices agent-internal and only apply resulting behavior in UI\u002Fauth flow code |\n| CRITICAL | Custom flow layout diverges from `AuthView` without explicit request | Keep custom screens materially close to `AuthView` structure and step composition by default |\n| CRITICAL | Collapsing custom auth into a single all-fields screen | Follow `AuthView`-style multi-step progression and step-specific field collection |\n| CRITICAL | Guessing custom sequencing\u002Fgating\u002F`Environment` usage when uncertain | Reference installed `ClerkKitUI` behavior and mirror it for final implementation |\n| HIGH | Using this skill for Expo\u002FReact Native | Detect and route away before implementation |\n\n## See Also\n\n- `clerk` skill for top-level Clerk routing\n- `clerk-setup` skill for non-native or cross-framework setup\n- installed `clerk-ios` package `README.md` (source for current iOS quickstart link)\n- `https:\u002F\u002Fgithub.com\u002Fclerk\u002Fclerk-ios`\n",{"data":35,"body":40},{"name":4,"description":6,"license":26,"allowed-tools":36,"metadata":37,"compatibility":39},"WebFetch",{"author":8,"version":38},"1.2.0","Requires Xcode and ClerkKit Swift package",{"type":41,"children":42},"root",[43,52,58,65,70,109,114,127,132,138,192,198,407,413,425,431,436,458,463,469,474,498,503,521,526,532,537,708,714,723,731,740,758,767,788,796,816,825,859,868,908,917,925,934,998,1007,1060,1066,1196,1202,1598,1604],{"type":44,"tag":45,"props":46,"children":48},"element","h1",{"id":47},"clerk-swift-native-ios",[49],{"type":50,"value":51},"text","Clerk Swift (Native iOS)",{"type":44,"tag":53,"props":54,"children":55},"p",{},[56],{"type":50,"value":57},"This skill implements Clerk in native Swift\u002FiOS projects by reading installed package source and mirroring current ClerkKit\u002FClerkKitUI behavior.",{"type":44,"tag":59,"props":60,"children":62},"h2",{"id":61},"activation-rules",[63],{"type":50,"value":64},"Activation Rules",{"type":44,"tag":53,"props":66,"children":67},{},[68],{"type":50,"value":69},"Activate this skill when either condition is true:",{"type":44,"tag":71,"props":72,"children":73},"ul",{},[74,80],{"type":44,"tag":75,"props":76,"children":77},"li",{},[78],{"type":50,"value":79},"The user explicitly asks for Swift, SwiftUI, UIKit, or native iOS Clerk implementation.",{"type":44,"tag":75,"props":81,"children":82},{},[83,85,92,94,100,101,107],{"type":50,"value":84},"The project appears to be native iOS\u002FSwift (for example ",{"type":44,"tag":86,"props":87,"children":89},"code",{"className":88},[],[90],{"type":50,"value":91},".xcodeproj",{"type":50,"value":93},", ",{"type":44,"tag":86,"props":95,"children":97},{"className":96},[],[98],{"type":50,"value":99},".xcworkspace",{"type":50,"value":93},{"type":44,"tag":86,"props":102,"children":104},{"className":103},[],[105],{"type":50,"value":106},"Package.swift",{"type":50,"value":108},", Swift targets).",{"type":44,"tag":53,"props":110,"children":111},{},[112],{"type":50,"value":113},"Do not activate this skill when either condition is true:",{"type":44,"tag":71,"props":115,"children":116},{},[117,122],{"type":44,"tag":75,"props":118,"children":119},{},[120],{"type":50,"value":121},"The project is Expo.",{"type":44,"tag":75,"props":123,"children":124},{},[125],{"type":50,"value":126},"The project is React Native.",{"type":44,"tag":53,"props":128,"children":129},{},[130],{"type":50,"value":131},"If Expo\u002FReact Native signals are present, route to the general setup skill instead of this one.",{"type":44,"tag":59,"props":133,"children":135},{"id":134},"what-do-you-need",[136],{"type":50,"value":137},"What Do You Need?",{"type":44,"tag":139,"props":140,"children":141},"table",{},[142,161],{"type":44,"tag":143,"props":144,"children":145},"thead",{},[146],{"type":44,"tag":147,"props":148,"children":149},"tr",{},[150,156],{"type":44,"tag":151,"props":152,"children":153},"th",{},[154],{"type":50,"value":155},"Task",{"type":44,"tag":151,"props":157,"children":158},{},[159],{"type":50,"value":160},"Reference",{"type":44,"tag":162,"props":163,"children":164},"tbody",{},[165,179],{"type":44,"tag":147,"props":166,"children":167},{},[168,174],{"type":44,"tag":169,"props":170,"children":171},"td",{},[172],{"type":50,"value":173},"Prebuilt AuthView \u002F UserButton (fastest)",{"type":44,"tag":169,"props":175,"children":176},{},[177],{"type":50,"value":178},"references\u002Fprebuilt.md",{"type":44,"tag":147,"props":180,"children":181},{},[182,187],{"type":44,"tag":169,"props":183,"children":184},{},[185],{"type":50,"value":186},"Custom API-driven auth flows (full control)",{"type":44,"tag":169,"props":188,"children":189},{},[190],{"type":50,"value":191},"references\u002Fcustom.md",{"type":44,"tag":59,"props":193,"children":195},{"id":194},"quick-start",[196],{"type":50,"value":197},"Quick Start",{"type":44,"tag":139,"props":199,"children":200},{},[201,217],{"type":44,"tag":143,"props":202,"children":203},{},[204],{"type":44,"tag":147,"props":205,"children":206},{},[207,212],{"type":44,"tag":151,"props":208,"children":209},{},[210],{"type":50,"value":211},"Step",{"type":44,"tag":151,"props":213,"children":214},{},[215],{"type":50,"value":216},"Action",{"type":44,"tag":162,"props":218,"children":219},{},[220,233,262,275,296,325,353,381,394],{"type":44,"tag":147,"props":221,"children":222},{},[223,228],{"type":44,"tag":169,"props":224,"children":225},{},[226],{"type":50,"value":227},"1",{"type":44,"tag":169,"props":229,"children":230},{},[231],{"type":50,"value":232},"Confirm project type is native Swift\u002FiOS and not Expo\u002FReact Native",{"type":44,"tag":147,"props":234,"children":235},{},[236,241],{"type":44,"tag":169,"props":237,"children":238},{},[239],{"type":50,"value":240},"2",{"type":44,"tag":169,"props":242,"children":243},{},[244,246,252,254,260],{"type":50,"value":245},"Determine flow type (",{"type":44,"tag":86,"props":247,"children":249},{"className":248},[],[250],{"type":50,"value":251},"prebuilt",{"type":50,"value":253}," or ",{"type":44,"tag":86,"props":255,"children":257},{"className":256},[],[258],{"type":50,"value":259},"custom",{"type":50,"value":261},") and load the matching reference file",{"type":44,"tag":147,"props":263,"children":264},{},[265,270],{"type":44,"tag":169,"props":266,"children":267},{},[268],{"type":50,"value":269},"3",{"type":44,"tag":169,"props":271,"children":272},{},[273],{"type":50,"value":274},"Ensure a valid publishable key exists (or ask developer) and wire it directly in configuration",{"type":44,"tag":147,"props":276,"children":277},{},[278,283],{"type":44,"tag":169,"props":279,"children":280},{},[281],{"type":50,"value":282},"4",{"type":44,"tag":169,"props":284,"children":285},{},[286,288,294],{"type":50,"value":287},"Ensure ",{"type":44,"tag":86,"props":289,"children":291},{"className":290},[],[292],{"type":50,"value":293},"clerk-ios",{"type":50,"value":295}," package is installed with correct products for selected flow; if missing, install latest available release using an up-to-next-major version requirement",{"type":44,"tag":147,"props":297,"children":298},{},[299,304],{"type":44,"tag":169,"props":300,"children":301},{},[302],{"type":50,"value":303},"5",{"type":44,"tag":169,"props":305,"children":306},{},[307,309,315,317,323],{"type":50,"value":308},"Inspect installed ",{"type":44,"tag":86,"props":310,"children":312},{"className":311},[],[313],{"type":50,"value":314},"ClerkKitUI",{"type":50,"value":316}," source to identify which ",{"type":44,"tag":86,"props":318,"children":320},{"className":319},[],[321],{"type":50,"value":322},"Environment",{"type":50,"value":324}," fields drive feature\u002Fstep gating",{"type":44,"tag":147,"props":326,"children":327},{},[328,333],{"type":44,"tag":169,"props":329,"children":330},{},[331],{"type":50,"value":332},"6",{"type":44,"tag":169,"props":334,"children":335},{},[336,338,344,346,351],{"type":50,"value":337},"Call ",{"type":44,"tag":86,"props":339,"children":341},{"className":340},[],[342],{"type":50,"value":343},"\u002Fv1\u002Fenvironment",{"type":50,"value":345}," after step 5 and evaluate only against the ",{"type":44,"tag":86,"props":347,"children":349},{"className":348},[],[350],{"type":50,"value":314},{"type":50,"value":352},"-aligned field map",{"type":44,"tag":147,"props":354,"children":355},{},[356,361],{"type":44,"tag":169,"props":357,"children":358},{},[359],{"type":50,"value":360},"7",{"type":44,"tag":169,"props":362,"children":363},{},[364,366,371,373,379],{"type":50,"value":365},"Find the iOS quickstart URL in the installed ",{"type":44,"tag":86,"props":367,"children":369},{"className":368},[],[370],{"type":50,"value":293},{"type":50,"value":372}," package README, append ",{"type":44,"tag":86,"props":374,"children":376},{"className":375},[],[377],{"type":50,"value":378},".md",{"type":50,"value":380},", then visit and read the markdown URL to compile a required-step checklist",{"type":44,"tag":147,"props":382,"children":383},{},[384,389],{"type":44,"tag":169,"props":385,"children":386},{},[387],{"type":50,"value":388},"8",{"type":44,"tag":169,"props":390,"children":391},{},[392],{"type":50,"value":393},"Verify and complete all quickstart prerequisites for this project (for example associated domains and required capabilities)",{"type":44,"tag":147,"props":395,"children":396},{},[397,402],{"type":44,"tag":169,"props":398,"children":399},{},[400],{"type":50,"value":401},"9",{"type":44,"tag":169,"props":403,"children":404},{},[405],{"type":50,"value":406},"Implement flow by following only the selected reference checklist",{"type":44,"tag":59,"props":408,"children":410},{"id":409},"decision-tree",[411],{"type":50,"value":412},"Decision Tree",{"type":44,"tag":414,"props":415,"children":420},"pre",{"className":416,"code":418,"language":50,"meta":419},[417],"language-text","User asks for Clerk in Swift\u002FiOS\n    |\n    +-- Expo\u002FReact Native project detected?\n    |     |\n    |     +-- YES -> Do not use this skill\n    |     |\n    |     +-- NO -> Continue\n    |\n    +-- Existing auth UI detected?\n    |     |\n    |     +-- Prebuilt views detected -> Load references\u002Fprebuilt.md\n    |     |\n    |     +-- Custom flow detected -> Load references\u002Fcustom.md\n    |     |\n    |     +-- New implementation -> Ask developer prebuilt\u002Fcustom, then load matching reference\n    |\n    +-- Ensure publishable key and direct wiring\n    |\n    +-- Ensure clerk-ios is installed\n    |\n    +-- Inspect ClerkKitUI Environment field usage\n    |\n    +-- Call \u002Fv1\u002Fenvironment using that field map\n    |\n    +-- Visit\u002Fread quickstart URL from installed clerk-ios package README\n    |\n    +-- Verify all quickstart prerequisites are completed\n    |\n    +-- Implement using selected flow reference\n","",[421],{"type":44,"tag":86,"props":422,"children":423},{"__ignoreMap":419},[424],{"type":50,"value":418},{"type":44,"tag":59,"props":426,"children":428},{"id":427},"flow-references",[429],{"type":50,"value":430},"Flow References",{"type":44,"tag":53,"props":432,"children":433},{},[434],{"type":50,"value":435},"After flow type is known, load exactly one:",{"type":44,"tag":71,"props":437,"children":438},{},[439,449],{"type":44,"tag":75,"props":440,"children":441},{},[442,444],{"type":50,"value":443},"Prebuilt flow: ",{"type":44,"tag":445,"props":446,"children":447},"a",{"href":178},[448],{"type":50,"value":178},{"type":44,"tag":75,"props":450,"children":451},{},[452,454],{"type":50,"value":453},"Custom flow: ",{"type":44,"tag":445,"props":455,"children":456},{"href":191},[457],{"type":50,"value":191},{"type":44,"tag":53,"props":459,"children":460},{},[461],{"type":50,"value":462},"Do not blend the two references in a single implementation unless the developer explicitly asks for a hybrid approach.",{"type":44,"tag":59,"props":464,"children":466},{"id":465},"interaction-contract",[467],{"type":50,"value":468},"Interaction Contract",{"type":44,"tag":53,"props":470,"children":471},{},[472],{"type":50,"value":473},"Before any implementation edits, the agent must have both:",{"type":44,"tag":71,"props":475,"children":476},{},[477,493],{"type":44,"tag":75,"props":478,"children":479},{},[480,482,487,488],{"type":50,"value":481},"flow choice: ",{"type":44,"tag":86,"props":483,"children":485},{"className":484},[],[486],{"type":50,"value":251},{"type":50,"value":253},{"type":44,"tag":86,"props":489,"children":491},{"className":490},[],[492],{"type":50,"value":259},{"type":44,"tag":75,"props":494,"children":495},{},[496],{"type":50,"value":497},"a real Clerk publishable key",{"type":44,"tag":53,"props":499,"children":500},{},[501],{"type":50,"value":502},"If either value is missing from the user request\u002Fcontext:",{"type":44,"tag":71,"props":504,"children":505},{},[506,511,516],{"type":44,"tag":75,"props":507,"children":508},{},[509],{"type":50,"value":510},"ask the user for the missing value(s)",{"type":44,"tag":75,"props":512,"children":513},{},[514],{"type":50,"value":515},"pause and wait for the answer",{"type":44,"tag":75,"props":517,"children":518},{},[519],{"type":50,"value":520},"do not edit files or install dependencies yet",{"type":44,"tag":53,"props":522,"children":523},{},[524],{"type":50,"value":525},"Only skip asking when the user has already explicitly provided the value in this conversation.",{"type":44,"tag":59,"props":527,"children":529},{"id":528},"source-driven-templates",[530],{"type":50,"value":531},"Source-Driven Templates",{"type":44,"tag":53,"props":533,"children":534},{},[535],{"type":50,"value":536},"Do not hardcode implementation examples in this skill. Inspect current installed package source before implementing.",{"type":44,"tag":139,"props":538,"children":539},{},[540,556],{"type":44,"tag":143,"props":541,"children":542},{},[543],{"type":44,"tag":147,"props":544,"children":545},{},[546,551],{"type":44,"tag":151,"props":547,"children":548},{},[549],{"type":50,"value":550},"Use Case",{"type":44,"tag":151,"props":552,"children":553},{},[554],{"type":50,"value":555},"Source of Truth in Installed Package",{"type":44,"tag":162,"props":557,"children":558},{},[559,587,622,675,695],{"type":44,"tag":147,"props":560,"children":561},{},[562,567],{"type":44,"tag":169,"props":563,"children":564},{},[565],{"type":50,"value":566},"SDK package products, platform support, and dependency constraints",{"type":44,"tag":169,"props":568,"children":569},{},[570,572,578,580,585],{"type":50,"value":571},"Package manifest and target product definitions for ",{"type":44,"tag":86,"props":573,"children":575},{"className":574},[],[576],{"type":50,"value":577},"ClerkKit",{"type":50,"value":579}," and ",{"type":44,"tag":86,"props":581,"children":583},{"className":582},[],[584],{"type":50,"value":314},{"type":50,"value":586},", plus package requirement style (up-to-next-major)",{"type":44,"tag":147,"props":588,"children":589},{},[590,595],{"type":44,"tag":169,"props":591,"children":592},{},[593],{"type":50,"value":594},"Publishable key validation and frontend API derivation",{"type":44,"tag":169,"props":596,"children":597},{},[598,600,606,607,613,614,620],{"type":50,"value":599},"Clerk configuration logic (search symbols: ",{"type":44,"tag":86,"props":601,"children":603},{"className":602},[],[604],{"type":50,"value":605},"configure(publishableKey",{"type":50,"value":93},{"type":44,"tag":86,"props":608,"children":610},{"className":609},[],[611],{"type":50,"value":612},"frontendApiUrl",{"type":50,"value":93},{"type":44,"tag":86,"props":615,"children":617},{"className":616},[],[618],{"type":50,"value":619},"invalidPublishableKeyFormat",{"type":50,"value":621},")",{"type":44,"tag":147,"props":623,"children":624},{},[625,630],{"type":44,"tag":169,"props":626,"children":627},{},[628],{"type":50,"value":629},"Environment endpoint contract and field semantics",{"type":44,"tag":169,"props":631,"children":632},{},[633,635,640,642,647,649,654,655,661,662,667,669,674],{"type":50,"value":634},"Environment request path and request construction plus ",{"type":44,"tag":86,"props":636,"children":638},{"className":637},[],[639],{"type":50,"value":314},{"type":50,"value":641}," ",{"type":44,"tag":86,"props":643,"children":645},{"className":644},[],[646],{"type":50,"value":322},{"type":50,"value":648}," field usage for gating (search symbols: ",{"type":44,"tag":86,"props":650,"children":652},{"className":651},[],[653],{"type":50,"value":343},{"type":50,"value":93},{"type":44,"tag":86,"props":656,"children":658},{"className":657},[],[659],{"type":50,"value":660},"Request\u003CClerk.Environment>",{"type":50,"value":93},{"type":44,"tag":86,"props":663,"children":665},{"className":664},[],[666],{"type":50,"value":322},{"type":50,"value":668}," usage in ",{"type":44,"tag":86,"props":670,"children":672},{"className":671},[],[673],{"type":50,"value":314},{"type":50,"value":621},{"type":44,"tag":147,"props":676,"children":677},{},[678,683],{"type":44,"tag":169,"props":679,"children":680},{},[681],{"type":50,"value":682},"iOS quickstart requirements",{"type":44,"tag":169,"props":684,"children":685},{},[686,688,693],{"type":50,"value":687},"Installed ",{"type":44,"tag":86,"props":689,"children":691},{"className":690},[],[692],{"type":50,"value":293},{"type":50,"value":694}," package README quickstart link plus the visited\u002Fread quickstart page checklist steps (including project setup prerequisites)",{"type":44,"tag":147,"props":696,"children":697},{},[698,703],{"type":44,"tag":169,"props":699,"children":700},{},[701],{"type":50,"value":702},"Native Sign in with Apple implementation",{"type":44,"tag":169,"props":704,"children":705},{},[706],{"type":50,"value":707},"Apple capability and native sign-in behavior in selected flow reference",{"type":44,"tag":59,"props":709,"children":711},{"id":710},"execution-gates-do-not-skip",[712],{"type":50,"value":713},"Execution Gates (Do Not Skip)",{"type":44,"tag":715,"props":716,"children":717},"ol",{},[718],{"type":44,"tag":75,"props":719,"children":720},{},[721],{"type":50,"value":722},"No implementation edits before prerequisites",{"type":44,"tag":71,"props":724,"children":725},{},[726],{"type":44,"tag":75,"props":727,"children":728},{},[729],{"type":50,"value":730},"Do not edit project files until flow type is confirmed and a valid publishable key is available.",{"type":44,"tag":715,"props":732,"children":734},{"start":733},2,[735],{"type":44,"tag":75,"props":736,"children":737},{},[738],{"type":50,"value":739},"Missing flow or key must trigger a question",{"type":44,"tag":71,"props":741,"children":742},{},[743,748,753],{"type":44,"tag":75,"props":744,"children":745},{},[746],{"type":50,"value":747},"If flow choice is missing, explicitly ask: prebuilt views or custom flow.",{"type":44,"tag":75,"props":749,"children":750},{},[751],{"type":50,"value":752},"If publishable key is missing\u002Fplaceholder\u002Finvalid, explicitly ask for a real key.",{"type":44,"tag":75,"props":754,"children":755},{},[756],{"type":50,"value":757},"Do not continue until both answers are provided.",{"type":44,"tag":715,"props":759,"children":761},{"start":760},3,[762],{"type":44,"tag":75,"props":763,"children":764},{},[765],{"type":50,"value":766},"Publishable key wiring mode is mandatory",{"type":44,"tag":71,"props":768,"children":769},{},[770,783],{"type":44,"tag":75,"props":771,"children":772},{},[773,775,781],{"type":50,"value":774},"Use the developer-provided publishable key plainly in app configuration passed to ",{"type":44,"tag":86,"props":776,"children":778},{"className":777},[],[779],{"type":50,"value":780},"Clerk.configure",{"type":50,"value":782},".",{"type":44,"tag":75,"props":784,"children":785},{},[786],{"type":50,"value":787},"Do not introduce plist\u002Flocal-secrets\u002Fenv-file\u002Fbuild-setting indirection unless explicitly requested.",{"type":44,"tag":715,"props":789,"children":790},{"start":27},[791],{"type":44,"tag":75,"props":792,"children":793},{},[794],{"type":50,"value":795},"Package install\u002Fversion policy is mandatory",{"type":44,"tag":71,"props":797,"children":798},{},[799,811],{"type":44,"tag":75,"props":800,"children":801},{},[802,804,809],{"type":50,"value":803},"If ",{"type":44,"tag":86,"props":805,"children":807},{"className":806},[],[808],{"type":50,"value":293},{"type":50,"value":810}," is not installed, add it using the latest available release with an up-to-next-major requirement.",{"type":44,"tag":75,"props":812,"children":813},{},[814],{"type":50,"value":815},"Do not pin an exact package version unless the developer explicitly asks for exact pinning.",{"type":44,"tag":715,"props":817,"children":819},{"start":818},5,[820],{"type":44,"tag":75,"props":821,"children":822},{},[823],{"type":50,"value":824},"ClerkKitUI Environment field inspection is mandatory",{"type":44,"tag":71,"props":826,"children":827},{},[828,847],{"type":44,"tag":75,"props":829,"children":830},{},[831,833,838,840,845],{"type":50,"value":832},"After package install, inspect installed ",{"type":44,"tag":86,"props":834,"children":836},{"className":835},[],[837],{"type":50,"value":314},{"type":50,"value":839}," source and identify which ",{"type":44,"tag":86,"props":841,"children":843},{"className":842},[],[844],{"type":50,"value":322},{"type":50,"value":846}," fields gate auth behavior for the selected flow.",{"type":44,"tag":75,"props":848,"children":849},{},[850,852,857],{"type":50,"value":851},"Build an agent-internal field map before any ",{"type":44,"tag":86,"props":853,"children":855},{"className":854},[],[856],{"type":50,"value":343},{"type":50,"value":858}," call.",{"type":44,"tag":715,"props":860,"children":862},{"start":861},6,[863],{"type":44,"tag":75,"props":864,"children":865},{},[866],{"type":50,"value":867},"Environment call is mandatory (both flows)",{"type":44,"tag":71,"props":869,"children":870},{},[871,883],{"type":44,"tag":75,"props":872,"children":873},{},[874,876,881],{"type":50,"value":875},"Make a direct HTTP call to ",{"type":44,"tag":86,"props":877,"children":879},{"className":878},[],[880],{"type":50,"value":343},{"type":50,"value":882}," only after package install and step 5 field-map inspection.",{"type":44,"tag":75,"props":884,"children":885},{},[886,888,893,895],{"type":50,"value":887},"Pass the response into the selected reference workflow using the ",{"type":44,"tag":86,"props":889,"children":891},{"className":890},[],[892],{"type":50,"value":314},{"type":50,"value":894},"-aligned field map:\n",{"type":44,"tag":71,"props":896,"children":897},{},[898,903],{"type":44,"tag":75,"props":899,"children":900},{},[901],{"type":50,"value":902},"prebuilt: use it to determine whether Apple is enabled and capability changes are needed",{"type":44,"tag":75,"props":904,"children":905},{},[906],{"type":50,"value":907},"custom: perform full normalization\u002Fmatrix handling as agent-internal analysis only (never persist matrix artifacts in project code)",{"type":44,"tag":715,"props":909,"children":911},{"start":910},7,[912],{"type":44,"tag":75,"props":913,"children":914},{},[915],{"type":50,"value":916},"Reference-file discipline is mandatory",{"type":44,"tag":71,"props":918,"children":919},{},[920],{"type":44,"tag":75,"props":921,"children":922},{},[923],{"type":50,"value":924},"Once flow is selected, follow only that flow reference file for implementation and verification.",{"type":44,"tag":715,"props":926,"children":928},{"start":927},8,[929],{"type":44,"tag":75,"props":930,"children":931},{},[932],{"type":50,"value":933},"Quickstart compliance is mandatory",{"type":44,"tag":71,"props":935,"children":936},{},[937,954,959,964,969],{"type":44,"tag":75,"props":938,"children":939},{},[940,941,946,947,952],{"type":50,"value":365},{"type":44,"tag":86,"props":942,"children":944},{"className":943},[],[945],{"type":50,"value":293},{"type":50,"value":372},{"type":44,"tag":86,"props":948,"children":950},{"className":949},[],[951],{"type":50,"value":378},{"type":50,"value":953},", then visit and read that markdown URL.",{"type":44,"tag":75,"props":955,"children":956},{},[957],{"type":50,"value":958},"Audit the project against all quickstart setup steps before finishing.",{"type":44,"tag":75,"props":960,"children":961},{},[962],{"type":50,"value":963},"If required quickstart setup is missing, implement it before completing the task.",{"type":44,"tag":75,"props":965,"children":966},{},[967],{"type":50,"value":968},"This includes adding any missing Associated Domains entries and any other required app capabilities from the quickstart.",{"type":44,"tag":75,"props":970,"children":971},{},[972,974,980,982,988,990,996],{"type":50,"value":973},"Explicitly execute the quickstart step ",{"type":44,"tag":86,"props":975,"children":977},{"className":976},[],[978],{"type":50,"value":979},"Add associated domain capability",{"type":50,"value":981}," (",{"type":44,"tag":86,"props":983,"children":985},{"className":984},[],[986],{"type":50,"value":987},"https:\u002F\u002Fclerk.com\u002Fdocs\u002Fios\u002Fgetting-started\u002Fquickstart#add-associated-domain-capability",{"type":50,"value":989},") and ensure the associated-domain entry matches quickstart requirements (",{"type":44,"tag":86,"props":991,"children":993},{"className":992},[],[994],{"type":50,"value":995},"webcredentials:{YOUR_FRONTEND_API_URL}",{"type":50,"value":997},").",{"type":44,"tag":715,"props":999,"children":1001},{"start":1000},9,[1002],{"type":44,"tag":75,"props":1003,"children":1004},{},[1005],{"type":50,"value":1006},"Custom-flow AuthView structure parity is mandatory",{"type":44,"tag":71,"props":1008,"children":1009},{},[1010,1030,1041],{"type":44,"tag":75,"props":1011,"children":1012},{},[1013,1015,1020,1022,1028],{"type":50,"value":1014},"For ",{"type":44,"tag":86,"props":1016,"children":1018},{"className":1017},[],[1019],{"type":50,"value":259},{"type":50,"value":1021}," flow, layout and flow structure must remain materially close to ClerkKitUI ",{"type":44,"tag":86,"props":1023,"children":1025},{"className":1024},[],[1026],{"type":50,"value":1027},"AuthView",{"type":50,"value":1029}," defaults.",{"type":44,"tag":75,"props":1031,"children":1032},{},[1033,1035,1040],{"type":50,"value":1034},"If the developer did not explicitly request a different UX, do not introduce major structural\u002Flayout deviations from ",{"type":44,"tag":86,"props":1036,"children":1038},{"className":1037},[],[1039],{"type":50,"value":1027},{"type":50,"value":782},{"type":44,"tag":75,"props":1042,"children":1043},{},[1044,1046,1051,1053,1058],{"type":50,"value":1045},"If unsure\u002Fconfused about custom sequencing, gating, or ",{"type":44,"tag":86,"props":1047,"children":1049},{"className":1048},[],[1050],{"type":50,"value":322},{"type":50,"value":1052}," usage\u002Fsemantics, defer to installed ",{"type":44,"tag":86,"props":1054,"children":1056},{"className":1055},[],[1057],{"type":50,"value":314},{"type":50,"value":1059}," behavior and mirror it.",{"type":44,"tag":59,"props":1061,"children":1063},{"id":1062},"workflow",[1064],{"type":50,"value":1065},"Workflow",{"type":44,"tag":715,"props":1067,"children":1068},{},[1069,1074,1091,1096,1101,1106,1117,1122,1140,1151,1169,1174,1186,1191],{"type":44,"tag":75,"props":1070,"children":1071},{},[1072],{"type":50,"value":1073},"Detect native iOS\u002FSwift vs Expo\u002FReact Native.",{"type":44,"tag":75,"props":1075,"children":1076},{},[1077,1079,1084,1085,1090],{"type":50,"value":1078},"If flow type is not explicitly provided, ask user for ",{"type":44,"tag":86,"props":1080,"children":1082},{"className":1081},[],[1083],{"type":50,"value":251},{"type":50,"value":253},{"type":44,"tag":86,"props":1086,"children":1088},{"className":1087},[],[1089],{"type":50,"value":259},{"type":50,"value":782},{"type":44,"tag":75,"props":1092,"children":1093},{},[1094],{"type":50,"value":1095},"If publishable key is not explicitly provided, ask user for it.",{"type":44,"tag":75,"props":1097,"children":1098},{},[1099],{"type":50,"value":1100},"Wait for both answers before changing files.",{"type":44,"tag":75,"props":1102,"children":1103},{},[1104],{"type":50,"value":1105},"Load matching flow reference file.",{"type":44,"tag":75,"props":1107,"children":1108},{},[1109,1111,1116],{"type":50,"value":1110},"Ensure publishable key is valid and directly wired in ",{"type":44,"tag":86,"props":1112,"children":1114},{"className":1113},[],[1115],{"type":50,"value":780},{"type":50,"value":782},{"type":44,"tag":75,"props":1118,"children":1119},{},[1120],{"type":50,"value":1121},"Ensure package install\u002Fproducts match selected flow and package requirement follows latest up-to-next-major policy when newly added.",{"type":44,"tag":75,"props":1123,"children":1124},{},[1125,1126,1131,1133,1138],{"type":50,"value":308},{"type":44,"tag":86,"props":1127,"children":1129},{"className":1128},[],[1130],{"type":50,"value":314},{"type":50,"value":1132}," source to map ",{"type":44,"tag":86,"props":1134,"children":1136},{"className":1135},[],[1137],{"type":50,"value":322},{"type":50,"value":1139}," fields used for gating\u002Frequired behavior in the selected flow.",{"type":44,"tag":75,"props":1141,"children":1142},{},[1143,1144,1149],{"type":50,"value":337},{"type":44,"tag":86,"props":1145,"children":1147},{"className":1146},[],[1148],{"type":50,"value":343},{"type":50,"value":1150}," and interpret response through the step 8 field map.",{"type":44,"tag":75,"props":1152,"children":1153},{},[1154,1156,1161,1162,1167],{"type":50,"value":1155},"Find iOS quickstart URL from installed ",{"type":44,"tag":86,"props":1157,"children":1159},{"className":1158},[],[1160],{"type":50,"value":293},{"type":50,"value":372},{"type":44,"tag":86,"props":1163,"children":1165},{"className":1164},[],[1166],{"type":50,"value":378},{"type":50,"value":1168},", then visit and read it.",{"type":44,"tag":75,"props":1170,"children":1171},{},[1172],{"type":50,"value":1173},"Build quickstart checklist from the visited markdown quickstart, detect missing required setup, and apply the missing setup in the current project.",{"type":44,"tag":75,"props":1175,"children":1176},{},[1177,1179,1184],{"type":50,"value":1178},"Ensure the quickstart associated-domain capability step is fully applied (",{"type":44,"tag":86,"props":1180,"children":1182},{"className":1181},[],[1183],{"type":50,"value":995},{"type":50,"value":1185}," when missing).",{"type":44,"tag":75,"props":1187,"children":1188},{},[1189],{"type":50,"value":1190},"Implement using selected reference checklist.",{"type":44,"tag":75,"props":1192,"children":1193},{},[1194],{"type":50,"value":1195},"Verify using selected reference checklist plus shared gates.",{"type":44,"tag":59,"props":1197,"children":1199},{"id":1198},"common-pitfalls",[1200],{"type":50,"value":1201},"Common Pitfalls",{"type":44,"tag":139,"props":1203,"children":1204},{},[1205,1226],{"type":44,"tag":143,"props":1206,"children":1207},{},[1208],{"type":44,"tag":147,"props":1209,"children":1210},{},[1211,1216,1221],{"type":44,"tag":151,"props":1212,"children":1213},{},[1214],{"type":50,"value":1215},"Level",{"type":44,"tag":151,"props":1217,"children":1218},{},[1219],{"type":50,"value":1220},"Issue",{"type":44,"tag":151,"props":1222,"children":1223},{},[1224],{"type":50,"value":1225},"Prevention",{"type":44,"tag":162,"props":1227,"children":1228},{},[1229,1261,1278,1295,1312,1336,1381,1406,1430,1447,1478,1495,1526,1550,1581],{"type":44,"tag":147,"props":1230,"children":1231},{},[1232,1237,1242],{"type":44,"tag":169,"props":1233,"children":1234},{},[1235],{"type":50,"value":1236},"CRITICAL",{"type":44,"tag":169,"props":1238,"children":1239},{},[1240],{"type":50,"value":1241},"Not asking for missing flow choice before implementation",{"type":44,"tag":169,"props":1243,"children":1244},{},[1245,1247,1252,1254,1259],{"type":50,"value":1246},"Ask for ",{"type":44,"tag":86,"props":1248,"children":1250},{"className":1249},[],[1251],{"type":50,"value":251},{"type":50,"value":1253}," vs ",{"type":44,"tag":86,"props":1255,"children":1257},{"className":1256},[],[1258],{"type":50,"value":259},{"type":50,"value":1260}," and wait before edits",{"type":44,"tag":147,"props":1262,"children":1263},{},[1264,1268,1273],{"type":44,"tag":169,"props":1265,"children":1266},{},[1267],{"type":50,"value":1236},{"type":44,"tag":169,"props":1269,"children":1270},{},[1271],{"type":50,"value":1272},"Not asking for missing publishable key before implementation",{"type":44,"tag":169,"props":1274,"children":1275},{},[1276],{"type":50,"value":1277},"Ask for key and wait before edits",{"type":44,"tag":147,"props":1279,"children":1280},{},[1281,1285,1290],{"type":44,"tag":169,"props":1282,"children":1283},{},[1284],{"type":50,"value":1236},{"type":44,"tag":169,"props":1286,"children":1287},{},[1288],{"type":50,"value":1289},"Starting implementation before flow type is confirmed",{"type":44,"tag":169,"props":1291,"children":1292},{},[1293],{"type":50,"value":1294},"Confirm flow first and load matching reference",{"type":44,"tag":147,"props":1296,"children":1297},{},[1298,1302,1307],{"type":44,"tag":169,"props":1299,"children":1300},{},[1301],{"type":50,"value":1236},{"type":44,"tag":169,"props":1303,"children":1304},{},[1305],{"type":50,"value":1306},"Using plist\u002Flocal\u002Fenv indirection for publishable key without request",{"type":44,"tag":169,"props":1308,"children":1309},{},[1310],{"type":50,"value":1311},"Wire key directly in configuration by default",{"type":44,"tag":147,"props":1313,"children":1314},{},[1315,1319,1331],{"type":44,"tag":169,"props":1316,"children":1317},{},[1318],{"type":50,"value":1236},{"type":44,"tag":169,"props":1320,"children":1321},{},[1322,1324,1329],{"type":50,"value":1323},"Skipping ",{"type":44,"tag":86,"props":1325,"children":1327},{"className":1326},[],[1328],{"type":50,"value":343},{"type":50,"value":1330}," call before implementation",{"type":44,"tag":169,"props":1332,"children":1333},{},[1334],{"type":50,"value":1335},"Always call environment endpoint for both prebuilt and custom flows",{"type":44,"tag":147,"props":1337,"children":1338},{},[1339,1343,1362],{"type":44,"tag":169,"props":1340,"children":1341},{},[1342],{"type":50,"value":1236},{"type":44,"tag":169,"props":1344,"children":1345},{},[1346,1348,1353,1355,1360],{"type":50,"value":1347},"Calling ",{"type":44,"tag":86,"props":1349,"children":1351},{"className":1350},[],[1352],{"type":50,"value":343},{"type":50,"value":1354}," before package install + ClerkKitUI ",{"type":44,"tag":86,"props":1356,"children":1358},{"className":1357},[],[1359],{"type":50,"value":322},{"type":50,"value":1361}," field inspection",{"type":44,"tag":169,"props":1363,"children":1364},{},[1365,1367,1372,1374,1379],{"type":50,"value":1366},"Install ",{"type":44,"tag":86,"props":1368,"children":1370},{"className":1369},[],[1371],{"type":50,"value":293},{"type":50,"value":1373}," first, inspect ClerkKitUI ",{"type":44,"tag":86,"props":1375,"children":1377},{"className":1376},[],[1378],{"type":50,"value":322},{"type":50,"value":1380}," usage, then call endpoint",{"type":44,"tag":147,"props":1382,"children":1383},{},[1384,1389,1401],{"type":44,"tag":169,"props":1385,"children":1386},{},[1387],{"type":50,"value":1388},"HIGH",{"type":44,"tag":169,"props":1390,"children":1391},{},[1392,1394,1399],{"type":50,"value":1393},"Installing ",{"type":44,"tag":86,"props":1395,"children":1397},{"className":1396},[],[1398],{"type":50,"value":293},{"type":50,"value":1400}," with exact\u002Fstale version by default",{"type":44,"tag":169,"props":1402,"children":1403},{},[1404],{"type":50,"value":1405},"If missing, install latest available release using up-to-next-major requirement",{"type":44,"tag":147,"props":1407,"children":1408},{},[1409,1413,1418],{"type":44,"tag":169,"props":1410,"children":1411},{},[1412],{"type":50,"value":1236},{"type":44,"tag":169,"props":1414,"children":1415},{},[1416],{"type":50,"value":1417},"Skipping quickstart prerequisite audit",{"type":44,"tag":169,"props":1419,"children":1420},{},[1421,1423,1428],{"type":50,"value":1422},"Visit\u002Fread quickstart URL from installed ",{"type":44,"tag":86,"props":1424,"children":1426},{"className":1425},[],[1427],{"type":50,"value":293},{"type":50,"value":1429}," package README and verify all required setup steps are completed",{"type":44,"tag":147,"props":1431,"children":1432},{},[1433,1437,1442],{"type":44,"tag":169,"props":1434,"children":1435},{},[1436],{"type":50,"value":1236},{"type":44,"tag":169,"props":1438,"children":1439},{},[1440],{"type":50,"value":1441},"Detecting missing quickstart capabilities\u002Fdomains but not applying them",{"type":44,"tag":169,"props":1443,"children":1444},{},[1445],{"type":50,"value":1446},"Add all missing required quickstart capabilities and Associated Domains before completing",{"type":44,"tag":147,"props":1448,"children":1449},{},[1450,1454,1459],{"type":44,"tag":169,"props":1451,"children":1452},{},[1453],{"type":50,"value":1236},{"type":44,"tag":169,"props":1455,"children":1456},{},[1457],{"type":50,"value":1458},"Skipping quickstart associated-domain capability step",{"type":44,"tag":169,"props":1460,"children":1461},{},[1462,1464,1469,1471,1476],{"type":50,"value":1463},"Execute quickstart ",{"type":44,"tag":86,"props":1465,"children":1467},{"className":1466},[],[1468],{"type":50,"value":979},{"type":50,"value":1470}," and ensure ",{"type":44,"tag":86,"props":1472,"children":1474},{"className":1473},[],[1475],{"type":50,"value":995},{"type":50,"value":1477}," is present",{"type":44,"tag":147,"props":1479,"children":1480},{},[1481,1485,1490],{"type":44,"tag":169,"props":1482,"children":1483},{},[1484],{"type":50,"value":1236},{"type":44,"tag":169,"props":1486,"children":1487},{},[1488],{"type":50,"value":1489},"Writing capability\u002Frequired-field matrices into app code",{"type":44,"tag":169,"props":1491,"children":1492},{},[1493],{"type":50,"value":1494},"Keep matrices agent-internal and only apply resulting behavior in UI\u002Fauth flow code",{"type":44,"tag":147,"props":1496,"children":1497},{},[1498,1502,1514],{"type":44,"tag":169,"props":1499,"children":1500},{},[1501],{"type":50,"value":1236},{"type":44,"tag":169,"props":1503,"children":1504},{},[1505,1507,1512],{"type":50,"value":1506},"Custom flow layout diverges from ",{"type":44,"tag":86,"props":1508,"children":1510},{"className":1509},[],[1511],{"type":50,"value":1027},{"type":50,"value":1513}," without explicit request",{"type":44,"tag":169,"props":1515,"children":1516},{},[1517,1519,1524],{"type":50,"value":1518},"Keep custom screens materially close to ",{"type":44,"tag":86,"props":1520,"children":1522},{"className":1521},[],[1523],{"type":50,"value":1027},{"type":50,"value":1525}," structure and step composition by default",{"type":44,"tag":147,"props":1527,"children":1528},{},[1529,1533,1538],{"type":44,"tag":169,"props":1530,"children":1531},{},[1532],{"type":50,"value":1236},{"type":44,"tag":169,"props":1534,"children":1535},{},[1536],{"type":50,"value":1537},"Collapsing custom auth into a single all-fields screen",{"type":44,"tag":169,"props":1539,"children":1540},{},[1541,1543,1548],{"type":50,"value":1542},"Follow ",{"type":44,"tag":86,"props":1544,"children":1546},{"className":1545},[],[1547],{"type":50,"value":1027},{"type":50,"value":1549},"-style multi-step progression and step-specific field collection",{"type":44,"tag":147,"props":1551,"children":1552},{},[1553,1557,1569],{"type":44,"tag":169,"props":1554,"children":1555},{},[1556],{"type":50,"value":1236},{"type":44,"tag":169,"props":1558,"children":1559},{},[1560,1562,1567],{"type":50,"value":1561},"Guessing custom sequencing\u002Fgating\u002F",{"type":44,"tag":86,"props":1563,"children":1565},{"className":1564},[],[1566],{"type":50,"value":322},{"type":50,"value":1568}," usage when uncertain",{"type":44,"tag":169,"props":1570,"children":1571},{},[1572,1574,1579],{"type":50,"value":1573},"Reference installed ",{"type":44,"tag":86,"props":1575,"children":1577},{"className":1576},[],[1578],{"type":50,"value":314},{"type":50,"value":1580}," behavior and mirror it for final implementation",{"type":44,"tag":147,"props":1582,"children":1583},{},[1584,1588,1593],{"type":44,"tag":169,"props":1585,"children":1586},{},[1587],{"type":50,"value":1388},{"type":44,"tag":169,"props":1589,"children":1590},{},[1591],{"type":50,"value":1592},"Using this skill for Expo\u002FReact Native",{"type":44,"tag":169,"props":1594,"children":1595},{},[1596],{"type":50,"value":1597},"Detect and route away before implementation",{"type":44,"tag":59,"props":1599,"children":1601},{"id":1600},"see-also",[1602],{"type":50,"value":1603},"See Also",{"type":44,"tag":71,"props":1605,"children":1606},{},[1607,1617,1628,1648],{"type":44,"tag":75,"props":1608,"children":1609},{},[1610,1615],{"type":44,"tag":86,"props":1611,"children":1613},{"className":1612},[],[1614],{"type":50,"value":8},{"type":50,"value":1616}," skill for top-level Clerk routing",{"type":44,"tag":75,"props":1618,"children":1619},{},[1620,1626],{"type":44,"tag":86,"props":1621,"children":1623},{"className":1622},[],[1624],{"type":50,"value":1625},"clerk-setup",{"type":50,"value":1627}," skill for non-native or cross-framework setup",{"type":44,"tag":75,"props":1629,"children":1630},{},[1631,1633,1638,1640,1646],{"type":50,"value":1632},"installed ",{"type":44,"tag":86,"props":1634,"children":1636},{"className":1635},[],[1637],{"type":50,"value":293},{"type":50,"value":1639}," package ",{"type":44,"tag":86,"props":1641,"children":1643},{"className":1642},[],[1644],{"type":50,"value":1645},"README.md",{"type":50,"value":1647}," (source for current iOS quickstart link)",{"type":44,"tag":75,"props":1649,"children":1650},{},[1651],{"type":44,"tag":86,"props":1652,"children":1654},{"className":1653},[],[1655],{"type":50,"value":1656},"https:\u002F\u002Fgithub.com\u002Fclerk\u002Fclerk-ios",{"items":1658,"total":1852},[1659,1673,1688,1706,1724,1740,1758,1775,1791,1808,1823,1837],{"slug":8,"name":8,"fn":1660,"description":1661,"org":1662,"tags":1663,"stars":23,"repoUrl":24,"updatedAt":1672},"route Clerk authentication requests","Clerk authentication router. Use when user asks about Clerk CLI operations, adding authentication, setting up Clerk, custom sign-in flows, Swift or native iOS auth, native Android auth, Next.js patterns, React patterns, Vue patterns, Nuxt patterns, Astro patterns, TanStack Start patterns, Expo patterns, React Router patterns, Chrome Extension patterns, organizations, billing, subscriptions, payments, pricing, plans, seat-based pricing, feature entitlements, syncing users, testing, impersonating a user, or testing webhooks locally. Automatically routes to the specific skill based on their task.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1664,1667,1668,1669],{"name":1665,"slug":1666,"type":13},"Authentication","authentication",{"name":9,"slug":8,"type":13},{"name":18,"slug":19,"type":13},{"name":1670,"slug":1671,"type":13},"Web Development","web-development","2026-07-18T05:12:23.438307",{"slug":1674,"name":1674,"fn":1675,"description":1676,"org":1677,"tags":1678,"stars":23,"repoUrl":24,"updatedAt":1687},"clerk-android","implement Clerk auth for native Android apps","Implement Clerk authentication for native Android apps using Kotlin and Jetpack Compose with clerk-android source-guided patterns. Use for prebuilt AuthView\u002FUserButton or custom API-driven auth flows. Do not use for Expo or React Native projects.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1679,1682,1683,1686],{"name":1680,"slug":1681,"type":13},"Android","android",{"name":9,"slug":8,"type":13},{"name":1684,"slug":1685,"type":13},"Kotlin","kotlin",{"name":18,"slug":19,"type":13},"2026-04-10T05:00:18.622871",{"slug":1689,"name":1689,"fn":1690,"description":1691,"org":1692,"tags":1693,"stars":23,"repoUrl":24,"updatedAt":1705},"clerk-astro-patterns","implement Clerk auth in Astro apps","Astro patterns with Clerk — middleware, SSR pages, island components, API routes, static vs SSR rendering. Triggers on: astro clerk, clerk astro middleware, astro protected page, clerk island component, astro API route auth, clerk astro SSR.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1694,1697,1698,1699,1702],{"name":1695,"slug":1696,"type":13},"Astro","astro",{"name":1665,"slug":1666,"type":13},{"name":9,"slug":8,"type":13},{"name":1700,"slug":1701,"type":13},"Frontend","frontend",{"name":1703,"slug":1704,"type":13},"Serverless","serverless","2026-04-07T04:46:14.731808",{"slug":1707,"name":1707,"fn":1708,"description":1709,"org":1710,"tags":1711,"stars":23,"repoUrl":24,"updatedAt":1723},"clerk-backend-api","execute Clerk Backend API requests","Clerk Backend REST API explorer and executor. Browse tags, inspect endpoint schemas, and execute authenticated requests. Use when listing users, managing organizations, or calling any Clerk API endpoint.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1712,1715,1716,1719,1720],{"name":1713,"slug":1714,"type":13},"API Development","api-development",{"name":1665,"slug":1666,"type":13},{"name":1717,"slug":1718,"type":13},"Backend","backend",{"name":9,"slug":8,"type":13},{"name":1721,"slug":1722,"type":13},"REST API","rest-api","2026-04-10T05:00:08.728072",{"slug":1725,"name":1725,"fn":1726,"description":1727,"org":1728,"tags":1729,"stars":23,"repoUrl":24,"updatedAt":1739},"clerk-billing","manage subscriptions with Clerk Billing","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 billing webhooks. Use for SaaS monetization, plan gating, checkout flows, trials, invoicing, and subscription lifecycle management.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1730,1731,1732,1733,1736],{"name":1665,"slug":1666,"type":13},{"name":9,"slug":8,"type":13},{"name":1700,"slug":1701,"type":13},{"name":1734,"slug":1735,"type":13},"Payments","payments",{"name":1737,"slug":1738,"type":13},"SaaS","saas","2026-04-29T05:37:27.130955",{"slug":1741,"name":1741,"fn":1742,"description":1743,"org":1744,"tags":1745,"stars":23,"repoUrl":24,"updatedAt":1757},"clerk-chrome-extension-patterns","implement Clerk auth in Chrome Extensions","Chrome Extension auth with @clerk\u002Fchrome-extension -- popup\u002Fsidepanel setup, syncHost for OAuth\u002FSAML via web app, createClerkClient for service workers and headless extensions, stable CRX ID. Triggers on: Chrome extension auth, Plasmo clerk, popup sign-in, syncHost, background service worker token, createClerkClient, headless extension.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1746,1749,1750,1751,1754],{"name":1747,"slug":1748,"type":13},"Auth","auth",{"name":9,"slug":8,"type":13},{"name":1700,"slug":1701,"type":13},{"name":1752,"slug":1753,"type":13},"OAuth","oauth",{"name":1755,"slug":1756,"type":13},"Security","security","2026-04-07T04:46:08.489328",{"slug":1759,"name":1759,"fn":1760,"description":1761,"org":1762,"tags":1763,"stars":23,"repoUrl":24,"updatedAt":1774},"clerk-cli","manage Clerk authentication and instances via CLI","Operate the Clerk CLI (`clerk` binary) for authentication, user\u002Forg\u002Fsession management, impersonation, local webhook testing, deploy verification, instance config, env keys, feature toggles, and any Clerk Backend, Platform, or Frontend API call. Use when the user mentions Clerk management tasks, \"list clerk users\", \"impersonate a user\", \"test webhooks locally\", \"enable orgs\", \"enable billing\", \"clerk env pull\", \"clerk doctor\", \"clerk deploy\", \"clerk api\", or any ad-hoc Clerk API request. Prefer the CLI over raw HTTP: it handles auth, key resolution, app\u002Finstance targeting, and formatting automatically.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1764,1765,1766,1767,1770,1773],{"name":1713,"slug":1714,"type":13},{"name":1665,"slug":1666,"type":13},{"name":9,"slug":8,"type":13},{"name":1768,"slug":1769,"type":13},"CLI","cli",{"name":1771,"slug":1772,"type":13},"Deployment","deployment",{"name":1755,"slug":1756,"type":13},"2026-07-31T05:52:40.580813",{"slug":1776,"name":1776,"fn":1777,"description":1778,"org":1779,"tags":1780,"stars":23,"repoUrl":24,"updatedAt":1790},"clerk-custom-ui","customize Clerk UI and auth flows","Custom authentication flows and component appearance - hooks (useSignIn, useSignUp), themes, colors, fonts, CSS. Use for custom sign-in\u002Fsign-up flows, appearance styling, visual customization, branding.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1781,1782,1785,1786,1789],{"name":1665,"slug":1666,"type":13},{"name":1783,"slug":1784,"type":13},"Branding","branding",{"name":9,"slug":8,"type":13},{"name":1787,"slug":1788,"type":13},"Design","design",{"name":1700,"slug":1701,"type":13},"2026-04-10T05:00:10.109158",{"slug":1792,"name":1792,"fn":1793,"description":1794,"org":1795,"tags":1796,"stars":23,"repoUrl":24,"updatedAt":1807},"clerk-expo","implement Clerk authentication in Expo apps","Add Clerk authentication to Expo and React Native apps using @clerk\u002Fexpo. Use for Expo setup, prebuilt native components (AuthView, UserButton), custom sign-in\u002Fsign-up flows (email, password, SMS\u002Fphone OTP, MFA), OAuth\u002FSSO, native Google\u002FApple sign-in, Expo Router protected routes, biometrics, and push notifications. Do not use for native Swift\u002FiOS, native Android\u002FKotlin, or web-only framework projects.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1797,1798,1799,1802,1803,1804],{"name":1665,"slug":1666,"type":13},{"name":9,"slug":8,"type":13},{"name":1800,"slug":1801,"type":13},"Expo","expo",{"name":1700,"slug":1701,"type":13},{"name":18,"slug":19,"type":13},{"name":1805,"slug":1806,"type":13},"React Native","react-native","2026-05-19T06:48:47.074181",{"slug":1809,"name":1809,"fn":1810,"description":1811,"org":1812,"tags":1813,"stars":23,"repoUrl":24,"updatedAt":1822},"clerk-nextjs-patterns","implement advanced Next.js patterns with Clerk","Advanced Next.js patterns - middleware, Server Actions, caching with Clerk.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1814,1815,1816,1819],{"name":9,"slug":8,"type":13},{"name":1700,"slug":1701,"type":13},{"name":1817,"slug":1818,"type":13},"Next.js","next-js",{"name":1820,"slug":1821,"type":13},"Performance","performance","2026-04-10T05:00:15.80215",{"slug":1824,"name":1824,"fn":1825,"description":1826,"org":1827,"tags":1828,"stars":23,"repoUrl":24,"updatedAt":1836},"clerk-nuxt-patterns","implement Clerk auth in Nuxt 3 apps","Nuxt 3 auth patterns with @clerk\u002Fnuxt - middleware, composables, server API routes, SSR. Triggers on: Nuxt auth, useAuth composable, clerkMiddleware Nuxt, server API Clerk, Nuxt route protection.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1829,1830,1831,1832,1833],{"name":1665,"slug":1666,"type":13},{"name":1717,"slug":1718,"type":13},{"name":9,"slug":8,"type":13},{"name":1700,"slug":1701,"type":13},{"name":1834,"slug":1835,"type":13},"Nuxt","nuxt","2026-04-07T04:46:18.337538",{"slug":1838,"name":1838,"fn":1839,"description":1840,"org":1841,"tags":1842,"stars":23,"repoUrl":24,"updatedAt":1851},"clerk-orgs","manage Clerk Organizations for B2B SaaS","Clerk Organizations for B2B SaaS - create multi-tenant apps with org switching, role-based access, verified domains, and enterprise SSO. Use for team workspaces, RBAC, org-based routing, member management.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1843,1844,1847,1850],{"name":9,"slug":8,"type":13},{"name":1845,"slug":1846,"type":13},"Multi-Tenant","multi-tenant",{"name":1848,"slug":1849,"type":13},"RBAC","rbac",{"name":1737,"slug":1738,"type":13},"2026-04-10T05:00:14.40165",20,{"items":1854,"total":1852},[1855,1862,1869,1877,1885,1893,1901],{"slug":8,"name":8,"fn":1660,"description":1661,"org":1856,"tags":1857,"stars":23,"repoUrl":24,"updatedAt":1672},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1858,1859,1860,1861],{"name":1665,"slug":1666,"type":13},{"name":9,"slug":8,"type":13},{"name":18,"slug":19,"type":13},{"name":1670,"slug":1671,"type":13},{"slug":1674,"name":1674,"fn":1675,"description":1676,"org":1863,"tags":1864,"stars":23,"repoUrl":24,"updatedAt":1687},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1865,1866,1867,1868],{"name":1680,"slug":1681,"type":13},{"name":9,"slug":8,"type":13},{"name":1684,"slug":1685,"type":13},{"name":18,"slug":19,"type":13},{"slug":1689,"name":1689,"fn":1690,"description":1691,"org":1870,"tags":1871,"stars":23,"repoUrl":24,"updatedAt":1705},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1872,1873,1874,1875,1876],{"name":1695,"slug":1696,"type":13},{"name":1665,"slug":1666,"type":13},{"name":9,"slug":8,"type":13},{"name":1700,"slug":1701,"type":13},{"name":1703,"slug":1704,"type":13},{"slug":1707,"name":1707,"fn":1708,"description":1709,"org":1878,"tags":1879,"stars":23,"repoUrl":24,"updatedAt":1723},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1880,1881,1882,1883,1884],{"name":1713,"slug":1714,"type":13},{"name":1665,"slug":1666,"type":13},{"name":1717,"slug":1718,"type":13},{"name":9,"slug":8,"type":13},{"name":1721,"slug":1722,"type":13},{"slug":1725,"name":1725,"fn":1726,"description":1727,"org":1886,"tags":1887,"stars":23,"repoUrl":24,"updatedAt":1739},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1888,1889,1890,1891,1892],{"name":1665,"slug":1666,"type":13},{"name":9,"slug":8,"type":13},{"name":1700,"slug":1701,"type":13},{"name":1734,"slug":1735,"type":13},{"name":1737,"slug":1738,"type":13},{"slug":1741,"name":1741,"fn":1742,"description":1743,"org":1894,"tags":1895,"stars":23,"repoUrl":24,"updatedAt":1757},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1896,1897,1898,1899,1900],{"name":1747,"slug":1748,"type":13},{"name":9,"slug":8,"type":13},{"name":1700,"slug":1701,"type":13},{"name":1752,"slug":1753,"type":13},{"name":1755,"slug":1756,"type":13},{"slug":1759,"name":1759,"fn":1760,"description":1761,"org":1902,"tags":1903,"stars":23,"repoUrl":24,"updatedAt":1774},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1904,1905,1906,1907,1908,1909],{"name":1713,"slug":1714,"type":13},{"name":1665,"slug":1666,"type":13},{"name":9,"slug":8,"type":13},{"name":1768,"slug":1769,"type":13},{"name":1771,"slug":1772,"type":13},{"name":1755,"slug":1756,"type":13}]