unity-surface-preflight

unity-surface-preflight is a skill for Claude Code from Nice-Wolf-Studio/unity-claude-skills. It costs 85 tokens per session (2,800 once invoked), scanned A, original, MIT.

A Unity project safety check that determines whether changes should be made through a running Unity Editor, in batch mode, or not yet. Unity is a tool for building games and other interactive applications.

In plain words
What is it for?
It is for safely preparing to edit Unity scenes, prefabs, and assets, especially when multiple Editors, Safe Mode, failed commands, or timeouts may be involved.
Why use it?
It helps prevent unsafe direct edits to Unity scene, prefab, and asset files when the project state or available Editor is uncertain. It requires evidence before treating the Editor as unavailable.

Skill for Claude Code

Written for Claude Code: shipped in a Claude Code plugin.

Part of the unity-ops plugin — 2 skills, 1 hook shipped together

Good fit It is for safely preparing to edit Unity scenes, prefabs, and assets, especially when multiple Editors, Safe Mode, failed commands, or timeouts may be involved.

Compare 6 skills from other repositories ↓
Install with agentmods
npx agentmods add skills/nice-wolf-studio/unity-claude-skills/unity-surface-preflight
Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

Any agent
npx skills add Nice-Wolf-Studio/unity-claude-skills --skill unity-surface-preflight
Clone the repo
git clone --depth 1 https://github.com/Nice-Wolf-Studio/unity-claude-skills

Made for: Claude Code.

Or install unity-ops, the plugin that ships this one along with the rest of its 2 skills, 1 hook.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for unity-surface-preflight

README.md
[![agentmods](https://agentmods.dev/badge/skills/nice-wolf-studio/unity-claude-skills/unity-surface-preflight/github.svg)](https://agentmods.dev/skills/nice-wolf-studio/unity-claude-skills/unity-surface-preflight)
Your own site
<a href="https://agentmods.dev/skills/nice-wolf-studio/unity-claude-skills/unity-surface-preflight"><img src="https://agentmods.dev/badge/skills/nice-wolf-studio/unity-claude-skills/unity-surface-preflight/github.svg" alt="Measured on agentmods" height="20"></a>

Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.

agentmods 80×15 button for unity-surface-preflight

Your own site · 80×15
<a href="https://agentmods.dev/skills/nice-wolf-studio/unity-claude-skills/unity-surface-preflight"><img src="https://agentmods.dev/badge/skills/nice-wolf-studio/unity-claude-skills/unity-surface-preflight.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 85 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 2,800 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. A grade says what 26 rules found in the file — not that it is safe.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00085 $0.02800
Opus 5.5 $0.00034 $0.01120
Sonnet 5.5 $0.00017 $0.00560
Haiku 4.5 $0.00009 $0.00280

Measured 1mo ago against content hash 2e5f01f4bdad, method: parsed. Prices are Anthropic first-party input rates as of 2026-10-07, from the pricing page.

Security

Grade A, and why

unity-surface-preflight scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 1mo ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

unity-ops/skills/unity-surface-preflight/SKILL.md · 87 lines

How it starts

The opening of the file, as written. The whole thing — 87 lines — stays where its author put it; the contents beside it link to each section on GitHub.

Unity surface preflight

Exactly one of four surfaces is true before you touch a Unity project — live Editor, batch, blocked-on-Safe-Mode, or unknown-and-must-ask — and you owe yourself evidence for the one you pick. The skill already loaded in this session catalogues each failure mode on its own page, hands you no rule for choosing between them, and at SK:184 lets a disclosed direct file edit follow the words "no reachable Editor" without asking you to rule out either way that conclusion goes wrong.

The Iron Law

"NO EDITOR" IS A CONCLUSION, NOT A COMMAND OUTPUT. NEVER EDIT SCENE, PREFAB, OR ASSET YAML
UNTIL BOTH FALSE NEGATIVES ARE RULED OUT AND THE FALLBACK IS SAID OUT LOUD.

A probe you could not run is not a probe that came back empty. A denied tool call, a binary missing from PATH, a shell whose view of the machine you cannot vouch for — each leaves the surface UNKNOWN, and UNKNOWN is a question you put to the human. It is never a licence to open the YAML instead.

The Gate

  1. pwd. Confirm the directory you are calling the project root holds ProjectSettings/ProjectVersion.txt, read this session — not remembered from an earlier one.
  2. Walk references/decision-table.md from the top and stop at the first predicate that matches. First match wins; do not skip a row because you expect its answer.
  3. Name, in your response, the surface you resolved and the command output you resolved it from. One sentence, quoting the payload.
  4. Only now act. No named surface, no serialized-asset edit.

If step 2 cannot finish because a probe was denied, errored, or was never available to you, the resolved surface is UNKNOWN and step 4 is "ask the human", not "fall back to the file". Inability to reach the CLI is the strongest reason to distrust "no Editor", not a shortcut past it.

Red Flags — STOP

Thought Reality
"A status probe says no instances, so the Editor is closed." Two different things produce that output and neither means "closed". (a) A sandboxed agent shell reproduces "no instances" against a genuinely running Editor — this caveat does not exist in the skill you have loaded (R1b §B/§D: GitHub-only). (b) A headless/batch-launched Editor serves commands and is never listed by unity status at all, because its lockfile heartbeat differs from a GUI Editor's — confirm reachability with unity list --project-path <project>, not unity status (IA:162-164) — and that probe answers in exactly two shapes, neither of them "empty": a tool catalog (151 entries in Increment 0), or errors[0].code == "COMMAND_FAILED", "No Pipeline instance found for project", at exit 6 (issue #27).
"Exit 6 means I have to pick an Editor." Exit 6 covers more than one condition. unity status --format json with nothing running returns success:false, data.count:0, data.instances:[], errors[0].code:"STATUS_NO_INSTANCES" — observed on this machine by live probe; IA:337 carries only the STATUS_NO_INSTANCES code token, not the payload shape, and is not a citation for data.count:0 [R4-M5] — that is no candidates, not too many. AMBIGUOUS_EDITOR (SK:30; IA:21,44) is only the right branch when data.candidates is non-empty. Read errors[0].code and data.candidates, never the exit code alone.
"unity pipeline list will tell me if this project is in Safe Mode." pipeline list is machine-wide. unity pipeline list --help lists no options of its own beyond -h, --help (a Global Options block prints after it — the CLI's shared set, not this subcommand's); passing --project-path returns error: unknown option '--project-path' and exit 2. The per-project answer is a filter over data.instances[] on the field carrying the project path — observed in Increment 0 as projectPath (Delta D2). The machine-wide key is data.summary.instancesInSafeMode. And pipeline list exits 0 even when it finds nothing (observed: success:true, data.instances:[], all six summary counters 0, exit 0) — while unity status with nothing running exits 6. Gating on pipeline list's exit code learns you nothing; read data.summary.
"Driving a fresh headless Editor gets me the same place." It does not, and doing it silently is a substitution with no disclosure. The one sentence the installed skill gives you (SK:184) covers disclosing a direct file edit; it does not cover silently swapping control surfaces.
"The user says the Editor is open, so it is." It may be, and the probe may still be blind to it — see row 1. A claim sitting in the task you were handed answers no question, because at that moment you had not asked one; it is the brief, not a reply. What counts is a human sentence that lands after all three probes, in this session, addressed to the question you put. Getting told up front makes asking more necessary, not less — that is the case where you would otherwise never ask at all. And even a real answer settles only the sandbox question, never that a project sits at state ready.
"isRunning: true, so a process is alive and only the bridge is down." isRunning: true was watched with no Unity Editor process on the machine at all, so it is not a look at the process table; what it is reading is not established, and nothing here tells you. pipelineServer.isReachable is the key that speaks to reachability. Watched on 2026-09-14 with the Editor shut and no Unity binary running: {"isRunning":true,"hasPipelinePackage":true,"pipelineServer":{"isReachable":false,"apiUrl":null}}, summary.runningInstances: 1, against unity status → STATUS_NO_INSTANCES (issue #30). When they disagree, unity status and isReachable carry it. A lone isRunning: true is not an instance, is not a broken bridge, and is not a reason to stay out of row 5.

Read the full file on GitHub · 87 lines

Files

What ships with it

1 file beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 1mo ago First seen · 87 lines · 85 tokens per session scan A 2e5f01f4bdad

Subscribe to this mod's changes

unity-surface-preflight is a skill published in the GitHub repository Nice-Wolf-Studio/unity-claude-skills (40 stars, last pushed 1mo ago), licensed MIT. It adds 85 tokens to every session and 2,800 once invoked, about $0.0003 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-09-16.

Related

Other skills, from other repositories

playtest-report

Structured playtest report template, or turn existing playtest notes into structured feedback.

Donchitos/Claude-Code-Game-Studios · 20 tokens

godot-signals-groups

Build event-driven, decoupled Godot 4.7 gameplay with signals and node groups: declare and emit custom signals, connect with Callables (incl. bind/one-shot), and broadcast to many nodes via groups and callgroup. Use when wiring node communication in a Godot project, replacing tight references with signals…

gamedev-skills/awesome-gamedev-agent-skills · 95 tokens

motion

Reconstruct a skeleton from calibrated mesh projections and sequential VLM joint annotations, then fit joints and skin weights. Generate motion from joint-position trajectories, rhythm and contact constraints through IK; refine bone orientation against the action, then export, retarget and validate on the target mesh.

OpenDCAI/GameFactory-3A · 0 tokens

unity-addressables

Manage Addressables groups, entries, profiles and content builds (com.unity.addressables, reflection-based).

Besty0728/Unity-Skills · 25 tokens

unity-manual-component

Manually add, configure, reorder, and copy components on GameObjects using Unity Editor UI. For one-off Inspector workflows that do not need REST automation.

Besty0728/Unity-Skills · 36 tokens

threejs-exposure-color-grading

Build a measured exposure and grading path in Three.js. Use for a 64x36 encoded luminance meter, asynchronous readback, weighted log-average exposure, asymmetric adaptation, single tone-map ownership, and a generated 32-cube post-tone-map LUT.

scottstts/Threejs-Awesome-Graphics-Agent-Skills · 60 tokens