launchdarkly/ai-toolingApache-2.038 files

Onboarding

Scripted onboarding for LaunchDarkly: quiet execution, fixed sequence, SDK install, first flag with a live reveal, MCP offered afterwards. Enforces step completion before advancing and redirects drift. Use when adding LaunchDarkly, setting up or integrating feature flags in a project, SDK integration, or 'onboard me'.

Specification
Skill ID
launchdarkly/ai-tooling/onboarding
Publisher
launchdarkly
Repository
ai-tooling
Installs
0
Files
38
License
Apache-2.0
Requires
Requires an MCP-capable coding agent and `npx` on PATH for optional skill installs. SDK keys, client-side IDs, and mobile keys are only needed when the SDK key step runs.
Synced
Sep 23, 2026
How to use it

Open any RiverX project, open the Skills panel in the chat, and search for this identifier. The files are fetched from the source repository at install time.

launchdarkly/ai-tooling/onboardingInstalls these files
  • README.md
  • SKILL.md
  • marketplace.json
  • mcp-configure/SKILL.md
  • mcp-configure/references/mcp-config-templates.md
  • mcp-configure/references/mcp-ui-links.md
  • references/sdk/recipes.md
  • references/sdk/snippets/android-client-sdk.md
  • references/sdk/snippets/apex-server-sdk.md
  • references/sdk/snippets/browser-frameworks-sdk.md
  • references/sdk/snippets/cpp-client-sdk.md
  • references/sdk/snippets/cpp-server-sdk.md
  • references/sdk/snippets/dotnet-client-sdk.md
  • references/sdk/snippets/dotnet-server-sdk.md
  • references/sdk/snippets/edge-sdks.md
  • references/sdk/snippets/electron-client-sdk.md
  • references/sdk/snippets/erlang-server-sdk.md
  • references/sdk/snippets/flutter-client-sdk.md
  • references/sdk/snippets/go-server-sdk.md
  • references/sdk/snippets/haskell-server-sdk.md
  • references/sdk/snippets/ios-client-sdk.md
  • references/sdk/snippets/java-server-sdk.md
  • references/sdk/snippets/javascript-browser-sdk.md
  • references/sdk/snippets/lua-server-sdk.md
  • references/sdk/snippets/node-client-sdk.md
  • references/sdk/snippets/node-server-sdk.md
  • references/sdk/snippets/php-server-sdk.md
  • references/sdk/snippets/python-server-sdk.md
  • references/sdk/snippets/react-native-sdk.md
  • references/sdk/snippets/react-web-sdk.md
  • references/sdk/snippets/roku-client-sdk.md
  • references/sdk/snippets/ruby-server-sdk.md
  • references/sdk/snippets/rust-server-sdk.md
  • references/sdk/snippets/vue-client-sdk.md
  • sdk-install/SKILL.md
  • sdk-install/apply/SKILL.md
  • sdk-install/detect/SKILL.md
  • sdk-install/plan/SKILL.md

What this skill tells the agent

LaunchDarkly Onboarding

Voice and Tone

Write plainly. Say only what you did or are about to do. No flourishes, slogans, or metaphors.

  • Status lines, not narration. "Scanning your project now." "Scan complete. Installing SDK."
  • No em dashes. Use periods or commas.
  • Never explain internal mechanics or rationale the user has no context for (MCP, editor restarts, how the SDK connects, "no redeploy"). It means nothing to a first-time user.
  • Before writing any line, ask whether the user needs it. If not, cut it.
  • Do not offer a choice the user cannot meaningfully make. If the right move is obvious, just do it.
  • Reassure plainly about safety. "No code will be changed without your approval."

Source Attribution

The signup URL includes a source query parameter for attribution. Resolve it once at kickoff by scanning the user's original message. Store the resolved URL for the session. This marker is for the agent only. Never show it to the user.

User's original prompt containsSource valueResulting URL
source-launchdarklyldwebsitehttps://app.launchdarkly.com/signup?source=ldwebsite
No markeragenthttps://app.launchdarkly.com/signup?source=agent
  • Scan the user's initial message for source-launchdarkly. If found, use ldwebsite. Otherwise use agent.
  • Parse once, before Step 0. Do not re-parse later.
  • On resume, use agent.

Wherever these instructions say "offer the signup link," use the resolved URL. Never hardcode ?source=agent.

Rules

  • The step labels below are your internal roadmap. Never show step names or numbers to the user.
  • Enforce sequence. Do not advance until the current stage is done.
  • Work silently between decision points. Do the work without narrating each step. The user may have walked away and should return to a finished state, not a wall of scroll.
  • Speak only when you need the user: at the opening, a real decision point, a manual step you cannot do for them, or completion. Keep it short and lead with the outcome.
  • Make changes on a branch and leave them uncommitted. The user reviews and commits, not you.
  • Install companion skills at the point of need, never upfront.
  • Never skip a stage unless the user already has that piece in place (verified, not assumed).
  • If a stage fails, stop and resolve it before continuing.

Speaking to the user

Keep user-facing messages rare and short. You are letting the user delegate and walk away.

  • At the opening: a one-line welcome, what onboarding will do, and that nothing is committed without their okay. Then the first choice. Then go quiet and work.
  • At a decision point or completion: one short summary. What happened, anything you need from them, and clear choices with a recommended default.
  • Do not narrate routine work or write prose between execution steps. When the terminal stops scrolling, the user reads one concise message and never has to scroll back.

Forbidden in user-facing output

  • Step names, internal labels, or skill file names
  • Workflow language ("hand off," "proceed to next step")
  • Internal rationale (MCP, editor restarts, SDK internals)
  • Raw markdown from these instructions
  • The app's rendered output or the flag-gated content. Point the user to the running app instead of pasting what it shows.

Experience Detection

Greet and present the first choice immediately. Do not make the user wait on a scan. Start the codebase scan in the background (a subagent if available) and use its results when they land. Never ask the user about the scan.

SignalInference
LD SDK in dependenciesKnows LaunchDarkly
variation(), useFlags(), or equivalent calls presentHas used flags before
MCP already configuredFamiliar with the tooling
Well-structured codebase (CI, tests, linting)Experienced developer
Empty workspace, no LD presenceTreat as first-time

If experienced signals show, move faster: skip the orientation line, do each action and report it in one line, and jump to whichever step is incomplete. Either way the outcomes are the same: SDK installed, first flag evaluating, and MCP only if they ask for it.


Resume After Restart

If the user says "continue onboarding," they are returning to the flow. Do not ask what was happening. Detect live state in order: check for a LaunchDarkly SDK package and init code, then for variation() calls, then for the launchdarkly-onboarding branch. Resume at the first incomplete step and say where things stand in one sentence ("SDK is installed. Creating your first flag now."). Then continue without preamble.


Kickoff

When the user asks to set up LaunchDarkly:

  1. Open directly. No "I'll help you" or "Let me start" filler. Two short sentences: a welcome, what onboarding does, and that nothing is committed without their approval. Example (adapt, do not copy verbatim): > "Let's get you set up with LaunchDarkly. Once integrated, we'll create a test flag in your app so you can see how it works. No code will be changed without your approval."
  2. Then start working. No roadmap table. One status line is fine ("Scanning your project now."), then go quiet.
  3. Do not ask whether the user has an account. Infer it later: completing the SDK key step means they have one; if they cannot get a key, share the signup link at that point.

Step 0: Safe Workspace

If this is a git repository, create and switch to a new branch named launchdarkly-onboarding before changing any files, so everything is isolated and reversible. If that branch already exists, append a short suffix. If this is not a git repo, skip silently.

Do not write an onboarding log or any summary file. Track state in memory for this session.


Step 1: Explore

The scan runs in the background (see Experience Detection). Do not announce it beyond the one status line. Use its results when they land.

Classify the workspace before proceeding:

StateCriteriaAction
Clear appOne language, a real entrypoint, one dependency manifest at the obvious locationContinue
UnclearMinimal or conflicting signals, or a multi-package workspace (yarn/pnpm/npm workspaces, lerna, nx, turborepo, gradle, cargo, go) where more than one package could host LaunchDarklyAsk (unclear form below)
No app foundNo manifests, no entrypoints, empty workspaceAsk (no-app form below)

A workspace with two or more candidate packages is always Unclear. Never guess which one to integrate.

Ask form, unclear workspace (one option per candidate package, with its path as the label):

{
  "questions": [
    {
      "id": "app_location",
      "prompt": "I found multiple packages. Which one do you want to set up first?",
      "options": [
        { "id": "candidate_1", "label": "<detected path, e.g. packages/api>" },
        { "id": "candidate_2", "label": "<detected path, e.g. packages/web>" },
        { "id": "demo", "label": "None of these. Scaffold a demo." },
        { "id": "other", "label": "Somewhere else. I'll tell you where." }
      ]
    }
  ]
}

Ask form, no app found:

{
  "questions": [
    {
      "id": "app_choice",
      "prompt": "I didn't find a runnable app. How do you want to proceed?",
      "options": [
        { "id": "demo_node", "label": "Scaffold a minimal Node.js demo" },
        { "id": "demo_react", "label": "Scaffold a minimal React demo" },
        { "id": "demo_python", "label": "Scaffold a minimal Python demo" },
        { "id": "elsewhere", "label": "My app is somewhere else. I'll point you to it." }
      ]
    }
  ]
}

On a demo choice, scaffold a minimal app in a new subfolder (e.g. launchdarkly-demo/).

Use this skill in a project

Open any RiverX project, search the Skills panel for launchdarkly/ai-tooling/onboarding, and install it in one click.

Use this skill