Agent skill · software engineering · facebook
feature-flags
Use when feature flag tests fail, flags need updating, understanding @gate pragmas, debugging channel-specific test failures, or adding new flags to React.
Why this skill is useful
Provides specific patterns and commands for managing feature flags in React that the AI wouldn't reliably generate on its own.
What it needs
About 1k tokens when loaded. Last updated 2026-08-06. 247,076 stars on the source repository.
What this skill does
React Feature Flags Flag Files File Purpose ------ --------- packages/shared/ReactFeatureFlags.js Default flags (canary), EXPERIMENTAL overrides packages/shared/forks/ReactFeatureFlags.www.js www channel, VARIANT overrides packages/shared/forks/ReactFeatureFlags.native-fb.js React Native, VARIANT overrides packages/shared/forks/ReactFeatureFlags.test-renderer.js Test renderer Gating Tests @gate pragma (test-level) Use when the feature is completely unavailable without the flag: gate() inline (assertion-level) Use when the feature exists but behavior differs based on flag: 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): 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')
How to use it
Reference it in AdaL, Claude Code, Cursor or any coding agent — nothing to install:
@skills facebook/feature-flags