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,347 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "defaultProfile": "quality",
4
+ "modelProfiles": {
5
+ "quality": {
6
+ "lightweight": "haiku",
7
+ "standard": "sonnet",
8
+ "deep": "opus",
9
+ "leadership": "opus"
10
+ },
11
+ "balanced": {
12
+ "lightweight": "haiku",
13
+ "standard": "sonnet",
14
+ "deep": "opus",
15
+ "leadership": "sonnet"
16
+ },
17
+ "inherit": {
18
+ "lightweight": null,
19
+ "standard": null,
20
+ "deep": null,
21
+ "leadership": null
22
+ }
23
+ },
24
+ "orchestration": {
25
+ "maxAgentDepth": 1,
26
+ "defaultMaxParallel": 4,
27
+ "singleWriterPerPath": true,
28
+ "independentVerification": true
29
+ },
30
+ "agents": [
31
+ {
32
+ "name": "nccgs-creative-director",
33
+ "department": "leadership",
34
+ "modelClass": "leadership",
35
+ "defaultModel": "opus",
36
+ "maxTurns": 24
37
+ },
38
+ {
39
+ "name": "nccgs-technical-director",
40
+ "department": "leadership",
41
+ "modelClass": "leadership",
42
+ "defaultModel": "opus",
43
+ "maxTurns": 24
44
+ },
45
+ {
46
+ "name": "nccgs-producer",
47
+ "department": "leadership",
48
+ "modelClass": "leadership",
49
+ "defaultModel": "opus",
50
+ "maxTurns": 20
51
+ },
52
+ {
53
+ "name": "nccgs-game-design-lead",
54
+ "department": "design",
55
+ "modelClass": "standard",
56
+ "defaultModel": "sonnet",
57
+ "maxTurns": 20
58
+ },
59
+ {
60
+ "name": "nccgs-programming-lead",
61
+ "department": "programming",
62
+ "modelClass": "standard",
63
+ "defaultModel": "sonnet",
64
+ "maxTurns": 20
65
+ },
66
+ {
67
+ "name": "nccgs-art-direction-lead",
68
+ "department": "content",
69
+ "modelClass": "standard",
70
+ "defaultModel": "sonnet",
71
+ "maxTurns": 18
72
+ },
73
+ {
74
+ "name": "nccgs-audio-direction-lead",
75
+ "department": "content",
76
+ "modelClass": "standard",
77
+ "defaultModel": "sonnet",
78
+ "maxTurns": 18
79
+ },
80
+ {
81
+ "name": "nccgs-narrative-lead",
82
+ "department": "content",
83
+ "modelClass": "standard",
84
+ "defaultModel": "sonnet",
85
+ "maxTurns": 20
86
+ },
87
+ {
88
+ "name": "nccgs-qa-lead",
89
+ "department": "quality",
90
+ "modelClass": "standard",
91
+ "defaultModel": "sonnet",
92
+ "maxTurns": 20
93
+ },
94
+ {
95
+ "name": "nccgs-release-lead",
96
+ "department": "release",
97
+ "modelClass": "standard",
98
+ "defaultModel": "sonnet",
99
+ "maxTurns": 20
100
+ },
101
+ {
102
+ "name": "nccgs-localization-lead",
103
+ "department": "content",
104
+ "modelClass": "standard",
105
+ "defaultModel": "sonnet",
106
+ "maxTurns": 18
107
+ },
108
+ {
109
+ "name": "nccgs-game-designer",
110
+ "department": "design",
111
+ "modelClass": "standard",
112
+ "defaultModel": "sonnet",
113
+ "maxTurns": 18
114
+ },
115
+ {
116
+ "name": "nccgs-systems-designer",
117
+ "department": "design",
118
+ "modelClass": "standard",
119
+ "defaultModel": "sonnet",
120
+ "maxTurns": 18
121
+ },
122
+ {
123
+ "name": "nccgs-level-designer",
124
+ "department": "design",
125
+ "modelClass": "standard",
126
+ "defaultModel": "sonnet",
127
+ "maxTurns": 18
128
+ },
129
+ {
130
+ "name": "nccgs-economy-designer",
131
+ "department": "design",
132
+ "modelClass": "standard",
133
+ "defaultModel": "sonnet",
134
+ "maxTurns": 18
135
+ },
136
+ {
137
+ "name": "nccgs-ux-designer",
138
+ "department": "design",
139
+ "modelClass": "standard",
140
+ "defaultModel": "sonnet",
141
+ "maxTurns": 18
142
+ },
143
+ {
144
+ "name": "nccgs-accessibility-specialist",
145
+ "department": "design",
146
+ "modelClass": "standard",
147
+ "defaultModel": "sonnet",
148
+ "maxTurns": 18
149
+ },
150
+ {
151
+ "name": "nccgs-prototyper",
152
+ "department": "design",
153
+ "modelClass": "standard",
154
+ "defaultModel": "sonnet",
155
+ "maxTurns": 18
156
+ },
157
+ {
158
+ "name": "nccgs-technical-architect",
159
+ "department": "programming",
160
+ "modelClass": "deep",
161
+ "defaultModel": "opus",
162
+ "maxTurns": 22
163
+ },
164
+ {
165
+ "name": "nccgs-gameplay-programmer",
166
+ "department": "programming",
167
+ "modelClass": "standard",
168
+ "defaultModel": "sonnet",
169
+ "maxTurns": 22
170
+ },
171
+ {
172
+ "name": "nccgs-engine-programmer",
173
+ "department": "programming",
174
+ "modelClass": "standard",
175
+ "defaultModel": "sonnet",
176
+ "maxTurns": 22
177
+ },
178
+ {
179
+ "name": "nccgs-ai-programmer",
180
+ "department": "programming",
181
+ "modelClass": "standard",
182
+ "defaultModel": "sonnet",
183
+ "maxTurns": 22
184
+ },
185
+ {
186
+ "name": "nccgs-network-programmer",
187
+ "department": "programming",
188
+ "modelClass": "standard",
189
+ "defaultModel": "sonnet",
190
+ "maxTurns": 24
191
+ },
192
+ {
193
+ "name": "nccgs-tools-programmer",
194
+ "department": "programming",
195
+ "modelClass": "standard",
196
+ "defaultModel": "sonnet",
197
+ "maxTurns": 20
198
+ },
199
+ {
200
+ "name": "nccgs-ui-programmer",
201
+ "department": "programming",
202
+ "modelClass": "standard",
203
+ "defaultModel": "sonnet",
204
+ "maxTurns": 22
205
+ },
206
+ {
207
+ "name": "nccgs-security-engineer",
208
+ "department": "quality",
209
+ "modelClass": "standard",
210
+ "defaultModel": "sonnet",
211
+ "maxTurns": 20
212
+ },
213
+ {
214
+ "name": "nccgs-performance-analyst",
215
+ "department": "quality",
216
+ "modelClass": "standard",
217
+ "defaultModel": "sonnet",
218
+ "maxTurns": 20
219
+ },
220
+ {
221
+ "name": "nccgs-technical-artist",
222
+ "department": "content",
223
+ "modelClass": "standard",
224
+ "defaultModel": "sonnet",
225
+ "maxTurns": 20
226
+ },
227
+ {
228
+ "name": "nccgs-sound-designer",
229
+ "department": "content",
230
+ "modelClass": "standard",
231
+ "defaultModel": "sonnet",
232
+ "maxTurns": 18
233
+ },
234
+ {
235
+ "name": "nccgs-writer",
236
+ "department": "content",
237
+ "modelClass": "standard",
238
+ "defaultModel": "sonnet",
239
+ "maxTurns": 18
240
+ },
241
+ {
242
+ "name": "nccgs-world-builder",
243
+ "department": "content",
244
+ "modelClass": "standard",
245
+ "defaultModel": "sonnet",
246
+ "maxTurns": 18
247
+ },
248
+ {
249
+ "name": "nccgs-analytics-engineer",
250
+ "department": "quality",
251
+ "modelClass": "standard",
252
+ "defaultModel": "sonnet",
253
+ "maxTurns": 18
254
+ },
255
+ {
256
+ "name": "nccgs-live-ops-designer",
257
+ "department": "design",
258
+ "modelClass": "standard",
259
+ "defaultModel": "sonnet",
260
+ "maxTurns": 18
261
+ },
262
+ {
263
+ "name": "nccgs-qa-engineer",
264
+ "department": "quality",
265
+ "modelClass": "standard",
266
+ "defaultModel": "sonnet",
267
+ "maxTurns": 22
268
+ },
269
+ {
270
+ "name": "nccgs-verification-engineer",
271
+ "department": "quality",
272
+ "modelClass": "standard",
273
+ "defaultModel": "sonnet",
274
+ "maxTurns": 22
275
+ },
276
+ {
277
+ "name": "nccgs-adversarial-reviewer",
278
+ "department": "quality",
279
+ "modelClass": "deep",
280
+ "defaultModel": "opus",
281
+ "maxTurns": 20
282
+ },
283
+ {
284
+ "name": "nccgs-documentation-manager",
285
+ "department": "quality",
286
+ "modelClass": "lightweight",
287
+ "defaultModel": "haiku",
288
+ "maxTurns": 14
289
+ },
290
+ {
291
+ "name": "nccgs-release-engineer",
292
+ "department": "release",
293
+ "modelClass": "standard",
294
+ "defaultModel": "sonnet",
295
+ "maxTurns": 24
296
+ },
297
+ {
298
+ "name": "nccgs-unity-implementer",
299
+ "department": "unity",
300
+ "modelClass": "standard",
301
+ "defaultModel": "sonnet",
302
+ "maxTurns": 24
303
+ },
304
+ {
305
+ "name": "nccgs-unity-systems-specialist",
306
+ "department": "unity",
307
+ "modelClass": "standard",
308
+ "defaultModel": "sonnet",
309
+ "maxTurns": 22
310
+ },
311
+ {
312
+ "name": "nccgs-unity-ui-specialist",
313
+ "department": "unity",
314
+ "modelClass": "standard",
315
+ "defaultModel": "sonnet",
316
+ "maxTurns": 22
317
+ },
318
+ {
319
+ "name": "nccgs-unity-rendering-specialist",
320
+ "department": "unity",
321
+ "modelClass": "standard",
322
+ "defaultModel": "sonnet",
323
+ "maxTurns": 22
324
+ },
325
+ {
326
+ "name": "nccgs-unity-content-specialist",
327
+ "department": "unity",
328
+ "modelClass": "standard",
329
+ "defaultModel": "sonnet",
330
+ "maxTurns": 22
331
+ },
332
+ {
333
+ "name": "nccgs-unity-build-specialist",
334
+ "department": "unity",
335
+ "modelClass": "standard",
336
+ "defaultModel": "sonnet",
337
+ "maxTurns": 24
338
+ },
339
+ {
340
+ "name": "nccgs-production-coordinator",
341
+ "department": "leadership",
342
+ "modelClass": "standard",
343
+ "defaultModel": "sonnet",
344
+ "maxTurns": 18
345
+ }
346
+ ]
347
+ }
@@ -0,0 +1,39 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+
5
+ const ownDir = path.dirname(fileURLToPath(import.meta.url));
6
+ const args = process.argv.slice(2);
7
+ const projectArg = args.indexOf("--project");
8
+ const profileArg = args.indexOf("--profile");
9
+ const project = path.resolve(projectArg >= 0 ? args[projectArg + 1] : path.resolve(ownDir, "../../../.."));
10
+ const catalogPath = path.join(project, ".claude", "nccgs", "studio.json");
11
+ const catalog = JSON.parse(fs.readFileSync(catalogPath, "utf8"));
12
+ const policyPath = path.join(project, ".nccgs", "project.yaml");
13
+ const policy = fs.existsSync(policyPath) ? fs.readFileSync(policyPath, "utf8") : "";
14
+ const configured = policy.match(/^models:\s*$[\s\S]*?^\s+profile:\s*([^#\r\n]+)/m)?.[1]?.trim();
15
+ const profileName = profileArg >= 0 ? args[profileArg + 1] : (configured || catalog.defaultProfile);
16
+ const profile = catalog.modelProfiles[profileName];
17
+ if (!profile) throw new Error(`Unknown model profile '${profileName}'. Expected: ${Object.keys(catalog.modelProfiles).join(", ")}`);
18
+
19
+ let changed = 0;
20
+ for (const agent of catalog.agents) {
21
+ const file = path.join(project, ".claude", "agents", `${agent.name}.md`);
22
+ if (!fs.existsSync(file)) continue;
23
+ let text = fs.readFileSync(file, "utf8");
24
+ const model = profile[agent.modelClass];
25
+ const next = model
26
+ ? (/^model:/m.test(text) ? text.replace(/^model:.*$/m, `model: ${model}`) : text.replace(/^maxTurns:/m, `model: ${model}\nmaxTurns:`))
27
+ : text.replace(/^model:.*\r?\n/m, "");
28
+ if (next !== text) {
29
+ fs.writeFileSync(file, next, "utf8");
30
+ changed++;
31
+ }
32
+ }
33
+
34
+ if (profileArg >= 0 && policy && /^models:\s*$/m.test(policy)) {
35
+ const nextPolicy = policy.replace(/(^models:\s*$[\s\S]*?^\s+profile:\s*)[^#\r\n]+/m, `$1${profileName}`);
36
+ if (nextPolicy !== policy) fs.writeFileSync(policyPath, nextPolicy, "utf8");
37
+ }
38
+
39
+ console.log(`NCCGS model profile '${profileName}' configured; ${changed} agent file(s) changed.`);