{"id":"4a535c24-ab71-43b2-9bbd-b0f328be137b","shortId":"zCTPyB","kind":"skill","title":"onboarding","tagline":"Onboard a project to LaunchDarkly: kickoff roadmap, resumable log, explore repo, MCP, companion flag skills, nested SDK install (detect/plan/apply), first flag. Use when adding LaunchDarkly, setting up or integrating feature flags in a project, SDK integration, or 'onboard me'.","description":"# LaunchDarkly SDK Onboarding\n\nOrchestrates LaunchDarkly setup in an existing codebase: on kickoff, show a **roadmap** in chat (see [Kickoff: onboarding roadmap](#kickoff-onboarding-roadmap)); **Step 0** writes a living onboarding log so a new session or the user can resume; then explore the project, detect the agent, install flag-management skills, **configure the LaunchDarkly MCP server early**, install and initialize the SDK (**sdk-install** and nested detect/plan/apply), and create a **first feature flag**. Nested skills: [mcp-configure](mcp-configure/SKILL.md), [sdk-install](sdk-install/SKILL.md), [first-flag](first-flag/SKILL.md).\n\n## Prerequisites\n\n- **`npx`:** Available on PATH when using `npx skills add` to install companion skills (see Step 3).\n- **LaunchDarkly account (deferred -- inferred, not asked upfront):** Do NOT ask whether the user has a LaunchDarkly account at the start. Instead, let the workflow reveal account status naturally:\n  - **Steps 0-3** (log, explore, detect, install skills) do not require an account. Run them first.\n  - **Step 4 (MCP):** Present the MCP install link. If the user completes OAuth successfully, they have an account -- confirmed, no question needed.\n  - **Step 5 (SDK keys):** If MCP is not configured (or the user declined it), account status becomes relevant at D7 when the user needs to provide keys. If they cannot provide keys, offer the resolved signup link (see [Source Attribution](#source-attribution)).\n  - This eliminates the upfront \"Do you have an account?\" question and lets the workflow itself surface whether the user needs to sign up.\n- **Keys and tokens (defer until needed):** Collect these only when the path requires them.\n  - **Step 4 -- MCP:** **Hosted MCP** uses OAuth; no API token or SDK key needed to configure it. **Local `npx` MCP** (federal/EU, etc.): API access token per [mcp-configure](mcp-configure/SKILL.md) and [MCP Config Templates](mcp-configure/references/mcp-config-templates.md).\n  - **Step 5 -- SDK:** **SDK keys / client-side ID / mobile key** when wiring env in [Apply code changes](sdk-install/apply/SKILL.md), after the integration plan is confirmed. **`ldcli` / REST** for discovery: use **`ldcli login`** or an access token when you first run those commands, not at hello.\n  - **Key type must match the integration:** server-side SDK -> **SDK key**; browser/client-side SDK -> **Client-side ID**; mobile -> **Mobile key**. Env variable names and bundler rules: [Apply code changes](sdk-install/apply/SKILL.md).\n\n**MCP (preferred):** Complete **Step 4** via [mcp-configure/SKILL.md](mcp-configure/SKILL.md) before SDK work when possible. If MCP is unavailable or the user opts out, use **ldcli** / **REST** fallbacks described in that skill (including [MCP Config Templates](mcp-configure/references/mcp-config-templates.md) for local `npx` fallback when hosted MCP does not apply) -- onboarding must still be completable.\n\n**Optional MCP tools (when configured):**\n\n- `get-environments` -- list environments for a project; the response includes SDK keys, client-side IDs, and mobile keys per environment. **Use this as the single source for all key types** -- do not make separate requests for individual keys.\n- `create-feature-flag` -- create the boolean flag for [Step 6: Create Your First Feature Flag](#step-6-create-your-first-feature-flag).\n- `update-feature-flag` -- toggle or patch flag configuration during Step 6; see [Create first feature flag](first-flag/SKILL.md) for ldcli/API fallbacks.\n\n**Other MCP tools you may use if present** (not required): `list-feature-flags`, `get-feature-flag`, `get-flag-status-across-environments`.\n\n## Agent Behavior Directives\n\n### Source Attribution\n\nThe signup URL used throughout onboarding includes a `source` query parameter for attribution. The default value is `agent`, producing `https://app.launchdarkly.com/signup?source=agent`. However, the source is **dynamic** based on the user's original prompt:\n\n- If the user's initial message (the prompt that triggered onboarding) contains the marker **`source-launchdarkly`**, set the source to **`ldwebsite`** → `https://app.launchdarkly.com/signup?source=ldwebsite`.\n- Otherwise, keep the default source **`agent`** → `https://app.launchdarkly.com/signup?source=agent`.\n\nDetect this **once** at kickoff (before Step 0) by scanning the user's original message for the substring `source-launchdarkly`. Store the resolved signup URL for the session and use it wherever this skill or any nested skill directs the user to sign up. The marker is metadata for the agent — do not echo it back to the user or include it in any user-facing output.\n\n### Progress Tracking\n\nThe roadmap (Steps 0-6 + follow-through) MUST be tracked using your agent's native task-tracking tool in addition to the onboarding log file.\n\n- **Cursor:** Use `TodoWrite` to create a todo for each step before beginning work. Update status as each step completes.\n- **Claude Code:** Use `TaskCreate` to create a task for each step (or `TodoWrite` if native tasks are unavailable).\n- **Other agents:** If your agent provides a native task list or progress tracking tool, use it. If not, present a numbered checklist in chat and update it after each step.\n\nDo NOT work through steps mentally or rely solely on the `LAUNCHDARKLY_ONBOARDING.md` log for in-session tracking.\n\n### Decision Points\n\nWhen a step requires user input to determine branching, you MUST collect the answer by calling a tool — do NOT write the question as prose text in your response.\n\n**Call the tool directly.** Use the first tool from this list that\nyour environment provides:\n\n1. `AskQuestion` — call it with a `prompt` and `options` array\n2. `TaskAsk` or equivalent structured-input tool\n3. (fallback) If the tool call fails or no such tool exists, THEN\n   render the question as numbered options in text and wait.\n\nDo NOT decide in advance whether you have the tool. Attempt the call. The tool call IS the question — do not also write the question as text.\n\nThroughout this skill and its nested skills you will see decision-point markers formatted like this:\n\n```\n**D1 -- BLOCKING:** <instruction to call your question tool>\n- question: \"<the question>\"\n- options:\n  - \"<option A>\" -> <what happens>\n  - \"<option B>\" -> <what happens>\n- STOP. Do not continue until the user selects an option.\n```\n\nThese are **instructions for you to follow**, not content to display. When you reach one: make the tool call (or render numbered options if no tool exists), then STOP and wait. Do NOT copy the marker text into your response.\n\n### User-Facing Communication\n\nEvery reply during onboarding must sound like a friendly, knowledgeable colleague walking someone through setup — not a workflow engine quoting internal instructions. Follow these rules in all user-facing output:\n\n**Required response structure.** Every substantive onboarding reply must include:\n\n1. **What we just did** — one or two sentences summarizing the completed action and its result.\n2. **What we're doing next** — a plain-English preview of the next step.\n3. **What you need to do** (only when the user has a manual action) — a concrete instruction, not a vague label like \"Your turn.\" Include **where** to perform the action (e.g. \"in Cursor's integrated terminal,\" \"in the project folder,\" \"in your browser,\" \"in macOS Terminal\").\n\n**Forbidden in user-facing output:**\n\n- Internal decision-point IDs (D1, D5, D7, etc.), step numbers as labels (e.g. \"Step 5 -- detect\"), or skill file names (e.g. \"sdk-install/apply/SKILL.md\").\n- Quoting or paraphrasing raw skill instructions, directive headings, or markdown from these files.\n- Workflow-engine language (\"BLOCKING,\" \"STOP,\" \"call your structured question tool,\" \"proceed to the next nested skill\").\n\n**When telling the user to run a command**, always say **where** to run it. Good examples:\n- \"Run this in the integrated terminal in your editor\"\n- \"Run this from the project root in your terminal\"\n- \"Open a terminal in the `packages/api` folder and run …\"\n\nBad: \"Run `npm install`\" (without location context).\n\n**Tone:** Friendly, conversational, and confident — like a knowledgeable colleague, not a manual. Use first person naturally (e.g. \"I just detected that the flag was created, now I'm going to …\"). Assume the reader is an engineer so don't over-explain basic concepts (what a package manager is, what an environment variable does), but do explain LaunchDarkly-specific concepts briefly on first mention (what a context is, what an SDK key is for, why there are different key types).\n\n### Step Execution Rules\n\nDo NOT treat the user's initial request (e.g. \"onboard me,\" \"set up LaunchDarkly\") as blanket permission for file writes, installs, or configuration changes. Each action that modifies the repo, installs packages, or writes secrets requires its own consent at the step where it occurs.\n\n**Blocking decision points** (you MUST halt and wait for the user's response before continuing):\n\n| ID | Location | Question |\n|----|----------|----------|\n| D4-LOCAL | Step 4 (local MCP) | User chooses whether to handle the access token themselves (recommended) or let the agent help |\n| D5-NOAPP | Step 5 -- detect | No runnable app found: user points to app or requests demo |\n| D5-UNCLEAR | Step 5 -- detect | Weak evidence: user confirms the correct app folder |\n| D5 | Step 5 -- detect | SDK confirmation / one-vs-both-SDKs scope choice |\n| D7 | Step 5 -- apply | User chooses how secrets are set up: user-specified location, user handles it, or `.env` fallback. If user cannot provide keys, offer signup link. |\n| D8 | Step 5 -- apply | Approval before changing non-LaunchDarkly dependencies |\n| D9 | Step 6 | Auth errors (401/403): stop, do not retry automatically |\n\n**Non-blocking** (you may proceed automatically): Steps 0-3 (log, explore, detect agent, install skills -- no user input needed), D6 plan preview (present and continue unless user objects), Step 5 detect (file reads only), compile check (Step 5 apply Step 4), follow-through file writes (`LAUNCHDARKLY.md`, editor rules).\n\n## Core Principles\n\n1. **Detect, don't guess:** Inspect the repo for language, framework, and package manager.\n2. **Minimal changes:** Add SDK code alongside existing code; don't restructure the project.\n3. **Match existing patterns:** Follow env vars, config files, and initialization patterns already in use.\n4. **Validate end-to-end:** Confirm the SDK is connected before treating the first flag as proof of success.\n5. **Paper trail:** Keep the Step 0 onboarding log current so another agent or session can continue without re-deriving context.\n6. **Orient the user first:** On a fresh onboarding request, show the [Kickoff roadmap](#kickoff-onboarding-roadmap) before substantive work so the user knows the full arc.\n7. **Defer credential questions:** Do not ask about account status or keys upfront. Account status is inferred through MCP OAuth (Step 4) or surfaced at D7 (Step 5) when keys are needed. Ask for **SDK keys / tokens** only in Step 4-5 when that step's skill says they are required ([Prerequisites](#prerequisites)).\n8. **Deep-link to the dashboard:** When generating LaunchDarkly dashboard URLs and the **project key** and/or **environment key** are known (from MCP tools, user input, or the onboarding log), construct the most specific URL possible instead of linking to a generic page. Use these patterns:\n\n   | What you need to show | URL pattern |\n   |-----------------------|-------------|\n   | Project flags list | `https://app.launchdarkly.com/projects/{projectKey}/flags` |\n   | Specific flag | `https://app.launchdarkly.com/projects/{projectKey}/flags/{flagKey}` |\n   | Environment keys / SDK keys | `https://app.launchdarkly.com/projects/{projectKey}/settings/environments/{envKey}/keys` |\n   | Project environments list | `https://app.launchdarkly.com/projects/{projectKey}/settings/environments` |\n   | All projects | `https://app.launchdarkly.com/projects` |\n\n   Only generate deep links when the required keys are known from tool responses or confirmed user input. If they are unknown, use the most specific generic path available and tell the user how to navigate from there (e.g. \"Open your project in the LaunchDarkly dashboard, then go to **Settings > Environments** to find your SDK key\").\n\n## Kickoff: onboarding roadmap\n\nWhen the user invokes this onboarding flow (for example by asking you to follow this skill, run LaunchDarkly onboarding, or set up feature flags in the project), treat it as a **fresh kickoff** unless you are clearly resuming (see **Resuming** below).\n\n### Kickoff sequence (new run — before any numbered step)\n\nPerform these in **order** in the **same assistant turn**, then proceed directly into Steps 0-3:\n\n1. **Task list:** Call your native task tool ([Progress Tracking](#progress-tracking)) and create **one task per step for Steps 0 through 6** (seven tasks minimum — one each for Steps 0, 1, 2, 3, 4, 5, and 6, even though Steps 0-3 are grouped as a single row below). Do this **before** rendering the roadmap so progress tracking is in place.\n2. **Roadmap:** Give the user a brief, friendly preview of what you are about to do. Keep it conversational -- a short paragraph or a compact list is fine. Do not render a large table by default (the table below is your internal reference). The user should understand the arc (explore the project, set up tooling, install the SDK, create a first flag) without seeing step numbers or internal labels.\n3. **Begin Steps 0-3 immediately.** These steps do not require a LaunchDarkly account or any user action. Run them in the background and surface only the results: what you found (language, framework, agent) and what you installed (companion skills). Do not narrate each step as a separate heading -- summarize them together when presenting findings to the user. Account status is inferred later (see [Prerequisites](#prerequisites)).\n\n- **Resuming:** When the user says \"continue LaunchDarkly onboarding\" (or similar), **always check for `LAUNCHDARKLY_ONBOARDING.md` first**. If it exists:\n  1. Read the log to understand current state (completed steps, blockers, next step)\n  2. Show a brief \"where we are\" summary (e.g. \"I see we finished MCP setup — next is SDK installation\")\n  3. Refresh your task list to match the log's checklist\n  4. Continue from the log's **Next step** — do not restart from Step 0\n\n| Step | What happens | You get |\n|------|--------------|---------|\n| **0-3** -- Setup | Create onboarding log, explore project, detect agent, install companion skills (`npx skills add` from `launchdarkly/ai-tooling`) | Stack summary, agent ID, `launchdarkly-flag-*` skills available |\n| **4** -- MCP | Configure LaunchDarkly MCP; user enables server; agent probes for tools | MCP tools (or ldcli/API fallback); account confirmed via OAuth |\n| **5** -- SDK install | detect -> plan -> apply ([sdk-install](sdk-install/SKILL.md)) | Packages + init wired to env vars |\n| **6** -- First flag | Create boolean flag, evaluate, toggle, add interactive demo ([first-flag](first-flag/SKILL.md)) | End-to-end proof + visible \"wow\" moment |\n| **Follow-through** | `LAUNCHDARKLY.md`, editor rules ([1.8-summary](references/1.8-summary.md), [1.9-editor-rules](references/1.9-editor-rules.md)) | Durable docs for the repo |\n\nAfter presenting the roadmap preview, proceed directly into Steps 0-3 (they require no user input or account). Then continue with [Step 4](#step-4-configure-the-mcp-server).\n\n## Workflow\n\nFollow **Steps 0-6** in order unless an **Edge case** says otherwise. When **Step 6** (first flag) completes successfully, continue with [Default follow-through](#default-follow-through-not-numbered-steps).\n\n### Steps 0-3: Setup (run silently -- do not narrate each step)\n\nThese four steps run automatically without user input. Perform them all, then present a single summary of what you found and what you set up. Do NOT show individual step headings, log-creation messages, or install output to the user.\n\n**Step 0: Onboarding log.** Create or refresh `LAUNCHDARKLY_ONBOARDING.md` silently.\n\n1. Look for an existing log at the repo root: `LAUNCHDARKLY_ONBOARDING.md`. If the project keeps docs under `docs/`, prefer `docs/LAUNCHDARKLY_ONBOARDING.md` when that folder already exists and the root file is absent.\n2. Create or update the log file directly without asking for permission.\n3. If resuming: read the log first, align with the stated **next step**, and only redo work the log marks incomplete or invalid.\n4. What to write (update after each numbered step finishes or when something important changes):\n   - **Checklist:** Steps 0-6 with status (`not started` / `in progress` / `done` / `skipped` + brief reason).\n   - **Context:** coding agent id (once known), language/framework summary, monorepo target path if any, LaunchDarkly **project key** and **environment key** when known (never paste secrets or full SDK keys -- say \"stored in env\" or \"user provided offline\").\n   - **MCP:** configured yes/no, hosted vs fallback, link to config path if relevant.\n   - **Commands run:** e.g. `npx skills add ...` (no secrets).\n   - **Blockers / errors:** what failed and what was tried.\n   - **Next step:** single explicit step number and name (e.g. \"Step 5: Install and Initialize the SDK\").\n5. After errors: append or edit the log with what broke and where you are resuming.\n\nThis file is a **working** log during onboarding. After success, it is deleted and replaced with `LAUNCHDARKLY.md` ([Onboarding Summary](references/1.8-summary.md)).\n\n**Step 1: Explore the project.** Understand what you are integrating.\n\n1. Identify language and framework. Check dependency files: `package.json`, `go.mod`, `requirements.txt` / `pyproject.toml` / `Pipfile`, `pom.xml` / `build.gradle`, `Gemfile`, `*.csproj` / `*.sln`, `Cargo.toml`, etc.\n2. Check for existing LaunchDarkly usage. Search for `launchdarkly`, `ldclient`, `ld-client`, `LDClient`, `@launchdarkly`.\n   - If already present: note SDK version and patterns; you may shorten or skip [Step 5](#step-5-install-and-initialize-the-sdk) per edge cases.\n   - If not present: plan full SDK setup.\n3. Identify environment type: server-side app, client SPA, mobile, edge, etc. -- this drives SDK choice.\n\nDeep detection details: [Detect repository stack](sdk-install/detect/SKILL.md) (nested under [sdk-install](sdk-install/SKILL.md)).\n\n**Step 2: Detect the agent environment.** Infer silently -- do not ask the user.\n\n1. Check for indicators (in priority order — stop at the first strong match):\n   - **Cursor:** `.cursor/`, `.cursorrules`, or `CURSOR_` env vars\n   - **Claude Code:** `~/.claude/`, `CLAUDE.md`, or `CLAUDE_` env vars\n   - **Windsurf:** `.windsurfrules`\n   - **GitHub Copilot:** `.github/copilot/`\n   - **Codex:** `~/.codex/`, `AGENTS.md`\n2. If multiple indicators are present, pick the one whose runtime you are **currently executing inside**. If none match, default to the agent whose tool surface you observe at runtime.\n3. Remember the agent id for Step 3 (e.g. `cursor`, `claude-code`).\n\n**Step 3: Install companion skills.** Install flag-management skills from the public repo so later steps can delegate when appropriate.\n\n```bash\nnpx skills add launchdarkly/ai-tooling --skill launchdarkly-flag-create launchdarkly-flag-discovery launchdarkly-flag-targeting launchdarkly-flag-cleanup -y --agent <detected-agent>\n```\n\nReplace `<detected-agent>` with the value from Step 2. Confirm success; skip skills already installed.\n\n**Bundled vs public:** Orchestration and setup for this flow live **in this folder** -- parent [SKILL.md](SKILL.md), nested [mcp-configure](mcp-configure/SKILL.md), [sdk-install](sdk-install/SKILL.md) (detect / plan / apply), [first-flag](first-flag/SKILL.md), and `references/` ([SDK recipes](references/sdk/recipes.md), [snippets](references/sdk/snippets/), summary, editor rules, etc.). The command above installs **flag-management** skills from the public [launchdarkly/ai-tooling](https://github.com/launchdarkly/ai-tooling) repo only.\n\n**After Steps 0-3 complete:** Present a single summary to the user covering what you found (language, framework, environment type, whether LD is already integrated, detected agent). Then proceed to [Step 4](#step-4-configure-the-mcp-server).\n\n### Step 4: Configure the MCP Server\n\nHand off to [mcp-configure/SKILL.md](mcp-configure/SKILL.md) for setup (hosted MCP, quick install, manual JSON, agent authorization).\n\nMCP setup requires the user to act outside the agent (clicking a quick-install link, completing OAuth, enabling the server in editor settings). After presenting the instructions, **tell the user to enable the server and complete OAuth**. Then probe for MCP tools immediately — a restart may not be required in Cursor or Claude Code.\n\n**Auto-verify:** After the user confirms they've enabled the server, probe for MCP by calling a lightweight MCP tool such as `list-feature-flags` with the known project key. If the tool responds normally, MCP is live — note it in the onboarding log and use MCP tools for later steps. If the call fails or no MCP tools are visible, **update the onboarding log first** (so a new session can resume), then suggest a restart with clear instructions: tell the user to say **\"continue LaunchDarkly onboarding\"** when they come back. If restart doesn't help, fall back to ldcli/API for Steps 5-6 and note the fallback in the onboarding log. **Do not ask** the user whether MCP is working — find out by trying it.\n\nDo not duplicate MCP procedures in this file. Do not block Step 5 indefinitely on MCP.\n\n### Step 5: Install and Initialize the SDK\n\nIf the project **already has LaunchDarkly installed and initialized** (see [detect decision tree](sdk-install/detect/SKILL.md#decision-tree)), skip to [Step 6: Create Your First Feature Flag](#step-6-create-your-first-feature-flag).\n\nOtherwise hand off to [LaunchDarkly SDK Install (onboarding)](sdk-install/SKILL.md), which runs nested skills in order: [Detect repository stack](sdk-install/detect/SKILL.md) -> [Generate integration plan](sdk-install/plan/SKILL.md) -> [Apply code changes](sdk-install/apply/SKILL.md), using [SDK recipes](references/sdk/recipes.md) and [SDK snippets](references/sdk/snippets/). If the user asked for **both** server and client (e.g. API + SPA, Next.js server + browser), follow [Dual SDK integrations](sdk-install/plan/SKILL.md#dual-sdk-integrations) through plan and apply so **both** SDKs are really installed and initialized.\n\n**Blocking decision points inside Step 5** (see nested skills): D5 (SDK scope), D7 (secret consent), D8 (dependency changes). Do NOT batch tool calls across these boundaries. D6 (plan preview) is non-blocking -- present the plan and continue unless the user objects.\n\n### Step 6: Create Your First Feature Flag\n\nCreate and evaluate a boolean flag; toggle and observe end-to-end.\n\n1. Follow [Create first feature flag](first-flag/SKILL.md).\n2. If the **`launchdarkly-flag-create`** skill (installed in Step 3) is available, you may use it for create/evaluation wiring **only** while still completing the verify/toggle checklist in [Create first feature flag](first-flag/SKILL.md). Onboarding must remain completable without it.\n\nInstall or refresh flag skills via:\n\n`npx skills add launchdarkly/ai-tooling --skill launchdarkly-flag-create -y --agent <detected-agent>`\n\nSee D9 in [first-flag](first-flag/SKILL.md) for the blocking stop on auth errors.\n\n## Default follow-through (not numbered steps)\n\nDo these when finishing onboarding -- same session when possible. They are **documentation and handoff** tasks, not repeats of Steps 0-6. **Do not skip this section** -- it is the primary deliverable the user keeps after onboarding.\n\n**Setup summary (`LAUNCHDARKLY.md`) -- REQUIRED**\n\nGenerate the repo summary per [Onboarding Summary](references/1.8-summary.md). Write it directly -- this is part of the onboarding workflow. The generated `LAUNCHDARKLY.md` **must** include all of the following (see template in that reference):\n\n1. **SDK Details** -- which SDK(s) are installed, package names, key types, initialization files\n2. **Configuration** -- env var names, how secrets are managed, bundler-specific conventions\n3. **Where to Find Things** -- dashboard links with real project key substituted\n4. **How Feature Flags Work** -- a language-specific code example showing flag evaluation in this project's stack (not a generic snippet -- use the same pattern the agent wired during Step 5)\n5. **Next Steps / Advanced Capabilities** -- links to Percentage Rollouts, Targeting Rules, Experimentation, AI Configs, Guarded Rollouts, and Observability\n6. **AI Agent Integration** -- MCP server setup for continued agent-driven flag management\n\nThis is **not** the same file as `LAUNCHDARKLY_ONBOARDING.md`. The onboarding log is a working checklist; `LAUNCHDARKLY.md` is the **permanent reference** for the team.\n\n**Clean up the onboarding log:** After writing `LAUNCHDARKLY.md`, **delete** `LAUNCHDARKLY_ONBOARDING.md` (or `docs/LAUNCHDARKLY_ONBOARDING.md` if that was the location used). This is part of the workflow -- do not ask for permission. Removing the working log avoids confusion from having two LaunchDarkly docs in the repo.\n\n**Editor rules / skills**\n\n- Add editor-specific rules or skill hooks per [Editor Rules and Skills](references/1.9-editor-rules.md). Write them directly -- this is part of the onboarding workflow.\n\n## Edge Cases\n\n| Situation | Action |\n|-----------|--------|\n| SDK already installed **and** initialized (see [detect decision tree](sdk-install/detect/SKILL.md#decision-tree)) | Skip **Step 5**; go to **Step 6** (First flag) |\n| SDK in dependencies **but** not initialized | Continue **Step 5** from [apply](sdk-install/apply/SKILL.md) / init (see [sdk-install](sdk-install/SKILL.md)); do not skip validation |\n| SDK state unclear | Re-run [Detect repository stack](sdk-install/detect/SKILL.md), then follow its decision tree |\n| No runnable app found or app target unclear | Follow the workspace classification in [Detect: classify workspace confidence](sdk-install/detect/SKILL.md#5a-classify-workspace-confidence) — ask the user to point to the real app or offer to create a demo. Do not proceed to plan or apply without a confirmed app target. |\n| Multiple languages in repo | **Blocking (D5):** use question tool to ask which target to integrate first -- do not guess |\n| User wants **both** frontend and backend (or server + browser) in the same target | [Dual SDK plan](sdk-install/plan/SKILL.md#dual-sdk-integrations): two packages, two entrypoints, two inits; [apply](sdk-install/apply/SKILL.md) must complete **both** tracks |\n| Monorepo | **Blocking (D5):** use question tool to ask which package/service to integrate -- do not assume the root |\n| No package manager detected | **Blocking (D5):** use question tool to ask which SDK to install; provide manual install instructions from [SDK recipes](references/sdk/recipes.md) |\n| Companion flag skills already installed (Step 3) | Skip re-running `npx skills add` for those skill names |\n| Resuming after a break or new agent session | Read `LAUNCHDARKLY_ONBOARDING.md` (Step 0); continue from **Next step**; refresh the log as you go |\n| MCP configuration fails or user declines MCP | Continue with **Step 5** using ldcli/API/dashboard per [mcp-configure](mcp-configure/SKILL.md); note limitation for flag tooling |\n| User / repo already fully onboarded | Summarize state from Step 0 log and repo; offer next steps without redoing completed steps |\n\n## What NOT to Do\n\n- Don't install an SDK without exploring the project and detecting the stack (Steps 1 and 5); keep the Step 0 log updated as you go.\n- Don't upgrade, pin, or add **non-LaunchDarkly** dependencies (peer-deps, lockfile churn, \"latest\" bumps) to install or compile the SDK without **explicit user approval** -- see [Apply -- Permission before changing other dependencies](sdk-install/apply/SKILL.md#permission-before-changing-other-dependencies).\n- Don't hardcode SDK keys in source code -- always use environment variables (see [Apply code changes](sdk-install/apply/SKILL.md)).\n- Don't restructure the user's project or refactor unrelated code.\n- Don't create flags before **Step 5** (SDK install) completes.\n- Don't write decision-point questions as chat text -- use your structured question tool (see [Decision Points](#decision-points)).\n\n## References\n\n**Continuity**\n\n- Step 0 -- `LAUNCHDARKLY_ONBOARDING.md` (working log; see [Steps 0-3](#steps-0-3-setup-run-silently----do-not-narrate-each-step))\n\n**Step 4 -- MCP (nested skill is primary)**\n\n- [mcp-configure/SKILL.md](mcp-configure/SKILL.md) -- hosted MCP, verify, edge cases (**follow this first**)\n- [MCP UI links](mcp-configure/references/mcp-ui-links.md) -- HTTPS + `command:` links to open MCP settings per editor\n- [MCP Config Templates](mcp-configure/references/mcp-config-templates.md) -- per-agent JSON; **Local server via `npx`** when hosted MCP is unavailable\n\n**Step 5 -- SDK install (nested skills)**\n\n- [sdk-install/SKILL.md](sdk-install/SKILL.md) -- orchestrates **detect -> plan -> apply** (**follow this first**)\n- [Detect repository stack](sdk-install/detect/SKILL.md)\n- [Generate integration plan](sdk-install/plan/SKILL.md)\n- [Apply code changes](sdk-install/apply/SKILL.md)\n\n**First flag (Step 6)**\n\n- [Create first feature flag](first-flag/SKILL.md)\n\n**Default follow-through**\n\n- [Onboarding Summary](references/1.8-summary.md) -- template for `LAUNCHDARKLY.md`\n- [Editor Rules and Skills](references/1.9-editor-rules.md)\n\n**SDK index**\n\n- [SDK recipes](references/sdk/recipes.md)\n- [SDK snippets](references/sdk/snippets/)\n\n**Public flag skills (install via Step 3)**\n\n- [github.com/launchdarkly/ai-tooling](https://github.com/launchdarkly/ai-tooling) -- `launchdarkly-flag-create`, `launchdarkly-flag-discovery`, `launchdarkly-flag-targeting`, `launchdarkly-flag-cleanup`","tags":["onboarding","tooling","launchdarkly","agent-skills","launchdarkly-ai","managed-by-terraform"],"capabilities":["skill","source-launchdarkly","skill-onboarding","topic-agent-skills","topic-launchdarkly-ai","topic-managed-by-terraform"],"categories":["ai-tooling"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/launchdarkly/ai-tooling/onboarding","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add launchdarkly/ai-tooling","source_repo":"https://github.com/launchdarkly/ai-tooling","install_from":"skills.sh"}},"qualityScore":"0.456","qualityRationale":"deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 12 github stars · SKILL.md body (29,910 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T19:07:26.530Z","embedding":null,"createdAt":"2026-05-18T13:13:37.660Z","updatedAt":"2026-05-18T19:07:26.530Z","lastSeenAt":"2026-05-18T19:07:26.530Z","tsv":"'-0':4312 '-3':187,1549,1973,2017,2110,2253,2374,2429,3035,4310,4313 '-4':2388,3065 '-5':1746,2760 '-6':547,750,2398,2572,3258,3334,3603 '/.claude':2848 '/.codex':2860 '/apply/skill.md':365,425,1195,3379,3895,4033,4231,4257,4424 '/detect/skill.md':2803,3320,3365,3868,3921,3947,4410 '/flags':1818,1825 '/keys':1837 '/launchdarkly/ai-tooling)':3029 '/launchdarkly/ai-tooling](https://github.com/launchdarkly/ai-tooling)':4469 '/plan/skill.md':3372,3410,4018,4417 '/projects':1850 '/projects/':1816,1823,1833,1843 '/references/mcp-config-templates.md':343,469,4369 '/references/mcp-ui-links.md':4353 '/settings/environments':1835,1845 '/signup?source=agent':628,674 '/signup?source=ldwebsite':665 '/skill.md':125,132,139,335,435,439,574,2312,2336,2812,2986,2993,3003,3083,3087,3352,3498,3535,3568,3904,4138,4334,4338,4392,4396,4436 '0':67,186,682,749,1548,1661,1972,1995,2005,2016,2109,2246,2252,2373,2397,2428,2480,2571,3034,3602,4107,4153,4188,4303,4309 '1':904,1087,1592,1974,2006,2190,2488,2700,2709,2826,3489,3655,4182 '1.8':2351 '1.9':2354 '2':914,1103,1606,2007,2037,2203,2519,2729,2814,2862,2956,3499,3669 '3':156,922,1118,1620,2008,2106,2222,2531,2777,2892,2899,2906,3510,3682,4084,4466 '4':202,304,430,1427,1581,1635,1726,1745,2009,2233,2279,2386,2554,3063,3072,3694,4325 '401/403':1534 '5':224,345,1185,1449,1466,1478,1491,1520,1570,1578,1655,1732,2010,2300,2657,2663,2758,3257,3293,3298,3432,3726,3727,3874,3889,4128,4184,4275,4384 '5a':3949 '5a-classify-workspace-confidence':3948 '6':540,565,1531,1677,1997,2012,2319,2409,3327,3470,3745,3878,4428 '7':1705 '8':1758 'absent':2518 'access':326,381,1436 'account':158,173,182,197,218,237,274,1713,1718,2119,2164,2296,2381 'across':600,3450 'act':3104 'action':1099,1131,1147,1385,2123,3855 'ad':25 'add':149,1609,2267,2327,2636,2929,3550,3828,4091,4199 'addit':767 'advanc':949,3730 'agent':88,602,624,671,726,759,811,814,1443,1553,1667,2139,2261,2272,2287,2585,2817,2884,2895,2949,3058,3096,3107,3558,3722,3747,3755,4102,4372 'agent-driven':3754 'agents.md':2861 'ai':3739,3746 'align':2538 'alongsid':1612 'alreadi':1632,2511,2745,2961,3055,3307,3857,4081,4146 'also':966 'alway':1234,2182,4246 'and/or':1774 'anoth':1666 'answer':873 'api':311,325,3398 'app':1453,1458,1474,2784,3929,3932,3961,3978 'app.launchdarkly.com':627,664,673,1815,1822,1832,1842,1849 'app.launchdarkly.com/projects':1848 'app.launchdarkly.com/projects/':1814,1821,1831,1841 'app.launchdarkly.com/signup?source=agent':626,672 'app.launchdarkly.com/signup?source=ldwebsite':663 'append':2666 'appli':359,419,479,1492,1521,1579,2305,2996,3373,3418,3891,3974,4029,4222,4251,4400,4418 'appropri':2925 'approv':1522,4220 'arc':1704,2085 'array':913 'ask':162,166,1711,1737,1919,2528,2823,3269,3391,3808,3953,3990,4045,4065 'askquest':905 'assist':1965 'assum':1306,4052 'attempt':955 'attribut':262,265,606,619 'auth':1532,3574 'author':3097 'auto':3154 'auto-verifi':3153 'automat':1539,1546,2442 'avail':142,1878,2278,3512 'avoid':3815 'back':731,3245,3252 'backend':4004 'background':2128 'bad':1269 'base':634 'bash':2926 'basic':1318 'batch':3447 'becom':239 'begin':784,2107 'behavior':603 'blanket':1375 'block':990,1213,1405,1542,3291,3427,3459,3571,3984,4039,4059 'blocker':2200,2639 'boolean':536,2323,3480 'boundari':3452 'branch':868 'break':4099 'brief':2043,2206,2581 'briefli':1337 'broke':2673 'browser':1160,3402,4007 'browser/client-side':404 'build.gradle':2723 'bump':4210 'bundl':2963 'bundler':417,3679 'bundler-specif':3678 'call':875,889,906,927,957,960,1021,1215,1977,3169,3208,3449 'cannot':252,1512 'capabl':3731 'cargo.toml':2727 'case':2404,2769,3853,4343 'chang':361,421,1383,1524,1608,2568,3375,3444,4225,4235,4253,4420 'chat':57,833,4287 'check':1576,2183,2714,2730,2827 'checklist':831,2232,2569,3526,3773 'choic':1488,2793 'choos':1431,1494 'churn':4208 'classif':3938 'classifi':3941,3950 'claud':792,2846,2851,2903,3151 'claude-cod':2902 'claude.md':2849 'clean':3782 'cleanup':2947,4485 'clear':1945,3232 'click':3108 'client':350,407,504,2741,2785,3396 'client-sid':349,406,503 'code':360,420,793,1611,1614,2584,2847,2904,3152,3374,3703,4245,4252,4268,4419 'codebas':50 'codex':2859 'colleagu':1057,1284 'collect':295,871 'come':3244 'command':388,1233,2631,3016,4355 'communic':1046 'compact':2061 'companion':14,152,2144,2263,2908,4078 'compil':1575,4214 'complet':212,428,484,791,1098,2198,2412,3036,3114,3134,3523,3539,4035,4162,4278 'concept':1319,1336 'concret':1133 'confid':1280,3943,3952 'config':338,464,1627,2627,3740,4364 'configur':94,121,124,231,318,331,334,342,434,438,468,489,562,1382,2281,2390,2620,2982,2985,3067,3073,3082,3086,3670,4119,4134,4137,4333,4337,4352,4368 'configure-the-mcp-serv':2389,3066 'confirm':219,371,1471,1481,1641,1865,2297,2957,3159,3977 'confus':3816 'connect':1645 'consent':1398,3441 'construct':1788 'contain':652 'content':1011 'context':1275,1343,1676,2583 'continu':996,1419,1565,1671,2177,2234,2383,2414,3239,3464,3753,3887,4108,4125,4301 'convent':3681 'convers':1278,2055 'copi':1036 'copilot':2857 'core':1590 'correct':1473 'cover':3044 'creat':112,531,534,541,549,567,777,797,1300,1988,2095,2255,2322,2483,2520,2935,3328,3336,3471,3476,3491,3505,3528,3556,3965,4271,4429,4473 'create-feature-flag':530 'create-your-first-feature-flag':548,3335 'create/evaluation':3518 'creation':2471 'credenti':1707 'csproj':2725 'current':1664,2196,2875 'cursor':773,1150,2839,2840,2843,2901,3149 'cursorrul':2841 'd1':989,1175 'd4':1424 'd4-local':1423 'd5':1176,1446,1463,1476,3436,3985,4040,4060 'd5-noapp':1445 'd5-unclear':1462 'd6':1560,3453 'd7':242,1177,1489,1730,3439 'd8':1518,3442 'd9':1529,3560 'dashboard':1764,1768,1895,3687 'decid':947 'decis':858,983,1172,1406,3315,3322,3428,3863,3870,3925,4283,4295,4298 'decision-point':982,1171,4282,4297 'decision-tre':3321,3869 'declin':235,4123 'deep':1760,1853,2794 'deep-link':1759 'default':621,669,2072,2416,2421,2881,3576,4437 'default-follow-through-not-numbered-step':2420 'defer':159,292,1706 'deleg':2923 'delet':2691,3790 'deliver':3613 'demo':1461,2329,3967 'dep':4206 'depend':1528,2715,3443,3883,4203,4227,4237 'deriv':1675 'describ':458 'detail':2796,3657 'detect':86,190,675,1186,1295,1450,1467,1479,1552,1571,1593,2260,2303,2795,2797,2815,2994,3057,3314,3359,3862,3915,3940,4058,4178,4398,4404 'detect/plan/apply':20,110 'determin':867 'differ':1354 'direct':604,714,892,1202,1969,2370,2526,3633,3844 'discoveri':375,2939,4477 'display':1013 'do-not-narrate-each-step':4318 'doc':2360,2503,2505,3821 'docs/launchdarkly_onboarding.md':2507,3793 'document':3594 'doesn':3248 'done':2579 'drive':2791 'driven':3756 'dual':3404,3412,4012,4020 'dual-sdk-integr':3411,4019 'duplic':3283 'durabl':2359 'dynam':633 'e.g':1148,1183,1191,1292,1368,1888,2211,2633,2655,2900,3397 'earli':99 'echo':729 'edg':2403,2768,2788,3852,4342 'edit':2668 'editor':1250,1588,2349,2356,3012,3120,3825,3830,3837,4362,4447 'editor-rul':2355 'editor-specif':3829 'elimin':267 'enabl':2285,3116,3130,3162 'end':1638,1640,2338,2340,3486,3488 'end-to-end':1637,2337,3485 'engin':1065,1211,1311 'english':1112 'entrypoint':4026 'env':357,413,1508,1625,2317,2614,2844,2852,3671 'environ':492,494,511,601,902,1327,1775,1827,1839,1900,2600,2779,2818,3050,4248 'envkey':1836 'equival':917 'error':1533,2640,2665,3575 'etc':324,1178,2728,2789,3014 'evalu':2325,3478,3707 'even':2013 'everi':1047,1081 'evid':1469 'exampl':1241,1917,3704 'execut':1358,2876 'exist':49,933,1029,1613,1622,2189,2492,2512,2732 'experiment':3738 'explain':1317,1332 'explicit':2650,4218 'explor':11,83,189,1551,2086,2258,2701,4174 'face':742,1045,1076,1168 'fail':928,2642,3209,4120 'fall':3251 'fallback':457,473,577,923,1509,2295,2624,3262 'featur':31,115,532,544,552,556,569,590,594,1931,3178,3331,3339,3474,3493,3530,3696,4431 'federal/eu':323 'file':772,1189,1208,1378,1572,1585,1628,2516,2525,2680,2716,3288,3668,3764 'find':1902,2160,3276,3685 'fine':2064 'finish':2215,2563,3586 'first':21,114,134,137,200,385,543,551,568,572,895,1289,1339,1649,1681,2097,2186,2320,2331,2334,2410,2537,2836,2998,3001,3220,3330,3338,3473,3492,3496,3529,3533,3563,3566,3879,3995,4346,4403,4425,4430,4434 'first-flag':133,136,571,2330,2333,2997,3000,3495,3532,3562,3565,4433 'flag':15,22,32,91,116,135,138,533,537,545,553,557,561,570,573,591,595,598,1298,1650,1812,1820,1932,2098,2276,2321,2324,2332,2335,2411,2912,2934,2938,2942,2946,2999,3002,3020,3179,3332,3340,3475,3481,3494,3497,3504,3531,3534,3545,3555,3564,3567,3697,3706,3757,3880,4079,4142,4272,4426,4432,4435,4461,4472,4476,4480,4484 'flag-manag':90,2911,3019 'flagkey':1826 'flow':1915,2971 'folder':1157,1266,1475,2510,2975 'follow':752,1009,1069,1583,1624,1922,2346,2395,2418,2422,3403,3490,3578,3649,3923,3935,4344,4401,4439 'follow-through':751,1582,2345,2417,3577,4438 'forbidden':1164 'format':986 'found':1454,2136,2457,3047,3930 'four':2439 'framework':1602,2138,2713,3049 'fresh':1684,1940 'friend':1055,1277,2044 'frontend':4002 'full':1703,2608,2774 'fulli':4147 'gemfil':2724 'generat':1766,1852,3366,3623,3642,4411 'generic':1799,1876,3715 'get':491,593,597,2251 'get-environ':490 'get-feature-flag':592 'get-flag-status-across-environ':596 'github':2856 'github.com':3028,4468 'github.com/launchdarkly/ai-tooling)':3027 'github.com/launchdarkly/ai-tooling](https://github.com/launchdarkly/ai-tooling)':4467 'github/copilot':2858 'give':2039 'go':1304,1897,3875,4117,4193 'go.mod':2718 'good':1240 'group':2019 'guard':3741 'guess':1596,3998 'halt':1410 'hand':3077,3342 'handl':1434,1505 'handoff':3596 'happen':2249 'hardcod':4240 'head':1203,2154,2468 'hello':391 'help':1444,3250 'hook':3835 'host':306,475,2622,3090,4339,4379 'howev':629 'https':4354 'id':352,409,506,1174,1420,2273,2586,2896 'identifi':2710,2778 'immedi':2111,3141 'import':2567 'in-sess':854 'includ':462,500,613,736,1086,1142,3645 'incomplet':2551 'indefinit':3294 'index':4453 'indic':2829,2865 'individu':528,2466 'infer':160,1721,2167,2819 'init':2314,3896,4028 'initi':102,645,1366,1630,2660,2764,3301,3312,3426,3667,3860,3886 'input':865,920,1558,1783,1867,2379,2445 'insid':2877,3430 'inspect':1597 'instal':19,89,100,107,128,131,151,191,207,364,424,1194,1272,1380,1390,1554,2092,2143,2221,2262,2302,2308,2311,2474,2658,2762,2802,2808,2811,2907,2910,2962,2989,2992,3018,3093,3112,3299,3310,3319,3347,3351,3364,3371,3378,3409,3424,3507,3542,3662,3858,3867,3894,3900,3903,3920,3946,4017,4032,4069,4072,4082,4170,4212,4230,4256,4277,4386,4391,4395,4409,4416,4423,4463 'install-and-initialize-the-sdk':2761 'instead':177,1794 'instruct':1005,1068,1134,1201,3125,3233,4073 'integr':30,37,368,397,1152,1246,2708,3056,3367,3406,3414,3748,3994,4022,4049,4412 'interact':2328 'intern':1067,1170,2078,2104 'invalid':2553 'invok':1912 'json':3095,4373 'keep':667,1658,2053,2502,3616,4185 'key':226,249,254,289,315,348,354,392,403,412,502,509,520,529,1348,1355,1514,1716,1734,1740,1773,1776,1828,1830,1858,1905,2598,2601,2610,3184,3665,3692,4242 'kickoff':7,52,59,63,679,1689,1692,1906,1941,1950 'kickoff-onboarding-roadmap':62,1691 'know':1701 'knowledg':1056,1283 'known':1778,1860,2588,2603,3182 'label':1138,1182,2105 'languag':1212,1601,2137,2711,3048,3701,3981 'language-specif':3700 'language/framework':2589 'larg':2069 'later':2168,2920,3204 'latest':4209 'launchdark':6,26,41,45,96,157,172,657,695,1334,1373,1527,1767,1894,1926,2118,2178,2275,2282,2596,2733,2737,2743,2933,2937,2941,2945,3240,3309,3345,3503,3554,3820,4202,4471,4475,4479,4483 'launchdarkly-flag':2274 'launchdarkly-flag-cleanup':2944,4482 'launchdarkly-flag-cr':2932,3502,3553,4470 'launchdarkly-flag-discoveri':2936,4474 'launchdarkly-flag-target':2940,4478 'launchdarkly-specif':1333 'launchdarkly.md':1587,2348,2695,3621,3643,3774,3789,4446 'launchdarkly/ai-tooling':2269,2930,3026,3551 'launchdarkly_onboarding.md':851,2185,2486,2498,3766,3791,4105,4304 'ld':2740,3053 'ld-client':2739 'ldcli':372,377,455 'ldcli/api':576,2294,3254 'ldcli/api/dashboard':4130 'ldclient':2738,2742 'ldwebsit':662 'let':178,277,1441 'lightweight':3171 'like':987,1053,1139,1281 'limit':4140 'link':208,259,1517,1761,1796,1854,2625,3113,3688,3732,4349,4356 'list':493,589,819,899,1813,1840,1976,2062,2226,3177 'list-feature-flag':588,3176 'live':70,2972,3192 'local':320,471,1425,1428,4374 'locat':1274,1421,1503,3798 'lockfil':4207 'log':10,72,188,771,852,1550,1663,1787,2193,2230,2237,2257,2470,2482,2493,2524,2536,2549,2670,2684,3198,3219,3266,3769,3786,3814,4114,4154,4189,4306 'log-creat':2469 'login':378 'look':2489 'm':1303 'maco':1162 'make':524,1018 'manag':92,1323,1605,2913,3021,3677,3758,4057 'manual':1130,1287,3094,4071 'mark':2550 'markdown':1205 'marker':654,721,985,1038 'match':395,1621,2228,2838,2880 'may':582,1544,2753,3144,3514 'mcp':13,97,120,123,203,206,228,305,307,322,330,333,337,341,426,433,437,446,463,467,476,486,579,1429,1723,1780,2216,2280,2283,2291,2392,2619,2981,2984,3069,3075,3081,3085,3091,3098,3139,3167,3172,3190,3201,3212,3273,3284,3296,3749,4118,4124,4133,4136,4326,4332,4336,4340,4347,4351,4359,4363,4367,4380 'mcp-configur':119,122,329,332,340,432,436,466,2980,2983,3080,3084,4132,4135,4331,4335,4350,4366 'mental':845 'mention':1340 'messag':646,689,2472 'metadata':723 'minim':1607 'minimum':2000 'mobil':353,410,411,508,2787 'modifi':1387 'moment':2344 'monorepo':2591,4038 'multipl':2864,3980 'must':394,481,754,870,1051,1085,1409,3537,3644,4034 'name':415,1190,2654,3664,3673,4095 'narrat':2148,2435,4321 'nativ':761,806,817,1979 'natur':184,1291 'navig':1885 'need':222,246,285,294,316,1121,1559,1736,1806 'nest':17,109,117,712,977,1224,2804,2979,3355,3434,4327,4387 'never':2604 'new':75,1952,3223,4101 'next':1108,1116,1223,2201,2218,2239,2542,2647,3728,4110,4158 'next.js':3400 'noapp':1447 'non':1526,1541,3458,4201 'non-block':1540,3457 'non-launchdark':1525,4200 'none':2879 'normal':3189 'note':2747,3193,3260,4139 'npm':1271 'npx':141,147,321,472,2265,2634,2927,3548,4089,4377 'number':830,939,1024,1180,1956,2102,2425,2561,2652,3581 'oauth':213,309,1724,2299,3115,3135 'object':1568,3468 'observ':2889,3484,3744 'occur':1404 'offer':255,1515,3963,4157 'offlin':2618 'onboard':1,2,39,43,60,64,71,480,612,651,770,1050,1083,1369,1662,1685,1693,1786,1907,1914,1927,2179,2256,2481,2686,2696,3197,3218,3241,3265,3348,3536,3587,3618,3628,3639,3768,3785,3850,4148,4441 'one':1017,1092,1483,1989,2001,2870 'one-vs-both-sdk':1482 'open':1260,1889,4358 'opt':452 'option':485,912,940,992,1002,1025 'orchestr':44,2966,4397 'order':1961,2400,2832,3358 'orient':1678 'origin':639,688 'otherwis':666,2406,3341 'output':743,1077,1169,2475 'outsid':3105 'over-explain':1315 'packag':1322,1391,1604,2313,3663,4024,4056 'package.json':2717 'package/service':4047 'packages/api':1265 'page':1800 'paper':1656 'paragraph':2058 'paramet':617 'paraphras':1198 'parent':2976 'part':3636,3802,3847 'past':2605 'patch':560 'path':144,300,1877,2593,2628 'pattern':1623,1631,1803,1810,2751,3720 'peer':4205 'peer-dep':4204 'per':328,510,1991,2767,3627,3836,4131,4361,4371 'per-ag':4370 'percentag':3734 'perform':1145,1958,2446 'perman':3777 'permiss':1376,2530,3810,4223,4233 'permission-before-changing-other-depend':4232 'person':1290 'pick':2868 'pin':4197 'pipfil':2721 'place':2036 'plain':1111 'plain-english':1110 'plan':369,1561,2304,2773,2995,3368,3416,3454,3462,3972,4014,4399,4413 'point':859,984,1173,1407,1456,3429,3957,4284,4296,4299 'pom.xml':2722 'possibl':444,1793,3591 'prefer':427,2506 'prerequisit':140,1756,1757,2170,2171 'present':204,585,828,1563,2159,2365,2450,2746,2772,2867,3037,3123,3460 'preview':1113,1562,2045,2368,3455 'primari':3612,4330 'principl':1591 'prioriti':2831 'probe':2288,3137,3165 'procedur':3285 'proceed':1220,1545,1968,2369,3060,3970 'produc':625 'progress':744,821,1982,1985,2032,2578 'progress-track':1984 'project':4,35,85,497,1156,1255,1619,1772,1811,1838,1847,1891,1935,2088,2259,2501,2597,2703,3183,3306,3691,3710,4176,4264 'projectkey':1817,1824,1834,1844 'prompt':640,648,910 'proof':1652,2341 'prose':884 'provid':248,253,815,903,1513,2617,4070 'public':2917,2965,3025,4460 'pyproject.toml':2720 'queri':616 'question':221,275,882,937,963,969,991,1218,1422,1708,3987,4042,4062,4285,4292 'quick':3092,3111 'quick-instal':3110 'quot':1066,1196 'raw':1199 're':1106,1674,3913,4087 're-deriv':1673 're-run':3912,4086 'reach':1016 'read':1573,2191,2534,4104 'reader':1308 'real':3690,3960 'realli':3423 'reason':2582 'recip':3007,3382,4076,4455 'recommend':1439 'redo':2546,4161 'refactor':4266 'refer':2079,3005,3654,3778,4300 'references/1.8-summary.md':2353,2698,3630,4443 'references/1.9-editor-rules.md':2358,3841,4451 'references/sdk/recipes.md':3008,3383,4077,4456 'references/sdk/snippets':3010,3387,4459 'refresh':2223,2485,3544,4112 'relev':240,2630 'reli':847 'remain':3538 'rememb':2893 'remov':3811 'render':935,1023,2028,2067 'repeat':3599 'replac':2693,2950 'repli':1048,1084 'repo':12,1389,1599,2363,2496,2918,3030,3625,3824,3983,4145,4156 'repositori':2798,3360,3916,4405 'request':526,1367,1460,1686 'requir':195,301,587,863,1078,1395,1755,1857,2116,2376,3100,3147,3622 'requirements.txt':2719 'resolv':257,698 'respond':3188 'respons':499,888,1042,1079,1417,1863 'rest':373,456 'restart':2243,3143,3230,3247 'restructur':1617,4260 'result':1102,2133 'resum':9,81,1946,1948,2172,2533,2678,3226,4096 'retri':1538 'reveal':181 'roadmap':8,55,61,65,747,1690,1694,1908,2030,2038,2367 'rollout':3735,3742 'root':1256,2497,2515,4054 'row':2023 'rule':418,1071,1359,1589,2350,2357,3013,3737,3826,3832,3838,4448 'run':198,386,1231,1238,1242,1251,1268,1270,1925,1953,2124,2431,2441,2632,3354,3914,4088,4316 'runnabl':1452,3928 'runtim':2872,2891 'say':1235,1752,2176,2405,2611,3238 'scan':684 'scope':1487,3438 'sdk':18,36,42,104,106,127,130,225,314,346,347,363,401,402,405,423,441,501,1193,1347,1480,1610,1643,1739,1829,1904,2094,2220,2301,2307,2310,2609,2662,2748,2766,2775,2792,2801,2807,2810,2988,2991,3006,3303,3318,3346,3350,3363,3370,3377,3381,3385,3405,3408,3413,3437,3656,3659,3856,3866,3881,3893,3899,3902,3909,3919,3945,4013,4016,4021,4031,4067,4075,4172,4216,4229,4241,4255,4276,4385,4390,4394,4408,4415,4422,4452,4454,4457 'sdk-instal':105,126,129,362,422,1192,2306,2309,2800,2806,2809,2987,2990,3317,3349,3362,3369,3376,3407,3865,3892,3898,3901,3918,3944,4015,4030,4228,4254,4389,4393,4407,4414,4421 'sdks':1486,3421 'search':2735 'secret':1394,1496,2606,2638,3440,3675 'section':3608 'see':58,154,260,566,981,1947,2100,2169,2213,3313,3433,3559,3650,3861,3897,4221,4250,4294,4307 'select':1000 'sentenc':1095 'separ':525,2153 'sequenc':1951 'server':98,399,2286,2393,2782,3070,3076,3118,3132,3164,3394,3401,3750,4006,4375 'server-sid':398,2781 'session':76,703,856,1669,3224,3589,4103 'set':27,658,1371,1498,1899,1929,2089,2461,3121,4360 'setup':46,1061,2217,2254,2430,2776,2968,3089,3099,3619,3751,4315 'setup-run-sil':4314 'seven':1998 'short':2057 'shorten':2754 'show':53,1687,1808,2204,2465,3705 'side':351,400,408,505,2783 'sign':287,718 'signup':258,608,699,1516 'silent':2432,2487,2820,4317 'similar':2181 'singl':516,2022,2452,2649,3039 'situat':3854 'skill':16,93,118,148,153,192,461,709,713,974,978,1188,1200,1225,1555,1751,1924,2145,2264,2266,2277,2635,2909,2914,2928,2931,2960,3022,3356,3435,3506,3546,3549,3552,3827,3834,3840,4080,4090,4094,4328,4388,4450,4462 'skill-onboarding' 'skill.md':2977,2978 'skip':2580,2756,2959,3324,3606,3872,3907,4085 'sln':2726 'snippet':3009,3386,3716,4458 'sole':848 'someon':1059 'someth':2566 'sound':1052 'sourc':261,264,517,605,615,631,656,660,670,694,4244 'source-attribut':263 'source-launchdark':655,693 'source-launchdarkly' 'spa':2786,3399 'specif':1335,1791,1819,1875,3680,3702,3831 'specifi':1502 'stack':2270,2799,3361,3712,3917,4180,4406 'start':176,2576 'state':2197,2541,3910,4150 'status':183,238,599,787,1714,1719,2165,2574 'step':66,155,185,201,223,303,344,429,539,546,564,681,748,782,790,802,839,844,862,1117,1179,1184,1357,1401,1426,1448,1465,1477,1490,1519,1530,1547,1569,1577,1580,1660,1725,1731,1744,1749,1957,1971,1992,1994,2004,2015,2101,2108,2113,2150,2199,2202,2240,2245,2247,2372,2385,2387,2396,2408,2426,2427,2437,2440,2467,2479,2543,2562,2570,2648,2651,2656,2699,2757,2759,2813,2898,2905,2921,2955,3033,3062,3064,3071,3205,3256,3292,3297,3326,3333,3431,3469,3509,3582,3601,3725,3729,3873,3877,3888,4083,4106,4111,4127,4152,4159,4163,4181,4187,4274,4302,4308,4311,4323,4324,4383,4427,4465 'still':482,3522 'stop':993,1031,1214,1535,2833,3572 'store':696,2612 'strong':2837 'structur':919,1080,1217,4291 'structured-input':918 'substant':1082,1696 'substitut':3693 'substr':692 'success':214,1654,2413,2688,2958 'suggest':3228 'summar':1096,2155,4149 'summari':2210,2271,2352,2453,2590,2697,3011,3040,3620,3626,3629,4442 'surfac':281,1728,2130,2887 'tabl':2070,2074 'target':2592,2943,3736,3933,3979,3992,4011,4481 'task':763,799,807,818,1975,1980,1990,1999,2225,3597 'task-track':762 'taskask':915 'taskcreat':795 'team':3781 'tell':1227,1880,3126,3234 'templat':339,465,3651,4365,4444 'termin':1153,1163,1247,1259,1262 'text':885,942,971,1039,4288 'thing':3686 'though':2014 'throughout':611,972 'todo':779 'todowrit':775,804 'togeth':2157 'toggl':558,2326,3482 'token':291,312,327,382,1437,1741 'tone':1276 'tool':487,580,765,823,877,891,896,921,926,932,954,959,1020,1028,1219,1781,1862,1981,2091,2290,2292,2886,3140,3173,3187,3202,3213,3448,3988,4043,4063,4143,4293 'topic-agent-skills' 'topic-launchdarkly-ai' 'topic-managed-by-terraform' 'track':745,756,764,822,857,1983,1986,2033,4037 'trail':1657 'treat':1362,1647,1936 'tree':3316,3323,3864,3871,3926 'tri':2646,3279 'trigger':650 'turn':1141,1966 'two':1094,3819,4023,4025,4027 'type':393,521,1356,2780,3051,3666 'ui':4348 'unavail':448,809,4382 'unclear':1464,3911,3934 'understand':2083,2195,2704 'unknown':1871 'unless':1566,1942,2401,3465 'unrel':4267 'updat':555,786,835,2522,2558,3216,4190 'update-feature-flag':554 'upfront':163,269,1717 'upgrad':4196 'url':609,700,1769,1792,1809 'usag':2734 'use':23,146,308,376,454,512,583,610,705,757,774,794,824,893,1288,1634,1801,1872,3200,3380,3515,3717,3799,3986,4041,4061,4129,4247,4289 'user':79,169,211,234,245,284,451,637,643,686,716,734,741,864,999,1044,1075,1127,1167,1229,1364,1415,1430,1455,1470,1493,1501,1504,1511,1557,1567,1680,1700,1782,1866,1882,1911,2041,2081,2122,2163,2175,2284,2378,2444,2478,2616,2825,3043,3102,3128,3158,3236,3271,3390,3467,3615,3955,3999,4122,4144,4219,4262 'user-fac':740,1043,1074,1166 'user-specifi':1500 'vagu':1137 'valid':1636,3908 'valu':622,2953 'var':1626,2318,2845,2853,3672 'variabl':414,1328,4249 've':3161 'verifi':3155,4341 'verify/toggle':3525 'version':2749 'via':431,2298,3547,4376,4464 'visibl':2342,3215 'vs':1484,2623,2964 'wait':944,1033,1412 'walk':1058 'want':4000 'weak':1468 'wherev':707 'whether':167,282,950,1432,3052,3272 'whose':2871,2885 'windsurf':2854 'windsurfrul':2855 'wire':356,2315,3519,3723 'without':1273,1672,2099,2443,2527,3540,3975,4160,4173,4217 'work':442,785,842,1697,2547,2683,3275,3698,3772,3813,4305 'workflow':180,279,1064,1210,2394,3640,3805,3851 'workflow-engin':1209 'workspac':3937,3942,3951 'wow':2343 'write':68,880,967,1379,1393,1586,2557,3631,3788,3842,4281 'y':2948,3557 'yes/no':2621","prices":[{"id":"16e9a77a-c0dd-447b-ba72-0c5c76fc4af1","listingId":"4a535c24-ab71-43b2-9bbd-b0f328be137b","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"launchdarkly","category":"ai-tooling","install_from":"skills.sh"},"createdAt":"2026-05-18T13:13:37.660Z"}],"sources":[{"listingId":"4a535c24-ab71-43b2-9bbd-b0f328be137b","source":"github","sourceId":"launchdarkly/ai-tooling/onboarding","sourceUrl":"https://github.com/launchdarkly/ai-tooling/tree/main/skills/onboarding","isPrimary":false,"firstSeenAt":"2026-05-18T13:13:37.660Z","lastSeenAt":"2026-05-18T19:07:26.530Z"}],"details":{"listingId":"4a535c24-ab71-43b2-9bbd-b0f328be137b","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"launchdarkly","slug":"onboarding","github":{"repo":"launchdarkly/ai-tooling","stars":12,"topics":["agent-skills","launchdarkly-ai","managed-by-terraform"],"license":"other","html_url":"https://github.com/launchdarkly/ai-tooling","pushed_at":"2026-05-18T17:04:09Z","description":"LaunchDarkly's official AI tooling","skill_md_sha":"1ce801b2dcd83e2aa989a33662527124cbc16695","skill_md_path":"skills/onboarding/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/launchdarkly/ai-tooling/tree/main/skills/onboarding"},"layout":"multi","source":"github","category":"ai-tooling","frontmatter":{"name":"onboarding","license":"Apache-2.0","description":"Onboard a project to LaunchDarkly: kickoff roadmap, resumable log, explore repo, MCP, companion flag skills, nested SDK install (detect/plan/apply), first flag. Use when adding LaunchDarkly, setting up or integrating feature flags in a project, SDK integration, or 'onboard me'.","compatibility":"Requires an MCP-capable coding agent, `npx` on PATH for optional skill installs, and a LaunchDarkly account. SDK keys, client-side IDs, mobile keys, and API tokens are only needed when the step that uses them runs (see Prerequisites)."},"skills_sh_url":"https://skills.sh/launchdarkly/ai-tooling/onboarding"},"updatedAt":"2026-05-18T19:07:26.530Z"}}