Agent Skills: uloop compile

Compile the Unity project and report errors/warnings. Use after C# edits or when a full Domain Reload compile is needed.

UncategorizedID: hatayama/uLoopMCP/uloop-compile

Install this agent skill to your local

pnpm dlx add-skill https://github.com/hatayama/unity-cli-loop/tree/HEAD/.agents/skills/uloop-compile

Skill Files

Browse the full folder contents for uloop-compile.

Download Skill

Loading file tree…

.agents/skills/uloop-compile/SKILL.md

Skill Metadata

Name
uloop-compile
Description
"Compile the Unity project and report errors/warnings. Use after C# edits; to try edits in the running Editor without a domain reload, use hot-reload."

uloop compile

Execute Unity project compilation.

When to use

  • After C# edits, to check for compile errors and make the change live in the Editor (Play Mode, tests, a tool call): to land edits you finished trying with hot reload, or to apply structural changes hot reload cannot.
  • To try an edit in the running Editor, especially during Play Mode, run uloop hot-reload instead: a compile drops every hot-reload patch and discards the Play session.

Usage

uloop compile [--force-recompile] [--no-wait-for-domain-reload] [--stop-on-external-scene-changes] [--timeout-seconds <seconds>]

Parameters

| Parameter | Type | Default | Description | |-----------|------|---------|-------------| | --force-recompile | flag | - | Full recompile plus domain reload. Almost never needed: a plain compile already detects externally edited files, and the forced reload can freeze large projects and come back as COMPILE_RESULT_UNKNOWN. | | --no-wait-for-domain-reload | flag | - | Return before Domain Reload completion | | --stop-on-external-scene-changes | flag | - | Stop before compilation if open Scene files changed externally instead of auto-reloading them | | --timeout-seconds | integer | 600 | Maximum seconds the CLI waits for the compile to finish before returning COMPILE_WAIT_TIMEOUT (default 600). Values above 1200 exceed the Unity-side result retention window (20 minutes) and weaken post-timeout recovery. |

When to use --force-recompile

--force-recompile is almost never needed. Detecting changed files is Unity's job: even when files were edited outside the Editor, a plain uloop compile refreshes assets and runs every recompilation the changes require. "The files were changed externally, so recompile everything just in case" is not a valid reason.

Why to avoid it:

  • On large projects a full recompile plus domain reload can freeze Unity for a long time.
  • The result crosses a domain reload, so it often comes back as COMPILE_RESULT_UNKNOWN and does not work as a verification step.
  • It puts the Editor into the unstable just-after-reload state for no benefit.

The one legitimate use case: you need warnings hidden by other asmdefs surfaced by a full build. Otherwise always run plain uloop compile.

Output

Returns JSON:

  • Success: boolean or null
  • ErrorCount: number or null
  • WarningCount: number or null
  • Warning (string, optional): set when the compile was requested during Play Mode (the Play session is discarded), while pause points were armed in either Play Mode or Edit Mode (the domain reload drops every pause point patch; those enabled with --persist are counted separately and re-armed from their saved enable request after the reload), or while hot-reload changes were active (a successful compile drops every patch; the edited sources are compiled in).
  • Message: string
  • ErrorCode: string or null. COMPILE_ALREADY_IN_PROGRESS / COMPILE_EDITOR_UPDATING when Unity was still compiling or updating after the CLI waited for it and sent the compile again (it does so twice before giving up; run uloop compile again), COMPILE_RESULT_UNKNOWN after a forced recompile that did not return a definitive result.
  • NextActions: string array or null. Corrective steps derived from the errors, e.g. the assembly that declares an unresolved namespace (CS0234), or, for CS0246 in a script under an asmdef, a reminder to check that asmdef's references (the type may instead be a typo — decide from the error).

When Unity stops compiling before the finish callback (Success: null, indeterminate), Message keeps the get-logs pointer and appends Recent Console errors: with the last few Console errors (typically the asmdef or compiler error that aborted the compile), so fix from that list before reaching for uloop get-logs.

Troubleshooting

When Unity's API Updater asks for consent to rewrite source files during a CLI compile (the 'Script Updating Consent' dialog), uloop declines automatically — source files are never rewritten without explicit user consent — and the response's Warning discloses the decline. The obsolete-API errors the updater would have fixed appear in Errors; fix them in code, or have the user accept the dialog in an interactive Unity session. Outside CLI compiles, and for the separate 'API Update Required' dialog, the modal can still appear and uloop cannot click it: if compile times out while the Editor looks idle, ask the user to answer the dialog — never auto-dismiss it.

A compile that outlives your shell's output window keeps running inside Unity: the call may return with empty or truncated output while the compile is still in progress, and the next uloop command is rejected with "Unity is busy running 'compile'" until it finishes. That rejection is normal single-flight behavior, not a failure — wait and rerun the command; do not restart Unity or rerun compile to recover.