[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-callstack-assess-react-native-migration":3,"mdc--xgpftm-key":40,"related-org-callstack-assess-react-native-migration":1152,"related-repo-callstack-assess-react-native-migration":1324},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":29,"repoUrl":30,"updatedAt":31,"license":32,"forks":33,"topics":34,"repo":35,"sourceUrl":38,"mdContent":39},"assess-react-native-migration","assess mobile product React Native migration","Assesses whether and how an existing mobile product should migrate to React Native. Use when auditing one or more product repositories for migration readiness, including products whose iOS, Android, and other clients live in separate directories or repositories; choosing brownfield, greenfield, or a checkpoint-based path; defining a representative trial; or preparing a baseline and ROI decision before implementation. When product scope or material evidence is unavailable, grills the stakeholder with exactly one question per turn instead of sending a questionnaire.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"callstack","Callstack","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fcallstack.png","callstackincubator",[13,17,20,23,26],{"name":14,"slug":15,"type":16},"React Native","react-native","tag",{"name":18,"slug":19,"type":16},"Android","android",{"name":21,"slug":22,"type":16},"iOS","ios",{"name":24,"slug":25,"type":16},"Mobile","mobile",{"name":27,"slug":28,"type":16},"Migration","migration",1527,"https:\u002F\u002Fgithub.com\u002Fcallstackincubator\u002Fagent-skills","2026-07-11T05:40:57.94641","MIT",109,[],{"repoUrl":30,"stars":29,"forks":33,"topics":36,"description":37},[],"A collection of agent-optimized React Native skills for AI coding assistants.","https:\u002F\u002Fgithub.com\u002Fcallstackincubator\u002Fagent-skills\u002Ftree\u002FHEAD\u002Fskills\u002Fassess-react-native-migration","---\nname: assess-react-native-migration\ndescription: Assesses whether and how an existing mobile product should migrate to React Native. Use when auditing one or more product repositories for migration readiness, including products whose iOS, Android, and other clients live in separate directories or repositories; choosing brownfield, greenfield, or a checkpoint-based path; defining a representative trial; or preparing a baseline and ROI decision before implementation. When product scope or material evidence is unavailable, grills the stakeholder with exactly one question per turn instead of sending a questionnaire.\nlicense: MIT\nmetadata:\n  author: Callstack\n  tags: react-native, migration, assessment, brownfield, greenfield, ios, android, roi\n---\n\n# Assess React Native Migration\n\nProduce a read-only migration decision. Diagnose the product and delivery system; do not execute the migration.\n\n## Establish Product Scope\n\nRun the assessment from a workspace that exposes as many production client codebases as possible. The current checkout is not evidence that it contains the whole product.\n\nBefore assessing readiness:\n\n1. Inspect the current repository and every workspace root available to the agent.\n2. Infer supported client platforms from product documentation, CI, release configuration, workspace manifests, submodules, and references to sibling repositories.\n3. Locate each production client codebase, including separate native iOS and Android repositories, app variants, and any web client relevant to staffing or proposed code sharing.\n4. Record a platform inventory with the client, repository or path, evidence of product membership, and access status.\n\nWhen iOS and Android are both supported, inspect both native codebases before recommending a path. If a codebase remains unavailable, mark its evidence `unknown`, state that the assessment covers only the accessible platforms, and lower confidence accordingly. Do not infer that a platform is unsupported merely because its project is absent from the current repository.\n\n**Scope gate:** every supported production client is listed, and each codebase is accessible, explicitly unavailable, or confirmed not to exist.\n\n## First Response Gate\n\nWhen the scope gate has not passed, the first response must be exactly:\n\n```markdown\n**Question:** Where can I access the production codebase for each client platform this product supports, including iOS and Android if both exist?\n\n**Why it matters:** A migration path based on only one platform can miss native dependencies, product behavior, and delivery constraints that change the decision.\n```\n\nAfter the scope gate passes, grill rather than survey when repository evidence is unavailable.\n\nIf the measurable migration driver is unknown, the first response must be exactly:\n\n```markdown\n**Question:** What measurable delivery or business problem should a React Native migration solve?\n\n**Why it matters:** This determines whether migration is relevant and which outcomes the assessment must test.\n```\n\nIf the driver is already known, ask only the next highest-impact unknown using the same two-line shape. End the turn immediately after the question and reason. Do not add a preamble, questionnaire, recommendation, or implementation guidance.\n\n## Rules\n\n- Treat every production app as a source of truth, including undocumented behavior.\n- Inspect available code, CI, tests, release configuration, product documents, and runtime evidence before asking questions.\n- Compare iOS and Android explicitly where their implementation, behavior, dependencies, delivery, or roadmap differ.\n- Base product-wide claims only on evidence from every supported platform, or qualify their platform coverage.\n- Label material claims `observed`, `measured`, `reported`, `assumed`, or `unknown`.\n- Recommend from evidence, not an aggregate readiness score.\n- Default to gathering evidence, not to brownfield, greenfield, or migration itself.\n- Own the decision phase. Do not apply implementation skills or select Expo versus bare React Native before Path A is accepted.\n- Count only React Native's marginal value over the current native system.\n- Measure agents by accepted, verified work, not tokens, generated code, or pull requests.\n- Make no universal claims about duration, cost, code sharing, agent productivity, or ROI.\n\n## Select the Evidence Mode\n\nUse repository-backed assessment when source code or delivery artifacts are available:\n\n1. Complete the platform inventory and establish which repositories the assessment can inspect.\n2. For each accessible mobile codebase, locate app variants, CI, tests, release configuration, architecture records, and product documentation.\n3. Search each native codebase for SDKs, permissions, app extensions, storage, authentication, push, deep links, analytics, experiments, and platform-specific behavior.\n4. Cite repository names plus file paths and line numbers so evidence remains attributable when codebases are separate.\n5. Ask stakeholders only for missing codebase locations or for product, organizational, and operational facts the repositories cannot establish.\n\nUse interview assessment when the repository is unavailable or material evidence remains missing:\n\n1. Start with the measurable delivery or business problem unless the user already supplied it.\n2. Ask exactly one decision-changing question per turn.\n3. Explain in one sentence which path, risk, or assumption the answer affects.\n4. Challenge vague or contradictory answers with a narrower follow-up instead of accepting them as evidence.\n5. Record the answer, update the evidence state, and choose the next highest-impact unknown.\n6. Stop grilling when another answer cannot change the recommendation, confidence, or checkpoint.\n\nBefore the evidence gate passes, every response must contain only:\n\n```markdown\n**Question:** [one question]\n\n**Why it matters:** [one sentence]\n```\n\nDo not include a questionnaire, path recommendation, checkpoint, or implementation guidance during these turns. If the user pauses the interview, return the current evidence state and the single highest-impact unknown without pretending the assessment is complete.\n\n**Interview turn gate:** one answer has been requested, its decision impact is explicit, and no second question appears.\n\n## 1. Collect Decision Evidence\n\nState the decision, deadline, current alternative, and measurable driver. A framework preference is not a driver.\n\nInspect these dimensions:\n\n| Dimension | Minimum evidence |\n| --- | --- |\n| Product | Supported platforms, app variants, shared versus platform-specific roadmap, critical flows, accessibility, analytics, and edge cases |\n| Native surface | SDKs, modules, permissions, background work, app extensions, payments, hardware APIs, custom rendering, and viable React Native paths |\n| Continuity | Auth and sessions, secure and persisted storage, push tokens, deep links, subscriptions, installed-user update, legal, security, and offline constraints |\n| Verification | Reproducible builds, test accounts, manual and automated QA, device control, native-reference evidence, performance baselines, and independent review |\n| Release | Current cadence and recovery, internal distribution, flags, experiments, store rollout, and desired binary plus optional OTA lanes |\n| Ownership | Decision authority and owners for artifacts, parity, native boundaries, shared foundations, verification, and releases |\n| Agent governance | Approved model and source boundary, protected secrets and test data, least-privilege access, evidence retention, audit trail, and human architecture and release approval |\n| Delivery baseline | Duplicate implementation and review, waiting and handoffs, parity gap, two-platform verification, release metrics, defects, rework, and maintenance cost |\n\nFor an OTA-dependent plan, require an owner plus runtime compatibility, rollout, observability, rollback or republish, and audit policy. OTA availability alone is not a migration benefit.\n\nUse a small migration core that combines existing product and native knowledge with React Native migration expertise. Ask only for missing facts that could change the decision; expose the rest as assumptions.\n\n**Gate:** every dimension has evidence or an explicit unknown, and every path-blocking unknown is named.\n\n## 2. Choose a Path\n\nChoose one outcome and state why the alternatives lose.\n\n| Outcome | Recommend when |\n| --- | --- |\n| **Path A: brownfield** | Release or installed-user continuity dominates, native coupling is deep, flows can move independently, or whole-app cutover risk is unacceptable. Include the cost of host boundaries and dual architecture. |\n| **Path B: greenfield** | Behavior is recoverable, native dependencies have credible replacements, continuity can be proven, verification is strong, and legacy scope can be controlled until replacement. |\n| **Path C: greenfield-first checkpoint with brownfield fallback** | Greenfield offers a simpler target but material uncertainty remains, and completed React Native work can be proven inside the native hosts before scaling. |\n| **Defer** | The business case is plausible, but evidence, verification, ownership, budget, or release readiness is missing. Name the smallest readiness work and reopening condition. |\n| **Do not migrate** | The native system meets the desired outcomes, duplicated mobile delivery is not material, the roadmap is asymmetric, platform-specific work dominates, or risk-adjusted return is not credible. |\n\nTreat Path C as Callstack's emerging post-2025 operating model, not an industry benchmark. Agent access makes behavioral porting more viable; only a measured checkpoint on this product establishes speed and quality.\n\nAfter Path A is accepted, hand implementation planning to [react-native-brownfield-migration](..\u002Freact-native-brownfield-migration\u002FSKILL.md). Do not repeat its Expo, XCFramework, AAR, or host-integration guidance.\n\n**Gate:** one outcome is supported by decisive evidence, rejected alternatives have reasons, and confidence reflects evidence quality.\n\n## 3. Define a Representative Checkpoint\n\nUse a checkpoint for Path C and whenever one uncertainty could invalidate the recommended path. Set a fixed calendar and effort budget supplied by the organization. Select two or three vertical flows:\n\n1. A common flow covering UI, data, analytics, and navigation.\n2. An authenticated, stateful flow covering persistence, errors, and session behavior.\n3. The boundary most likely to disprove the plan, such as a native SDK, background task, hardware API, offline behavior, app extension, accessibility requirement, or low-end Android constraint.\n\nTie each flow to native source references, runtime evidence, owners, and parity scenarios. Do not select only easy screens.\n\nDefine measurable acceptance criteria against the existing product:\n\n- Behavior, states, validation, errors, analytics, accessibility, and visual output match the native reference.\n- Auth, storage, deep links, push, and selected native boundaries work on required devices and OS versions.\n- Startup, interaction, memory, and crash behavior meet agreed baselines or tolerances.\n- CI, internal distribution, observability, and the intended release lane work reliably enough to continue.\n- Every flow has device-level evidence and an independent review with clean context.\n- Path C packages and opens at least one representative React Native flow in each required native host.\n\nRun two passes on at least one flow:\n\n1. **Faithful pass:** preserve behavior, analytics, accessibility, states, and edge cases. Record native-shaped architecture retained for parity.\n2. **Idiomatic pass:** introduce React component composition, clear state boundaries, typed navigation, reusable primitives, suitable tests, and measured performance. Repeat parity and device checks.\n\nBefore scaling, assign owners for `MIGRATION.md`, `SCREENS.tsv`, `STATE_AND_STORAGE.tsv`, `DEPENDENCIES.tsv`, `EVENTS.tsv`, and `PARITY_CHECKS.md`. During assessment, identify missing artifacts rather than creating full inventories unless asked.\n\nEnd with one decision: continue greenfield, continue Path C, move completed work into Path A, defer, or stop. Do not extend the checkpoint merely because its result is inconvenient.\n\n**Gate:** flows, budget, criteria, evidence, owners, and terminal decisions are explicit.\n\n## 4. Test the Economics\n\nMap one representative change from ready-for-implementation to verified availability on both platforms. Capture two clocks:\n\n1. **Change lead time:** commit to an artifact available to a production cohort; separate binary and OTA delivery.\n2. **Cross-platform feature lead time:** ready-for-implementation to verified availability on iOS and Android.\n\nCount potential return from removed duplicate implementation and business-logic review, lower parity coordination, engineer mobility, and measured release or recovery improvements. Keep iOS and Android device verification in the model. Keep web convergence outside the base case unless separately funded and assessed.\n\nCount full investment: checkpoint, dual maintenance, native modules, training, idiomatic second pass, testing and device automation, observability, release infrastructure, platform ownership, cutover, and native-surface retirement.\n\nDo not invent payback inputs. Use ranges when supplied data is uncertain. Revise, defer, or stop when verification and boundary work consume expected savings, native surfaces keep growing, dual maintenance has no retirement bound, agents add rework without verified throughput, parity improves without delivery improvement, or released capacity has no planned use.\n\n**Gate:** marginal benefits and full investment can be compared without treating two-platform verification as removed work.\n\n## Output Contract\n\nUse this contract only after the evidence gate passes or when the user ends the interview.\n\nReturn a concise report in this order:\n\n1. **Recommendation:** outcome, confidence, decisive reason, and decision boundary.\n2. **Evidence:** platform inventory, coverage limits, and material findings with source status and platform differences.\n3. **Assumptions and blockers:** unknowns ordered by decision impact.\n4. **Checkpoint:** budget, flows, criteria, owners, evidence, and terminal decisions.\n5. **Baseline and ROI:** measured inputs, missing inputs, counted return, full investment, and exclusions.\n6. **Next decision:** who decides what, using which evidence, and when.\n\nKeep the conclusion diagnostic. If execution comes up, state only that orchestration, task contracts, prompts, retry rules, and private agents are engagement-specific. Never expose or invent private implementation material.\n",{"data":41,"body":44},{"name":4,"description":6,"license":32,"metadata":42},{"author":9,"tags":43},"react-native, migration, assessment, brownfield, greenfield, ios, android, roi",{"type":45,"children":46},"root",[47,55,61,68,73,78,103,117,128,134,139,210,215,220,274,279,285,381,387,392,420,425,458,463,517,522,532,538,543,548,680,685,690,700,706,711,813,818,832,841,847,852,870,875,880,913,918,941,990,995,1004,1010,1015,1038,1043,1048,1053,1062,1068,1073,1078,1141,1146],{"type":48,"tag":49,"props":50,"children":51},"element","h1",{"id":4},[52],{"type":53,"value":54},"text","Assess React Native Migration",{"type":48,"tag":56,"props":57,"children":58},"p",{},[59],{"type":53,"value":60},"Produce a read-only migration decision. Diagnose the product and delivery system; do not execute the migration.",{"type":48,"tag":62,"props":63,"children":65},"h2",{"id":64},"establish-product-scope",[66],{"type":53,"value":67},"Establish Product Scope",{"type":48,"tag":56,"props":69,"children":70},{},[71],{"type":53,"value":72},"Run the assessment from a workspace that exposes as many production client codebases as possible. The current checkout is not evidence that it contains the whole product.",{"type":48,"tag":56,"props":74,"children":75},{},[76],{"type":53,"value":77},"Before assessing readiness:",{"type":48,"tag":79,"props":80,"children":81},"ol",{},[82,88,93,98],{"type":48,"tag":83,"props":84,"children":85},"li",{},[86],{"type":53,"value":87},"Inspect the current repository and every workspace root available to the agent.",{"type":48,"tag":83,"props":89,"children":90},{},[91],{"type":53,"value":92},"Infer supported client platforms from product documentation, CI, release configuration, workspace manifests, submodules, and references to sibling repositories.",{"type":48,"tag":83,"props":94,"children":95},{},[96],{"type":53,"value":97},"Locate each production client codebase, including separate native iOS and Android repositories, app variants, and any web client relevant to staffing or proposed code sharing.",{"type":48,"tag":83,"props":99,"children":100},{},[101],{"type":53,"value":102},"Record a platform inventory with the client, repository or path, evidence of product membership, and access status.",{"type":48,"tag":56,"props":104,"children":105},{},[106,108,115],{"type":53,"value":107},"When iOS and Android are both supported, inspect both native codebases before recommending a path. If a codebase remains unavailable, mark its evidence ",{"type":48,"tag":109,"props":110,"children":112},"code",{"className":111},[],[113],{"type":53,"value":114},"unknown",{"type":53,"value":116},", state that the assessment covers only the accessible platforms, and lower confidence accordingly. Do not infer that a platform is unsupported merely because its project is absent from the current repository.",{"type":48,"tag":56,"props":118,"children":119},{},[120,126],{"type":48,"tag":121,"props":122,"children":123},"strong",{},[124],{"type":53,"value":125},"Scope gate:",{"type":53,"value":127}," every supported production client is listed, and each codebase is accessible, explicitly unavailable, or confirmed not to exist.",{"type":48,"tag":62,"props":129,"children":131},{"id":130},"first-response-gate",[132],{"type":53,"value":133},"First Response Gate",{"type":48,"tag":56,"props":135,"children":136},{},[137],{"type":53,"value":138},"When the scope gate has not passed, the first response must be exactly:",{"type":48,"tag":140,"props":141,"children":146},"pre",{"className":142,"code":143,"language":144,"meta":145,"style":145},"language-markdown shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","**Question:** Where can I access the production codebase for each client platform this product supports, including iOS and Android if both exist?\n\n**Why it matters:** A migration path based on only one platform can miss native dependencies, product behavior, and delivery constraints that change the decision.\n","markdown","",[147],{"type":48,"tag":109,"props":148,"children":149},{"__ignoreMap":145},[150,178,188],{"type":48,"tag":151,"props":152,"children":155},"span",{"class":153,"line":154},"line",1,[156,162,168,172],{"type":48,"tag":151,"props":157,"children":159},{"style":158},"--shiki-light:#39ADB5;--shiki-light-font-weight:bold;--shiki-default:#89DDFF;--shiki-default-font-weight:bold;--shiki-dark:#89DDFF;--shiki-dark-font-weight:bold",[160],{"type":53,"value":161},"**",{"type":48,"tag":151,"props":163,"children":165},{"style":164},"--shiki-light:#E53935;--shiki-light-font-weight:bold;--shiki-default:#F07178;--shiki-default-font-weight:bold;--shiki-dark:#F07178;--shiki-dark-font-weight:bold",[166],{"type":53,"value":167},"Question:",{"type":48,"tag":151,"props":169,"children":170},{"style":158},[171],{"type":53,"value":161},{"type":48,"tag":151,"props":173,"children":175},{"style":174},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[176],{"type":53,"value":177}," Where can I access the production codebase for each client platform this product supports, including iOS and Android if both exist?\n",{"type":48,"tag":151,"props":179,"children":181},{"class":153,"line":180},2,[182],{"type":48,"tag":151,"props":183,"children":185},{"emptyLinePlaceholder":184},true,[186],{"type":53,"value":187},"\n",{"type":48,"tag":151,"props":189,"children":191},{"class":153,"line":190},3,[192,196,201,205],{"type":48,"tag":151,"props":193,"children":194},{"style":158},[195],{"type":53,"value":161},{"type":48,"tag":151,"props":197,"children":198},{"style":164},[199],{"type":53,"value":200},"Why it matters:",{"type":48,"tag":151,"props":202,"children":203},{"style":158},[204],{"type":53,"value":161},{"type":48,"tag":151,"props":206,"children":207},{"style":174},[208],{"type":53,"value":209}," A migration path based on only one platform can miss native dependencies, product behavior, and delivery constraints that change the decision.\n",{"type":48,"tag":56,"props":211,"children":212},{},[213],{"type":53,"value":214},"After the scope gate passes, grill rather than survey when repository evidence is unavailable.",{"type":48,"tag":56,"props":216,"children":217},{},[218],{"type":53,"value":219},"If the measurable migration driver is unknown, the first response must be exactly:",{"type":48,"tag":140,"props":221,"children":223},{"className":142,"code":222,"language":144,"meta":145,"style":145},"**Question:** What measurable delivery or business problem should a React Native migration solve?\n\n**Why it matters:** This determines whether migration is relevant and which outcomes the assessment must test.\n",[224],{"type":48,"tag":109,"props":225,"children":226},{"__ignoreMap":145},[227,247,254],{"type":48,"tag":151,"props":228,"children":229},{"class":153,"line":154},[230,234,238,242],{"type":48,"tag":151,"props":231,"children":232},{"style":158},[233],{"type":53,"value":161},{"type":48,"tag":151,"props":235,"children":236},{"style":164},[237],{"type":53,"value":167},{"type":48,"tag":151,"props":239,"children":240},{"style":158},[241],{"type":53,"value":161},{"type":48,"tag":151,"props":243,"children":244},{"style":174},[245],{"type":53,"value":246}," What measurable delivery or business problem should a React Native migration solve?\n",{"type":48,"tag":151,"props":248,"children":249},{"class":153,"line":180},[250],{"type":48,"tag":151,"props":251,"children":252},{"emptyLinePlaceholder":184},[253],{"type":53,"value":187},{"type":48,"tag":151,"props":255,"children":256},{"class":153,"line":190},[257,261,265,269],{"type":48,"tag":151,"props":258,"children":259},{"style":158},[260],{"type":53,"value":161},{"type":48,"tag":151,"props":262,"children":263},{"style":164},[264],{"type":53,"value":200},{"type":48,"tag":151,"props":266,"children":267},{"style":158},[268],{"type":53,"value":161},{"type":48,"tag":151,"props":270,"children":271},{"style":174},[272],{"type":53,"value":273}," This determines whether migration is relevant and which outcomes the assessment must test.\n",{"type":48,"tag":56,"props":275,"children":276},{},[277],{"type":53,"value":278},"If the driver is already known, ask only the next highest-impact unknown using the same two-line shape. End the turn immediately after the question and reason. Do not add a preamble, questionnaire, recommendation, or implementation guidance.",{"type":48,"tag":62,"props":280,"children":282},{"id":281},"rules",[283],{"type":53,"value":284},"Rules",{"type":48,"tag":286,"props":287,"children":288},"ul",{},[289,294,299,304,309,351,356,361,366,371,376],{"type":48,"tag":83,"props":290,"children":291},{},[292],{"type":53,"value":293},"Treat every production app as a source of truth, including undocumented behavior.",{"type":48,"tag":83,"props":295,"children":296},{},[297],{"type":53,"value":298},"Inspect available code, CI, tests, release configuration, product documents, and runtime evidence before asking questions.",{"type":48,"tag":83,"props":300,"children":301},{},[302],{"type":53,"value":303},"Compare iOS and Android explicitly where their implementation, behavior, dependencies, delivery, or roadmap differ.",{"type":48,"tag":83,"props":305,"children":306},{},[307],{"type":53,"value":308},"Base product-wide claims only on evidence from every supported platform, or qualify their platform coverage.",{"type":48,"tag":83,"props":310,"children":311},{},[312,314,320,322,328,329,335,336,342,344,349],{"type":53,"value":313},"Label material claims ",{"type":48,"tag":109,"props":315,"children":317},{"className":316},[],[318],{"type":53,"value":319},"observed",{"type":53,"value":321},", ",{"type":48,"tag":109,"props":323,"children":325},{"className":324},[],[326],{"type":53,"value":327},"measured",{"type":53,"value":321},{"type":48,"tag":109,"props":330,"children":332},{"className":331},[],[333],{"type":53,"value":334},"reported",{"type":53,"value":321},{"type":48,"tag":109,"props":337,"children":339},{"className":338},[],[340],{"type":53,"value":341},"assumed",{"type":53,"value":343},", or ",{"type":48,"tag":109,"props":345,"children":347},{"className":346},[],[348],{"type":53,"value":114},{"type":53,"value":350},".",{"type":48,"tag":83,"props":352,"children":353},{},[354],{"type":53,"value":355},"Recommend from evidence, not an aggregate readiness score.",{"type":48,"tag":83,"props":357,"children":358},{},[359],{"type":53,"value":360},"Default to gathering evidence, not to brownfield, greenfield, or migration itself.",{"type":48,"tag":83,"props":362,"children":363},{},[364],{"type":53,"value":365},"Own the decision phase. Do not apply implementation skills or select Expo versus bare React Native before Path A is accepted.",{"type":48,"tag":83,"props":367,"children":368},{},[369],{"type":53,"value":370},"Count only React Native's marginal value over the current native system.",{"type":48,"tag":83,"props":372,"children":373},{},[374],{"type":53,"value":375},"Measure agents by accepted, verified work, not tokens, generated code, or pull requests.",{"type":48,"tag":83,"props":377,"children":378},{},[379],{"type":53,"value":380},"Make no universal claims about duration, cost, code sharing, agent productivity, or ROI.",{"type":48,"tag":62,"props":382,"children":384},{"id":383},"select-the-evidence-mode",[385],{"type":53,"value":386},"Select the Evidence Mode",{"type":48,"tag":56,"props":388,"children":389},{},[390],{"type":53,"value":391},"Use repository-backed assessment when source code or delivery artifacts are available:",{"type":48,"tag":79,"props":393,"children":394},{},[395,400,405,410,415],{"type":48,"tag":83,"props":396,"children":397},{},[398],{"type":53,"value":399},"Complete the platform inventory and establish which repositories the assessment can inspect.",{"type":48,"tag":83,"props":401,"children":402},{},[403],{"type":53,"value":404},"For each accessible mobile codebase, locate app variants, CI, tests, release configuration, architecture records, and product documentation.",{"type":48,"tag":83,"props":406,"children":407},{},[408],{"type":53,"value":409},"Search each native codebase for SDKs, permissions, app extensions, storage, authentication, push, deep links, analytics, experiments, and platform-specific behavior.",{"type":48,"tag":83,"props":411,"children":412},{},[413],{"type":53,"value":414},"Cite repository names plus file paths and line numbers so evidence remains attributable when codebases are separate.",{"type":48,"tag":83,"props":416,"children":417},{},[418],{"type":53,"value":419},"Ask stakeholders only for missing codebase locations or for product, organizational, and operational facts the repositories cannot establish.",{"type":48,"tag":56,"props":421,"children":422},{},[423],{"type":53,"value":424},"Use interview assessment when the repository is unavailable or material evidence remains missing:",{"type":48,"tag":79,"props":426,"children":427},{},[428,433,438,443,448,453],{"type":48,"tag":83,"props":429,"children":430},{},[431],{"type":53,"value":432},"Start with the measurable delivery or business problem unless the user already supplied it.",{"type":48,"tag":83,"props":434,"children":435},{},[436],{"type":53,"value":437},"Ask exactly one decision-changing question per turn.",{"type":48,"tag":83,"props":439,"children":440},{},[441],{"type":53,"value":442},"Explain in one sentence which path, risk, or assumption the answer affects.",{"type":48,"tag":83,"props":444,"children":445},{},[446],{"type":53,"value":447},"Challenge vague or contradictory answers with a narrower follow-up instead of accepting them as evidence.",{"type":48,"tag":83,"props":449,"children":450},{},[451],{"type":53,"value":452},"Record the answer, update the evidence state, and choose the next highest-impact unknown.",{"type":48,"tag":83,"props":454,"children":455},{},[456],{"type":53,"value":457},"Stop grilling when another answer cannot change the recommendation, confidence, or checkpoint.",{"type":48,"tag":56,"props":459,"children":460},{},[461],{"type":53,"value":462},"Before the evidence gate passes, every response must contain only:",{"type":48,"tag":140,"props":464,"children":466},{"className":142,"code":465,"language":144,"meta":145,"style":145},"**Question:** [one question]\n\n**Why it matters:** [one sentence]\n",[467],{"type":48,"tag":109,"props":468,"children":469},{"__ignoreMap":145},[470,490,497],{"type":48,"tag":151,"props":471,"children":472},{"class":153,"line":154},[473,477,481,485],{"type":48,"tag":151,"props":474,"children":475},{"style":158},[476],{"type":53,"value":161},{"type":48,"tag":151,"props":478,"children":479},{"style":164},[480],{"type":53,"value":167},{"type":48,"tag":151,"props":482,"children":483},{"style":158},[484],{"type":53,"value":161},{"type":48,"tag":151,"props":486,"children":487},{"style":174},[488],{"type":53,"value":489}," [one question]\n",{"type":48,"tag":151,"props":491,"children":492},{"class":153,"line":180},[493],{"type":48,"tag":151,"props":494,"children":495},{"emptyLinePlaceholder":184},[496],{"type":53,"value":187},{"type":48,"tag":151,"props":498,"children":499},{"class":153,"line":190},[500,504,508,512],{"type":48,"tag":151,"props":501,"children":502},{"style":158},[503],{"type":53,"value":161},{"type":48,"tag":151,"props":505,"children":506},{"style":164},[507],{"type":53,"value":200},{"type":48,"tag":151,"props":509,"children":510},{"style":158},[511],{"type":53,"value":161},{"type":48,"tag":151,"props":513,"children":514},{"style":174},[515],{"type":53,"value":516}," [one sentence]\n",{"type":48,"tag":56,"props":518,"children":519},{},[520],{"type":53,"value":521},"Do not include a questionnaire, path recommendation, checkpoint, or implementation guidance during these turns. If the user pauses the interview, return the current evidence state and the single highest-impact unknown without pretending the assessment is complete.",{"type":48,"tag":56,"props":523,"children":524},{},[525,530],{"type":48,"tag":121,"props":526,"children":527},{},[528],{"type":53,"value":529},"Interview turn gate:",{"type":53,"value":531}," one answer has been requested, its decision impact is explicit, and no second question appears.",{"type":48,"tag":62,"props":533,"children":535},{"id":534},"_1-collect-decision-evidence",[536],{"type":53,"value":537},"1. Collect Decision Evidence",{"type":48,"tag":56,"props":539,"children":540},{},[541],{"type":53,"value":542},"State the decision, deadline, current alternative, and measurable driver. A framework preference is not a driver.",{"type":48,"tag":56,"props":544,"children":545},{},[546],{"type":53,"value":547},"Inspect these dimensions:",{"type":48,"tag":549,"props":550,"children":551},"table",{},[552,571],{"type":48,"tag":553,"props":554,"children":555},"thead",{},[556],{"type":48,"tag":557,"props":558,"children":559},"tr",{},[560,566],{"type":48,"tag":561,"props":562,"children":563},"th",{},[564],{"type":53,"value":565},"Dimension",{"type":48,"tag":561,"props":567,"children":568},{},[569],{"type":53,"value":570},"Minimum evidence",{"type":48,"tag":572,"props":573,"children":574},"tbody",{},[575,589,602,615,628,641,654,667],{"type":48,"tag":557,"props":576,"children":577},{},[578,584],{"type":48,"tag":579,"props":580,"children":581},"td",{},[582],{"type":53,"value":583},"Product",{"type":48,"tag":579,"props":585,"children":586},{},[587],{"type":53,"value":588},"Supported platforms, app variants, shared versus platform-specific roadmap, critical flows, accessibility, analytics, and edge cases",{"type":48,"tag":557,"props":590,"children":591},{},[592,597],{"type":48,"tag":579,"props":593,"children":594},{},[595],{"type":53,"value":596},"Native surface",{"type":48,"tag":579,"props":598,"children":599},{},[600],{"type":53,"value":601},"SDKs, modules, permissions, background work, app extensions, payments, hardware APIs, custom rendering, and viable React Native paths",{"type":48,"tag":557,"props":603,"children":604},{},[605,610],{"type":48,"tag":579,"props":606,"children":607},{},[608],{"type":53,"value":609},"Continuity",{"type":48,"tag":579,"props":611,"children":612},{},[613],{"type":53,"value":614},"Auth and sessions, secure and persisted storage, push tokens, deep links, subscriptions, installed-user update, legal, security, and offline constraints",{"type":48,"tag":557,"props":616,"children":617},{},[618,623],{"type":48,"tag":579,"props":619,"children":620},{},[621],{"type":53,"value":622},"Verification",{"type":48,"tag":579,"props":624,"children":625},{},[626],{"type":53,"value":627},"Reproducible builds, test accounts, manual and automated QA, device control, native-reference evidence, performance baselines, and independent review",{"type":48,"tag":557,"props":629,"children":630},{},[631,636],{"type":48,"tag":579,"props":632,"children":633},{},[634],{"type":53,"value":635},"Release",{"type":48,"tag":579,"props":637,"children":638},{},[639],{"type":53,"value":640},"Current cadence and recovery, internal distribution, flags, experiments, store rollout, and desired binary plus optional OTA lanes",{"type":48,"tag":557,"props":642,"children":643},{},[644,649],{"type":48,"tag":579,"props":645,"children":646},{},[647],{"type":53,"value":648},"Ownership",{"type":48,"tag":579,"props":650,"children":651},{},[652],{"type":53,"value":653},"Decision authority and owners for artifacts, parity, native boundaries, shared foundations, verification, and releases",{"type":48,"tag":557,"props":655,"children":656},{},[657,662],{"type":48,"tag":579,"props":658,"children":659},{},[660],{"type":53,"value":661},"Agent governance",{"type":48,"tag":579,"props":663,"children":664},{},[665],{"type":53,"value":666},"Approved model and source boundary, protected secrets and test data, least-privilege access, evidence retention, audit trail, and human architecture and release approval",{"type":48,"tag":557,"props":668,"children":669},{},[670,675],{"type":48,"tag":579,"props":671,"children":672},{},[673],{"type":53,"value":674},"Delivery baseline",{"type":48,"tag":579,"props":676,"children":677},{},[678],{"type":53,"value":679},"Duplicate implementation and review, waiting and handoffs, parity gap, two-platform verification, release metrics, defects, rework, and maintenance cost",{"type":48,"tag":56,"props":681,"children":682},{},[683],{"type":53,"value":684},"For an OTA-dependent plan, require an owner plus runtime compatibility, rollout, observability, rollback or republish, and audit policy. OTA availability alone is not a migration benefit.",{"type":48,"tag":56,"props":686,"children":687},{},[688],{"type":53,"value":689},"Use a small migration core that combines existing product and native knowledge with React Native migration expertise. Ask only for missing facts that could change the decision; expose the rest as assumptions.",{"type":48,"tag":56,"props":691,"children":692},{},[693,698],{"type":48,"tag":121,"props":694,"children":695},{},[696],{"type":53,"value":697},"Gate:",{"type":53,"value":699}," every dimension has evidence or an explicit unknown, and every path-blocking unknown is named.",{"type":48,"tag":62,"props":701,"children":703},{"id":702},"_2-choose-a-path",[704],{"type":53,"value":705},"2. Choose a Path",{"type":48,"tag":56,"props":707,"children":708},{},[709],{"type":53,"value":710},"Choose one outcome and state why the alternatives lose.",{"type":48,"tag":549,"props":712,"children":713},{},[714,730],{"type":48,"tag":553,"props":715,"children":716},{},[717],{"type":48,"tag":557,"props":718,"children":719},{},[720,725],{"type":48,"tag":561,"props":721,"children":722},{},[723],{"type":53,"value":724},"Outcome",{"type":48,"tag":561,"props":726,"children":727},{},[728],{"type":53,"value":729},"Recommend when",{"type":48,"tag":572,"props":731,"children":732},{},[733,749,765,781,797],{"type":48,"tag":557,"props":734,"children":735},{},[736,744],{"type":48,"tag":579,"props":737,"children":738},{},[739],{"type":48,"tag":121,"props":740,"children":741},{},[742],{"type":53,"value":743},"Path A: brownfield",{"type":48,"tag":579,"props":745,"children":746},{},[747],{"type":53,"value":748},"Release or installed-user continuity dominates, native coupling is deep, flows can move independently, or whole-app cutover risk is unacceptable. Include the cost of host boundaries and dual architecture.",{"type":48,"tag":557,"props":750,"children":751},{},[752,760],{"type":48,"tag":579,"props":753,"children":754},{},[755],{"type":48,"tag":121,"props":756,"children":757},{},[758],{"type":53,"value":759},"Path B: greenfield",{"type":48,"tag":579,"props":761,"children":762},{},[763],{"type":53,"value":764},"Behavior is recoverable, native dependencies have credible replacements, continuity can be proven, verification is strong, and legacy scope can be controlled until replacement.",{"type":48,"tag":557,"props":766,"children":767},{},[768,776],{"type":48,"tag":579,"props":769,"children":770},{},[771],{"type":48,"tag":121,"props":772,"children":773},{},[774],{"type":53,"value":775},"Path C: greenfield-first checkpoint with brownfield fallback",{"type":48,"tag":579,"props":777,"children":778},{},[779],{"type":53,"value":780},"Greenfield offers a simpler target but material uncertainty remains, and completed React Native work can be proven inside the native hosts before scaling.",{"type":48,"tag":557,"props":782,"children":783},{},[784,792],{"type":48,"tag":579,"props":785,"children":786},{},[787],{"type":48,"tag":121,"props":788,"children":789},{},[790],{"type":53,"value":791},"Defer",{"type":48,"tag":579,"props":793,"children":794},{},[795],{"type":53,"value":796},"The business case is plausible, but evidence, verification, ownership, budget, or release readiness is missing. Name the smallest readiness work and reopening condition.",{"type":48,"tag":557,"props":798,"children":799},{},[800,808],{"type":48,"tag":579,"props":801,"children":802},{},[803],{"type":48,"tag":121,"props":804,"children":805},{},[806],{"type":53,"value":807},"Do not migrate",{"type":48,"tag":579,"props":809,"children":810},{},[811],{"type":53,"value":812},"The native system meets the desired outcomes, duplicated mobile delivery is not material, the roadmap is asymmetric, platform-specific work dominates, or risk-adjusted return is not credible.",{"type":48,"tag":56,"props":814,"children":815},{},[816],{"type":53,"value":817},"Treat Path C as Callstack's emerging post-2025 operating model, not an industry benchmark. Agent access makes behavioral porting more viable; only a measured checkpoint on this product establishes speed and quality.",{"type":48,"tag":56,"props":819,"children":820},{},[821,823,830],{"type":53,"value":822},"After Path A is accepted, hand implementation planning to ",{"type":48,"tag":824,"props":825,"children":827},"a",{"href":826},"..\u002Freact-native-brownfield-migration\u002FSKILL.md",[828],{"type":53,"value":829},"react-native-brownfield-migration",{"type":53,"value":831},". Do not repeat its Expo, XCFramework, AAR, or host-integration guidance.",{"type":48,"tag":56,"props":833,"children":834},{},[835,839],{"type":48,"tag":121,"props":836,"children":837},{},[838],{"type":53,"value":697},{"type":53,"value":840}," one outcome is supported by decisive evidence, rejected alternatives have reasons, and confidence reflects evidence quality.",{"type":48,"tag":62,"props":842,"children":844},{"id":843},"_3-define-a-representative-checkpoint",[845],{"type":53,"value":846},"3. Define a Representative Checkpoint",{"type":48,"tag":56,"props":848,"children":849},{},[850],{"type":53,"value":851},"Use a checkpoint for Path C and whenever one uncertainty could invalidate the recommended path. Set a fixed calendar and effort budget supplied by the organization. Select two or three vertical flows:",{"type":48,"tag":79,"props":853,"children":854},{},[855,860,865],{"type":48,"tag":83,"props":856,"children":857},{},[858],{"type":53,"value":859},"A common flow covering UI, data, analytics, and navigation.",{"type":48,"tag":83,"props":861,"children":862},{},[863],{"type":53,"value":864},"An authenticated, stateful flow covering persistence, errors, and session behavior.",{"type":48,"tag":83,"props":866,"children":867},{},[868],{"type":53,"value":869},"The boundary most likely to disprove the plan, such as a native SDK, background task, hardware API, offline behavior, app extension, accessibility requirement, or low-end Android constraint.",{"type":48,"tag":56,"props":871,"children":872},{},[873],{"type":53,"value":874},"Tie each flow to native source references, runtime evidence, owners, and parity scenarios. Do not select only easy screens.",{"type":48,"tag":56,"props":876,"children":877},{},[878],{"type":53,"value":879},"Define measurable acceptance criteria against the existing product:",{"type":48,"tag":286,"props":881,"children":882},{},[883,888,893,898,903,908],{"type":48,"tag":83,"props":884,"children":885},{},[886],{"type":53,"value":887},"Behavior, states, validation, errors, analytics, accessibility, and visual output match the native reference.",{"type":48,"tag":83,"props":889,"children":890},{},[891],{"type":53,"value":892},"Auth, storage, deep links, push, and selected native boundaries work on required devices and OS versions.",{"type":48,"tag":83,"props":894,"children":895},{},[896],{"type":53,"value":897},"Startup, interaction, memory, and crash behavior meet agreed baselines or tolerances.",{"type":48,"tag":83,"props":899,"children":900},{},[901],{"type":53,"value":902},"CI, internal distribution, observability, and the intended release lane work reliably enough to continue.",{"type":48,"tag":83,"props":904,"children":905},{},[906],{"type":53,"value":907},"Every flow has device-level evidence and an independent review with clean context.",{"type":48,"tag":83,"props":909,"children":910},{},[911],{"type":53,"value":912},"Path C packages and opens at least one representative React Native flow in each required native host.",{"type":48,"tag":56,"props":914,"children":915},{},[916],{"type":53,"value":917},"Run two passes on at least one flow:",{"type":48,"tag":79,"props":919,"children":920},{},[921,931],{"type":48,"tag":83,"props":922,"children":923},{},[924,929],{"type":48,"tag":121,"props":925,"children":926},{},[927],{"type":53,"value":928},"Faithful pass:",{"type":53,"value":930}," preserve behavior, analytics, accessibility, states, and edge cases. Record native-shaped architecture retained for parity.",{"type":48,"tag":83,"props":932,"children":933},{},[934,939],{"type":48,"tag":121,"props":935,"children":936},{},[937],{"type":53,"value":938},"Idiomatic pass:",{"type":53,"value":940}," introduce React component composition, clear state boundaries, typed navigation, reusable primitives, suitable tests, and measured performance. Repeat parity and device checks.",{"type":48,"tag":56,"props":942,"children":943},{},[944,946,952,953,959,960,966,967,973,974,980,982,988],{"type":53,"value":945},"Before scaling, assign owners for ",{"type":48,"tag":109,"props":947,"children":949},{"className":948},[],[950],{"type":53,"value":951},"MIGRATION.md",{"type":53,"value":321},{"type":48,"tag":109,"props":954,"children":956},{"className":955},[],[957],{"type":53,"value":958},"SCREENS.tsv",{"type":53,"value":321},{"type":48,"tag":109,"props":961,"children":963},{"className":962},[],[964],{"type":53,"value":965},"STATE_AND_STORAGE.tsv",{"type":53,"value":321},{"type":48,"tag":109,"props":968,"children":970},{"className":969},[],[971],{"type":53,"value":972},"DEPENDENCIES.tsv",{"type":53,"value":321},{"type":48,"tag":109,"props":975,"children":977},{"className":976},[],[978],{"type":53,"value":979},"EVENTS.tsv",{"type":53,"value":981},", and ",{"type":48,"tag":109,"props":983,"children":985},{"className":984},[],[986],{"type":53,"value":987},"PARITY_CHECKS.md",{"type":53,"value":989},". During assessment, identify missing artifacts rather than creating full inventories unless asked.",{"type":48,"tag":56,"props":991,"children":992},{},[993],{"type":53,"value":994},"End with one decision: continue greenfield, continue Path C, move completed work into Path A, defer, or stop. Do not extend the checkpoint merely because its result is inconvenient.",{"type":48,"tag":56,"props":996,"children":997},{},[998,1002],{"type":48,"tag":121,"props":999,"children":1000},{},[1001],{"type":53,"value":697},{"type":53,"value":1003}," flows, budget, criteria, evidence, owners, and terminal decisions are explicit.",{"type":48,"tag":62,"props":1005,"children":1007},{"id":1006},"_4-test-the-economics",[1008],{"type":53,"value":1009},"4. Test the Economics",{"type":48,"tag":56,"props":1011,"children":1012},{},[1013],{"type":53,"value":1014},"Map one representative change from ready-for-implementation to verified availability on both platforms. Capture two clocks:",{"type":48,"tag":79,"props":1016,"children":1017},{},[1018,1028],{"type":48,"tag":83,"props":1019,"children":1020},{},[1021,1026],{"type":48,"tag":121,"props":1022,"children":1023},{},[1024],{"type":53,"value":1025},"Change lead time:",{"type":53,"value":1027}," commit to an artifact available to a production cohort; separate binary and OTA delivery.",{"type":48,"tag":83,"props":1029,"children":1030},{},[1031,1036],{"type":48,"tag":121,"props":1032,"children":1033},{},[1034],{"type":53,"value":1035},"Cross-platform feature lead time:",{"type":53,"value":1037}," ready-for-implementation to verified availability on iOS and Android.",{"type":48,"tag":56,"props":1039,"children":1040},{},[1041],{"type":53,"value":1042},"Count potential return from removed duplicate implementation and business-logic review, lower parity coordination, engineer mobility, and measured release or recovery improvements. Keep iOS and Android device verification in the model. Keep web convergence outside the base case unless separately funded and assessed.",{"type":48,"tag":56,"props":1044,"children":1045},{},[1046],{"type":53,"value":1047},"Count full investment: checkpoint, dual maintenance, native modules, training, idiomatic second pass, testing and device automation, observability, release infrastructure, platform ownership, cutover, and native-surface retirement.",{"type":48,"tag":56,"props":1049,"children":1050},{},[1051],{"type":53,"value":1052},"Do not invent payback inputs. Use ranges when supplied data is uncertain. Revise, defer, or stop when verification and boundary work consume expected savings, native surfaces keep growing, dual maintenance has no retirement bound, agents add rework without verified throughput, parity improves without delivery improvement, or released capacity has no planned use.",{"type":48,"tag":56,"props":1054,"children":1055},{},[1056,1060],{"type":48,"tag":121,"props":1057,"children":1058},{},[1059],{"type":53,"value":697},{"type":53,"value":1061}," marginal benefits and full investment can be compared without treating two-platform verification as removed work.",{"type":48,"tag":62,"props":1063,"children":1065},{"id":1064},"output-contract",[1066],{"type":53,"value":1067},"Output Contract",{"type":48,"tag":56,"props":1069,"children":1070},{},[1071],{"type":53,"value":1072},"Use this contract only after the evidence gate passes or when the user ends the interview.",{"type":48,"tag":56,"props":1074,"children":1075},{},[1076],{"type":53,"value":1077},"Return a concise report in this order:",{"type":48,"tag":79,"props":1079,"children":1080},{},[1081,1091,1101,1111,1121,1131],{"type":48,"tag":83,"props":1082,"children":1083},{},[1084,1089],{"type":48,"tag":121,"props":1085,"children":1086},{},[1087],{"type":53,"value":1088},"Recommendation:",{"type":53,"value":1090}," outcome, confidence, decisive reason, and decision boundary.",{"type":48,"tag":83,"props":1092,"children":1093},{},[1094,1099],{"type":48,"tag":121,"props":1095,"children":1096},{},[1097],{"type":53,"value":1098},"Evidence:",{"type":53,"value":1100}," platform inventory, coverage limits, and material findings with source status and platform differences.",{"type":48,"tag":83,"props":1102,"children":1103},{},[1104,1109],{"type":48,"tag":121,"props":1105,"children":1106},{},[1107],{"type":53,"value":1108},"Assumptions and blockers:",{"type":53,"value":1110}," unknowns ordered by decision impact.",{"type":48,"tag":83,"props":1112,"children":1113},{},[1114,1119],{"type":48,"tag":121,"props":1115,"children":1116},{},[1117],{"type":53,"value":1118},"Checkpoint:",{"type":53,"value":1120}," budget, flows, criteria, owners, evidence, and terminal decisions.",{"type":48,"tag":83,"props":1122,"children":1123},{},[1124,1129],{"type":48,"tag":121,"props":1125,"children":1126},{},[1127],{"type":53,"value":1128},"Baseline and ROI:",{"type":53,"value":1130}," measured inputs, missing inputs, counted return, full investment, and exclusions.",{"type":48,"tag":83,"props":1132,"children":1133},{},[1134,1139],{"type":48,"tag":121,"props":1135,"children":1136},{},[1137],{"type":53,"value":1138},"Next decision:",{"type":53,"value":1140}," who decides what, using which evidence, and when.",{"type":48,"tag":56,"props":1142,"children":1143},{},[1144],{"type":53,"value":1145},"Keep the conclusion diagnostic. If execution comes up, state only that orchestration, task contracts, prompts, retry rules, and private agents are engagement-specific. Never expose or invent private implementation material.",{"type":48,"tag":1147,"props":1148,"children":1149},"style",{},[1150],{"type":53,"value":1151},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":1153,"total":1323},[1154,1162,1174,1192,1206,1218,1232,1251,1266,1278,1295,1309],{"slug":4,"name":4,"fn":5,"description":6,"org":1155,"tags":1156,"stars":29,"repoUrl":30,"updatedAt":31},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1157,1158,1159,1160,1161],{"name":18,"slug":19,"type":16},{"name":21,"slug":22,"type":16},{"name":27,"slug":28,"type":16},{"name":24,"slug":25,"type":16},{"name":14,"slug":15,"type":16},{"slug":1163,"name":1163,"fn":1164,"description":1165,"org":1166,"tags":1167,"stars":29,"repoUrl":30,"updatedAt":1173},"create-react-native-library","scaffold React Native libraries","Scaffolds React Native libraries with create-react-native-library for standalone libraries or local native modules and views. Use when creating or working on React Native libraries or adding native functionality in an existing app.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1168,1171,1172],{"name":1169,"slug":1170,"type":16},"Engineering","engineering",{"name":24,"slug":25,"type":16},{"name":14,"slug":15,"type":16},"2026-06-26T07:57:53.098041",{"slug":1175,"name":1175,"fn":1176,"description":1177,"org":1178,"tags":1179,"stars":29,"repoUrl":30,"updatedAt":1191},"github","manage GitHub PRs with gh CLI","GitHub patterns using gh CLI for pull requests, stacked PRs, code review, branching strategies, and repository automation. Use when working with GitHub PRs, merging strategies, or repository management tasks.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1180,1183,1186,1188],{"name":1181,"slug":1182,"type":16},"CLI","cli",{"name":1184,"slug":1185,"type":16},"Code Review","code-review",{"name":1187,"slug":1175,"type":16},"GitHub",{"name":1189,"slug":1190,"type":16},"Pull Requests","pull-requests","2026-04-06T18:06:37.430056",{"slug":1193,"name":1193,"fn":1194,"description":1195,"org":1196,"tags":1197,"stars":29,"repoUrl":30,"updatedAt":1205},"github-actions","build React Native apps in GitHub Actions","GitHub Actions workflow patterns for React Native iOS simulator and Android emulator cloud builds with downloadable artifacts. Use when setting up CI build pipelines or downloading GitHub Actions artifacts via gh CLI and GitHub API.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1198,1201,1203,1204],{"name":1199,"slug":1200,"type":16},"CI\u002FCD","cicd",{"name":1202,"slug":1193,"type":16},"GitHub Actions",{"name":24,"slug":25,"type":16},{"name":14,"slug":15,"type":16},"2026-04-06T18:06:38.661459",{"slug":1207,"name":1207,"fn":1208,"description":1209,"org":1210,"tags":1211,"stars":29,"repoUrl":30,"updatedAt":1217},"react-native-best-practices","optimize React Native app performance","Provides React Native performance optimization guidelines for FPS, TTI, bundle size, memory leaks, re-renders, and animations. Applies to tasks involving Hermes optimization, JS thread blocking, bridge overhead, FlashList, native modules, or debugging jank and frame drops.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1212,1213,1216],{"name":24,"slug":25,"type":16},{"name":1214,"slug":1215,"type":16},"Performance","performance",{"name":14,"slug":15,"type":16},"2026-04-06T18:06:41.158478",{"slug":829,"name":829,"fn":1219,"description":1220,"org":1221,"tags":1222,"stars":29,"repoUrl":30,"updatedAt":1231},"migrate native apps to React Native","Implements an accepted incremental brownfield migration from native iOS or Android to React Native or Expo using @callstack\u002Freact-native-brownfield. Use after the brownfield path has been selected, when setting up the integration, packaging XCFramework or AAR artifacts, or adding React Native surfaces to native hosts.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1223,1224,1227,1228,1229,1230],{"name":18,"slug":19,"type":16},{"name":1225,"slug":1226,"type":16},"Expo","expo",{"name":21,"slug":22,"type":16},{"name":27,"slug":28,"type":16},{"name":24,"slug":25,"type":16},{"name":14,"slug":15,"type":16},"2026-04-06T18:06:42.392689",{"slug":1233,"name":1233,"fn":1234,"description":1235,"org":1236,"tags":1237,"stars":29,"repoUrl":30,"updatedAt":1250},"react-native-tv-best-practices","review React Native TV application quality","Reviews React Native TV apps for focus\u002FD-pad navigation, 10-foot UI layout, TV playback\u002FDRM integration, low-memory TV performance, and TV accessibility. Use when building, debugging, or reviewing react-native-tvos, Expo TV, Amazon Vega\u002FKepler, or React Native web TV targets where the issue depends on remote input, TV focus, TV packaging, TV hardware, or TV playback constraints.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1238,1241,1244,1245,1246,1247],{"name":1239,"slug":1240,"type":16},"Accessibility","accessibility",{"name":1242,"slug":1243,"type":16},"Frontend","frontend",{"name":24,"slug":25,"type":16},{"name":1214,"slug":1215,"type":16},{"name":14,"slug":15,"type":16},{"name":1248,"slug":1249,"type":16},"UI Components","ui-components","2026-06-28T08:04:16.29881",{"slug":1252,"name":1252,"fn":1253,"description":1254,"org":1255,"tags":1256,"stars":29,"repoUrl":30,"updatedAt":1265},"react-navigation","configure React Navigation UI patterns","Provides React Navigation UI patterns for stacks, tabs, drawers etc. Use when building navigation UIs with React Navigation, configuring headers, bottom sheets or handling safe areas and insets.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1257,1258,1259,1262],{"name":1242,"slug":1243,"type":16},{"name":24,"slug":25,"type":16},{"name":1260,"slug":1261,"type":16},"Navigation","navigation",{"name":1263,"slug":1264,"type":16},"React","react","2026-06-26T07:57:54.478042",{"slug":1267,"name":1267,"fn":1268,"description":1269,"org":1270,"tags":1271,"stars":29,"repoUrl":30,"updatedAt":1277},"upgrading-react-native","upgrade React Native apps","Upgrades React Native apps to newer versions by applying rn-diff-purge template diffs, updating package.json dependencies, migrating native iOS and Android configuration, resolving CocoaPods and Gradle changes, and handling breaking API updates. Use when upgrading React Native, bumping RN version, updating from RN 0.x to 0.y, or migrating Expo SDK alongside a React Native upgrade.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1272,1273,1274,1275,1276],{"name":18,"slug":19,"type":16},{"name":21,"slug":22,"type":16},{"name":27,"slug":28,"type":16},{"name":24,"slug":25,"type":16},{"name":14,"slug":15,"type":16},"2026-04-06T18:06:39.914409",{"slug":1279,"name":1279,"fn":1280,"description":1281,"org":1282,"tags":1283,"stars":1292,"repoUrl":1293,"updatedAt":1294},"react-native-ai-skills","integrate on-device AI in React Native","Provides integration recipes for the React Native AI @react-native-ai packages that wrap the Llama.rn (Llama.cpp), MLC-LLM, Apple Foundation backends. Use when integrating local on-device AI in React Native, setting up providers, model management.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1284,1287,1290,1291],{"name":1285,"slug":1286,"type":16},"AI Infrastructure","ai-infrastructure",{"name":1288,"slug":1289,"type":16},"LLM","llm",{"name":24,"slug":25,"type":16},{"name":14,"slug":15,"type":16},1371,"https:\u002F\u002Fgithub.com\u002Fcallstackincubator\u002Fai","2026-04-06T18:06:48.66379",{"slug":1296,"name":1296,"fn":1297,"description":1298,"org":1299,"tags":1300,"stars":1306,"repoUrl":1307,"updatedAt":1308},"voltra","build Voltra iOS widgets and charts","Build, review, refactor, configure, or debug Voltra code using Voltra JSX, Voltra JS APIs, the Expo config plugin, and the Voltra CLI. Use when the user asks about charts, Live Activities, Dynamic Island UI, iOS widgets, scheduled widgets, Android widgets, ongoing notifications, image handling, app.json plugin config, React Native CLI setup, or Voltra push update flows.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1301,1302,1303,1304],{"name":1225,"slug":1226,"type":16},{"name":21,"slug":22,"type":16},{"name":24,"slug":25,"type":16},{"name":1305,"slug":1296,"type":16},"Voltra",787,"https:\u002F\u002Fgithub.com\u002Fcallstackincubator\u002Fvoltra","2026-04-06T18:06:47.399012",{"slug":1310,"name":1310,"fn":1311,"description":1312,"org":1313,"tags":1314,"stars":1320,"repoUrl":1321,"updatedAt":1322},"rozenite-agent","use Rozenite plugins for React Native devtools","Use Rozenite for Agents through CLI-driven `rozenite agent` commands to inspect React Native DevTools data and Rozenite plugins on a live app target. Trigger this skill for shell-based debugging and live session work. For Node.js or TypeScript scripts, wrappers, automations, or other programmatic SDK usage, use `rozenite-agent-sdk` instead.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1315,1316,1319],{"name":24,"slug":25,"type":16},{"name":1317,"slug":1318,"type":16},"Plugin Development","plugin-development",{"name":14,"slug":15,"type":16},633,"https:\u002F\u002Fgithub.com\u002Fcallstackincubator\u002Frozenite","2026-07-31T05:52:54.56302",15,{"items":1325,"total":1378},[1326,1334,1340,1347,1354,1360,1369],{"slug":4,"name":4,"fn":5,"description":6,"org":1327,"tags":1328,"stars":29,"repoUrl":30,"updatedAt":31},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1329,1330,1331,1332,1333],{"name":18,"slug":19,"type":16},{"name":21,"slug":22,"type":16},{"name":27,"slug":28,"type":16},{"name":24,"slug":25,"type":16},{"name":14,"slug":15,"type":16},{"slug":1163,"name":1163,"fn":1164,"description":1165,"org":1335,"tags":1336,"stars":29,"repoUrl":30,"updatedAt":1173},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1337,1338,1339],{"name":1169,"slug":1170,"type":16},{"name":24,"slug":25,"type":16},{"name":14,"slug":15,"type":16},{"slug":1175,"name":1175,"fn":1176,"description":1177,"org":1341,"tags":1342,"stars":29,"repoUrl":30,"updatedAt":1191},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1343,1344,1345,1346],{"name":1181,"slug":1182,"type":16},{"name":1184,"slug":1185,"type":16},{"name":1187,"slug":1175,"type":16},{"name":1189,"slug":1190,"type":16},{"slug":1193,"name":1193,"fn":1194,"description":1195,"org":1348,"tags":1349,"stars":29,"repoUrl":30,"updatedAt":1205},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1350,1351,1352,1353],{"name":1199,"slug":1200,"type":16},{"name":1202,"slug":1193,"type":16},{"name":24,"slug":25,"type":16},{"name":14,"slug":15,"type":16},{"slug":1207,"name":1207,"fn":1208,"description":1209,"org":1355,"tags":1356,"stars":29,"repoUrl":30,"updatedAt":1217},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1357,1358,1359],{"name":24,"slug":25,"type":16},{"name":1214,"slug":1215,"type":16},{"name":14,"slug":15,"type":16},{"slug":829,"name":829,"fn":1219,"description":1220,"org":1361,"tags":1362,"stars":29,"repoUrl":30,"updatedAt":1231},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1363,1364,1365,1366,1367,1368],{"name":18,"slug":19,"type":16},{"name":1225,"slug":1226,"type":16},{"name":21,"slug":22,"type":16},{"name":27,"slug":28,"type":16},{"name":24,"slug":25,"type":16},{"name":14,"slug":15,"type":16},{"slug":1233,"name":1233,"fn":1234,"description":1235,"org":1370,"tags":1371,"stars":29,"repoUrl":30,"updatedAt":1250},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1372,1373,1374,1375,1376,1377],{"name":1239,"slug":1240,"type":16},{"name":1242,"slug":1243,"type":16},{"name":24,"slug":25,"type":16},{"name":1214,"slug":1215,"type":16},{"name":14,"slug":15,"type":16},{"name":1248,"slug":1249,"type":16},9]