Install any skill in seconds. Free to start, no credit card required.
Get Started Free →besty0728/unity-skills
Automate the Unity Editor through a local REST API — create and edit scripts, build scenes and prefabs, manage assets/materials/lighting, run tests, and drive hundreds of Editor operations across modules.
Passed 20 of 24 test cases with the skill, and 5 of 24 without it.
and 22 more in the full report
15 fixed5 passed either way4 still failing0 broke1 errored
Tokens, turns and time describe resource use, not a dollar price.
One of 15 test cases the skill fixed. Same model, same prompt, with and without the skill.
A REST command to port 8090 failed with 409 INSTANCE_MISMATCH, indicating project 'MyGame' is on port 8092. What exact HTTP request updates 'Cube' on port 8092?
| Checked | Without skill | With skill |
|---|---|---|
| Targets port 8092 for the updated request. | Passed | Passed |
| Includes expectProject=MyGame in the request query string. | Missed | Passed |
The instructions your model reads when the skill loads.
Docs are English-only: match requests to modules by meaning in any language, and always reply in the user's language.
surfaceProfile is guide: name menus and Inspector fields per SKILL_GUIDE.md.Ports 8090–8100 go first come, first served: add ?expectProject=<project> (productName or folder name) or the exact ?expectInstance=<instanceId> to every write. A different Editor answers 409 INSTANCE_MISMATCH and runs nothing.
GET /health (exempt from the check) has currentMode, surfaceProfile, dryRunPolicy, instanceId: probe it once in the same shell command as your first request, adding no other call, then only after a refused write, 409, 503/refused connection or odd mode. bypass and auto run writes directly, but under auto confirm ≥5-object batches, prefab apply, scene-level, asset-overwriting or irreversible changes with the user first (probe alone before those); approval gates FullAuto writes behind single-shot grants (permanent: the user's Allowlist).
During a domain reload the port answers 503 or refuses for seconds while its ~/.unity_skills/registry.json entry reads reloading: retry it, never another instance.
Every skill is POST /skill/<name> with JSON args:
curl -s "http://localhost:<port>/skill/gameobject_set_transform?expectProject=<project>" -d '{"name":"Crate","posX":4,"posY":1.5,"posZ":-2}'
Target objects by name or the exact path/instanceId (likewise parentPath, childPath); skip lookup calls — a wrong name fails the call and returns candidates.
| Call |
|---|
gameobject_create {name, primitiveType, parentName, x,y,z, rotX,rotY,rotZ, scaleX,scaleY,scaleZ, space} — x/y/z, rot local to the parent unless space:"world"; scale local |
gameobject_set_transform {name, posX,posY,posZ, rotX,rotY,rotZ, scaleX,scaleY,scaleZ, localPosX,localPosY,localPosZ} — pos, rot world; scale, localPos local; omitted axes kept |
gameobject_find {name, useRegex, component} · gameobject_get_info {name} |
gameobject_rename {name, newName} · gameobject_duplicate {name} |
gameobject_set_parent {childName, parentName} · gameobject_set_active {name, active} |
gameobject_delete {name} (dryRun first) |
component_add {name, componentType} |
component_set_property {name, componentType, propertyName, value} — vectors, colours "1,2,3"; references referenceName/referencePath/assetPath |
component_get_properties {name, componentType} |
material_assign {name, materialPath} |
light_set_properties {name, r,g,b, intensity, range, spotAngle, shadows} |
script_create {scriptName, folder, content} — full source; dryRun first; wait below |
scene_save {} (dryRun first) |
test cases passed, vs 5 / 24 without
More skills from the same source and nearby in the registry, with their headline benchmark lift.