Reflection and asset workflows
ClaudusBridge offers two different ways to inspect assets: engine-backed reflection through the project's backend, and a separate offline package utility. Choose the path based on the operation and supported format.
Engine-backed reflection
Describe ClaudusBridgeEditor.ClaudusBridgeReflectionToolset before calling it. This toolset loads and inspects Unreal objects, reflects supported properties/functions, creates objects, manages explicit transactions and saves packages.
| Tool | Purpose |
|---|---|
ListClasses, DescribeClass | Discover reflected class information. |
DumpObject, GetProperty, ListSubobjects | Inspect an object and its reflected state. |
SetProperty | Change a supported property path through Unreal. |
Invoke | Invoke a supported reflected function with marshalled arguments. |
CreateObject | Create a concrete object in a valid outer. |
SavePackages | Persist the intended packages using Unreal serializers. |
Discovery applies to the actual runtime. A class can be abstract, a function can require a world or editor state, and a property can need domain-specific handling. Reflection does not expose arbitrary unreflected C++ functions or guarantee that generic edits correctly maintain every graph's invariants. Use specialized Blueprint, material, Niagara and widget tools where their semantics matter.
A create, edit, save and reload workflow
- Inspect the class and existing package; use a scratch asset when trying an unfamiliar operation.
- Acquire the relevant package lease with a stable agent identity.
- Call
CreateObjectwithclassPath,outerPath,nameandbTransient. An asset needs a valid persistent package outer; transient objects are not a disk artifact. - Inspect the created object, then use
SetPropertywith the observedobjectPath,propertyPathand a correctly encodedvalueJson. - Save the intended package with
SavePackagesand inspect both the transport response and tool result. - Reload in a fresh backend/editor context and read the property again. Then verify the visual or gameplay result in its required runtime.
For example, a property call's argument file has this shape; replace its path/property with values confirmed from the object:
{
"objectPath": "/Game/Examples/DA_Demo.DA_Demo",
"propertyPath": "ExampleValue",
"valueJson": "42.5",
"bTransact": true,
"bNotify": true
}
A save argument file uses a JSON array encoded as a string:
{
"packagePathsJson": "[\"/Game/Examples/DA_Demo\"]",
"bOnlyDirty": true
}
Pass these files with '@file.json' in PowerShell to claudus call ...; avoid manually nesting shell escapes. These field shapes are examples, not a claim that every data asset defines ExampleValue.
Finding project assets
Use the live asset catalog through ClaudusBridgeEditor.ClaudusBridgeAssetToolset.FindAssets, for example with className, searchPath and bRecursive, after confirming its schema. This requires an Unreal backend even if its GUI is closed. There is no standalone CLI disk-catalog command that replaces toolsets, describe or the engine Asset Registry.
Offline package utility
claudus asset runs the separate ClaudusAssetTool converter without starting Unreal. It supports non-cooked .uasset/.umap inputs understood by that converter:
claudus.exe asset check "C:\Work\Scratch\Example.uasset" --project-path "C:\Projects\MyProject\MyProject.uproject"
claudus.exe asset type "C:\Work\Scratch\Example.uasset" --project-path "C:\Projects\MyProject\MyProject.uproject"
claudus.exe asset to-json "C:\Work\Scratch\Example.uasset" -o "C:\Work\Scratch\Example.json" --project-path "C:\Projects\MyProject\MyProject.uproject"
from-json rebuilds an output package, diff writes original/rebuilt bytes for inspection, and raw forwards converter arguments. Read help asset first. The converter and its data files must be installed, together with a compatible .NET runtime; --tool can select its location. Automatic discovery is platform-dependent—proxy availability alone does not prove the separate utility is configured.
Start with check on the original and work on a copy. A byte-identical round trip validates that input's preservation, not complete semantic understanding of every payload. Unknown data may remain opaque. Do not overwrite a package loaded by any editor/backend, and do not use an offline rewrite to bypass another agent's active work. Validate any edited package by loading it in the matching engine.