Skills
Skill 15 of 56
Create and configure configs in LaunchDarkly. Helps you choose between agent vs completion mode, create the config, add variations with models and prompts, and verify the setup.
6 minutes · 1,389 words · 17 sections
Install
npx skills add launchdarkly/ai-tooling --skill configs-createnpx skills add launchdarkly/ai-tooling/plugin marketplace add launchdarkly/ai-toolingThe first command installs just this skill, by the name in its SKILL.md; the second installs the whole repository.
You’re using a skill that will guide you through creating a config in LaunchDarkly. Your job is to understand the use case, choose the right mode, create the config and its variations, and verify everything is set up correctly.
⚠️ This skill creates a config — it does not make it servable. A freshly-created config has its fallthrough pointing at an auto-generated disabled variation, not at the variation you just created. The SDK will return
ai_config.enabled=Falseon every evaluation until you flip targeting on and point the fallthrough at your new variation. This is not a bug — it’s the default state. You must run/configs-targeting(or the equivalent REST / CLI call shown in Step 5) before verifying against the SDK, or verification will look like the LD-served path is broken when it isn’t. The single most common failure mode users hit with this skill is skipping the targeting step and spending time debuggingenabled=Falsein their application code.
This skill requires the remotely hosted LaunchDarkly MCP server to be configured in your environment.
Primary MCP tool:
create-agent-config with resource: "config" – create a config with its first variation in one step (recommended): pass variationKey, variationName, modelConfigKey, modelName, and instructions or messages along with the config fieldsAlternative MCP calls (for more control):
create-agent-config with resource: "config" – create just the config shell (configKey, name, mode)create-agent-config with resource: "variation" – add a variation with model, prompts, and parametersget-agent-configs – verify the config was created correctlyOptional MCP tools (enhance workflow):
get-agent-configs – browse existing configs to understand naming conventionscreate-project – create a project if one doesn’t exist yetWhen the user provides enough context (use case, model, mode), proceed through the entire workflow without stopping to ask for details you can infer. Use reasonable defaults for unspecified fields: default for variation key, the use case as the basis for instructions/messages, kebab-case for config keys. Complete all steps (create + verify) in one pass.
Before creating, identify what you’re building:
This choice is about input schema and framework compatibility, not execution behavior. Agent mode returns an instructions string; completion mode returns a messages array. Both provide provider abstraction, A/B testing, and metrics tracking.
| Your Need | Mode | Why |
|---|---|---|
| LangGraph, CrewAI, Strands, AutoGen frameworks | Agent | Frameworks expect goal/instruction input |
| Persistent instructions across interactions | Agent | Single instructions string, SDK method: agent_config() (Python) / agentConfig() (Node) |
| Direct OpenAI/Anthropic API calls | Completion | Messages array maps directly to provider APIs |
| Full control of message structure | Completion | System/user/assistant role-based messages |
| One-off text generation | Completion | Standard chat format |
| Need online evaluations (LLM-as-judge) | Completion | Online evals are only available in completion mode |
Both modes support tools. Not all models support agent mode – check model compatibility if using agent mode. If unsure, start with completion mode (it’s the API default and more flexible).
Use create-agent-config with resource: "config" and the first variation’s fields to create both in one call. This is the recommended approach: it handles creation, variation setup, and verification automatically.
Config fields:
resource – "config"configKey – unique identifier (lowercase, hyphens)name – the config’s human-readable namemode – "agent" or "completion"description, tagsVariation fields:
variationKey, variationName – identifiers for the first variationmodelConfigKey – a key from get-ai-model-configs: a global Provider.model-id key (e.g., OpenAI.gpt-4o, Anthropic.claude-sonnet-4-5) or a custom model config’s own keymodelName – the model identifier (e.g., gpt-4o). Always pass this in the initial call — leaving it off produces a variation that displays “NO MODEL” and forces a second PATCH to set it. The field is modelName; it is not name or model.name on this endpoint, and name is only ever the config’s name.For agent mode, provide:
instructions – a string with the agent’s system instructionsExample agent-mode call:
{
"projectKey": "my-project", "resource": "config", "configKey": "support-agent", "name": "Support Agent",
"mode": "agent", "variationKey": "default", "variationName": "Default",
"modelConfigKey": "OpenAI.gpt-4o", "modelName": "gpt-4o",
"instructions": "You are a customer support agent. Help users resolve their issues."
}For completion mode, provide:
messages – an array of {role, content} objects (system, user, assistant)Example completion-mode call:
{
"projectKey": "my-project", "resource": "config", "configKey": "product-descriptions", "name": "Product Descriptions",
"mode": "completion", "variationKey": "default", "variationName": "Default",
"modelConfigKey": "Anthropic.claude-sonnet-4-5", "modelName": "claude-sonnet-4-5",
"messages": [
{"role": "system", "content": "You are a product copywriter. Write compelling descriptions."},
{"role": "user", "content": "Write a description for: {{product_name}}"}
]
}Optional:
parameters – model parameters like {temperature: 0.7, max_tokens: 2000} (match the UI’s snake_case keys)The tool returns the full verified config detail with the variation attached.
If the user asks for more control or a step-by-step approach, use the individual tools:
create-agent-config with resource: "config" and no variationKey – create the config shellcreate-agent-config with resource: "variation", configKey, variationKey, variationName, model, and prompts – add the variationget-agent-configs – verify the resultExecute all three steps without stopping to ask for details. Infer the variation key (default), name (Default), instructions/messages, and model from the user’s request context. If the user asked for GPT-4o agent mode, you have enough to complete the entire flow. Only ask clarifying questions if the mode or model is truly ambiguous.
If you created the config with its first variation in one call, verification is automatic: the response includes the full config with variations. Check:
Use get-agent-configs for the verification call — do not drop to raw curl + jq. The MCP tool returns a typed object you can inspect directly. Hand-rolled jq filters against the REST response routinely break: the configs detail endpoint returns the variation list under different keys depending on expand, and a filter like .variations.items[] will fail with Cannot index array with string "items" when the response shape is a bare array. If you must call the REST API, use jq -e . first to inspect the actual shape before drilling in.
Report results:
https://app.launchdarkly.com/projects/{projectKey}/ai-configs/{configKey}create-agent-config creates the variation but do not promote it to fallthrough. The new config will return enabled=False to every consumer until targeting is updated. This is the single most common “I created a config but my SDK still gets the fallback” failure. The workflow is not complete until this step is done.
Print this checklist verbatim to the user after Step 4, then wait for confirmation. Do not claim the skill succeeded until the user confirms the fallthrough was flipped.
✅ Config and variation are created.
🔴 The SDK will return
enabled=Falseuntil you flip targeting on. The fallthrough is currently pointing at an auto-generated disabled variation, not at the{variationKey}you just created.Next step — run
/configs-targetingwith these inputs:
- Project key:
{projectKey}- Config key:
{configKey}- Environment key: the env whose SDK key is in your
.env(usuallytestorproduction)- Fallthrough variation:
{variationKey}(the one this skill just created)Verify after targeting is flipped by:
- Opening the config in the LD UI, switching to the correct environment, and confirming “Default rule serves:
{variationName}“ is shown with targeting On.- Running a quick test:
ai_config = ai_client.{completion|agent}_config(...)and assertingai_config.enabled is True.
configs-targeting is the canonical path — it handles percentage rollouts, targeted rules, and individual targets. For the simplest case (“promote the new variation to fallthrough in one environment”), call update-agent-config with resource: "targeting" and a fallthrough after the user agrees:
{
"projectKey": "{projectKey}",
"configKey": "{configKey}",
"resource": "targeting",
"env": "{envKey}",
"fallthrough": {"variationKey": "{variationKey}"},
"confirm": true
}Then call get-agent-configs with configKey, section: "targeting", and env to confirm the default rule serves that variation.
Do not use turnTargetingOn — that semantic-patch instruction does not work for configs. Setting the fallthrough is what makes the config serve the new variation.
Required for models to display in the UI. Format: {Provider}.{model-id}
OpenAI.gpt-4oOpenAI.gpt-4o-miniAnthropic.claude-sonnet-4-5Anthropic.claude-3-5-sonnetcreate-agent-config validates this format and rejects invalid values.
| Situation | Action |
|---|---|
| Config already exists | Ask if user wants to update instead |
| Variation shows “NO MODEL” | Use update-agent-config with resource: "variation" to set modelConfigKey |
| Need to attach tools | Create tools first (tools skill), then update the variation |
modelName from the initial variation call. It is required at create time; setting it via a follow-up PATCH is a workaround for a bug, not the intended flow. The PATCH field is also modelName, not name.curl + jq for verification. Use get-agent-configs (MCP) — it returns a typed object and avoids brittle jq filters that break on response-shape variation.configs-targeting. A created variation that isn’t promoted to fallthrough returns enabled=False to every consumer.To learn more about creating a config in the LaunchDarkly UI, read Create configs (opens in a new tab)
To learn more about configuring the SDK, read:
tools – Create tools before attachingconfigs-variations – Add more variations for experimentationconfigs-update – Modify configs based on learningsskills/agentcontrol/configs-create/SKILL.mdmain, last pushed 7 November 2026.SKILL.md, not by matching a directory convention. 10 distinct layouts observed: skills/agentcontrol/*/SKILL.md, skills/aws-devops-agent/*/SKILL.md, skills/experiments/*/SKILL.md, skills/feature-flags/*/SKILL.md, skills/metrics/*/SKILL.md, skills/observability/*/SKILL.md, skills/onboarding/*/SKILL.md, skills/onboarding/sdk-install/*/SKILL.md, skills/*/SKILL.md, skills/release-autopilot/*/SKILL.md.h1 and no skipped levels:.claude-plugin/marketplace.json by LaunchDarkly, declaring 1 plugin. It is read for editorial metadata only — never as the skill index, which is always the repository tree./launchdarkly/ai-tooling.md, and each skill at its own .md URL.1 file · 1 KB
Everything this skill ships beside its prose. All of it is set here, as a subchapter of skill 15.
Everything else published alongside the skill.