launchdarkly-flag-create
npx machina-cli add skill launchdarkly/agent-skills/launchdarkly-flag-create --openclawLaunchDarkly Flag Create & Configure
You're using a skill that will guide you through introducing a new feature flag into a codebase. Your job is to explore how flags are already used in this codebase, create the flag in LaunchDarkly in a way that fits, add the evaluation code matching existing patterns, and verify everything is wired up correctly.
Prerequisites
This skill requires the remotely hosted LaunchDarkly MCP server to be configured in your environment.
Required MCP tools:
create-flag— create a new feature flag in a projectget-flag— verify the flag was created correctly
Optional MCP tools (enhance workflow):
list-flags— browse existing flags to understand naming conventions and tagsupdate-flag-settings— update flag metadata (name, description, tags, temporary/permanent status)
Workflow
Step 1: Explore the Codebase
Before creating anything, understand how this codebase uses feature flags.
-
Find the SDK. Search for LaunchDarkly SDK imports or initialization:
- Look for
launchdarkly,ldclient,ld-client,LDClientin imports - Check
package.json,requirements.txt,go.mod,Gemfile, or equivalent for the SDK dependency - Identify which SDK is in use (server-side Node, React, Python, Go, Java, etc.)
- Look for
-
Find existing flag evaluations. Search for variation calls to understand the patterns this codebase uses:
- Direct SDK calls:
variation(),boolVariation(),useFlags(), etc. - Wrapper patterns: Does this codebase abstract flags behind a service or utility?
- Constant definitions: Are flag keys defined as constants somewhere?
- See SDK Evaluation Patterns for patterns by language
- Direct SDK calls:
-
Understand conventions. Look at existing flags to learn:
- Naming convention: Are keys
kebab-case,snake_case,camelCase? - Organization: Are flag keys co-located with features, or centralized in a constants file?
- Default values: What defaults do existing evaluations use?
- Context/user construction: How does this codebase build the user/context object passed to the SDK?
- Naming convention: Are keys
-
Check LaunchDarkly project conventions. Optionally use
list-flagsto see existing flags:- What tags are commonly used?
- Are flags marked as temporary or permanent?
- What naming patterns exist in the project?
Step 2: Determine the Right Flag Type
Based on what the user needs, choose the appropriate flag configuration. See Flag Types and Patterns for the full guide.
Quick decision:
| User intent | Flag kind | Variations |
|---|---|---|
| "Toggle a feature on/off" | boolean | true / false |
| "Gradually roll out a feature" | boolean | true / false |
| "A/B test between options" | multivariate (string) | User-defined values |
| "Configure a numeric threshold" | multivariate (number) | User-defined values |
| "Serve different config objects" | multivariate (JSON) | User-defined values |
Defaults to apply:
- Set
temporary: trueunless the user explicitly says this is a permanent/long-lived flag. Most flags are release flags that should eventually be cleaned up. - Generate a
keyfrom the name if not provided (e.g., "New Checkout Flow" →new-checkout-flow), but match the codebase's naming convention if one exists. - Suggest relevant tags based on the feature area, team, or context the user mentions.
Step 3: Create the Flag in LaunchDarkly
Use create-flag with the configuration determined in Step 2.
After creation:
- The flag is created with targeting OFF in all environments.
- The flag serves the
offVariationto everyone until targeting is turned on. - Remind the user they'll need to use the flag targeting skill to toggle it on and optionally set up rollout rules.
Step 4: Add Flag Evaluation to Code
Now add the code to evaluate the flag, matching the patterns you found in Step 1.
- Use the same SDK patterns the codebase already uses. If there's a wrapper, use the wrapper. If there are constants, add the new key to the constants file.
- Use an appropriate default value. The default (fallback) value in code should be the "safe" behavior — typically the existing behavior before the flag. This ensures the feature stays off if the SDK can't reach LaunchDarkly.
- Add the conditional logic. Wrap the new behavior in a flag check.
- Handle both branches. Make sure the code path for each variation is clear and complete.
See SDK Evaluation Patterns for implementation examples by language and framework.
Step 5: Verify
Confirm the flag is properly set up:
- Code compiles/passes linting. Run the project's build or lint step.
- Flag exists in LaunchDarkly. Use
get-flagto confirm it was created with the right configuration. - Both code paths work. The flag-off path preserves existing behavior; the flag-on path enables the new feature.
- Default value is safe. If LaunchDarkly is unreachable, the code falls back to the default — make sure that's the existing/safe behavior.
Updating Flag Settings
If the user wants to change flag metadata (not targeting), use update-flag-settings. Supported changes:
| Change | Instruction |
|---|---|
| Rename | {kind: "updateName", value: "New Name"} |
| Update description | {kind: "updateDescription", value: "New description"} |
| Add tags | {kind: "addTags", values: ["tag1", "tag2"]} |
| Remove tags | {kind: "removeTags", values: ["old-tag"]} |
| Mark as temporary | {kind: "markTemporary"} |
| Mark as permanent | {kind: "markPermanent"} |
Multiple instructions can be batched in a single call. These changes are project-wide, not environment-specific.
Important: Metadata updates (above) are separate from targeting changes (toggle, rollout, rules). If the user wants to change who sees what, direct them to the flag targeting skill.
Important Context
- Flag keys are immutable. Once created, a flag's key cannot be changed. Choose carefully.
- Flags start OFF. Creation never enables a flag. This is a safety feature.
- The default value in code is your safety net. It's what gets served when the SDK can't connect to LaunchDarkly. Always use the "safe" / existing behavior as the default.
- Follow existing codebase conventions. The most common mistake is introducing a flag pattern that doesn't match what the team already does. Step 1 exists to prevent this.
References
- Flag Types and Patterns — Boolean vs multivariate, naming conventions, configuration best practices
- SDK Evaluation Patterns — How to evaluate flags in each SDK, including common wrapper patterns
Source
git clone https://github.com/launchdarkly/agent-skills/blob/main/skills/feature-flags/launchdarkly-flag-create/SKILL.mdView on GitHub Overview
This skill guides you through introducing a new feature flag into a codebase using LaunchDarkly. It emphasizes exploring existing patterns before creating, selecting the right flag type, and wiring evaluation code so the flag aligns with your project and workflow.
How This Skill Works
Begin by confirming the remote LaunchDarkly MCP server and required MCP tools (create-flag and get-flag). Explore the codebase to understand existing flag usage and evaluation patterns, decide the appropriate flag type, create the flag in LaunchDarkly, and then integrate evaluation code that matches the project's conventions; verify the setup with get-flag and functional tests.
When to Use It
- You need to create a new feature flag to gate a code path or rollout.
- You want to wrap a specific code block or component behind a feature toggle.
- You’re adding a temporary or permanent release toggle for a deployment.
- You plan to set up an experiment or A/B test using multivariate variations.
- You want to align new flags with existing naming, tagging, and evaluation patterns by exploring the codebase first.
Quick Start
- Step 1: Explore the codebase to find how flags are used (SDK imports, variation calls, and constants).
- Step 2: Use create-flag to create the new flag in LaunchDarkly, choose the appropriate type, and set sensible defaults.
- Step 3: Wire evaluation code to match existing patterns and verify the flag with get-flag in your MCP environment.
Best Practices
- Explore existing SDK usage, flag keys, and evaluation patterns before creating a new flag.
- Apply defaults: temporary: true unless the user specifies permanent, and derive a key from the flag name if none is provided.
- Use list-flags to understand naming conventions and tags for consistency.
- Verify the flag with get-flag after creation and ensure the evaluation code follows established patterns.
- Document the flag’s purpose, tags, and expected evaluation behavior in the codebase.
Example Use Cases
- Create a boolean flag 'new-checkout-flow' to toggle to a redesigned checkout path and wrap the related UI logic behind the flag.
- Wrap a beta API endpoint in a flag, so the code paths switch based on the flag value during rollout.
- Add a temporary release toggle to enable a feature for a subset of users and quickly disable it if issues appear.
- Configure a multivariate flag for an A/B test on homepage layout, with variations like 'layout-A', 'layout-B'.
- Update flag metadata (name, description, tags) after creation to reflect team ownership and purpose, keeping consistency with project conventions.