CLI-based management for Flipt feature flags and rollout configurations.

Install

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

Installs to .claude/skills/flipt

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.

Manage Flipt feature flags - list, create, enable/disable, and configure rollout rules. Use when you need to control feature flag state or set up segmented rollouts.
165 chars✓ has a “when” trigger
Beginner

Key capabilities

  • →List all feature flags
  • →Create boolean or variant flags
  • →Enable or disable feature flags
  • →Configure rollout percentages for variants
  • →Add or remove variants from flags

How it works

The skill executes CLI commands that interact with the Flipt API to modify flag configurations. Changes made via this tool are temporary and overwritten by the GitOps sync process every 30 seconds.

Inputs & outputs

You give it
CLI command with flag key and options
You get back
JSON or console confirmation of flag state change

When to use flipt

  • →Create a new feature flag
  • →Enable a feature for a subset of users
  • →Set a 50% rollout for a new variant
  • →List all active feature flags

About this skill

Flipt Feature Flag Management

Use this skill to manage Flipt feature flags for controlled feature rollouts.

Running Commands

Use the included script:

node .claude/skills/flipt/flipt.mjs <command> [options]

Commands

CommandDescription
listList all flags
get <key>Get details for a specific flag
create / enable / disable / deleteRefuse with exit 2 and print the GitOps steps — see below
add-variant / remove-variant / set-rolloutSame

Reads work over the API; writes are deliberately refused. This Flipt is v2, GitOps-backed by a private state repo, so a merged change becomes visible within about a poll interval.

Never write through the API. Flag state is reviewed material — change flags by opening a PR against the state repo, never by calling the API. This skill refuses writes for that reason.

What a key does to the app

The monolith's flag registry (src/server/services/feature-flags.service.ts) declares a static availability per flag, and Flipt overrides it in both directions — except on a flag whose FEATURE_FLAG_<KEY> environment variable was APPLIED, which is removed from Flipt's control entirely (createFeatureFlags records it in envOverriddenFlags; hasFeature then skips Flipt for it).

Whether a variable is applied has exactly one rule, and it is not "is the variable set":

Registry entryIts FEATURE_FLAG_<KEY> variableFlipt
availability: [] with a fliptKeyignored — cannot switch it onkeeps control
anything elseappliedskipped entirely

🔴 So a NON-dark flag can carry a fliptKey, have that key set enabled: false, and still be on for everyone. Toggling it in flag state changes nothing and looks like Flipt is broken. Before you read such a flag's Flipt value as its effective state — or set one expecting an effect — check whether a variable names it in the environment you care about.

🔴 Do not invert that check on a dark flag. A variable naming an availability: [] flag that has a key is discarded, so the flag is dark, off, and still Flipt-owned — the opposite of pinned out. The server logs a [feature-flags] warning naming each one it discards at startup.

Consequences before you add or toggle a key:

  • A flag declared availability: [] that has a fliptKey is dark: static evaluation is false for everyone and that key is its only on-switch. A FEATURE_FLAG_<KEY> environment variable cannot lift it. Creating the key and enabling it is what ships the feature.
  • A flag declared availability: [] with no fliptKey has no Flipt switch at all, so its FEATURE_FLAG_<KEY> variable still applies and is the only way to turn it on. Today that is coinbasePayments and nowpaymentPayments, both written in the legacy array form (coinbasePayments: []), which a search for availability: [] does not find. Adding a fliptKey to one of these moves ownership to Flipt and makes its variable inert.
  • A flag declared ['public'] (or any role) is live: creating its key with enabled: false and no rollout turns the feature off for everyone — the intended kill switch, and the intended accident. Only if no FEATURE_FLAG_<KEY> variable names it. If one does, that kill switch is inert and nothing reports it.

To switch on a dark flag that has a fliptKey locally, set FLIPT_LOCAL_OVERRIDES=<fliptKey>=on rather than touching shared flag state; it is ignored when NODE_ENV=production, and it does not reach getFliptBoolean call sites. For a dark flag with no key there is nothing to name here — use its FEATURE_FLAG_<KEY> variable.

Treat FLIPT_API_TOKEN as a live secret: read it from env, never inline it, and don't copy it into anything new.

Flags live at /api/v2/environments/{env}/namespaces/{ns}/resources/flipt.core.Flag. The environment (civitai-app) and namespace (default) are discovered at runtime — the environment marked default: true, then its default namespace — so a second environment can't silently redirect reads. Override with FLIPT_ENVIRONMENT / FLIPT_NAMESPACE if ever needed.

Responses carry a revision equal to the flipt-state commit SHA, which is the quickest way to confirm a flag change has actually synced:

node .claude/skills/flipt/flipt.mjs list --json | head -3   # revision == your commit

Options

FlagDescription
--description <text>, -dDescription for new flag
--enabledCreate flag as enabled (default: disabled)
--variantCreate as variant flag (default: boolean)
--variants <keys>Comma-separated variant keys (first is default)
--default <key>Set default variant key
--rollout <pct>Rollout percentage (default: 100)
--segment <key>Segment key for rules (default: all-users)
--jsonOutput results as JSON
--quiet, -qMinimal output
--force, -fSkip confirmation prompts

Examples

# List all flags
node .claude/skills/flipt/flipt.mjs list

# Get a specific flag
node .claude/skills/flipt/flipt.mjs get gift-card-vendor-waifu-way

# Creating / toggling a flag goes through GitOps — see below.
# These commands exit 2 and print the steps:
node .claude/skills/flipt/flipt.mjs disable my-feature

# JSON output for scripting
node .claude/skills/flipt/flipt.mjs list --json

GitOps Integration

Flipt uses GitOps - flags are stored in the civitai/flipt-state repository. Changes made via the API are temporary and will be overwritten on the next Git sync (every 30 seconds).

For permanent changes, edit the repository directly:

# Clone the state repo
gh repo clone civitai/flipt-state /tmp/flipt-state

# Edit civitai-app/default/features.yaml
# Add your flag under the `flags:` section

# Commit and push
cd /tmp/flipt-state
git add -A && git commit -m "Add new feature flag" && git push

Flag Format in YAML

flags:
  - key: my-feature-flag
    name: my-feature-flag
    type: BOOLEAN_FLAG_TYPE
    description: Description of what this flag controls
    enabled: false
    # Optional: rollout rules
    rollouts:
      - threshold:
          percentage: 50
          value: true
      - segment:
          keys:
            - moderators
          operator: OR_SEGMENT_OPERATOR
          value: true

Safety Notes

  1. Do not write through the API: it pushes an unreviewed commit to flipt-state main
  2. Test before enabling: Use segments for gradual rollout
  3. Coordinate with team: Others may be editing the same flags

Environment Setup

Copy .env.example to .env and configure:

cp .claude/skills/flipt/.env.example .claude/skills/flipt/.env

The skill needs FLIPT_URL and FLIPT_API_TOKEN to connect to Flipt.

When not to use it

  • →When you need to make permanent changes to the state repository

Prerequisites

FLIPT_URLFLIPT_API_TOKEN

Limitations

  • →API changes are temporary and overwritten by GitOps sync
  • →Requires manual confirmation for deletions unless forced

How it compares

Unlike manual Git repository edits, this tool provides immediate, temporary state changes for rapid testing and validation.

Compared to similar skills

flipt side by side with the closest alternatives in the catalog.

SkillInstallsUpdatedSafetyDifficulty
flipt (this skill)15moReviewBeginner
bazel-build-optimization144moNo flagsAdvanced
github-workflow-automation114moReviewAdvanced
wolf-scripts-core510moReviewIntermediate

Try saying

Example prompts that trigger this skill in your AI assistant.

Search skills

Search the agent skills registry