prowlengine/prowl/prowl-cli
- community
Checking that the SKILL.md file is still in the repository.
Drive the open Prowl editor from the terminal with the prowl CLI. Use for building or changing scenes, creating and editing assets, writing and compiling scripts, entering play mode to test, simulating input, taking screenshots, and building the game.
Install
npx vskill@latest install prowlengine/prowl/prowl-cliSKILL.md
Driving the Prowl editor
The editor must be open with this project. Run the CLI from the project root (from a subfolder use the path to it, such as ../../Library/prowl):
- bash:
Library/prowl <verb> ... - cmd or PowerShell:
Library\prowl.cmd <verb> ...
The verbs are status, command, eval and eval_file. Every command in this guide runs as `Library/prowl command <name> ...`, for example Library/prowl command tree --depth 2. Library/prowl command on its own lists every command with its arguments and defaults.
Arguments are positional in declared order, or --name value, or --name=value. A bool flag needs no value. Everything after -- is positional. An argument that is just - is read from stdin, for example command set /Player:Stats --values - < stats.json. Add --json for raw JSON and --timeout <seconds> for long commands. Exit code 0 is success, 1 is an error with the reason on stderr, 130 is cancelled. Logs written while a command ran come back on stderr too.
Refs
Every command addresses things the same way:
| Ref | Means | |
|---|---|---|
/Player/Camera | GameObject by hierarchy path. /Enemy[1] picks the second of two siblings named Enemy | |
#3f2a... | Scene object or asset by GUID. Results always include the id | |
/Player:Rigidbody3D | A component on that object. :Type[1] picks the second of that type | |
@selection | The selected GameObject, or all selected ones where a list is accepted | |
Models/Gun.fbx | Asset path, relative to the Assets folder | |
Models/Gun.fbx#Fire | Sub asset inside a file, such as an animation clip or mesh in a model |
Results describe objects as {id, path, name}, components as {id, ref, type}, assets as {guid, path, type}. Reuse the path or id from a result in the next command.
Workflow
- Orient:
status,tree --depth 2,logs --level warning. - Look up the API before writing code:
api --search Rigidbody,api --type CharacterController,api --type Transform --member Rotate,--inheritedto include base classes. Prowl is not Unity, so do not guess signatures. - Write scripts as
.csfiles underAssets(orscript Scripts/Gun --template Component), thencompile. It waits for the hot reload and returns errors with file, line and column. Fix them and compile again untilokis true. - Build the scene with the commands below, then
scene --action save(orscene --action saveas --path Scenes/Level.scene). - Check your work:
play --action start,input,play --action wait --seconds 2, read state withget,logs --level error,screenshot, thenplay --action stop.
Scene, component, field, material, prefab and graph edits are one undo step each, and undo and undo --redo step through them outside play mode. File operations (asset create, copy, move, delete, import, importer, script) and eval are not undoable, and asset delete is permanent.
Scenes and objects
scene --action newmakes a scene with a Main Camera (no post processing profile), a Directional Light, and Floor, Cube and Cube (1), none of which have colliders. Delete what you do not need.go create --name Gun --parent /Player --position '[0,1,0]' --components Rigidbody3D,BoxCollider. Quote JSON arrays, unquoted brackets are a shell glob.go create --prefab Models/Gun.fbx --parent /Player/Handinstantiates a prefab or modelgo rename|delete|duplicate|active|transform|parent --target <ref> .... Rotation is euler degrees. Positions are local unless--world.go active --target /X --active falsedeactivates.component add /Player --type CharacterController --values '{"Height": 1.8}'component remove /Player:BoxCollider,component list /Playerget /Player:CharacterControllershows every saved field and its current value. Alwaysgetfirst to learn the real field names.set /Player:CharacterController Height 1.8, or several at once with--values '{"Height": 1.8, "Radius": 0.4}'- Field paths go inside:
Settings.Radius,Points[2],Materials[0]. Vectors and colors are arrays[1, 2, 3]. - A string sets a reference:
set /Gun:Weapon Muzzle /Gun/Muzzlefor a scene object,set /Cube:MeshRenderer "Materials[0]" Materials/Red.matfor an asset. menu --list --path GameObjectlists editor menu items.menu --path "GameObject/3D Object/Cube"runs one and returns the new selection. Without--context, create items parent the new object under the current selection, so runselectwith no refs first to create at the root.GameObject/3D Object/*primitives have only a MeshRenderer and no collider, so add one withcomponent add.--context /Canvasruns it on an object, for examplemenu --path "GameObject/UI/Button" --context /Canvas.select /Player --frameselects and frames an object so the person watching can see it.
Assets
asset find --type AnimationClip --query Run,asset info --path Models/Gun.fbx(shows sub assets and dependencies)asset create --path Materials/Metal --type Material(asset typeslists creatable types, plusFolder)- After writing files into Assets yourself:
asset import --path <file>orasset refresh asset copy --path Materials/Metal.mat --to Materials/Red.matcopies a file, folder or sub asset (Models/Gun.fbx#Metal) under a fresh GUID with the same import settings. Use it rather than copying a file together with its.meta, which reuses the original's GUID.asset move --path A.mat --to B.mat,asset delete --path A.mat --confirm,asset reimport --path ...material Materials/Metal.matlists shader properties.--values '{"_MainColor": [1, 0, 0], "_Roughness": 0.3, "_MainTex": "Textures/Metal.png"}'sets them.--shader <ref>swaps the shader.importer Models/Gun.fbxshows import settings and sub assets.--valuesmerges keys (dots for nested keys) and reimports. Values keep their JSON type, so pass numbers as numbers:--values '{"rigType": 2}'(0 none, 1 generic, 2 humanoid). Animation import settings are in the prowl-animation skill.prefab create /Gun --path Prefabs/Gun, thenprefab apply|revert|unpack|overrides --target <instance>.overrideslists changed values and additions (components and objects the instance has and the prefab does not).applywrites both into the prefab.
Animation graphs are built with the graph command. See the prowl-animation skill.
Play mode and testing
play --action start|stop|pause|resume|step|wait|status. Each returns the errors logged meanwhile.input --action key --keys W,ShiftLeft --seconds 1holds keys,input --action mouse --button 0,input --action mouse --position '[640,360]'clicks at that point in game view pixels, as measured on a game screenshot, which presses UI buttons there,input --action look --delta '[5,0]' --seconds 0.5. Key names are listed in the prowl-scenes skill.screenshot --view sceneor--view gamesaves a PNG and returns its path. Open the view first if needed withmenu --path Window/General/Game.logs --since <nextSeq>returns only what is new since the last call.snapshot --action capture,snapshot_dumpandsnapshot_replayinspect how a frame was rendered and write images of pass outputs. See the prowl-profiler skill.
Building
build --out Builds/Windows [--run] --timeout 1800 builds with the selected pipeline and waits. Each build goes into a new folder under --out named after the project, numbered when one exists already, such as Builds/Windows/Game (1), so the last build stays runnable. The result's output is the folder. Without a larger --timeout the CLI gives up after 120 seconds while the build keeps running. The same goes for a first compile that restores NuGet packages and for long play --action wait calls. The build scene list must not be empty (see the eval recipes below). compile defines PROWL_EDITOR for every script, so editor only code that is not guarded with #if PROWL_EDITOR only fails in a build.
eval
eval '<C#>' runs code on the editor main thread and returns the value. Statements with return, leading using lines and await work. For multi line code pipe it in with eval -. Use it for anything no command covers. It can be turned off in Editor Preferences. Changes made with eval are not undoable and do not mark the scene dirty, so run scene --action save yourself afterwards. Recipes for things with no command:
Gotchas
- Scene changes made in play mode are lost when play stops, and the CLI warns once per play session. Asset edits (
material,seton an asset,graph,importer,asset) are saved to disk at once and stay. Stop play mode before making lasting scene edits. - Entering or leaving play mode, every
compile, and opening or creating a scene clear the undo history. scene --action openrefuses to drop unsaved changes unless--force. Save first.- A new script type exists only after
compilesucceeds. Add the component after that. - Shell quoting: in bash wrap JSON in single quotes. Windows PowerShell 5.1 strips double quotes from arguments, so escape each one as \" inside single quotes, for example
--values '{\"Height\": 1.8}', or pipe a here string intoeval -. PowerShell 7.3 and later pass single quoted JSON unchanged.
Security
- Security scanPassed, 90 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingProwl.Editor/Resources/Agent/Skills/prowl-cli/SKILL.md
Popularity
- 7-day trend score
- 0
Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/prowlengine/prowl/prowl-cli)