50 KiB
Changelog — unity-cli skill
All notable changes to the unity-cli skill documentation are recorded here. The
skill documents the published unity CLI;
each entry notes the CLI version the skill was aligned to.
The format is based on Keep a Changelog. Sections are
normally cut per CLI release once that release has shipped publicly, so pending skill work is
usually tracked alongside the CLI change itself, not here. The [Unreleased] section below is
the narrow exception: a surface documented ahead of its CLI release. It folds into that
release's own dated section once the CLI actually ships it.
[Unreleased]
Added
-
unity setup codexandunity setup grok:integration-advanced.mddocuments installing Unity's agent plugin into Codex and Grok Build, the commands each runs,CODEX_HOME/GROK_HOME, the not-found and install-failed error codes, and the nullreloadCommand.SECURITY.mdextends the plugin-install fence to both. Pending the commands shipping in a CLI release. -
--with-pipelineonunity projects create:projects-templates.mddocuments addingcom.unity.pipelineduring creation, its never-fails-the-create warnings, thepipelineresult field and its error codes, and the agent-session hint;integration-advanced.mdpoints at it from the Pipeline setup section. Pending the change shipping in a CLI release. -
--cloud-organd--no-signonunity assets export:projects-templates.mddocuments that Unity 6.6+ exports are signed by default, how the signing organization resolves, the pre-spawn refusals (exit3/4),ASSETS_EXPORT_SIGNING_FAILED, and the newsigned/signingOrganizationIdresult fields. Pending the change shipping in a CLI release. -
--no-waitand--wait-timeout <seconds>oninstall,install-modulesandprojects require: documented ineditors-install.mdunder "Waiting on another install", with exit code 9 and theINSTALL_LOCK_BUSYerror code they fail with, including that exit 9 can follow a partial install. Exit 9 is also inSKILL.md's exit code table. Pending the flags shipping in a CLI release. -
Experimental FEX-Emu support on Linux arm64:
editors-install.mddocuments theUNITY_EXPERIMENTAL_FEX_EMU=1opt-in, the FEX-Emu and RootFS it requires, thefex-emudoctor row, and theFEX_EMU_EXPERIMENTALnotification. Pending the change shipping in a CLI release. -
The
sourcefield on plugin runtime rows:integration-advanced.md'sunity pluginsection says whatmachine,package-managerandmanagedmean onplugin install/upgrade/listanddoctorrows, and what a runtime row endingdependency-unavailablemeans. Pending the field shipping in a CLI release. -
--coppa <status>onprojects create,projects link cloud,projects link vcs, andvcs setup, and thecoppafield those commands report when they create a Unity Cloud project. Documented as a "COPPA declaration" note underprojects createinprojects-templates.md, with the flag added to the cloud-question,linkand URL-form flag lists in the same file. -
unity projects close: documented inprojects-templates.mdbeside the existingunity closedocs. Same shipping command under itsprojectsmount, previously missing from this skill even though it has been part of the published CLI for a while. -
--key-from-stdinonunity collaboration jira server add,update, andtest: the Collaboration reference'sjira servertable lists it next to a warning that--keyexposes the API token in the process list and CI logs, and every example there now pipes the token withprintf '%s' "$JIRA_TOKEN" | ... --key-from-stdin. Pending the flag shipping in a CLI release. -
unity templates list --brief: documented inprojects-templates.md's Templates section, and the template-picking step now runs the list with--brief --format jsoninstead of the untrimmed form. The flag trims the JSON data to the same name/displayName/type/version/status columns the table already renders, which matters because the untrimmed payload can run into the hundreds of KB for the default catalog. -
unity build's json/ndjson result gainsdata.outputPath: the absolute, resolved--output-patha build was told to write to,nullonly for an--execute-methodbuild invoked without--output-path. Documented in the Build section ofbuild-run-test.md, under a new "Output path in the result" paragraph beside the existing provenance-manifest one. -
unity bug --area <cli|pipeline-package|editor|licensing|not-sure>: which part of Unity the issue is in, documented under Bug indiagnostics-maintenance.md. Optional and never blocking: on a terminal the reporter asks with "Not sure" preselected, and a non-interactive run without it sends no area. The answer rides as anIssue area:line in the report text, which is what triage reads. Aneditororpipeline-packageanswer makes the project-copy question explain why a copy helps; it still defaults to no, and alicensinganswer does not get that hint (a licensing or sign-in issue is rarely about the project itself). Pending the flag shipping in a CLI release.
Changed
UNITY_PROJECT_PATHfor per-worktree agents:SKILL.md's one-Editor-per-worktree paragraph now tells agents to setUNITY_PROJECT_PATH=<full project path>once for the session, and names the commands that don't read it (recompile,close,mcp configure). The environment-variable table lists every command that honors it,unity mcpincluded.integration-advanced.mdadds the variable to the target resolver's order and showsUNITY_PROJECT_PATH=... unity mcp. Pending theunity mcpchange shipping in a CLI release.UNITY_PEER_AUTH_MODE=identify-only:SKILL.mdandauth-license-cloud.mdnow say that a broker started this way is a separate dev broker with its own address and sign-in, that it refuses Unity-signed apps, and that Unity apps refuse it. Pending the change shipping in a CLI release.build-run-test.md's Build section now saysunity build --format jsonwrites only the result document to stdout, with the progress frames and the streamed Editor log on stderr, and that the streamed log masks the credentials the CLI passes the Editor (the-accessTokenvalue, the Android keystore passwords) inbuild,runandtest. Pending the change shipping in a CLI release.- The "Bootstrap a new project from scratch" recipe now installs the Pipeline package before the first open and builds the scene in the live Editor. It used to end at
unity openwithout mentioningunity pipeline install, which led agents to build scenes throughunity run -- -executeMethodand to report success on output they couldn't inspect. New steps 5 and 6 runpipeline install,openandstatus --until-ready. The recipe now says to set up scenes and assets withunity command evalagainst the running Editor, with batch mode as the headless fallback.integration-advanced.mdand the recipe also documentSTATUS_PIPELINE_LOAD_PENDING, theunity statusstate for a package installed into an Editor that is already open but hasn't loaded it yet. That code is pending a CLI release. - The Auth reference now notes, beside the
unity auth login --secret-from-stdinexample, that the secret must be piped in: a terminal on stdin is refused, and the command stops waiting after 30 seconds if the pipe is never closed. Pending the change shipping in a CLI release. - One Editor per worktree, and report a failed call.
SKILL.mdnow tells an agent working in several worktrees to make each one withunity vcs git worktree add --into <path>, open the project inside it withunity open, and target that Editor by its full project path. It never drives an Editor whose project isn't its own checkout. Once Safe Mode, a sandbox and a slow import are ruled out, it also reports a timeout or an Editor lifecycle failure to the user instead of silently working around it. It offersunity bug --area pipeline-packageand asks first. The full-path advice pairs withunity status --project-pathmatching an existing directory exactly, which is pending a CLI release. - The Config reference's proxy section said credentials missing from a proxy URL are read from the OS keyring, which the CLI doesn't do. It now says so, warns that credentials in a URL passed on the command line show in the process list and CI logs, and points at your OS identity or
UNITY_PROXYinstead. - The bootstrap recipe's step 6 and the
unity statusreference now pass the project's full path tounity status --until-ready --project-path, and say how the flag matches. A path that exists matches that project only, so a sibling checkout such asMyGame-lightingnever ends the wait forMyGame, and a bare name still matches any project path containing it. Pending the change shipping in a CLI release. - The install one-liners in SKILL.md no longer set
UNITY_CLI_CHANNEL=beta. A bareinstall.sh/install.ps1run already installs the latest beta until a stable release exists, and the stable release after that. projects-templates.md'sprojects createwalkthrough said the interactive Unity Cloud question defaults to No. It defaults to Yes (PromptCloudEnabledinProjectsCreateCommand.cs), matching what the rest of the same file already said. Corrected the one contradicting sentence.projects new's--helpdescription now says it never links to Unity Cloud, matching the fact already documented in this file'sprojects newsection. Help snapshots, completion goldens, and the command-surface digest were regenerated for the new wording.version-control.md'svcs providerssection documents the newcmrow, taken fromunity plugin list's own registry lookup, and theunity plugin install uvcssuggestion inside a UVCS workspace with nocm. It previously said the command does not reportcm.build-run-test.md's Accelerator example ranunity buildwith--target StandaloneLinux64and no--output-path. A desktop target with neither--execute-methodnor--profileis a built-in player build, which requires an output path, so the example exited 2. It now passes--output-path ./Build/MyGame.x86_64.
CLI 1.0.0-beta.11 (2026-09-22)
Aligned to the CLI's 1.0.0-beta.11 release. Cut automatically by the release that published it, from the skill as it stood in that release — so this entry covers the documentation changes that had already landed by then. Anything worth calling out individually is added here in a follow-up pass.
Added
unity assets export <asset-path...> --output <file.unitypackage>: new subcommand, the write-side companion tounity assets inspect. The Assets section inprojects-templates.md(retitled to cover both) documents the flags (--project,--no-dependencies), the batchmode-Editor requirement, pre-spawn path validation (exit6on a missing, outside-project, or non-Assets/Packagespath), and the--format json/ndjson/tsvshapes.
Changed
cloud-automation.mdsaid missing arguments or flag values could produce plain-text usage errors even under--format json. They fail with exit2and the ordinary JSON failure shape,errors[].codeINVALID_COMMAND_ARGS.- SKILL.md and
auth-license-cloud.mdno longer mention a feature-gated command family that isn't part of the public command surface.
CLI 1.0.0-beta.10 (2026-09-14)
Aligned to the CLI's 1.0.0-beta.10 release. Much of this release's surface was already documented ahead of it shipping — unity context, unity watch test, unity commands, unity vcs blame, unity skill refresh, and the Unity Accelerator settings (unity config accelerator / --accelerator / unity diagnose accelerator, listed under Deferred in the 1.0.0-beta.9 entry) — so this entry records what was still missing.
Added
unity assets inspect <file.unitypackage>— new command family. A new Assets section inprojects-templates.mdcovers the offline listing (asset path, GUID, payload size, preview flag), the machine formats, and the constant-memory streaming.unity build --list-targets/--list-profiles/--create-profile <target>andunity build run— the build discovery and Build Profile creation options, plus launching the most recent recorded build (--pathfor another). A new subsection under Build inbuild-run-test.md, rows in the Build options table, and theBUILD_INVALID_TARGETpointer at--profile.unity open --wait(alsoprojects open/projects upgrade) — documented under Projects inprojects-templates.md: blocks until the Editor exits, exit0/6, macOS and Linux only, refused with exit2on Windows; plus the signal-killed-Editor reporting (inside the 150 ms startup watch without--wait, for the whole run with it).ProjectSettings/UnityCliConfig.jsonandunity config resolve <key> [project]— the committed per-project build/test defaults layer (nine keys), the globalconfig set build.target …layer beneath it, the precedence order, and the command that names which layer a value came from — inconfig-hub.md, with a pointer from Build.unity command <name> --result-only— the envelope-free JSON result mode, inintegration-advanced.md, alongside the readable rendering ofrecompile/recompile_status/test_status/run_testsresults.unity license status'sfloatingServer/machineIdfields — inauth-license-cloud.md.UNITY_NO_AUTH_BROKER,UNITY_PEER_AUTH_MODE/UNITY_PEER_AUTH_LINUX_ALLOWED_HASHES,UNITY_CLI_HOME,UNITY_NO_EDITOR_IDENTITY_SERVER— added to the environment-variables table in SKILL.md, with a short paragraph under Auth explaining the on-demand resident auth broker, the hardware-sealed token store, and the peer code-signature check.
Changed
unity mcp configure—continuenow printsconfig.yamlinstructions instead of writing a file,--dry-runpreviews only the entry being changed,codexalso relaxes the Codex sandbox network policy and refuses an unsafeconfig.tomledit, and every client config write is atomic; the MCP section also notes the desktop-screenshot fallback ofcapture_game_view/capture_scene_viewand thetools/list_changednotification.unity status— thestartingstate (Editor still booting) noted alongsideunreachable.unity self-update— noted that an interrupted download resumes on the next run and that a Brotli-compressed artifact is preferred when published.unity install— noted the bounded retry on transient download failures and that--resumealso recovers an interrupted module download.- Command index (SKILL.md) refreshed:
assetsadded;configgainsresolve;buildgainsrun. - Refreshed the latest-version note to
1.0.0-beta.10. - The
unity commandsnote no longer links to the hub-onlyapps/cli/docs/json-output.md; it was the skill’s only relative link outside its own tree, so the standalone copy published to Unity-Technologies/skills is now self-contained. - Template selection defaults to URP. The bootstrap workflow in
SKILL.mdand the Templates section ofprojects-templates.mdnow namecom.unity.template.urp-blank(Universal 3D) andcom.unity.template.universal-2d(Universal 2D) as the defaults, markcom.unity.template.3d/com.unity.template.2das the Built-in Render Pipeline templates (deprecated from 6.5, removed in 6.7), and note thatrenderPipelineis blank foruniversal-2dintemplates listoutput. Everyprojects create/projects new/templates infoexample now usesurp-blank. Previously the skill's examples all used the Built-incom.unity.template.3dand said the URP id “varies by version”.
CLI 1.0.0-beta.9 (2026-09-08)
Aligned to the CLI's 1.0.0-beta.9 release. Several pieces of this release's surface were already documented ahead of it landing in the shipped binary — unity version, unity test --affected, and the --child-modules/--list-modules spellings — and needed no change here. This pass documents the rest of the shipped surface for the first time.
Added
unity skill show— read the embedded skill (or one of its reference files) straight to stdout, with--listand--path <file>, without installing anything. Documented inintegration-advanced.md, alongsideskill install/refresh.- A
unity pluginreference section, new — this command family (install/remove/upgrade/list/changelog) shipped across earlier releases (install/remove/upgradein1.0.0-beta.7) but had never had a dedicated write-up beyond a passing mention ofplugin install plastic. Added now becauseplugin upgrade's real version-comparison behavior and the newplugin changelog <id>needed somewhere to live, and documenting them in isolation without the surrounding command family would have been more confusing than useful. --color <auto|always|never>/--no-color— the new global flag, added to the global-flags table.unity auth consumers/unity auth revoke <application>— list and manage the applications using this machine's Unity sign-in through the auth broker.unity config get|set|list|unset <key>— the generic key-value interface over the existingproxy/proxy.bypass/accelerator/update-checksettings, documented inconfig-hub.mdalongside the purpose-built subcommands it shares storage with.unity doctor's bundled third-party components section — noted as a one-paragraph addition to the existing Doctor writeup; it's informational, not a check, so it didn't need more than that.- The always-on
cli telemetryusage ping, the sign-in token store's machine-sealing, and the self-installed-vs-Homebrew PATH-conflict warning — each is a background/security behavior with no new command surface, so each got a sentence in the relevant existing section (Analytics, SKILL.md's Notes, and Self-update respectively) rather than a section of its own. - "Sandboxed agent tooling can hide a running Editor", a new
integration-advanced.mdsection understatus, plus a matching callout in SKILL.md. Interim guidance: a restrictive sandbox around an agent's own shell commands can makeunity status/command/listreport no reachable Editor even when one is genuinely running, on Windows (a separate restricted account can't read the Editor's discovery file) and macOS (a network sandbox can block the loopback connection to it). Says plainly not to conclude the Editor is down from that alone, and never to suggest disabling the sandbox. Superseded once the CLI itself reports this case with its own distinct message — this section says so and should shrink to match at that point.
Changed
- Extended the sandboxed-agent guidance into the scene/GameObject/asset editing workflow. The "Sandboxed agent tooling can hide a running Editor" note (added above) was previously reachable only from the top-of-skill "Drive a running Editor" quickstart. The
unity status-first Common workflow — the section that actually fires before any scene/GameObject/prefab/asset edit — had no mention of it, so a sandboxed agent hitting a false "no Editor" there had nothing telling it to doubt that result. Observed in the wild: a Codex-sandboxed agent took aunity statusfalse negative at face value and improvised an undocumented headless-Editor workaround instead of saying so and falling back to a disclosed file edit, producing an asset that wasn't actually materialized until a later build ran. The workflow now rules out Safe Mode and sandbox interference side by side before permitting the file-edit fallback, andintegration-advanced.md's own guidance now names the improvised-workaround failure mode explicitly, not just silent file-editing. - Command index (SKILL.md) and global-flags/environment tables refreshed for the above.
unity install/install-modules's child-modules flag examples now lead with--child-modules/--no-child-modules(matchingunity editors module add), noting the old--cm/--no-cmshorts still work.unity modules list's column table now names the last columnAliases(renamed fromdownloaderNamein--format json).- Refreshed the latest-version note to
1.0.0-beta.9.
Deferred
- The
unity config accelerator/--accelerator/unity diagnose acceleratorfeature itself is still[Unreleased]in the CLI's own changelog as of this release — despite the skill already documenting it from an earlier ahead-of-release pass. Left as-is (documenting a subset of the shipped surface is safe); this stamp does not newly assert that feature shipped. - Auth broker client libraries (the .NET/TypeScript SDKs for other products to use Unity sign-in) are not
unityCLI commands, so nothing in this skill changes for them.
CLI 1.0.0-beta.8 (2026-09-01)
Aligned to the CLI's 1.0.0-beta.8 release, which supersedes the withdrawn 1.0.0-beta.7. That release reached the production beta channel and was pulled the same day, so beta.8 is what actually carries its surface to users, and this stamp moves on from 1.0.0-beta.6, which is what the channel served in between. Everything the skill already documents stays accurate. Two additions extend the unity vcs provider layer that the beta.7 note below recorded as public but not yet documented: repository creation and readiness reporting through Bitbucket's bkt and Azure DevOps' az. Both are deferred to that same alignment pass rather than documented piecemeal here. Also deferred, for the same reason: unity skill install <client> --local now mirroring the agent skill a project's com.unity.pipeline package ships, and unity install --format json printing on success the same result envelope the NDJSON result frame already carried. The rest of the release is Windows elevation and install fixes that change no flag or exit code this skill documents.
CLI 1.0.0-beta.7 (2026-08-25)
Aligned to the CLI's 1.0.0-beta.7 release. The surface this release ships that the skill already documents landed with the feature PRs themselves: unity vcs uvcs locks and unity vcs uvcs changesets, the per-organization default cloud project (unity cloud project set-default / current / clear-default and the project-resolution fallback), the long-output pager, and unity plugin install / remove / upgrade. The release's new unity vcs verb family (setup, status, sync, doctor, merge-setup, conflicts / explain / resolve, diff, summarize, hooks, git worktree, git migrate-lfs, providers, affected, switch) is now public but not yet documented by this skill — that coverage follows as its own alignment pass.
CLI 1.0.0-beta.6 (2026-08-19)
Aligned to the CLI's 1.0.0-beta.6 release. Most of this release's surface — unity doctor --ci, unity cache key, --format github, unity test --shard, and unity collaboration — landed already documented in 1.0.0-beta.5's reference files ahead of that release's stamp bump. This pass adds the two pieces that were still outstanding: the unity build stall heartbeat and --timeout, and the unity open background identity server plus the new git-credential interactivity gating.
Added
unity build --timeout <seconds>(envUNITY_BUILD_TIMEOUT) and the stall heartbeat — documented in the build options table and as its own note: a long build now prints a periodic "Still building — Nm elapsed, last log output Nm ago" heartbeat (on stderr for the human path, as progress frames under--format json/ndjson), and--timeoutaborts a build that runs past the given number of seconds, exit 6.unity open's background identity server — a small helper that answers the Editor's account lookup from the storedunity auth loginsession, so a Hub-less machine gets a signed-in Editor. Documents that it steps aside for a real Hub, exits on its own, and can be disabled withUNITY_NO_EDITOR_IDENTITY_SERVER.- Git credential interactivity gating — the CLI now decides up front whether anyone is there to answer a credential prompt. Documented alongside the existing token-resolution order: on a real terminal a configured helper (including Git Credential Manager's browser/device-code flows) runs and is relayed; without one — CI, machine
--format,--non-interactive— the command fails immediately with exit 4 instead of hanging, naming the missing credential.
Changed
- Refreshed the latest-version note to
1.0.0-beta.6. - Corrected the pager documentation to describe the one surface that actually pages. The
git log-style external pager recorded under Added in the1.0.0-beta.5notes below was never ported to the shipped binary — nothing spawnsless,more.com,$PAGER, or$UNITY_PAGER— so the resolution chain, theTERM=dumbandunity shellconditions, and the five paging listings (unity command,releases,editors,changelog,logs) never applied; those listings print in full every time. What does page isunity projects list, in-process and on a terminal only, ten projects per screen, and off for redirected stdout,--format json/ndjson,--all,--watch, and--no-pager/UNITY_NO_PAGER— but not--format tsvor--format github, which on a terminal fall through to the human table and page, so the tables no longer claim that every machine format bypasses the pager. The global flags and environment tables now say that, andUNITY_PAGERis documented as having no effect.
CLI 1.0.0-beta.5 (2026-08-13)
Aligned to the CLI's 1.0.0-beta.5 release. That release is fixes only — it adds no command, flag, or exit code. This pass instead closes the documentation gap the previous one left open: every item the 1.0.0-beta.4 note listed as deferred is now documented, so the skill covers the full shipped surface of both releases.
Added
unity editors prune— find editors no registered project uses and optionally uninstall them. Report-only by default;--removeuninstalls, and-y, --yesis required to do so non-interactively. Notes that "unused" is judged against the project registry, so an unregistered project's editor counts as unused.unity editors verify <version>— structurally verify an installed editor's files and modules, reporting each component asok/missing/skippedwith the exact repair command. Documented as a structural check (presence, not integrity or signing), and that--architectureis inherited from theeditorsparent.unity projects clean— delete a project's regenerable folders (Library,Temp,Logs, …). Documents--dry-run, that--yesis required non-interactively, and the two guardrails: it refuses while an editor has the project open (naming the PID) and rejects a path that isn't a Unity project.unity templates pack— pack a project into a portable.tgz, with the distinction fromtemplates createstated up front (packwrites a standalone archive and registers nothing;createinstalls into the user templates directory). Covers the required--outputfile path, the--template-versionspelling that avoids the global--versioncollision, and the rejection of an output path inside the project being packed.unity commandlisting-query flags —--detail,--query,--tag,--group_by,--sort,--order,--offset,--limitas a table with values and defaults, plus the two traps:--group_byis deliberately underscored, and the flags only mean "listing" when no command name is given (with a name they forward to that Pipeline command as parameters, which is why each takes an optional value).- Multi-account auth —
unity auth list(with itslsalias),switch, anddefault(--project,--clear), plusauth logout <account>. Documents the precedence that makes these predictable: a project default beats the active account, and service-account credentials beat both;switchfails on an ambiguous match rather than guessing, carrying candidates indata.candidates. - The output pager — documented in the global flags and environment tables (
--no-pager,UNITY_NO_PAGER,UNITY_PAGER) with thegit logmodel spelled out: which commands page, the$UNITY_PAGER→$PAGER→less -RFX→more.comresolution chain, and the conditions under which paging never happens (non-TTY, machine formats,--quiet,TERM=dumb, insideunity shell) so scripts need no special handling. unity skill install/refresh— install this skill into an AI client from the copy embedded in the binary, framed againstmcp configure(tools vs. docs). Covers the client list,--listas the authority on which scopes each client supports, and thatrefreshshould followunity upgradebecause installed copies otherwise go stale.
Changed
- Refreshed the latest-version note to
1.0.0-beta.5. - Command index: added
editors prune/verify,projects clean,templates pack,auth list/switch/default, andskill install/refresh. Also dropped one listed subcommand that is not part of the public surface.
CLI 1.0.0-beta.4 (2026-08-06)
Tracks the CLI's 1.0.0-beta.4 release. Coverage is the full 1.0.0-beta.3 surface plus the beta.4 additions an automation or CI caller reaches for first: unity test --report-format/--coverage, unity build --profile and the zero-code build strategies, unity projects exec, unity bug --attachments/--share-project, and the rule that a failure is readable from stdout. The rest of beta.4 was deferred to a later pass and is documented under 1.0.0-beta.5 above: unity skill install/refresh, unity projects clean, unity editors prune/verify, unity templates pack, the unity command listing-query flags, multi-account auth (unity auth list/switch/default), and the output pager. Documenting a subset of the shipped surface is safe; the stamp exists to stop the reverse (publishing surface that isn't in the shipped binary).
Added
unity bug --attachments <paths…>/--share-project <path>— attach extra files (each must be an existing readable file; a folder is rejected), or a stripped copy of the project using the same packaging the Editor's bug reporter uses. Interactively, omitting both flags makes the reporter ask about each.unity test --report-format nunit|junit|nunit,junit— write a JUnit-schema report that GitHub Actions and GitLab ingest as native test results, with no converter step.junitalone makes--outputthe JUnit file;nunit,junitwrites both from a single Editor run, the JUnit one landing beside the NUnit report.--junit-outputchooses that second path and is valid only withnunit,junit; passing it with a single format is an option error. The report is written even when tests fail, and the NUnit default is unchanged.unity test --coverage(with--coverage-output,--coverage-options) — collect coverage through the Unity Code Coverage package. A project without the package gets a warning and the tests still run.unity build --profile <profile>and the zero-code build strategies — documented the three ways to pick a build: a Unity 6+ Build Profile (a.assetpath or a profile name underAssets/Settings/Build Profiles, which defines the target), a built-in desktop player build (--targetplus a required--output-path), or a custom--execute-method.--execute-methodis no longer required, and--targetis not needed when--profileis used. Non-desktop targets still need--profileor--execute-method.unity projects exec -- <command>— run one command across every registered project, each in its own directory withUNITY_PROJECT_PATHandUNITY_EDITOR_VERSIONset. Narrow the set with repeatable--filterterms (name:<glob>,version:<glob>,pinned[:<bool>]), raise concurrency with--parallel <n>, and use--continue-on-erroror--dry-run. Arguments are passed verbatim rather than through a shell, so pipes and&&are unavailable.unity run --commandworked example — a[CliCommand]source snippet with the human output it produces and the--format jsonenvelope beside it (data.result,data.parameters, anddata.reusedRunningEditor, which reports whether an already-open Editor was reused).
Changed
- Read failures from stdout, not stderr — documented the machine-format failure contract. Under
--format jsona failed command still writes a full envelope (success: falseand a populatederrorsarray whoseerrors[0].codeis the stable token to branch on); under--format ndjsonit closes with the usual terminalresultframe.datais usuallynullon a failure but not always, so branch onsuccess, never ondata: a partialunity editors addfailure carries a row per path, and an ambiguousunity auth switchcarriesdata.candidates. Empty stdout is not a failure signal, and the commands that still report only on stderr are called out as a known gap rather than a shape to code against. - Reserved forwarded flags — matching is spelling-insensitive, so
-projectPath,--projectPath, and-projectPath=<value>are all rejected, on every command that forwards user arguments (unity run,unity test,unity build --args,unity open --args). Also clarified thatunity rundeliberately never passes-useHub/-hubIPC, because the CLI runs no Hub IPC server and those flags would make the Editor launch the Unity Hub. unity mcp configure --local— corrected the client list. The clients with a project-local config arecursor,vscode,vscode-insiders,kiro, andcodex. Windsurf reads one global file and has no project-local variant.UNITY_NO_ELEVATE/--no-elevate— corrected to say it keeps the install service unelevated. The Editor's NSIS installer is manifestedhighestAvailable, so it still asks for elevation on demand under an administrator account and never does for a standard user; in CI, run the agent elevated instead.- Refreshed the latest-version note to
1.0.0-beta.4.
Security
- Install integrity stated, and scoped — the install script verifies the downloaded binary against the SHA-256 published in the channel's release manifest and aborts on mismatch, or when no SHA-256 tool is available. Because the manifest is fetched from the same CDN origin as the binary, this is described as an integrity check against a corrupted, truncated, or substituted download, not a defense against a compromise of the origin; the trust assumption (TLS plus Unity's control of that CDN) is stated explicitly.
- Linux install side effects split by package — the CDN script installs a self-contained binary under
~/.local/binand touches no system package sources. The separately published packages do change system state, and differently: the.debadds an apt repository entry and installs Unity's signing key into the system keyring, while the.rpmadds a yum repository entry withgpgcheckenabled pointing at the published key URL and imports no key at install time.
CLI 1.0.0-beta.3 (2026-07-24)
Tracks the CLI's 1.0.0-beta.3 release. The CLI's own [Unreleased] changes at the time (detached command jobs — unity command --detach, unity job wait/status/cancel — and live in-terminal progress for unity command) were intentionally not documented in this pass: they weren't in the shipped 1.0.0-beta.3 binary. They shipped in 1.0.0-beta.4, documented above.
Added
unity editors running— list running Editor instances and the project each has open (version + PID; cross-platform; an empty list is exit 0).unity projects size [project]— on-disk footprint by top-level folder (-a, --all;--jsonemits raw bytes).unity run --command <name>— execute a registered[CliCommand]Editor command headlessly (arguments after--parsed against its[CliArg]schema; requirescom.unity.pipeline).unity install --list-components— list an editor's available modules and exit (a drop-in alias forunity modules list <version>).unity bugnon-interactive flags —--title,--description,--steps(repeatable),--reproducibility <first-time|sometimes|always>,--email.unity shell— command-history persistence (↑/↓; secret-bearing flag values masked on disk), tab completion, session context/defaults (use project|org,set format|verbose|banner,unset,context), and the--protocol ndjsonmachine/agent mode.- Environment variables
UNITY_NO_CONSENT_PROMPT(suppress the first-run consent prompt without recording a choice) andUNITY_NO_CRASH_REPORT(disable anonymous crash/error reporting). - Global
--jsonshorthand (accepted on every command) in the global-flags table. - OSC 9;4 taskbar progress note for
unity installon interactive terminals. - Driving a running Editor — three patterns: persistent headless (launch the Editor binary in
-batchmodewithout-quit; it stays resident and serves the Pipeline API — drive it withunity command/list--project-path), warm/interactive (unity open, which registers withunity statusasready), and one-shot CI (unity run --command <name>boots a batch Editor, runs one command, exits). Notes that a bareunity runis not persistent (batch runs to completion and exits) and — verified — that a batch-mode Editor serves commands but is not listed byunity status. Closes a gap where the Connected Editors section assumed a running Editor without saying how to get one. - Authoring custom
[CliCommand]tools —[CliCommand]/[CliArg]in theUnity.Pipeline.Commandsnamespace (assemblyUnity.Pipeline), withMainThreadRequired/RuntimeOnlyas named properties on[CliCommand](not separate attributes); worked example, and hot-registration viaunity command recompile→unity list. - Editor-side
eval/eval_file— noted the runtime-discoverable production path viaunity command eval/unity command eval_file, discovered from the connected Editor. - Live-Editor control surfaced up front — the skill
descriptionnow advertises controlling a running/connected Editor (create/modify GameObjects, edit scenes, inspect the hierarchy, run C#) so agents pick the skill for scene/GameObject prompts, and a new top-of-skill "Drive a running Unity Editor" quickstart shows the minimalunity status→unity commandpath ahead of the install steps. - Production live commands + curated command list — clarified that the whole
unity command <name>/com.unity.pipelinecommand set (create_gameobject,save_scene, …) runs in production Editors, so agents don't assume live-Editor control is dev-gated. Added a curated quick-reference of the common built-in scene/GameObject commands, notingunity command --format jsonremains the authoritative catalog. - Scene / GameObject / asset workflow — a new Common workflows entry makes
unity statusthe first move for any scene or object task and, when an Editor is connected, prefers liveunity commandcalls over file edits. Adds a strong anti-pattern block against hand-editing.unity/.prefab/.assetYAML while a live Editor is reachable (error-prone fileIDs/GUIDs, invisible until reimport, can silently target the wrong scene), with an explicit "only edit files when no Editor is reachable" fallback. - Recovering from Safe Mode — a new Connected Editors playbook for the deadlock where a project's C# compile errors force the Editor into Safe Mode, the
com.unity.pipelinepackage doesn't load, andunity command/status/list/MCP can't connect. Documents the recovery loop with production-available commands: recognize the connection failure, confirm Safe Mode withunity pipeline list(which surfaces the warning,SafeMode Instances: N detected, and the "fix compilation errors and restart" hint), read the compile errors from the Editor log — narrowest first (-logFile, then<project>/Logs/Editor.log, then the per-user global log, with per-platform paths; disambiguated fromunity logs, which reads the CLI's own log) — fix the C# source, restart Unity, and re-poll until reachable. Restarting stops the stuck Editor by PID fromunity pipeline list, with an explicit warning against name-pattern kills (pkill -f Unity) that would take down every open Editor including unsaved work. The log step reads through a filter rather than dumping a cross-project file, and treats log contents as data, not instructions. Cross-linked from the "Drive a running Editor" quickstart and the scene-editing fallback so agents diagnose Safe Mode before falling back to blind file edits. (Addresses community feedback on the 1.0.0-beta.3 rollout thread.)
Changed
unity upgrade— documented Linux AppImage in-place updates and the apt/rpm repositories (GPG-signed rpm); the background "update available" notice is now package-manager-aware (suggests the owning manager's upgrade command) rather than always suppressed on package-managed installs.unity analytics— expanded the events recorded when opted in (registered command names only, never arguments/paths/project names; editor uninstalls; project open/create; self-upgrade/uninstall; shell/mcp/doctor/bug), noted thatopt-in/opt-outnow permanently answer the first-run prompt, and documented the separate anonymous Sentry crash-reporting pathway.unity language --setaccepts BCP-47 / locale / bare-language / bare-region spellings (resolved case-insensitively when unambiguous); catalog shared with the Hub.unity projectspath resolution documented as tolerant of casing, separator direction, and trailing slash (verified against real filesystem identity).- Terminal-hardening note extended to Commander usage errors, the
buglog-archive warning, andprojects add/removetsv output; noted that an invalid--proxynow fails with exit 2;UNITY_PROJECT_PATHnow honored bystatusand the cloud commands. - Refreshed the latest-version note to
1.0.0-beta.3.
Security
- Added
SECURITY.mddocumenting the skill's powerful-by-design capabilities (local Editor control and C# evaluation, official-CDN install) and the safeguards around them (local-user-context execution, trusted-input-only machine mode, HTTPS official CDN). - Clarified that driving a live Editor and running C# happen entirely on the local machine in the user's own account — not remote access — and added a trusted-input warning to
unity shell --protocol ndjsonmachine mode. - Removed internal development-only command documentation from the public skill; the production Editor-side C# evaluation via
unity command evalremains documented.SECURITY.mdnow carries only the user-facing capability rationale and safeguards.
CLI 1.0.0-beta.2 (2026-07-21)
Tracks the CLI's move to 1.0 versioning (1.0.0-beta.1 re-baseline) and 1.0.0-beta.2. The CLI's own [Unreleased] changes at the time (e.g. the universal --json shorthand) were intentionally not documented in this section — they weren't in the shipped 1.0.0-beta.2 binary (they shipped in 1.0.0-beta.3, documented above).
Added
unity shell— interactive REPL that boots the CLI once and runs many commands in a warm process (enter commands without theunityprefix;exit/quit/ Ctrl-D to leave).unity list— top-level discovery of a connected Editor's registered tools (name, description, group, parameter schema); introspection-only companion tounity command.unity diagnose proxy— redacted, paste-safe proxy diagnostic report for support (--json; a copy is written to the logs dir).unity pipeline upgrade,unity pipeline list-versions, andunity pipeline install --package-version <v>— upgrade the Pipeline package only when the registry is newer, list all published versions, and pin a specific version. Documented that the flag is--package-version(not--version, which collides with the global-V, --version), and the multi-editor selection behavior.unity editor module remove/unity editors module remove— remove installed modules by id (-m, repeatable;-y,-a).unity install-modules--reinstall,-f/--force, and--retries <n>(envUNITY_INSTALL_RETRIES);--no-elevate(envUNITY_NO_ELEVATE, Windows) oninstall/install-modules.- Global
--log-proxy/--no-log-proxy(envUNITY_LOG_PROXY) — per-request redacted proxy logging. unity doctorenvironment health checks (PATH presence,unity-binary shadowing, Windows long-path support).- Exit code
143(SIGTERM) in the exit-code table.
Changed
--instance <host:port>removed fromunity command,unity mcp— the CLI discovers running Editors itself; target via the project directory or--project-path.- Exit codes — the
cloud/authcommands map an auth failure to3and any other operational failure to6(previously1);unity buildinterrupts exit130(SIGINT) /143(SIGTERM). unity licenserecognizes service-account sessions (statusreports "Signed in: yes (service account)");activatedefault/--personalfail up front for service accounts, pointing to the unattended modes;returnnow returns serial-activated licenses too, with per-license partial results.unity install/install-modulescontinue past a failed item and report a per-item result (✓/✗/·), with anitems[]breakdown in NDJSON.unity upgradedetects package-manager installs (points at the owning manager instead of self-replacing); the "update available" notice is suppressed there.unity analyticsfirst-run prompt now requires an explicity/n(Enter re-asks);unity languagedropped the regional variants Spanish (Latin America), French (Canada), and Portuguese (Portugal).- Refreshed the latest-version note to
1.0.0-beta.2; noted the move to 1.0 versioning at1.0.0-beta.1.
CLI 0.1.0-beta.8 (2026-06-25)
Added
- MCP server —
unity mcp(built-in Model Context Protocol stdio server exposing a connected Editor's commands as tools) andunity mcp configure <client>(one-step config for 16 AI clients:claude,claude-code,cursor,vscode,vscode-insiders,copilot-cli,windsurf,cline,codex,kiro,trae,openclaw,antigravity,zed,continue,inspect; with--list,--local,--project-path,--yes,--dry-run). unity editors upgrade [editor]— upgrade an installed editor to the newest f-channel patch in itsmajor.minorline, carrying modules over;--all,--replace(--remove-old),--dry-run(--check),--no-modules,--module,--architecture,--yes,--accept-eula. Documented the expliciteditors listsubcommand and the new "Upgrade to" column oneditors --installed.unity config update-checkand theUNITY_NO_UPDATE_CHECKenv var, plus the background "update available" notice.unity command screenshotexample (a command forwarded to the Editor).
Changed
pipeline,command, andstatuspromoted from development-only to production. They now talk to any running Editor, and the Pipeline package (com.unity.pipeline) resolves from the Unity UPM registry intoPackages/manifest.json— no internal-network clone or SSH. Moved into a new "Connected Editors" section; dropped--ssh/--install-samples/--install-testsfrompipeline install; corrected thecommandaliases tocmd,request.- Auth: the CLI and the Hub now store sign-in credentials separately (previously a shared keyring session).
unity license listnow reports a clear error and a non-zero exit when the licensing client is unavailable (previously an empty list).unity bugcollects the same diagnostic system information as the Hub bug reporter (including GPU details).- Refreshed the latest-version note to
0.1.0-beta.8.
Removed
unity implode— removed (useunity self-uninstall).- Dropped some no-longer-existent command wrappers.
CLI 0.1.0-beta.7 (2026-06-17)
Added
- License management (
unity license) —list,status,activate(--serial/--personal/--floating/--file/--generate-request, mutually exclusive modes),return, andserver list|status. Documented the expected exit codes (4when no license / floating server is configured). unity hub install— bootstrap Unity Hub from the CLI, with--force,--headless(Windows),--architecture,--hub-version, and--skip-signature-check; documented SHA-512 + code-signature fail-closed verification.unity test— run EditMode/PlayMode tests via the Editor's built-in test runner, with--mode,--filter,--output,--editor-version,--editor-path,--architecture,--allow-install, and--timeout(UNITY_TEST_TIMEOUT).unity editors path <version>— print an installed editor's directory (local, offline); clarified its distinction fromeditors install-path.- Projects source control & cloud —
unity projects clone,projects link cloud|vcs,projects unlink cloud|vcs(--unlink-workspace), and the full source-control flag set onprojects create/link vcs(--vcs,--git-namespace,--git-repo,--git-visibility,--git-default-branch,--git-token/--git-token-stdin,--no-initial-commit,--git-lfs,--vcs-region). Alsoprojects create --cloud/--cloud-project, and--templateaccepting a.tgz/directory. unity buildAndroid signing & export —--android-export-type,--android-keystore-base64,--android-keystore-password,--android-key-alias,--android-key-alias-password,--android-target-sdk-version,--android-symbol-type,--android-version-code.- New env vars
UNITY_TEST_TIMEOUTandUNITY_CLOUD_ORG; new exit code4(precondition not met). - Notes on the branded landing-surface header, the CLI's own
cli-log.json, shared keyring sign-in with Hub, manifest-driven per-module install commands, partial-download self-heal, and terminal output hardening.
Changed
- Corrected command availability. Commands previously presented as generally
available were regrouped; several are not part of the published CLI's
--help. (pipeline,command, andstatuswere later promoted to production in0.1.0-beta.8.) unity templates editexpanded with its full editable-field flag set and the "at least one field required" rule.- Refreshed the latest-version note to
0.1.0-beta.7.
CLI 0.1.0-beta.6 — prior baseline
The previous skill revision documented CLI 0.1.0-beta.6: Unity Cloud
(unity cloud …), proxy support (unity config proxy, --proxy,
--proxy-disable), analytics consent (unity analytics …), custom templates
(templates create|edit|delete|location, --type), unity status,
and build versioning (--versioning-strategy,
--build-version).