Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Use when naming a game asset file: apply the fixed category-first token order and format-per-context rules, not an ad-hoc name.
.claude/skills/game-asset-naming/SKILL.md| Model | Eval pass | Runs |
|---|---|---|
| gemini-3.6-flash | 100% | 12 |
| Model | Lift | Δ tokens | Δ turns | Cases | Verified |
|---|---|---|---|---|---|
| gemini-3.5-flashbest | +92% | — | 0% | 24 | 87d ago |
| gemini-3.6-flash | +82% | +143% | 0% | 22 | 54d ago |
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-11 | ✗→✓ | ▲ Improved | — | — |
| case-06 | ✗→✓ | ▲ Improved | — | — |
| case-05 | ✗→✓ | ▲ Improved | — | — |
| case-19 | ✗→✓ | ▲ Improved | — | — |
| case-07 | ✗→✓ | ▲ Improved | — | — |
Every game asset file (texture, audio, data) gets a filename built from a fixed, category-first token grammar with a context-specific file format. Apply it whenever you are asked to name, save, or rename an asset file — produce one exact filename, never an ad-hoc or descriptive name.
Pattern, exact order, underscore-separated:
category_name_variant_size.extcategory — FIRST token, one of exactly these six: character, prop,environment, ui, fx, tile. No synonyms (char, enemy, bg, vfx, terrain, icon are all wrong — map them to the canonical token).
name — the lowercase subject of the asset: goblin, sword, crate,closebutton. A single token, no internal separator.
variant — the visual variant: red, damaged, night, pressed, gold.If the asset has no variant, use the literal token base — never omit the slot.
size — the texture's pixel dimension as a power-of-two INTEGER, one of:64, 128, 256, 512, 1024, 2048, 4096. Never a word (small, large, hi, sm), never a non-power-of-two, never 512x512 (just 512). Textures are square, so one number covers both dimensions.
.ext — chosen by destination, not by source format:.png.ktx2 (compressed).jpg, .jpeg, .tga, .bmp, .psd for shipped textures.Pattern, exact order — note context is SECOND and there is no size token:
category_context_name_variant.extcategory — FIRST token, one of exactly: sfx, music, voice, ambient.context — SECOND token, the gameplay context: combat, ui, world, menu.name — the lowercase subject: sword_swing becomes the name (+ optionalvariant) portion; e.g. swing, click, footsteps, title.
variant — optional trailing variant (loop, alt, heavy). Omit if none —audio does NOT require a base filler the way textures do.
.ext — always .ogg, for every audio category including music. Never .wav,.mp3, .aiff, .flac.
snake_case_name.json.json extension.enemy_stats.json, loot_table.json. Never .yaml/.yml/.xml for these,never enemyStats.json or enemy-stats.json.
no dots except the single extension dot.
Texture, character with variant, 3D model, 512px
GoblinRed.png / goblin_red_small.png / goblin-red-512x512.tgacharacter_goblin_red_512.ktx2character), variant kept (red), integer power-of-two size(512), 3D destination → .ktx2.
Texture, no variant → literal base, 3D prop, 1024px
crate_1024.png (variant slot dropped, wrong ext)prop_crate_base_1024.ktx2base; 3D → .ktx2.Texture, UI element, 1024px
closeButton_pressed.png / ui_close_button_large.pngui_closebutton_pressed_1024.pngui, single-token name, real variant pressed, integer size, UI → .png.Texture, fx in a 2D UI overlay, 128px
explosion_spritesheet.png (no category, no size)fx_explosion_base_128.pngfx, base filler since "sprite-sheet" is not a visual variant, UIoverlay → .png.
Texture, environment, 2D menu backdrop, 4096px, night
forest_night_bg.jpgenvironment_forest_night_4096.pngbg→environment, variant night, flat menu/UI use → .png, not .jpg.Audio, sfx in combat
SwordSwing.wav / sword_swing_sfx.mp3sfx_combat_sword_swing.oggsfx, context SECOND combat, no size token, .ogg.Audio, looping menu music
title_theme.mp3 / music_title.wavmusic_menu_title_loop.oggmusic, context menu, loop as the variant, .ogg.Audio, voice line, town menu
merchant_greeting.wavvoice_menu_merchant_greeting.oggAudio, ambient world loop
wind_ambience.ogg (missing category/context order)ambient_world_wind_loop.oggData file
EnemyStats.yaml / enemy-stats.jsonenemy_stats.jsonbase (ui_healthbar_base_256.png).Do not drop the slot; the four-token shape is fixed.
sfx_ui_click.ogg). Audio has no basefiller; the minimum is category_context_name.
fx (when it is atexture). A particle texture used on a 3D world model is still .ktx2; one used as a 2D UI overlay is .png. Destination decides the extension, not the word "fx".
tile is its own category, separate from environment. Ground/terrain tiles usetile; large background/level art uses environment.
destined for a 3D model still ships as .ktx2; the filename reflects the destination.
closebutton, "health bar" → healthbar. Don't introduce an extra underscore that would shift the token positions.
(e.g. a dragon boss albedo → character_dragon_base_2048.ktx2); the map type is not a token in this grammar.
category first, always. DON'T lead with the subject name.char, enemy, bg, vfx,terrain, icon.
small/large/hior 512x512.
base when a texture has no variant. DON'T drop the variant slot..png, 3D→.ktx2, audio→.ogg. DON'T keepthe source format (.psd, .wav, .mp3, .tga, .jpg).
context second with NO size token. DON'T copy the texture shape onto audio.GoblinRed.png) instead of token grammar.goblin_character_...) instead of category-first._small, _large, _hi) instead of the integer power-of-two.base variant slot on textures with no variant..psd, .tga, .jpg, .wav, .mp3) insteadof the destination format.
.png for a 3D texture (should be .ktx2) or .ktx2 for a UI texture (shouldbe .png).
context in the wrong slot.category_name_variant_size.ext, integer power-of-two size, base if no variant?category_context_name[_variant].ogg, context second, no size token?.png, 3D .ktx2, audio .ogg, data .json?| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-11 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-06 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-10 | pass→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-05 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-19 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-07 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-01 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-02 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-20 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-04 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-03 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-16 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-13 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-18 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-15 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-12 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-08 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-17 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-22 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-09 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-14 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-21 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
DecimalAI ran this skill against gemini-3.5-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. The headline lift of +82 percentage points is the difference between those two pass rates over the 22 comparable cases.
The per-case answers from this run were removed by the retention sweep, so the case table below shows the verdicts without the text either arm produced. The counts above were recorded at the time and are unaffected. Answers are now kept for 180 days.
| Model | Method | Date | Lift |
|---|---|---|---|
| gemini-3.5-flash | verified | 6/26/2026 | +92% |
Other measured skills in the registry, with their headline benchmark lift.