agentleFS
harnessharness/harness-skills/skills/fme/create-feature-flag/SKILL.md

create-feature-flag

Skill127 starsChanged 30 days agoApache-2.0View on GitHub

Create a new Harness FME feature flag and its per-environment definitions with a safe default, following the project's naming and tagging conventions. Use when asked to create a feature flag, add a flag, set up a new FME flag, or initialize flag targeting. Flag/definition writes only: does not gate application code (instrument-feature-flag) and is not a first-time onboarding entry point (feature-flag-onboarding). Do not use for updating existing flag targeting (update-flag-targeting), deep analysis of a single flag (explain-flag), listing/discovering flags (discover-feature-flags), flag lifecycle like archive/delete (manage-flag-lifecycle), segments (manage-segments), experiments (manage-experiments), pipeline rollouts (fme-pipeline), or removing flags from code (cleanup-feature-flags). Trigger phrases: create feature flag, add flag, new flag, set up flag, FME flag create, initialize flag.

The file

We split this skill into the rules it gives an agent

11 rules. About 0 are common, 7 are distinctive, and 4 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈7

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 4

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Create a new Harness FME feature flag and optionally its per-environment definitions with safe defaults, following the project's existing …

    line 28
  2. Very specific:

    Follow scope-establishment.md.

    line 48
  3. Distinctive:

    Name: Follow the convention (let API validate.

    line 57
  4. Distinctive:

    Traffic type: Must exist in traffic types list.

    line 58
  5. Very specific:

    Treatments: Default on/off or user-specified.

    line 59
  6. Very specific:

    Environments to initialize: Default = all non-production.

    line 61
  7. Distinctive:

    Tags, description: Follow the convention. Include linked ticket if provided.

    line 62
  8. Distinctive:

    Owners: Never auto-pick from convention alone.

    line 63
  9. Distinctive:

    Follow write-safety.md. Show the plan:

    line 69
  10. Distinctive:

    STOP and wait for explicit confirmation.

    line 78
  11. Distinctive:

    Write calls: 1 flag create + N definition creates (sequential, not parallel).

    line 109

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Create Feature Flag

Create a new Harness FME feature flag and optionally its per-environment definitions with safe defaults, following the project's existing conventions. Related: update-flag-targeting (ramp), manage-experiments (A/B test).

Tools

Works through the Harness MCP server or the Harness CLI; names are from tool-map.md.

OperationMCPCLI
List flagsharness_list · fme_feature_flag · size: 50 · compact: falseharness list feature_flag --json --limit 50
Get flagharness_get · fme_feature_flag · params.feature_flag_nameharness get feature_flag <name> --json
List environmentsharness_list · fme_environment · compact: falseharness list fme_environment --json
List traffic typesharness_list · fme_traffic_type · compact: falseharness list traffic_type --json
Get definitionharness_get · fme_feature_flag_definition · params: { feature_flag_name, environment_id }harness get feature_flag:definition <flag> --env <env-id> --json
Create flagharness_create · fme_feature_flag · body: { name, trafficType, description?, tags?, owners? }harness create feature_flag <name> --traffic-type <type> --set description="..." plus --add tags.<name> per tag, or -f flag.json with the full approved body (CLI's tags/owners are collection fields — --set tags=[...] isn't valid syntax)
Create definitionharness_create · fme_feature_flag_definition · params: { feature_flag_name, environment_id } · body: { treatments, defaultTreatment, defaultRule, comment? }harness create feature_flag:definition <flag> --env <env-id> -f def.json

Instructions

Phase 1: Scope

Follow scope-establishment.md. Restate: Working in org=..., project=....

Phase 2: Explore conventions

List flags (≤50) to infer naming pattern (kebab-case, prefixes), common tags, and usual traffic type. List traffic types. List environments and note isProduction. Optionally get definition from 1–2 similar flags to learn treatment names. Summarize conventions in 3 bullets.

Phase 3: Propose

Based on conventions and user's purpose, propose. When delegated, preserve the caller's confirmed traffic type, treatments/config/safe default, purpose and description/ticket; verify them against live prerequisites instead of replacing them with convention-derived defaults:

  • Name: Follow the convention (let API validate; don't invent character rules).
  • Traffic type: Must exist in traffic types list.
  • Treatments: Default on/off or user-specified. Never control (reserved; see concepts.md).
  • Safe default: See targeting-recipes.md for the definition body.
  • Environments to initialize: Default = all non-production. Production only if asked. Delegated integration: /instrument-feature-flag and /feature-flag-onboarding must supply one confirmed environment; initialize only that environment. If selection is missing, STOP and ask—never fall back to all non-production on the caller's behalf.
  • Tags, description: Follow the convention. Include linked ticket if provided.
  • Owners: Never auto-pick from convention alone. Show the owners found on similar flags as candidates and ask the user to explicitly confirm who the owner(s) should be for this flag before including them in the plan.

Name collision check: Get flag in the confirmed scope. If the flag exists during a delegated create, return the collision and verified existing IDs/state to the caller without mutation; ask whether to reuse it or choose a different name. Do not continue into targeting changes or silently reuse it. For standalone creation, offer /update-flag-targeting or a newly approved name. A 404 still requires correct scope/identifier/access before creation.

Phase 4: Plan and confirm

Follow write-safety.md. Show the plan:

Plan: Create feature flag `<name>` — <purpose>
Flag metadata: name, traffic type, description, tags, owners
Initial definitions:
| Environment | isProduction | Targeting |
| <env-name>  | No           | 100% <defaultTreatment> (everyone gets safe/off treatment) |
Production: <"No definitions" or list production envs>

STOP and wait for explicit confirmation.

Phase 5: Execute

Create flag. Then create definition for each environment (non-production first). Audit comment: "create-feature-flag: initial definition with safe default — <ticket or purpose>".

If a definition create fails partway through, report exactly which environments succeeded and which failed — don't assume state; get flag and get definition for each target environment to read back what's actually live. Resume from that live state: create only the missing/failed definitions, don't delete and restart the whole flag. Only offer to delete the flag if the user asks for a clean restart. On 400 validation error, fix per schema-validation-loop.md.

Phase 6: Verify

Get flag and get definition for each environment. Restate:

Created flag `<name>` (<trafficType>).
- In <env1>, <env2>: everyone gets `<defaultTreatment>`.
- Production / other environments: no definition, SDKs return `control`.

This skill creates flag metadata and definitions only — it does not touch application code. For code gating, hand off to /instrument-feature-flag; for further targeting changes, /update-flag-targeting; for A/B tests, /manage-experiments.

Return to caller: if this skill was invoked as a delegated step (e.g. by /instrument-feature-flag or /feature-flag-onboarding), return the created flag/environment/definition identifiers and this verification to that caller and stop here — do not continue into code integration or targeting changes yourself, and do not re-invoke the caller.

Examples

  • "Create a feature flag for the new checkout flow" — Infer conventions, propose name, create flag + non-prod definitions.
  • "Add a dark mode flag for users in dev and staging" — Create flag, initialize dev and staging only.
  • "Set up a flag for FME-1234 with treatments v1 and v2" — Use ticket in tags/description, create flag with custom treatments.
  • "I need a feature flag" — Ask for purpose, infer conventions, propose name and traffic type.

Performance Notes

  • Convention inference: ~3–5 read-only calls (flags list, traffic types, environments, optional definitions sample, collision check).
  • Write calls: 1 flag create + N definition creates (sequential, not parallel).
  • Pagination: See tool-map.md.

Troubleshooting

ProblemSolution
409 "flag already exists"Re-read state. When delegated, return the collision to the caller without mutation and require a reuse/new-name decision; otherwise offer /update-flag-targeting or a newly approved name.
400 "invalid name" or "invalid traffic type"Use the API message to correct. Don't invent character rules.
User wants to update existing flagSTOP. Route to /update-flag-targeting.

See tool-map.md for generic errors.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.