In This Tutorial
1 Two Extension Surfaces
v3 gives you two ways to add commands without rebuilding the plugin:
- User commands — single Python files in
{Project}/Claudius/UserCommands/. Quick, project-local. Show up asuser.<filename>or under whatevercategoryyou tag. - Skill packs — named folders under
{Project}/Claudius/SkillPacks/with amanifest.jsonand one or more Python files. Sharable across projects, versioned, can be enabled/disabled as a unit.
Both are tracked in the same registry as built-in commands. There's no second-class status — a Python user command sits alongside a built-in C++ command in Claudius/CLAUDIUS.md, with the same enabled flag, description, and workflow tags.
2 User Python Commands
The simplest extension. Drop a .py file in {Project}/Claudius/UserCommands/ with an execute(params) function:
# @claudius category: level # @claudius description: Spawn a grid of cubes for blockout # @claudius workflow: level, level_design, debug import unreal def execute(params): rows = int(params.get("rows", 5)) cols = int(params.get("cols", 5)) spacing = float(params.get("spacing", 200.0)) sub = unreal.get_editor_subsystem(unreal.EditorActorSubsystem) spawned = [] for r in range(rows): for c in range(cols): loc = unreal.Vector(c * spacing, r * spacing, 100) actor = sub.spawn_actor_from_class(unreal.StaticMeshActor, loc) if actor: spawned.append(actor.get_actor_label()) return { "success": True, "message": f"Spawned {len(spawned)} cubes", "output": {"count": len(spawned), "actors": spawned}, }
Discover and use it:
# Re-scan the UserCommands folder { "category": "user", "command": "reload_commands", "parameters": {} } # Call it { "category": "level", "command": "spawn_grid", "parameters": { "rows": 3, "cols": 3 } }
You can also call config.create_command with {name, body, category, description, tags} — the plugin writes the @claudius headers, drops the file in UserCommands/, and reloads. This is the path Claude Code uses when you say "add a command that does X".
3 The @claudius Header Format
Three header lines control how a script appears in the registry:
# @claudius category: one identifier (no spaces). Default: "user" # Common values: level, blueprint, animation, sequencer # @claudius description: one-line summary for CLAUDIUS.md # @claudius workflow: comma-separated tags. Drives preset visibility. # Common: core, fps, level, animation, shot, debug
If you omit headers, the file still works — it just appears under the user category with a generic description. Headers are recommended for anything you want surfaced through presets or wanted to be tagged for the AI's discovery layer.
Function signature
Your execute function gets a single params dict (the JSON payload's parameters field) and must return a dict with these keys:
{
"success": True | False,
"message": "human-readable status",
"output": { ... # anything JSON-serializable }
}
4 Authoring a Skill Pack
A skill pack is a folder bundling multiple commands plus metadata. Folder layout:
{Project}/Claudius/SkillPacks/my_studio_helpers/
├── manifest.json
├── README.md # optional
├── ingest_props.py
├── render_shot.py
└── retarget_anims.py
manifest.json
{
"name": "my_studio_helpers",
"version": "1.0.0",
"author": "Your Name",
"description": "Studio-specific helpers for the X pipeline",
"workflow_tags": ["animation", "shot", "asset"],
"requires": {
"claudius_version": "3.0.0"
}
}
Pack-level vs. command-level tags
The pack's workflow_tags apply to every command in it, in addition to per-command headers. So if your pack is tagged shot, all its commands light up under any preset that enables the shot tag.
5 Installing & Sharing Packs
Once the folder is in {Project}/Claudius/SkillPacks/:
# Register the pack with the plugin { "category": "pack", "command": "install", "parameters": { "path": "Claudius/SkillPacks/my_studio_helpers" } } # Turn its commands on { "category": "pack", "command": "enable", "parameters": { "pack": "my_studio_helpers" } } # See what's installed { "category": "pack", "command": "list", "parameters": {} } # Remove it { "category": "pack", "command": "uninstall", "parameters": { "pack": "my_studio_helpers" } }
To share with your team: zip the pack folder and have them drop it into their SkillPacks/ directory. They run pack.install, optionally pack.enable, and they're set.
Skill pack folders are plain files (Python + JSON + Markdown). Commit them to your project repo or your studio's shared library — no binary state, no build artifacts.
6 Bundled Reference Packs
v3.1 ships two reference packs you can copy and learn from. Both live in Plugins/Claudius/Resources/SkillPacks/:
fps_starter
The minimal example. Two commands — spawn_target_dummies and spawn_weapon_pickup. Read these first to understand the pattern. Auto-installed in new projects when the FPS preset is loaded.
animation_studio
Designed for shot-based commercial work. Five commands:
batch_ingest_fbx— folder ingest with consistent destinationsetup_camera_rig— CineCameraActor with auto-aim and manual focusexploded_view— pivot-to-center outward push, returns from/to transformsrender_shot— MRQ queue with optional preset, falls back to PNG sequencematerial_swap_reveal— swap material on a list of static/skeletal mesh actors
Status: v0.1, useful as scaffolding, not yet production-hardened. See The Animation Studio Preset tutorial for end-to-end usage.