go-feature-flag
GO Feature Flag (GOFF) self-hosted feature flags with OpenFeature integration — config, relay proxy, targeting, rollouts. Use when working with GOFF or flags.goff.yaml.
What this skill does
# GO Feature Flag
## When to Use This Skill
| Use this skill when... | Use a sibling skill instead when... |
|---|---|
| You need GOFF-specific configuration — `flags.goff.yaml`, relay proxy, targeting rules | You only need the vendor-agnostic OpenFeature SDK API — use `openfeature` |
| You are deploying or operating the self-hosted GOFF backend | You want to scaffold the full feature-flag stack including provider selection — use `configure-feature-flags` |
| Another skill needs the canonical GOFF flag-file shape | You are evaluating which feature-flag provider to adopt — start with `configure-feature-flags` |
Open-source feature flag solution with file-based configuration and OpenFeature integration. Use when setting up self-hosted feature flags, configuring flag files, or deploying the relay proxy.
## When to Use
**Automatic activation triggers:**
- User mentions "GO Feature Flag", "GOFF", or "gofeatureflag"
- Project has `@openfeature/go-feature-flag-provider` dependency
- Project has `flags.goff.yaml` or similar flag configuration
- User asks about self-hosted feature flags
- Docker/K8s configuration includes `gofeatureflag/go-feature-flag` image
**Related skills:**
- `openfeature` - OpenFeature SDK usage patterns
- `container-development` - Docker/K8s deployment
## Architecture Overview
```
┌─────────────────────────────────────────────────────────────┐
│ Application │
│ │ │
│ OpenFeature SDK │
│ │ │
│ GO Feature Flag Provider │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ GO Feature Flag Relay Proxy │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ Retriever ││
│ │ (File, S3, GitHub, HTTP, K8s ConfigMap, etc.) ││
│ └─────────────────────────────────────────────────────────┘│
│ ┌─────────────────────────────────────────────────────────┐│
│ │ Exporter ││
│ │ (Webhook, S3, Kafka, PubSub, etc.) ││
│ └─────────────────────────────────────────────────────────┘│
│ ┌─────────────────────────────────────────────────────────┐│
│ │ Notifier ││
│ │ (Slack, Discord, Teams, Webhook) ││
│ └─────────────────────────────────────────────────────────┘│
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ Flag Configuration │
│ (flags.goff.yaml) │
└─────────────────────────────────────────────────────────────┘
```
## Flag Configuration Format
### Basic Structure
```yaml
# flags.goff.yaml
flag-name:
variations: # All possible values
variation1: value1
variation2: value2
defaultRule: # Rule when no targeting matches
variation: variation1
targeting: # Optional: targeting rules
- name: rule-name
query: 'expression'
variation: variation2
```
### Boolean Flags
```yaml
# Simple on/off flag
new-feature:
variations:
enabled: true
disabled: false
defaultRule:
variation: disabled
```
For String, Number, and Object/JSON flag examples, see [REFERENCE.md](REFERENCE.md).
## Targeting Rules
### Query Syntax
GO Feature Flag uses a CEL-like query syntax for targeting:
```yaml
targeting:
- name: beta-users
query: 'groups co "beta"' # contains
variation: enabled
- name: specific-user
query: 'targetingKey eq "user-123"' # equals
variation: enabled
- name: email-domain
query: 'email ew "@company.com"' # ends with
variation: enabled
- name: premium-tier
query: 'plan in ["pro", "enterprise"]' # in list
variation: enabled
```
### Operators
| Operator | Description | Example |
|----------|-------------|---------|
| `eq` | Equals | `email eq "[email protected]"` |
| `ne` | Not equals | `plan ne "free"` |
| `co` | Contains | `groups co "admin"` |
| `sw` | Starts with | `email sw "admin"` |
| `ew` | Ends with | `email ew "@company.com"` |
| `in` | In list | `country in ["US", "CA"]` |
| `gt`, `ge`, `lt`, `le` | Comparisons | `age gt 18` |
| `and`, `or` | Logical | `plan eq "pro" and country eq "US"` |
### Priority
Rules are evaluated top-to-bottom. First matching rule wins:
```yaml
targeting:
# Highest priority: specific user override
- name: test-user
query: 'targetingKey eq "test-user-id"'
variation: enabled
# Second: admin group
- name: admins
query: 'groups co "admin"'
variation: enabled
# Third: beta users
- name: beta
query: 'groups co "beta"'
variation: enabled
# Fallback is defaultRule
defaultRule:
variation: disabled
```
## Rollout Strategies
### Percentage Rollout
```yaml
new-checkout:
variations:
enabled: true
disabled: false
defaultRule:
percentage:
enabled: 20 # 20% of users
disabled: 80 # 80% of users
```
For Progressive Rollout, Scheduled Changes, and A/B Testing patterns, see [REFERENCE.md](REFERENCE.md).
## Relay Proxy Configuration
### Docker Compose (Development)
```yaml
# docker-compose.yaml
services:
goff-relay:
image: gofeatureflag/go-feature-flag:latest
ports:
- "1031:1031" # API
- "1032:1032" # Health/metrics
volumes:
- ./flags.goff.yaml:/goff/flags.yaml:ro
environment:
# Retriever configuration
- RETRIEVER_KIND=file
- RETRIEVER_PATH=/goff/flags.yaml
# Polling interval (ms)
- POLLING_INTERVAL_MS=10000
# Logging
- LOG_LEVEL=info
healthcheck:
test: ["CMD", "wget", "-q", "--spider", "http://localhost:1032/health"]
interval: 10s
timeout: 5s
retries: 3
```
### Environment Variables
```bash
# Retriever (choose one)
RETRIEVER_KIND=file|s3|http|github|gitlab|googlecloud|azureblob|k8s
# File retriever
RETRIEVER_PATH=/path/to/flags.yaml
# S3 retriever
RETRIEVER_BUCKET=my-bucket
RETRIEVER_ITEM=flags/production.yaml
AWS_REGION=us-east-1
# GitHub retriever
RETRIEVER_REPOSITORY_SLUG=owner/repo
RETRIEVER_FILE_PATH=flags/production.yaml
RETRIEVER_BRANCH=main
GITHUB_TOKEN=ghp_xxxx
# HTTP retriever
RETRIEVER_URL=https://api.example.com/flags.yaml
RETRIEVER_HEADERS=Authorization=Bearer xxx
# Polling
POLLING_INTERVAL_MS=30000
# Server
HTTP_PORT=1031
ADMIN_PORT=1032
LOG_LEVEL=info|debug|warn|error
```
For Kubernetes deployment configuration, see [REFERENCE.md](REFERENCE.md).
## Exporters
Export flag evaluation data for analytics. Supported kinds: `webhook`, `s3`, `googlecloud`, `kafka`, `pubsub`, `log`.
For detailed exporter environment variable configuration, see [REFERENCE.md](REFERENCE.md).
## Notifiers
Send notifications on flag changes. Supported: Slack, Discord, Microsoft Teams, Webhook.
For webhook URL configuration, see [REFERENCE.md](REFERENCE.md).
## CLI Tools
### Validate Configuration
```bash
# Install CLI
go install github.com/thomaspoignant/go-feature-flag/cmd/goff@latest
# Validate flag file
goff lint --config flags.goff.yaml
# Output format
goff lint --config flags.goff.yaml --format json
```
### Testing Flags Locally
```bash
# Start relay in foreground
docker run -p 1031:1031 -p 1032:1032 \
-v $(pwd)/flags.goff.yaml:/goff/flags.yaml:ro \
-e RETRIEVER_KIND=file \
-e RETRIEVER_PATH=/goff/flags.yaml \
gofeatureflag/go-feature-flag:latest
# Test flag evaluation
curl -X POST http://localhost:1031/v1/feature/new-feature/eval \
-H "Content-Type: application/json" \
-d '{"evalRelated in General
modeling-omnistudio-epc-catalog
IncludedSalesforce Industries CME EPC product-modeling skill for Product2-based catalog creation. Use when creating EPC products, configuring product attributes, building offer bundles with Product Child Items, or reviewing EPC DataPack JSON metadata for product catalog changes. TRIGGER when: user creates or updates Product2 EPC records, AttributeAssignment payloads, AttributeMetadata/AttributeDefaultValues, Offer bundles, or ProductChildItem relationships. DO NOT TRIGGER when: designing OmniScripts/FlexCards/Integration Procedures (use building-omnistudio-omniscript, building-omnistudio-flexcard, or building-omnistudio-integration-procedure), implementing Apex business logic (use generating-apex), or troubleshooting deployment pipelines (use deploying-metadata).
relationship-science-coach
IncludedUse this skill for direct, practical adult relationship coaching: couples conflict, repair, trust, marriage, dating, flirting, attachment patterns, emotional connection, sex, desire differences, eroticism, kink negotiation, affection, love languages, breakups, and long-term passion. Draw on Gottman, EFT and Hold Me Tight, attachment science, modern sex research, Perel, Nagoski, Kerner, Schnarch, Love and Stosny, and flexible love-language tools. Be concrete and low-hedge. Redirect only for imminent danger, abuse, coercive control, minors, non-consent, self-harm, stalking, or medical/legal/psychiatric decisions.
building-sf-integrations
IncludedSalesforce integration architecture and runtime plumbing with 120-point scoring. Use this skill to set up Named Credentials, External Credentials, External Services, REST/SOAP callout patterns, Platform Events, and Change Data Capture. TRIGGER when: user sets up Named Credentials, External Services, REST/SOAP callouts, Platform Events, CDC, or touches .namedCredential-meta.xml files. DO NOT TRIGGER when: Connected App/OAuth config (use configuring-connected-apps), Apex-only logic (use generating-apex), or data import/export (use handling-sf-data).
venue-templates
IncludedAccess comprehensive LaTeX templates, formatting requirements, and submission guidelines for major scientific publication venues (Nature, Science, PLOS, IEEE, ACM), academic conferences (NeurIPS, ICML, CVPR, CHI), research posters, and grant proposals (NSF, NIH, DOE, DARPA). This skill should be used when preparing manuscripts for journal submission, conference papers, research posters, or grant proposals and need venue-specific formatting requirements and templates.
let-fate-decide
IncludedDraws the 12 Houses of the Zodiac Tarot spread to inject entropy into planning when prompts are vague, ambiguous, or casually delegated. Interprets the spread to guide next steps. Use when the user says 'let fate decide', 'YOLO', 'whatever', 'idk', or other nonchalant phrases, makes Yu-Gi-Oh references, or when you are about to arbitrarily pick between multiple reasonable approaches. Prefer over ask-questions-if-underspecified when the user's tone is casual or playful rather than precision-seeking.
net-ops
IncludedCross-platform network troubleshooting (Windows, macOS, Linux) via local or remote shell. Use for: DNS broken, can't resolve hostnames, nslookup/dig works but apps fail, NRPT, WFP, scutil, /etc/resolver, systemd-resolved, /etc/resolv.conf, NetworkManager, VPN DNS leak residue (ProtonVPN/Mullvad/WireGuard/AnyConnect), AV/firewall blocking DNS or DoH, Tailscale DNS interaction, intermittent connectivity, remote diagnostics over SSH.