Agent skill

Scenario Moderation

by scenario-labs in scenario-labs/skills

A skill your agent uses when a Scenario generation is blocked, refused, or returns a moderation or sensitive-content error, when a video is rejected after rendering or its audio track is flagged…

MITAuto-check passedAI & LLM Engineering

Install Scenario Moderation

skills CLI
$ npx skills add scenario-labs/skills --skill scenario-moderation -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install scenario-labs/skills scenario-moderation --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/scenario-labs/skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/scenario-moderation .claude/skills/scenario-moderation && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
scenario-moderation
GitHub stars
946
Token cost
~3.6k tokens
SKILL.md length
1,794 words
Files
1
Skills in repo
146
Repo updated
First seen
Licence
MIT

At a glance

A skill your agent uses when a Scenario generation is blocked, refused, or returns a moderation or sensitive-content error, when a video is rejected after rendering or its audio track is flagged…

  • Works in 4 steps: Switch provider. Usually needs no prompt… → Describe scale by proportion, not… → Soften recognizable names in the direct… → …
  • A Scenario generation is blocked
  • SKILL.md covers Overview, Quick reference, Why legitimate prompts get… and Filters differ by provider,…, plus 5 more sections
  • Calls npx

What it does

Scenario Moderation is an agent skill from scenario-labs/skills. Use when a Scenario generation is blocked, refused, or returns a moderation or sensitive-content error, when a video is rejected after rendering or its audio track is flagged, when an output is flagged for likeness to a real person or for IP and copyright detection, when the same prompt passes on one model and fails on another, or when a team's own characters, weapons, or props get flagged. Keywords: blocked prompt, content moderation, refused generation, provider filter, false positive.

Its SKILL.md is about 3.6k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in AI & LLM Engineering, covering LLM guardrails. The repository describes itself as: Get production-ready images, video, audio, and 3D from any AI agent: skills that pick the right model, price before spending, and keep characters and brands consistent through… The licence is MIT.

When your agent uses it

  • A Scenario generation is blocked
  • Returns a moderation
  • Sensitive-content error
  • A video is rejected after rendering

Example prompts

  • “/scenario-moderation”

Requirements

  • Node.js

Workflow steps

4 steps, taken from the first numbered list in SKILL.md.

  1. Switch provider. Usually needs no prompt edit at all. Run the unchanged prompt against two or three alternatives from other providers at…
  2. Describe scale by proportion, not intensity. "The staff reaches shoulder height" or "the blade is about as long as the forearm" carries…
  3. Soften recognizable names in the direct model input. Describe the design in the prompt and carry identity with a reference image instead…
  4. Constrain any upstream rewriter. When an LLM node writes the final prompt, put steps 2 and 3 in its instructions, or the block returns on…

What it can do on your machine

Read from SKILL.md and the folder at commit f6f8ab7. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • npx

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use npx, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Scenario Moderation loads about 3.6k tokens when it runs. Until then it costs about 128 tokens; SKILL.md has 1,794 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~128
When it runs · the whole SKILL.md, loaded when a task matches
~3.6k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from scenario-labs/skills at commit f6f8ab7, republished under its MIT licence (© scenario-labs). 1,794 words, ~3,610 tokens.

Download SKILL.mdSave it as .claude/skills/scenario-moderation/SKILL.md (or your agent's skills folder).
name
scenario-moderation
description
Use when a Scenario generation is blocked, refused, or returns a moderation or sensitive-content error, when a video is rejected after rendering or its audio track is flagged, when an output is flagged for likeness to a real person or for IP and copyright detection, when the same prompt passes on one model and fails on another, or when a team's own characters, weapons, or props get flagged. Keywords: blocked prompt, content moderation, refused generation, provider filter, false positive.
license
MIT

Scenario Blocked Generations

Overview

Three gates can stop a generation, and only two of them read the prompt. Content filters run on the model provider's side, not on Scenario, so a provider block is a property of the model that was picked and the same prompt usually passes elsewhere in the catalog. IP Detection is the team's own gate: it screens the prompt and the input images before the run, an organization admin switches it on, and no model switch clears it. Plan and blocklist restrictions remove models before any prompt is judged. Treat a block as a routing problem first and a wording problem second. This skill is about false positives on content a team is entitled to make; it is not a way to produce content a provider prohibits. Core loop: see the scenario skill. If a sibling skill named here is missing from your available skills, ask the user to install it (npx skills add scenario-labs/skills --skill <name>); unattended, proceed from tool schemas and flag the gap.

Quick reference

StepCall
Read the actual errorjob_get with job_id: the row carries error and hint, plus modelId (the model to exclude) and cuCost (what the failed run charged); verbose=true adds metadata.input with the exact prompt the job ran. Or read error and hint off the jobs_wait row
Confirm the chargejob_get's cuCost first; a policy block is typically refunded and failed jobs are reimbursed except xAI generations stopped by moderation (see scenario), but the reservation is not always released at once, so confirm later with usage bounded by start_date and end_date to the job's day and include=["usages"], reading the per-type totals (the headline is project-lifetime; a team-gate screen shows as its own IP Detection line), and file the job_id with support if a charge stands
Read the team's gateteams_list: the team row carries ipDetectionEnforcement; anything but disabled means a refusal naming intellectual-property risk is the team's own policy, screened before the run
Find alternative modelsrecommend with the failed job's capability (txt2img for a text-to-image block, img2img with a reference in play, img2video for a clip animated from a still) plus the user's own words; set max_cost_cu a little above the failed row's cuCost per asset to stay in the cost band, and drop the failed modelId from the ranking yourself, since recommend has no exclusion argument
Price an alternativemodel_run with dry_run=true
Re-test the same intentOne model_run per candidate, prompt unchanged, so the model stays the only variable

Four failures look alike and only the first is about wording: a provider moderation block, an IP Detection block from the team's own settings, a 403 Forbidden error (the plan does not include that model), and a model a team has put on its own blocklist. Read the error before rewriting anything.

Why legitimate prompts get blocked

Three triggers stack, and each alone often sits under the threshold:

  • Recognizable characters. Automated filters react to character names and signature traits they recognize. They cannot know who owns the IP, so a team's own characters are flagged like anyone else's.
  • Intensity-coded language. Words chosen to convey scale or drama ("oversized", "huge", "massive") read as violence in aggregate, even when the subject is a prop.
  • Real-person likeness. Filters watch for resemblance to public figures in the output as well as names in the prompt, so a character sheet the platform itself generated can be refused as a reference on the next run, and a celebrity comparison in the prompt ("built like a heavyweight champion") is a name by another route.

With two present the prompt sits near the threshold, which is why the same intent passes one run and fails the next: a small rewording tips it over. An upstream LLM step that rewrites prompts is a frequent cause, because it leans harder on intensifiers to solve an unrelated problem and re-introduces the block on every run.

Filters differ by provider, not by price

Scenario's public content policy guide ranks the providers: Google's models (Gemini, Veo) block the most brand and character references, ByteDance, OpenAI, Ideogram and Hunyuan sit in the middle, and FLUX and Recraft are the most permissive. recommend ranks by measured performance, not by filter strictness, so an alternative from the same provider inherits the same filter: take the next candidate from a different provider, and read modelId on the failed row to know which one that was: the provider is usually legible in the id, and when it is not, model_get (catalog-only, read lane) returns the record with complianceMetadata.modelProvider.

Video and audio blocks

Video changes the economics of a block. Several providers moderate the finished render, so a rejected clip has already been rendered in full, and a retry of the identical payload renders it again. Read cuCost on the failed row before anything else and confirm the charge per the quick reference, then switch provider as above, prompt unchanged.

The audio track is judged on its own. OutputAudioSensitiveContentDetected on an audio-enabled video run means the soundtrack tripped the filter, and the usual cause is a named instrument or genre, even inside an exclusion: "no music" and "a distant guitar" have both failed where "room tone, footsteps, a single voice" passed. Describe diegetic sound positively and name nothing to exclude; when the clip needs no sound, turn the audio field off where the schema exposes one (generateAudio on many families) rather than prompting silence.

IP Detection is the team's own gate

Teams on the Enterprise plan can switch on IP Detection, Scenario's own gate, independent of any provider's filter: it reads the prompt and the input images before the run against the filters an organization admin enabled (fictional characters, brands and trademarks, celebrity likeness, artist styles, and custom filters), and a match fails the job at once with a message naming intellectual-property risk, nothing generated and no generation cost charged. The screen itself bills 1 CU per screened generation plus 1 CU per input image, charged even when the result is a block and reported as its own IP Detection line in usage; video, audio and 3D inputs are neither analyzed nor charged. The setting rides the teams_list row as ipDetectionEnforcement: while it reads disabled, every IP or copyright refusal is a provider's; the active levels differ in one thing only, whether a job is let through or blocked when the check itself cannot run, so report the literal value and that distinction. When it is active, read which gate the error names: the team's gate names intellectual-property risk, a provider's names a content policy violation, and when the text says neither, run the unchanged prompt once on one alternative provider: a provider filter clears with the switch, the team's gate repeats on any model. A team-gate block earns one retry with the design described visually and no protected mark in the prompt or in any input image (the brands filter reads a logo shown in a reference like a name, while generic product descriptions are not flagged). If that repeats, it is a conversation, not a call: tell the user which gate fired; an organization admin owns the filters and can opt a single project out of screening for licensed work, and verified IP holders who keep hitting false positives on their own licensed property have an escalation path through their Scenario account manager. A copyright warning attached to a completed output is the provider's flag and informational: the asset was delivered, and reviewing it before commercial use is the team's call.

Show full SKILL.md (547 more words)Show less

Recovery, cheapest first

  1. Switch provider. Usually needs no prompt edit at all. Run the unchanged prompt against two or three alternatives from other providers at comparable cost; if they pass, the filter was that provider's, not the content's.
  2. Describe scale by proportion, not intensity. "The staff reaches shoulder height" or "the blade is about as long as the forearm" carries the same art direction as "oversized" without the violence coding.
  3. Soften recognizable names in the direct model input. Describe the design in the prompt and carry identity with a reference image instead, which holds the look better anyway (see scenario-consistency). Drop real-person comparisons the same way.
  4. Constrain any upstream rewriter. When an LLM node writes the final prompt, put steps 2 and 3 in its instructions, or the block returns on the next run.

Then stop. If every provider refuses and one honest rewrite has not cleared it, the filter is reading something real: say so and hand it back to the user. Grinding out variants until one slips through is evasion, not art direction.

Worked example: a flagged weapon prop

The studio's own character is named Onyx, and "Onyx's oversized war hammer, huge spiked head" comes back flagged.

  1. Read the error: job_get with job_id (verbose=true for the exact prompt the job ran), or the error and hint fields on the jobs_wait row. It names moderation, so this is a provider filter, not a plan restriction, a team blocklist, or IP Detection (teams_list shows ipDetectionEnforcement: "disabled").
  2. recommend with the failed job's capability (txt2img here) and the user's own words, take two alternatives from providers other than the failed modelId's, price each with model_run and dry_run=true, then run the unchanged prompt on each. One passes: done, the filter belonged to the first provider.
  3. Suppose all of them refuse. Rewrite once, by proportion and without the name: "a war hammer as tall as its wielder's shoulder, spiked head two hand-spans across", and carry Onyx's look with a reference image (see scenario-consistency).
  4. Still refused everywhere: stop and tell the user what the filter appears to be reacting to.

Common mistakes

  • Retrying the identical prompt: near-threshold prompts pass intermittently, so a retry that happens to work has fixed nothing, and on video it renders the whole clip again first.
  • Rewriting wording before trying another provider: wording changes are slow and lose art direction, switching models is one call.
  • Switching within the same provider: sibling members share the filter; the next candidate comes from another provider.
  • Naming a genre or instrument to exclude it in an audio-enabled prompt: the exclusion is what the audio filter reads.
  • Assuming IP ownership exempts a prompt: the filter is automated and sees only the text and images sent to it.
  • Treating every IP-worded refusal as one gate: with enforcement on, the error wording tells them apart first and one provider switch second, and only the provider's clears that way; the team's needs its admin.
  • Reporting a block as a Scenario fault: confirm other providers refuse it too, then file it with scenario-report.
  • Escalating to a pricier model expecting a laxer filter: cost and moderation strictness are unrelated.
  • Reading an empty model list as moderation: a team blocklist or a plan restriction removes models before any prompt is judged.

© scenario-labs, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in skills/scenario-moderation of scenario-labs/skills.

Open the folder on GitHubat commit f6f8ab7

Compare with similar skills

Scenario Moderation next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Scenario Moderation compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Scenario Moderation this skillscenario-labs/skills946—~3.6kAutomated safety check: PassMIT
Aisafetyhotwuyoscar/AISafetyHot-Hub708—~1.4kAutomated safety check: PassCustom licence
ObliteratusRedWoodOG/Hermes-Desktop1775 repos~3.8kAutomated safety check: PassMIT
Lemonade Router Builderamd/skills408—~4kAutomated safety check: PassMIT
Execution Guardrailsmrtooher/fable-mode873—~1kAutomated safety check: PassNone
Writing Eval Scenariosopen-bias/open-bias143—~1.5kAutomated safety check: PassApache-2.0

Similar skills

  • Aisafetyhot

    wuyoscar/AISafetyHot-Hub

    Query AI Safety HOT news, research papers, incidents, hot topics, and daily/weekly/monthly reports through its public read-only MCP service.

    708 GitHub stars~1.4k tokensUpdated today
    AI & LLM EngineeringAuto-check passed
  • Obliteratus

    RedWoodOG/Hermes-Desktop

    Remove refusal behaviors from open-weight LLMs using OBLITERATUS — mechanistic interpretability techniques (diff-in-means, SVD, whitened SVD, LEACE, SAE decomposition, etc.) to excise guardrails…

    177 GitHub starsUsed in 5 repos~3.8k tokens
    AI & LLM EngineeringAuto-check passed
  • Turns a natural-language description of routing intent into a valid Lemonade collection.router policy JSON.

    408 GitHub stars~4k tokensUpdated yesterday
    AI & LLM EngineeringAuto-check passed
  • Execution Guardrails

    mrtooher/fable-mode

    Always-on operational guardrails, model-independent. An agent skill from mrtooher/fable-mode.

    873 GitHub stars~1k tokensUpdated 1 mo ago
    AI & LLM EngineeringAuto-check passed
  • Writing Eval Scenarios

    open-bias/open-bias

    Guide for writing eval conversation JSONs and running them through policy engines

    143 GitHub stars~1.5k tokensUpdated 3 days ago
    AI & LLM EngineeringAuto-check passed
  • Wp Project Triage

    gambitph/Stackable

    A skill your agent uses when you need a deterministic inspection of a WordPress repository (plugin/theme/block theme/WP core/Gutenberg/full site) including tooling/tests/version hints, and a…

    351 GitHub starsUsed in 3 repos~371 tokens
    AI & LLM EngineeringAuto-check passed

More from scenario-labs/skills

All 146 skills in this repo
  • Scenario Blender Grease Pencil

    scenario-labs/skills

    A skill your agent uses when drawing or animating with Grease Pencil in Blender 5.x from Python: 2D or 2.5D illustration, frame-by-frame animation, a cutout or part-based 2D character, strokes with…

    946 GitHub stars~4.5k tokensUpdated today
    Auto-check passed
  • Scenario Blender Hair

    scenario-labs/skills

    A skill your agent uses when grooming hair or fur in Blender with hair curves, such as a character hairstyle, animal fur, procedural fur in geometry nodes, or hair cards and mesh hair for games.

    946 GitHub stars~4.7k tokensUpdated today
    Auto-check passed
  • A skill your agent uses when lighting, rendering or compositing in Blender: light a character, product or hero shot, interior at dusk or night, three-point or motivated lighting, sun and sky, HDRI…

    946 GitHub stars~5k tokensUpdated today
    Auto-check passed
  • Scenario Chatgpt Pet Create

    scenario-labs/skills

    A skill your agent uses when creating a ChatGPT pet or Codex pet with Scenario: hatching an animated companion from a text idea, a character, mascot or brand cue, or reference photos and art; making…

    946 GitHub stars~3.6k tokensUpdated today
    Auto-check passed
  • Scenario Godot Animation

    scenario-labs/skills

    A skill your agent uses when animating characters or scenes in Godot 4.7: AnimationPlayer clips and RESET, AnimationTree state machines and blend spaces built in code, Mixamo or glTF import, loop…

    946 GitHub stars~4.7k tokensUpdated today
    Auto-check passed
  • Scenario Godot Audio

    scenario-labs/skills

    A skill your agent uses when adding or fixing sound in Godot 4.7: audio buses and effects, volume sliders, 'too many sounds', combat audio with hundreds of enemies, sounds clipping or distorting, 3D…

    946 GitHub stars~4.7k tokensUpdated today
    Auto-check passed

Questions about Scenario Moderation

What does Scenario Moderation do?

A skill your agent uses when a Scenario generation is blocked, refused, or returns a moderation or sensitive-content error, when a video is rejected after rendering or its audio track is flagged…. Scenario Moderation is an agent skill from scenario-labs/skills. Use when a Scenario generation is blocked, refused, or returns a moderation or sensitive-content error, when a video is rejected after rendering or its audio track is flagged, when an output is flagged for likeness to a real person or for IP and copyright detection, when the same prompt passes on one model and fails on another, or when a team's own characters, weapons, or props get flagged.

When should I use Scenario Moderation?

Scenario Moderation fits situations like: A Scenario generation is blocked; returns a moderation; sensitive-content error; A video is rejected after rendering.

How do I install Scenario Moderation in Claude Code?

Run `npx skills add scenario-labs/skills --skill scenario-moderation -a claude-code`. Or copy the skill folder (skills/scenario-moderation in scenario-labs/skills) into .claude/skills/scenario-moderation in your project. Claude Code loads it when a task matches its description.

How do I install Scenario Moderation in Codex?

Run `npx skills add scenario-labs/skills --skill scenario-moderation -a codex`. Or copy the skill folder (skills/scenario-moderation in scenario-labs/skills) into .agents/skills/scenario-moderation in your project. Codex loads it when a task matches its description.

Can I use Scenario Moderation in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add scenario-labs/skills --skill scenario-moderation -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/scenario-moderation, .gemini/skills/scenario-moderation, .github/skills/scenario-moderation and .opencode/skills/scenario-moderation in your project.

What does Scenario Moderation need to run?

Going by SKILL.md and its folder, Scenario Moderation needs the command-line tools its instructions call (npx). Our summary lists: Node.js.

Does Scenario Moderation access the network?

SKILL.md contains no URLs. Its commands use npx, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Scenario Moderation safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Scenario Moderation use?

Scenario Moderation is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Scenario Moderation use?

About 3.6k tokens (SKILL.md is roughly 14k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Scenario Moderation?

Skills that share tags, products or a category with Scenario Moderation: Aisafetyhot (wuyoscar/AISafetyHot-Hub, 708 stars), Obliteratus (RedWoodOG/Hermes-Desktop, 177 stars), Lemonade Router Builder (amd/skills, 408 stars) and Execution Guardrails (mrtooher/fable-mode, 873 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Scenario Moderation?

scenario-labs (a GitHub organization) maintains it in scenario-labs/skills, which has 946 GitHub stars. The repository holds 146 skills in this directory. The repository was last updated on October 10, 2026.

Source: scenario-labs/skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.