skill-creator
Guide for authoring user-defined custom UnitySkills skills inside your own Unity project - a [UnitySkill] C# method plus the conventions that let agents and the server discover and gate it
Install / Use
npx skills add Besty0728/Unity-Skills --skill skill-creatorInstalls into whichever agent you are using.
SKILL.md
Installable skill definition
Quality Score
Category
Content & MediaSupported Platforms
Tags
Our assessment of skill-creator
skill-creator scores 91/100 on our quality scale, 378th of 1,194 Content & Media skills we index (top 32%).
Its SKILL.md is 8.4 KB long, well organised into 10 sections with 2 code examples: a thorough specification that gives an agent plenty to work with.
With 1,781 GitHub stars, it is one of the more widely adopted skills in the catalogue.
Maintenance, license and trust
- The repository was last updated 30 days ago, so skill-creator is actively maintained.
- It is released under the MIT license, a permissive license that allows use, modification and commercial use with attribution.
- Its trust signals score 100/100, with no cautions. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.
skill-creator compared with similar skills
All 4 of these similar skills score higher than skill-creator; compare them before choosing.
| Skill | Score | Stars | Updated | Format |
|---|---|---|---|---|
| skill-creator (this skill)by Besty0728 | 91 | 1.8k | 30d ago | SKILL.md |
| siyuanby siyuan-note | 100 | 46.9k | today | MCP Server |
| algorithmic-artby anthropics | 100 | 177.9k | 32d ago | SKILL.md |
| pptxby anthropics | 100 | 177.9k | 32d ago | SKILL.md |
| designby nextlevelbuilder | 100 | 137.2k | 10d ago | SKILL.md |
Frequently asked questions
- How do I install skill-creator?
- Run
npx skills add Besty0728/Unity-Skills --skill skill-creator. The install tabs above show the steps for each supported agent. - Which AI agents does skill-creator work with?
- It is written for Universal, as a SKILL.md file. Other agents that read the same format can often use it too.
- Is skill-creator safe to use?
- It is MIT-licensed and scores 100/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
- Is skill-creator still maintained?
- The repository was last updated 30 days ago, so skill-creator is actively maintained.
Skill content
View source on GitHubname: skill-creator description: Guide for authoring user-defined custom UnitySkills skills inside your own Unity project - a [UnitySkill] C# method plus the conventions that let agents and the server discover and gate it
Before calling any skill in this module: if you are about to call a skill with parameters guessed from its name or description, STOP — read this file (or fetch its schema via
GET /skills/recommend?includeSchema=true) first. If you already have the parameter definitions from recommend/schema, you may proceed straight to dryRun.
Triggers
- Writing your own custom skill for your project
- Extending what agents can do in this specific Unity project
- Learning the [UnitySkill] metadata contract and discovery rules
- 为自己的工程编写自定义技能、扩展 Agent 在本工程可调用的能力
Skill Creator (advisory)
Audience: an agent (or developer) adding a custom skill to your own Unity project, not to the UnitySkills plugin source. A custom skill is a public static method marked [UnitySkill] compiled inside your project's Editor code; the server discovers it automatically — you never edit the plugin.
Where the C# must live
Put the file under Assets/ in an Editor-only location (e.g. Assets/Editor/UnitySkillsCustom/MySkills.cs, or any asmdef whose platform is Editor). The plugin's editor asmdef has autoReferenced: true, so Assembly-CSharp-Editor and ordinary user Editor asmdefs see the public API without adding references.
- Never put custom skill code inside the package (
Packages/com.besty.unity-skills/) orLibrary/PackageCache/: package updates and self-update replace that whole tree and your file is wiped. - The class need not be a MonoBehaviour; a plain
static classis fine.
Compile and discovery loop
After you write the C# (through script_create with the full content, or by any editor), Unity recompiles and performs a domain reload. The router re-runs TypeCache.GetMethodsWithAttribute<UnitySkillAttribute>() on the next request, so the new skill is registered automatically — there is no restart, no list to update.
Recommended agent flow:
- Check the name is free:
GET /skills?q=<prefix>or readGET /skills/schema?names=<cand>&wire=v2. script_create { scriptName, folder: "Assets/...", content: <full source> }— returns{ path, jobId, waitUrl }.- Wait for compile:
GET /jobs/<jobId>?wait=90(retry through the reload); inspectresultData.compilation.errors.script_get_compile_feedback(scriptPath)gives on-demand diagnostics. - Confirm registration:
GET /skills/schema?names=<your_skill>&wire=v2should return your skill with its description and parameters. - First real call with
?mode=dryRun.
Note: script_create is MayTriggerReload + high-risk — it is NeverInSemi: it needs Bypass mode or a panel Allowlist entry; ask the user rather than attempting a grant.
Naming rules (read this before choosing a name)
- Skill names are
snake_caseverbs likegameobject_create. A user custom skill must be prefixed (e.g.my_,acme_):my_apply_team_branding, notapply_branding. - On a name collision the later-registered declaration wins, and registration order is not guaranteed — a name that matches a built-in can shadow it (or be shadowed). The registry logs a warning naming both declaring types (
Skill name conflict: '<name>' declared by both <A> and <B>; using the latter.). Always check the name is free first. - Provide a matching
xxx_batchvariant when per-item looping makes sense.
The metadata contract (the attribute)
Fill [UnitySkill] truthfully — the router, permission gating, schema, and agents all read it:
[UnitySkill("my_greet",
"First sentence is what the agent reads; mention parameters.",
Category = SkillCategory.Uncategorized, // user skills cannot add enum values
Operation = SkillOperation.Query, // Query | Create | Modify | Delete | Execute | Analyze (combine with |)
Tags = new[] { "greeting", "demo" }, // improves /skills/recommend matching
Outputs = new[] { "message" }, // MUST be a subset of what you actually return
TracksWorkflow = false, MutatesScene = false, // honest risk flags (see below)
RiskLevel = "low")] // low | medium | high
public static object MyGreet(
[SkillParam("Who to greet")] string name = "world") { ... }
- Category:
SkillCategoryis a closed enum — custom skills cannot add values. Use the nearest existing category orUncategorized. A skill in GameObject/Component/Material/Scene/Sample is hidden under the Guide surface profile unless it is a pure read; any writer withMutatesScene = trueis hidden under NoSceneAuthoring. This is intentional: honest metadata, not a loophole to dodge. - Risk flags drive permission: a skill declaring
Operation.Delete,MayEnterPlayMode,MayTriggerReload, orRiskLevel = "high"is auto-classified NeverInSemi — it returnsMODE_FORBIDDENunder Approval and Auto and only runs in Bypass or via the panel Allowlist.Modedefaults toFullAuto; declareMode = SkillMode.SemiAutoonly for a pure read with zero side effects. Fill these truthfully or your skill is gated wrong. - Outputs: every entry must be a key the method actually returns; the schema contract tests check this.
Writing the method body (public API only)
Only the public surface is available to project code. Use:
Validate.Required(x, "x")— returns an error object to return early:if (Validate.Required(x, "x") is object err) return err;GameObjectFinder.FindOrError(name, instanceId, path)— neverGameObject.Find.SkillErrorResponse.Build(SkillErrorCode.X, message, ...)for business errors (dothrowonly for truly unknown framework errors).SkillErrorCodeExtensionsis internal — do not try to call it.- Writers that mutate scene state should register
Undoand callWorkflowManager.SnapshotXxx(...)whenTracksWorkflow = true; batch withBatchExecutor.Execute<TItem>(items, perItem, idFn). - Return a structured object (anonymous or a DTO) — it is serialized with
SkillsCommon.JsonSettings.
A complete minimal example:
using UnitySkills;
public static class MyCustomSkills
{
[UnitySkill("my_greet", "Return a greeting for a name.",
Operation = SkillOperation.Query,
Tags = new[] { "greeting" }, Outputs = new[] { "message" },
MutatesScene = false, RiskLevel = "low")]
public static object MyGreet([SkillParam("Who to greet")] string name = "world")
{
if (Validate.Required(name, "name") is object err) return err;
return new { message = $"Hello, {name}!" };
}
}
How agents find it (no doc file required)
Agents do not read a markdown file to call your skill — they discover it through the same schema-first path used for built-ins:
GET /skills/recommend?intent=<words>&includeSchema=true&topN=3&wire=v2— matches on name, Tags, and Description.GET /skills/schema?names=my_greet&wire=v2— full parameter schema (with each[SkillParam]note) when the name is known.
So the quality of Description, Tags, and every [SkillParam] is the documentation. Keep the first description sentence specific and parameter-aware.
Optional long-form docs (where NOT to put them)
If a custom skill needs prose beyond the schema, put markdown in a file inside your project (e.g. Assets/UnitySkillsCustom/README.md) and point to it from the skill's Description, or as a sibling agent-skill folder outside the managed install tree (e.g. <project>/.claude/skills/my-tool/SKILL.md).
- Never write docs inside the installed
unity-skillsskill folder (e.g..claude/skills/unity-skills/skills/my-mod/SKILL.md): install/update/auto-sync overwrites that tree, and Uninstall deletes the whole install directory, destroying anything inside it.
Guardrails
- Do not add
SkillCategoryenum values,SkillRouterentries, or route-table rows — discovery is automatic. - Do not reference
internalplugin members (only public API compiles from your project). - Do not shadow built-in names; always prefix.
- Do not put C# or docs inside the managed package or install tree (update/uninstall removes them).
- Do not fudge
MutatesScene/ risk flags to bypass gating; the surface profiles and permission modes depend on them being true.
Mode: Documentation only — no REST skills to gate; load freely under any operating mode (Approval / Auto / Bypass).
Related Skills
siyuan
46.9kAn open-source, privacy-first, self-hosted knowledge workspace where humans and AI agents work together 开源、隐私优先、自托管的知识工作空间,让人与智能体在此协作
algorithmic-art
177.9kCreating algorithmic art using p5.js with seeded randomness and interactive parameter exploration. Use this when users request creating art using code, generative art, algorithmic art, flow fields, or particle systems.
pptx
177.9kUse this skill any time a .pptx or .potx file is involved in any way — as input, output, or both. This includes: creating slide decks, pitch decks, or presentations; reading, parsing, or extracting text from any .pptx or .potx file (even if the extracted content will be used elsewhere, like in an em…
design
137.2kComprehensive design skill: brand identity, design tokens, UI styling, logo generation (55 styles, Gemini, Atlas Cloud, or MuAPI AI), corporate identity program (50 deliverables, CIP mockups), HTML presentations (Chart.js), banner design (22 styles, social/ads/web/print), icon design (15 styles, SVG…
Languages
Trust signals
From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.
