CodeFizz
ToolsDemoDocsBlogRoadmapChangelogPricingFAQ
Get the plugin

Getting Started

  • Introduction
  • Quick Start
  • Requirements
  • Installing the CLI
  • License & Machines

Guides

  • Installing the Plugin
  • The AI Skill
  • CLI vs MCP
  • Multiple Editors
  • How It Works
  • Discovering Commands
  • The Editor Chat Panel

Walkthroughs

  • Build a Blueprint with AI
  • Author a Material Graph
  • Create a Niagara System
  • Rig a Character with AI
  • Build an Animation Blueprint
  • Build Sound with AI
  • Build a Modular Character
  • Grow a Tree with AI
  • Build a Gameplay Ability System
  • Generate a Landscape with AI
  • Work with World Partition

Reference

  • Reference
  • Audio
  • Mutable
  • Control Rig
  • Niagara
  • PCG
  • Procedural Vegetation
  • Materials
  • Gameplay Ability System
  • World Building
  • Behavior Trees
  • Environment Queries
  • StateTree
  • Sequencer
  • Level Actors
  • Project Settings
  • Blueprints
  • Blueprint Structs
  • Enhanced Input
  • Asset Management
  • Bulk Asset Ops
  • Data Assets
  • Object Properties
  • UMG Widgets
  • Data Tables
  • Curves
  • Animation
  • Console Commands
  • Profiling
  • Core
  • Debug
  • Mass Entity (ECS)

Help

  • FAQ
  • Troubleshooting
  • For AI Agents
  • Fix: Plugin failed to load, module could not be loaded (GetLastError 126)
  • Fix: bridge unreachable, editor not responding
  • Fix: cfa targeted the wrong Unreal editor
  • Fix: the CodeFizz panel does not show Active
  • Fix: Unknown command, or plugin version mismatch after an update
DocsReferenceGameplay Ability System

Gameplay Ability System

Every Gameplay Ability System command in CodeFizz Editor Agent, with parameters and examples.

Loading…
PreviousMaterialsNextWorld Building
CodeFizz

A drop-in Unreal Engine 5 plugin that exposes the entire editor surface (Blueprints, Materials, Niagara, PCG, StateTree, Control Rig, Insights profiling, and more) over the Model Context Protocol. Connect Claude Code, Cursor, VS Code, or any MCP-compatible client and let your AI build inside the engine.

Product

  • Features
  • Docs
  • Tools
  • Blog
  • Demo
  • Roadmap
  • Changelog
  • Pricing
  • FAQ

Resources

  • Install guide
  • Discord
  • YouTube
  • Open-source edition
  • Manage subscription

Legal

  • Refund Policy
  • Privacy Policy
  • Terms of Service

© 2026 CodeFizz. All rights reserved.

CodeFizz Editor Agent is a CodeFizz product. Payments processed by Polar Software, Inc. (Polar), the Merchant of Record.

25 commands. Each shows its parameters and an example, and has a copyable deep link, so you (or an AI agent) can jump straight to one.

list_gameplay_tags

List gameplay tags with source, comment and children

Lists gameplay tags from the live tag tree, each with the source that declares it, its developer comment and how many children it has. Filter by substring, by parent tag, or by defining source. Tags that are IMPLICIT are reported as such: an implicit tag exists only because a deeper tag was declared under it, has no ini entry of its own, and cannot be renamed or removed. That single distinction accounts for most confusion when editing a tag library. Needs no plugin, GameplayTags is a runtime engine module present on 5.6, 5.7 and 5.8.

ParameterTypeRequiredDescription
filterstringNoOnly tags containing this substring, case insensitive
parent_tagstringNoOnly tags descending from this tag, e.g. Character.State
sourcestringNoOnly tags declared by this source, e.g. DefaultGameplayTags.ini
max_resultsintNoMaximum tags to return; truncation is always reported
detailboolNoInclude comment, source and flags per tag (much larger payload)
example
  cfa list_gameplay_tags --filter Character
  cfa list_gameplay_tags --parent-tag Character.State
  cfa list_gameplay_tags --source DefaultGameplayTags.ini --max-results 50
get_gameplay_tag

Read one tag's comment, sources, parent and children

Reports everything the editor knows about a tag: its developer comment, every source that declares it (a tag can be declared in more than one), whether it is explicit or restricted, its parent and its immediate children. An implicit tag is named as such with the reason, which is normally the answer to why a tag will not rename or delete.

ParameterTypeRequiredDescription
tagstringYesFully qualified tag name, e.g. Character.State.Dead
example
  cfa get_gameplay_tag --tag Character.State.Dead
add_gameplay_tag

Add a gameplay tag to an ini source

Adds a tag through the engine's own IGameplayTagsEditorModule::AddNewGameplayTagToINI, so the write takes exactly the path the Project Settings tag editor takes. Parent tags are created implicitly. Pass --transient to add the tag for this editor session only, writing nothing to disk, the engine's own dry run for whether a name is accepted. The tag tree is re-read after the write and the result reflects what is actually there, so a reported success cannot mean a tag that was silently refused.

ParameterTypeRequiredDescription
tagstringYesFully qualified tag to add, e.g. Character.State.Dead
commentstringNoDeveloper comment shown in the tag picker
sourcestringNoTag source ini to write to; defaults to DefaultGameplayTags.ini
restrictedboolNoAdd as a restricted tag
allow_non_restricted_childrenboolNoRestricted tags only: allow ordinary child tags
transientboolNoSession only, writes nothing to disk
example
  cfa add_gameplay_tag --tag Character.State.Dead --comment "Set while the character is dead"
  cfa add_gameplay_tag --tag Ability.Dash --source MyTags.ini
  cfa add_gameplay_tag --tag Ability.Test --transient
remove_gameplay_tag

Remove a gameplay tag from its ini source

Removes a tag through the engine's own delete path. Refuses up front on an implicit tag, which has no ini entry to remove. When the engine declines, a tag with children, or one still referenced by loaded assets, this reports removed:false with the reason rather than a bare success, because the tag tree is re-read afterwards instead of the return value being trusted.

ParameterTypeRequiredDescription
tagstringYesFully qualified tag to remove
example
  cfa remove_gameplay_tag --tag Character.State.Obsolete
rename_gameplay_tag

Rename a tag, leaving a redirector behind

Renames a tag and leaves a redirector in the ini so assets referencing the old name keep resolving. --rename-children is UE 5.7 and later only: IGameplayTagsEditorModule::RenameTagInINI takes two arguments on 5.6 and three on 5.7/5.8, so on 5.6 asking to control it is refused by name rather than accepted and ignored.

ParameterTypeRequiredDescription
tagstringYesFully qualified tag to rename
new_tagstringYesNew fully qualified name
rename_childrenboolNoAlso rename child tags (UE 5.7+ only)
example
  cfa rename_gameplay_tag --tag Character.State.Dead --new-tag Character.Status.Dead
add_gameplay_tag_source

Create a new tag source ini

Creates a tag source so tags can be grouped away from DefaultGameplayTags.ini, which is what keeps a large project's tag library reviewable. The engine writes no file until the first tag is added to the source, so it will not appear in list_gameplay_tag_sources until then, this is reported rather than left to look like a failure.

ParameterTypeRequiredDescription
sourcestringYesFile name for the new source, e.g. MyTags.ini
root_dirstringNoDirectory to create it under; defaults to the project config directory
example
  cfa add_gameplay_tag_source --source MyTags.ini
list_gameplay_tag_sources

List tag sources and which are writable

Lists every tag source with its type, Native, DefaultTagList, TagList, RestrictedTagList or DataTable, and whether a tool can write to it. Native sources are declared in C++ and no tool can edit them. DataTable sources come from tables listed in GameplayTagTableList in project settings; a tag DataTable is an ordinary DataTable of FGameplayTagTableRow, so create_data_table and add_data_table_row author one and set_project_settings registers it.

ParameterTypeRequiredDescription
source_typestringNoNative, DefaultTagList, TagList, RestrictedTagList or DataTable
example
  cfa list_gameplay_tag_sources
  cfa list_gameplay_tag_sources --source-type TagList
validate_gameplay_tags

Check the tag library and return a verdict

Checks the project's tag library: how many tags are explicit versus implicit, and which explicit tags carry no developer comment, an undocumented tag is the thing nobody can safely delete two years later. With --check-unused it also reports tags no asset references, using the engine's own GetUnusedGameplayTags. Returns verdict pass/pass_with_warnings/fail.

ParameterTypeRequiredDescription
check_unusedboolNoAlso report tags referenced by no asset (needs an asset registry scan)
example
  cfa validate_gameplay_tags
  cfa validate_gameplay_tags --check-unused
list_attribute_sets

List AttributeSet classes, including unopened Blueprints

Lists every AttributeSet class with its attribute count, native and Blueprint alike. A scan of loaded classes alone misses any Blueprint attribute set the editor has never opened, so this also reads the asset registry and reports those separately without loading them. Needs the GameplayAbilities plugin, which ships DISABLED by default on 5.6, 5.7 and 5.8, when it is off the command says so and names where to enable it.

ParameterTypeRequiredDescription
filterstringNoOnly sets whose class name contains this substring
include_attributesboolNoInclude each set's attribute list
max_resultsintNoMaximum sets to return; truncation is always reported
example
  cfa list_attribute_sets
  cfa list_attribute_sets --filter Health --include-attributes
list_attributes

List an AttributeSet's attributes with defaults

Lists the attributes on an AttributeSet with their kind, default value and whether they replicate. What counts as an attribute is the engine's own test, reproduced exactly: any float property, or any property whose struct is FGameplayAttributeData or a subclass. It is never a naming convention, which is why a Blueprint variable of that struct type is a real attribute with no C++ at all. Accepts a class name, a class path, or the asset path of a Blueprint attribute set.

ParameterTypeRequiredDescription
attribute_setstringYesClass name, class path, or Blueprint asset path
include_defaultsboolNoReport each attribute's starting value from the class default object
example
  cfa list_attributes --attribute-set /Game/GAS/AS_Character
  cfa list_attributes --attribute-set MyHealthSet
create_attribute_set

Create a Blueprint AttributeSet, optionally with attributes

Creates a Blueprint AttributeSet and can create its attributes in the same call. UAttributeSet is declared Blueprintable on 5.6, 5.7 and 5.8, so a Blueprint attribute set is a first-class thing and not a workaround, no C++ is needed to define attributes. Attributes created this way are FGameplayAttributeData variables and are replicated by default.

ParameterTypeRequiredDescription
namestringYesAsset name, e.g. AS_Character
pathstringNoContent path to create it in; defaults to /Game/
parent_classstringNoParent attribute set class; defaults to UAttributeSet
attributesstringNoComma separated attribute names to create immediately
example
  cfa create_attribute_set --name AS_Character --path /Game/GAS/ --attributes "Health,MaxHealth,Stamina"
add_attribute

Add an attribute to a Blueprint AttributeSet

Adds an attribute as an FGameplayAttributeData variable on a Blueprint AttributeSet, replicated by default because an unreplicated attribute is a silent multiplayer bug. After the variable is created the engine's own attribute test is re-run against the recompiled class and the result reports whether the engine actually recognises it, a variable existing is not the same claim as an attribute existing. A C++ attribute set cannot gain attributes this way; that needs a property adding in code. On replication: this marks the variable Replicated, which is exactly what Epic's own AbilitySystemTestAttributeSet does. A C++ set can go further and pair ReplicatedUsing with the GAMEPLAYATTRIBUTE_REPNOTIFY macro, which calls SetBaseAttributeValueFromReplication so the AbilitySystemComponent rewinds its aggregator to the server's base value and re-evaluates. That function carries NO UFUNCTION on 5.6, 5.7 or 5.8, so it is unreachable from Blueprint and a Blueprint attribute set structurally cannot do it - a RepNotify can be added but has nothing useful to call. Consequence: fine for single player and server-authoritative play; for client-PREDICTED attributes under duration effects, declare the attribute set in C++.

ParameterTypeRequiredDescription
attribute_setstringYesBlueprint asset path of the attribute set
namestringYesAttribute name, e.g. Health
default_valuefloatNoStarting value
replicatedboolNoMark the attribute replicated
example
  cfa add_attribute --attribute-set /Game/GAS/AS_Character --name Health --default-value 100
validate_attribute_set

Check an AttributeSet and return a verdict

Checks an AttributeSet: that it defines any attributes at all, that none are raw floats where AttributeSet.h itself says FGameplayAttributeData is strongly encouraged (a raw float carries no base value and cannot be modified correctly by a duration effect), and that attributes replicate. Returns verdict pass/pass_with_warnings/fail.

ParameterTypeRequiredDescription
attribute_setstringYesClass name, class path, or Blueprint asset path
example
  cfa validate_attribute_set --attribute-set /Game/GAS/AS_Character
create_gameplay_effect

Create a GameplayEffect Blueprint

Creates a GameplayEffect Blueprint with an optional duration policy (Instant, Infinite, HasDuration). A gameplay effect is a DATA-ONLY Blueprint by Epic's own instruction in GameplayEffect.h, it is Blueprintable purely for templating and should contain no graph. Behaviour beyond modifiers has lived in gameplay effect components since 5.3; list_gameplay_effect_components shows which ones this engine version has.

ParameterTypeRequiredDescription
namestringYesAsset name, e.g. GE_Damage
pathstringNoContent path to create it in; defaults to /Game/
parent_classstringNoParent effect class; defaults to UGameplayEffect
duration_policystringNoInstant, Infinite or HasDuration
example
  cfa create_gameplay_effect --name GE_Damage --path /Game/GAS/ --duration-policy Instant
  cfa create_gameplay_effect --name GE_Regen --duration-policy HasDuration
list_gameplay_effect_components

List the effect component classes this engine has

Lists the gameplay effect component classes THIS engine version actually has, and with --gameplay-effect given, the components attached to that effect. The set is not constant across the versions we support: CancelAbilityTagsGameplayEffectComponent exists on 5.7 and 5.8 and does not exist on 5.6. So the list is discovered from the class hierarchy at call time rather than hardcoded, which is the only way it can be right on all three.

ParameterTypeRequiredDescription
gameplay_effectstringNoEffect asset path; omit to list only the available classes
component_classstringNoUnused for listing; present so the flag set matches the add and remove commands
example
  cfa list_gameplay_effect_components
  cfa list_gameplay_effect_components --gameplay-effect /Game/GAS/GE_Damage
add_gameplay_effect_component

Attach a gameplay effect component

Attaches a gameplay effect component, where all behaviour beyond modifiers lives since 5.3: granted tags, asset tags, immunity, chance to apply, additional effects, target tag requirements and the rest. Construction mirrors UGameplayEffect::AddComponent exactly, which is byte-identical on 5.6, 5.7 and 5.8, including the RF_PropagateToSubObjects | RF_Transactional flags it passes to NewObject. Those flags are the non-obvious half: without RF_Transactional the change is not undoable.

ParameterTypeRequiredDescription
gameplay_effectstringYesEffect asset path
component_classstringYesComponent class name or path; run list_gameplay_effect_components first
example
  cfa add_gameplay_effect_component --gameplay-effect /Game/GAS/GE_Damage --component-class AssetTagsGameplayEffectComponent
remove_gameplay_effect_component

Remove a gameplay effect component by class

Removes a gameplay effect component by class name, reporting the index removed and the remaining count. When the effect has no such component the error names what it does have, so there is no guess-and-retry loop.

ParameterTypeRequiredDescription
gameplay_effectstringYesEffect asset path
component_classstringYesComponent class name to remove
example
  cfa remove_gameplay_effect_component --gameplay-effect /Game/GAS/GE_Damage --component-class AssetTagsGameplayEffectComponent
set_gameplay_effect_modifier

Add or edit a modifier on a gameplay effect

Adds or edits a modifier: the attribute it changes, the operation (Additive, Multiplicitive, Division, Override) and the magnitude. Omit --index to append a new modifier. Writes go through the same reflected property path the rest of the tool uses, so whatever fields this engine version's modifier struct exposes are reachable and any that are not are reported per field rather than failing the whole call. That matters here more than elsewhere: 5.8 removed a batch of members deprecated in 5.0 and 5.3, so a gameplay effect's property set genuinely differs by version.

ParameterTypeRequiredDescription
gameplay_effectstringYesEffect asset path
attributestringNoAttribute to modify, as SetClass.AttributeName or a unique AttributeName
operationstringNoAdditive, Multiplicitive, Division or Override
magnitudefloatNoScalable float magnitude
indexintNoModifier index to edit; omit or -1 to append
example
  cfa set_gameplay_effect_modifier --gameplay-effect /Game/GAS/GE_Damage --attribute Health --operation Additive --magnitude -25
validate_gameplay_effect

Run the engine's own validation over an effect

Runs the ENGINE'S own validation over a gameplay effect and every component on it, through IsDataValid, which UGameplayEffect and UGameplayEffectComponent both override, so the verdict is Epic's rather than rules we invented. Adds one check of our own: an effect with neither modifiers nor components does nothing at all when applied, which the engine does not object to. Returns verdict pass/pass_with_warnings/fail.

ParameterTypeRequiredDescription
gameplay_effectstringYesEffect asset path
example
  cfa validate_gameplay_effect --gameplay-effect /Game/GAS/GE_Damage
create_gameplay_ability

Create a GameplayAbility Blueprint

Creates a GameplayAbility Blueprint. This deliberately does not go through create_blueprint: an ability asset must be a UGameplayAbilityBlueprint, not a plain UBlueprint, and GameplayAbilities registers no blueprint-type mapping for the generic path to find. The class pair passed here is exactly what the engine's own GameplayAbilitiesBlueprintFactory passes, which is byte-identical on 5.6, 5.7 and 5.8.

ParameterTypeRequiredDescription
namestringYesAsset name, e.g. GA_Dash
pathstringNoContent path to create it in; defaults to /Game/
parent_classstringNoParent ability class; defaults to UGameplayAbility
example
  cfa create_gameplay_ability --name GA_Dash --path /Game/GAS/
create_gameplay_cue_notify

Create a cue notify Blueprint bound to its cue tag

Creates a gameplay cue notify Blueprint, static (no actor spawned), actor, burst or looping, and binds it to its cue tag. Binding writes BOTH GameplayCueTag and the AssetRegistrySearchable GameplayCueName mirror. That second field is what the cue manager actually discovers notifies by, so writing only the first produces an asset that looks correctly configured in the details panel and never fires. The mirror is read back after the write and reported as bound:true/false rather than assumed. Omit --cue-tag to derive it from the asset name using the engine's own rule (strip GC_, underscores become dots, prepend GameplayCue). The engine only ever REQUESTS an existing tag when deriving, so a missing tag would leave the notify unbound, this creates it unless --create-tag=false.

ParameterTypeRequiredDescription
namestringYesAsset name, e.g. GC_Buff_ExtraSpeed
pathstringNoContent path to create it in; defaults to /Game/
cue_tagstringNoCue tag to bind to; omit to derive it from the asset name
notify_typestringNostatic, actor, burst or looping
create_tagboolNoCreate the cue tag when it does not exist
example
  cfa create_gameplay_cue_notify --name GC_Buff_ExtraSpeed --path /Game/GAS/Cues/
  cfa create_gameplay_cue_notify --name GC_Heal --cue-tag GameplayCue.Buff.Heal --notify-type actor
list_gameplay_cue_notifies

List cue notify assets and the tag each answers to

Lists gameplay cue notify assets with the cue tag each one answers to, read from the asset registry so a notify the editor has never opened still appears. Notifies with no cue tag at all are reported in a separate list, because those are invisible to the cue manager no matter what the asset looks like.

ParameterTypeRequiredDescription
filterstringNoOnly notifies whose cue tag contains this substring
max_resultsintNoMaximum notifies to return; truncation is always reported
example
  cfa list_gameplay_cue_notifies
  cfa list_gameplay_cue_notifies --filter Buff
validate_gameplay_cues

Cross-check cue tags against notifies, both directions

Cross-checks cue tags against cue notify assets in BOTH directions, which is where cues actually break: a tag with no notify fires and produces nothing visible (warning), a notify with no tag is never discovered by the cue manager (error), and a notify bound to a tag that no longer exists is dead weight (error). Epic's own toolset reports only the first of those three. Returns verdict pass/pass_with_warnings/fail.

ParameterTypeRequiredDescription
parent_tagstringNoOnly check cue tags under this parent
example
  cfa validate_gameplay_cues
  cfa validate_gameplay_cues --parent-tag GameplayCue.Buff
search_gas

Ranked bulk search across tags, attributes, effects and abilities

One ranked search across every gameplay tag and GAS domain: tags, cues, attributes, attribute sets, effects, abilities and gameplay effect components. Takes SEVERAL terms in a single call, "buff,protect,attack", and answers each with its own top-N list, so finding the real names of a set of things is one round trip instead of one per term. Ranking is fuzzy by default: an exact name beats a prefix, which beats a match at a tag or word boundary, which beats a plain substring, which beats a subsequence; shorter names win ties because a short name containing the term is a closer answer than a long one that merely includes it. --mode substring and --mode regex are there when you want literal control instead. Effects and abilities are read from the asset registry, so assets the editor has never opened are found without loading them. Every result carries its kind and owner, so a returned attribute name can be pasted straight into set_gameplay_effect_modifier. --under scopes tags and cues to a SUBTREE, so on a library of a hundred thousand tags you can ask what lives under Buff.Archer without listing anything else; the parent itself is included. --attribute-set does the same for attributes. Either one may be used with no --query at all, which means "show me what is in this scope", the way to explore a large library without dumping it. To create many tags at once use the batch command rather than calling add_gameplay_tag repeatedly: 100 tags in one batch is roughly 30x faster than 100 separate calls, and lands as ONE undo step. Tags and cues need no plugin; the rest needs GameplayAbilities, and when it is off the search narrows and says so rather than failing.

ParameterTypeRequiredDescription
querystringNoOne or more terms, comma or semicolon separated; omit when using --under or --attribute-set to list a scope
kindstringNotags, cues, attributes, attribute_sets, effects, abilities, components, or all
topintNoResults per query term
understringNoRestrict tag and cue results to this subtree, e.g. Buff
attribute_setstringNoRestrict attribute results to this AttributeSet
modestringNofuzzy, substring or regex
explainboolNoInclude the score and why each result matched
example
  cfa search_gas --query "buff,protect,attack" --top 10
  cfa search_gas --under Buff.Archer --kind tags --top 20
  cfa search_gas --query power --under Buff --top 5
  cfa search_gas --query health --attribute-set AS_Hero --explain
  cfa search_gas --query "^GameplayCue\..*Death$" --kind cues --mode regex
get_ability_system_info

Inspect an actor's AbilitySystemComponent

Inspects an actor's AbilitySystemComponent and reports its attribute sets and their values. Outside play the values are class defaults and the response says so explicitly, because active effects, granted abilities and owned tags only exist during PIE, reporting them as empty without that note would read as 'this actor has none' rather than 'the game is not running'. Omit --actor to use the current selection.

ParameterTypeRequiredDescription
actorstringNoActor label; omit to use the selection
includestringNoattributes, effects, abilities, tags or all
example
  cfa get_ability_system_info --actor BP_Character_1
  cfa get_ability_system_info