Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Scans lyrics for explicit content and verifies that explicit flags match actual content. Use before Suno generation or release to ensure accurate content ratings.
.claude/skills/bitwize-music-studio-explicit-checker/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | 36% | 0% |
| case-15 | ✗→✓ | ▲ Improved | 6% | 0% |
| case-07 | ✓→✓ | = Same ✓ | 140% | 0% |
| case-08 | ✓→✓ | = Same ✓ | 165% | 0% |
| case-09 | ✓→✓ | = Same ✓ | 77% | 0% |
Path to scan: $ARGUMENTS
You scan lyrics for explicit content to ensure proper flagging before release.
These words and variations require the explicit flag:
| Category | Words | |----------|-------| | F-word | fuck, fucking, fucked, fucker, motherfuck, motherfucker | | S-word | shit, shitting, shitty, bullshit | | B-word | bitch, bitches | | C-words | cunt, cock, cocks | | D-word | dick, dicks | | P-word | pussy, pussies | | A-word | asshole, assholes | | Slurs | whore, slut, n-word, f-word (slur) | | Profanity | goddamn, goddammit |
These are acceptable without explicit flag:
Note: "damn" alone is clean, but "goddamn" is explicit.
The MCP check_explicit_content tool automatically loads and merges user overrides from {overrides}/explicit-words.md. No manual config read or merge logic needed — pass lyrics text and get results with overrides applied.
{overrides}/explicit-words.md:
markdown# Custom Explicit Words ## Additional Explicit Words - slang-term - regional-profanity - artist-specific-explicit ## Not Explicit (Override Base) - hell (context: historical/literary) - damn (context: emphasis)
list_tracks(album_slug) — get all tracks with metadataextract_section(album_slug, track_slug, "lyrics") — get lyrics textcheck_explicit_content(lyrics_text) — returns matches with line numbers (overrides auto-merged)extract_section(album_slug, track_slug, "lyrics") — get lyrics textcheck_explicit_content(lyrics_text) — scan for explicit wordsget_track(album_slug, track_slug)EXPLICIT CONTENT SCAN
Album: [Album Name]
Date: [Scan Date]
TRACK RESULTS:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Track 01: [Title]
Flag: No
Content: Clean
Status: ✓ OK
Track 02: [Title]
Flag: Yes
Content: fuck (3), shit (2), bitch (1)
Status: ✓ OK (flag matches content)
Track 03: [Title]
Flag: No
Content: fuck (1)
Status: ⚠️ MISMATCH - Contains explicit content but flag is No
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
SUMMARY:
Total tracks: 10
Clean tracks: 7
Explicit tracks: 3
Mismatches: 1
ALBUM EXPLICIT FLAG: Yes (any track explicit = album explicit)
ACTION REQUIRED:
- Track 03: Set Explicit flag to Yes⚠️ MISMATCH: Track contains explicit content but Explicit flag is "No"
ACTION: Set Explicit: Yes in track fileℹ️ NOTE: Track flagged explicit but no explicit words found
This is OK - artist may want explicit flag for themes/context
No action required (conservative flagging is fine)Most distributors (DistroKid, TuneCore, CD Baby) require:
Consequences of wrong flags:
Rule: When in doubt, mark explicit. Under-flagging is worse than over-flagging.
This skill is called during:
/explicit-checker [path]/explicit-checker artists/[artist]/albums/rock/dark-tide/
/explicit-checker artists/[artist]/albums/rock/dark-tide/tracks/01-the-tank.md| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-04 | fail→pass | 13,735 | 13,962 | +2% | 1 | 1 | 0% | 2,731 | 3,714 | +36% | 0 | 0 | — |
case-01 | fail→fail | 14,337 | 68,564 | +378% | 1 | 1 | 0% | 2,745 | 1,846 | -33% | 0 | 0 | — |
case-02 | fail→fail | 8,504 | 7,478 | -12% | 1 | 1 | 0% | 1,496 | 1,709 | +14% | 0 | 0 | — |
case-03 | fail→fail | 6,798 | 6,368 | -6% | 1 | 1 | 0% | 1,077 | 1,786 | +66% | 0 | 0 | — |
case-05 | fail→fail | 2,493 | 14,721 | +490% | 1 | 1 | 0% | 427 | 2,081 | +387% | 0 | 0 | — |
case-06 | fail→fail | 3,830 | 7,146 | +87% | 1 | 1 | 0% | 676 | 1,634 | +142% | 0 | 0 | — |
case-07 | pass→pass | 6,097 | 6,226 | +2% | 1 | 1 | 0% | 997 | 2,389 | +140% | 0 | 0 | — |
case-08 | pass→pass | 5,611 | 5,984 | +7% | 1 | 1 | 0% | 896 | 2,374 | +165% | 0 | 0 | — |
case-09 | pass→pass | 6,756 | 3,656 | -46% | 1 | 1 | 0% | 1,107 | 1,956 | +77% | 0 | 0 | — |
case-10 | pass→pass | 5,104 | 5,103 | -0% | 1 | 1 | 0% | 849 | 2,243 | +164% | 0 | 0 | — |
case-11 | pass→pass | 10,841 | 5,451 | -50% | 1 | 1 | 0% | 1,744 | 2,251 | +29% | 0 | 0 | — |
case-12 | pass→pass | 12,518 | 7,195 | -43% | 1 | 1 | 0% | 2,096 | 2,623 | +25% | 0 | 0 | — |
case-13 | pass→pass | 3,761 | 5,859 | +56% | 1 | 1 | 0% | 615 | 2,292 | +273% | 0 | 0 | — |
case-14 | pass→pass | 8,221 | 9,213 | +12% | 1 | 1 | 0% | 1,336 | 2,797 | +109% | 0 | 0 | — |
case-15 | fail→pass | 12,020 | 4,726 | -61% | 1 | 1 | 0% | 2,022 | 2,138 | +6% | 0 | 0 | — |
case-16 | fail→fail | 2,212 | 4,179 | +89% | 1 | 1 | 0% | 356 | 2,079 | +484% | 0 | 0 | — |
case-17 | pass→pass | 13,220 | 4,312 | -67% | 1 | 1 | 0% | 1,971 | 1,942 | -1% | 0 | 0 | — |
case-18 | pass→pass | 6,051 | 8,291 | +37% | 1 | 1 | 0% | 767 | 2,026 | +164% | 0 | 0 | — |
case-19 | pass→pass | 10,929 | 2,318 | -79% | 1 | 1 | 0% | 1,694 | 1,652 | -2% | 0 | 0 | — |
case-20 | pass→pass | 4,130 | 5,706 | +38% | 1 | 1 | 0% | 717 | 2,257 | +215% | 0 | 0 | — |
case-21 | pass→pass | 6,489 | 4,435 | -32% | 1 | 1 | 0% | 1,007 | 2,127 | +111% | 0 | 0 | — |
case-22 | pass→pass | 8,055 | 2,616 | -68% | 1 | 1 | 0% | 1,442 | 1,772 | +23% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 17 counted toward the lift figure. The other 5 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +9 percentage points is the difference between those two pass rates over the 17 comparable cases. 2 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.