{"id":14697,"plugin_id":"plugin_asdk_app_6a563d3bd288819196199d33db4cfc55","kind":"skill","collection_source":null,"comparison_source":null,"observed_at":"2026-09-30T23:09:58.690Z","digest":"4abe9974ec9925419c0e702a9c4e6fa6c606a479ec3fb85b45c58546d2489dfc","against":null,"payload":{"name":"sdk-install","description":"Install and initialize the correct LaunchDarkly SDK during onboarding by running nested skills in order: detect, plan, apply. Parent onboarding Step 6 is first flag.","included_files":[],"skill_md_contents":"---\nname: sdk-install\ndescription: \"Install and initialize the correct LaunchDarkly SDK during onboarding by running nested skills in order: detect, plan, apply. Parent onboarding Step 6 is first flag.\"\nlicense: Apache-2.0\ncompatibility: Requires a supported language/framework in the project. SDK credentials are required by [Apply](apply/SKILL.md), not for [Detect](detect/SKILL.md) / [Plan](plan/SKILL.md) alone (see parent onboarding **Prerequisites**).\nmetadata:\n  author: launchdarkly\n  version: \"0.2.0\"\n---\n\n# LaunchDarkly SDK Install (onboarding)\n\nInstalls and initializes the right LaunchDarkly SDK for the user’s project by following **three nested skills in order**. **Do not** skip ahead to feature flags here—the parent [LaunchDarkly onboarding](../onboarding/SKILL.md) continues with **Step 6: First feature flag** using [Create first feature flag](../first-flag/SKILL.md).\n\n## Prerequisites\n\n- Project context from parent **Step 1: Explore the Project** (reuse it; only re-run deep detection if something is unclear)\n- **SDK key / client-side ID / mobile key:** Needed when you reach [Apply code changes](apply/SKILL.md) (env wiring). **Do not** ask the user for these during detect or plan solely because you opened this skill—follow parent onboarding: account status is inferred via MCP OAuth (Step 4) or surfaced at D7 in apply; key material is collected at apply (see parent [Prerequisites](../onboarding/SKILL.md#prerequisites)).\n\n## Key types (summary)\n\n| SDK Type    | Variable (logical)        | Source in LaunchDarkly        |\n|-------------|---------------------------|-------------------------------|\n| Server-side | `LAUNCHDARKLY_SDK_KEY`    | Environments → SDK key        |\n| Client-side | Client-side ID (bundler-prefixed env names) | Environments → Client-side ID |\n| Mobile      | `LAUNCHDARKLY_MOBILE_KEY` | Environments → Mobile key     |\n\n**Never hardcode keys.** Full env rules, consent, and bundler tables: [Apply code changes](apply/SKILL.md) Step 2.\n\n## Workflow — run these nested skills in order\n\nExecute **all three** unless the [detect decision tree](detect/SKILL.md#decision-tree) short-circuits (e.g. skip to apply only). Each nested skill may contain decision points — some **blocking** (marked `D<N> -- BLOCKING`, where you must call your structured question tool and wait for the user's response before continuing) and some **non-blocking** (where you present information and continue unless the user objects). Do NOT batch tool calls across blocking boundaries.\n\n| Order | Nested skill | Role |\n|-------|----------------|------|\n| 1 | [Detect repository stack](detect/SKILL.md) | Language, package manager, monorepo target, entrypoint, existing LD usage |\n| 2 | [Generate integration plan](plan/SKILL.md) | SDK choice, files to change, env plan -- presented to user (non-blocking; see plan SKILL.md D6) |\n| 3 | [Apply code changes](apply/SKILL.md) | Install package(s), `.env` / secrets with consent, init code, compile check (**both** tracks when [dual-SDK plan](plan/SKILL.md#dual-sdk-integrations)) |\n\nShared references for all steps: [SDK recipes](../onboarding/references/sdk/recipes.md), [SDK snippets](../onboarding/references/sdk/snippets/).\n\n### After Step 3 completes\n\nContinue with the parent skill:\n\n- **Step 6:** [Create first feature flag](../first-flag/SKILL.md)\n\nDo not add standalone “sample flag” evaluation in this skill unless the user explicitly needs a throwaway check; the parent flow creates the first flag in order.\n\n## Guidelines\n\n- Match existing codebase conventions for imports, config, and style.\n- Prefer TypeScript in TypeScript projects.\n- If the project uses a shared config layer, initialize LaunchDarkly there.\n- Add `.env.example` entries when the project uses dotenv.\n- **Dependency scope:** Add only LaunchDarkly SDK package(s) from the recipe unless the user **explicitly approves** upgrading or adding other packages ([Apply — Permission before changing other dependencies](apply/SKILL.md#permission-before-changing-other-dependencies)).\n\n## Edge cases\n\n- **Multiple environments (e.g. Next.js server + client) or user asked for frontend + backend:** Use a **dual-SDK** [plan](plan/SKILL.md#dual-sdk-integrations) and [apply](apply/SKILL.md) **both** packages and **both** inits—never summarize the second SDK as done without lockfile + entrypoint evidence.\n- **Monorepo:** Integrate the package the user chose in parent onboarding; stay within that subtree.\n- **SDK already installed and initialized:** Parent may skip this handoff—see parent **Edge Cases** and [detect decision tree](detect/SKILL.md#decision-tree).\n- **Unsupported or uncommon stack:** Use [SDK recipes](../onboarding/references/sdk/recipes.md) and the [full SDK catalog](https://launchdarkly.com/docs/sdk).\n\n## References\n\n- [Detect repository stack](detect/SKILL.md)\n- [Generate integration plan](plan/SKILL.md)\n- [Apply code changes](apply/SKILL.md)\n- [SDK recipes](../onboarding/references/sdk/recipes.md)\n- [SDK snippets](../onboarding/references/sdk/snippets/)\n- [LaunchDarkly onboarding (parent)](../onboarding/SKILL.md)\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}