# Generation Gate Rules

> Hide a generator ecosystem or model version from everyone except moderators — always "available t…

Hide a generator ecosystem or model version from everyone except moderators — always "available to moderators, hidden" — and lift that gate again. Reads and writes the same generation gate rules the /moderator/generation-config page edits. Use before a new generator model's code deploys, and to remove the gate at launch. Called by onboard-generator-model; usable on its own.

- Page: https://ss33.ai/skills/civitai/generation-gate-rules-43652864553
- Publisher: civitai
- Category: [Software Development](https://ss33.ai/skills/category/software-development-t44z8z) › [DevOps & cloud](https://ss33.ai/skills/category/software-development-t44z8z/devops-and-cloud-unkt50)
- License: Apache-2.0
- Source: https://github.com/civitai/civitai/blob/525355bc1e906f5da1732ea7202f95443a11db04/.claude/skills/generation-gate-rules/SKILL.md

## Skill

SKILL.md: https://ss33.ai/api/v1/ss33/download/civitai/generation-gate-rules-43652864553

# Generation Gate Rules

```bash
node .claude/skills/generation-gate-rules/gate.mjs <command> [flags]
```

The rules model is described in [docs/features/generation-gating-rules-model.md](../../../docs/features/generation-gating-rules-model.md).

## What `add` writes

The rule is always **available to moderators, hidden**, and that isn't configurable. Moderators see and can generate with the target. Everyone else never sees it. A `hidden` rule also blocks `canGenerate` across the whole site, so a version published while its rule is in place still can't be generated by non-mods.

Gate targets:
- a **new ecosystem**: `--ecosystem <EcosystemRecord.key>`. The key is case-sensitive. A misspelled key has no effect, and nothing reports the mistake.
- a **new version in an existing ecosystem**: `--version <id>`.

Adding the rule **before** the code deploys is safe. A rule that names something the running code doesn't know yet has no effect.

## Commands

| Command | What it does |
| --- | --- |
| `list [--json]` | Every rule on the site. |
| `add --ecosystem <key>` or `add --version <id>` `[--message <m>] [--writable]` | Adds a rule this skill owns, with the id `onboard-eco-<key>` or `onboard-mv-<id>`. |
| `remove --ecosystem <key>` or `remove --version <id>` `[--from-rule <id>] [--writable]` | Removes this skill's rule. With `--from-rule`, removes the target from a rule someone set by hand. |

- **`add` is idempotent.** If the rule already exists, it does nothing. If another rule already covers the target, it says so.
- **`remove` never edits a rule it doesn't own unless you pass `--from-rule`.** Without the flag, it lists the hand-made rules that gate the target.
- **Writes touch one rule at a time** (`saveGateRule` / `deleteGateRule`), so they never overwrite someone else's rules. `remove --from-rule` still reads the rule first, so an edit made to *that* rule in between is lost.

**Another rule on the same target can override this one.** "Available to nobody, hidden" is the kill switch: it hides the target from moderators too, and `hidden` from any rule that applies wins. Point that out to the user instead of editing their rule.

## Setup

- It uses `CIVITAI_API_KEY` from `.claude/skills/mod-actions/.env`, and it must belong to a moderator.
- Every write is a dry run unless you pass `--writable`. **Ask the user before each `--writable` call.** Rules take effect on the live site immediately.
