FE

feature-flags

A utility for maintaining feature flags, gating tests, and managing experimental code branches in React.

Install

mkdir -p .claude/skills/feature-flags && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/613" && unzip -o skill.zip -d .claude/skills/feature-flags && rm skill.zip

Installs to .claude/skills/feature-flags

Activation

This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.

Use when feature flag tests fail, flags need updating, understanding @gate pragmas, debugging channel-specific test failures, or adding new flags to React.
155 chars✓ has a “when” trigger
Intermediate

Key capabilities

  • Gate test execution via @gate pragma
  • Conditionally gate code based on flag state
  • Compare flag states across channels
  • Simulate variant behaviors

How it works

Modifies internal configuration files and uses runtime assertions to skip or alter code paths based on flag states.

Inputs & outputs

You give it
Toggle enableNewBehavior flag for test suite
You get back
Modified test configuration and run results

When to use feature-flags

  • Implementing test gates for experimental features
  • Updating feature flag status in React
  • Debugging channel-specific test failures

About this skill

React Feature Flags

Flag Files

FilePurpose
packages/shared/ReactFeatureFlags.jsDefault flags (canary), __EXPERIMENTAL__ overrides
packages/shared/forks/ReactFeatureFlags.www.jswww channel, __VARIANT__ overrides
packages/shared/forks/ReactFeatureFlags.native-fb.jsReact Native, __VARIANT__ overrides
packages/shared/forks/ReactFeatureFlags.test-renderer.jsTest renderer

Gating Tests

@gate pragma (test-level)

Use when the feature is completely unavailable without the flag:

// @gate enableViewTransition
it('supports view transitions', () => {
  // This test only runs when enableViewTransition is true
  // and is SKIPPED (not failed) when false
});

gate() inline (assertion-level)

Use when the feature exists but behavior differs based on flag:

it('renders component', async () => {
  await act(() => root.render(<App />));

  if (gate(flags => flags.enableNewBehavior)) {
    expect(container.textContent).toBe('new output');
  } else {
    expect(container.textContent).toBe('legacy output');
  }
});

Adding a New Flag

  1. Add to ReactFeatureFlags.js with default value
  2. Add to each fork file (*.www.js, *.native-fb.js, etc.)
  3. If it should vary in www/RN, set to __VARIANT__ in the fork file
  4. Gate tests with @gate flagName or inline gate()

Checking Flag States

Use /flags to view states across channels. See the flags skill for full command options.

__VARIANT__ Flags (GKs)

Flags set to __VARIANT__ simulate gatekeepers - tested twice (true and false):

/test www <pattern>              # __VARIANT__ = true
/test www variant false <pattern> # __VARIANT__ = false

Debugging Channel-Specific Failures

  1. Run /flags --diff <channel1> <channel2> to compare values
  2. Check @gate conditions - test may be gated to specific channels
  3. Run /test <channel> <pattern> to isolate the failure
  4. Verify flag exists in all fork files if newly added

Common Mistakes

  • Forgetting both variants - Always test www AND www variant false for __VARIANT__ flags
  • Using @gate for behavior differences - Use inline gate() if both paths should run
  • Missing fork files - New flags must be added to ALL fork files, not just the main one
  • Wrong gate syntax - It's gate(flags => flags.name), not gate('name')

When not to use it

  • Projects outside of React codebase
  • Non-experimental feature deployments
  • Environments without integrated gatekeepers

Prerequisites

React codebase with established feature flag infrastructure

Limitations

  • Requires manual updates to multiple fork files
  • Risk of stale flags if not cleaned up
  • Channel-specific configurations increase testing surface area

How it compares

Integrates directly into the test lifecycle rather than treating flags as external environment variables.

Compared to similar skills

feature-flags side by side with the closest alternatives in the catalog.

SkillInstallsUpdatedSafetyDifficulty
feature-flags (this skill)66moReviewIntermediate
accessibility-compliance452moNo flagsIntermediate
react-best-practices223moNo flagsIntermediate
frontend-testing113moReviewIntermediate

Try saying

Example prompts that trigger this skill in your AI assistant.

Search skills

Search the agent skills registry