@aqian0/dsh-unity 0.0.0-stage → 0.1.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 (360) hide show
  1. package/CHANGELOG.md +53 -0
  2. package/LICENSE-UNITY-COMPANION.md +122 -0
  3. package/LICENSE.md +31 -0
  4. package/NOTICE.md +90 -0
  5. package/README.md +273 -2
  6. package/cordis.patch.yml +22 -0
  7. package/docs/design.md +297 -0
  8. package/icon.svg +16 -0
  9. package/lib/frontmatter.js +392 -0
  10. package/lib/gating.js +105 -0
  11. package/lib/harness.js +16 -0
  12. package/lib/index.js +171 -0
  13. package/lib/project.js +210 -0
  14. package/lib/registry.js +268 -0
  15. package/lib/requirements.js +214 -0
  16. package/lib/skills.js +191 -0
  17. package/lib/types/frontmatter.d.ts +84 -0
  18. package/lib/types/gating.d.ts +80 -0
  19. package/lib/types/harness.d.ts +152 -0
  20. package/lib/types/index.d.ts +75 -0
  21. package/lib/types/project.d.ts +93 -0
  22. package/lib/types/registry.d.ts +96 -0
  23. package/lib/types/requirements.d.ts +67 -0
  24. package/lib/types/skills.d.ts +54 -0
  25. package/lib/types/watch.d.ts +34 -0
  26. package/lib/watch.js +84 -0
  27. package/locale/en.json +6 -0
  28. package/locale/zh.json +6 -0
  29. package/package.json +70 -4
  30. package/skills/2d-pixel-perfect/SKILL.md +208 -0
  31. package/skills/2d-pixel-perfect/references/api-reference.md +81 -0
  32. package/skills/2d-pixel-perfect/references/camera-setup-builtin.cs +40 -0
  33. package/skills/2d-pixel-perfect/references/camera-setup-urp.cs +49 -0
  34. package/skills/2d-pixel-perfect/references/pipeline-detection.cs +50 -0
  35. package/skills/2d-pixel-perfect/references/sprite-settings.cs +37 -0
  36. package/skills/asset-transformer-toolkit/SECURITY.md +15 -0
  37. package/skills/asset-transformer-toolkit/SKILL.md +39 -0
  38. package/skills/asset-transformer-toolkit/references/create-importer.md +121 -0
  39. package/skills/asset-transformer-toolkit/references/lods.md +61 -0
  40. package/skills/asset-transformer-toolkit/references/rule-api.md +154 -0
  41. package/skills/asset-transformer-toolkit/references/ruleblock-api.md +37 -0
  42. package/skills/asset-transformer-toolkit/references/ruleset-api.md +138 -0
  43. package/skills/asset-transformer-toolkit/references/rulesets-and-actions.md +227 -0
  44. package/skills/audio-setup-mixers/SECURITY.md +16 -0
  45. package/skills/audio-setup-mixers/SKILL.md +127 -0
  46. package/skills/audio-setup-mixers/references/api.md +162 -0
  47. package/skills/build-gtk/SECURITY.md +16 -0
  48. package/skills/build-gtk/SKILL.md +200 -0
  49. package/skills/build-gtk/references/api-reference.md +33 -0
  50. package/skills/build-gtk/references/graph-api-gaps.md +96 -0
  51. package/skills/build-gtk/references/runtime-and-visualization.md +191 -0
  52. package/skills/build-gtk/references/state-machine-api.md +270 -0
  53. package/skills/build-gtk/references/where-the-docs-stop.md +49 -0
  54. package/skills/build-live-game/SKILL.md +159 -0
  55. package/skills/build-live-game/references/achievements.md +757 -0
  56. package/skills/build-live-game/references/apis.md +271 -0
  57. package/skills/build-live-game/references/authentication.md +431 -0
  58. package/skills/build-live-game/references/battlepass.md +904 -0
  59. package/skills/build-live-game/references/blueprints-and-samples.md +75 -0
  60. package/skills/build-live-game/references/cloud-code-cloudbehaviours.md +1111 -0
  61. package/skills/build-live-game/references/cloud-code-modules.md +1276 -0
  62. package/skills/build-live-game/references/cloud-code.md +58 -0
  63. package/skills/build-live-game/references/cloud-save.md +464 -0
  64. package/skills/build-live-game/references/deployment.md +231 -0
  65. package/skills/build-live-game/references/orientation.md +30 -0
  66. package/skills/build-live-game/references/player-account.md +821 -0
  67. package/skills/build-live-game/references/remote-config.md +96 -0
  68. package/skills/build-live-game/references/services-overview.md +76 -0
  69. package/skills/build-live-game/references/tooling.md +375 -0
  70. package/skills/build-live-game/references/ugs-cli.md +86 -0
  71. package/skills/craft-game-floors/SECURITY.md +23 -0
  72. package/skills/craft-game-floors/SKILL.md +134 -0
  73. package/skills/craft-game-floors/references/art-direction.md +85 -0
  74. package/skills/craft-game-floors/references/camera-rigs.md +51 -0
  75. package/skills/craft-game-floors/references/character-motion.md +35 -0
  76. package/skills/craft-game-floors/references/game-audio.md +47 -0
  77. package/skills/craft-game-floors/references/game-feel.md +68 -0
  78. package/skills/craft-game-floors/references/game-shell.md +45 -0
  79. package/skills/craft-game-floors/references/live-floor.md +35 -0
  80. package/skills/craft-game-floors/references/placeholder-assets.md +35 -0
  81. package/skills/craft-game-floors/references/scene-lighting.md +52 -0
  82. package/skills/craft-game-floors/references/toon-shading.md +34 -0
  83. package/skills/craft-game-floors/references/vfx.md +40 -0
  84. package/skills/craft-game-floors/references/visual-scorecard.md +43 -0
  85. package/skills/create-2d-physics/SECURITY.md +16 -0
  86. package/skills/create-2d-physics/SKILL.md +128 -0
  87. package/skills/create-2d-physics/references/2d-physics-core.md +155 -0
  88. package/skills/create-2d-physics/references/legacy-2d-physics.md +45 -0
  89. package/skills/create-tile-palette-or-rule-tiles/SKILL.md +95 -0
  90. package/skills/create-tile-palette-or-rule-tiles/references/hexagonalruletile.md +71 -0
  91. package/skills/create-tile-palette-or-rule-tiles/references/palette-create.md +38 -0
  92. package/skills/create-tile-palette-or-rule-tiles/references/ruletile-createempty.md +37 -0
  93. package/skills/create-tile-palette-or-rule-tiles/references/ruletile-createfromsegment.md +219 -0
  94. package/skills/create-tile-palette-or-rule-tiles/references/ruletile.md +95 -0
  95. package/skills/create-tile-palette-or-rule-tiles/scripts/CreatePaletteTemplate.cs +148 -0
  96. package/skills/create-tile-palette-or-rule-tiles/scripts/ManualWorkflowExample.cs +63 -0
  97. package/skills/create-tile-palette-or-rule-tiles/scripts/RuleTileGenerator.cs +61 -0
  98. package/skills/create-tile-palette-or-rule-tiles/scripts/TilemapRuleTileCreateFromSegment.cs +225 -0
  99. package/skills/fix-3d-physics-collisions/SECURITY.md +17 -0
  100. package/skills/fix-3d-physics-collisions/SKILL.md +139 -0
  101. package/skills/fix-3d-physics-collisions/references/collision-checklist.md +80 -0
  102. package/skills/fix-3d-physics-collisions/references/collision-debugger.md +18 -0
  103. package/skills/fix-3d-physics-collisions/references/console-errors-table.md +9 -0
  104. package/skills/fix-3d-physics-collisions/references/kinematic-trigger-facts.md +18 -0
  105. package/skills/fix-3d-physics-collisions/references/other-symptoms.md +29 -0
  106. package/skills/fix-3d-physics-collisions/references/raycast-checklist.md +8 -0
  107. package/skills/fix-3d-physics-collisions/references/topic-map.md +42 -0
  108. package/skills/fix-3d-physics-collisions/references/trigger-checklist.md +9 -0
  109. package/skills/fix-3d-physics-collisions/scripts/CollisionDebugger.cs +561 -0
  110. package/skills/generate-editor-search-query/SECURITY.md +17 -0
  111. package/skills/generate-editor-search-query/SKILL.md +117 -0
  112. package/skills/generate-editor-search-query/references/open-search-window.md +70 -0
  113. package/skills/generate-editor-search-query/references/query-patterns.md +124 -0
  114. package/skills/implement-in-app-purchases/SKILL.md +82 -0
  115. package/skills/implement-in-app-purchases/references/api-details.md +41 -0
  116. package/skills/implement-in-app-purchases/references/api-notes.md +105 -0
  117. package/skills/implement-in-app-purchases/references/codeless-catalog.md +197 -0
  118. package/skills/implement-in-app-purchases/references/convert-adapty.md +270 -0
  119. package/skills/implement-in-app-purchases/references/convert-essentialkit.md +239 -0
  120. package/skills/implement-in-app-purchases/references/convert-revenuecat.md +277 -0
  121. package/skills/implement-in-app-purchases/references/convert-unipay.md +145 -0
  122. package/skills/implement-in-app-purchases/references/migration-v4-to-v5.md +46 -0
  123. package/skills/implement-in-app-purchases/references/path-add-iap-to-new-project.md +197 -0
  124. package/skills/implement-in-app-purchases/references/path-convert-native-google-billing.md +302 -0
  125. package/skills/implement-in-app-purchases/references/path-convert-native-storekit.md +357 -0
  126. package/skills/implement-in-app-purchases/references/path-implement-iap-d2c.md +253 -0
  127. package/skills/implement-in-app-purchases/references/platform-notes.md +55 -0
  128. package/skills/implement-in-app-purchases/references/pre-check.md +207 -0
  129. package/skills/implement-in-app-purchases/references/topic-map.md +46 -0
  130. package/skills/initialize-ai-navigation/SKILL.md +109 -0
  131. package/skills/initialize-ai-navigation/references/navigation-system.md +793 -0
  132. package/skills/initialize-ai-navigation/references/topic-map.md +66 -0
  133. package/skills/levelplay-unity-integration/SKILL.md +122 -0
  134. package/skills/levelplay-unity-integration/references/adding-more-ad-formats.md +15 -0
  135. package/skills/levelplay-unity-integration/references/banner-api.md +927 -0
  136. package/skills/levelplay-unity-integration/references/best-practices.md +604 -0
  137. package/skills/levelplay-unity-integration/references/dependency-resolution.md +94 -0
  138. package/skills/levelplay-unity-integration/references/examples.md +10 -0
  139. package/skills/levelplay-unity-integration/references/ilrd-api.md +337 -0
  140. package/skills/levelplay-unity-integration/references/initialization-api.md +851 -0
  141. package/skills/levelplay-unity-integration/references/interstitial-api.md +907 -0
  142. package/skills/levelplay-unity-integration/references/ios-setup.md +463 -0
  143. package/skills/levelplay-unity-integration/references/migration-sdk-9.md +666 -0
  144. package/skills/levelplay-unity-integration/references/privacy-settings.md +593 -0
  145. package/skills/levelplay-unity-integration/references/production-release-checklist.md +22 -0
  146. package/skills/levelplay-unity-integration/references/rewarded-api.md +918 -0
  147. package/skills/levelplay-unity-integration/references/step-0-new-or-migration.md +8 -0
  148. package/skills/levelplay-unity-integration/references/step-1-verify-environment.md +4 -0
  149. package/skills/levelplay-unity-integration/references/step-10-testing.md +15 -0
  150. package/skills/levelplay-unity-integration/references/step-2-business-goals.md +12 -0
  151. package/skills/levelplay-unity-integration/references/step-3-install-sdk.md +55 -0
  152. package/skills/levelplay-unity-integration/references/step-4-native-dependencies.md +22 -0
  153. package/skills/levelplay-unity-integration/references/step-5-app-key-and-ad-units.md +18 -0
  154. package/skills/levelplay-unity-integration/references/step-6-5-privacy-and-regulation.md +51 -0
  155. package/skills/levelplay-unity-integration/references/step-6-admob-keys.md +16 -0
  156. package/skills/levelplay-unity-integration/references/step-7-initialize.md +50 -0
  157. package/skills/levelplay-unity-integration/references/step-8-ad-unit-strategy.md +16 -0
  158. package/skills/levelplay-unity-integration/references/step-9-implement-ad-units.md +66 -0
  159. package/skills/levelplay-unity-integration/references/testing-and-validation.md +222 -0
  160. package/skills/levelplay-unity-integration/references/troubleshooting.md +99 -0
  161. package/skills/localize-unity-project/SKILL.md +159 -0
  162. package/skills/localize-unity-project/references/api-notes.md +15 -0
  163. package/skills/localize-unity-project/references/cjk-fonts.md +83 -0
  164. package/skills/localize-unity-project/references/docs-map.md +42 -0
  165. package/skills/localize-unity-project/references/documentation-lookup.md +33 -0
  166. package/skills/localize-unity-project/references/locale-switching.md +17 -0
  167. package/skills/localize-unity-project/references/table-completeness-check.md +47 -0
  168. package/skills/localize-unity-project/references/translating-existing-project.md +47 -0
  169. package/skills/localize-unity-project/references/translation-strategy.md +41 -0
  170. package/skills/localize-unity-project/references/troubleshooting.md +12 -0
  171. package/skills/localize-unity-project/scripts/L10nBatchProcessor.cs +191 -0
  172. package/skills/localize-unity-project/scripts/LocalizedFontAsset.cs +18 -0
  173. package/skills/manage-sprite-atlas/SKILL.md +202 -0
  174. package/skills/manage-sprite-atlas/references/addressables-delivery.md +58 -0
  175. package/skills/manage-sprite-atlas/references/advanced-manual-authoring.md +19 -0
  176. package/skills/manage-sprite-atlas/references/api.md +382 -0
  177. package/skills/manage-sprite-atlas/references/best-practices.md +183 -0
  178. package/skills/manage-sprite-atlas/references/common-errors.md +123 -0
  179. package/skills/manage-sprite-atlas/references/complete-workflow.md +61 -0
  180. package/skills/manage-sprite-atlas/references/custom-packing.md +147 -0
  181. package/skills/manage-sprite-atlas/references/delivery-mechanism.md +30 -0
  182. package/skills/manage-sprite-atlas/references/key-requirements.md +21 -0
  183. package/skills/manage-sprite-atlas/references/manual-authoring.md +39 -0
  184. package/skills/manage-sprite-atlas/references/namespaces.md +15 -0
  185. package/skills/manage-sprite-atlas/references/v2-architecture.md +21 -0
  186. package/skills/manage-sprite-atlas/resources/authoringvsruntime.cs +176 -0
  187. package/skills/manage-sprite-atlas/resources/buildaddressablespostprocess.cs +59 -0
  188. package/skills/manage-sprite-atlas/resources/cacheloadedatlases.cs +145 -0
  189. package/skills/manage-sprite-atlas/resources/cleanupbatchoperations.cs +119 -0
  190. package/skills/manage-sprite-atlas/resources/createandconfiguremasteratlas.cs +57 -0
  191. package/skills/manage-sprite-atlas/resources/custompackersetup.cs +88 -0
  192. package/skills/manage-sprite-atlas/resources/deprecatedmethods.cs +142 -0
  193. package/skills/manage-sprite-atlas/resources/dontmodifywithoutsaving.cs +120 -0
  194. package/skills/manage-sprite-atlas/resources/dontpackinruntimebuilds.cs +190 -0
  195. package/skills/manage-sprite-atlas/resources/dontscriptspriteatlasineditor.cs +114 -0
  196. package/skills/manage-sprite-atlas/resources/editorconfiguration.cs +95 -0
  197. package/skills/manage-sprite-atlas/resources/enablespritepacking.cs +172 -0
  198. package/skills/manage-sprite-atlas/resources/gridspritepacker.cs +50 -0
  199. package/skills/manage-sprite-atlas/resources/handlelatebinding.cs +147 -0
  200. package/skills/manage-sprite-atlas/resources/handlenullcases.cs +141 -0
  201. package/skills/manage-sprite-atlas/resources/migratev1tov2.cs +335 -0
  202. package/skills/manage-sprite-atlas/resources/multipagepacker.cs +80 -0
  203. package/skills/manage-sprite-atlas/resources/optimizetexturesettings.cs +191 -0
  204. package/skills/manage-sprite-atlas/resources/packerdebugging.cs +158 -0
  205. package/skills/manage-sprite-atlas/resources/packtransform.cs +51 -0
  206. package/skills/manage-sprite-atlas/resources/platformnames.cs +127 -0
  207. package/skills/manage-sprite-atlas/resources/queryspritesefficiently.cs +222 -0
  208. package/skills/manage-sprite-atlas/resources/registercallbacks.cs +152 -0
  209. package/skills/manage-sprite-atlas/resources/runtimeatlasloader.cs +15 -0
  210. package/skills/manage-sprite-atlas/resources/runtimespriteaccess.cs +19 -0
  211. package/skills/manage-sprite-atlas/resources/savespriteatlasasset.cs +107 -0
  212. package/skills/manage-sprite-atlas/resources/scriptablepacker.cs +81 -0
  213. package/skills/manage-sprite-atlas/resources/setincludeinbuild.cs +164 -0
  214. package/skills/manage-sprite-atlas/resources/sizeoptimizedpacker.cs +88 -0
  215. package/skills/manage-sprite-atlas/resources/spriteatlaslatebinding.cs +123 -0
  216. package/skills/manage-sprite-atlas/resources/spriteatlasprebuildgenerator.cs +219 -0
  217. package/skills/manage-sprite-atlas/resources/spritedata.cs +35 -0
  218. package/skills/manage-sprite-atlas/resources/spritepack.cs +39 -0
  219. package/skills/manage-sprite-atlas/resources/texturedata.cs +15 -0
  220. package/skills/manage-sprite-atlas/resources/updatebuildscripts.cs +357 -0
  221. package/skills/manage-sprite-atlas/resources/updatesettingsconfiguration.cs +135 -0
  222. package/skills/manage-sprite-atlas/resources/usevariantswisely.cs +179 -0
  223. package/skills/manage-sprite-atlas/resources/variantatlas.cs +39 -0
  224. package/skills/migrate-birp-to-urp/SECURITY.md +16 -0
  225. package/skills/migrate-birp-to-urp/SKILL.md +167 -0
  226. package/skills/migrate-birp-to-urp/references/capturing-the-editor.md +66 -0
  227. package/skills/migrate-birp-to-urp/references/complex-shader-situations.md +272 -0
  228. package/skills/migrate-birp-to-urp/references/conversion-and-rendering-triage.md +113 -0
  229. package/skills/migrate-birp-to-urp/references/custom-shader-triage.md +123 -0
  230. package/skills/migrate-birp-to-urp/references/implementation-patterns.md +529 -0
  231. package/skills/migrate-birp-to-urp/references/migration-workflow.md +265 -0
  232. package/skills/migrate-birp-to-urp/references/parity-validation-and-troubleshooting.md +114 -0
  233. package/skills/migrate-birp-to-urp/references/preflight-and-urp-setup.md +195 -0
  234. package/skills/migrate-birp-to-urp/references/quality-settings-map.md +69 -0
  235. package/skills/new-unity-project/SECURITY.md +26 -0
  236. package/skills/new-unity-project/SKILL.md +171 -0
  237. package/skills/new-unity-project/references/checklist.md +18 -0
  238. package/skills/new-unity-project/references/common-mistakes.md +15 -0
  239. package/skills/new-unity-project/references/skill-setup.md +66 -0
  240. package/skills/new-unity-project/references/step-1-concept.md +13 -0
  241. package/skills/new-unity-project/references/step-2-platforms-and-create.md +31 -0
  242. package/skills/new-unity-project/references/step-3-join-and-reconcile.md +16 -0
  243. package/skills/new-unity-project/references/step-4-source-control.md +9 -0
  244. package/skills/new-unity-project/references/step-5-packages.md +18 -0
  245. package/skills/new-unity-project/references/step-6-identity-and-floors.md +20 -0
  246. package/skills/new-unity-project/references/step-7-visual-baseline.md +75 -0
  247. package/skills/new-unity-project/references/step-8-first-commit.md +21 -0
  248. package/skills/new-unity-project/references/step-9-handoff.md +23 -0
  249. package/skills/optimize-audio/SECURITY.md +16 -0
  250. package/skills/optimize-audio/SKILL.md +120 -0
  251. package/skills/optimize-audio/references/diagnostics.md +42 -0
  252. package/skills/optimize-audio/references/troubleshooting.md +41 -0
  253. package/skills/optimize-audio/resources/audio-import-api.md +149 -0
  254. package/skills/optimize-audio/resources/platform-settings.md +48 -0
  255. package/skills/optimize-text-mesh-pro/SKILL.md +181 -0
  256. package/skills/optimize-text-mesh-pro/references/dynamic-atlas-and-profiling.md +28 -0
  257. package/skills/optimize-text-mesh-pro/references/topic-map.md +36 -0
  258. package/skills/optimize-web/SECURITY.md +16 -0
  259. package/skills/optimize-web/SKILL.md +157 -0
  260. package/skills/optimize-web/references/editor-csharp.md +120 -0
  261. package/skills/optimize-web/references/topic-map.md +49 -0
  262. package/skills/optimize-web/references/troubleshooting.md +45 -0
  263. package/skills/optimize-web/references/understand-request.md +19 -0
  264. package/skills/optimize-web/references/web-assets-quality.md +59 -0
  265. package/skills/optimize-web/references/web-player-settings.md +39 -0
  266. package/skills/optimize-web/references/web-profiling-memory.md +71 -0
  267. package/skills/optimize-web/scripts/WebOptimizer.cs +46 -0
  268. package/skills/optimize-web/scripts/toktx-examples.sh +11 -0
  269. package/skills/setup-multiplayer-services/SKILL.md +36 -0
  270. package/skills/setup-multiplayer-services/references/dgs-entrypoint.md +79 -0
  271. package/skills/setup-multiplayer-services/references/entrypoints.md +213 -0
  272. package/skills/setup-multiplayer-services/references/examples.md +33 -0
  273. package/skills/setup-multiplayer-services/references/implementation-fit.md +30 -0
  274. package/skills/setup-multiplayer-services/references/underlying-services.md +11 -0
  275. package/skills/setup-multiplayer-services/references/workflows-prerequisites.md +17 -0
  276. package/skills/setup-vivox-voice-chat/SECURITY.md +16 -0
  277. package/skills/setup-vivox-voice-chat/SKILL.md +166 -0
  278. package/skills/setup-vivox-voice-chat/references/api-reference-lookup.md +28 -0
  279. package/skills/setup-vivox-voice-chat/references/docs-topic-map.md +13 -0
  280. package/skills/setup-vivox-voice-chat/references/events-and-participants.md +79 -0
  281. package/skills/setup-vivox-voice-chat/references/init-and-login.md +92 -0
  282. package/skills/setup-vivox-voice-chat/references/text-chat.md +93 -0
  283. package/skills/setup-vivox-voice-chat/references/troubleshooting.md +47 -0
  284. package/skills/setup-vivox-voice-chat/references/voice-channels.md +92 -0
  285. package/skills/shader-graph-create-custom-node/SKILL.md +25 -0
  286. package/skills/shader-graph-create-custom-node/resources/all_hints.hlsl +182 -0
  287. package/skills/sprite-editor/SECURITY.md +16 -0
  288. package/skills/sprite-editor/SKILL.md +66 -0
  289. package/skills/sprite-editor/references/api_reference.md +151 -0
  290. package/skills/sprite-editor/references/background.md +112 -0
  291. package/skills/sprite-editor/references/templates.md +72 -0
  292. package/skills/sprite-editor/scripts/AutomaticSliceTexture.cs +40 -0
  293. package/skills/sprite-editor/scripts/GenerateNewSpriteRects.cs +200 -0
  294. package/skills/sprite-editor/scripts/GetTextureSourceImageSize.cs +32 -0
  295. package/skills/sprite-editor/scripts/GetTextureToSlice.cs +55 -0
  296. package/skills/sprite-editor/scripts/GridSliceTexture.cs +40 -0
  297. package/skills/sprite-editor/scripts/IsometricSliceTexture.cs +141 -0
  298. package/skills/sprite-editor/scripts/README.md +134 -0
  299. package/skills/sprite-editor/scripts/SetPivotExample.cs +58 -0
  300. package/skills/sprite-editor/scripts/SpriteToPng.cs +88 -0
  301. package/skills/sprite-segment-3x3grid/SKILL.md +177 -0
  302. package/skills/sprite-segment-3x3grid/references/topic-map.md +37 -0
  303. package/skills/sprite-segment-3x3grid/scripts/SpriteGridAnalysis.cs +119 -0
  304. package/skills/ui/SKILL.md +142 -0
  305. package/skills/ui-imgui/SKILL.md +180 -0
  306. package/skills/ui-imgui/references/gui-elements.md +156 -0
  307. package/skills/ui-imgui/references/templates.md +141 -0
  308. package/skills/ui-ugui/SKILL.md +217 -0
  309. package/skills/ui-ugui/references/layout-and-anchors.md +61 -0
  310. package/skills/ui-ugui/references/scrollview-setup.md +29 -0
  311. package/skills/ui-uitk/SKILL.md +229 -0
  312. package/skills/ui-uitk/references/common-issues.md +74 -0
  313. package/skills/ui-uitk/references/custom-elements.md +241 -0
  314. package/skills/ui-uitk/references/painter2d.md +282 -0
  315. package/skills/ui-uitk/references/pointermanipulator-guide.md +94 -0
  316. package/skills/ui-uitk/references/svg-icons.md +136 -0
  317. package/skills/ui-uitk/references/ui-runtime-binding.md +234 -0
  318. package/skills/ui-uitk/references/uss-guide.md +138 -0
  319. package/skills/unity-cli/CHANGELOG.md +524 -0
  320. package/skills/unity-cli/SECURITY.md +68 -0
  321. package/skills/unity-cli/SKILL.md +160 -0
  322. package/skills/unity-cli/references/auth-license-cloud.md +318 -0
  323. package/skills/unity-cli/references/bootstrap-project.md +177 -0
  324. package/skills/unity-cli/references/build-run-test.md +555 -0
  325. package/skills/unity-cli/references/catalog-plugins.md +86 -0
  326. package/skills/unity-cli/references/ci-recipes.md +76 -0
  327. package/skills/unity-cli/references/cloud-automation.md +819 -0
  328. package/skills/unity-cli/references/cloud-workflows.md +19 -0
  329. package/skills/unity-cli/references/collaboration.md +533 -0
  330. package/skills/unity-cli/references/config-hub.md +239 -0
  331. package/skills/unity-cli/references/diagnostics-maintenance.md +718 -0
  332. package/skills/unity-cli/references/docs-workflow.md +179 -0
  333. package/skills/unity-cli/references/editor-targeting.md +29 -0
  334. package/skills/unity-cli/references/editors-install.md +490 -0
  335. package/skills/unity-cli/references/environment-variables.md +42 -0
  336. package/skills/unity-cli/references/exit-codes.md +47 -0
  337. package/skills/unity-cli/references/global-flags.md +32 -0
  338. package/skills/unity-cli/references/integration-advanced.md +1130 -0
  339. package/skills/unity-cli/references/notes.md +20 -0
  340. package/skills/unity-cli/references/notifications.md +39 -0
  341. package/skills/unity-cli/references/playmode-verification-loop.md +279 -0
  342. package/skills/unity-cli/references/projects-templates.md +997 -0
  343. package/skills/unity-cli/references/scene-editing-preflight.md +25 -0
  344. package/skills/unity-cli/references/setup-and-help.md +54 -0
  345. package/skills/unity-cli/references/version-control.md +612 -0
  346. package/skills/unity-package-management/SKILL.md +169 -0
  347. package/skills/unity-package-management/references/discovering-packages.md +66 -0
  348. package/skills/unity-package-management/references/headless-run.md +31 -0
  349. package/skills/unity-package-management/references/installer-script.md +92 -0
  350. package/skills/unity-package-management/references/select-packages.md +126 -0
  351. package/skills/unity-pipeline/SECURITY.md +17 -0
  352. package/skills/unity-pipeline/SKILL.md +205 -0
  353. package/skills/unity-pipeline/references/csharp-eval.md +23 -0
  354. package/skills/unity-pipeline/references/multiplayer-play-mode.md +103 -0
  355. package/skills/urp-postprocessing/SECURITY.md +16 -0
  356. package/skills/urp-postprocessing/SKILL.md +188 -0
  357. package/skills/urp-postprocessing/references/code-templates.md +150 -0
  358. package/skills/urp-postprocessing/references/effect-reference.md +86 -0
  359. package/skills/validate-urp-render-graph-renderer-feature/SKILL.md +92 -0
  360. package/skills/validate-urp-render-graph-renderer-feature/references/validation-checklist.md +179 -0
@@ -0,0 +1,68 @@
1
+ # Security notes — unity-cli skill
2
+
3
+ This skill documents the official first-party [`unity` CLI](https://public-cdn.cloud.unity3d.com/hub/prod/cli/). A few of its capabilities are powerful by design and are flagged by automated skill scanners. They are intentional, first-party functionality with the safeguards described below.
4
+
5
+ ## Accepted risks
6
+
7
+ These capabilities are accepted by design. Each is documented in full in the sections below; this table is the explicit, human-readable acknowledgment.
8
+
9
+ | Risk | Capability | Why it is accepted |
10
+ |---|---|---|
11
+ | `SEC_POWER_CAP` | Local Editor control and C# evaluation | Runs entirely on the local machine, as the current user, against the user’s own Editor — no remote access and no privilege the user lacks at their own terminal. |
12
+ | `SEC_INSTALL_PIPE` | Install one-liners piped to a shell | HTTPS to Unity’s first-party CDN only; the installer verifies a SHA-256 pin against a same-origin manifest before executing anything. |
13
+ | `SEC_AGENT_CONFIG_WRITE` | Writing agent skill files into AI clients’ configuration directories, turning an installed skill off or back on, and installing Unity’s own agent plugin into Claude Code, Codex, Grok Build, Antigravity, GitHub Copilot, or Qwen Code | Runs only on an explicit user command, is the command’s documented purpose, and is fenced by an ownership ledger — a copy this CLI did not write is never overwritten without `--force`, and the enable/disable verbs cannot act on one at all — plus symlink refusals and a warning before project-local installs from the home directory. The plugin install names one hardcoded first-party source, is performed by the agent’s own CLI (`claude`, `codex`, `grok`, `agy`, `copilot`, or `qwen`) rather than by writing files, and reinstalls nothing. |
14
+
15
+ ## Accepted, by-design capabilities
16
+
17
+ ### Installing skills into AI clients
18
+
19
+ `unity skill install` and `unity skill refresh` write skill files — this skill, and the `unity-pipeline` skill a project's `com.unity.pipeline` package ships — into AI clients' configuration directories, along with the Unity skills pinned from the Unity-Technologies/skills repository, which automated scanners flag as an agent-persistence pattern. `unity setup <agent>` installs the same skills only when its plugin can't be installed and the user agrees at the prompt or passes `--yes`. The writes happen only when the user runs the command (nothing installs at load or in the background), the capability is the command's advertised purpose, and it is fenced: an install ledger records every write and a directory this CLI did not write is reported, never overwritten, without explicit `--force` consent; targets that resolve through a symlinked path component are refused; a package-shipped tree is read with file-count, per-file, and aggregate size bounds and never through symbolic links; and `--local` from the home directory warns first.
20
+
21
+ The repository skills are downloaded, so the download is fenced too. The source repository and its download address are compiled into the CLI: no flag, setting or environment variable redirects them, and the download uses the CLI's normal TLS checks. The CLI pins a commit and a SHA-256 for each skill's file tree, and checks every skill against its pin before writing anything, so a changed or substituted archive writes nothing. Archive entries that would escape the skill folder, links, oversized files or archives, and non-text files are refused. Offline, only the skills embedded in the CLI are installed.
22
+
23
+ ### Syncing skills when an agent session starts
24
+
25
+ `unity skill sync` is the one skill write that runs without the user typing it: Unity's agent plugin runs `unity skill sync --hook` when a session starts, which scanners flag as an agent-persistence pattern. The user consents by installing the plugin, whose description says it keeps the Unity skills current, and it is fenced more tightly than `skill install`. It writes only what a non-interactive `unity skill install` would: the embedded skills and the skills pinned and checked as above, into the one client the agent is. It never prompts, and has no `--yes` or `--force`, so it never overwrites a copy the user edited, a directory this CLI did not write, or a skill a plugin ships, and it leaves a disabled skill disabled. It runs no other command and installs no plugin or MCP server. After a run that reached the pinned repository it downloads nothing until the CLI or its pin changes. Under `--hook` its output is one plain line of context naming the skills it changed, or nothing.
26
+
27
+ ### Turning an installed skill off and back on
28
+
29
+ `unity skill disable <skill>` and `unity skill enable <skill>` change whether a skill an AI client has already installed still loads. Disabling renames that skill's `SKILL.md` to `SKILL.md.disabled` inside its own directory and records the choice; enabling renames it back. Automated scanners flag this as skill suppression — a skill that can switch other skills off is a recognized malicious pattern, and reading it that way is correct as a default. Here it is the advertised purpose of a user-run command, and it is fenced:
30
+
31
+ - **It can only reach installs this CLI itself recorded.** The set of skills these verbs can name comes entirely from the install ledger, so a skill this CLI did not install has no row, cannot be named, and cannot be found or touched. There is no path by which it disables a skill some other tool or the user placed.
32
+ - **Nothing runs at load or in the background.** Both verbs act only when the user runs them, on a skill the user names; `--dry-run` reports without touching the filesystem.
33
+ - **Nothing is deleted and no content is read or rewritten.** The only filesystem operation is renaming one fixed filename within the directory the ledger already records, so the skill's own files stay where they are and enabling restores the previous state exactly.
34
+ - **The paths are bounded the same way installs are.** The only path formed is the recorded install directory joined with a constant filename, that directory has already passed the ledger's absolute-path validation, and a target reached through a symlinked directory component is refused rather than followed — the same guard `install` and `refresh` apply.
35
+
36
+ The capability exists because a skill costs context in every session of the client that discovered it, whether or not it is ever used, so a user who installed several needs a way to stop paying for the ones a given project does not need — without deleting files they would otherwise have to reinstall.
37
+
38
+ ### Installing Unity’s agent plugin (Claude Code, Codex, Grok Build, Antigravity, GitHub Copilot, Qwen Code, VS Code, OpenCode)
39
+
40
+ `unity setup claude` installs a plugin into Claude Code, which automated scanners flag as an agent-persistence pattern. It is fenced as follows. It runs only when the user runs the command, and this skill tells an agent to run it only when the user asks for the plugin or agrees to install it, never on its own initiative. The only source it can name is Anthropic’s official Claude Code marketplace, `anthropics/claude-plugins-official`, which lists Unity’s plugin and is compiled into the CLI: no argument, file, or environment variable can point it anywhere else. Claude Code accepts that marketplace name only from a repository under `github.com/anthropics/` ([Claude Code plugin security](https://code.claude.com/docs/en/plugins/security#identify-anthropics-marketplaces-by-name)), so a look-alike marketplace can’t take its place. It writes no files itself; it runs Claude Code’s own `claude plugin marketplace add` and `claude plugin install`, the documented install path, with fixed arguments, so Claude Code applies its own install handling. `--dry-run` prints both commands without running them, and an existing install is reported and never reinstalled or changed. It registers no MCP server of its own. After the plugin is installed or found already installed, it installs the Unity skills into the agent’s user-global skills folder, the same quiet run as `unity skill install <client>` that downloads from Unity’s pinned public skills repository with the same verification and the same refusal to overwrite an edited skill. A skill an older plugin still provides is skipped, and a failed skills step is a warning, not a failure. Every `unity setup <agent>` command below does the same for its own client.
41
+
42
+ `unity setup codex` and `unity setup grok` install the same plugin into Codex and Grok Build under the same fence: they run only when the user runs them, and this skill tells an agent to run them only when the user asks for the plugin or agrees to install it. Their source is Unity’s own first-party marketplace, `Unity-Technologies/unity-agent-plugin`, compiled into the CLI, and nothing can point either command elsewhere. Each writes no files itself and runs only the agent's own documented install commands with fixed arguments: `codex plugin marketplace add` and `codex plugin add`, or `grok plugin install … --trust`. `--trust` is Grok Build's consent flag for a non-interactive install, and it is passed only because the user ran the command. `--dry-run` prints the commands without running them, and an existing, enabled install is reported and never reinstalled or changed. A Codex plugin the user disabled (`enabled = false` in Codex’s `config.toml`) is the one exception: `unity setup codex` treats it as not installed and runs the same two `codex` commands again, which re-enables it. That only happens when the user runs the command.
43
+
44
+ `unity setup antigravity` installs the same plugin into Antigravity under the same fence. It runs only `agy plugin install` with Unity’s first-party repository, `Unity-Technologies/unity-agent-plugin`, as a fixed URL compiled into the CLI that nothing can point elsewhere, writes no files itself, prints the command under `--dry-run`, and reports an existing install without changing it.
45
+
46
+ `unity setup copilot` installs the same plugin into GitHub Copilot under the same fence. It runs only when the user runs it, names only the compiled-in first-party repository, writes no files itself, and runs only the Copilot CLI's own documented commands with fixed arguments: `copilot plugin marketplace add` and `copilot plugin install`. `--dry-run` prints the commands without running them, and an install Copilot records as enabled is reported and never reinstalled or changed. A plugin the user disabled counts as not installed, so the same two commands run again and re-enable it, only when the user runs the command. When the marketplace is already registered, `copilot plugin marketplace add` exits with an error saying so, and the command treats that one message as done and goes on to the install step; any other failure stops it.
47
+
48
+ `unity setup qwen` installs the same plugin into Qwen Code under the same fence. It runs only when the user runs it, names only the compiled-in first-party repository, writes no files itself, and runs only Qwen Code's own documented commands with fixed arguments: `qwen extensions install Unity-Technologies/unity-agent-plugin:unity --consent`, then `qwen extensions enable unity`. `--consent` is Qwen Code's flag for a non-interactive install, and it is passed only because the user ran the command. `--dry-run` prints the commands without running them, and an install Qwen Code has enabled for the current directory is reported and never reinstalled or changed. A disabled one counts as not installed, so the same two commands run again: the install fails because the extension exists, the command treats only that message, and only when the existing extension is Unity's own, as done, and the enable step turns it back on for the user's home directory. If it is still disabled for the current directory (a folder outside home), one more fixed command, `qwen extensions enable unity --scope workspace`, turns it on for that folder alone. Any other failure stops it.
49
+
50
+ `unity setup vscode` and `unity setup opencode` have no plugin CLI to run. Each installs the Unity skills for its client, as above, and runs no other command. `setup vscode` only prints how to add Unity’s plugin from the compiled-in first-party repository in VS Code and edits no VS Code file. `setup opencode` writes exactly one file, `~/.config/opencode/plugins/unity.js`, whose body is compiled into the CLI and whose path nothing can change. It runs only when the user runs the command. The file is written through a temporary file and a rename, its first line records a SHA-256 of the body the CLI wrote, and a later run replaces only a copy that still matches that digest. A file the user edited, or wrote themselves, is left alone with a warning unless the user passes `--yes`. `--dry-run` writes nothing. When OpenCode starts a session, the plugin runs one fixed command, `unity skill sync opencode --hook --format json`, in the background, ignores any failure, and shows only what that command returns as a toast and a context message. It takes no input from the session, and the skills it updates come from the same pinned repository and verification as `unity skill install`.
51
+
52
+ ### Local Editor control and C# evaluation
53
+
54
+ `unity command`, `unity command script eval`, and `unity shell --protocol ndjson` can drive a Unity Editor that is already open on the same machine and run C# through the project's `com.unity.pipeline` package. This executes **entirely on the local machine, in the current user's account, against the user's own Editor** — it is not remote access and grants no privilege the user does not already have at their own terminal. It is the CLI's core value for AI-assisted and automated Editor workflows.
55
+
56
+ Machine/agent mode (`unity shell --protocol ndjson`) runs the exact commands the caller sends. It validates framing (malformed or unknown requests return an error frame rather than crashing or ending the session), runs every command non-interactively, and returns structured JSON response frames (JSON-serialized, so control characters are escaped for the consuming parser). Callers must feed it **trusted input only** — commands they construct themselves — and never commands assembled from untrusted third-party content, exactly as they would guard any shell.
57
+
58
+ ### Launching the project’s own build
59
+
60
+ `unity build run` launches a player the CLI itself recorded from a previous `unity build` on the same machine — or the output the user names with `--build-path` — without rebuilding. It downloads nothing and runs nothing it did not just build or was not explicitly pointed at: a desktop player is started as the current user, and a WebGL build is served from a loopback-only local HTTP server that the default browser opens. Automated scanners flag documented executable paths (`./Build/…`) as local code execution; here the executable is the user’s own build artifact, on the user’s own machine, and the command refuses (exit 6) when no build has been recorded, when the recorded build’s platform cannot run on the current OS, or when its output is gone.
61
+ ### Install via the official CDN
62
+
63
+ The documented install downloads and runs an install script from Unity's official CDN, `public-cdn.cloud.unity3d.com`, **over HTTPS (TLS)**. This pipe-to-shell pattern is a deliberate, industry-standard install convenience for a first-party tool. Beyond TLS, the 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 — so a corrupted, truncated, or substituted download fails instead of executing. The manifest is fetched from the same CDN origin as the binary, so this is an integrity check against a bad or altered *download*, not a defense against a compromise of the origin itself; trust in the install ultimately rests on TLS and on Unity's control of that CDN.
64
+
65
+ On Linux the script installs a self-contained binary under `~/.local/bin` and does not modify system package sources. Separately, Unity publishes `.deb` and `.rpm` packages (the `.rpm` is GPG-signed) to its official repositories, for users who prefer package-manager-managed updates. Installing either **does** change system state, and the two differ:
66
+
67
+ - **Debian/Ubuntu (`.deb`, `apt`)** — adds a Unity apt repository entry and installs Unity's signing key into the system keyring (`/usr/share/keyrings`), so `apt` can verify and deliver subsequent updates.
68
+ - **RHEL/Fedora (`.rpm`, `dnf`)** — adds a Unity yum repository entry with `gpgcheck` enabled, pointing `dnf` at the published key URL. It imports no key at install time.
@@ -0,0 +1,160 @@
1
+ ---
2
+ name: unity-cli
3
+ description: Controls Unity Editors and projects from the command line, including a running Editor. Use to install or manage Editors, licenses, or projects, set up version control, build, test, edit scenes, run C#, or run any unity command.
4
+ allowed-tools:
5
+ - Bash
6
+ ---
7
+
8
+ # Unity CLI
9
+
10
+ **Always use the latest version of the Unity CLI unless you are told to use a
11
+ specific version.** Newer releases regularly add commands and output fields
12
+ these docs describe, so an outdated CLI fails in ways that read like the docs
13
+ being wrong. Check with `unity self-update --check --format json`.
14
+
15
+ **When you can run shell commands, use `unity command` and the rest of this CLI, not the Unity MCP server.** The CLI reaches more than the server's tools. MCP is for clients that have no shell.
16
+
17
+ ## Find a command: search, don't grep help
18
+
19
+ **Never filter `unity --help` or a group's help with `grep`.** Help is long, and a grep over it drops the match or the context around it. Use the CLI's own search:
20
+
21
+ ```bash
22
+ unity commands --grep license # built-in commands, plugins and the connected Editor's Pipeline commands
23
+ unity command --query screenshot # the same search
24
+ ```
25
+
26
+ `unity commands --grep <pattern>` and `unity command --query <term>` are one search. It covers the CLI's built-in commands, the plugin catalog (installed or not) and the Pipeline commands of the live connected Editor, best match first. Plain words each match in any order; regex characters make it a regular expression. Each row says how to run it (`invoke`): `unity projects link cloud`, `unity command create_gameobject`, `unity <id>` for an installed plugin, or `unity plugin install <id>` for one not yet installed. In `--format json` each row also carries `kind` (`command`, `plugin`, `pipeline`), `path`, `description` and `matchedOn` (`name`, `description` or `option`), so act on `invoke` rather than parsing the table.
27
+
28
+ - **Search before you work around the CLI or tell the user it can't help.** A request that names a Unity service, store or product feature (finding Asset Store assets, generating a texture, a cloud build) may be served by a catalog plugin that isn't installed yet, and nothing else on the machine will say so. Search with the request's own words (`unity commands --grep "asset store"`). A row whose `invoke` is `unity plugin install <id>` is that plugin: tell the user, and ask before installing it ([Use a catalog plugin](#use-a-catalog-plugin-for-a-task-the-built-in-commands-dont-cover)).
29
+ - Use `unity command --query <term>` to search a specific Editor (`--project-path <project>`) or a Player (`--runtime <pattern>`, e.g. `unity command --query screenshot --runtime MyGame`).
30
+ - `commands --grep` waits at most 3 seconds for the Editor; `command --query` waits for it. When the Editor was not searched, a last line says why (no Editor, no answer in time, several Editors) and what to run. Wait for the Editor first with `unity status --until-ready --project-path <project>`: before it connects, no Pipeline row is not proof nothing exists.
31
+
32
+ Fields and flags: [integration-advanced.md](references/integration-advanced.md#querying-the-command-list).
33
+
34
+ ## Drive a running Unity Editor (if one is open)
35
+
36
+ **If a Unity Editor is open on this machine, this CLI can control it live** — create and modify GameObjects, edit scenes and assets, inspect the hierarchy, and run arbitrary C# — through the project's **Pipeline** package (`com.unity.pipeline`). This runs entirely on your local machine, in your own user account, against your own open Editor: it is not remote access and grants no privilege you don't already have at your own terminal. When an Editor is available, drive it instead of hand-editing scene or asset files.
37
+
38
+ ```bash
39
+ unity status # confirm a connected Editor (look for state "ready")
40
+ unity command # list the commands the Editor exposes
41
+ unity command editor.playmode start # run one — e.g. enter Play mode
42
+ # Run arbitrary C# — e.g. add a GameObject named "Joe" — when the Editor exposes script eval:
43
+ unity command script eval --caller plugin --skill unity-cli 'new UnityEngine.GameObject("Joe");'
44
+ ```
45
+
46
+ **Pass `--caller plugin --skill <name>` on every `unity command` invocation.** `--skill` is the
47
+ skill whose instructions produced the call, so a task skill that sends you here passes its own name
48
+ rather than `unity-cli`. The flags are inert to the command itself; they only label the invocation.
49
+
50
+ > **Verifying a running game, not just editing a scene?** Entering Play mode is setup, not proof:
51
+ > an unfocused Editor or a locked desktop can freeze at frame 1 while `unity status` still reports it
52
+ > as playing, and a screenshot can render a frozen frame that looks alive, or a flat color. The
53
+ > ordered recipe for playing, confirming the game is actually advancing, capturing the view, reading
54
+ > the console, and tuning it live with `script eval` is in
55
+ > [playmode-verification-loop.md](references/playmode-verification-loop.md).
56
+
57
+ ### More than one Editor open? Pass `--project-path`
58
+
59
+ Several Editors or MPPM clones? Pin one by `--project-path`, `--port`, `--pid` or `--instance`: [editor-targeting.md](references/editor-targeting.md).
60
+
61
+ ## Install the CLI (if not already installed)
62
+
63
+ Only if `which unity` is empty: the macOS/Linux and Windows installers are in [setup-and-help.md](references/setup-and-help.md#install-the-cli-if-not-already-installed).
64
+
65
+ ## Global flags
66
+
67
+ `--format`, `--quiet`, paging and proxy flags for every command: [global-flags.md](references/global-flags.md).
68
+
69
+ ## Environment variables
70
+
71
+ Every `UNITY_*` variable and the flag it mirrors: [environment-variables.md](references/environment-variables.md).
72
+
73
+ ## Getting help
74
+
75
+ `-h`/`--help` on any command, and what to do when you don't know which command: [setup-and-help.md](references/setup-and-help.md#getting-help).
76
+
77
+ ## Exit codes
78
+
79
+ Branch on these before parsing output; retry guidance per code: [exit-codes.md](references/exit-codes.md).
80
+
81
+ ## Commands
82
+
83
+ The full per-command reference — syntax, flags, and examples — lives in grouped files under
84
+ [`references/`](references/). **Read the file for the command group you need**; all the global
85
+ flags, environment variables, and exit codes above apply throughout. Every command also supports
86
+ `-h` / `--help` (see [Getting help](#getting-help)).
87
+
88
+ | Commands | Reference file |
89
+ |---|---|
90
+ | `auth` (login / logout / status / list / switch / default / consumers / revoke), `license` (activate / return / server), `cloud` (org / project) | [auth-license-cloud.md](references/auth-license-cloud.md) |
91
+ | `pipeline cloud-build` (targets incl. groups, create, update, auditlog / builds incl. steps, timeline, failures, artifacts, log, download, start, cancel / credentials upload / connections / scm check-url / org free-tier / project / tooling), `pipeline automation` (apps / pipelines incl. trigger / jobs incl. watch, logs, terminate, resume, approve, reject / automations / bots / profiles / templates, plus `apps versions`, `pipelines versions`, `jobs stats`) | [cloud-automation.md](references/cloud-automation.md) |
92
+ | `editors` (list / running / add / default / path / install-path / info / upgrade / prune / verify / module), `install`, `uninstall`, `modules`, `install-modules`, `terms` (accept / status) | [editors-install.md](references/editors-install.md) |
93
+ | `projects` (list / create / clone / open / link / require / upgrade / export / import / pin / size / clean / exec; its help reads "Create, open, upgrade, and link local Unity projects (Unity Cloud, GitHub/GitLab)", so linking a folder to Unity Cloud is `projects link cloud`, not `cloud`), `open`, `close`, `releases`, `templates` (list / info / create / pack / delete), `assets` (`inspect` / `export`) | [projects-templates.md](references/projects-templates.md) |
94
+ | `config` (proxy / update-check / accelerator / get / set / list / unset / resolve), `context` (save / use / list / current / delete), `hub install` | [config-hub.md](references/config-hub.md) |
95
+ | `run`, `test`, `build` (+ `build run`), `recompile`, `watch` (`test`) | [build-run-test.md](references/build-run-test.md) |
96
+ | `logs`, `doctor`, `env`, `version`, `cache`, `ci init`, `analytics`, `changelog`, `docs` (+ `toc`), `language`, `completion`, `bug`, `self-update`, `self-uninstall`, `diagnose proxy`, `diagnose accelerator`, `diagnose update` | [diagnostics-maintenance.md](references/diagnostics-maintenance.md). To find, cite and version-match Unity docs: [docs-workflow.md](references/docs-workflow.md) |
97
+ | `mcp` (+ `configure`), `setup claude` / `codex` / `grok` / `antigravity` / `copilot` / `qwen` / `vscode` / `opencode`, `skill` (install / refresh / show), `plugin` (install / remove / upgrade / list / changelog), local `pipeline` (install / upgrade / list / list-versions), `command` / `commands` / `status` / `list`, `job` (status / wait / cancel), answering an open modal dialog (`command editor dialog` / `editor dialog answer`, or `editor.dialog list` / `answer` / `dismiss`), `shell` | [integration-advanced.md](references/integration-advanced.md) |
98
+ | `vcs` — `setup` / `status` / `sync` / `switch` / `doctor` / `providers` / `merge-setup` / `conflicts` / `explain` / `resolve` / `diff` / `blame` / `summarize` / `affected` / `hooks`, `vcs git` (`migrate-lfs` / `worktree`), `vcs uvcs` (`locks` / `changesets` / `review`) | [version-control.md](references/version-control.md) |
99
+ | `collaboration` (alias `collab`) — `annotations` / `attachments` / `thumbnail` / `reactions` / `read` / `subscribe` / `jira` | [collaboration.md](references/collaboration.md) |
100
+
101
+ ## Common workflows
102
+
103
+ ### Inspect and run cloud builds and Pipeline Automation jobs
104
+
105
+ `pipeline cloud-build` and `pipeline automation` end to end: [cloud-workflows.md](references/cloud-workflows.md).
106
+
107
+ ### Edit a scene, GameObject, or asset — `unity status` first
108
+
109
+ Read before editing any scene, prefab or asset: the preflight and the Safe Mode / sandbox false negatives in [scene-editing-preflight.md](references/scene-editing-preflight.md).
110
+
111
+ ### Use a catalog plugin for a task the built-in commands don't cover
112
+
113
+ When a request names a Unity feature no built-in command covers, check the catalog first: [catalog-plugins.md](references/catalog-plugins.md).
114
+
115
+ ### Bootstrap a new project from scratch
116
+
117
+ Raw CLI recipe from install to first commit (the `new-unity-project` skill is the guided path): [bootstrap-project.md](references/bootstrap-project.md).
118
+
119
+ ### Find and install a missing editor
120
+
121
+ Check what is installed, browse LTS releases, then install one: [setup-and-help.md](references/setup-and-help.md#find-and-install-a-missing-editor).
122
+
123
+ ### Open a project with the correct editor
124
+
125
+ ```bash
126
+ # 1. Check the project's required editor version
127
+ unity projects info /path/to/MyProject --format json
128
+ # Look at "editorVersion" in the result
129
+
130
+ # 2. Confirm that editor is installed
131
+ unity editors --installed --format json
132
+
133
+ # 3. Open (warns if the editor version is missing)
134
+ unity open /path/to/MyProject
135
+ ```
136
+
137
+ ### CI: activate a license, then build
138
+
139
+ CI recipe that activates a license, builds, then returns it: [ci-recipes.md](references/ci-recipes.md#ci-activate-a-license-then-build).
140
+
141
+ ### CI: headless build
142
+
143
+ Headless `unity build` and `unity run` invocations for CI: [ci-recipes.md](references/ci-recipes.md#ci-headless-build).
144
+
145
+ ### CI: run tests and publish results
146
+
147
+ JUnit output, exit-code branching and test-selection rules: [ci-recipes.md](references/ci-recipes.md#ci-run-tests-and-publish-results).
148
+
149
+ ### Debug the CLI
150
+
151
+ `unity doctor --json` and `unity logs --follow` while a run misbehaves: [setup-and-help.md](references/setup-and-help.md#debug-the-cli).
152
+
153
+ ## Notifications
154
+
155
+ When a JSON envelope carries `notifications`: what to surface and what needs approval — [notifications.md](references/notifications.md).
156
+
157
+ ## Notes
158
+
159
+ Parsing, output-shape and quoting rules to know before trusting a result: [notes.md](references/notes.md).
160
+
@@ -0,0 +1,318 @@
1
+ # Auth, license & cloud — 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
+ ### Contents
8
+
9
+ - Auth
10
+ - License — list, activate, return
11
+ - Cloud — Unity Cloud organizations and projects
12
+
13
+ ---
14
+
15
+ ### Auth
16
+
17
+ ```bash
18
+ # Check login status
19
+ unity auth status --format json
20
+
21
+ # Login (opens browser for OAuth)
22
+ unity auth login
23
+
24
+ # Login with service account credentials (CI — skips browser)
25
+ # Preferred: read secret from stdin to avoid shell-history and process-list exposure
26
+ unity auth login --client-id <id> --secret-from-stdin
27
+ # The secret must be piped in: a terminal on stdin is refused, and the
28
+ # command stops waiting after 30 seconds if the pipe is never closed.
29
+
30
+ # A --client-secret flag also exists, but passing a secret as a
31
+ # command-line argument exposes it in shell history and the process list.
32
+ # Avoid it — use --secret-from-stdin (above) or the
33
+ # UNITY_SERVICE_ACCOUNT_ID / UNITY_SERVICE_ACCOUNT_SECRET env vars instead.
34
+
35
+ # Login without persisting credentials to the keyring (ephemeral CI)
36
+ unity auth login --client-id <id> --secret-from-stdin --no-store
37
+
38
+ # Sign the CLI out (clears its OAuth sign-in and any saved service-account
39
+ # credentials). There is no confirmation prompt; --yes is accepted and changes nothing.
40
+ unity auth logout
41
+
42
+ # Sign one stored account out of the CLI, rather than the active one. Its saved
43
+ # sign-in stays on the machine while another app, such as the Hub, still uses it.
44
+ unity auth logout user@example.com
45
+ ```
46
+
47
+ **How sign-in is served.** Every command’s OAuth token read goes through a resident auth broker — a background `unity` process started on demand by the first command that needs a token, exiting on its own after two idle minutes. It seals the token store to the machine’s hardware where available (a non-exportable TPM key on Windows, TPM2 via `systemd-creds` on Linux, then DPAPI, the Secret Service, the Keychain and a local key file, in that order), and `unity doctor` reports the active tier. On macOS and Windows it verifies a connecting process’s code signature and refuses an unsigned or non-Unity-signed peer. The Editor identity helper that signs in an Editor started by `unity open` applies the same rule, so an Editor built from source (unsigned or not Unity-signed) is not supported for automatic sign-in. Set `UNITY_NO_AUTH_BROKER=1` to bypass the broker and read the OS keyring directly. `unity auth consumers` (below) lists the applications in its audit trail and revocation list.
48
+
49
+ #### Multiple accounts
50
+
51
+ The CLI stores more than one signed-in account and keeps one of them *active*. `unity auth login` adds an account; these three manage the set.
52
+
53
+ ```bash
54
+ # List stored accounts; "*" marks the active one
55
+ unity auth accounts
56
+ unity auth accounts --format json
57
+
58
+ # Make a stored account active (by email or id) — no browser round-trip
59
+ unity auth switch user@example.com
60
+
61
+ # Show the account a project uses for cloud commands
62
+ unity auth default
63
+
64
+ # Pin this project to an account, regardless of which one is active
65
+ unity auth default user@example.com
66
+
67
+ # Target a project other than the current directory
68
+ unity auth default user@example.com --project-path ./MyGame
69
+
70
+ # Remove the pin; the project follows the active account again
71
+ unity auth default --clear
72
+ ```
73
+
74
+ Three behaviors worth knowing before scripting these:
75
+
76
+ - **A project pin beats the active account.** If a project has a default set, commands run inside it keep using that account even after `unity auth switch` — the switch reports this rather than failing silently. Use `auth default --clear` to hand the project back to the active account.
77
+ - **Service-account credentials outrank both.** When `UNITY_SERVICE_ACCOUNT_ID` / `UNITY_SERVICE_ACCOUNT_SECRET` are set (or a service account is signed in), they take precedence over every stored account and `auth switch` says so instead of appearing to work. Unset them, or `unity auth logout`, before switching.
78
+ - **`auth switch` is ambiguity-aware.** Given a string matching several stored accounts it fails rather than guessing, and under `--format json` carries the candidates in `data.candidates` so a script can disambiguate. Pass the full email or the account id.
79
+
80
+ `unity auth default` resolves the project from `--project-path`, then `UNITY_PROJECT_PATH`, then the current directory, and errors if that path isn't a Unity project. Passing both an account and `--clear` is rejected.
81
+
82
+ #### Access tokens for scripts and other tools
83
+
84
+ `unity auth token` prints an access token from the CLI's sign-in, so a script, `curl` or another Unity tool can call Unity services as the signed-in user or service account without running its own sign-in. In the text formats stdout holds the token and nothing else (`--quiet` keeps it), so capture it directly.
85
+
86
+ ```bash
87
+ TOKEN=$(unity auth token)
88
+ curl -H "Authorization: Bearer $TOKEN" ...
89
+
90
+ # The token, its expiry (ISO 8601) and the auth mode, in the envelope
91
+ unity auth token --json
92
+ ```
93
+
94
+ - **OAuth sign-in:** an expired access token is refreshed before it prints. When the session can't be refreshed, nothing prints and the command exits `3` with `NOT_SIGNED_IN` or `SESSION_EXPIRED`.
95
+ - **Service account** (`UNITY_SERVICE_ACCOUNT_ID` / `UNITY_SERVICE_ACCOUNT_SECRET`, or `unity auth login --client-id`): prints the bearer Unity's token exchange mints for those credentials. Rejected credentials exit `3` (`AUTH_TOKEN_SERVICE_ACCOUNT_REJECTED`); any other mint failure exits `6`.
96
+ - **`--audience` and `--scope` are refused** (exit `2`, `AUTH_TOKEN_NARROWING_UNSUPPORTED`) until Unity's token service can mint a narrowed token, rather than handing out a broader one than asked for.
97
+ - The token is short-lived: fetch it again rather than storing it. The CLI never writes it to its logs; keep it out of yours.
98
+
99
+ #### Start the sign-in service for a plugin
100
+
101
+ `unity auth broker ensure` makes sure the CLI's sign-in service (the auth broker) is running, starting it when nothing answers. It then connects as a sign-in would, so exit `0` means the CLI would use that service, not only that something answers. A plugin that reads the signed-in session through the broker runs it before it needs a token. It reads no credential and needs no sign-in.
102
+
103
+ ```bash
104
+ unity auth broker ensure
105
+ # {"state": "already-running" | "started" | "disabled" | "unavailable" | "refused", "address": <socket path or null>}
106
+ unity auth broker ensure --json
107
+ ```
108
+
109
+ - `already-running` and `started` exit `0`.
110
+ - `disabled` exits `6` with `AUTH_BROKER_DISABLED`: `UNITY_NO_AUTH_BROKER` is set.
111
+ - `unavailable` exits `6` with `AUTH_BROKER_UNAVAILABLE`: no service answers and none could start.
112
+ - `refused` exits `6` with `AUTH_BROKER_REFUSED`: a service answers, but the CLI will not use it (it could not be verified as genuine Unity software, or is too old). The message names the fix.
113
+ - Every failure's envelope still carries `data`.
114
+
115
+ #### Consumers — see who's used your sign-in, and mark one revoked
116
+
117
+ Some products use your Unity sign-in without holding your refresh token themselves, brokering through the CLI's own auth broker instead. `unity auth consumers` lists every application in the broker's audit trail on this machine, plus any in the local revocation list, and `unity auth revoke` records one in that list. Read the Granted and Denied columns before concluding an application used your sign-in: one with only denials never received a token, and a revoked application with no audit history appears with no activity at all.
118
+
119
+ ```bash
120
+ # Application, scopes, grants/denials, and when it was last used
121
+ unity auth consumers
122
+ unity auth consumers --format json
123
+
124
+ # Add an application to the local revocation list (every scope it asked for)
125
+ unity auth revoke "Some Tool"
126
+
127
+ # Remove it from the list
128
+ unity auth revoke "Some Tool" --restore
129
+ ```
130
+
131
+ Both are local-only — reading the broker's audit trail and a local revocation list — so neither needs sign-in or the network. On a machine that has never run the broker, `auth consumers` reports an empty list rather than an error. `auth revoke` without `--restore` revokes; with it, it un-revokes; either way it reports the actual resulting state (e.g. "already revoked") rather than assuming the write changed anything. **The list is not enforced yet:** the auth broker does not consult it when it hands out tokens, so a revoked application can still use your sign-in. Neither `auth revoke` nor `unity auth logout` currently stops an application that already has broker access; `logout` keeps the account's saved sign-in while the Hub still uses it.
132
+
133
+ The stored token itself is sealed to the machine that wrote it (TPM-backed on Windows/Linux where available, Keychain on macOS, with a local-key-file fallback everywhere), so a copied token-store file is worthless on another machine. `unity doctor` reports which protection is in force.
134
+
135
+ **Separate sign-in from Hub.** As of `0.1.0-beta.8`, the CLI and the GUI Hub store their sign-in credentials **separately** — signing in to one no longer signs you out of (or overwrites the account of) the other, so each can stay signed in as a different account. (In earlier betas they shared a single keyring session.)
136
+
137
+ The two still share one account list. So an account you signed in to in the Hub shows up in `unity auth accounts` even though the CLI is not signed in to it, and `unity auth status` can report "not signed in" while `auth accounts` shows that account. To use it from the CLI, try `unity auth switch <account>` first: when that account's sign-in is readable on this machine, it becomes the CLI's active account with no browser round trip. When it has no usable sign-in, run `unity auth login` and sign in as that account in the browser; `auth switch` cannot sign an account in.
138
+
139
+ **Using the Hub's sign-in is your explicit choice.** When the CLI is signed out and the Hub is signed in, `unity auth login` shows the Hub's account and the `unity auth switch <account>` command that makes it the CLI's active account with no browser sign-in, then carries on with the browser sign-in. It asks nothing, and bare `unity auth` prints its group help. Running that `switch` command makes the Hub's account the CLI's active account, exactly as `unity auth switch` always does, and changes nothing in the Hub. The CLI never takes the Hub's sign-in on its own. `unity auth status --json` reports `adoptable: true`, the account and `adoptCommand`, and under `--json` `unity auth login` writes that `unity auth switch` command (not the account) as an `adoptable=` progress frame on stderr. An agent should show the user that command rather than run it unasked. Once switched, signing out of the Hub doesn't sign the CLI out. If you only want the CLI in order to activate a perpetual or legacy serial license, you do not need to sign in at all: see [Headless / fleet license activation](#headless--fleet-license-activation).
140
+
141
+ **Service-account credentials via env vars** (`UNITY_SERVICE_ACCOUNT_ID` + `UNITY_SERVICE_ACCOUNT_SECRET`) mint bearer tokens automatically for the duration of the process — no browser round-trip, no keyring write. If only one of the two is set, the CLI prints a warning on stderr instead of silently falling back to the keyring/OAuth identity.
142
+
143
+ The interactive `unity auth login` flow prints the sign-in URL to the terminal **before** attempting to launch the browser, which unblocks remote/headless sessions (SSH, containers, dev VMs) where `xdg-open` / `open` has no graphical session to attach to. With `--format json`, an `auth_url=…` progress frame is written to stderr so machine consumers can capture the URL without parsing human text, and stdout stays the result envelope alone.
144
+
145
+ A login that stores a session (the browser sign-in, or a service account without `--no-store`) ends with the machine-state summary: the account, organization, license, Editors, network when unreachable, the skills to load and the next command. In the human format it prints after the success line, and `--quiet` drops it. Under `--json` and `--format ndjson`, each thing that blocks creating a project is a `notifications` entry with its `code` and fix (`ENGINE_NOT_INSTALLED` or `NETWORK_UNREACHABLE`, for example), and the array is left out when nothing blocks. `--format ndjson` ends every successful login with the same `result` frame the json envelope carries (`loggedIn`, `user` or `mode`, `clientId`, `stored`). A failed login, `--no-store` and `--help` print no summary.
146
+
147
+ `unity auth status` reflects real session state (including an explicit "session expired" message), not optimistic local assumptions. `unity doctor` and `unity cloud status` report the same real session state.
148
+
149
+ ---
150
+
151
+ ### License — list, activate, return
152
+
153
+ ```bash
154
+ # List the Unity licenses active on this machine
155
+ unity license
156
+ unity licenses # explicit form, identical output
157
+ unity license --format json # machine-readable
158
+
159
+ # Summary: active license(s) + sign-in state
160
+ unity license status
161
+
162
+ # Activate a license — choose exactly one mode (default = signed-in subscription)
163
+ unity license activate # signed-in user's subscription (entitlement) licenses
164
+ unity license activate --serial SC-… # serial-based (ULF) activation, no sign-in needed
165
+ # or export UNITY_LICENSE_SERIAL and run `unity license activate` bare: the serial stays off argv
166
+ unity license activate --personal --accept-eula # free Unity Personal license (must accept the EULA)
167
+ unity license activate --floating # lease a seat from the configured floating server
168
+ unity license activate --file ./Unity_lic.ulf # offline activation from a .ulf / .xml file
169
+ unity license activate --generate-request ./req.alf # write an offline activation request (air-gapped)
170
+
171
+ # Return the active licenses — assigned/subscription AND serial-activated (prompts to confirm; --yes skips)
172
+ unity license return
173
+ unity license return --yes
174
+
175
+ # Floating (network) license server
176
+ unity license servers # the configured floating license server(s)
177
+ unity license server status # reachability + available seats
178
+ unity license server health # the server's own health report (GET /v1/status)
179
+ ```
180
+
181
+ `list` columns: product, license type (`Floating` / `Assigned` / `ULF`), organization, and expiry. `status` prints a one-glance summary — the active license(s) and whether you're signed in — and exits non-zero (`4`) when no license is active, so it works as a scriptable health check. The first licensing command downloads the Unity licensing client on demand; as of `0.1.0-beta.8`, if the client is unavailable `list` reports a clear error and exits non-zero (matching `status`), rather than printing an empty list.
182
+
183
+ On a floating-only machine the licensing client holds no license until the Editor leases a seat at startup. When no license is held and the configured floating server answers as healthy, `unity license status` exits `0`, says the Editor leases a seat when it starts, and reports `floatingServerHealthy: true` (`false`, with exit `4`, when the server is not healthy). `active` stays `false`, since no seat is held yet.
184
+
185
+ `unity license status` also reports `floatingServer` (the licensing server this machine is configured against) and `machineId` (the identity the licensing client reports to it) — the two values to match against a lease record when a floating seat looks stuck. Both are always present in `--format json` / `ndjson`; human and `tsv` output shows them only when a floating server is configured.
186
+
187
+ `activate` takes a single mode flag (combining them is a usage error). The default (no flag) and `--personal` activate the signed-in user's entitlements — sign in first with `unity auth login`. `--personal` also requires `--accept-eula` to acknowledge the Unity Personal license terms. `--serial`, `--floating`, `--file` and `--generate-request` need no sign-in, and `--file` and `--generate-request` also work offline. `--floating` requires a configured floating license server (exit `4` if none is set). `--generate-request` writes a `.alf` request for air-gapped activation instead of activating. `return` returns the active licenses, prompting for confirmation first — pass `--yes` to skip (required in non-interactive shells and with `--json`). All honor `--json` / `--format` and exit non-zero on failure (`2` bad usage, `3` sign-in required, `4` floating not configured, `6` licensing-client error).
188
+
189
+ **Service accounts.** The `license` commands recognize service-account sessions (`UNITY_SERVICE_ACCOUNT_ID` / `UNITY_SERVICE_ACCOUNT_SECRET`, or `unity auth login --client-id`): `unity license status` reports `Signed in: yes (service account)` and includes the auth mode in JSON. Unity's licensing backend does **not** accept service-account tokens for license activation, so with a service-account session the default entitlement mode and `--personal` fail up front — before contacting the licensing client — with guidance toward the unattended options (`--floating`, `--file`, `--generate-request`, or a perpetual `--serial`). `unity license return` lists and returns serial-activated licenses too (not just assigned/subscription seats) — important for CI machines that activate per run — and returns each license individually, so when only some can be freed it reports what succeeded (in text and in the JSON `returned` / `failed` fields) instead of an all-or-nothing failure.
190
+
191
+ #### Headless / fleet license activation
192
+
193
+ For build agents, lab machines, and any machine with no browser. There is **no username/password option**: the CLI only signs a user in through the browser, and a service account cannot activate a license, because Unity's licensing backend does not accept service-account tokens for activation. None of the paths below needs a signed-in account.
194
+
195
+ ```bash
196
+ # Perpetual or legacy Pro/Plus serial: no sign-in needed
197
+ unity license activate --serial <serial> --non-interactive --format json
198
+
199
+ # Air-gapped machine: write a request, exchange it elsewhere, then import the license file
200
+ unity license activate --generate-request ./unity.alf # on the offline machine
201
+ # ...exchange unity.alf for a .ulf license file on a machine with internet access
202
+ # (Unity's manual activation page), then copy the .ulf back...
203
+ unity license activate --file ./Unity_lic.ulf # on the offline machine
204
+
205
+ # Floating (network) licenses: lease a seat from the configured server
206
+ unity license server status # check the server and its free seats first
207
+ unity license activate --floating
208
+
209
+ # Decommissioning a machine: give the seat back so the serial can be activated elsewhere
210
+ unity license return --yes --non-interactive
211
+ ```
212
+
213
+ - **`--serial`** activates a serial-number license without signing in, on every platform. A serial tied to a subscription can still be refused with "This license requires a signed-in Unity account"; sign in on that machine, or use one of the other paths.
214
+ - **`--generate-request` then `--file`** is the offline path. The request file identifies this machine, so import the resulting license file on the same machine that generated the request. Both talk to the Unity Licensing Client on the machine, and the CLI downloads that client (about 110 MB) the first time a `license` command needs it. Stage it while the machine, or the image it is built from, still has network access: run `unity license status` once. With no client installed, that fetches one into the CLI's data folder. A `Unity.Licensing.Client` already on `PATH` is used instead when no downloaded copy exists, with no version check, and an older one fails the handshake, so update or remove an older `PATH` client before staging. The downloaded client lands in the data folder of the user who ran the command (under `HOME`, or `XDG_CONFIG_HOME` when set), so run the staging step as the same user, with the same `HOME`, that will run the CLI later; a client staged as root in an image build is not found by a container that runs as another user. Otherwise, put a current `Unity.Licensing.Client` on a shared `PATH`.
215
+
216
+ On an image with no license yet, `unity license status` exits `4` (no license active), which is expected at this point. A fail-fast shell or a Dockerfile `RUN` stops on it, so accept exactly `4` and keep every other failure, such as `6` when the client could not be fetched:
217
+
218
+ ```bash
219
+ unity license status || [ $? -eq 4 ]
220
+ ```
221
+
222
+ ```powershell
223
+ unity license status; if ($LASTEXITCODE -notin 0, 4) { exit $LASTEXITCODE }
224
+ ```
225
+ - **`--floating`** needs a floating license server configured on the machine first (exit `4` otherwise). `unity license servers` shows which one is configured.
226
+ - **`license return`** returns serial-activated licenses as well as assigned ones. Run it before you reimage or retire a machine, or that activation keeps counting against the serial's limit. It needs `--yes` when nothing can answer a prompt. A license imported offline with `--file` cannot be returned this way: `license return` reports it as activated manually and leaves it in place.
227
+
228
+ `unity license servers` shows the configured floating license server (from the `licensingServiceBaseUrl` machine setting; a pure settings read, no client download). `unity license server status` contacts that server and reports reachability plus available seats — exit `4` when no server is configured, `6` when configured but unreachable. When the licensing client cannot read the seats (it can't with nobody signed in) but the server answers its `/v1/status` as healthy, `server status` still reports it reachable and exits `0`, says seat usage is not available, and adds `seatsUnavailable: true` to the JSON.
229
+
230
+ `unity license server health` asks the configured server directly for its health on its anonymous `/v1/status` endpoint, through the CLI's own proxy settings; it does not need the licensing client or a sign-in. It reports the server's `status` (`Healthy`, `Degraded` or `Unhealthy`) and `version`, plus `reachable`, `healthy` and `httpStatus` in `--format json` / `ndjson`. Exit `0` when the server is Healthy or Degraded, `4` when no server is configured, and `6` when it is unreachable, Unhealthy, or answers without a status (for example a proxy error page). A non-zero run writes `success: false` and keeps the report in `data`, with `LICENSE_SERVER_NOT_CONFIGURED`, `LICENSE_SERVER_UNREACHABLE` or `LICENSE_SERVER_UNHEALTHY`.
231
+
232
+ ---
233
+
234
+ ### Cloud — Unity Cloud organizations and projects
235
+
236
+ Requires being signed in (`unity auth login`).
237
+
238
+ ```bash
239
+ # Show cloud sign-in state and active organization
240
+ unity cloud status --format json
241
+
242
+ # Organizations
243
+ unity cloud orgs --format json
244
+ unity cloud org current # print the active default org (named when signed in)
245
+ unity cloud org set-default <id-or-name> # set active default org
246
+ unity cloud org clear-default # revert to "All Organizations"
247
+
248
+ # Create an organization (company profile: individual or company, plus country)
249
+ unity cloud org create "<name>" --first-name Ada --last-name Lovelace --country GB
250
+ unity cloud org create "<name>" --company-name "Nebula Games Inc." --country US --region CA --set-default
251
+
252
+ # Projects in the active organization
253
+ unity cloud projects --format json # * marks the active default project
254
+ unity cloud projects --search "<text>" --limit 20 --offset 40 --format json # one page, by name
255
+
256
+ # To link a local folder to a cloud project, use `unity projects link cloud <path>` (see projects-templates.md);
257
+ # `unity cloud project --help` and `unity projects link cloud --help` point at each other
258
+
259
+ # Default project, stored per organization
260
+ unity cloud project current # print the saved default project, and the project linked to this folder
261
+ unity cloud project set-default <id-or-name> # project UUID, Genesis id, or exact name
262
+ unity cloud project clear-default # drop this organization's default
263
+
264
+ # Override the active organization for a single call
265
+ unity cloud projects --cloud-org <id-or-name> # also via UNITY_CLOUD_ORG env var
266
+ ```
267
+
268
+ **Creating an organization takes a name and a company profile**, the same fields the Unity
269
+ Dashboard's create dialog asks for. `--type individual` needs `--first-name` and `--last-name`;
270
+ `--type company` needs `--company-name`. `--type` can be left out when the name flags already say
271
+ which it is, and passing both kinds is refused. `--country` is a two-letter ISO 3166-1 alpha-2 code (`GB`,
272
+ not `GBR`, and not `UK`, which is not an ISO code). `--region` is the ISO 3166-2 subdivision (`CA`, or `US-CA`) and is
273
+ required for the US, Canada, and Mexico and refused for every other country. The organization name
274
+ is trimmed and capped at 40 characters; person and company names follow the Dashboard's own
275
+ character rules. Everything passed is validated before the sign-in check and before any request,
276
+ so a typo costs no network call. Omitted fields are prompted for on a terminal; under
277
+ `--non-interactive`, or when output is redirected, the command fails naming every missing option.
278
+ Whether a country or subdivision code actually exists is the server's call, and its field-level
279
+ reason is reported as-is. `--set-default` makes the new organization active, exactly as
280
+ `org set-default` would; if the setting cannot be written the organization is still reported as
281
+ created, with a warning that the default did not take effect. A name already in use is reported as
282
+ such rather than as an HTTP status. Machine output is a create-specific shape carrying `id` and
283
+ `name` only, deliberately not `org list`'s row, since the create response has no `role` and the
284
+ default marker describes a list rather than a single new organization.
285
+
286
+ **The default project is per organization.** `set-default` stores the project's UUID against the
287
+ active organization's Genesis id, so switching your active organization switches which default
288
+ applies, and `clear-default` only drops the active organization's. `cloud project current` and
289
+ `clear-default` read and write the settings file directly, so they need no network and no session
290
+ when the organization comes from your stored default; passing `--cloud-org <name>` needs a lookup,
291
+ so that path requires a session like the rest. `cloud project current` labels what it prints as the
292
+ saved default, and inside a Unity project folder linked to a cloud project it also prints that linked
293
+ project. Setting a default never changes which project a folder is linked to (`projects link cloud`
294
+ does that). Under `--format json`, `activeCloudProjectId` still holds the default, with
295
+ `defaultCloudProjectId` and `linkedCloudProjectId` beside it (`null` outside a linked project folder).
296
+ Under `--format tsv`, which is the default when output is piped, it prints the same fields as
297
+ `key<TAB>value` lines after a `key`/`value` header row (an empty value where `json` has `null`).
298
+
299
+ **What consumes it.** Commands that need a Unity Cloud project but were not given one fall back to
300
+ the stored default. The order is the explicit flag (`--cloud-project`), then `UNITY_CLOUD_PROJECT`,
301
+ then the cloud link in the project directory's `ProjectSettings/ProjectSettings.asset`, then the
302
+ stored default, so inside a cloud-linked project the link still wins. `unity collaboration` uses
303
+ this chain. `unity projects link cloud` applies the default too, with its own order (`--cloud-project`,
304
+ then `UNITY_CLOUD_PROJECT`, then the default, see projects-templates.md). `unity projects create` does
305
+ not read the default: it creates a new cloud project unless `--cloud-project` names one or `--no-cloud`
306
+ (or `UNITY_NO_CLOUD`) declines. `cloud project current` prints the saved default, not necessarily the
307
+ folder's project: under `--format json`, `linkedCloudProjectId` is the folder's link.
308
+
309
+ **A project in another organization.** `set-default` looks in the active organization first. When the project is in
310
+ another of your organizations, the error names that organization (`UNKNOWN_CLOUD_PROJECT`, exit `2`, with the
311
+ organization under `data.organization` in `--format json`). Run `unity cloud org set-default <genesis id>`, then
312
+ `set-default` again. When the organization comes from `--cloud-org` or `UNITY_CLOUD_ORG`, the other organizations are
313
+ not checked, because that value overrides the saved default.
314
+
315
+ **Exit codes.** The `cloud` and `auth` commands map an authentication failure (expired or missing session, rejected sign-in) to `3`, and any other operational failure (network, server error) to `6` — so scripts can distinguish "sign in again" from a genuine command failure. `unity auth status` / `logout` follow the same convention. A status command that answers no is a failure in `--format json` too: signed out, `unity auth status` and `unity cloud status` exit `3` with `success: false` and `errors[0].code` `NOT_SIGNED_IN` (or `SESSION_EXPIRED`); `unity license status` with no license exits `4` with `LICENSE_NOT_ACTIVE`; `unity license server status` exits `4` with `LICENSE_SERVER_NOT_CONFIGURED` or `6` with `LICENSE_SERVER_UNREACHABLE`. Each keeps its report in `data` (`loggedIn: false`, `active: false`, `reachable: false`), so read `success` or the exit code, they always agree.
316
+
317
+ ---
318
+