Omnibus Instrument Feature Flags
PostHogOfficialCreated by PostHog
- Skill
- Tool integration
- Data and AI
- MIT
- Low risk
AutoGineer summary
Written by AutoGineer from the skill’s own files, not by the author
This skill provides a structured approach to instrumenting PostHog feature flags across a wide range of platforms and languages. It guides the user through detecting their current environment, setting up the PostHog SDK if necessary, and implementing the logic required to gate new functionality. By following these steps, developers can manage phased rollouts, target specific user groups, and perform multivariate testing without hardcoding sensitive configuration values.
What it does
- Detects the project platform and framework to provide relevant SDK setup instructions.
- Automates or guides the initialization of the PostHog SDK.
- Provides standardized code patterns for evaluating boolean and multivariate feature flags.
- Ensures secure configuration by enforcing the use of environment variables for API keys.
- Supports a broad range of languages including Python, JavaScript, Go, Java, and mobile frameworks.
- Offers guidance on best practices for feature flag implementation and lifecycle management.
When to use it
- When you need to gate new features to perform a phased or canary rollout.
- When you want to run A/B tests or experiments on specific user segments.
- When you need to implement a kill-switch for new functionality in production.
- When setting up PostHog for the first time in a new or existing codebase.
Advantages
- Promotes safe deployment practices by decoupling code deployment from feature release.
- Reduces risk by allowing immediate feature toggling without requiring a new deployment.
- Supports consistent implementation patterns across diverse tech stacks.
- Encourages secure development by prioritizing environment variables over hardcoded secrets.
Usage examples
- “I want to gate my new checkout button with a PostHog feature flag in my React app.”
- The agent will analyze your React project, verify the PostHog SDK installation, and provide the specific code snippet to wrap your component logic with a feature flag check.
- “How do I set up PostHog feature flags in my Android project?”
- The agent will guide you through adding the dependency to your build.gradle, initializing the SDK in your Application class, and implementing the flag evaluation logic.
Install
Download the skill as a ZIP:
https://mp-staging.autogineer.com/agent-skills/posthog/omnibus-instrument-feature-flags/downloadUnzip it into the cross-client skills folder of your project:
mkdir -p .agents/skills && unzip omnibus-instrument-feature-flags.zip -d .agents/skills
Documentation by PostHog
Add PostHog feature flags
Use this skill to add PostHog feature flags that gate new or changed functionality. Use it after implementing features or reviewing PRs to ensure safe rollouts with feature flag controls. If PostHog is not yet installed, this skill also covers initial SDK setup. Supports any platform or language.
Supported platforms: React, Next.js, React Native, Web (JavaScript), Node.js, Python, PHP, Ruby, Go, Java, Rust, .NET, Elixir, Android, iOS, Flutter, and the REST API.
Instructions
Follow these steps IN ORDER:
STEP 1: Analyze the codebase and detect the platform.
Look for dependency files (package.json, requirements.txt, go.mod, Gemfile, composer.json, etc.) to determine the language and framework.
Look for lockfiles (pnpm-lock.yaml, package-lock.json, yarn.lock, bun.lockb) to determine the package manager.
Check for existing PostHog setup (SDK initialization, env vars, etc.). If PostHog is already installed and initialized, skip to STEP 3.
STEP 2: Research instrumentation. (Skip if PostHog is already set up.) 2.1. Find the reference file below that matches the detected platform — it is the source of truth for SDK initialization, flag evaluation methods, and framework-specific patterns. Read it now. 2.2. If no reference matches, fall back to your general knowledge and web search. Use posthog.com/docs as the primary search source.
STEP 3: Create or find the feature flag.
Check if a PostHog MCP server is connected. If available, use its tools to search for an existing feature flag the user wants to instrument, or create a new one.
If no MCP server is available, instruct the user to create the flag in the PostHog dashboard.
STEP 4: Plan release conditions.
Determine the rollout strategy (percentage rollout, user targeting, group targeting, etc.).
Plan how the feature flag will gate the new functionality in code.
STEP 5: Instrument the feature.
Add the feature flag code following the platform-specific reference patterns.
Use server-side evaluation when possible to avoid UI flicker.
Do not alter the fundamental architecture of existing files. Make additions minimal and targeted.
You must read a file immediately before attempting to write it.
STEP 6: Set up environment variables.
If an env-file-tools MCP server is connected, use check_env_keys to see which keys already exist, then use set_env_values to create or update the PostHog API key and host.
Reference these environment variables in code instead of hardcoding them.
Reference files
references/react.md- React feature flags installation - docsreferences/react-native.md- React native feature flags installation - docsreferences/web.md- Web feature flags installation - docsreferences/nodejs.md- Node.js feature flags installation - docsreferences/python.md- Python feature flags installation - docsreferences/php.md- Php feature flags installation - docsreferences/ruby.md- Ruby feature flags installation - docsreferences/go.md- Go feature flags installation - docsreferences/java.md- Java feature flags installation - docsreferences/rust.md- Rust feature flags installation - docsreferences/dotnet.md- .net feature flags installation - docsreferences/elixir.md- Elixir feature flags installation - docsreferences/android.md- Android feature flags installation - docsreferences/ios.md- Ios feature flags installation - docsreferences/flutter.md- Flutter feature flags installation - docsreferences/api.md- API feature flags installation - docsreferences/next-js.md- Next.js - docsreferences/adding-feature-flag-code.md- Adding feature flag code - docsreferences/best-practices.md- Feature flag best practices - docs
Each platform reference contains SDK-specific installation, flag evaluation, and code examples. Find the one matching the user's stack. If unlisted, use the API reference as a fallback.
Key principles
Environment variables: Always use environment variables for PostHog keys. Never hardcode them.
Minimal changes: Add feature flag code alongside existing logic. Don't replace or restructure existing code.
Boolean flags first: Default to boolean flag checks unless the user specifically asks for multivariate flags.
Server-side when possible: Prefer server-side flag evaluation to avoid UI flicker.
Files
- ATTRIBUTION.mdAdded by AutoGineer966 B
- LICENSELicence file added by AutoGineer1.0 KiB
- SKILL.md4.7 KiB
- references/adding-feature-flag-code.md108.7 KiB
- references/android.md3.5 KiB
- references/api.md5.6 KiB
- references/best-practices.md7.9 KiB
- references/dotnet.md6.8 KiB
- references/elixir.md1.3 KiB
- references/flutter.md5.9 KiB
- references/go.md5.3 KiB
- references/ios.md3.5 KiB
- references/java.md2.3 KiB
- references/next-js.md12.5 KiB
- references/nodejs.md5.3 KiB
- references/php.md4.6 KiB
- references/python.md5.0 KiB
- references/react-native.md4.3 KiB
- references/react.md8.1 KiB
- references/ruby.md4.9 KiB
- references/rust.md4.3 KiB
- references/web.md6.8 KiB
references/react.md
React feature flags installation - Docs
1
Install the package
Required
Install
posthog-jsand@posthog/reactusing your package manager:PostHog AI
npm
npm install posthog-js @posthog/reactyarn
yarn add posthog-js @posthog/reactpnpm
pnpm add posthog-js @posthog/react2
Add environment variables
Required
Add your PostHog project token and host to your environment variables. For Vite-based React apps, use the
VITE_PUBLIC_prefix:.env
PostHog AI
VITE_PUBLIC_POSTHOG_PROJECT_TOKEN=<ph_project_token> VITE_PUBLIC_POSTHOG_HOST=https://us.i.posthog.com3
Initialize PostHog
Required
Wrap your app with the
PostHogProvidercomponent at the root of your application (such asmain.tsxif you're using Vite):main.tsx
PostHog AI
import { StrictMode } from 'react' import { createRoot } from 'react-dom/client' import './index.css' import App from './App.jsx' import { PostHogProvider } from '@posthog/react' const options = { api_host: import.meta.env.VITE_PUBLIC_POSTHOG_HOST, defaults: '2026-01-30', } as const createRoot(document.getElementById('root')).render( <StrictMode> <PostHogProvider apiKey={import.meta.env.VITE_PUBLIC_POSTHOG_PROJECT_TOKEN} options={options}> <App /> </PostHogProvider> </StrictMode> )defaults option
The
defaultsoption automatically configures PostHog with recommended settings for new projects. See SDK defaults for details.4
Accessing PostHog in your code
Recommended
Use the
usePostHoghook to access the PostHog instance in any component wrapped byPostHogProvider:MyComponent.tsx
PostHog AI
import { usePostHog } from '@posthog/react' function MyComponent() { const posthog = usePostHog() function handleClick() { posthog.capture('button_clicked', { button_name: 'signup' }) } return <button onClick={handleClick}>Sign up</button> }You can also import
posthogdirectly for non-React code or utility functions:utils/analytics.ts
PostHog AI
import posthog from 'posthog-js' export function trackPurchase(amount: number) { posthog.capture('purchase_completed', { amount }) }5
Send events
Recommended
Click around and view a couple pages to generate some events. PostHog automatically captures pageviews, clicks, and other interactions for you.
If you'd like, you can also manually capture custom events:
JavaScript
PostHog AI
posthog.capture('my_custom_event', { property: 'value' })6
Use feature flags
Required
Using hooks
PostHog provides several hooks to make it easy to use feature flags in your React app. Use
useFeatureFlagEnabledfor boolean flags:import { useFeatureFlagEnabled } from '@posthog/react' function App() { const showWelcomeMessage = useFeatureFlagEnabled('flag-key') const payload = useFeatureFlagPayload('flag-key') return ( <div className="App"> {showWelcomeMessage ? ( <div> <h1>Welcome!</h1> <p>Thanks for trying out our feature flags.</p> </div> ) : ( <div> <h2>No welcome message</h2> <p>Because the feature flag evaluated to false.</p> </div> )} </div> ) }Multivariate flags
For multivariate flags, use
useFeatureFlagVariantKey:import { useFeatureFlagVariantKey } from '@posthog/react' function App() { const variantKey = useFeatureFlagVariantKey('show-welcome-message') let welcomeMessage = '' if (variantKey === 'variant-a') { welcomeMessage = 'Welcome to the Alpha!' } else if (variantKey === 'variant-b') { welcomeMessage = 'Welcome to the Beta!' } return ( <div className="App"> {welcomeMessage ? ( <div> <h1>{welcomeMessage}</h1> <p>Thanks for trying out our feature flags.</p> </div> ) : ( <div> <h2>No welcome message</h2> <p>Because the feature flag evaluated to false.</p> </div> )} </div> ) }Flag payloads
The
useFeatureFlagPayloadhook does not send a$feature_flag_calledevent, which is required for experiments. Always use it withuseFeatureFlagEnabledoruseFeatureFlagVariantKey:import { useFeatureFlagPayload, useFeatureFlagEnabled } from '@posthog/react' function App() { const variant = useFeatureFlagEnabled('show-welcome-message') const payload = useFeatureFlagPayload('show-welcome-message') return ( <> {variant ? ( <div className="welcome-message"> <h2>{payload?.welcomeTitle}</h2> <p>{payload?.welcomeMessage}</p> </div> ) : ( <div> <h2>No custom welcome message</h2> <p>Because the feature flag evaluated to false.</p> </div> )} </> ) }Using PostHogFeature component
The
PostHogFeaturecomponent simplifies code by handling feature flag related logic:App.tsx
PostHog AI
import { PostHogFeature } from '@posthog/react' function App() { return ( <PostHogFeature flag='show-welcome-message' match={true}> <div> <h1>Hello</h1> <p>Thanks for trying out our feature flags.</p> </div> </PostHogFeature> ) }The
matchprop can be eithertrue, or the variant key, to match on a specific variant. If you also want to show a default message, you can pass these in thefallbackprop.If your flag has a payload, you can pass a function to children whose first argument is the payload:
App.tsx
PostHog AI
<PostHogFeature flag='show-welcome-message' match={true}> {(payload) => { return ( <div> <h1>{payload.welcomeMessage}</h1> <p>Thanks for trying out our feature flags.</p> </div> ) }} </PostHogFeature>7
Running experiments
Optional
Experiments run on top of our feature flags. Once you've implemented the flag in your code, you run an experiment by creating a new experiment in the PostHog dashboard.
8
Next steps
Recommended
Now that you're evaluating flags, continue with the resources below to learn what else Feature Flags enables within the PostHog platform.
Resource Description Creating a feature flag How to create a feature flag in PostHog Adding feature flag code How to check flags in your code for all platforms Framework-specific guides Setup guides for React Native, Next.js, Flutter, and other frameworks How to do a phased rollout Gradually roll out features to minimize risk More tutorials Other real-world examples and use cases
Community questions
Ask a question
Was this page useful?
HelpfulCould be better
Requirements and compatibility
Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta
“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.
Needs: Needs an MCP server, Needs an API key, Needs Python, Needs Node.js
Security
What our scanner noticed· Low risk
- Instructions that use the network
A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.
Attribution and licence
- Created by
- PostHog
- Publisher
- PostHog (Official)
- Source
- PostHog/skills · skills/posthog/feature-flags/skills/all · commit a5d30e7
- Licence
- MIT License (redistribution allowed)
- LICENSE (added by AutoGineer from LICENSE)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
- Also distributed in
- PostHog/skills
AutoGineer is not affiliated with or endorsed by PostHog.
Download ZIP
The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download omnibus-instrument-feature-flags.zip