All notable changes to soft-ue-cli will be documented in this file.
- New
reload-bridge-modulecommand and bridge tool reload the bridge editor module from the rebuilt DLL on disk without a full editor restart - New
wire-customizable-object-slot-from-tablecommand and bridge tool create a NodeTable -> Material -> ComponentMesh slot chain in one call build-and-relaunch --waitcan now detect Unreal startup recovery prompts and apply, ask for, or remember recover/skip/manual handlingtrigger-live-codingnow supports--moduleand--pluginscope filters so unrelated reflected header edits do not block bridge-only Live Coding attempts
capture-screenshotnow validates captured image dimensions and pixel count before compression to avoid editor crashes from invalid buffers- Normal CLI bridge reconnects can now handle visible Unreal startup recovery prompts using a remembered or interactive choice
- New
regenerate-co-node-pinscommand andregenerate-customizable-object-node-pinsbridge tool regenerate pins for one Mutable/CustomizableObject graph node and return the refreshed pin list - New
remove-co-nodecommand and bridge tool remove CustomizableObject graph nodes by GUID, path, name, or title connect-co-pinsnow auto-regenerates missing source or target node pins once by default before failing; pass--no-auto-regenerateto keep the old strict lookup behavior- Mutable parameter inspection now includes runtime enum option metadata when available
compile-conow prefers reflected asset compile APIs with compile-parameter configuration before falling back to editor function library compilation- CustomizableObject NodeTable property edits now follow the editor details-panel change sequence and refresh dynamic pins after table/structure changes
- CustomizableObject property pin fallback now supports object reference defaults, enabling asset links such as mesh/object pin values
add-datatable-rownow forwardsrow_dataas a JSON object and deserializes row fields individually
- UE 5.7 plugin builds no longer hit the ambiguous
SetIntPropertyValueoverload in Mutable runtime introspection connect-co-pinsdistinguishes node-not-found errors from pin-not-found-after-regenerate errors
- New Mutable/CustomizableObject edit commands:
add-co-node,add-co-parameter,add-co-mesh-option,set-co-base-mesh,add-co-group-child,set-co-node-property,connect-co-pins, andcompile-co - New bridge-backed CustomizableObject graph edit tools for adding nodes, setting node properties, connecting pins, and compiling assets
- Bridge health diagnostics now include registered tool names and loaded module paths to make missing-tool and stale-plugin issues easier to diagnose
- Unknown bridge tool errors now report the requested tool, registered tool count, registered names, loaded module paths, bridge version, and recovery guidance
- MCP schemas now preserve native JSON object types for command parameters such as CustomizableObject node properties
- CLI export: restored the public
inspect-customizable-object-graph,inspect-mutable-parameters, andinspect-mutable-diagnosticscommand wrappers so the packaged CLI matches the documented Mutable inspection surface
- new
inspect-customizable-object-graphcommand returns machine-readable graph, node, pin, and edge data for Mutable/CustomizableObject assets - new
inspect-mutable-parameterscommand derives structured Mutable parameter metadata such as groups, defaults, options, tags, and related graph links - new
inspect-mutable-diagnosticscommand reports Mutable plugin availability plus best-effort capability and runtime diagnostics for a target asset
- plugin build:
AssetIntrospectionUtils.cppnow compiles against UE 5.7 by includingUserDefinedStructEditorData.hwhen available and passing a compatible parent object toExportText_Direct
- Mutable inspection commands are implemented without a hard compile-time Mutable dependency, so projects without the plugin return structured unavailable/limited results instead of failing to compile
- plugin build:
GetLogsTool.cppno longer depends onMisc/LexicalConversion.h, avoiding a UE-version-specific include failure during plugin compilation
- README now includes a project-origin note and a public-development status note explaining that future work may continue privately while the published code remains available as a prototype/reference
- new
exec-console-commandcommand executes arbitrary UE console commands directly in editor, PIE, or game worlds without requiring a Python wrapper script - new
inspect-pawn-possessioncommand returns structured controller/pawn possession state, AI auto-possession settings, and visibility data for runtime debugging - new
validate-class-pathcommand verifies whether a soft class path exists, loads, resolves to aUClass, and reports its parent hierarchy - new
request-gameplay-taghelper resolves a registered gameplay tag name and returns validity plus export text - new
reload-gameplay-tagshelper reloads GameplayTags settings and refreshes the in-memory tag tables - new
release-asset-lockbest-effort command closes asset editors and forces GC to reduce editor-side file-handle conflicts during VCS workflows
get-logsnow supports server-side--contains, cursor/timestamp-based--since, and--tail-followpolling for targeted runtime log inspectionrun-python-script --world pie,exec-console-command, andinspect-pawn-possessionnow fail fast with a structuredPIE_NOT_RUNNINGerror unless PIE is already running or auto-start is requestedtrigger-live-codingnow warns before dispatch when git reports changed reflected header files that are likely to make Live Coding cancel
build-and-relaunchnow launches its detached Windows build worker through PowerShell in a way that survives editor shutdown, writes fresh status/log artifacts for--wait, and actually runs the requested build before optional relaunch- Plugin: SoftUEBridge no longer calls
StartAllListeners()every 10 seconds while idle; listener revival now happens only on PIE start/stop lifecycle hooks, preventing repeatedLogHttpServerModulespam in UE 5.7 editor sessions
- removed the extra yellow
Support this projectREADME badge from the public badge strip to keep the header more compact while preserving the existing support links below
- SoftUEBridge's editor-only dependency plugins are now limited to Editor targets in the plugin descriptor, preventing Python/editor scripting/StateTree editor dependencies from being enabled for packaged game targets
- refreshed the public README badge strip to highlight AI agent support, shipped skills, tool count, MCP mode, and direct support links without implying the package is tied to a single client
run-python-scriptCLI tests now assert the shippedscript_pathdispatch behavior used by--nameand--script-path, keeping the release smoke suite aligned with the actual bridge request payloads
query-asset --asset-path /Game/...world inspection now builds cleanly on UE 5.7 by switching toFSoftObjectPathasset lookups and including the concreteAGameModeBasedefinition needed byWorldSettings.DefaultGameMode
query-asset --asset-path /Game/...now exposesworld_settings.default_game_modeand related map metadata forUWorldassets, so test maps can be checked offline forWorldSettingsoverrides- new
plan-test-infrastructureandsetup-test-infrastructureskills centralize project-specific test-map/module convention work under theauthor-testworkflow
run-python-script --script-pathnow executes files as files again instead of flattening them into inline source, preserving__file__,__future__imports, and normal quoting/docstring behaviorrun-python-scriptnow rejects editor map-loading APIs such asEditorLoadingAndSavingUtils.load_map()andEditorLevelLibrary.load_level()before execution to avoid tearing down the active Python contextinspect-anim-instancenow populatesslotsfrom active montage slot tracks instead of always returning an empty arrayset-asset-propertyproperty-path traversal now descends intoInstancedStructpayloads, enabling nested edits for assets such as ChooserTables- authoring skill templates now use
EAutomationTestFlags::EditorContextand explicitly avoid bareGetWorld()calls from generated Automation Spec bodies for UE 5.7 compatibility
- offline External Actor tagged property parsing now resolves combined
FNamereferences in property headers, so fields such asDataLayerAssetsno longer fall back toinvalid_name_*when the upper 32-bit name number is populated
inspect-uasset --sections propertiesanddiff-uasset --sections propertiesnow expose and diff External Actor tagged UPROPERTY payloads offline, including common scalar, object, array, and struct values when parsable- README architecture and testing docs now use text diagrams and explicitly show the split between bridge-backed exploration flows and offline/local capabilities
- test authoring skills now target committed C++ Automation Spec outputs; CLI + bridge + Python workflows are documented as exploration inputs rather than the final regression artifact
run-testskill has been removed; execution guidance now belongs with the generated C++ test workflow rather than a generic skill
run-python-script --script-pathnow resolves the file locally before dispatch, avoiding bridge-side path misinterpretationrun-python-scriptnow supports explicit world targeting and injects world helpers for editor/PIE/game executioninspect-widget-blueprintnow surfaces referenced Input Mapping Context bindings and resolved keys for Input Action references- SoftUEBridge now defaults to Unreal's
DeveloperToolmodule type so Shipping builds exclude it by default query-materialno longer risks an unboundedGetInput()iteration when inspecting material graphs
rewind-start,rewind-stop,rewind-statuscommands to control UE Rewind Debugger recording sessions with channel and actor filteringrewind-list-tracks,rewind-overview,rewind-snapshotcommands for LLM-driven animation debugging — list recorded actors, get track-level summaries, and drill down to animation state at a specific time or framerewind-savecommand to persist in-memory recordings to.utracefilesinspect-uasset/diff-uassetnow support non-Blueprint assets (AnimSequence, PoseSearchDatabase, DataTable, etc.) via a generic export/import summary fallbackinspect-uassetnow extracts actor label/class/path, GUID, folder, runtime grid, tags, and data-layer hints from External Actor.uassetpackages for offline history reviewinspect-uasset --sections propertiesanddiff-uasset --sections propertiesnow expose and diff External Actor tagged UPROPERTY payloads offline, including common scalar, object, array, and struct values when parsable
pie-tickno longer crashes with a re-entrant TaskGraph assertion when UMassEntityEditorSubsystem (or anyFTickableEditorObjectthat waits on game-thread tasks) is active. World ticks are now deferred through FTSTicker and driven by the engine's normal Slate tick loop instead of running directly inside the bridge server's AsyncTask handler.
- Rewind Debugger commands require the Animation Insights (GameplayInsights) plugin to be enabled in Edit > Plugins. Error messages guide users to enable it when not active.
- README architecture docs now use text diagrams and explicitly show which commands bypass the bridge and operate on local files offline.
batch-callcommand for composing multiple bridge tool invocations into one in-process batch requestpie-tickcommand for deterministic PIE stepping by frame countinspect-anim-instancecommand for one-shot snapshots of live anim state machines, montages, and blend weightsrun-python-scriptbridge helper import support viafrom soft_ue_bridge import callreplay-changesskill for Git and Perforce binary-asset conflict recovery using manualbase/local/remoteextraction plus offline.uassetinspection
call-functionnow supports class-targeted invocation flows including class default object and transient-instance execution, plus batch JSON inputtest-toolsnow exercises the new automation surface forbatch-call,pie-tick,inspect-anim-instance, and transientcall-functionreplay-changesis now documented as a CLI skill workflow instead of a dedicated command
call-functionlatent-function rejection now uses a portableLatentActionInfostruct-name check across engine versionsinspect-anim-instanceresolves state machine descriptors more reliably and avoids engine-version-specific transition query breakage during bridge builds- public CLI export sync now hard-fails if embargoed private names appear in examples, docs, tests, prompts, or code
query-enumcommand for UserDefinedEnum introspection: authored names, display names, tooltips, and numeric valuesquery-structcommand for UserDefinedStruct introspection: authored member names, defaults, metadata, and reflected type infoblueprint-to-cppskill now starts with dependency-first planning guidance, including enum/struct inspection and promotion-first conversion strategy
query-asset --asset-pathnow inspectsUserDefinedEnumandUserDefinedStructassets instead of failing with a generic load errorquery-asset --asset-pathnow inspects Blueprint-generatedUDataAsset/UPrimaryDataAssetassets via their generated class default objectcapture-screenshot tab --window-name ...now falls back to visible tab labels and matching top-level window titles, so asset editor tabs opened by label can be captured more reliably
- Removed the standalone
inspect-uassetskill prompt; offline.uassetinspection remains available as a command and as part oftest-tools
- Clarified
inspect-uassetanddiff-uassethelp text, skill metadata, and README wording: they operate on local.uassetfiles offline, with best support currently for Blueprint assets rather than Blueprint-only support
open-assetno longer dereferences a staleUWorldpointer afterLoadLevel(), fixing the access violation that could occur when loading World assets through the level editor path
inspect-uassetanddiff-uassetnow parse UE 5.4+ package headers (LegacyFileVersion -8/-9), so offline Blueprint inspection works on modern UE 5.4-5.7 assets instead of failing on the package summary
- Public repo
README.mdandCHANGELOG.mdare no longer stripped of newlines during sync, so the GitHub project page and PyPI description render correctly again (regression introduced in 1.20.0)
get-config-valueandvalidate-config-keynow share the same resolved section-entry lookup path, allowing bridge reads for keys such asr.Bloomthat may not round-trip throughGConfig->GetString()test-toolsnow validatesset-config-valueagainst the bridge tool's actual{"status":"ok"}response payload instead of expecting a nonexistentsuccessfield
test-toolsnow resolves offline.uassetpaths fromget-project-info.project_directoryand the asset path created earlier in the run, soinspect-uassetanddiff-uassetexercise the saved asset directlytest-toolsnow seeds a project config key before runningconfig get --search, so the offline config search path is exercised against known on-disk input
- Bridge config tools now use public
FConfigCacheInisection accessors instead of the unavailableGetSectionPrivate()helper, fixing UE builds that failed when compilingget-config-valueandvalidate-config-key
test-toolsskill now exercises the new config bridge tools and CLI config subcommands during live integration runs
- Unified
configcommand group for Unreal configuration inspection and editing:config tree,config get,config set,config diff, andconfig audit - Offline config parsing and diff support for UE INI,
BuildConfiguration.xml, and.uproject/.upluginJSON files - Runtime bridge config helpers:
get-config-value,set-config-value, andvalidate-config-key
- MCP now exposes the nested client-side
configtool cleanly via schema extraction and command dispatch
inspect-uassetcommand for offline inspection of local Blueprint.uassetfiles without a running Unreal Editordiff-uassetcommand for offline file-to-file diff of extracted Blueprint metadata sectionsinspect-uassetskill for LLM workflows that need conservative offline package inspection
test-toolsskill now exercisesinspect-uassetanddiff-uassetagainst a real on-disk Blueprint generated during the integration run
- Offline Blueprint summary extraction now resolves
parent_class_pathfrom the imported object's outer package chain instead of reporting incorrect/Script/CoreUObject.*paths for common engine parents - Offline Blueprint summary extraction now parses
blueprint_typeinstead of hardcodingNormal inspect-uassetnow fails fast on non-Blueprint packages instead of returning a misleading successfulUnknownsummary
- CLI argument validation:
capture-screenshot --regionandadd-graph-node --positionnow fail with a clear comma-separated-integer error instead of surfacing a raw PythonValueError - CLI argument validation:
query-mpc --valuenow reports a friendly numeric/JSON parsing error for malformed scalar input instead of crashing with a rawValueError
report-bugandrequest-feature:gh auth tokenlookup now times out cleanly instead of hanging indefinitely when GitHub CLI credentials are unavailable or blocked- MCP schema:
set-propertynow accepts any JSON value forvalue, matching the CLI and bridge behavior for scalar, array, and object payloads - MCP server:
add-graph-nodenow maps--no-auto-positioncorrectly, surfaces normalizednode_guidvalues for special node creation cases, and returns cleaner client-side command errors - MCP server:
pie-session startnow forwards tool-level timeout to the HTTP request and attempts a best-effort stop after startup timeouts to avoid leaving PIE half-initialized test-tools: teardown now treatsdelete-assetreportingAsset not foundas an idempotent success during cleanup, avoiding false failures after restore flows that already removed the temporary test assettest-tools:insights-capture stopnow treats already-idle or auto-stopped traces as a pass in both CLI and MCP paths, avoiding false failures when trace state changes between status polling and stoptest-tools: MCP all-mode now readsmcp-servestdout as UTF-8 with replacement semantics, avoiding Windowscp949decode crashes on non-ASCII outputtest-tools: setup now retries the firstopen-assetcall for a freshly created temporary World asset, reducing false setup failures while the editor finishes registering the new leveltest-tools: restore flow now saves the temporary test level before switching back, avoiding modal unsaved-level prompts that can block or crash automationopen-asset: World assets now load through the level editor path with extra GC passes, reducing map-switch crashes and stale-world failures during automationpie-session: start/stop now return request-based transitional states instead of blocking the request thread while UE finishes entering or leaving PIEinsights-capture: trace start now uses the documented filename-first console command form and stop/status treat already-idle traces consistently, reducing false stop failures in automation
- Plugin: bridge HTTP listener dropped after PIE startup —
USoftUEBridgeSubsystemnow registers a 10-secondFTSTickerthat callsStartAllListeners()to revive listeners silently stopped by PIE world initialization; subsequent bridge calls no longer fail with WinError 10054 after a PIE session test-toolsskill: teardown script calledAssetEditorSubsystem.close_all_asset_editors()which does not exist in UE 5.7 — replaced with agetattrprobe that triesclose_all_asset_editorsandclose_all_editorsin order;SystemLibrary.collect_garbage()now always runs regardless of whether an editor-close method is found
- MCP:
set-console-varrejected integer/float values — MCP schema now declaresvalueasanytype so pydantic accepts strings, ints, and floats - MCP:
batch-delete-actorsrejected list foractorsfield — schema now declaresactorsas array type; same fix applied tobatch-spawn-actors.actors,batch-modify-actors.modifications,spawn-actor.location/rotation,add-graph-node.position, andset-node-position.positions - MCP:
capture-screenshotrequiredmodefield — schema now makesmodeoptional with default"viewport" - MCP:
report-bughung indefinitely via MCP transport —gh auth tokensubprocess was inheriting the MCP stdin pipe and blocking; fixed withstdin=subprocess.DEVNULL - MCP:
test-tools --mode mcpqueue desync after client-side timeout —MCPClient._recvnow matches responses by ID, discarding stale responses from previous timed-out calls
pie-session starttimed out after 30 s even when a longer timeout was requested — the tool's server-sideWaitForPIEReadyhas its owntimeoutargument (default 30 s); the test now passes it explicitly so PIE gets the full allotted timeopen-assetfor World assets crashed the editor with "World Memory Leaks: 1 leaked objects" (triggered by Niagara holding a world reference during level switch) — fatal error is now suppressed via a customFOutputDeviceErrordevice for the duration ofOpenEditorForAsset, allowing the world switch to complete and Niagara to update its reference normally on the next tickmodify-interface: interface class paths like/Game/Path/BPI_Namenow resolve correctly; the tool tries the_C-suffixed class path and BlueprintGeneratedClassfallback when the initial load fails
test-toolsskill v2.0 —--mode cli(default, direct HTTP),--mode mcp(viamcp-servestdio),--mode all(runs both and combines report); MCP mode exercises the full MCP server layer without any LLM in the loopcall_tool()now accepts an optionaltimeoutparameter to override the per-request HTTP timeout (falls back toSOFT_UE_BRIDGE_TIMEOUTenv var or 30 s)- Plugin: Windows Structured Exception handling (SEH) in the bridge root — unhandled C++ exceptions from tools are caught and returned as JSON-RPC errors instead of crashing the editor
mcp-serve:report-bug(and other client-side tools) crashed withNameError: name 'io' is not defined— added missingimport iotomcp_server.pymcp-serve:query-assetwithasset_classfilter returned 0 results — MCP was forwarding the parameter asasset_classbut the bridge expectsclass; added per-tool parameter rename mappingcapture-screenshot --mode windowfailed via MCP with "No active editor window found" — the editor is never the foreground window when an agent calls via mcp-serve; now usesIMainFrameModule::GetParentWindow()with fallback to the active window
create-assetnow supportsWorldasset type — create new levels from the CLI:soft-ue-cli create-asset /Game/Maps/LV_New Worldcreate-asset --template PATH— duplicate an existing level instead of creating a blank one
mcp-serve: tool arguments were silently dropped — MCP client now receives the correct JSON schema for every tool and arguments are forwarded to the bridge as expectedmcp-serve:class-hierarchyandproject-inforouted to wrong bridge tool name, always returning "Unknown tool"mcp-serve:status,check-setup,setup,report-bug,request-feature,submit-testimonialreturned "Unknown tool" because they are client-side operations; they now run their existing handlers directly and return output to the MCP client
submit-testimonialnow posts via REST API instead of GitHub Discussions GraphQL
- Architecture diagram missing on GitHub — use relative path instead of absolute URL to private repo
- Python version badge showing "missing" on PyPI — added Python 3.10–3.13 classifiers to pyproject.toml
set-viewport-cameracommand — programmatically control the editor viewport camera with presets (top, bottom, front, back, left, right, perspective), custom location/rotation, and orthographic zoomlevel-from-imageskill — populate a UE level from a reference image using existing project assets, with autonomous visual feedback loop and human-in-the-loop refinement- Batch actor tool reference section in level-from-image skill documentation
- Skills frontmatter parser now skips nested YAML lines, correctly displaying skill descriptions
submit-testimonialcommand — share feedback via GitHub Discussions with auto-collected metadata (CLI version, usage streak, top tools), consent prompt before posting- Bug report nudge — unexpected errors now suggest filing a bug with a pre-filled
report-bugcommand - Daily usage streak tracking — after 3+ consecutive days of use, a one-time testimonial nudge appears
- MCP server returns structured
bug_report_hintandtestimonial_nudgepayloads for LLM agents - GitHub Discussions integration via GraphQL API for testimonial posting
call_tool()now raisesBridgeErrorwith error classification (expected vs unexpected) instead of callingsys.exit(1)directly — enables richer error handling downstream
mcp-servecommand — run soft-ue-cli as an MCP server over stdio, exposing 60+ commands as MCP tools and skills as MCP prompts- Compatible with Claude Desktop, Claude Code, Cursor, Windsurf, and other MCP clients
- Install with:
pip install soft-ue-cli[mcp]
skills listcommand — discover LLM workflow prompts shipped with the CLIskills get <name>command — retrieve a skill's full content for LLM consumptionblueprint-to-cppskill — instructs an LLM to generate C++.h/.cppfrom Blueprint assets using Layer 1 (class scaffolding) and Layer 2 (graph logic translation with 100+ node type mappings)
compile-materialnow usesGMaxRHIShaderPlatforminstead of deprecatedGMaxRHIFeatureLevel(UE 5.7 compatibility)
query-level --class-filternow matches inherited classes (e.g.--class-filter Characterfinds all Character subclasses)
compile-materialcommand — trigger recompilation of Material, MaterialInstance, or MaterialFunction assets from the CLI- MSYS/Git Bash path mangling detection — automatically reverses
/Game/→C:/Program Files/Git/Game/conversion for asset paths
get-logsand all output commands no longer crash withUnicodeEncodeErroron Korean Windows (cp949 locale)
query-materialnow supports MaterialFunction assets — inspect expression graphs inside material functions
create-asset AnimBlueprint --skeletonnow correctly creates an AnimBlueprint instead of a generic Actor Blueprint (subclass routing order fix)add-graph-node --properties '{"Layer":"X"}'on LinkedAnimLayer now sets InterfaceGuid for proper layer function binding and pin reconstruction
set-node-propertycommand — set properties on graph nodes by GUID after creation, supporting UPROPERTY members, inner anim node structs, and pin defaultsquery-mpccommand — read and write Material Parameter Collection scalar/vector values (both default and runtime)save-asset --checkout— auto-checkout from source control (Perforce, etc.) before savingquery-material --parent-chain— walk full MaterialInstance inheritance chain from leaf to root Materialquery-level --include-foliage— list FoliageType instances with counts from InstancedFoliageActorsquery-level --include-grass— list LandscapeProxy actors with component counts and materialscreate-asset AnimLayerInterface(orALI) — creates a Blueprint-compatible AnimLayerInterface using BPTYPE_Interface factoryquery-assetstructured output forULandscapeGrassType— parses GrassVarieties into per-variety JSON with mesh, density, culling, scaling fields
add-graph-node --properties '{"Layer":"X"}'now correctly configures LinkedAnimLayer nodes by setting Interface and Layer on the inner FAnimNode struct and reconstructing pinsadd-graph-node --properties '{"Alpha":0.08}'now sets pin default values (Alpha, BlendWeight, etc.) when properties aren't found via reflectioncreate-assetphantom registry deadlock resolved — force-rescans the package path to clear stale entries before creation
save-assetcommand — save modified assets to disk after mutations, preventing data loss from editor crashescompile-blueprintcommand — trigger Blueprint/AnimBlueprint compilation and return status (success, warnings, errors)insert-graph-nodecommand — atomically insert a new node between two connected nodes with auto pin detection, single undo transaction, and rollback on failuredisconnect-graph-pin --target-node --target-pin— disconnect a specific pin-to-pin connection while preserving other wires (without these flags, existing break-all behavior is unchanged)
get-propertycommand — read UPROPERTY values from runtime actors/components using UE reflection with dot notation for component propertiesquery-level --include-properties— inspect actor and component property values with optional--property-filterwildcard filteringcreate-asset --skeleton— dedicated flag for specifying skeleton asset path when creating AnimBlueprintsquery-blueprint-graphnow returns interface implementation graphs (type"interface") in addition to event, function, and macro graphs
- Phantom asset handling:
create-assetanddelete-assetnow correctly detect and clean up phantom assets (registry entry with no loadable object) modify-interface addnow auto-generates anim layer function graphs with Root and LinkedInputPose nodes when adding AnimLayerInterface to AnimBlueprintsadd-graph-nodeproperties now correctly resolve through innerNodestruct for animation graph nodes (e.g. AnimGraphNode_SpringBone BoneToModify, SpringStiffness)add-graph-nodenow returnsproperty_warningsin JSON response instead of silently ignoring invalid propertiesadd-graph-node AnimGraphNode_LinkedAnimLayerno longer crashes; pins are reconstructed after properties are set
- Updated supported UE version to 5.7 (active development target)
- Plugin now auto-dismisses blocking UE editor dialogs during bridge tool execution, preventing game thread hangs and timeouts
- CLI timeout error message now hints at modal dialogs as a possible cause
add-graph-nodehelp text documentsAnimLayerFunctionusage for creating anim layer functions on AnimLayerInterface assets
trigger-live-codingnow waits for compilation by default and returns the actual result (success, failure, cancelled). Use--no-waitfor fire-and-forget.
build-and-relaunch --wait— monitors build progress, waits for the editor to come back up, and returns build result with duration. On failure, returns compiler errors directly.
inspect-runtime-widgetscommand — inspect live UMG widget geometry during PIE sessions- Query by widget name or class with keyword search
- Returns computed geometry (absolute position, local size, accumulated render transform)
- Includes slot properties and render settings
- Optional
--include-slateflag for underlying Slate widget data - Supports multiple PIE instances via
--pie-index
- UE5 build error: replaced deprecated
FAssetRegistryModulewithIAssetRegistry::GetChecked()in ModifyInterfaceTool - UE5 build error: fixed
AddFunctionGraphtemplate deduction failure in AddGraphNodeTool
modify-interfacecommand — add or remove implemented interfaces on Blueprints and AnimBlueprintsadd-graph-node AnimLayerFunction— create anim layer function graphs on AnimLayerInterface assets with Root and Input Pose nodesquery-blueprint --include interfaces— list implemented interfaces on a Blueprint
.gitignorebuild/rule no longer excludesTools/Build/plugin source files
- Initial release with 50+ commands for controlling Unreal Engine 5
- Actor spawning, Blueprint editing, material inspection, PIE control
- Screenshot capture, performance profiling, Python scripting
- StateTree editing, widget inspection, DataTable editing
- Build and Live Coding support
- Automatic server discovery via
.soft-ue-bridge/instance.json