nccgs 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (278) hide show
  1. package/.claude/agents/nccgs-accessibility-specialist.md +26 -0
  2. package/.claude/agents/nccgs-adversarial-reviewer.md +26 -0
  3. package/.claude/agents/nccgs-ai-programmer.md +26 -0
  4. package/.claude/agents/nccgs-analytics-engineer.md +26 -0
  5. package/.claude/agents/nccgs-art-direction-lead.md +26 -0
  6. package/.claude/agents/nccgs-audio-direction-lead.md +26 -0
  7. package/.claude/agents/nccgs-creative-director.md +26 -0
  8. package/.claude/agents/nccgs-documentation-manager.md +26 -0
  9. package/.claude/agents/nccgs-economy-designer.md +26 -0
  10. package/.claude/agents/nccgs-engine-programmer.md +26 -0
  11. package/.claude/agents/nccgs-game-design-lead.md +26 -0
  12. package/.claude/agents/nccgs-game-designer.md +26 -0
  13. package/.claude/agents/nccgs-gameplay-programmer.md +26 -0
  14. package/.claude/agents/nccgs-level-designer.md +26 -0
  15. package/.claude/agents/nccgs-live-ops-designer.md +26 -0
  16. package/.claude/agents/nccgs-localization-lead.md +26 -0
  17. package/.claude/agents/nccgs-narrative-lead.md +26 -0
  18. package/.claude/agents/nccgs-network-programmer.md +26 -0
  19. package/.claude/agents/nccgs-performance-analyst.md +26 -0
  20. package/.claude/agents/nccgs-producer.md +26 -0
  21. package/.claude/agents/nccgs-production-coordinator.md +23 -0
  22. package/.claude/agents/nccgs-programming-lead.md +26 -0
  23. package/.claude/agents/nccgs-prototyper.md +26 -0
  24. package/.claude/agents/nccgs-qa-engineer.md +26 -0
  25. package/.claude/agents/nccgs-qa-lead.md +26 -0
  26. package/.claude/agents/nccgs-release-engineer.md +26 -0
  27. package/.claude/agents/nccgs-release-lead.md +26 -0
  28. package/.claude/agents/nccgs-security-engineer.md +26 -0
  29. package/.claude/agents/nccgs-sound-designer.md +26 -0
  30. package/.claude/agents/nccgs-systems-designer.md +26 -0
  31. package/.claude/agents/nccgs-technical-architect.md +26 -0
  32. package/.claude/agents/nccgs-technical-artist.md +26 -0
  33. package/.claude/agents/nccgs-technical-director.md +26 -0
  34. package/.claude/agents/nccgs-tools-programmer.md +26 -0
  35. package/.claude/agents/nccgs-ui-programmer.md +26 -0
  36. package/.claude/agents/nccgs-unity-build-specialist.md +26 -0
  37. package/.claude/agents/nccgs-unity-content-specialist.md +26 -0
  38. package/.claude/agents/nccgs-unity-implementer.md +26 -0
  39. package/.claude/agents/nccgs-unity-rendering-specialist.md +26 -0
  40. package/.claude/agents/nccgs-unity-systems-specialist.md +26 -0
  41. package/.claude/agents/nccgs-unity-ui-specialist.md +26 -0
  42. package/.claude/agents/nccgs-ux-designer.md +26 -0
  43. package/.claude/agents/nccgs-verification-engineer.md +26 -0
  44. package/.claude/agents/nccgs-world-builder.md +26 -0
  45. package/.claude/agents/nccgs-writer.md +26 -0
  46. package/.claude/nccgs/THIRD_PARTY_NOTICES.md +13 -0
  47. package/.claude/nccgs/VERSION +1 -0
  48. package/.claude/nccgs/constitution.md +131 -0
  49. package/.claude/nccgs/hooks/agent-audit.mjs +10 -0
  50. package/.claude/nccgs/hooks/common.mjs +41 -0
  51. package/.claude/nccgs/hooks/post-compact.mjs +1 -0
  52. package/.claude/nccgs/hooks/pre-compact.mjs +8 -0
  53. package/.claude/nccgs/hooks/protect-git.mjs +22 -0
  54. package/.claude/nccgs/hooks/protect-write.mjs +17 -0
  55. package/.claude/nccgs/hooks/session-start.mjs +15 -0
  56. package/.claude/nccgs/hooks/session-stop.mjs +7 -0
  57. package/.claude/nccgs/protocols/agent-contract.md +34 -0
  58. package/.claude/nccgs/protocols/context-packets.md +13 -0
  59. package/.claude/nccgs/protocols/evidence.md +15 -0
  60. package/.claude/nccgs/protocols/model-routing.md +22 -0
  61. package/.claude/nccgs/protocols/orchestration.md +26 -0
  62. package/.claude/nccgs/protocols/unity-boundary.md +11 -0
  63. package/.claude/nccgs/settings.fragment.json +77 -0
  64. package/.claude/nccgs/studio.json +347 -0
  65. package/.claude/nccgs/tools/configure-models.mjs +39 -0
  66. package/.claude/nccgs/unity-skills-manifest.json +727 -0
  67. package/.claude/nccgs/workflow-catalog.json +317 -0
  68. package/.claude/rules/nccgs-canonical-docs.md +19 -0
  69. package/.claude/rules/nccgs-editor-tools.md +12 -0
  70. package/.claude/rules/nccgs-localization.md +12 -0
  71. package/.claude/rules/nccgs-networking.md +13 -0
  72. package/.claude/rules/nccgs-performance.md +14 -0
  73. package/.claude/rules/nccgs-rendering.md +16 -0
  74. package/.claude/rules/nccgs-security.md +13 -0
  75. package/.claude/rules/nccgs-tests.md +18 -0
  76. package/.claude/rules/nccgs-ui.md +14 -0
  77. package/.claude/rules/nccgs-unity-assets.md +21 -0
  78. package/.claude/rules/nccgs-unity-code.md +22 -0
  79. package/.claude/skills/accessibility-review/SKILL.md +14 -0
  80. package/.claude/skills/architecture-decision/SKILL.md +14 -0
  81. package/.claude/skills/asset-audit/SKILL.md +14 -0
  82. package/.claude/skills/audit/SKILL.md +16 -0
  83. package/.claude/skills/audit/references/dimensions.md +46 -0
  84. package/.claude/skills/balance-review/SKILL.md +14 -0
  85. package/.claude/skills/bug-triage/SKILL.md +14 -0
  86. package/.claude/skills/build-live-game/SKILL.md +317 -0
  87. package/.claude/skills/build-live-game/references/achievements.md +779 -0
  88. package/.claude/skills/build-live-game/references/apis.md +280 -0
  89. package/.claude/skills/build-live-game/references/authentication.md +437 -0
  90. package/.claude/skills/build-live-game/references/battlepass.md +860 -0
  91. package/.claude/skills/build-live-game/references/cloud-code.md +563 -0
  92. package/.claude/skills/build-live-game/references/cloud-save.md +474 -0
  93. package/.claude/skills/build-live-game/references/deployment.md +216 -0
  94. package/.claude/skills/build-live-game/references/player-account.md +813 -0
  95. package/.claude/skills/build-live-game/references/remote-config.md +96 -0
  96. package/.claude/skills/build-live-game/references/tooling.md +431 -0
  97. package/.claude/skills/closure/SKILL.md +14 -0
  98. package/.claude/skills/code-review/SKILL.md +14 -0
  99. package/.claude/skills/compatibility-review/SKILL.md +14 -0
  100. package/.claude/skills/context-pack/SKILL.md +14 -0
  101. package/.claude/skills/dependency-review/SKILL.md +14 -0
  102. package/.claude/skills/design/SKILL.md +20 -0
  103. package/.claude/skills/design-review/SKILL.md +14 -0
  104. package/.claude/skills/evidence-review/SKILL.md +14 -0
  105. package/.claude/skills/hotfix/SKILL.md +14 -0
  106. package/.claude/skills/implement-in-app-purchases/README.md +233 -0
  107. package/.claude/skills/implement-in-app-purchases/SKILL.md +158 -0
  108. package/.claude/skills/implement-in-app-purchases/references/api-notes.md +562 -0
  109. package/.claude/skills/implement-in-app-purchases/references/codeless-catalog.md +331 -0
  110. package/.claude/skills/implement-in-app-purchases/references/convert-adapty.md +268 -0
  111. package/.claude/skills/implement-in-app-purchases/references/convert-essentialkit.md +239 -0
  112. package/.claude/skills/implement-in-app-purchases/references/convert-revenuecat.md +275 -0
  113. package/.claude/skills/implement-in-app-purchases/references/convert-unipay.md +145 -0
  114. package/.claude/skills/implement-in-app-purchases/references/migration-v4-to-v5.md +204 -0
  115. package/.claude/skills/implement-in-app-purchases/references/path-add-iap-to-new-project.md +198 -0
  116. package/.claude/skills/implement-in-app-purchases/references/path-convert-native-google-billing.md +356 -0
  117. package/.claude/skills/implement-in-app-purchases/references/path-convert-native-storekit.md +446 -0
  118. package/.claude/skills/implement-in-app-purchases/references/path-implement-iap-d2c.md +680 -0
  119. package/.claude/skills/implement-in-app-purchases/references/platform-notes.md +204 -0
  120. package/.claude/skills/implement-in-app-purchases/references/pre-check.md +205 -0
  121. package/.claude/skills/incident-recovery/SKILL.md +14 -0
  122. package/.claude/skills/initialize-ai-navigation/SKILL.md +95 -0
  123. package/.claude/skills/initialize-ai-navigation/references/navigation-system.md +794 -0
  124. package/.claude/skills/levelplay-unity-integration/CHANGELOG.md +57 -0
  125. package/.claude/skills/levelplay-unity-integration/README.md +74 -0
  126. package/.claude/skills/levelplay-unity-integration/SKILL.md +1126 -0
  127. package/.claude/skills/levelplay-unity-integration/references/banner-api.md +920 -0
  128. package/.claude/skills/levelplay-unity-integration/references/best-practices.md +536 -0
  129. package/.claude/skills/levelplay-unity-integration/references/ilrd-api.md +337 -0
  130. package/.claude/skills/levelplay-unity-integration/references/initialization-api.md +630 -0
  131. package/.claude/skills/levelplay-unity-integration/references/interstitial-api.md +899 -0
  132. package/.claude/skills/levelplay-unity-integration/references/ios-setup.md +491 -0
  133. package/.claude/skills/levelplay-unity-integration/references/migration-sdk-9.md +666 -0
  134. package/.claude/skills/levelplay-unity-integration/references/privacy-settings.md +608 -0
  135. package/.claude/skills/levelplay-unity-integration/references/rewarded-api.md +902 -0
  136. package/.claude/skills/localization/SKILL.md +135 -0
  137. package/.claude/skills/localization/references/api-notes.md +76 -0
  138. package/.claude/skills/localization/resources/L10nBatchProcessor.cs +69 -0
  139. package/.claude/skills/localization/resources/LocalizedFontAsset.cs +18 -0
  140. package/.claude/skills/localize-game/SKILL.md +14 -0
  141. package/.claude/skills/migrate-project/SKILL.md +21 -0
  142. package/.claude/skills/migrate-project/references/procedure.md +63 -0
  143. package/.claude/skills/milestone-review/SKILL.md +14 -0
  144. package/.claude/skills/new-unity-project/SKILL.md +179 -0
  145. package/.claude/skills/optimize-audio/SKILL.md +199 -0
  146. package/.claude/skills/optimize-audio/resources/audio-import-api.md +146 -0
  147. package/.claude/skills/optimize-audio/resources/platform-settings.md +48 -0
  148. package/.claude/skills/optimize-text-mesh-pro/SKILL.md +182 -0
  149. package/.claude/skills/optimize-web/SKILL.md +393 -0
  150. package/.claude/skills/optimize-web/resources/WebOptimizer.cs +21 -0
  151. package/.claude/skills/optimize-web/resources/toktx-examples.sh +11 -0
  152. package/.claude/skills/performance-audit/SKILL.md +14 -0
  153. package/.claude/skills/physics-3d-collision/SKILL.md +442 -0
  154. package/.claude/skills/physics-3d-collision/references/troubleshooting.md +41 -0
  155. package/.claude/skills/physics-3d-collision/resources/CollisionDebugger.cs +33 -0
  156. package/.claude/skills/plan-feature/SKILL.md +14 -0
  157. package/.claude/skills/playtest/SKILL.md +14 -0
  158. package/.claude/skills/project-stage/SKILL.md +14 -0
  159. package/.claude/skills/prototype-feature/SKILL.md +14 -0
  160. package/.claude/skills/qa-plan/SKILL.md +14 -0
  161. package/.claude/skills/release/SKILL.md +18 -0
  162. package/.claude/skills/release-readiness/SKILL.md +14 -0
  163. package/.claude/skills/retrospective/SKILL.md +14 -0
  164. package/.claude/skills/review/SKILL.md +16 -0
  165. package/.claude/skills/security-audit/SKILL.md +14 -0
  166. package/.claude/skills/setup-multiplayer-services/SKILL.md +39 -0
  167. package/.claude/skills/setup-multiplayer-services/references/dgs-entrypoint.md +79 -0
  168. package/.claude/skills/setup-multiplayer-services/references/entrypoints.md +213 -0
  169. package/.claude/skills/setup-multiplayer-services/references/examples.md +33 -0
  170. package/.claude/skills/setup-multiplayer-services/references/implementation-fit.md +30 -0
  171. package/.claude/skills/setup-multiplayer-services/references/underlying-services.md +11 -0
  172. package/.claude/skills/setup-multiplayer-services/references/workflows-prerequisites.md +17 -0
  173. package/.claude/skills/setup-vivox-voice-chat/SKILL.md +118 -0
  174. package/.claude/skills/setup-vivox-voice-chat/evals/.env.example +6 -0
  175. package/.claude/skills/setup-vivox-voice-chat/evals/README.md +101 -0
  176. package/.claude/skills/setup-vivox-voice-chat/evals/promptfooconfig.yaml +32 -0
  177. package/.claude/skills/setup-vivox-voice-chat/evals/tests/init-and-login.yaml +76 -0
  178. package/.claude/skills/setup-vivox-voice-chat/evals/tests/text-chat.yaml +65 -0
  179. package/.claude/skills/setup-vivox-voice-chat/evals/tests/voice-channels.yaml +74 -0
  180. package/.claude/skills/setup-vivox-voice-chat/references/events-and-participants.md +79 -0
  181. package/.claude/skills/setup-vivox-voice-chat/references/init-and-login.md +92 -0
  182. package/.claude/skills/setup-vivox-voice-chat/references/text-chat.md +93 -0
  183. package/.claude/skills/setup-vivox-voice-chat/references/troubleshooting.md +47 -0
  184. package/.claude/skills/setup-vivox-voice-chat/references/voice-channels.md +90 -0
  185. package/.claude/skills/shader-graph-create-custom-node/SKILL.md +25 -0
  186. package/.claude/skills/shader-graph-create-custom-node/resources/all_hints.hlsl +182 -0
  187. package/.claude/skills/sprint-plan/SKILL.md +14 -0
  188. package/.claude/skills/sprite-editor/SKILL.md +66 -0
  189. package/.claude/skills/sprite-editor/references/api_reference.md +151 -0
  190. package/.claude/skills/sprite-editor/references/background.md +112 -0
  191. package/.claude/skills/sprite-editor/references/templates.md +72 -0
  192. package/.claude/skills/sprite-editor/scripts/AutomaticSliceTexture.cs +40 -0
  193. package/.claude/skills/sprite-editor/scripts/GenerateNewSpriteRects.cs +200 -0
  194. package/.claude/skills/sprite-editor/scripts/GetTextureSourceImageSize.cs +32 -0
  195. package/.claude/skills/sprite-editor/scripts/GetTextureToSlice.cs +55 -0
  196. package/.claude/skills/sprite-editor/scripts/GridSliceTexture.cs +40 -0
  197. package/.claude/skills/sprite-editor/scripts/IsometricSliceTexture.cs +141 -0
  198. package/.claude/skills/sprite-editor/scripts/README.md +134 -0
  199. package/.claude/skills/sprite-editor/scripts/SetPivotExample.cs +58 -0
  200. package/.claude/skills/sprite-editor/scripts/SpriteToPng.cs +88 -0
  201. package/.claude/skills/status/SKILL.md +16 -0
  202. package/.claude/skills/story-readiness/SKILL.md +14 -0
  203. package/.claude/skills/test/SKILL.md +16 -0
  204. package/.claude/skills/ui/SKILL.md +142 -0
  205. package/.claude/skills/ui-imgui/SKILL.md +186 -0
  206. package/.claude/skills/ui-imgui/references/gui-elements.md +156 -0
  207. package/.claude/skills/ui-imgui/references/templates.md +141 -0
  208. package/.claude/skills/ui-review/SKILL.md +14 -0
  209. package/.claude/skills/ui-ugui/SKILL.md +282 -0
  210. package/.claude/skills/ui-ugui/references/scrollview-setup.md +29 -0
  211. package/.claude/skills/ui-uitk/SKILL.md +235 -0
  212. package/.claude/skills/ui-uitk/references/common-issues.md +74 -0
  213. package/.claude/skills/ui-uitk/references/custom-elements.md +241 -0
  214. package/.claude/skills/ui-uitk/references/painter2d.md +282 -0
  215. package/.claude/skills/ui-uitk/references/pointermanipulator-guide.md +94 -0
  216. package/.claude/skills/ui-uitk/references/svg-icons.md +136 -0
  217. package/.claude/skills/ui-uitk/references/ui-runtime-binding.md +234 -0
  218. package/.claude/skills/ui-uitk/references/uss-guide.md +138 -0
  219. package/.claude/skills/unity-cli/CHANGELOG.md +233 -0
  220. package/.claude/skills/unity-cli/SECURITY.md +22 -0
  221. package/.claude/skills/unity-cli/SKILL.md +414 -0
  222. package/.claude/skills/unity-cli/references/auth-license-cloud.md +146 -0
  223. package/.claude/skills/unity-cli/references/build-run-test.md +349 -0
  224. package/.claude/skills/unity-cli/references/collaboration.md +472 -0
  225. package/.claude/skills/unity-cli/references/config-hub.md +103 -0
  226. package/.claude/skills/unity-cli/references/diagnostics-maintenance.md +326 -0
  227. package/.claude/skills/unity-cli/references/editors-install.md +327 -0
  228. package/.claude/skills/unity-cli/references/integration-advanced.md +472 -0
  229. package/.claude/skills/unity-cli/references/projects-templates.md +574 -0
  230. package/.claude/skills/unity-package-management/SKILL.md +304 -0
  231. package/.claude/skills/unity-package-management/references/select-packages.md +108 -0
  232. package/.claude/skills/urp-postprocessing/SKILL.md +188 -0
  233. package/.claude/skills/urp-postprocessing/references/code-templates.md +119 -0
  234. package/.claude/skills/urp-postprocessing/references/effect-reference.md +86 -0
  235. package/.claude/skills/validate-urp-render-graph-renderer-feature/SKILL.md +269 -0
  236. package/.claude/skills/work/SKILL.md +36 -0
  237. package/.claude/skills/work/references/classification.md +41 -0
  238. package/.claude/skills/work/references/closure.md +50 -0
  239. package/.claude/skills/work/references/feature-contracts.md +32 -0
  240. package/.claude/skills/work/references/verification.md +26 -0
  241. package/CLAUDE.md +6 -0
  242. package/LICENSE +21 -0
  243. package/README.md +162 -0
  244. package/THIRD_PARTY_NOTICES.md +23 -0
  245. package/UPGRADING.md +32 -0
  246. package/VERSION +1 -0
  247. package/docs/ARCHITECTURE.md +73 -0
  248. package/docs/HUONG-DAN-MIGRATE-VA-SU-DUNG.md +324 -0
  249. package/docs/MIGRATION-MATRIX.md +23 -0
  250. package/docs/PROJECT-POLICY.md +67 -0
  251. package/docs/WORKFLOWS.md +61 -0
  252. package/package-assets/setup-vivox-voice-chat-evals.gitignore +7 -0
  253. package/package.json +41 -0
  254. package/scaffold/.nccgs/bugs/.gitkeep +1 -0
  255. package/scaffold/.nccgs/closures/.gitkeep +1 -0
  256. package/scaffold/.nccgs/context/.gitkeep +1 -0
  257. package/scaffold/.nccgs/decisions/.gitkeep +1 -0
  258. package/scaffold/.nccgs/evidence/.gitkeep +1 -0
  259. package/scaffold/.nccgs/features/.gitkeep +1 -0
  260. package/scaffold/.nccgs/migrations/.gitkeep +1 -0
  261. package/scaffold/.nccgs/playtests/.gitkeep +1 -0
  262. package/scaffold/.nccgs/project.yaml +103 -0
  263. package/scaffold/.nccgs/requirements.yaml +10 -0
  264. package/scaffold/.nccgs/reviews/.gitkeep +1 -0
  265. package/scaffold/.nccgs/state.md +40 -0
  266. package/scaffold/.nccgs/templates/agent-handoff.md +25 -0
  267. package/scaffold/.nccgs/templates/architecture-decision.md +27 -0
  268. package/scaffold/.nccgs/templates/closure-record.md +51 -0
  269. package/scaffold/.nccgs/templates/context-packet.yaml +17 -0
  270. package/scaffold/.nccgs/templates/evidence-record.md +23 -0
  271. package/scaffold/.nccgs/templates/feature-contract.md +35 -0
  272. package/scaffold/.nccgs/templates/migration-plan.md +40 -0
  273. package/scaffold/.nccgs/templates/waiver.md +11 -0
  274. package/scripts/cli.mjs +56 -0
  275. package/scripts/install.mjs +267 -0
  276. package/scripts/sync-unity-skills.mjs +126 -0
  277. package/scripts/validate.mjs +205 -0
  278. package/tests/framework.test.mjs +121 -0
@@ -0,0 +1,326 @@
1
+ # Diagnostics & maintenance — unity-cli command reference
2
+
3
+ Part of the **`unity-cli`** skill. See that skill's `SKILL.md` for CLI install, global flags,
4
+ environment variables, exit codes, and common workflows. All global flags (`--format json`,
5
+ `--non-interactive`, `--yes`, `--proxy`, …) apply to every command below.
6
+
7
+ ---
8
+
9
+ ### Logs — application logs
10
+
11
+ ```bash
12
+ # Show last 20 log lines (default)
13
+ unity logs
14
+
15
+ # Show last 50 lines
16
+ unity logs --tail 50
17
+
18
+ # Follow in real-time (like tail -f)
19
+ unity logs --follow
20
+
21
+ # Filter by level
22
+ unity logs --level error
23
+ unity logs --level warn
24
+
25
+ # Available levels: trace, debug, info, warn, error, fatal
26
+ ```
27
+
28
+ The CLI writes its own `cli-log.json` (separate from the Hub's `info-log.json`) and records its version on every start. `unity logs`, `unity bug`, and `unity doctor` read the CLI's own log.
29
+
30
+ > **Not the Unity Editor log.** `unity logs` shows the *CLI's* activity, **not** the Editor's
31
+ > `Editor.log`. To read Editor-side output — for example the compile errors that force an Editor into
32
+ > Safe Mode and block the Pipeline connection — read `Editor.log` directly (see
33
+ > [integration-advanced.md → Recovering from Safe Mode](integration-advanced.md#recovering-from-safe-mode-connection-fails-because-of-compile-errors) for its per-platform path and the full recovery loop).
34
+
35
+ ---
36
+
37
+ ### Doctor — system diagnostics
38
+
39
+ ```bash
40
+ # Full system report
41
+ unity doctor --format json
42
+
43
+ # Includes: platform info, auth status, installed editors, recent log lines, resolved proxy
44
+ unity doctor --tail 50
45
+ ```
46
+
47
+ `unity doctor` reports real session state (matching `unity auth status`) and surfaces the resolved proxy URL, its source, and auth source. It also runs environment health checks and reports pass/warn per check (in every output format): whether the `unity` binary's directory is actually on `PATH` (the top post-install pitfall on Windows, where a new terminal is needed), whether multiple `unity` binaries shadow each other on `PATH`, whether Windows long-path support is enabled, and whether a git credential helper is configured (`git-credential-helper`: advisory for the git-token flows in `projects clone`/`create`/`link vcs`; the row is omitted on machines without git).
48
+
49
+ ---
50
+
51
+ ### Doctor --ci — preflight before a long pipeline step
52
+
53
+ ```bash
54
+ # First step of a CI job: fail in seconds instead of after a long build
55
+ unity doctor --ci
56
+
57
+ # Per-check results a workflow can branch on
58
+ unity doctor --ci --format json
59
+
60
+ # Failed checks become inline annotations on the pull request
61
+ unity doctor --ci --format github
62
+ ```
63
+
64
+ `--ci` replaces the diagnostic report with a **preflight**: it verifies the environment can actually finish a build or test run and exits non-zero when it cannot, so a pipeline fails fast rather than tens of minutes into a build. It checks an activatable license, the project's required editor, free disk space, and reachability of the Unity services endpoint, and folds the `PATH` / long-path / git-credential-helper checks in as advisory rows that never fail a job.
65
+
66
+ Exit codes distinguish the two kinds of bad news, so a workflow can retry only what is worth retrying:
67
+
68
+ | Exit | Meaning |
69
+ |---|---|
70
+ | `0` | Every blocking check passed. Warnings do not fail the preflight. |
71
+ | `6` | A definitive failure — no license, the required editor is not installed, disk below the floor. Retrying will not help. |
72
+ | `7` | The preflight could not reach a verdict because a required service was unreachable. Worth a retry. |
73
+
74
+ A `6` outranks a `7` when both occur, so a real blocker is never reported as retryable.
75
+
76
+ Every check carries a machine-readable `code` (`LICENSE_NONE`, `EDITOR_NOT_INSTALLED`, `DISK_SPACE_LOW`, `NETWORK_UNREACHABLE`, …) plus a remediation `hint`. In `--format json` the per-check results stay in `data` even on failure, with one coded entry per failure in `errors`. Output is redacted and carries no tokens and no absolute user paths, so it is safe to paste into a public CI log.
77
+
78
+ `--ci` is always explicit — it is never inferred from `CI=true`, because a report that silently changed shape and exit code on a runner would be a trap. Note that the CLI already defaults to `--format tsv` whenever stdout is redirected, which in CI it usually is; that output leads with a `verdict` row.
79
+
80
+ ---
81
+
82
+ ### Diagnose proxy — proxy diagnostic report
83
+
84
+ ```bash
85
+ # Print a redacted, paste-safe proxy diagnostic report for support
86
+ unity diagnose proxy
87
+
88
+ # Machine-readable
89
+ unity diagnose proxy --json
90
+ ```
91
+
92
+ Reports the resolved proxy and where it came from, PAC configuration, CA bundle, and credential-store and Kerberos checks — redacted so it's safe to paste into a support ticket. A copy is also written to the logs directory. For per-request proxy logging over the course of a repro, use the global `--log-proxy` flag (or `UNITY_LOG_PROXY=1`), which writes one redacted entry per outbound request to `proxy-request.json`.
93
+
94
+ ---
95
+
96
+ ### Environment
97
+
98
+ ```bash
99
+ # Show environment paths
100
+ unity env --format json
101
+
102
+ # Returns: user data path, editor install path, download cache path, config path, CLI version, resolved proxy
103
+ ```
104
+
105
+ ---
106
+
107
+ ### Cache
108
+
109
+ ```bash
110
+ # Show cache location and size
111
+ unity cache info --format json
112
+
113
+ # Clear download cache
114
+ unity cache clean --yes
115
+ ```
116
+
117
+ ---
118
+
119
+ ### Cache key — deterministic key for CI cache steps
120
+
121
+ `unity cache key` prints one hash derived from the inputs that actually invalidate a project's build cache: the editor version, the resolved package set, and (optionally) the build target. Use it as the `key:` of a CI cache step instead of hand-rolling the hashing.
122
+
123
+ ```bash
124
+ # Print the key for the project in the current directory
125
+ unity cache key
126
+
127
+ # Scope it to a build target — a Library/ folder is platform-specific
128
+ unity cache key --target Android
129
+
130
+ # Any project path
131
+ unity cache key ./MyProject
132
+ ```
133
+
134
+ Whenever stdout is not an interactive terminal — a pipe, a redirect, or any CI runner — the key is the only thing written to it, so it drops straight into a shell substitution or a workflow expression. (On an interactive colour terminal the CLI's usual one-line banner still prints above it, as it does for every command; `--quiet` suppresses that.)
135
+
136
+ Pass the project path if the workflow's working directory isn't the project:
137
+
138
+ ```yaml
139
+ - id: cachekey
140
+ run: echo "key=$(unity cache key MyProject --target Android)" >> "$GITHUB_OUTPUT"
141
+ - uses: actions/cache@v4
142
+ with:
143
+ path: MyProject/Library
144
+ key: Library-${{ steps.cachekey.outputs.key }}
145
+ ```
146
+
147
+ What moves the key, and what doesn't:
148
+
149
+ - **Changes** when the editor version (`ProjectSettings/ProjectVersion.txt`), the package set (`Packages/packages-lock.json`, falling back to `Packages/manifest.json`), or `--target` changes.
150
+ - **Does not change** for unrelated edits — scenes, scripts, assets, or project settings other than the version file.
151
+ - **Is identical across machines and operating systems** for the same inputs. Line endings and a UTF-8 BOM are normalized before hashing, so a Windows checkout with `core.autocrlf` and a Linux one agree. No paths, usernames, or timestamps enter the hash.
152
+
153
+ `--format json` returns the key plus each component's raw value and hash, so one invocation can build a layered key with fallback levels:
154
+
155
+ ```bash
156
+ unity cache key --target Android --format json
157
+ ```
158
+
159
+ `--component <editor|packages|target>` prints just one component's hash for the fallback levels themselves. Under `--format json` it also sets `data.key` to that component, so `jq -r .data.key` means the same thing either way:
160
+
161
+ ```bash
162
+ # Restore any cache built for this editor, whatever the packages were
163
+ unity cache key --component editor
164
+ ```
165
+
166
+ Runs without an editor and without network access. Exit 2 on an unknown `--target` or `--component` (a silently-accepted typo would produce a key nothing else matches); exit 6 when the directory isn't a Unity project. A project with neither package file still emits a key, with a warning that it doesn't cover the package set.
167
+
168
+ ---
169
+
170
+ ### Analytics — usage/telemetry consent
171
+
172
+ The CLI defaults to **opt-out**. On the first interactive run a prompt is shown once before any data is collected; it now requires an explicit `y` or `n` — pressing Enter alone re-asks instead of silently recording the opt-out default, so an accidental keystroke can't lock in an answer. Ctrl-C skips the prompt and keeps the opt-out default. Non-interactive, CI, piped, and `--quiet` contexts silently keep the opt-out default.
173
+
174
+ Running `unity analytics opt-in` or `opt-out` permanently answers the first-run prompt, so a choice recorded from a script (where the prompt never appears) isn't asked again on the next interactive run. To suppress the prompt *without* recording a choice — for a wrapper script on an interactive terminal that must never absorb it — set `UNITY_NO_CONSENT_PROMPT` (analytics stay off until you explicitly opt in).
175
+
176
+ ```bash
177
+ # Show current consent status
178
+ unity analytics status
179
+ unity analytics status --format json
180
+
181
+ # Opt in to anonymous usage data collection
182
+ unity analytics opt-in
183
+
184
+ # Opt out (the default)
185
+ unity analytics opt-out
186
+ ```
187
+
188
+ Consent is stored in the shared Hub privacy preferences, so opting out in the CLI also opts out in Hub, and vice versa. When opted **in**, the CLI records which commands run (registered command names only — never your arguments, paths, or project names), editor uninstalls, project open/create (editor version and template id only), CLI self-upgrade/uninstall outcomes, `unity shell` and `unity mcp` session usage, and `unity doctor` / `unity bug` results. When opted out (the default), no events are sent.
189
+
190
+ Separately from analytics, the CLI reports **anonymous crashes and errors** via Sentry to help fix bugs (no IP address or hostname; home-directory paths and token-like values scrubbed before send), aligned with the Unity Hub. Opting in to analytics additionally attaches an anonymized machine id so crash-free-user rates can be computed; opted-out users stay fully anonymous. Set `UNITY_NO_CRASH_REPORT` to disable crash reporting entirely.
191
+
192
+ ---
193
+
194
+ ### Changelog
195
+
196
+ Show the embedded release notes for the currently installed CLI version:
197
+
198
+ ```bash
199
+ unity changelog
200
+ unity changelog --format json
201
+ ```
202
+
203
+ ---
204
+
205
+ ### Language
206
+
207
+ ```bash
208
+ # Show current language and available options
209
+ unity language
210
+
211
+ # Set language by code
212
+ unity language --set en
213
+ unity language --set ja
214
+ unity language --set zh-hans
215
+
216
+ # Alias
217
+ unity lang --set ko
218
+ ```
219
+
220
+ On a TTY with no flags, shows an interactive selection prompt. `--set` accepts common spellings of a language code — BCP-47 (`ja-JP`), locale (`ja_JP`), a bare language (`ja`), or a bare region (`jp`) — and resolves them case-insensitively when the match is unambiguous (`zh` still asks you to pick `zh_cn` or `zh_tw`). Display names and ordering come from the shared Hub language catalog. The regional variants Spanish (Latin America), French (Canada), and Portuguese (Portugal) are no longer offered; Spanish, French, and Portuguese (Brazil) remain.
221
+
222
+ ---
223
+
224
+ ### Completion — shell tab completion
225
+
226
+ Generate and install shell completion scripts:
227
+
228
+ ```bash
229
+ # Supported shells: bash, zsh, fish, powershell
230
+ unity completion bash
231
+ unity completion zsh
232
+ unity completion fish
233
+ unity completion powershell
234
+ ```
235
+
236
+ ---
237
+
238
+ ### Bug — report a bug
239
+
240
+ Interactive bug reporter that collects system info and recent logs, then submits to Unity:
241
+
242
+ ```bash
243
+ # Interactive — prompts for each field
244
+ unity bug
245
+
246
+ # Non-interactive — supply the report through flags (works from scripts, CI, piped shells)
247
+ unity bug \
248
+ --title "Editor crashes on project open" \
249
+ --description "Opening MyGame hard-crashes the editor." \
250
+ --steps "Open the CLI" --steps "Run unity open MyGame" --steps "Editor window closes" \
251
+ --reproducibility always \
252
+ --email you@example.com \
253
+ --attachments ./crash.log ./notes.txt \
254
+ --share-project .
255
+ ```
256
+
257
+ Prompts for title, description, email, and reproducibility level. As of `0.1.0-beta.8` it collects the same diagnostic system information as the Unity Hub bug reporter (including GPU details).
258
+
259
+ The report can also be supplied entirely through flags — `--title`, `--description`, `--steps` (repeatable, one line per value), `--reproducibility <first-time|sometimes|always>`, and `--email` (defaults to your Unity account email when signed in; otherwise required). On a terminal, any flags you pass skip their prompts and the remaining fields still ask; a non-interactive run submits without prompting. A non-interactive run with missing or invalid fields fails fast with a usage error (exit 2) listing the exact flags to add.
260
+
261
+ Use `--attachments <paths...>` (repeatable) to attach extra files — for example a crash log or a zipped copy of a subset of assets. Each path must be an existing, readable file; a folder is rejected (zip it yourself first), and a missing or unreadable path fails fast with a usage error (exit 2) naming the offending path.
262
+
263
+ Use `--share-project <path>` (use `.` for the current directory) to attach a copy of the Unity project the bug is about — the same stripped-project packaging the Editor's bug reporter uses. It sends the source folders plus a slimmed `Library`, excluding the regenerable caches and build output (`Library` caches, `Temp`, `Build`, `Logs`, VCS/IDE metadata, `MemoryCaptures`, `CrashReports`), so you don't have to zip the project yourself. A path that isn't a Unity project fails fast with exit 2. The archive is streamed from disk during upload, so there's no size limit — even a multi-gigabyte project copy uploads without being buffered in memory.
264
+
265
+ Interactively, when you don't pass `--attachments` or `--share-project`, the reporter asks whether to attach files and whether to include a project copy. Everything — attachments and the project copy — is bundled into the same archive as the auto-collected logs.
266
+
267
+ ---
268
+
269
+ ### Upgrade — update the CLI itself
270
+
271
+ ```bash
272
+ # Check for available updates
273
+ unity upgrade --check --format json
274
+
275
+ # Show changelog for the new version
276
+ unity upgrade --changelog
277
+
278
+ # Upgrade (interactive confirmation)
279
+ unity upgrade
280
+
281
+ # Upgrade without prompts
282
+ unity upgrade --yes
283
+
284
+ # Install a specific version
285
+ unity upgrade --target 0.2.0
286
+
287
+ # Select update channel (stable or beta)
288
+ unity upgrade --channel beta
289
+
290
+ # Dry-run: show what would change
291
+ unity upgrade --dry-run
292
+
293
+ # Rollback to previous version
294
+ unity upgrade --rollback
295
+ ```
296
+
297
+ `unity upgrade` detects how the CLI was installed and upgrades accordingly:
298
+
299
+ - **`curl | sh` install** — keeps upgrading itself in place.
300
+ - **Linux AppImage** — updates in place: downloads the new `.AppImage` artifact, verifies its checksum against the release manifest, and atomically replaces the AppImage you launched (`--rollback` restores the previous one). The embedded zsync update info is preserved, so external updaters (AppImageUpdate, Gear Lever) keep working.
301
+ - **Package-manager install** — points you at the owning manager instead of replacing the binary. The `.deb` and `.rpm` packages are published to Unity's apt and rpm repositories on every beta and GA release (rpm packages are GPG-signed), so a package-managed install stays current through the system package manager: `sudo apt update && sudo apt upgrade unity-cli` on Debian/Ubuntu, `sudo dnf upgrade unity-cli` on Fedora/RHEL.
302
+
303
+ `--check`, `--changelog`, and `--dry-run` work everywhere. The background "update available" notice is package-manager-aware: when the release manifest says your install's package manager already carries the new version, the notice suggests that manager's exact upgrade command instead of `unity upgrade`; installs whose manager doesn't carry the release yet stay quiet.
304
+
305
+ ---
306
+
307
+ ### Self-uninstall — remove the CLI
308
+
309
+ ```bash
310
+ # Uninstall the CLI (interactive confirmation)
311
+ unity self-uninstall
312
+
313
+ # Uninstall without prompts
314
+ unity self-uninstall --yes
315
+
316
+ # Also remove config and data files
317
+ unity self-uninstall --purge --yes
318
+
319
+ # Dry-run: show what would be removed
320
+ unity self-uninstall --dry-run
321
+ ```
322
+
323
+ > **`unity implode` was removed** in `0.1.0-beta.8` (it was previously a deprecated alias). Use `unity self-uninstall`.
324
+
325
+ ---
326
+
@@ -0,0 +1,327 @@
1
+ # Editors, install & modules — unity-cli command reference
2
+
3
+ Part of the **`unity-cli`** skill. See that skill's `SKILL.md` for CLI install, global flags,
4
+ environment variables, exit codes, and common workflows. All global flags (`--format json`,
5
+ `--non-interactive`, `--yes`, `--proxy`, …) apply to every command below.
6
+
7
+ ---
8
+
9
+ ### Editors — list, install, uninstall
10
+
11
+ ```bash
12
+ # List all editors (installed + available releases)
13
+ # Short alias: unity e. The bare `unity editors` is shorthand for the explicit `unity editors list` (matches projects/templates/modules)
14
+ unity editors list --format json
15
+
16
+ # List only installed editors
17
+ # As of 0.1.0-beta.8 the --installed table includes an "Upgrade to" column flagging editors with a newer patch in their line
18
+ unity editors --installed --format json
19
+
20
+ # List only available releases
21
+ unity editors --releases --format json
22
+
23
+ # Filter by architecture
24
+ unity editors --installed --architecture arm64 --format json
25
+
26
+ # Show detailed module info
27
+ unity editors --verbose
28
+
29
+ # Watch mode — live-updates as editors are installed or removed
30
+ unity editors --watch
31
+ unity editors --installed --watch
32
+ ```
33
+
34
+ `unity editors` honors `--format tsv` and `--format ndjson` for its default listing. Identifier columns keep their natural width even if the table exceeds the terminal — they are no longer silently truncated.
35
+
36
+ #### editors running
37
+
38
+ List the Unity Editor instances currently running and the project each has open, with the editor version and process id per instance:
39
+
40
+ ```bash
41
+ unity editors running
42
+ unity editors running --format json
43
+ ```
44
+
45
+ Detection is cross-platform (process table plus each project's Pipeline lockfile), and the version falls back to a project's `ProjectSettings/ProjectVersion.txt` for editors without the Pipeline package. An empty list is a normal result (exit 0). Honors the global `--format human|json|tsv|ndjson` (and `--json`).
46
+
47
+ #### editors add
48
+
49
+ Register one or more existing editor installations by path:
50
+
51
+ ```bash
52
+ unity editors add /path/to/Unity/Editor
53
+
54
+ # Register multiple at once
55
+ unity editors add /path/one /path/two
56
+
57
+ # Skip macOS code-signature check (useful for unsigned or side-loaded builds)
58
+ unity editors add /path/to/Unity/Editor --skip-signature-check
59
+ ```
60
+
61
+ #### editors default
62
+
63
+ ```bash
64
+ # Show current default editor
65
+ unity editors default --format json
66
+
67
+ # Set default by version, alias, or keyword
68
+ unity editors default 6000.0.47f1
69
+ unity editors default latest
70
+ unity editors default lts
71
+
72
+ # Clear the default
73
+ unity editors default --unset
74
+ ```
75
+
76
+ On a TTY with no arguments, shows an interactive selection prompt.
77
+
78
+ #### editors path
79
+
80
+ ```bash
81
+ # Print the install directory of an installed editor (local, offline — no release-feed fetch)
82
+ unity editors path 6000.0.47f1
83
+ unity editors path 6000.0.47f1 --architecture arm64 --json
84
+ ```
85
+
86
+ Honors `--architecture` and `--format` / `--json`, and reports ambiguous matches so you can narrow by version or architecture.
87
+
88
+ #### editors install-path
89
+
90
+ ```bash
91
+ # Show the directory where editors are installed
92
+ unity editors install-path
93
+
94
+ # Set a new install path
95
+ unity editors install-path --set /path/to/editors
96
+ ```
97
+
98
+ Also available as the top-level `unity install-path` (with an additional `--get` flag). Distinct from `editors path`: `install-path` gets/sets the *root* install directory; `editors path` prints the install directory of *one* editor version.
99
+
100
+ #### editors info
101
+
102
+ ```bash
103
+ # Show release details for a specific version
104
+ unity editors info 6000.0.47f1 --format json
105
+ ```
106
+
107
+ #### editors upgrade
108
+
109
+ New in `0.1.0-beta.8`. Upgrade an installed editor to the newest official (f-channel) patch in the same `major.minor` line (e.g. `2022.3.10f1` → `2022.3.62f1`), carrying the installed modules over. The `[editor]` argument accepts an exact version, a `major.minor` line, or the `latest` / `lts` / `default` aliases. Editors install side by side — the old version is kept unless `--replace` (alias `--remove-old`) is passed.
110
+
111
+ ```bash
112
+ # Upgrade a specific editor (or the default / lts / latest) to the newest patch in its line
113
+ unity editors upgrade 2022.3.10f1
114
+ unity editors upgrade lts
115
+
116
+ # Upgrade every installed editor that has a newer patch
117
+ unity editors upgrade --all --yes --accept-eula
118
+
119
+ # Report current → target without installing (--check is an alias for --dry-run)
120
+ unity editors upgrade --all --dry-run --format json
121
+
122
+ # Remove the old editor after a successful upgrade; skip carrying modules; add extra modules
123
+ unity editors upgrade 2022.3.10f1 --replace --yes
124
+ unity editors upgrade 2022.3.10f1 --no-modules
125
+ unity editors upgrade 2022.3.10f1 --module android --module ios
126
+ ```
127
+
128
+ #### editors prune
129
+
130
+ Finds installed editors that **no registered project uses** and, optionally, uninstalls them. Report-only by default — it never deletes anything unless you pass `--remove`.
131
+
132
+ ```bash
133
+ # Report only: which editors are unused, and how much they'd reclaim
134
+ unity editors prune
135
+
136
+ # Uninstall the unused editors (prompts to confirm)
137
+ unity editors prune --remove
138
+
139
+ # Non-interactive: --yes is REQUIRED alongside --remove in a script or CI
140
+ unity editors prune --remove --yes
141
+
142
+ # Machine output
143
+ unity editors prune --format json
144
+ ```
145
+
146
+ The report lists version, architecture, path, size, and status, then the total reclaimable size. With `--remove` in a non-interactive shell and no `-y, --yes`, it refuses rather than deleting unprompted. "Unused" is judged against the **project registry** (`unity projects list`), so an editor used only by a project you never registered counts as unused — register it first, or verify with `unity editors prune` before adding `--remove`.
147
+
148
+ #### editors verify
149
+
150
+ Structurally verifies an installed editor: checks that its files and modules are actually present on disk. It's the command to reach for when an editor launches oddly, a module seems half-installed, or a download was interrupted.
151
+
152
+ ```bash
153
+ # Verify an installed editor
154
+ unity editors verify 6000.1.0f1
155
+
156
+ # Disambiguate when the same version is installed for two architectures
157
+ unity editors verify 6000.1.0f1 --architecture arm64
158
+
159
+ # Machine output
160
+ unity editors verify 6000.1.0f1 --json
161
+ ```
162
+
163
+ Reports each component as `ok`, `missing`, or `skipped`, and names the exact `unity install-modules` command to repair anything missing. A clean editor exits 0; missing or empty files fail the check. This is a **structural** check — it confirms files exist, not that they are uncorrupted or correctly signed. `--architecture` is inherited from the `editors` parent, so `unity editors --architecture arm64 verify <version>` works too.
164
+
165
+ #### editors module / editor module
166
+
167
+ Module management is exposed under **both** `editors module` and the `editor` (singular) command group. Both share the same subcommands:
168
+
169
+ ```bash
170
+ # List modules for an installed editor
171
+ unity editors module list 6000.0.47f1 --format json
172
+ unity editor module list 6000.0.47f1 --architecture arm64 --format json
173
+
174
+ # Add modules to an installed editor
175
+ unity editors module add 6000.0.47f1 --module android --module ios
176
+ unity editors module add 6000.0.47f1 --all # Install every available module
177
+ unity editors module add 6000.0.47f1 --module android --child-modules # Include child modules
178
+ unity editors module add 6000.0.47f1 --module android --accept-eula # Accept EULAs automatically
179
+
180
+ # Remove installed modules from an editor by id (-m/--module, repeatable)
181
+ unity editors module remove 6000.0.47f1 --module android --module ios
182
+ unity editor module remove 6000.0.47f1 -m android -a arm64 # disambiguate side-by-side installs
183
+ unity editors module remove 6000.0.47f1 -m android --yes # skip the confirm prompt (required non-interactively)
184
+
185
+ # Refresh module list for a manually located editor
186
+ unity editors module refresh 6000.0.47f1
187
+ ```
188
+
189
+ `module remove` prompts to confirm before deleting the module files; `-y` / `--yes` skips the prompt and is required in non-interactive mode. Supports `-a` / `--architecture` to disambiguate side-by-side installs and the global `--format human|json|tsv|ndjson`.
190
+
191
+ #### editor add (single path, with module-fetch control)
192
+
193
+ The `editor add` subcommand is similar to `editors add` but targets a single path and supports skipping the module-fetch step:
194
+
195
+ ```bash
196
+ unity editor add /path/to/Unity/Editor
197
+
198
+ # Skip fetching module metadata (faster, but modules won't be listed until refreshed)
199
+ unity editor add /path/to/Unity/Editor --no-fetch-modules
200
+ ```
201
+
202
+ ---
203
+
204
+ ### Install
205
+
206
+ ```bash
207
+ # Install an editor (interactive version selection if omitted)
208
+ unity install 6000.0.47f1
209
+
210
+ # Install with specific modules
211
+ unity install 6000.0.47f1 --module windows-mono --module android
212
+
213
+ # Install a specific changeset by hash
214
+ unity install 6000.0.47f1 --changeset abc123def456
215
+
216
+ # Include child modules
217
+ unity install 6000.0.47f1 --cm
218
+
219
+ # Exclude child modules
220
+ unity install 6000.0.47f1 --no-cm
221
+
222
+ # Install and accept EULAs automatically (CI)
223
+ unity install 6000.0.47f1 --yes --accept-eula
224
+
225
+ # Force reinstall even if already present
226
+ unity install 6000.0.47f1 --force
227
+
228
+ # Resume an interrupted download (also recovers orphaned partials left by a crash or kill)
229
+ unity install 6000.0.47f1 --resume
230
+
231
+ # Dry-run: show what would be installed without doing it
232
+ unity install 6000.0.47f1 --dry-run --format json
233
+
234
+ # List the editor's available modules and exit without installing
235
+ # (a drop-in alias for `unity modules list <version>`)
236
+ unity install 6000.0.47f1 --list-components --format json
237
+
238
+ # Space-separated module values after a single -m are equivalent to repeating -m
239
+ unity install 6000.0.47f1 -m android ios # space-separated
240
+ unity install 6000.0.47f1 -m android -m ios # repeated flag (same effect)
241
+
242
+ # Windows: keep the install service unelevated. The Editor's NSIS installer is manifested
243
+ # `highestAvailable`, so it runs unelevated for a STANDARD user (the supported unprivileged
244
+ # install — it reports any dependencies an admin must finish) but still asks for elevation on
245
+ # demand under an administrator account. In CI, where a prompt can't be answered, run the
246
+ # agent elevated instead. Also via UNITY_NO_ELEVATE=1.
247
+ unity install 6000.0.47f1 --no-elevate --yes --accept-eula
248
+ ```
249
+
250
+ When installing an editor with several modules, a failed module no longer aborts the whole batch — `unity install` (and `unity install-modules`) continue with the remaining items and exit non-zero if any failed. Each editor and module is listed as installed (✓), failed (✗), or pending (·); the NDJSON `result` frame carries the same breakdown as an `items` array (each entry has `uid`, `name`, `kind`, `status`), so scripts can tell exactly which modules succeeded even on a non-zero exit.
251
+
252
+ **NDJSON progress frames** for `unity install` and `unity install-modules` include a `phase: 'download' | 'install'` field so scripts can switch to an indeterminate spinner during the install phase (which is genuinely indeterminate — NSIS on Windows only reports success/failure). During the install phase, `pct` is locked at 50 and only jumps to 100 on completion. Module download/install progress is nested under the parent editor via `parentItemUid`, so consumers see one editor group with its modules rather than one group per module.
253
+
254
+ On an interactive terminal, `unity install` also reports progress to the terminal application itself via the `OSC 9;4` escape sequence — on Windows Terminal the taskbar icon fills with download/install progress and spinners show as indeterminate, so you don't need to keep the window focused. It's emitted only on a TTY (never in piped or machine-consumed output), always cleared on exit, and ignored by terminals that don't support it.
255
+
256
+ Module installers honor the per-module install command from the release manifest (e.g. Visual Studio on Windows uses `--passive`, not `/S`); the resolved command is surfaced in `unity modules list --json`. `unity install` self-heals a corrupted partial download by discarding the bad partial and re-downloading; a cross-process install lock prevents two concurrent installs of the same version from corrupting the unpack.
257
+
258
+ ### Uninstall
259
+
260
+ ```bash
261
+ # Uninstall an editor version
262
+ unity uninstall 6000.0.47f1 --yes
263
+
264
+ # Uninstall a specific architecture
265
+ unity uninstall 6000.0.47f1 --architecture arm64 --yes
266
+ ```
267
+
268
+ ---
269
+
270
+ ### Modules — add/list per editor
271
+
272
+ ```bash
273
+ # List modules for an installed editor
274
+ unity modules list 6000.0.47f1 --format json
275
+
276
+ # Filter by architecture
277
+ unity modules list 6000.0.47f1 --architecture arm64 --format json
278
+ ```
279
+
280
+ `unity modules list` honors `--format ndjson` (empty results emit a clean, empty NDJSON stream).
281
+
282
+ ### install-modules
283
+
284
+ ```bash
285
+ # List available modules without installing
286
+ unity install-modules --editor-version 6000.0.47f1 --list
287
+
288
+ # Install specific modules
289
+ unity install-modules --editor-version 6000.0.47f1 --module android --module ios
290
+
291
+ # Install all available modules
292
+ unity install-modules --editor-version 6000.0.47f1 --all --yes
293
+
294
+ # Include child modules (default behaviour)
295
+ unity install-modules --editor-version 6000.0.47f1 --module android --cm
296
+
297
+ # Exclude child modules
298
+ unity install-modules --editor-version 6000.0.47f1 --module android --no-cm
299
+
300
+ # Accept EULAs and dry-run
301
+ unity install-modules --editor-version 6000.0.47f1 --all --accept-eula --dry-run
302
+
303
+ # Reinstall modules that are already installed (a repair)
304
+ unity install-modules --editor-version 6000.0.47f1 --module android --reinstall
305
+
306
+ # -f/--force implies --reinstall, auto-includes child modules, and skips confirmation prompts
307
+ unity install-modules --editor-version 6000.0.47f1 --module android --force
308
+
309
+ # Tune the automatic retry for modules whose download/validation fails intermittently
310
+ # (default retries twice with backoff; 0 disables). Also via UNITY_INSTALL_RETRIES.
311
+ unity install-modules --editor-version 6000.0.47f1 --module android --retries 3
312
+ unity install-modules --editor-version 6000.0.47f1 --module android --retries 0
313
+
314
+ # Windows: skip the elevated (UAC) install helper (also via UNITY_NO_ELEVATE=1)
315
+ unity install-modules --editor-version 6000.0.47f1 --module android --no-elevate
316
+ ```
317
+
318
+ `--list` and `--all` are mutually exclusive. `--list` is also mutually exclusive with `--module`.
319
+
320
+ A module whose download or validation fails intermittently — common for large modules such as Android SDK/NDK and OpenJDK — is retried automatically (up to twice with exponential backoff by default) instead of failing the whole run; already-installed modules are never re-downloaded, and retry attempts surface in both human and `--format ndjson` output.
321
+
322
+ `--module android ios` (space-separated values after a single `--module`) and `--module android --module ios` (repeated flag) are equivalent — both install all listed modules.
323
+
324
+ Module discovery works for editors registered via `unity editors add <path>` (located editors), not just editors installed by the Hub.
325
+
326
+ ---
327
+