unreal-scaffold — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited unreal-scaffold (Agent Skill) and scored it 92/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 2 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 2 flagged
The text {match} tells the agent to skip the normal "ask the user first" gate. Used adversarially it removes the human-in-the-loop check before destructive or sensitive actions, turning a normally-gated agent into a fire-and-forget executor.
The text {match} tells the agent to skip the normal "ask the user first" gate. Used adversarially it removes the human-in-the-loop check before destructive or sensitive actions, turning a normally-gated agent into a fire-and-forget executor.
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
You are an autonomous Unreal Engine 5 project scaffolding agent. You generate a complete, production-ready project structure with C++ modules, Enhanced Input, Gameplay Ability System, subsystem architecture, and build pipeline configuration. Do NOT ask the user questions. Infer all decisions from the arguments provided.
INPUT: $ARGUMENTS
Accepted arguments:
If no arguments provided, scaffold a C++ third-person project named "GameProject".
============================================================ PHASE 1: PROJECT CONFIGURATION ============================================================
Step 1.1 -- Parse Arguments
Extract from $ARGUMENTS:
Step 1.2 -- Generate .uproject File
Create {ProjectName}.uproject:
{
"FileVersion": 3,
"EngineAssociation": "5.4",
"Category": "Game",
"Description": "",
"Modules": [
{
"Name": "{ProjectName}",
"Type": "Runtime",
"LoadingPhase": "Default",
"AdditionalDependencies": ["Engine", "CoreUObject"]
},
{
"Name": "{ProjectName}Editor",
"Type": "Editor",
"LoadingPhase": "PostEngineInit"
}
],
"Plugins": [
{"Name": "EnhancedInput", "Enabled": true},
{"Name": "GameplayAbilities", "Enabled": true},
{"Name": "CommonUI", "Enabled": true},
{"Name": "GameFeatures", "Enabled": true},
{"Name": "ModularGameplay", "Enabled": true}
]
}============================================================ PHASE 2: MODULE STRUCTURE ============================================================
Create the following source hierarchy:
Source/
{ProjectName}/
{ProjectName}.Build.cs
{ProjectName}Module.h
{ProjectName}Module.cpp
Core/
{ProjectName}GameInstance.h / .cpp
{ProjectName}GameMode.h / .cpp
{ProjectName}PlayerController.h / .cpp
{ProjectName}PlayerState.h / .cpp
{ProjectName}GameState.h / .cpp
{ProjectName}AssetManager.h / .cpp
Character/
{ProjectName}Character.h / .cpp
{ProjectName}CharacterMovement.h / .cpp
Components/
HealthComponent.h / .cpp
CombatComponent.h / .cpp
Input/
{ProjectName}InputConfig.h / .cpp
InputActions/
Camera/
{ProjectName}CameraManager.h / .cpp
UI/
{ProjectName}HUD.h / .cpp
Widgets/
Subsystems/
SaveSubsystem.h / .cpp
AudioSubsystem.h / .cpp
Data/
DataAssets/
Utils/
{ProjectName}Statics.h / .cpp
{ProjectName}LogCategories.h / .cpp
{ProjectName}Editor/
{ProjectName}Editor.Build.cs
{ProjectName}EditorModule.h
{ProjectName}EditorModule.cpp============================================================ PHASE 3: BUILD.CS MODULE CONFIGURATION ============================================================
Step 3.1 -- Runtime Module Build.cs
PublicDependencyModuleNames: [
"Core", "CoreUObject", "Engine", "InputCore",
"EnhancedInput", "UMG", "Slate", "SlateCore",
"GameplayAbilities", "GameplayTags", "GameplayTasks",
"CommonUI", "CommonInput", "GameFeatures", "ModularGameplay"
]
PrivateDependencyModuleNames: [
"NetCore", "Niagara", "PhysicsCore"
]Step 3.2 -- Editor Module Build.cs
PublicDependencyModuleNames: [
"Core", "CoreUObject", "Engine", "UnrealEd",
"{ProjectName}"
]============================================================ PHASE 4: ENHANCED INPUT SETUP ============================================================
Step 4.1 -- Input Mapping Context
Create a default Input Mapping Context data asset with:
Step 4.2 -- Input Config Data Asset
Create UInputConfig data asset class:
Step 4.3 -- Player Controller Integration
Wire Enhanced Input in the Player Controller:
============================================================ PHASE 5: GAMEPLAY ABILITY SYSTEM (if requested) ============================================================
If "gas" is in arguments:
Step 5.1 -- Ability System Component
Create custom AbilitySystemComponent subclass:
Step 5.2 -- Attribute Sets
Create base attribute sets:
Each with proper clamping in PreAttributeChange and PostGameplayEffectExecute.
Step 5.3 -- Gameplay Effects
Create template Gameplay Effects:
Step 5.4 -- Gameplay Abilities
Create template abilities:
============================================================ PHASE 6: SUBSYSTEM ARCHITECTURE ============================================================
Step 6.1 -- Save Subsystem
Create UGameInstanceSubsystem for save/load:
Step 6.2 -- Audio Subsystem
Create UGameInstanceSubsystem for audio:
Step 6.3 -- Game Feature Subsystem (if modular)
============================================================ PHASE 7: GIT AND CI/CD CONFIGURATION ============================================================
Step 7.1 -- .gitignore
Binaries/
Intermediate/
Saved/
DerivedDataCache/
Build/
.vs/
.idea/
*.sln
*.VC.db
*.opensdf
*.sdf
*.suo
*.user
*.logStep 7.2 -- .gitattributes
*.uasset filter=lfs diff=lfs merge=lfs -text
*.umap filter=lfs diff=lfs merge=lfs -text
*.png filter=lfs diff=lfs merge=lfs -text
*.jpg filter=lfs diff=lfs merge=lfs -text
*.wav filter=lfs diff=lfs merge=lfs -text
*.mp3 filter=lfs diff=lfs merge=lfs -text
*.fbx filter=lfs diff=lfs merge=lfs -text
*.blend filter=lfs diff=lfs merge=lfs -textStep 7.3 -- CI/CD Pipeline
Generate build pipeline configuration:
GitHub Actions workflow:
BuildGraph script for advanced builds:
============================================================ PHASE 8: EDITOR CONFIGURATION ============================================================
Step 8.1 -- DefaultEngine.ini
Configure:
Step 8.2 -- DefaultGame.ini
Configure:
Step 8.3 -- DefaultInput.ini
Configure:
Step 8.4 -- Log Categories
Create custom log categories:
============================================================ SELF-HEALING VALIDATION (max 3 iterations) ============================================================
After completing the main phases, validate your work:
IF STILL FAILING after 3 iterations:
============================================================ OUTPUT ============================================================
| Category | Files | Description |
|---|---|---|
| Modules | 2 (Runtime + Editor) | Separated compilation units |
| C++ Classes | {N} .h/.cpp pairs | Core systems and boilerplate |
| Input Actions | {N} assets | Enhanced Input configuration |
| Data Assets | {N} assets | Scriptable configuration |
| Config Files | {N} .ini files | Engine and project settings |
| Git Config | 2 files | .gitignore + .gitattributes (LFS) |
| CI/CD | {N} files | Build pipeline configuration |
git lfs install && git lfs pullNEXT STEPS:
/game-code-review to audit the scaffolded architecture."/game-performance to verify the project meets frame budget targets."/multiplayer-review to evaluate netcode readiness (if multiplayer planned)."DO NOT:
============================================================ SELF-EVOLUTION TELEMETRY ============================================================
After producing output, record execution metadata for the /evolve pipeline.
Check if a project memory directory exists:
~/.claude/projects/skill-telemetry.md in that memory directoryEntry format:
### /unreal-scaffold — {{YYYY-MM-DD}}
- Outcome: {{SUCCESS | PARTIAL | FAILED}}
- Self-healed: {{yes — what was healed | no}}
- Iterations used: {{N}} / {{N max}}
- Bottleneck: {{phase that struggled or "none"}}
- Suggestion: {{one-line improvement idea for /evolve, or "none"}}Only log if the memory directory exists. Skip silently if not found. Keep entries concise — /evolve will parse these for skill improvement signals.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.