[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-launchdarkly-launchdarkly-flag-cleanup":3,"mdc--71mwp9-key":37,"related-org-launchdarkly-launchdarkly-flag-cleanup":1410,"related-repo-launchdarkly-launchdarkly-flag-cleanup":1544},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":23,"repoUrl":24,"updatedAt":25,"license":26,"forks":27,"topics":28,"repo":32,"sourceUrl":35,"mdContent":36},"launchdarkly-flag-cleanup","remove feature flags from codebases","Safely remove a feature flag from code while preserving production behavior. Use when the user wants to remove a flag from code, delete flag references, or create a PR that hardcodes the winning variation after a rollout is complete.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"launchdarkly","LaunchDarkly","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Flaunchdarkly.png",[12,16,19,22],{"name":13,"slug":14,"type":15},"Feature Flags","feature-flags","tag",{"name":17,"slug":18,"type":15},"Engineering","engineering",{"name":20,"slug":21,"type":15},"Tech Debt","tech-debt",{"name":9,"slug":8,"type":15},20,"https:\u002F\u002Fgithub.com\u002Flaunchdarkly\u002Fai-tooling","2026-05-15T06:19:33.24145","Apache-2.0",6,[29,30,31],"agent-skills","launchdarkly-ai","managed-by-terraform",{"repoUrl":24,"stars":23,"forks":27,"topics":33,"description":34},[29,30,31],"LaunchDarkly's official AI tooling","https:\u002F\u002Fgithub.com\u002Flaunchdarkly\u002Fai-tooling\u002Ftree\u002FHEAD\u002Fskills\u002Ffeature-flags\u002Flaunchdarkly-flag-cleanup","---\nname: launchdarkly-flag-cleanup\ndescription: \"Safely remove a feature flag from code while preserving production behavior. Use when the user wants to remove a flag from code, delete flag references, or create a PR that hardcodes the winning variation after a rollout is complete.\"\nlicense: Apache-2.0\ncompatibility: Requires the remotely hosted LaunchDarkly MCP server\nmetadata:\n  author: launchdarkly\n  version: \"1.0.0-experimental\"\n---\n\n# LaunchDarkly Flag Cleanup\n\nYou're using a skill that will guide you through safely removing a feature flag from a codebase while preserving production behavior. Your job is to explore the codebase to understand how the flag is used, query LaunchDarkly to determine the correct forward value, remove the flag code cleanly, and verify the result.\n\nIf you haven't already identified which flag to clean up, use the [flag discovery skill](..\u002Flaunchdarkly-flag-discovery\u002FSKILL.md) first to audit the landscape and find candidates.\n\n## Prerequisites\n\nThis skill requires the remotely hosted LaunchDarkly MCP server to be configured in your environment.\n\n**Required MCP tools:**\n- `check-removal-readiness`: detailed safety check (orchestrates flag config, cross-env status, dependencies, code references, and expiring targets in parallel)\n- `get-flag`: fetch flag configuration for a specific environment\n\n**Optional MCP tools:**\n- `archive-flag`: archive the flag in LaunchDarkly after code removal\n- `delete-flag`: permanently delete the flag (irreversible, prefer archive)\n\n## Core Principles\n\n1. **Safety First**: Always preserve current production behavior.\n2. **LaunchDarkly as Source of Truth**: Never guess the forward value. Query the actual configuration.\n3. **Follow Conventions**: Respect existing code style and structure.\n4. **Minimal Change**: Only remove flag-related code. No unrelated refactors.\n\n## Workflow\n\n### Step 1: Explore the Codebase\n\nBefore touching LaunchDarkly or removing code, understand how this flag is used in the codebase.\n\n1. **Find all references to the flag key.** Search for the flag key string (e.g., `new-checkout-flow`) across the codebase. Check for:\n   - Direct SDK evaluation calls (`variation()`, `boolVariation()`, `useFlags()`, etc.)\n   - Constants\u002Fenums that reference the key\n   - Wrapper\u002Fservice patterns that abstract the SDK\n   - Configuration files, tests, and documentation\n   - See [SDK Patterns](references\u002Fsdk-patterns.md) for the full list of patterns by language\n\n2. **Understand the branching.** For each reference, identify:\n   - What code runs when the flag is `true` (or variation A)?\n   - What code runs when the flag is `false` (or variation B)?\n   - Are there side effects, early returns, or nested conditions?\n\n3. **Note the scope.** How many files, components, or modules does this flag touch? A flag used in one `if` block is simpler than one threaded through multiple layers.\n\n### Step 2: Run the Removal Readiness Check\n\nUse `check-removal-readiness` to get a detailed safety assessment. This single tool call orchestrates multiple checks in parallel:\n- Flag configuration and targeting state\n- Cross-environment status\n- Dependent flags (prerequisites)\n- Expiring targets\n- Code reference statistics\n\nThe tool returns a readiness verdict:\n\n**`safe`**: No blockers or warnings. Proceed with removal.\n\n**`caution`**: No hard blockers but warnings exist (e.g., code references in other repos, expiring targets scheduled, flag marked as permanent). Present warnings and let the user decide.\n\n**`blocked`**: Hard blockers prevent safe removal (e.g., dependent flags, actively receiving requests, targeting is on with active rules). Present blockers: the user must resolve them first.\n\n### Step 3: Determine the Forward Value\n\nUse `get-flag` to fetch the flag configuration in each critical environment. The **forward value** is the variation that replaces the flag in code.\n\n| Scenario | Forward Value |\n|----------|---------------|\n| All critical envs ON, same fallthrough, no rules\u002Ftargets | Use `fallthrough.variation` |\n| All critical envs OFF, same offVariation | Use `offVariation` |\n| Critical envs differ in ON\u002FOFF state | **NOT SAFE**: stop and inform the user |\n| Critical envs serve different variations | **NOT SAFE**: stop and inform the user |\n\n### Step 4: Present the Cleanup Plan\n\nBefore modifying any code, present a summary to the user and wait for confirmation:\n\n1. **The forward value** — which variation will be hardcoded and why (based on the flag's current state).\n2. **All code references found** — file paths and line numbers from Step 1.\n3. **Planned changes** — for each reference, describe what will be removed and what will be kept.\n4. **Readiness verdict** — the result from `check-removal-readiness` (safe, caution, or blocked) and any warnings.\n5. **LaunchDarkly action** — confirm the flag will be archived after code changes are complete.\n\n**Do not proceed with code changes until the user explicitly confirms.**\n\n### Step 5: Remove the Flag from Code\n\nNow execute the removal using what you learned in Step 1.\n\n1. **Replace flag evaluations with the forward value.**\n   - Preserve the code branch matching the forward value\n   - Remove the dead branch entirely\n   - If the flag value was assigned to a variable, replace the variable with the literal value or inline it\n\n2. **Clean up dead code.**\n   - Remove imports, constants, and type definitions that only existed for the flag\n   - Remove functions, components, or files that only existed for the dead branch\n   - Check for orphaned exports, hooks, helpers, styles, and test files\n   - If the repo uses an unused-export tool (Knip, ts-prune, lint rules), run it and remove any flag-related orphans\n\n3. **Don't over-clean.**\n   - Only remove code directly related to the flag\n   - Don't refactor, optimize, or \"improve\" surrounding code\n   - Don't change formatting or style of untouched code\n\n**Example transformation (boolean flag, forward value = `true`):**\n\n```typescript\n\u002F\u002F Before\nconst showNewCheckout = await ldClient.variation('new-checkout-flow', user, false);\nif (showNewCheckout) {\n  return renderNewCheckout();\n} else {\n  return renderOldCheckout();\n}\n\n\u002F\u002F After\nreturn renderNewCheckout();\n```\n\n### Step 6: Create Pull Request\n\nUse the template in [references\u002Fpr-template.md](references\u002Fpr-template.md) for a structured PR description. The PR should clearly communicate:\n- What flag was removed and why\n- What the forward value is and why it's correct\n- The readiness assessment results (from `check-removal-readiness`)\n- What code was removed and what behavior is preserved\n- Whether other repos still reference this flag\n\n### Step 7: Verify\n\nBefore considering the job done:\n\n1. **Code compiles and lints.** Run the project's build and lint steps.\n2. **Tests pass.** If the flag was used in tests, the tests should be updated to reflect the hardcoded behavior.\n3. **No remaining references.** Search the codebase one more time for the flag key to make sure nothing was missed.\n4. **PR is complete.** The description covers the readiness assessment, forward value rationale, and any cross-repo coordination needed.\n\n## Edge Cases\n\n| Situation | Action |\n|-----------|--------|\n| Flag not found in LaunchDarkly | Inform user, check for typos in the key |\n| Flag already archived | Ask if code cleanup is still needed (flag is gone from LD but code may still reference it) |\n| Multiple SDK patterns in codebase | Search all patterns: `variation()`, `boolVariation()`, `variationDetail()`, `allFlags()`, `useFlags()`, plus any wrappers |\n| Dynamic flag keys (`flag-${id}`) | Warn that automated removal may be incomplete: manual review required |\n| Different default values in code vs LD | Flag as inconsistency in the PR description |\n| Orphaned exports\u002Ffiles remain after removal | Run unused-export checks and remove dead files |\n\n## What NOT to Do\n\n- Don't change code unrelated to flag cleanup.\n- Don't refactor or optimize beyond flag removal.\n- Don't remove flags still being actively rolled out.\n- Don't guess the forward value: always query LaunchDarkly.\n\n## After Cleanup\n\nOnce the PR is merged and deployed:\n1. **Archive the flag in LaunchDarkly** using `archive-flag`. Archival is reversible; deletion is not. Always archive first.\n2. **Notify other teams** if `check-removal-readiness` reported code references in other repositories.\n3. **If the flag had targeting changes pending,** they can be ignored: the flag is being removed.\n\n## References\n\n- [PR Template](references\u002Fpr-template.md): Structured PR description for flag removal\n- [SDK Patterns](references\u002Fsdk-patterns.md): Flag evaluation patterns by language\u002Fframework\n- [Flag Discovery](..\u002Flaunchdarkly-flag-discovery\u002FSKILL.md): Find cleanup candidates before using this skill\n- [Flag Targeting](..\u002Flaunchdarkly-flag-targeting\u002FSKILL.md): If you need to change targeting instead of removing\n",{"data":38,"body":42},{"name":4,"description":6,"license":26,"compatibility":39,"metadata":40},"Requires the remotely hosted LaunchDarkly MCP server",{"author":8,"version":41},"1.0.0-experimental",{"type":43,"children":44},"root",[45,53,59,73,80,85,94,122,130,155,161,205,211,218,223,364,370,382,410,415,429,443,457,463,481,579,585,590,650,658,664,669,755,770,1016,1022,1034,1068,1074,1079,1122,1128,1268,1274,1297,1303,1308,1355,1361,1404],{"type":46,"tag":47,"props":48,"children":49},"element","h1",{"id":4},[50],{"type":51,"value":52},"text","LaunchDarkly Flag Cleanup",{"type":46,"tag":54,"props":55,"children":56},"p",{},[57],{"type":51,"value":58},"You're using a skill that will guide you through safely removing a feature flag from a codebase while preserving production behavior. Your job is to explore the codebase to understand how the flag is used, query LaunchDarkly to determine the correct forward value, remove the flag code cleanly, and verify the result.",{"type":46,"tag":54,"props":60,"children":61},{},[62,64,71],{"type":51,"value":63},"If you haven't already identified which flag to clean up, use the ",{"type":46,"tag":65,"props":66,"children":68},"a",{"href":67},"..\u002Flaunchdarkly-flag-discovery\u002FSKILL.md",[69],{"type":51,"value":70},"flag discovery skill",{"type":51,"value":72}," first to audit the landscape and find candidates.",{"type":46,"tag":74,"props":75,"children":77},"h2",{"id":76},"prerequisites",[78],{"type":51,"value":79},"Prerequisites",{"type":46,"tag":54,"props":81,"children":82},{},[83],{"type":51,"value":84},"This skill requires the remotely hosted LaunchDarkly MCP server to be configured in your environment.",{"type":46,"tag":54,"props":86,"children":87},{},[88],{"type":46,"tag":89,"props":90,"children":91},"strong",{},[92],{"type":51,"value":93},"Required MCP tools:",{"type":46,"tag":95,"props":96,"children":97},"ul",{},[98,111],{"type":46,"tag":99,"props":100,"children":101},"li",{},[102,109],{"type":46,"tag":103,"props":104,"children":106},"code",{"className":105},[],[107],{"type":51,"value":108},"check-removal-readiness",{"type":51,"value":110},": detailed safety check (orchestrates flag config, cross-env status, dependencies, code references, and expiring targets in parallel)",{"type":46,"tag":99,"props":112,"children":113},{},[114,120],{"type":46,"tag":103,"props":115,"children":117},{"className":116},[],[118],{"type":51,"value":119},"get-flag",{"type":51,"value":121},": fetch flag configuration for a specific environment",{"type":46,"tag":54,"props":123,"children":124},{},[125],{"type":46,"tag":89,"props":126,"children":127},{},[128],{"type":51,"value":129},"Optional MCP tools:",{"type":46,"tag":95,"props":131,"children":132},{},[133,144],{"type":46,"tag":99,"props":134,"children":135},{},[136,142],{"type":46,"tag":103,"props":137,"children":139},{"className":138},[],[140],{"type":51,"value":141},"archive-flag",{"type":51,"value":143},": archive the flag in LaunchDarkly after code removal",{"type":46,"tag":99,"props":145,"children":146},{},[147,153],{"type":46,"tag":103,"props":148,"children":150},{"className":149},[],[151],{"type":51,"value":152},"delete-flag",{"type":51,"value":154},": permanently delete the flag (irreversible, prefer archive)",{"type":46,"tag":74,"props":156,"children":158},{"id":157},"core-principles",[159],{"type":51,"value":160},"Core Principles",{"type":46,"tag":162,"props":163,"children":164},"ol",{},[165,175,185,195],{"type":46,"tag":99,"props":166,"children":167},{},[168,173],{"type":46,"tag":89,"props":169,"children":170},{},[171],{"type":51,"value":172},"Safety First",{"type":51,"value":174},": Always preserve current production behavior.",{"type":46,"tag":99,"props":176,"children":177},{},[178,183],{"type":46,"tag":89,"props":179,"children":180},{},[181],{"type":51,"value":182},"LaunchDarkly as Source of Truth",{"type":51,"value":184},": Never guess the forward value. Query the actual configuration.",{"type":46,"tag":99,"props":186,"children":187},{},[188,193],{"type":46,"tag":89,"props":189,"children":190},{},[191],{"type":51,"value":192},"Follow Conventions",{"type":51,"value":194},": Respect existing code style and structure.",{"type":46,"tag":99,"props":196,"children":197},{},[198,203],{"type":46,"tag":89,"props":199,"children":200},{},[201],{"type":51,"value":202},"Minimal Change",{"type":51,"value":204},": Only remove flag-related code. No unrelated refactors.",{"type":46,"tag":74,"props":206,"children":208},{"id":207},"workflow",[209],{"type":51,"value":210},"Workflow",{"type":46,"tag":212,"props":213,"children":215},"h3",{"id":214},"step-1-explore-the-codebase",[216],{"type":51,"value":217},"Step 1: Explore the Codebase",{"type":46,"tag":54,"props":219,"children":220},{},[221],{"type":51,"value":222},"Before touching LaunchDarkly or removing code, understand how this flag is used in the codebase.",{"type":46,"tag":162,"props":224,"children":225},{},[226,303,346],{"type":46,"tag":99,"props":227,"children":228},{},[229,234,236,242,244],{"type":46,"tag":89,"props":230,"children":231},{},[232],{"type":51,"value":233},"Find all references to the flag key.",{"type":51,"value":235}," Search for the flag key string (e.g., ",{"type":46,"tag":103,"props":237,"children":239},{"className":238},[],[240],{"type":51,"value":241},"new-checkout-flow",{"type":51,"value":243},") across the codebase. Check for:",{"type":46,"tag":95,"props":245,"children":246},{},[247,275,280,285,290],{"type":46,"tag":99,"props":248,"children":249},{},[250,252,258,260,266,267,273],{"type":51,"value":251},"Direct SDK evaluation calls (",{"type":46,"tag":103,"props":253,"children":255},{"className":254},[],[256],{"type":51,"value":257},"variation()",{"type":51,"value":259},", ",{"type":46,"tag":103,"props":261,"children":263},{"className":262},[],[264],{"type":51,"value":265},"boolVariation()",{"type":51,"value":259},{"type":46,"tag":103,"props":268,"children":270},{"className":269},[],[271],{"type":51,"value":272},"useFlags()",{"type":51,"value":274},", etc.)",{"type":46,"tag":99,"props":276,"children":277},{},[278],{"type":51,"value":279},"Constants\u002Fenums that reference the key",{"type":46,"tag":99,"props":281,"children":282},{},[283],{"type":51,"value":284},"Wrapper\u002Fservice patterns that abstract the SDK",{"type":46,"tag":99,"props":286,"children":287},{},[288],{"type":51,"value":289},"Configuration files, tests, and documentation",{"type":46,"tag":99,"props":291,"children":292},{},[293,295,301],{"type":51,"value":294},"See ",{"type":46,"tag":65,"props":296,"children":298},{"href":297},"references\u002Fsdk-patterns.md",[299],{"type":51,"value":300},"SDK Patterns",{"type":51,"value":302}," for the full list of patterns by language",{"type":46,"tag":99,"props":304,"children":305},{},[306,311,313],{"type":46,"tag":89,"props":307,"children":308},{},[309],{"type":51,"value":310},"Understand the branching.",{"type":51,"value":312}," For each reference, identify:",{"type":46,"tag":95,"props":314,"children":315},{},[316,329,341],{"type":46,"tag":99,"props":317,"children":318},{},[319,321,327],{"type":51,"value":320},"What code runs when the flag is ",{"type":46,"tag":103,"props":322,"children":324},{"className":323},[],[325],{"type":51,"value":326},"true",{"type":51,"value":328}," (or variation A)?",{"type":46,"tag":99,"props":330,"children":331},{},[332,333,339],{"type":51,"value":320},{"type":46,"tag":103,"props":334,"children":336},{"className":335},[],[337],{"type":51,"value":338},"false",{"type":51,"value":340}," (or variation B)?",{"type":46,"tag":99,"props":342,"children":343},{},[344],{"type":51,"value":345},"Are there side effects, early returns, or nested conditions?",{"type":46,"tag":99,"props":347,"children":348},{},[349,354,356,362],{"type":46,"tag":89,"props":350,"children":351},{},[352],{"type":51,"value":353},"Note the scope.",{"type":51,"value":355}," How many files, components, or modules does this flag touch? A flag used in one ",{"type":46,"tag":103,"props":357,"children":359},{"className":358},[],[360],{"type":51,"value":361},"if",{"type":51,"value":363}," block is simpler than one threaded through multiple layers.",{"type":46,"tag":212,"props":365,"children":367},{"id":366},"step-2-run-the-removal-readiness-check",[368],{"type":51,"value":369},"Step 2: Run the Removal Readiness Check",{"type":46,"tag":54,"props":371,"children":372},{},[373,375,380],{"type":51,"value":374},"Use ",{"type":46,"tag":103,"props":376,"children":378},{"className":377},[],[379],{"type":51,"value":108},{"type":51,"value":381}," to get a detailed safety assessment. This single tool call orchestrates multiple checks in parallel:",{"type":46,"tag":95,"props":383,"children":384},{},[385,390,395,400,405],{"type":46,"tag":99,"props":386,"children":387},{},[388],{"type":51,"value":389},"Flag configuration and targeting state",{"type":46,"tag":99,"props":391,"children":392},{},[393],{"type":51,"value":394},"Cross-environment status",{"type":46,"tag":99,"props":396,"children":397},{},[398],{"type":51,"value":399},"Dependent flags (prerequisites)",{"type":46,"tag":99,"props":401,"children":402},{},[403],{"type":51,"value":404},"Expiring targets",{"type":46,"tag":99,"props":406,"children":407},{},[408],{"type":51,"value":409},"Code reference statistics",{"type":46,"tag":54,"props":411,"children":412},{},[413],{"type":51,"value":414},"The tool returns a readiness verdict:",{"type":46,"tag":54,"props":416,"children":417},{},[418,427],{"type":46,"tag":89,"props":419,"children":420},{},[421],{"type":46,"tag":103,"props":422,"children":424},{"className":423},[],[425],{"type":51,"value":426},"safe",{"type":51,"value":428},": No blockers or warnings. Proceed with removal.",{"type":46,"tag":54,"props":430,"children":431},{},[432,441],{"type":46,"tag":89,"props":433,"children":434},{},[435],{"type":46,"tag":103,"props":436,"children":438},{"className":437},[],[439],{"type":51,"value":440},"caution",{"type":51,"value":442},": No hard blockers but warnings exist (e.g., code references in other repos, expiring targets scheduled, flag marked as permanent). Present warnings and let the user decide.",{"type":46,"tag":54,"props":444,"children":445},{},[446,455],{"type":46,"tag":89,"props":447,"children":448},{},[449],{"type":46,"tag":103,"props":450,"children":452},{"className":451},[],[453],{"type":51,"value":454},"blocked",{"type":51,"value":456},": Hard blockers prevent safe removal (e.g., dependent flags, actively receiving requests, targeting is on with active rules). Present blockers: the user must resolve them first.",{"type":46,"tag":212,"props":458,"children":460},{"id":459},"step-3-determine-the-forward-value",[461],{"type":51,"value":462},"Step 3: Determine the Forward Value",{"type":46,"tag":54,"props":464,"children":465},{},[466,467,472,474,479],{"type":51,"value":374},{"type":46,"tag":103,"props":468,"children":470},{"className":469},[],[471],{"type":51,"value":119},{"type":51,"value":473}," to fetch the flag configuration in each critical environment. The ",{"type":46,"tag":89,"props":475,"children":476},{},[477],{"type":51,"value":478},"forward value",{"type":51,"value":480}," is the variation that replaces the flag in code.",{"type":46,"tag":482,"props":483,"children":484},"table",{},[485,504],{"type":46,"tag":486,"props":487,"children":488},"thead",{},[489],{"type":46,"tag":490,"props":491,"children":492},"tr",{},[493,499],{"type":46,"tag":494,"props":495,"children":496},"th",{},[497],{"type":51,"value":498},"Scenario",{"type":46,"tag":494,"props":500,"children":501},{},[502],{"type":51,"value":503},"Forward Value",{"type":46,"tag":505,"props":506,"children":507},"tbody",{},[508,527,545,563],{"type":46,"tag":490,"props":509,"children":510},{},[511,517],{"type":46,"tag":512,"props":513,"children":514},"td",{},[515],{"type":51,"value":516},"All critical envs ON, same fallthrough, no rules\u002Ftargets",{"type":46,"tag":512,"props":518,"children":519},{},[520,521],{"type":51,"value":374},{"type":46,"tag":103,"props":522,"children":524},{"className":523},[],[525],{"type":51,"value":526},"fallthrough.variation",{"type":46,"tag":490,"props":528,"children":529},{},[530,535],{"type":46,"tag":512,"props":531,"children":532},{},[533],{"type":51,"value":534},"All critical envs OFF, same offVariation",{"type":46,"tag":512,"props":536,"children":537},{},[538,539],{"type":51,"value":374},{"type":46,"tag":103,"props":540,"children":542},{"className":541},[],[543],{"type":51,"value":544},"offVariation",{"type":46,"tag":490,"props":546,"children":547},{},[548,553],{"type":46,"tag":512,"props":549,"children":550},{},[551],{"type":51,"value":552},"Critical envs differ in ON\u002FOFF state",{"type":46,"tag":512,"props":554,"children":555},{},[556,561],{"type":46,"tag":89,"props":557,"children":558},{},[559],{"type":51,"value":560},"NOT SAFE",{"type":51,"value":562},": stop and inform the user",{"type":46,"tag":490,"props":564,"children":565},{},[566,571],{"type":46,"tag":512,"props":567,"children":568},{},[569],{"type":51,"value":570},"Critical envs serve different variations",{"type":46,"tag":512,"props":572,"children":573},{},[574,578],{"type":46,"tag":89,"props":575,"children":576},{},[577],{"type":51,"value":560},{"type":51,"value":562},{"type":46,"tag":212,"props":580,"children":582},{"id":581},"step-4-present-the-cleanup-plan",[583],{"type":51,"value":584},"Step 4: Present the Cleanup Plan",{"type":46,"tag":54,"props":586,"children":587},{},[588],{"type":51,"value":589},"Before modifying any code, present a summary to the user and wait for confirmation:",{"type":46,"tag":162,"props":591,"children":592},{},[593,603,613,623,640],{"type":46,"tag":99,"props":594,"children":595},{},[596,601],{"type":46,"tag":89,"props":597,"children":598},{},[599],{"type":51,"value":600},"The forward value",{"type":51,"value":602}," — which variation will be hardcoded and why (based on the flag's current state).",{"type":46,"tag":99,"props":604,"children":605},{},[606,611],{"type":46,"tag":89,"props":607,"children":608},{},[609],{"type":51,"value":610},"All code references found",{"type":51,"value":612}," — file paths and line numbers from Step 1.",{"type":46,"tag":99,"props":614,"children":615},{},[616,621],{"type":46,"tag":89,"props":617,"children":618},{},[619],{"type":51,"value":620},"Planned changes",{"type":51,"value":622}," — for each reference, describe what will be removed and what will be kept.",{"type":46,"tag":99,"props":624,"children":625},{},[626,631,633,638],{"type":46,"tag":89,"props":627,"children":628},{},[629],{"type":51,"value":630},"Readiness verdict",{"type":51,"value":632}," — the result from ",{"type":46,"tag":103,"props":634,"children":636},{"className":635},[],[637],{"type":51,"value":108},{"type":51,"value":639}," (safe, caution, or blocked) and any warnings.",{"type":46,"tag":99,"props":641,"children":642},{},[643,648],{"type":46,"tag":89,"props":644,"children":645},{},[646],{"type":51,"value":647},"LaunchDarkly action",{"type":51,"value":649}," — confirm the flag will be archived after code changes are complete.",{"type":46,"tag":54,"props":651,"children":652},{},[653],{"type":46,"tag":89,"props":654,"children":655},{},[656],{"type":51,"value":657},"Do not proceed with code changes until the user explicitly confirms.",{"type":46,"tag":212,"props":659,"children":661},{"id":660},"step-5-remove-the-flag-from-code",[662],{"type":51,"value":663},"Step 5: Remove the Flag from Code",{"type":46,"tag":54,"props":665,"children":666},{},[667],{"type":51,"value":668},"Now execute the removal using what you learned in Step 1.",{"type":46,"tag":162,"props":670,"children":671},{},[672,698,729],{"type":46,"tag":99,"props":673,"children":674},{},[675,680],{"type":46,"tag":89,"props":676,"children":677},{},[678],{"type":51,"value":679},"Replace flag evaluations with the forward value.",{"type":46,"tag":95,"props":681,"children":682},{},[683,688,693],{"type":46,"tag":99,"props":684,"children":685},{},[686],{"type":51,"value":687},"Preserve the code branch matching the forward value",{"type":46,"tag":99,"props":689,"children":690},{},[691],{"type":51,"value":692},"Remove the dead branch entirely",{"type":46,"tag":99,"props":694,"children":695},{},[696],{"type":51,"value":697},"If the flag value was assigned to a variable, replace the variable with the literal value or inline it",{"type":46,"tag":99,"props":699,"children":700},{},[701,706],{"type":46,"tag":89,"props":702,"children":703},{},[704],{"type":51,"value":705},"Clean up dead code.",{"type":46,"tag":95,"props":707,"children":708},{},[709,714,719,724],{"type":46,"tag":99,"props":710,"children":711},{},[712],{"type":51,"value":713},"Remove imports, constants, and type definitions that only existed for the flag",{"type":46,"tag":99,"props":715,"children":716},{},[717],{"type":51,"value":718},"Remove functions, components, or files that only existed for the dead branch",{"type":46,"tag":99,"props":720,"children":721},{},[722],{"type":51,"value":723},"Check for orphaned exports, hooks, helpers, styles, and test files",{"type":46,"tag":99,"props":725,"children":726},{},[727],{"type":51,"value":728},"If the repo uses an unused-export tool (Knip, ts-prune, lint rules), run it and remove any flag-related orphans",{"type":46,"tag":99,"props":730,"children":731},{},[732,737],{"type":46,"tag":89,"props":733,"children":734},{},[735],{"type":51,"value":736},"Don't over-clean.",{"type":46,"tag":95,"props":738,"children":739},{},[740,745,750],{"type":46,"tag":99,"props":741,"children":742},{},[743],{"type":51,"value":744},"Only remove code directly related to the flag",{"type":46,"tag":99,"props":746,"children":747},{},[748],{"type":51,"value":749},"Don't refactor, optimize, or \"improve\" surrounding code",{"type":46,"tag":99,"props":751,"children":752},{},[753],{"type":51,"value":754},"Don't change formatting or style of untouched code",{"type":46,"tag":54,"props":756,"children":757},{},[758],{"type":46,"tag":89,"props":759,"children":760},{},[761,763,768],{"type":51,"value":762},"Example transformation (boolean flag, forward value = ",{"type":46,"tag":103,"props":764,"children":766},{"className":765},[],[767],{"type":51,"value":326},{"type":51,"value":769},"):",{"type":46,"tag":771,"props":772,"children":777},"pre",{"className":773,"code":774,"language":775,"meta":776,"style":776},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F Before\nconst showNewCheckout = await ldClient.variation('new-checkout-flow', user, false);\nif (showNewCheckout) {\n  return renderNewCheckout();\n} else {\n  return renderOldCheckout();\n}\n\n\u002F\u002F After\nreturn renderNewCheckout();\n","typescript","",[778],{"type":46,"tag":103,"props":779,"children":780},{"__ignoreMap":776},[781,793,886,904,928,947,967,976,986,995],{"type":46,"tag":782,"props":783,"children":786},"span",{"class":784,"line":785},"line",1,[787],{"type":46,"tag":782,"props":788,"children":790},{"style":789},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[791],{"type":51,"value":792},"\u002F\u002F Before\n",{"type":46,"tag":782,"props":794,"children":796},{"class":784,"line":795},2,[797,803,809,815,821,826,831,837,842,847,852,856,861,866,870,876,881],{"type":46,"tag":782,"props":798,"children":800},{"style":799},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[801],{"type":51,"value":802},"const",{"type":46,"tag":782,"props":804,"children":806},{"style":805},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[807],{"type":51,"value":808}," showNewCheckout ",{"type":46,"tag":782,"props":810,"children":812},{"style":811},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[813],{"type":51,"value":814},"=",{"type":46,"tag":782,"props":816,"children":818},{"style":817},"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic",[819],{"type":51,"value":820}," await",{"type":46,"tag":782,"props":822,"children":823},{"style":805},[824],{"type":51,"value":825}," ldClient",{"type":46,"tag":782,"props":827,"children":828},{"style":811},[829],{"type":51,"value":830},".",{"type":46,"tag":782,"props":832,"children":834},{"style":833},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[835],{"type":51,"value":836},"variation",{"type":46,"tag":782,"props":838,"children":839},{"style":805},[840],{"type":51,"value":841},"(",{"type":46,"tag":782,"props":843,"children":844},{"style":811},[845],{"type":51,"value":846},"'",{"type":46,"tag":782,"props":848,"children":850},{"style":849},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[851],{"type":51,"value":241},{"type":46,"tag":782,"props":853,"children":854},{"style":811},[855],{"type":51,"value":846},{"type":46,"tag":782,"props":857,"children":858},{"style":811},[859],{"type":51,"value":860},",",{"type":46,"tag":782,"props":862,"children":863},{"style":805},[864],{"type":51,"value":865}," user",{"type":46,"tag":782,"props":867,"children":868},{"style":811},[869],{"type":51,"value":860},{"type":46,"tag":782,"props":871,"children":873},{"style":872},"--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC",[874],{"type":51,"value":875}," false",{"type":46,"tag":782,"props":877,"children":878},{"style":805},[879],{"type":51,"value":880},")",{"type":46,"tag":782,"props":882,"children":883},{"style":811},[884],{"type":51,"value":885},";\n",{"type":46,"tag":782,"props":887,"children":889},{"class":784,"line":888},3,[890,894,899],{"type":46,"tag":782,"props":891,"children":892},{"style":817},[893],{"type":51,"value":361},{"type":46,"tag":782,"props":895,"children":896},{"style":805},[897],{"type":51,"value":898}," (showNewCheckout) ",{"type":46,"tag":782,"props":900,"children":901},{"style":811},[902],{"type":51,"value":903},"{\n",{"type":46,"tag":782,"props":905,"children":907},{"class":784,"line":906},4,[908,913,918,924],{"type":46,"tag":782,"props":909,"children":910},{"style":817},[911],{"type":51,"value":912},"  return",{"type":46,"tag":782,"props":914,"children":915},{"style":833},[916],{"type":51,"value":917}," renderNewCheckout",{"type":46,"tag":782,"props":919,"children":921},{"style":920},"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178",[922],{"type":51,"value":923},"()",{"type":46,"tag":782,"props":925,"children":926},{"style":811},[927],{"type":51,"value":885},{"type":46,"tag":782,"props":929,"children":931},{"class":784,"line":930},5,[932,937,942],{"type":46,"tag":782,"props":933,"children":934},{"style":811},[935],{"type":51,"value":936},"}",{"type":46,"tag":782,"props":938,"children":939},{"style":817},[940],{"type":51,"value":941}," else",{"type":46,"tag":782,"props":943,"children":944},{"style":811},[945],{"type":51,"value":946}," {\n",{"type":46,"tag":782,"props":948,"children":949},{"class":784,"line":27},[950,954,959,963],{"type":46,"tag":782,"props":951,"children":952},{"style":817},[953],{"type":51,"value":912},{"type":46,"tag":782,"props":955,"children":956},{"style":833},[957],{"type":51,"value":958}," renderOldCheckout",{"type":46,"tag":782,"props":960,"children":961},{"style":920},[962],{"type":51,"value":923},{"type":46,"tag":782,"props":964,"children":965},{"style":811},[966],{"type":51,"value":885},{"type":46,"tag":782,"props":968,"children":970},{"class":784,"line":969},7,[971],{"type":46,"tag":782,"props":972,"children":973},{"style":811},[974],{"type":51,"value":975},"}\n",{"type":46,"tag":782,"props":977,"children":979},{"class":784,"line":978},8,[980],{"type":46,"tag":782,"props":981,"children":983},{"emptyLinePlaceholder":982},true,[984],{"type":51,"value":985},"\n",{"type":46,"tag":782,"props":987,"children":989},{"class":784,"line":988},9,[990],{"type":46,"tag":782,"props":991,"children":992},{"style":789},[993],{"type":51,"value":994},"\u002F\u002F After\n",{"type":46,"tag":782,"props":996,"children":998},{"class":784,"line":997},10,[999,1004,1008,1012],{"type":46,"tag":782,"props":1000,"children":1001},{"style":817},[1002],{"type":51,"value":1003},"return",{"type":46,"tag":782,"props":1005,"children":1006},{"style":833},[1007],{"type":51,"value":917},{"type":46,"tag":782,"props":1009,"children":1010},{"style":805},[1011],{"type":51,"value":923},{"type":46,"tag":782,"props":1013,"children":1014},{"style":811},[1015],{"type":51,"value":885},{"type":46,"tag":212,"props":1017,"children":1019},{"id":1018},"step-6-create-pull-request",[1020],{"type":51,"value":1021},"Step 6: Create Pull Request",{"type":46,"tag":54,"props":1023,"children":1024},{},[1025,1027,1032],{"type":51,"value":1026},"Use the template in ",{"type":46,"tag":65,"props":1028,"children":1030},{"href":1029},"references\u002Fpr-template.md",[1031],{"type":51,"value":1029},{"type":51,"value":1033}," for a structured PR description. The PR should clearly communicate:",{"type":46,"tag":95,"props":1035,"children":1036},{},[1037,1042,1047,1058,1063],{"type":46,"tag":99,"props":1038,"children":1039},{},[1040],{"type":51,"value":1041},"What flag was removed and why",{"type":46,"tag":99,"props":1043,"children":1044},{},[1045],{"type":51,"value":1046},"What the forward value is and why it's correct",{"type":46,"tag":99,"props":1048,"children":1049},{},[1050,1052,1057],{"type":51,"value":1051},"The readiness assessment results (from ",{"type":46,"tag":103,"props":1053,"children":1055},{"className":1054},[],[1056],{"type":51,"value":108},{"type":51,"value":880},{"type":46,"tag":99,"props":1059,"children":1060},{},[1061],{"type":51,"value":1062},"What code was removed and what behavior is preserved",{"type":46,"tag":99,"props":1064,"children":1065},{},[1066],{"type":51,"value":1067},"Whether other repos still reference this flag",{"type":46,"tag":212,"props":1069,"children":1071},{"id":1070},"step-7-verify",[1072],{"type":51,"value":1073},"Step 7: Verify",{"type":46,"tag":54,"props":1075,"children":1076},{},[1077],{"type":51,"value":1078},"Before considering the job done:",{"type":46,"tag":162,"props":1080,"children":1081},{},[1082,1092,1102,1112],{"type":46,"tag":99,"props":1083,"children":1084},{},[1085,1090],{"type":46,"tag":89,"props":1086,"children":1087},{},[1088],{"type":51,"value":1089},"Code compiles and lints.",{"type":51,"value":1091}," Run the project's build and lint steps.",{"type":46,"tag":99,"props":1093,"children":1094},{},[1095,1100],{"type":46,"tag":89,"props":1096,"children":1097},{},[1098],{"type":51,"value":1099},"Tests pass.",{"type":51,"value":1101}," If the flag was used in tests, the tests should be updated to reflect the hardcoded behavior.",{"type":46,"tag":99,"props":1103,"children":1104},{},[1105,1110],{"type":46,"tag":89,"props":1106,"children":1107},{},[1108],{"type":51,"value":1109},"No remaining references.",{"type":51,"value":1111}," Search the codebase one more time for the flag key to make sure nothing was missed.",{"type":46,"tag":99,"props":1113,"children":1114},{},[1115,1120],{"type":46,"tag":89,"props":1116,"children":1117},{},[1118],{"type":51,"value":1119},"PR is complete.",{"type":51,"value":1121}," The description covers the readiness assessment, forward value rationale, and any cross-repo coordination needed.",{"type":46,"tag":74,"props":1123,"children":1125},{"id":1124},"edge-cases",[1126],{"type":51,"value":1127},"Edge Cases",{"type":46,"tag":482,"props":1129,"children":1130},{},[1131,1147],{"type":46,"tag":486,"props":1132,"children":1133},{},[1134],{"type":46,"tag":490,"props":1135,"children":1136},{},[1137,1142],{"type":46,"tag":494,"props":1138,"children":1139},{},[1140],{"type":51,"value":1141},"Situation",{"type":46,"tag":494,"props":1143,"children":1144},{},[1145],{"type":51,"value":1146},"Action",{"type":46,"tag":505,"props":1148,"children":1149},{},[1150,1163,1176,1222,1242,1255],{"type":46,"tag":490,"props":1151,"children":1152},{},[1153,1158],{"type":46,"tag":512,"props":1154,"children":1155},{},[1156],{"type":51,"value":1157},"Flag not found in LaunchDarkly",{"type":46,"tag":512,"props":1159,"children":1160},{},[1161],{"type":51,"value":1162},"Inform user, check for typos in the key",{"type":46,"tag":490,"props":1164,"children":1165},{},[1166,1171],{"type":46,"tag":512,"props":1167,"children":1168},{},[1169],{"type":51,"value":1170},"Flag already archived",{"type":46,"tag":512,"props":1172,"children":1173},{},[1174],{"type":51,"value":1175},"Ask if code cleanup is still needed (flag is gone from LD but code may still reference it)",{"type":46,"tag":490,"props":1177,"children":1178},{},[1179,1184],{"type":46,"tag":512,"props":1180,"children":1181},{},[1182],{"type":51,"value":1183},"Multiple SDK patterns in codebase",{"type":46,"tag":512,"props":1185,"children":1186},{},[1187,1189,1194,1195,1200,1201,1207,1208,1214,1215,1220],{"type":51,"value":1188},"Search all patterns: ",{"type":46,"tag":103,"props":1190,"children":1192},{"className":1191},[],[1193],{"type":51,"value":257},{"type":51,"value":259},{"type":46,"tag":103,"props":1196,"children":1198},{"className":1197},[],[1199],{"type":51,"value":265},{"type":51,"value":259},{"type":46,"tag":103,"props":1202,"children":1204},{"className":1203},[],[1205],{"type":51,"value":1206},"variationDetail()",{"type":51,"value":259},{"type":46,"tag":103,"props":1209,"children":1211},{"className":1210},[],[1212],{"type":51,"value":1213},"allFlags()",{"type":51,"value":259},{"type":46,"tag":103,"props":1216,"children":1218},{"className":1217},[],[1219],{"type":51,"value":272},{"type":51,"value":1221},", plus any wrappers",{"type":46,"tag":490,"props":1223,"children":1224},{},[1225,1237],{"type":46,"tag":512,"props":1226,"children":1227},{},[1228,1230,1236],{"type":51,"value":1229},"Dynamic flag keys (",{"type":46,"tag":103,"props":1231,"children":1233},{"className":1232},[],[1234],{"type":51,"value":1235},"flag-${id}",{"type":51,"value":880},{"type":46,"tag":512,"props":1238,"children":1239},{},[1240],{"type":51,"value":1241},"Warn that automated removal may be incomplete: manual review required",{"type":46,"tag":490,"props":1243,"children":1244},{},[1245,1250],{"type":46,"tag":512,"props":1246,"children":1247},{},[1248],{"type":51,"value":1249},"Different default values in code vs LD",{"type":46,"tag":512,"props":1251,"children":1252},{},[1253],{"type":51,"value":1254},"Flag as inconsistency in the PR description",{"type":46,"tag":490,"props":1256,"children":1257},{},[1258,1263],{"type":46,"tag":512,"props":1259,"children":1260},{},[1261],{"type":51,"value":1262},"Orphaned exports\u002Ffiles remain after removal",{"type":46,"tag":512,"props":1264,"children":1265},{},[1266],{"type":51,"value":1267},"Run unused-export checks and remove dead files",{"type":46,"tag":74,"props":1269,"children":1271},{"id":1270},"what-not-to-do",[1272],{"type":51,"value":1273},"What NOT to Do",{"type":46,"tag":95,"props":1275,"children":1276},{},[1277,1282,1287,1292],{"type":46,"tag":99,"props":1278,"children":1279},{},[1280],{"type":51,"value":1281},"Don't change code unrelated to flag cleanup.",{"type":46,"tag":99,"props":1283,"children":1284},{},[1285],{"type":51,"value":1286},"Don't refactor or optimize beyond flag removal.",{"type":46,"tag":99,"props":1288,"children":1289},{},[1290],{"type":51,"value":1291},"Don't remove flags still being actively rolled out.",{"type":46,"tag":99,"props":1293,"children":1294},{},[1295],{"type":51,"value":1296},"Don't guess the forward value: always query LaunchDarkly.",{"type":46,"tag":74,"props":1298,"children":1300},{"id":1299},"after-cleanup",[1301],{"type":51,"value":1302},"After Cleanup",{"type":46,"tag":54,"props":1304,"children":1305},{},[1306],{"type":51,"value":1307},"Once the PR is merged and deployed:",{"type":46,"tag":162,"props":1309,"children":1310},{},[1311,1328,1345],{"type":46,"tag":99,"props":1312,"children":1313},{},[1314,1319,1321,1326],{"type":46,"tag":89,"props":1315,"children":1316},{},[1317],{"type":51,"value":1318},"Archive the flag in LaunchDarkly",{"type":51,"value":1320}," using ",{"type":46,"tag":103,"props":1322,"children":1324},{"className":1323},[],[1325],{"type":51,"value":141},{"type":51,"value":1327},". Archival is reversible; deletion is not. Always archive first.",{"type":46,"tag":99,"props":1329,"children":1330},{},[1331,1336,1338,1343],{"type":46,"tag":89,"props":1332,"children":1333},{},[1334],{"type":51,"value":1335},"Notify other teams",{"type":51,"value":1337}," if ",{"type":46,"tag":103,"props":1339,"children":1341},{"className":1340},[],[1342],{"type":51,"value":108},{"type":51,"value":1344}," reported code references in other repositories.",{"type":46,"tag":99,"props":1346,"children":1347},{},[1348,1353],{"type":46,"tag":89,"props":1349,"children":1350},{},[1351],{"type":51,"value":1352},"If the flag had targeting changes pending,",{"type":51,"value":1354}," they can be ignored: the flag is being removed.",{"type":46,"tag":74,"props":1356,"children":1358},{"id":1357},"references",[1359],{"type":51,"value":1360},"References",{"type":46,"tag":95,"props":1362,"children":1363},{},[1364,1374,1383,1393],{"type":46,"tag":99,"props":1365,"children":1366},{},[1367,1372],{"type":46,"tag":65,"props":1368,"children":1369},{"href":1029},[1370],{"type":51,"value":1371},"PR Template",{"type":51,"value":1373},": Structured PR description for flag removal",{"type":46,"tag":99,"props":1375,"children":1376},{},[1377,1381],{"type":46,"tag":65,"props":1378,"children":1379},{"href":297},[1380],{"type":51,"value":300},{"type":51,"value":1382},": Flag evaluation patterns by language\u002Fframework",{"type":46,"tag":99,"props":1384,"children":1385},{},[1386,1391],{"type":46,"tag":65,"props":1387,"children":1388},{"href":67},[1389],{"type":51,"value":1390},"Flag Discovery",{"type":51,"value":1392},": Find cleanup candidates before using this skill",{"type":46,"tag":99,"props":1394,"children":1395},{},[1396,1402],{"type":46,"tag":65,"props":1397,"children":1399},{"href":1398},"..\u002Flaunchdarkly-flag-targeting\u002FSKILL.md",[1400],{"type":51,"value":1401},"Flag Targeting",{"type":51,"value":1403},": If you need to change targeting instead of removing",{"type":46,"tag":1405,"props":1406,"children":1407},"style",{},[1408],{"type":51,"value":1409},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":1411,"total":1543},[1412,1429,1438,1452,1463,1473,1481,1495,1506,1515,1525,1534],{"slug":1413,"name":1413,"fn":1414,"description":1415,"org":1416,"tags":1417,"stars":23,"repoUrl":24,"updatedAt":1428},"agent-graphs","create and manage agent graphs","Create and manage agent graphs — directed graphs of configs connected by edges with handoff logic. Use when building multi-agent workflows where configs route to each other.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1418,1421,1424,1425],{"name":1419,"slug":1420,"type":15},"Agents","agents",{"name":1422,"slug":1423,"type":15},"Architecture","architecture",{"name":9,"slug":8,"type":15},{"name":1426,"slug":1427,"type":15},"Multi-Agent","multi-agent","2026-07-28T05:33:33.709407",{"slug":1430,"name":1430,"fn":1431,"description":1432,"org":1433,"tags":1434,"stars":23,"repoUrl":24,"updatedAt":1437},"aiconfig-agent-graphs","manage agent graphs","DEPRECATED redirect — this skill was renamed to agent-graphs. Do not use this skill; invoke agent-graphs instead. Kept only so old references to aiconfig-agent-graphs still point users to the new name.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1435,1436],{"name":1419,"slug":1420,"type":15},{"name":1422,"slug":1423,"type":15},"2026-05-22T06:55:56.527064",{"slug":1439,"name":1439,"fn":1440,"description":1441,"org":1442,"tags":1443,"stars":23,"repoUrl":24,"updatedAt":1451},"aiconfig-ai-metrics","manage built-in AI metrics","DEPRECATED redirect — this skill was renamed to built-in-metrics. Do not use this skill; invoke built-in-metrics instead. Kept only so old references to aiconfig-ai-metrics still point users to the new name.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1444,1447,1448],{"name":1445,"slug":1446,"type":15},"Analytics","analytics",{"name":9,"slug":8,"type":15},{"name":1449,"slug":1450,"type":15},"Metrics","metrics","2026-05-22T06:55:53.858749",{"slug":1453,"name":1453,"fn":1454,"description":1455,"org":1456,"tags":1457,"stars":23,"repoUrl":24,"updatedAt":1462},"aiconfig-create","redirect to configs-create skill","DEPRECATED redirect — this skill was renamed to configs-create. Do not use this skill; invoke configs-create instead. Kept only so old references to aiconfig-create still point users to the new name.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1458,1459],{"name":9,"slug":8,"type":15},{"name":1460,"slug":1461,"type":15},"Reference","reference","2026-05-22T06:55:41.790591",{"slug":1464,"name":1464,"fn":1465,"description":1466,"org":1467,"tags":1468,"stars":23,"repoUrl":24,"updatedAt":1472},"aiconfig-custom-metrics","configure custom metrics in LaunchDarkly","DEPRECATED redirect — this skill was renamed to custom-metrics. Do not use this skill; invoke custom-metrics instead. Kept only so old references to aiconfig-custom-metrics still point users to the new name.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1469,1470,1471],{"name":1445,"slug":1446,"type":15},{"name":13,"slug":14,"type":15},{"name":9,"slug":8,"type":15},"2026-05-22T06:55:57.84851",{"slug":1474,"name":1474,"fn":1475,"description":1476,"org":1477,"tags":1478,"stars":23,"repoUrl":24,"updatedAt":1480},"aiconfig-migrate","redirect to migrate skill","DEPRECATED redirect — this skill was renamed to migrate. Do not use this skill; invoke migrate instead. Kept only so old references to aiconfig-migrate still point users to the new name.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1479],{"name":1460,"slug":1461,"type":15},"2026-05-22T06:55:44.464733",{"slug":1482,"name":1482,"fn":1483,"description":1484,"org":1485,"tags":1486,"stars":23,"repoUrl":24,"updatedAt":1494},"aiconfig-online-evals","run online evaluations","DEPRECATED redirect — this skill was renamed to online-evals. Do not use this skill; invoke online-evals instead. Kept only so old references to aiconfig-online-evals still point users to the new name.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1487,1490,1491],{"name":1488,"slug":1489,"type":15},"Evals","evals",{"name":9,"slug":8,"type":15},{"name":1492,"slug":1493,"type":15},"Testing","testing","2026-05-22T06:55:55.179617",{"slug":1496,"name":1496,"fn":1497,"description":1498,"org":1499,"tags":1500,"stars":23,"repoUrl":24,"updatedAt":1505},"aiconfig-projects","manage AI configuration projects","DEPRECATED redirect — this skill was renamed to projects. Do not use this skill; invoke projects instead. Kept only so old references to aiconfig-projects still point users to the new name.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1501,1504],{"name":1502,"slug":1503,"type":15},"Configuration","configuration",{"name":9,"slug":8,"type":15},"2026-05-22T06:55:48.522229",{"slug":1507,"name":1507,"fn":1508,"description":1509,"org":1510,"tags":1511,"stars":23,"repoUrl":24,"updatedAt":1514},"aiconfig-snippets","manage AI configuration snippets","DEPRECATED redirect — this skill was renamed to snippets. Do not use this skill; invoke snippets instead. Kept only so old references to aiconfig-snippets still point users to the new name.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1512,1513],{"name":1502,"slug":1503,"type":15},{"name":9,"slug":8,"type":15},"2026-05-22T06:55:47.16557",{"slug":1516,"name":1516,"fn":1517,"description":1518,"org":1519,"tags":1520,"stars":23,"repoUrl":24,"updatedAt":1524},"aiconfig-targeting","configure LaunchDarkly targeting rules","DEPRECATED redirect — this skill was renamed to configs-targeting. Do not use this skill; invoke configs-targeting instead. Kept only so old references to aiconfig-targeting still point users to the new name.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1521,1522,1523],{"name":1502,"slug":1503,"type":15},{"name":13,"slug":14,"type":15},{"name":9,"slug":8,"type":15},"2026-05-22T06:55:49.845445",{"slug":1526,"name":1526,"fn":1527,"description":1528,"org":1529,"tags":1530,"stars":23,"repoUrl":24,"updatedAt":1533},"aiconfig-tools","redirect to tools skill","DEPRECATED redirect — this skill was renamed to tools. Do not use this skill; invoke tools instead. Kept only so old references to aiconfig-tools still point users to the new name.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1531,1532],{"name":9,"slug":8,"type":15},{"name":1460,"slug":1461,"type":15},"2026-05-22T06:55:39.13373",{"slug":1535,"name":1535,"fn":1536,"description":1537,"org":1538,"tags":1539,"stars":23,"repoUrl":24,"updatedAt":1542},"aiconfig-update","redirect to configs-update skill","DEPRECATED redirect — this skill was renamed to configs-update. Do not use this skill; invoke configs-update instead. Kept only so old references to aiconfig-update still point users to the new name.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1540,1541],{"name":9,"slug":8,"type":15},{"name":1460,"slug":1461,"type":15},"2026-05-22T06:55:40.464884",49,{"items":1545,"total":1543},[1546,1553,1558,1564,1569,1575,1579],{"slug":1413,"name":1413,"fn":1414,"description":1415,"org":1547,"tags":1548,"stars":23,"repoUrl":24,"updatedAt":1428},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1549,1550,1551,1552],{"name":1419,"slug":1420,"type":15},{"name":1422,"slug":1423,"type":15},{"name":9,"slug":8,"type":15},{"name":1426,"slug":1427,"type":15},{"slug":1430,"name":1430,"fn":1431,"description":1432,"org":1554,"tags":1555,"stars":23,"repoUrl":24,"updatedAt":1437},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1556,1557],{"name":1419,"slug":1420,"type":15},{"name":1422,"slug":1423,"type":15},{"slug":1439,"name":1439,"fn":1440,"description":1441,"org":1559,"tags":1560,"stars":23,"repoUrl":24,"updatedAt":1451},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1561,1562,1563],{"name":1445,"slug":1446,"type":15},{"name":9,"slug":8,"type":15},{"name":1449,"slug":1450,"type":15},{"slug":1453,"name":1453,"fn":1454,"description":1455,"org":1565,"tags":1566,"stars":23,"repoUrl":24,"updatedAt":1462},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1567,1568],{"name":9,"slug":8,"type":15},{"name":1460,"slug":1461,"type":15},{"slug":1464,"name":1464,"fn":1465,"description":1466,"org":1570,"tags":1571,"stars":23,"repoUrl":24,"updatedAt":1472},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1572,1573,1574],{"name":1445,"slug":1446,"type":15},{"name":13,"slug":14,"type":15},{"name":9,"slug":8,"type":15},{"slug":1474,"name":1474,"fn":1475,"description":1476,"org":1576,"tags":1577,"stars":23,"repoUrl":24,"updatedAt":1480},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1578],{"name":1460,"slug":1461,"type":15},{"slug":1482,"name":1482,"fn":1483,"description":1484,"org":1580,"tags":1581,"stars":23,"repoUrl":24,"updatedAt":1494},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1582,1583,1584],{"name":1488,"slug":1489,"type":15},{"name":9,"slug":8,"type":15},{"name":1492,"slug":1493,"type":15}]