---
allowed-tools: Bash, Read, Write, Edit, Grep, Glob
description: ClaudeForge feature flag management specialist for LaunchDarkly, Unleash, and progressive feature rollouts.
---
# ClaudeForge Feature Flag Manager
ClaudeForge intelligent feature flag management system that orchestrates progressive feature rollouts, A/B testing, canary releases, and kill switches with comprehensive analytics, team coordination, and risk mitigation strategies.
## Purpose
Transform feature deployment from risky big-bang releases to controlled, data-driven rollouts that enable rapid iteration, minimize blast radius, and provide instant rollback capabilities across distributed systems.
## Features
- **Flag Lifecycle Management**: Create, configure, and retire feature flags with governance
- **Progressive Rollouts**: Gradual feature deployment with user targeting and percentage-based distribution
- **A/B Testing**: Experimentation framework with statistical significance tracking
- **Kill Switches**: Emergency feature disable with instant propagation
- **User Targeting**: Sophisticated targeting rules based on attributes, segments, and context
- **Analytics Integration**: Real-time feature usage metrics and conversion tracking
- **Multi-Environment Support**: Consistent flag management across dev, staging, and production
- **Audit Trail**: Complete change history for compliance and debugging
## Usage
```bash
/feature-flag-manager [command] [options]
```
Target: $ARGUMENTS (if specified, otherwise manage all flags in current environment)
### Flag Management Commands
**Create Feature Flag:**
```bash
/feature-flag-manager create --name=new-checkout-flow --type=release --environments=all
```
Creates new feature flag with:
- Unique flag key generation
- Default variation configuration
- Environment-specific settings
- Access control and permissions
- Documentation requirements
- Review and approval workflow
- Integration with issue tracker
- Automated test flag generation
**Update Flag Configuration:**
```bash
/feature-flag-manager update --flag=new-checkout-flow --targeting=enabled --rules=beta-users
```
Updates flag configuration including:
- Targeting rules and prerequisites
- User segment assignments
- Percentage rollout adjustments
- Variation value modifications
- Fallback configuration
- Environment synchronization
- Change tracking and audit
- Team notification system
**Delete Feature Flag:**
```bash
/feature-flag-manager delete --flag=old-feature --check-usage --archive
```
Safely removes feature flags:
- Usage analysis across codebase
- Dependent feature detection
- Staged deletion process
- Code cleanup suggestions
- Archive for audit trail
- Team notification
- Technical debt tracking
- Migration guide generation
### Rollout Strategies
**Percentage Rollout:**
```bash
/feature-flag-manager rollout --flag=new-ui --percentage=25 --increment=25 --interval=1h
```
Implements progressive rollout:
- Initial percentage deployment
- Automated incremental increases
- Monitoring-based progression
- Error rate threshold checks
- Automatic pause on issues
- Rollback triggers
- User consistency (sticky assignments)
- Schedule-based progression
**Targeted Rollout:**
```bash
/feature-flag-manager rollout --flag=premium-features --segment=enterprise-users --context=subscription-tier
```
Deploys to specific user segments:
- User attribute-based targeting
- Custom segment definitions
- Multi-condition rule sets
- Geographic targeting
- Device/platform targeting
- Account-level overrides
- Test user exclusions
- Gradual segment expansion
**Ring Deployment:**
```bash
/feature-flag-manager rollout --flag=api-v2 --strategy=rings --rings="internal,beta,ga"
```
Implements ring-based deployment:
- Internal team ring (5% of users)
- Beta user ring (20% of users)
- General availability ring (100% of users)
- Automated progression gates
- Ring-specific monitoring
- Quality gates between rings
- Fast ring rollback capability
- Documentation updates per ring
### A/B Testing
**Create Experiment:**
```bash
/feature-flag-manager experiment create --name=checkout-optimization --variants=A,B --split=50/50 --duration=14d
```
Sets up A/B test with:
- Variant definition and allocation
- Statistical power calculation
- Sample size requirements
- Success metric definition
- Control group preservation
- Random assignment algorithm
- Consistent user experience
- Early stopping criteria
**Analyze Results:**
```bash
/feature-flag-manager experiment analyze --name=checkout-optimization --metrics=conversion,revenue
```
Provides statistical analysis:
- Conversion rate comparison
- Statistical significance testing
- Confidence interval calculation
- Revenue impact analysis
- User engagement metrics
- Segment-based breakdowns
- Visualization and reporting
- Winner recommendation
**Graduate Experiment:**
```bash
/feature-flag-manager experiment graduate --name=checkout-optimization --winner=B --cleanup-code
```
Completes experiment lifecycle:
- Winner deployment to 100%
- Loser variant removal
- Code cleanup automation
- A/B test flag removal
- Documentation updates
- Team communication
- Learning documentation
- Next iteration planning
### Kill Switch Operations
**Emergency Disable:**
```bash
/feature-flag-manager kill-switch --flag=problematic-feature --immediate --notify-team
```
Instantly disables feature:
- Zero-downtime flag flip
- Immediate CDN/cache invalidation
- Real-time client notification
- Automatic team alerts
- Incident documentation
- Rollback verification
- Impact assessment
- Root cause investigation trigger
**Scheduled Disable:**
```bash
/feature-flag-manager schedule disable --flag=holiday-promotion --date=2024-12-26 --time=00:00:00
```
Plans feature deactivation:
- Scheduled flag changes
- Timezone-aware execution
- Pre-execution notifications
- Automated verification
- Rollback plan preparation
- Communication automation
- Metric baseline capture
- Post-disable monitoring
## Integration Platforms
### LaunchDarkly Integration
**Configuration:**
```javascript
// launchdarkly-config.js
import * as LaunchDarkly from 'launchdarkly-node-server-sdk';
const ldClient = LaunchDarkly.init(process.env.LAUNCHDARKLY_SDK_KEY, {
sendEvents: true,
allAttributesPrivate: false,
stream: true,
offline: false
});
await ldClient.waitForInitialization();
export async function evaluateFlag(flagKey, user, defaultValue) {
try {
const context = {
kind: 'user',
key: user.id,
email: user.email,
custom: {
accountTier: user.subscription,
signupDate: user.createdAt,
region: user.region
}
};
return await ldClient.variation(flagKey, context, defaultValue);
} catch (error) {
console.error('Flag evaluation error:', error);
return defaultValue;
}
}
```
**React Integration:**
```javascript
import { withLDProvider, useFlags, useLDClient } from 'launchdarkly-react-client-sdk';
function App() {
const { newCheckoutFlow, premiumFeatures } = useFlags();
const ldClient = useLDClient();
useEffect(() => {
// Track feature usage
if (newCheckoutFlow) {
ldClient?.track('checkout-flow-viewed', {
version: 'new'
});
}
}, [newCheckoutFlow, ldClient]);
return (
{newCheckoutFlow ?
:
}
{premiumFeatures &&
}
);
}
export default withLDProvider({
clientSideID: process.env.REACT_APP_LD_CLIENT_ID,
user: {
key: userId,
email: userEmail,
custom: {
subscriptionTier: userTier
}
}
})(App);
```
### Unleash Integration
**Server Configuration:**
```javascript
// unleash-config.js
const { initialize } = require('unleash-client');
const unleash = initialize({
url: 'https://unleash.example.com/api',
appName: 'my-application',
instanceId: process.env.INSTANCE_ID,
environment: process.env.NODE_ENV,
customHeaders: {
Authorization: process.env.UNLEASH_API_TOKEN
},
strategies: [
{
name: 'gradualRollout',
implementation: gradualRolloutStrategy
},
{
name: 'userWithId',
implementation: userTargetingStrategy
}
]
});
unleash.on('ready', () => {
console.log('Unleash client ready');
});
unleash.on('error', (error) => {
console.error('Unleash error:', error);
});
function isFeatureEnabled(flagName, context = {}) {
return unleash.isEnabled(flagName, context, (name, enabled) => {
// Track feature evaluations
trackFeatureEvaluation(name, enabled, context);
});
}
module.exports = { unleash, isFeatureEnabled };
```
**Custom Strategies:**
```javascript
// Custom rollout strategy
const gradualRolloutStrategy = {
name: 'gradualRollout',
execute: (context, parameters) => {
const userId = context.userId;
const percentage = parseInt(parameters.percentage, 10);
// Consistent hashing for user assignment
const hash = murmurhash(userId + parameters.groupId);
const bucket = hash % 100;
return bucket < percentage;
}
};
// User segment strategy
const segmentStrategy = {
name: 'userSegment',
execute: (context, parameters) => {
const userSegment = context.properties?.segment;
const allowedSegments = parameters.segments.split(',');
return allowedSegments.includes(userSegment);
}
};
```
### Split.io Integration
**TypeScript Configuration:**
```typescript
// splitio-config.ts
import { SplitFactory } from '@splitsoftware/splitio';
interface UserContext {
id: string;
email: string;
attributes: Record;
}
class FeatureFlagService {
private client: any;
private isReady: boolean = false;
async initialize() {
const factory = SplitFactory({
core: {
authorizationKey: process.env.SPLIT_API_KEY!,
key: 'customer-id'
},
scheduler: {
impressionsRefreshRate: 60
}
});
this.client = factory.client();
await new Promise((resolve) => {
this.client.on(this.client.Event.SDK_READY, () => {
this.isReady = true;
resolve(true);
});
});
}
getTreatment(
flagKey: string,
user: UserContext,
attributes?: Record
): string {
if (!this.isReady) {
return 'control';
}
return this.client.getTreatment(
user.id,
flagKey,
{ ...user.attributes, ...attributes }
);
}
getTreatmentWithConfig(
flagKey: string,
user: UserContext
): { treatment: string; config: any } {
const result = this.client.getTreatmentWithConfig(
user.id,
flagKey,
user.attributes
);
return {
treatment: result.treatment,
config: result.config ? JSON.parse(result.config) : null
};
}
track(
eventType: string,
user: UserContext,
value?: number,
properties?: Record
): boolean {
return this.client.track(
user.id,
'user',
eventType,
value,
properties
);
}
}
export const featureFlagService = new FeatureFlagService();
```
## Advanced Targeting Rules
### User Attribute Targeting
**Complex Rule Configuration:**
```json
{
"flag": "premium-dashboard",
"targeting": {
"enabled": true,
"rules": [
{
"id": "enterprise-users",
"conditions": [
{
"attribute": "subscription_tier",
"operator": "equals",
"value": "enterprise"
},
{
"attribute": "account_age_days",
"operator": "greater_than",
"value": 30
}
],
"variation": "enabled"
},
{
"id": "beta-testers",
"conditions": [
{
"attribute": "user_id",
"operator": "in_segment",
"value": "beta-testers-segment"
}
],
"variation": "enabled",
"rollout": {
"percentage": 50
}
}
],
"defaultVariation": "disabled"
}
}
```
### Geographic Targeting
**Region-Based Rollout:**
```javascript
const geoTargetingRules = {
flag: 'new-payment-provider',
rules: [
{
name: 'US-East-Rollout',
conditions: [
{ attribute: 'country', operator: 'equals', value: 'US' },
{ attribute: 'region', operator: 'in', value: ['us-east-1', 'us-east-2'] }
],
variation: 'new-provider',
percentage: 100
},
{
name: 'US-West-Canary',
conditions: [
{ attribute: 'country', operator: 'equals', value: 'US' },
{ attribute: 'region', operator: 'in', value: ['us-west-1', 'us-west-2'] }
],
variation: 'new-provider',
percentage: 10
},
{
name: 'EU-Regions',
conditions: [
{ attribute: 'country', operator: 'in', value: ['DE', 'FR', 'GB', 'IT', 'ES'] }
],
variation: 'old-provider',
percentage: 100
}
],
defaultVariation: 'old-provider'
};
```
### Time-Based Targeting
**Scheduled Feature Activation:**
```javascript
function evaluateTimeBasedFlag(flagConfig, currentTime) {
const schedule = flagConfig.schedule;
// Check if current time is within activation window
if (schedule.startDate && currentTime < new Date(schedule.startDate)) {
return false;
}
if (schedule.endDate && currentTime > new Date(schedule.endDate)) {
return false;
}
// Check day of week restrictions
if (schedule.daysOfWeek) {
const currentDay = currentTime.getDay();
if (!schedule.daysOfWeek.includes(currentDay)) {
return false;
}
}
// Check time of day restrictions
if (schedule.timeRange) {
const currentHour = currentTime.getHours();
const startHour = schedule.timeRange.start;
const endHour = schedule.timeRange.end;
if (currentHour < startHour || currentHour >= endHour) {
return false;
}
}
return true;
}
// Example usage
const blackFridayFlag = {
name: 'black-friday-deals',
schedule: {
startDate: '2024-11-29T00:00:00Z',
endDate: '2024-12-02T23:59:59Z',
daysOfWeek: [5, 6, 0], // Friday, Saturday, Sunday
timeRange: { start: 0, end: 24 }
}
};
```
## Monitoring and Analytics
### Feature Usage Metrics
**Analytics Integration:**
```javascript
import { trackFeatureUsage } from './analytics';
class FeatureFlagAnalytics {
constructor(analyticsClient) {
this.analytics = analyticsClient;
this.flagEvaluations = new Map();
}
trackEvaluation(flagKey, variation, user) {
// Track flag evaluation
this.analytics.track('Feature Flag Evaluated', {
flag: flagKey,
variation: variation,
userId: user.id,
timestamp: Date.now()
});
// Update evaluation counter
const key = `${flagKey}:${variation}`;
const count = this.flagEvaluations.get(key) || 0;
this.flagEvaluations.set(key, count + 1);
}
trackConversion(flagKey, variation, user, eventType, value) {
// Track feature conversion event
this.analytics.track('Feature Conversion', {
flag: flagKey,
variation: variation,
eventType: eventType,
value: value,
userId: user.id,
timestamp: Date.now()
});
}
getEvaluationStats() {
const stats = {};
for (const [key, count] of this.flagEvaluations) {
const [flag, variation] = key.split(':');
if (!stats[flag]) stats[flag] = {};
stats[flag][variation] = count;
}
return stats;
}
}
```
### A/B Test Analytics
**Statistical Analysis:**
```javascript
class ABTestAnalyzer {
calculateSignificance(controlMetrics, variantMetrics) {
// Calculate conversion rates
const controlRate = controlMetrics.conversions / controlMetrics.impressions;
const variantRate = variantMetrics.conversions / variantMetrics.impressions;
// Calculate pooled standard error
const pooledRate = (controlMetrics.conversions + variantMetrics.conversions) /
(controlMetrics.impressions + variantMetrics.impressions);
const standardError = Math.sqrt(
pooledRate * (1 - pooledRate) *
(1 / controlMetrics.impressions + 1 / variantMetrics.impressions)
);
// Calculate z-score
const zScore = (variantRate - controlRate) / standardError;
// Calculate p-value (two-tailed test)
const pValue = 2 * (1 - this.normalCDF(Math.abs(zScore)));
// Calculate confidence interval
const marginOfError = 1.96 * standardError;
const lift = ((variantRate - controlRate) / controlRate) * 100;
return {
controlRate: (controlRate * 100).toFixed(2) + '%',
variantRate: (variantRate * 100).toFixed(2) + '%',
lift: lift.toFixed(2) + '%',
pValue: pValue.toFixed(4),
significant: pValue < 0.05,
confidenceInterval: [
((variantRate - marginOfError) * 100).toFixed(2) + '%',
((variantRate + marginOfError) * 100).toFixed(2) + '%'
],
sampleSize: {
control: controlMetrics.impressions,
variant: variantMetrics.impressions
}
};
}
normalCDF(x) {
// Approximation of cumulative normal distribution
const t = 1 / (1 + 0.2316419 * Math.abs(x));
const d = 0.3989423 * Math.exp(-x * x / 2);
const prob = d * t * (0.3193815 + t * (-0.3565638 + t * (1.781478 + t * (-1.821256 + t * 1.330274))));
return x > 0 ? 1 - prob : prob;
}
}
```
### Real-Time Dashboard
**Metrics Visualization:**
```javascript
// Feature flag dashboard metrics
const dashboardMetrics = {
flags: [
{
key: 'new-checkout-flow',
status: 'active',
rollout: 45,
evaluations: 125430,
variations: {
enabled: { count: 56444, percentage: 45 },
disabled: { count: 68986, percentage: 55 }
},
metrics: {
conversionRate: {
enabled: 12.4,
disabled: 10.8,
lift: 14.8
},
errorRate: {
enabled: 0.02,
disabled: 0.03
},
avgResponseTime: {
enabled: 245,
disabled: 298
}
},
lastModified: '2024-03-15T14:32:00Z',
modifiedBy: 'john.doe@example.com'
}
]
};
```
---
**ClaudeForge Feature Flag Manager** - Enterprise-grade feature management with progressive rollouts, A/B testing, and comprehensive analytics for data-driven product development.