addressables-design
Source-anchored design rules for Unity Addressables 1.22.3/2.9.1
Unified batch and async-job orchestration
Claude Code
$ npx -y skills add Besty0728/Unity-Skills --skill batch --agent claude-code
Codex
$ npx skills add Besty0728/Unity-Skills --skill batch -a codex -y
Cursor
$ npx skills add Besty0728/Unity-Skills --skill batch -a cursor -y
Gemini CLI
$ npx skills add Besty0728/Unity-Skills --skill batch -a gemini-cli -y
GitHub Copilot
$ npx skills add Besty0728/Unity-Skills --skill batch -a github-copilot -y
OpenCode
$ npx skills add Besty0728/Unity-Skills --skill batch -a opencode -y
Windsurf
$ npx skills add Besty0728/Unity-Skills --skill batch -a windsurf -y
name: unity-batch description: Unified batch and async-job orchestration
The `POST /skills/batch` endpoint, query → preview → execute bulk edits, execution reports and async jobs. Parameters come from the schema (`GET /skills/schema?category=Workflow&wire=v2`, or `?category=Validation` for the fixers), never from a skill's name; execution and dryRun rules: root [SKILL.md](../../SKILL.md).
An **HTTP endpoint, not a skill**: never send `skills_batch` to `POST /skill/<name>`. It runs up to 50 ordinary skill calls in order inside one main-thread job, each through the full single-skill pipeline (validation, permission gate, its own Undo group, audit): one round trip and one main-thread wake-up instead of N, the biggest saving once there are 3+ writes.
POST /skills/batch
{
"steps": [
{"skill": "gameobject_create", "args": {"name": "Cube", "primitiveType": "Cube"}},
{"skill": "component_add", "args": {"entityId": {"$ref": "$0.entityId"}, "componentType": "Rigidbody"}}
],
"continueOnError": false
}| Body field | Default | Meaning | |---|---|---| | `steps` | required | `{skill, args}` objects, in order. More than 50 → `400 SEMANTIC_INVALID`; split the call. | | `continueOnError` | `false` | `false` = stop at the first failure; `true` = record it and keep going. | | `params` | none | Values for `{"$param":"name"}` or `{"$param":"name","default":X}` nodes in args; static, resolved before `$ref`; a missing slot without default fails that step. |
**Reading the response.** HTTP `200` whenever the batch ran; only a rejected request (bad body, >50 steps, unknown mode or key) is `4xx`.
{"status":"partial","mode":"execute","dryRun":false,"executed":2,"failed":1,
"results":[{"index":0,"skill":"...","status":"success","result":{...}},
{"index":1,"skill":"...","status":"error","error":{"errorCode":"...","error":"..."}},
{"index":2,"skill":"...","status":"skipped"}]}> **Not the same as `batch_execute`.** `batch_execute(confirmToken)` commits *one* previewed bulk operation (one verb over N objects). `POST /skills/batch` composes *N different skills* over any targets and takes no token; it never skips the preview/confirm gate — a `batch_execute` step still needs its own `confirmToken`.
**Jobs.** When a skill or step returns a `jobId` (async execution, tests, compiles), wait with `GET /jobs/{id}?wait=<s>` (up to 120 s; answers once the job is terminal, with `resultData`; `waitTimedOut:true` = GET it again; a `503` during a domain reload = repeat the same URL) or poll `GET /jobs/{id}`. Both stay out of the main-thread skill queue and are far smaller than `job_status`; `job_wait` blocks the main thread (max 2 s).
1. Select with `queryJson` (filters ANDed: `name` substring and `namePattern` .NET regex, case-insensitive unless `caseSensitive:true` or `(?-i)`; `path` / `parentPath` exact, `underPath` any depth; `entityId`, `instanceId`, `tag`, `layer`, `componentType`, `sceneName`, `active`, `isStatic`, `prefabSource`, `includeInactive` (false), `limit` (500)); `batch_query_*` shows what matches. A `limit` cut shows as `truncated:true` with the full `totalMatched` (`count` stops at `limit`); previews return both and cover only `limit` matches. 2. Preview with `batch_preview_*` or a fixer (`batch_fix_missing_scripts`, `batch_standardize_naming`, `batch_set_render_layer`, `batch_replace_material`, `batch_cleanup_temp_objects`). Previews are read-only and return `{confirmToken, kind, summary, riskLevel, targetCount, executableCount, skipCount, totalMatched, truncated, sampleChanges: [{targetPath, action, before, after}], skipReason
REST API-based AI-driven Unity Editor Automation Engine Let AI control Unity scenes directly through Skills 🎉 We are now indexed by DeepWiki! Got questions? Check out the AI-generated docs → The current official maintenance baseline is Unity 2022.3+.
Source-anchored design rules for Unity Addressables 1.22.3/2.9.1
Manage Addressables groups, entries, profiles and content builds (com.unity.addressables, reflection-based)
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Ask which skill or flow fits your situation. A router over the skills in this repo.