skills/gameplay-tag-query-builder/SKILL.md
Build GameplayTagQuery expressions from natural language. Dynamically searches project INI files and SharedGameplayTags native definitions to find matching tags.
npx skillsauth add sipherxyz/universal-ue-skills gameplay-tag-query-builderInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Purpose: Convert natural language descriptions into accurate UE5 FGameplayTagQuery expressions by dynamically searching all available project tags.
The skill MUST search these sources for available tags:
# Main project tags
Config/DefaultGameplayTags.ini
# Organized tag files (ability, character state, combo, fulu, etc.)
Config/Tags/*.ini
# Plugin-specific tags (search recursively)
Plugins/**/Config/**/*GameplayTags*.ini
Plugins/**/Config/**/Tags/*.ini
INI Tag Pattern:
+GameplayTagList=(Tag="Sipher.Ability.Attack.Heavy",DevComment="...")
Extract: Tag="([^"]+)" -> Sipher.Ability.Attack.Heavy
Plugins/Frameworks/SharedGameplayTags/Source/SharedGameplayTags/Public/GeneratedTags/*.h
Native Tag Pattern:
SHAREDGAMEPLAYTAGS_API UE_DECLARE_GAMEPLAY_TAG_EXTERN(Character_State_Action_Attacking);
Transform: Character_State_Action_Attacking -> Sipher.Character.State.Action.Attacking
Namespace Prefixes:
namespace Sipher -> Sipher. prefixnamespace SIO -> SIO. prefix# Use Grep to find all GameplayTagList entries
grep -r "GameplayTagList.*Tag=" Config/ Config/Tags/ Plugins/*/Config/ --include="*.ini"
# Find all native tag declarations
grep -r "UE_DECLARE_GAMEPLAY_TAG_EXTERN" Plugins/Frameworks/SharedGameplayTags/Source/ --include="*.h"
Analyze the user's natural language query to determine:
| Intent Type | Keywords | Query Type | |-------------|----------|------------| | Inclusion | "has", "with", "contains", "is", "are" | AllTagsMatch / AnyTagsMatch | | Exclusion | "without", "not", "exclude", "no", "isn't" | NoTagsMatch | | Any/Or | "any of", "either", "or" | AnyTagsMatch | | All/And | "all of", "both", "and" | AllTagsMatch |
Semantic Matching Rules:
| User Says | Search Pattern |
|-----------|---------------|
| "attacking" | *Attack*, *Attacking* |
| "parrying", "parry" | *Parry*, *Parrying* |
| "blocking", "block" | *Block*, *Blocking* |
| "dodging", "dodge" | *Dodge*, *Dodging* |
| "stunned", "stun" | *Stun* |
| "hit reaction", "stagger" | *HitReact*, *Stagger* |
| "immune", "immunity" | *Immune* |
| "casting", "spell" | *Casting*, *Spell* |
| "fulu", "talisman" | *Fulu* |
| "cooldown" | *.Cooldown |
| "sprinting", "running" | *Sprint*, *Running* |
| "jumping", "in air" | *Jump*, *InAir* |
| "grounded" | *Grounded* |
| "boss" | *Boss* |
| "AI state" | AIScalable.States.* |
| "combat" | *Combat* |
| "heavy attack" | Attack.Heavy |
| "light attack" | Attack.Light |
| "elemental X" | *Elemental*X* |
YOUR ENTIRE RESPONSE MUST BE EXACTLY ONE LINE. NOTHING ELSE.
TYPE: Tag1, Tag2 AND TYPE: Tag3, Tag4
ALL, ANY, NONENONE: Sipher.Character.State.Action.Attacking
ANY: Sipher.Character.State.Action.Parrying, Sipher.Character.State.Action.Dodging
ANY: Sipher.Character.State.Action.Parrying AND NONE: Sipher.Character.State.Action.Attacking
ALL: Sipher.Character.State.ParryWindow AND NONE: Sipher.Character.State.Action.Attacking
**, `, code blocks)ALL: [ANY: ...]ANY: Sipher.Character.State.Action.Parrying, Sipher.Character.State.Action.Dodging AND NONE: Sipher.Character.State.Action.Attacking
DO NOT EXPLAIN. DO NOT ADD CONTEXT. JUST OUTPUT THE SINGLE LINE.
User: "actor without attacking tags"
Step 1: Search for attack-related tags:
Sipher.Character.State.Action.Attacking
Sipher.Character.State.Action.Artifact.Attacking
Sipher.Ability.Attack.DodgeAttack
Sipher.Ability.Attack.Heavy
Sipher.Ability.Attack.Light
Sipher.Ability.Attack.Range
Step 2: Detect "without" = exclusion intent
Output:
NONE: Sipher.Character.State.Action.Attacking, Sipher.Ability.Attack.DodgeAttack, Sipher.Ability.Attack.Heavy, Sipher.Ability.Attack.Light, Sipher.Ability.Attack.Range
User: "actor that is parrying or blocking"
Step 1: Search for parry/block tags:
Sipher.Character.State.Action.Parrying
Sipher.Ability.Parry.Parrying
Sipher.Ability.Parry.Blocking
Step 2: Detect "or" = any match intent
Output:
ANY: Sipher.Character.State.Action.Parrying, Sipher.Ability.Parry.Parrying, Sipher.Ability.Parry.Blocking
User: "enemy in combat state with stun immunity"
Step 1: Search for relevant tags:
Sipher.AIScalable.States.Combat
Sipher.HitReaction.Immune.Stun (if exists)
Sipher.Character.State.Action.HitReacting.Stun (negation candidate)
Step 2: Detect "with" = all match intent
Output:
ALL: Sipher.AIScalable.States.Combat, Sipher.HitReaction.Immune.All
User: "character currently dodging"
Search & Output:
ANY: Sipher.Character.State.Action.Dodging, Sipher.Ability.Dodge.JustDodged
User: "actor that has parry window but isn't attacking"
Step 1: Search for relevant tags:
Sipher.Character.State.ParryWindow
Sipher.Character.State.Action.Attacking
Step 2: Detect compound condition - must have parry AND must not have attacking
Output:
ALL: Sipher.Character.State.ParryWindow AND NONE: Sipher.Character.State.Action.Attacking
User: "enemy doing heavy or light attack but not dodging"
Output:
ANY: Sipher.Ability.Attack.Heavy, Sipher.Ability.Attack.Light AND NONE: Sipher.Character.State.Action.Dodging
When matching, prefer more specific tags over generic ones:
Sipher.Ability.Attack.Heavy <- Specific (prefer)
Sipher.Ability.Attack <- Generic
Sipher <- Too broad (avoid)
Rules:
Sipher, Locomotion)No matching tags found:
No tags found matching "{user query}".
Available tag patterns in this area:
- {list 3-5 closest matches}
Please refine your query or choose from above.
Ambiguous query:
Multiple interpretations possible:
1. {interpretation 1} -> {tags}
2. {interpretation 2} -> {tags}
Which did you mean?
This skill is designed for the SipherClaudeCodeTool's GameplayTagQuery AI generator feature. The output format matches what the UE property customization expects.
skill: gameplay-tag-query-builder
invoke: /editor-tools:gameplay-tag-query-builder
type: utility
category: editor-tools
scope: project-root
development
This skill should be used when implementing features in isolation using git worktrees. Triggers on "create worktree", "isolated workspace", "parallel development", or when starting implementation that should not affect main workspace.
testing
Manage VFX team issues on GitHub Projects - timeline scheduling, status updates, member commit checks, bulk assign. Use when managing VFX team project board, adding issues to timeline, checking member progress, or bulk-updating issue fields.
tools
Generate C++ validation rules from JSON definitions. Use when team updates ValidationRules.json or asks to add/modify validation rules.
development
Check codebase for Microsoft Xbox XR (Xbox Requirements) compliance issues. Scans for account picker, cloud saves, achievements, Quick Resume, and Xbox certification requirements. Use before console submission or when preparing for Microsoft certification. Triggers on "XR", "Xbox certification", "Microsoft compliance", "Xbox cert", "Xbox requirements", "GDK compliance".