claude-code-arcane 2.9.8 → 2.10.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 (147) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/README.md +40 -38
  3. package/agents/business/business-ops-lead.md +1 -14
  4. package/agents/game/gameplay-programmer.md +3 -4
  5. package/agents/game/technical-artist.md +3 -4
  6. package/dist/cli.js +105 -39
  7. package/docs/USER-GUIDE.md +24 -22
  8. package/docs/coordination-rules.md +1 -1
  9. package/docs/directory-structure.md +93 -122
  10. package/package.json +1 -1
  11. package/profiles/ai.yaml +3 -0
  12. package/profiles/android-native.yaml +2 -0
  13. package/profiles/backend-go.yaml +1 -8
  14. package/profiles/backend-ts.yaml +2 -8
  15. package/profiles/backend-typescript.yaml +51 -0
  16. package/profiles/flutter.yaml +2 -0
  17. package/profiles/frontend-react-vite.yaml +39 -0
  18. package/profiles/frontend.yaml +2 -0
  19. package/profiles/integrations.yaml +6 -1
  20. package/profiles/ios-native.yaml +2 -0
  21. package/profiles/mobile-android-kotlin.yaml +36 -0
  22. package/profiles/mobile-flutter.yaml +37 -0
  23. package/profiles/mobile-ios-swift.yaml +37 -0
  24. package/profiles/mobile-react-native.yaml +39 -0
  25. package/profiles/mobile.yaml +2 -0
  26. package/rules/gamedev/engine-code.md +1 -1
  27. package/rules/gamedev/shader-code.md +1 -2
  28. package/rules/gamedev/vn-code.md +3 -2
  29. package/rules/implementation-workflow.md +1 -1
  30. package/rules/{ai-code.md → llm-code.md} +5 -5
  31. package/skills/agent-designer/README.md +2 -1
  32. package/skills/agent-designer/agent_evaluator.py +0 -5
  33. package/skills/ai-sdk-setup/SKILL.md +4 -4
  34. package/skills/arcane-add/SKILL.md +1 -1
  35. package/skills/arcane-list/SKILL.md +3 -3
  36. package/skills/arcane-status/SKILL.md +1 -1
  37. package/skills/architecture-decision/SKILL.md +3 -4
  38. package/skills/architecture-review/SKILL.md +1 -1
  39. package/skills/asset-audit/SKILL.md +0 -1
  40. package/skills/balance-check/SKILL.md +1 -1
  41. package/skills/brainstorm/SKILL.md +3 -3
  42. package/skills/brainstorm/references/next-steps-pipeline.md +8 -9
  43. package/skills/consistency-check/SKILL.md +2 -2
  44. package/skills/design-system/SKILL.md +1 -1
  45. package/skills/design-system/references/post-design-validation.md +2 -3
  46. package/skills/freelance-kickoff/SKILL.md +1 -1
  47. package/skills/frontend-dev/SKILL.md +27 -28
  48. package/skills/frontend-dev/references/asset-prompt-guide.md +1 -1
  49. package/skills/frontend-dev/references/motion-recipes.md +1 -1
  50. package/skills/help/SKILL.md +1 -2
  51. package/skills/hotfix/SKILL.md +2 -2
  52. package/skills/milestone-review/SKILL.md +1 -1
  53. package/skills/patch-notes/SKILL.md +1 -1
  54. package/skills/playtest-report/SKILL.md +2 -3
  55. package/skills/playwright-pro/CLAUDE.md +2 -2
  56. package/skills/playwright-pro/SKILL.md +13 -9
  57. package/skills/playwright-pro/agents/migration-planner.md +2 -2
  58. package/skills/playwright-pro/agents/test-architect.md +1 -2
  59. package/skills/playwright-pro/agents/test-debugger.md +1 -1
  60. package/skills/playwright-pro/hooks/detect-playwright.sh +1 -1
  61. package/skills/playwright-pro/skills/browserstack/SKILL.md +5 -5
  62. package/skills/playwright-pro/skills/migrate/SKILL.md +1 -1
  63. package/skills/playwright-pro/skills/report/SKILL.md +2 -2
  64. package/skills/playwright-pro/skills/testrail/SKILL.md +5 -5
  65. package/skills/playwright-pro/templates/README.md +2 -2
  66. package/skills/prototype/SKILL.md +1 -1
  67. package/skills/quick-design/SKILL.md +1 -1
  68. package/skills/release-checklist/SKILL.md +0 -1
  69. package/skills/security-audit/SKILL.md +1 -1
  70. package/skills/self-improving-agent/CLAUDE.md +12 -12
  71. package/skills/self-improving-agent/SKILL.md +16 -12
  72. package/skills/self-improving-agent/agents/memory-analyst.md +1 -1
  73. package/skills/self-improving-agent/hooks/error-capture.sh +2 -2
  74. package/skills/self-improving-agent/reference/memory-architecture.md +2 -2
  75. package/skills/self-improving-agent/reference/promotion-rules.md +3 -3
  76. package/skills/self-improving-agent/reference/rules-directory-patterns.md +1 -1
  77. package/skills/self-improving-agent/settings.json +5 -5
  78. package/skills/self-improving-agent/skills/extract/SKILL.md +7 -7
  79. package/skills/self-improving-agent/skills/promote/SKILL.md +5 -5
  80. package/skills/self-improving-agent/skills/remember/SKILL.md +9 -9
  81. package/skills/self-improving-agent/skills/review/SKILL.md +7 -7
  82. package/skills/self-improving-agent/skills/status/SKILL.md +8 -8
  83. package/skills/senior-ml-engineer/references/llm_integration_guide.md +14 -31
  84. package/skills/senior-prompt-engineer/SKILL.md +10 -10
  85. package/skills/senior-prompt-engineer/references/prompt_engineering_patterns.md +1 -1
  86. package/skills/senior-prompt-engineer/scripts/agent_orchestrator.py +43 -40
  87. package/skills/senior-prompt-engineer/scripts/prompt_optimizer.py +23 -66
  88. package/skills/shader-dev/reference/fluid-simulation.md +4 -4
  89. package/skills/shader-dev/reference/simulation-physics.md +6 -6
  90. package/skills/shader-dev/reference/voxel-rendering.md +1 -1
  91. package/skills/shader-dev/techniques/ambient-occlusion.md +1 -1
  92. package/skills/shader-dev/techniques/analytic-ray-tracing.md +2 -2
  93. package/skills/shader-dev/techniques/domain-warping.md +2 -2
  94. package/skills/shader-dev/techniques/fluid-simulation.md +45 -45
  95. package/skills/shader-dev/techniques/multipass-buffer.md +24 -24
  96. package/skills/shader-dev/techniques/normal-estimation.md +1 -1
  97. package/skills/shader-dev/techniques/particle-system.md +16 -16
  98. package/skills/shader-dev/techniques/polar-uv-manipulation.md +1 -1
  99. package/skills/shader-dev/techniques/post-processing.md +7 -7
  100. package/skills/shader-dev/techniques/sdf-3d.md +1 -1
  101. package/skills/shader-dev/techniques/simulation-physics.md +24 -24
  102. package/skills/shader-dev/techniques/sound-synthesis.md +2 -2
  103. package/skills/shader-dev/techniques/voronoi-cellular-noise.md +1 -1
  104. package/skills/shader-dev/techniques/voxel-rendering.md +60 -60
  105. package/skills/smoke-check/SKILL.md +1 -1
  106. package/skills/sprint-plan/SKILL.md +1 -2
  107. package/skills/start/SKILL.md +7 -7
  108. package/skills/story-done/SKILL.md +1 -1
  109. package/skills/test-helpers/SKILL.md +7 -2
  110. package/skills/test-setup/SKILL.md +1 -1
  111. package/skills/ue-actor-component-architecture/SKILL.md +0 -1
  112. package/skills/ue-ai-navigation/SKILL.md +0 -1
  113. package/skills/ue-animation-system/SKILL.md +0 -1
  114. package/skills/ue-async-threading/SKILL.md +0 -1
  115. package/skills/ue-audio-system/SKILL.md +0 -1
  116. package/skills/ue-blueprints/SKILL.md +0 -1
  117. package/skills/ue-character-movement/SKILL.md +0 -1
  118. package/skills/ue-cpp-foundations/SKILL.md +0 -1
  119. package/skills/ue-data-assets-tables/SKILL.md +0 -1
  120. package/skills/ue-editor-tools/SKILL.md +0 -1
  121. package/skills/ue-game-features/SKILL.md +0 -1
  122. package/skills/ue-gameplay-abilities/SKILL.md +0 -1
  123. package/skills/ue-gameplay-framework/SKILL.md +0 -1
  124. package/skills/ue-input-system/SKILL.md +0 -1
  125. package/skills/ue-mass-entity/SKILL.md +0 -1
  126. package/skills/ue-materials-rendering/SKILL.md +0 -1
  127. package/skills/ue-module-build-system/SKILL.md +0 -1
  128. package/skills/ue-naming-conventions/SKILL.md +0 -1
  129. package/skills/ue-networking-replication/SKILL.md +0 -1
  130. package/skills/ue-niagara-effects/SKILL.md +0 -1
  131. package/skills/ue-packaging/SKILL.md +0 -1
  132. package/skills/ue-physics-collision/SKILL.md +0 -1
  133. package/skills/ue-procedural-generation/SKILL.md +0 -1
  134. package/skills/ue-project-context/SKILL.md +0 -1
  135. package/skills/ue-sequencer-cinematics/SKILL.md +0 -1
  136. package/skills/ue-serialization-savegames/SKILL.md +0 -1
  137. package/skills/ue-state-trees/SKILL.md +0 -1
  138. package/skills/ue-testing-debugging/SKILL.md +0 -1
  139. package/skills/ue-ui-umg-slate/SKILL.md +0 -1
  140. package/skills/ue-world-level-streaming/SKILL.md +0 -1
  141. package/skills/ux-review/SKILL.md +1 -1
  142. package/docs/RELEASE-SETUP.md +0 -99
  143. package/docs/presentations/arcane-overview-12.pptx +0 -0
  144. package/docs/presentations/arcane-overview.pptx +0 -0
  145. package/docs/presentations/build_arcane_deck.py +0 -310
  146. package/docs/presentations/build_arcane_deck_12.py +0 -399
  147. package/docs/trusted-publishing-setup.md +0 -163
package/CHANGELOG.md CHANGED
@@ -1,3 +1,29 @@
1
+ # [2.10.0](https://github.com/SebastianLuser/claude-code-arcane/compare/v2.9.9...v2.10.0) (2026-10-10)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * **profiles:** keep bridge files under the old names for pre-rename CLIs ([921c351](https://github.com/SebastianLuser/claude-code-arcane/commit/921c35119ea3b4bf5a25bbdabe369bc922e71a3f))
7
+
8
+
9
+ ### Features
10
+
11
+ * **profiles:** name stack profiles by platform and technology ([ce89d4a](https://github.com/SebastianLuser/claude-code-arcane/commit/ce89d4a25b1f6ba28d6efe7e84a27343b1e734f5))
12
+
13
+ ## [2.9.9](https://github.com/SebastianLuser/claude-code-arcane/compare/v2.9.8...v2.9.9) (2026-10-10)
14
+
15
+
16
+ ### Bug Fixes
17
+
18
+ * **content:** remove stale facts and dated prompting found by a prompt audit ([f6d0cf0](https://github.com/SebastianLuser/claude-code-arcane/commit/f6d0cf0abef40682a5ea7b5546c740787267c2bb))
19
+ * **rules:** install the LLM rule with backend-go as llm-code ([8fbac31](https://github.com/SebastianLuser/claude-code-arcane/commit/8fbac317376dd0243878db501ce996df705e3478))
20
+ * **skills:** price current Claude models in the cost estimators ([352e062](https://github.com/SebastianLuser/claude-code-arcane/commit/352e0623123de5833e6734fa785e71c06c004429))
21
+ * **skills:** reach playwright-pro and self-improving-agent sub-skills through their parent ([4cc9dff](https://github.com/SebastianLuser/claude-code-arcane/commit/4cc9dffe71c406d1e12ccdb041587b3607a301b2))
22
+ * **skills:** read the engine from the project in the last four skills ([120c8eb](https://github.com/SebastianLuser/claude-code-arcane/commit/120c8eb0ddee200acea6e2f29b0f04e3118b6b5a))
23
+ * **skills:** route the remaining skills to skills and files that exist ([eb2eea0](https://github.com/SebastianLuser/claude-code-arcane/commit/eb2eea0eed4e1ba8964a1944548cb9ae9b386a4e))
24
+ * **skills:** stop pricing and advising prompts from 2023 in the prompt tools ([429247d](https://github.com/SebastianLuser/claude-code-arcane/commit/429247db70689e3df86fc1bfdf7b78cab3e10195))
25
+ * **update:** keep .claude/docs/ current like the other installed content ([f753c03](https://github.com/SebastianLuser/claude-code-arcane/commit/f753c030b73c89d5f3d035f0460954ba8d8c69a4))
26
+
1
27
  ## [2.9.8](https://github.com/SebastianLuser/claude-code-arcane/compare/v2.9.7...v2.9.8) (2026-09-09)
2
28
 
3
29
 
package/README.md CHANGED
@@ -20,7 +20,7 @@ A configuration harness installable via `npx`. Pick a **profile** that matches y
20
20
  cd ~/projects/my-app
21
21
 
22
22
  # Install a profile (no clone needed)
23
- npx claude-code-arcane install backend-ts+agile
23
+ npx claude-code-arcane install backend-typescript+agile
24
24
 
25
25
  # Open Claude Code
26
26
  claude
@@ -38,7 +38,7 @@ explicitly first:
38
38
 
39
39
  ```bash
40
40
  npm install -g claude-code-arcane
41
- arcane install backend-ts+agile # same as the npx line above
41
+ arcane install backend-typescript+agile # same as the npx line above
42
42
  ```
43
43
 
44
44
  ---
@@ -50,8 +50,8 @@ arcane install backend-ts+agile # same as the npx line above
50
50
  Each profile is a YAML file that bundles skills, agents, rules, and permissions:
51
51
 
52
52
  ```yaml
53
- # profiles/backend-ts.yaml
54
- name: backend-ts
53
+ # profiles/backend-typescript.yaml
54
+ name: backend-typescript
55
55
  category: backend
56
56
  skills: [api-design, auth-strategy, jwt-strategy, ...]
57
57
  rules:
@@ -66,7 +66,7 @@ permissions:
66
66
  All profiles are equal — there is no "base vs addon" distinction. Combine as many as you need:
67
67
 
68
68
  ```bash
69
- npx claude-code-arcane install backend-ts+agile+testing
69
+ npx claude-code-arcane install backend-typescript+agile+testing
70
70
  ```
71
71
 
72
72
  The installer merges all profiles, deduplicates skills, and installs only what's needed.
@@ -104,7 +104,7 @@ my-project/.claude/
104
104
  ### Install a profile
105
105
 
106
106
  ```bash
107
- npx claude-code-arcane install backend-ts+agile # Install profile combination
107
+ npx claude-code-arcane install backend-typescript+agile # Install profile combination
108
108
  npx claude-code-arcane install # Show available profiles (interactive)
109
109
  npx claude-code-arcane install unity-dev --dry-run # Preview without installing
110
110
  ```
@@ -184,12 +184,14 @@ Once installed, manage the installation from within a Claude Code session:
184
184
 
185
185
  All profiles combine freely with `+` — there is no required "base". Grouped by category:
186
186
 
187
+ Older names still install and update: `backend-ts`, `frontend`, `mobile`, `flutter`, `ios-native` and `android-native` resolve to `backend-typescript`, `frontend-react-vite`, `mobile-react-native`, `mobile-flutter`, `mobile-ios-swift` and `mobile-android-kotlin`.
188
+
187
189
  ### Backend
188
190
 
189
191
  | Profile | Stack | Skills | Agents |
190
192
  |---------|-------|--------|--------|
191
- | `backend-ts` | Backend TypeScript — Fastify, Prisma, Zod, API design | 33 | engineering |
192
- | `backend-go` | Backend Go — Clean Arch, DB, auth, API, CI | 19 | engineering |
193
+ | `backend-typescript` | Backend TypeScript — Fastify, Prisma, Zod, API design | 25 | engineering |
194
+ | `backend-go` | Backend Go — Clean Arch, DB, auth, API, CI | 24 | engineering |
193
195
  | `backend-dotnet` | Backend .NET — ASP.NET Core, Vertical Slice/Clean, EF Core, JWT | 25 | engineering |
194
196
  | `backend-nestjs` | Backend NestJS — feature modules, DI, Prisma, JWT, microservices | 25 | engineering |
195
197
  | `backend-nextjs` | Next.js full-stack — App Router, RSC, Server Actions, SEO, AI SDK | 22 | engineering |
@@ -198,48 +200,48 @@ All profiles combine freely with `+` — there is no required "base". Grouped by
198
200
 
199
201
  | Profile | Stack | Skills | Agents |
200
202
  |---------|-------|--------|--------|
201
- | `frontend` | React + Vite + TypeScript | 14 | engineering |
202
- | `design` | Figma, UX review, design system, handoff | 6 | product |
203
+ | `frontend-react-vite` | React + Vite + TypeScript | 17 | engineering |
204
+ | `design` | Figma, UX review, design system, handoff | 10 | product |
203
205
 
204
206
  ### Mobile
205
207
 
206
208
  | Profile | Stack | Skills | Agents |
207
209
  |---------|-------|--------|--------|
208
- | `mobile` | React Native + Expo + TypeScript | 12 | engineering |
209
- | `flutter` | Flutter + Dart cross-platform | 8 | engineering |
210
- | `android-native` | Kotlin + Jetpack Compose + Material Design 3 | 8 | engineering |
211
- | `ios-native` | Swift + UIKit/SwiftUI + Apple HIG | 8 | engineering |
210
+ | `mobile-react-native` | React Native + Expo + TypeScript | 17 | engineering |
211
+ | `mobile-flutter` | Flutter + Dart cross-platform | 15 | engineering |
212
+ | `mobile-android-kotlin` | Kotlin + Jetpack Compose + Material Design 3 | 14 | engineering |
213
+ | `mobile-ios-swift` | Swift + UIKit/SwiftUI + Apple HIG | 14 | engineering |
212
214
 
213
215
  ### Gamedev
214
216
 
215
217
  | Profile | Stack | Skills | Agents |
216
218
  |---------|-------|--------|--------|
217
- | `unity-dev` | Unity programmer — C#, architecture, performance, builds | 25 | game |
218
- | `unity-design` | Game designer — GDDs, balance, art bible, playtesting | 17 | game |
219
+ | `unity-dev` | Unity programmer — C#, architecture, performance, builds | 21 | game |
220
+ | `unity-design` | Game designer — GDDs, balance, art bible, playtesting | 18 | game |
219
221
  | `meshy` | 3D asset production with Meshy AI — credit-gated generation, single master + cheap derivatives, printability | 5 | — |
220
222
  | `blender` | Blender for game assets — tri budget and topology, materials with bake and color space, baked animation, validated export | 6 | — |
221
- | `unreal-dev` | Unreal Engine 5 programmer — C++, Blueprints, GAS, replication, rendering, packaging | 49 | game |
222
- | `visual-novel` | Visual novel developer — Ren'Py, narrative, branching | 17 | visualnovel, game |
223
+ | `unreal-dev` | Unreal Engine 5 programmer — C++, Blueprints, GAS, replication, rendering, packaging | 50 | game |
224
+ | `visual-novel` | Visual novel developer — Ren'Py, narrative, branching | 18 | visualnovel, game |
223
225
  | `audio` | Game audio — direction, composition, sound design, middleware, VO, QA | 13 | audio |
224
226
 
225
227
  ### Platform & Quality
226
228
 
227
229
  | Profile | Adds | Skills | Agents |
228
230
  |---------|------|--------|--------|
229
- | `infra` | Terraform, observability, secrets, rollback, K8s | 17 | devops |
231
+ | `infra` | Terraform, observability, secrets, rollback, K8s | 24 | devops |
230
232
  | `database` | Indexing, migrations, seeding, replicas, optimization | 8 | — |
231
- | `security` | Audits, OWASP, secrets, backups | 5 | — |
233
+ | `security` | Audits, OWASP, secrets, backups | 10 | — |
232
234
  | `testing` | Contract, performance, regression, flakiness | 11 | quality |
233
- | `ai` | LLM cost optimization, RAG, ML, data engineering | 7 | ai |
235
+ | `ai` | LLM cost optimization, RAG, ML, data engineering, agent and MCP design | 10 | ai |
234
236
 
235
237
  ### Project Management
236
238
 
237
239
  | Profile | Adds | Skills | Agents |
238
240
  |---------|------|--------|--------|
239
- | `agile` | Sprints, standups, retros, estimates | 10 | management, product |
240
- | `jira` | Jira via REST API — issues, sprints, boards | 3 | — |
241
- | `clickup` | ClickUp via MCP — tasks, docs, time tracking | 3 | — |
242
- | `integrations` | GitHub Projects, Slack, Postman | 3 | integrations |
241
+ | `agile` | Sprints, standups, retros, estimates | 39 | management, product |
242
+ | `jira` | Jira via REST API — issues, sprints, boards | 1 | — |
243
+ | `clickup` | ClickUp via MCP — tasks, docs, time tracking | 1 | — |
244
+ | `integrations` | GitHub Projects, Slack, Postman, Stripe, email templates, Microsoft 365, Snowflake, stack evaluation | 8 | integrations |
243
245
 
244
246
  ### Business
245
247
 
@@ -249,7 +251,7 @@ All profiles combine freely with `+` — there is no required "base". Grouped by
249
251
  | `clevel` | C-suite advisors, board prep, strategic ops | 28 | clevel |
250
252
  | `finance` | Investment analysis, financial modeling, SaaS metrics | 3 | business |
251
253
  | `marketing` | Content, growth, SEO/CRO, strategy, analytics | 44 | marketing |
252
- | `ecommerce` | Commerce end-to-end agnóstico de lenguaje — data model, checkout, inventario, órdenes, pagos, promociones, shipping/tax, listings, analytics, feeds, storefront, suscripciones | 12 | ecommerce |
254
+ | `ecommerce` | Commerce end-to-end agnóstico de lenguaje — data model, checkout, inventario, órdenes, pagos, promociones, shipping/tax, listings, analytics, feeds, storefront, suscripciones | 21 | ecommerce |
253
255
  | `regulatory` | ISO 13485, GDPR, FDA, SOC 2, ISMS, QMS, MDR | 13 | regulatory |
254
256
 
255
257
  ### Personal
@@ -264,7 +266,7 @@ All profiles combine freely with `+` — there is no required "base". Grouped by
264
266
 
265
267
  | Profile | Adds | Skills | Agents |
266
268
  |---------|------|--------|--------|
267
- | `docs` | PDF, PPTX, XLSX, DOCX, architecture decisions | 8 | — |
269
+ | `docs` | PDF, PPTX, XLSX, DOCX, architecture decisions | 5 | — |
268
270
  | `self-improving` | Agent self-improvement and skill extraction | 2 | — |
269
271
  | `statusline` | Claude Code status bar (branch, division, session info) | 0 | — |
270
272
 
@@ -323,28 +325,28 @@ npx claude-code-arcane install unity-dev+unity-design+agile+clickup
323
325
  npx claude-code-arcane install backend-go+infra+agile+jira
324
326
 
325
327
  # Full-stack monorepo
326
- npx claude-code-arcane install backend-ts+frontend+testing+database
328
+ npx claude-code-arcane install backend-typescript+frontend-react-vite+testing+database
327
329
 
328
330
  # Mobile app with CI/CD
329
- npx claude-code-arcane install mobile+agile+clickup+testing
331
+ npx claude-code-arcane install mobile-react-native+agile+clickup+testing
330
332
 
331
333
  # Secure backend with docs
332
- npx claude-code-arcane install backend-ts+security+docs+database
334
+ npx claude-code-arcane install backend-typescript+security+docs+database
333
335
 
334
336
  # AI/ML project with data pipelines
335
337
  npx claude-code-arcane install backend-go+ai+infra
336
338
 
337
339
  # SaaS with full marketing stack
338
- npx claude-code-arcane install backend-ts+marketing+business+finance
340
+ npx claude-code-arcane install backend-typescript+marketing+business+finance
339
341
 
340
342
  # Regulated medical device
341
- npx claude-code-arcane install backend-ts+regulatory+security+testing
343
+ npx claude-code-arcane install backend-typescript+regulatory+security+testing
342
344
 
343
345
  # Founder advisory setup
344
346
  npx claude-code-arcane install clevel+business+finance+marketing
345
347
 
346
348
  # With status bar
347
- npx claude-code-arcane install backend-ts+agile+statusline
349
+ npx claude-code-arcane install backend-typescript+agile+statusline
348
350
  ```
349
351
 
350
352
  ---
@@ -353,7 +355,7 @@ npx claude-code-arcane install backend-ts+agile+statusline
353
355
 
354
356
  ```bash
355
357
  # Start with a profile
356
- npx claude-code-arcane install backend-ts
358
+ npx claude-code-arcane install backend-typescript
357
359
 
358
360
  # Later, add testing and security
359
361
  npx claude-code-arcane add +testing +security
@@ -372,7 +374,7 @@ npx claude-code-arcane status
372
374
 
373
375
  # Start over
374
376
  npx claude-code-arcane clean --force
375
- npx claude-code-arcane install backend-ts+agile
377
+ npx claude-code-arcane install backend-typescript+agile
376
378
  ```
377
379
 
378
380
  ---
@@ -385,7 +387,7 @@ Work on multiple features in parallel using git worktrees, each with its own Arc
385
387
 
386
388
  ```bash
387
389
  # Create worktree + install Arcane in one step
388
- npx claude-code-arcane worktree feat/new-api --profile backend-ts+agile
390
+ npx claude-code-arcane worktree feat/new-api --profile backend-typescript+agile
389
391
 
390
392
  # Inherits profile from current installation
391
393
  npx claude-code-arcane worktree feat/new-api
@@ -410,7 +412,7 @@ When you run `npx claude-code-arcane install` inside a git worktree, Arcane auto
410
412
 
411
413
  ```bash
412
414
  # Manual: share from a specific installation
413
- npx claude-code-arcane install backend-ts --share-from /path/to/main/worktree
415
+ npx claude-code-arcane install backend-typescript --share-from /path/to/main/worktree
414
416
 
415
417
  # Disable sharing
416
418
  npx claude-code-arcane worktree feat/api --no-share
@@ -433,7 +435,7 @@ npx claude-code-arcane worktree feat/api --no-share
433
435
  ```bash
434
436
  npx claude-code-arcane status
435
437
  # === Arcane Status ===
436
- # Profiles: backend-ts + agile
438
+ # Profiles: backend-typescript + agile
437
439
  # Worktree: yes (main: /path/to/main/checkout)
438
440
  # Shared: hooks, docs (symlinked)
439
441
  # ...
@@ -32,20 +32,7 @@ Sos el **Business Operations Lead**. Tu rol: que el motor comercial funcione —
32
32
 
33
33
  ## Customer Health Score
34
34
 
35
- ```
36
- Health Score = weighted average of:
37
- Product Usage (30%): DAU/MAU, feature adoption, depth
38
- Support (20%): Ticket volume, CSAT, escalations
39
- Engagement (20%): NPS, exec sponsor active, QBR attendance
40
- Financial (15%): Payment on time, expansion signals
41
- Relationship (15%): Champion changes, stakeholder map
42
-
43
- Tiers:
44
- 90-100: Healthy (green) → Expansion candidate
45
- 70-89: Monitor (yellow) → Proactive outreach
46
- 50-69: At Risk (orange) → Success plan
47
- <50: Critical (red) → Executive intervention
48
- ```
35
+ Calculate it with `health_score_calculator.py` from the `customer-success-manager` skill: its dimensions, weights and segment thresholds are the ones in use. Do not compute it by hand.
49
36
 
50
37
  ## Protocolo
51
38
 
@@ -69,10 +69,9 @@ arrive. Decide, act, and make your reasoning auditable in the report.
69
69
  ### Engine Version Safety
70
70
 
71
71
  **Engine Version Safety**: Before suggesting any engine-specific API, class, or node:
72
- 1. Check `docs/engine-reference/[engine]/VERSION.md` for the project's pinned engine version
73
- 2. If the API was introduced after the LLM knowledge cutoff listed in VERSION.md, flag it explicitly:
74
- > "This API may have changed in [version] — verify against the reference docs before using."
75
- 3. Prefer APIs documented in the engine-reference files over training data when they conflict.
72
+ 1. Read the engine version from the project: `ProjectSettings/ProjectVersion.txt` (Unity) or `EngineAssociation` in the `.uproject` (Unreal)
73
+ 2. If the API may have changed in that version, flag it explicitly:
74
+ > "This API may have changed in [version] — verify against the engine docs before using."
76
75
 
77
76
  **ADR Compliance**: Before implementing any system, check `docs/architecture/` for a governing ADR.
78
77
  If an ADR exists for this system:
@@ -68,10 +68,9 @@ arrive. Decide, act, and make your reasoning auditable in the report.
68
68
  ### Engine Version Safety
69
69
 
70
70
  **Engine Version Safety**: Before suggesting any engine-specific API, class, or node:
71
- 1. Check `docs/engine-reference/[engine]/VERSION.md` for the project's pinned engine version
72
- 2. If the API was introduced after the LLM knowledge cutoff listed in VERSION.md, flag it explicitly:
73
- > "This API may have changed in [version] — verify against the reference docs before using."
74
- 3. Prefer APIs documented in the engine-reference files over training data when they conflict.
71
+ 1. Read the engine version from the project: `ProjectSettings/ProjectVersion.txt` (Unity) or `EngineAssociation` in the `.uproject` (Unreal)
72
+ 2. If the API may have changed in that version, flag it explicitly:
73
+ > "This API may have changed in [version] — verify against the engine docs before using."
75
74
 
76
75
  ### Performance Budgets
77
76
 
package/dist/cli.js CHANGED
@@ -19,6 +19,7 @@ function parseProfile(filePath) {
19
19
  const perms = raw.permissions ?? {};
20
20
  return {
21
21
  name: String(raw.name ?? path.basename(filePath, ".yaml")),
22
+ ...raw.renamed_to ? { renamed_to: String(raw.renamed_to) } : {},
22
23
  description: String(raw.description ?? ""),
23
24
  category: String(raw.category ?? "other"),
24
25
  skills: raw.skills ?? [],
@@ -58,9 +59,32 @@ function groupByCategory(profiles) {
58
59
  }
59
60
  return groups.filter((g) => g.profiles.length > 0);
60
61
  }
62
+ var PROFILE_RENAMES = {
63
+ "backend-ts": "backend-typescript",
64
+ frontend: "frontend-react-vite",
65
+ mobile: "mobile-react-native",
66
+ flutter: "mobile-flutter",
67
+ "ios-native": "mobile-ios-swift",
68
+ "android-native": "mobile-android-kotlin"
69
+ };
70
+ function canonicalProfileName(name) {
71
+ return PROFILE_RENAMES[name] ?? name;
72
+ }
73
+ function sameProfile(a, b) {
74
+ return canonicalProfileName(a) === canonicalProfileName(b);
75
+ }
76
+ function resolveProfile(profilesDir, name) {
77
+ const canonical = canonicalProfileName(name);
78
+ const oldNames = Object.keys(PROFILE_RENAMES).filter((o) => PROFILE_RENAMES[o] === canonical);
79
+ for (const candidate of [canonical, name, ...oldNames]) {
80
+ const file = path.join(profilesDir, `${candidate}.yaml`);
81
+ if (fs.existsSync(file)) return { name: candidate, file };
82
+ }
83
+ return null;
84
+ }
61
85
  function listProfiles(profilesDir) {
62
86
  if (!fs.existsSync(profilesDir)) return [];
63
- return fs.readdirSync(profilesDir).filter((f) => f.endsWith(".yaml") && f !== "core.yaml").map((f) => parseProfile(path.join(profilesDir, f))).sort((a, b) => a.name.localeCompare(b.name));
87
+ return fs.readdirSync(profilesDir).filter((f) => f.endsWith(".yaml") && f !== "core.yaml").map((f) => parseProfile(path.join(profilesDir, f))).filter((p3) => !p3.renamed_to).sort((a, b) => a.name.localeCompare(b.name));
64
88
  }
65
89
  function mergeProfiles(profilesDir, profileNames) {
66
90
  const namesToLoad = ["core", ...profileNames];
@@ -80,13 +104,17 @@ function mergeProfiles(profilesDir, profileNames) {
80
104
  const hooks = [];
81
105
  const outputStyles = [];
82
106
  for (const name of namesToLoad) {
83
- const filePath = path.join(profilesDir, `${name}.yaml`);
84
- if (!fs.existsSync(filePath)) {
107
+ const resolved = resolveProfile(profilesDir, name);
108
+ if (!resolved) {
85
109
  console.warn(` WARN: Profile '${name}.yaml' not found, skipping`);
86
110
  continue;
87
111
  }
88
- const profile = parseProfile(filePath);
89
- loaded.push(name);
112
+ if (resolved.name !== name && resolved.name === canonicalProfileName(name)) {
113
+ console.warn(` NOTE: Profile '${name}' is now '${resolved.name}'`);
114
+ }
115
+ if (loaded.includes(resolved.name)) continue;
116
+ const profile = parseProfile(resolved.file);
117
+ loaded.push(resolved.name);
90
118
  for (const s of profile.skills) {
91
119
  if (!seenSkills.has(s)) {
92
120
  seenSkills.add(s);
@@ -178,7 +206,7 @@ function detectStack(dir) {
178
206
  }
179
207
  const isFlutter = hasFile(dir, "pubspec.yaml");
180
208
  if (isFlutter) {
181
- out.push({ profile: "flutter", reason: "pubspec.yaml" });
209
+ out.push({ profile: "mobile-flutter", reason: "pubspec.yaml" });
182
210
  }
183
211
  if (hasFile(dir, "go.mod")) {
184
212
  out.push({ profile: "backend-go", reason: "go.mod" });
@@ -192,13 +220,13 @@ function detectStack(dir) {
192
220
  out.push({ profile: "backend-nextjs", reason: "package.json: next" });
193
221
  } else if (deps["react-native"] || deps["expo"]) {
194
222
  isReactNative = true;
195
- out.push({ profile: "mobile", reason: "package.json: react-native/expo" });
223
+ out.push({ profile: "mobile-react-native", reason: "package.json: react-native/expo" });
196
224
  } else if (deps["react"] || deps["vue"] || deps["svelte"]) {
197
- out.push({ profile: "frontend", reason: "package.json: react/vue/svelte" });
225
+ out.push({ profile: "frontend-react-vite", reason: "package.json: react/vue/svelte" });
198
226
  } else if (deps["fastify"] || deps["express"] || deps["koa"] || deps["hono"]) {
199
- out.push({ profile: "backend-ts", reason: "package.json: server framework" });
227
+ out.push({ profile: "backend-typescript", reason: "package.json: server framework" });
200
228
  } else if (deps["typescript"]) {
201
- out.push({ profile: "backend-ts", reason: "package.json: typescript" });
229
+ out.push({ profile: "backend-typescript", reason: "package.json: typescript" });
202
230
  }
203
231
  }
204
232
  if (!isUnity) {
@@ -209,11 +237,11 @@ function detectStack(dir) {
209
237
  }
210
238
  if (!isFlutter && !isReactNative) {
211
239
  if ((hasFile(dir, "settings.gradle") || hasFile(dir, "settings.gradle.kts")) && hasFile(dir, "app")) {
212
- out.push({ profile: "android-native", reason: "settings.gradle + app/" });
240
+ out.push({ profile: "mobile-android-kotlin", reason: "settings.gradle + app/" });
213
241
  }
214
242
  const ios = topLevelMatch(dir, ".xcodeproj") ?? topLevelMatch(dir, ".xcworkspace") ?? (hasFile(dir, "Podfile") ? "Podfile" : void 0);
215
243
  if (ios) {
216
- out.push({ profile: "ios-native", reason: ios });
244
+ out.push({ profile: "mobile-ios-swift", reason: ios });
217
245
  }
218
246
  }
219
247
  return out;
@@ -259,7 +287,7 @@ async function runInstallWizard(profiles, detections) {
259
287
  if (names.length === 0) {
260
288
  p.outro(
261
289
  chalk.dim(
262
- "Nothing selected. Run again, or install directly: npx claude-code-arcane install backend-ts+testing"
290
+ "Nothing selected. Run again, or install directly: npx claude-code-arcane install backend-typescript+testing"
263
291
  )
264
292
  );
265
293
  return null;
@@ -751,7 +779,8 @@ function computeContentHashes(claudeDir) {
751
779
  skills: {},
752
780
  rules: {},
753
781
  agents: {},
754
- hooks: {}
782
+ hooks: {},
783
+ docs: {}
755
784
  };
756
785
  const skillsDir = path7.join(claudeDir, "skills");
757
786
  if (fs6.existsSync(skillsDir)) {
@@ -790,6 +819,8 @@ function computeContentHashes(claudeDir) {
790
819
  }
791
820
  }
792
821
  }
822
+ const docsDir = path7.join(claudeDir, "docs");
823
+ if (fs6.existsSync(docsDir)) hashes.docs = hashDirectory(docsDir);
793
824
  return hashes;
794
825
  }
795
826
  function computeSourceHashes(packageRoot, skills, rules, agents) {
@@ -797,7 +828,8 @@ function computeSourceHashes(packageRoot, skills, rules, agents) {
797
828
  skills: {},
798
829
  rules: {},
799
830
  agents: {},
800
- hooks: {}
831
+ hooks: {},
832
+ docs: {}
801
833
  };
802
834
  for (const skill of skills) {
803
835
  const skillDir = path7.join(packageRoot, "skills", skill);
@@ -836,6 +868,8 @@ function computeSourceHashes(packageRoot, skills, rules, agents) {
836
868
  }
837
869
  }
838
870
  }
871
+ const docsDir = path7.join(packageRoot, "docs");
872
+ if (fs6.existsSync(docsDir)) hashes.docs = hashDirectory(docsDir);
839
873
  return hashes;
840
874
  }
841
875
 
@@ -1741,7 +1775,7 @@ async function installCommand(profileExpr, opts) {
1741
1775
  console.log();
1742
1776
  }
1743
1777
  console.log(
1744
- chalk2.dim(" Usage: npx claude-code-arcane install backend-ts+agile+testing\n")
1778
+ chalk2.dim(" Usage: npx claude-code-arcane install backend-typescript+agile+testing\n")
1745
1779
  );
1746
1780
  return;
1747
1781
  }
@@ -1853,14 +1887,15 @@ async function addCommand(items = []) {
1853
1887
  process.exit(1);
1854
1888
  }
1855
1889
  if (items.length === 0) {
1890
+ const installedProfiles = manifest.profiles.map(canonicalProfileName);
1856
1891
  if (!(process.stdin.isTTY && process.stdout.isTTY)) {
1857
- printCatalog(root, manifest.profiles, manifest.installed_skills);
1892
+ printCatalog(root, installedProfiles, manifest.installed_skills);
1858
1893
  return;
1859
1894
  }
1860
1895
  const selected = await runAddWizard({
1861
1896
  profiles: listProfiles(path14.join(root, "profiles")),
1862
1897
  skills: listSkills(path14.join(root, "skills")),
1863
- installedProfiles: manifest.profiles,
1898
+ installedProfiles,
1864
1899
  installedSkills: manifest.installed_skills
1865
1900
  });
1866
1901
  if (!selected) return;
@@ -1875,13 +1910,14 @@ async function addCommand(items = []) {
1875
1910
  let statuslineAdded = false;
1876
1911
  for (const item of items) {
1877
1912
  if (item.startsWith("+")) {
1878
- const profileName = item.slice(1);
1879
- const profilePath = path14.join(root, "profiles", `${profileName}.yaml`);
1880
- if (!fs12.existsSync(profilePath)) {
1881
- console.error(chalk3.red(` Profile '${profileName}' not found`));
1913
+ const requested = item.slice(1);
1914
+ const resolved = resolveProfile(path14.join(root, "profiles"), requested);
1915
+ if (!resolved) {
1916
+ console.error(chalk3.red(` Profile '${requested}' not found`));
1882
1917
  continue;
1883
1918
  }
1884
- const profile = parseProfile(profilePath);
1919
+ const profileName = resolved.name;
1920
+ const profile = parseProfile(resolved.file);
1885
1921
  for (const skill of profile.skills) {
1886
1922
  const result = addSkill(root, target, skill, manifest.installed_skills);
1887
1923
  if (result === "added") added.push(skill);
@@ -1929,7 +1965,7 @@ async function addCommand(items = []) {
1929
1965
  if (profile.permissions.allow.length > 0 || profile.permissions.deny.length > 0) {
1930
1966
  mergePermissions(claudeDir, profile.permissions);
1931
1967
  }
1932
- if (!manifest.profiles.includes(profileName)) {
1968
+ if (!manifest.profiles.some((p3) => sameProfile(p3, profileName))) {
1933
1969
  manifest.profiles.push(profileName);
1934
1970
  manifest.profile_command = manifest.profiles.filter((p3) => p3 !== "core").join("+");
1935
1971
  }
@@ -2169,30 +2205,31 @@ function removeProfile(root, target, profileName, manifest) {
2169
2205
  );
2170
2206
  return { removed: false, skills: [], agents: [] };
2171
2207
  }
2172
- if (!manifest.profiles.includes(profileName)) {
2208
+ const installedName = manifest.profiles.find((p3) => sameProfile(p3, profileName));
2209
+ if (!installedName) {
2173
2210
  console.warn(
2174
2211
  chalk4.yellow(` WARNING: Profile '${profileName}' is not installed.`)
2175
2212
  );
2176
2213
  return { removed: false, skills: [], agents: [] };
2177
2214
  }
2178
- const profilePath = path15.join(root, "profiles", `${profileName}.yaml`);
2179
- if (!fs13.existsSync(profilePath)) {
2215
+ const resolved = resolveProfile(path15.join(root, "profiles"), installedName);
2216
+ if (!resolved) {
2180
2217
  console.warn(
2181
- chalk4.yellow(` WARNING: Profile '${profileName}.yaml' not found.`)
2218
+ chalk4.yellow(` WARNING: Profile '${installedName}.yaml' not found.`)
2182
2219
  );
2183
2220
  return { removed: false, skills: [], agents: [] };
2184
2221
  }
2185
- const profile = parseProfile(profilePath);
2222
+ const profile = parseProfile(resolved.file);
2186
2223
  const remainingProfiles = manifest.profiles.filter(
2187
- (p3) => p3 !== profileName
2224
+ (p3) => p3 !== installedName
2188
2225
  );
2189
2226
  const sharedSkills = /* @__PURE__ */ new Set();
2190
2227
  const sharedAgents = /* @__PURE__ */ new Set();
2191
2228
  const sharedRules = /* @__PURE__ */ new Set();
2192
2229
  for (const rp of remainingProfiles) {
2193
- const rpPath = path15.join(root, "profiles", `${rp}.yaml`);
2194
- if (!fs13.existsSync(rpPath)) continue;
2195
- const rpDef = parseProfile(rpPath);
2230
+ const rpResolved = resolveProfile(path15.join(root, "profiles"), rp);
2231
+ if (!rpResolved) continue;
2232
+ const rpDef = parseProfile(rpResolved.file);
2196
2233
  rpDef.skills.forEach((s) => sharedSkills.add(s));
2197
2234
  rpDef.agents.forEach((a) => sharedAgents.add(a));
2198
2235
  rpDef.rules.universal.forEach((r) => sharedRules.add(r));
@@ -2547,6 +2584,10 @@ Update available: ${chalk7.red(installedVersion)} -> ${chalk7.green(currentVersi
2547
2584
  const sourceHashes = computeSourceHashes(root, merged.skills, allRules, merged.agents);
2548
2585
  const claudeDir = path17.join(target, ".claude");
2549
2586
  const installedHashes = computeContentHashes(claudeDir);
2587
+ if (isSymlink(path17.join(claudeDir, "docs"))) {
2588
+ sourceHashes.docs = {};
2589
+ installedHashes.docs = {};
2590
+ }
2550
2591
  const unhashed = earlySync;
2551
2592
  const items = computeUpdatePlan(
2552
2593
  manifest.content_hashes ?? null,
@@ -2649,10 +2690,21 @@ function printGeneralSummary(results, isDryRun) {
2649
2690
  ${prefix}Done. ${results.length} installation${results.length === 1 ? "" : "s"} processed:`));
2650
2691
  console.log(` ${chalk7.green(updated)} ${isDryRun ? "would change" : "updated"}, ${chalk7.dim(unchanged + " unchanged")}`);
2651
2692
  }
2693
+ var RETIRED_DOCS = /* @__PURE__ */ new Set([
2694
+ "RELEASE-SETUP.md",
2695
+ "trusted-publishing-setup.md",
2696
+ "presentations/arcane-overview.pptx",
2697
+ "presentations/arcane-overview-12.pptx",
2698
+ "presentations/build_arcane_deck.py",
2699
+ "presentations/build_arcane_deck_12.py"
2700
+ ]);
2652
2701
  function makeOwnershipCheck(manifest) {
2653
2702
  const hashes = manifest.content_hashes;
2654
2703
  if (hashes) {
2655
- return (type, name) => name in (hashes[type] ?? {});
2704
+ return (type, name) => {
2705
+ if (type === "docs" && !hashes.docs) return RETIRED_DOCS.has(name);
2706
+ return name in (hashes[type] ?? {});
2707
+ };
2656
2708
  }
2657
2709
  const skills = new Set(manifest.installed_skills ?? []);
2658
2710
  const rules = new Set(
@@ -2671,6 +2723,8 @@ function makeOwnershipCheck(manifest) {
2671
2723
  return agents.has(name);
2672
2724
  case "hooks":
2673
2725
  return true;
2726
+ case "docs":
2727
+ return RETIRED_DOCS.has(name);
2674
2728
  }
2675
2729
  };
2676
2730
  }
@@ -2689,7 +2743,8 @@ function hashesToRecord(fresh, previous, items, force) {
2689
2743
  skills: { ...fresh.skills },
2690
2744
  rules: { ...fresh.rules },
2691
2745
  agents: { ...fresh.agents },
2692
- hooks: { ...fresh.hooks }
2746
+ hooks: { ...fresh.hooks },
2747
+ docs: { ...fresh.docs }
2693
2748
  };
2694
2749
  for (const item of items) {
2695
2750
  const bucket = `${item.type}s`;
@@ -2706,8 +2761,8 @@ function hashesToRecord(fresh, previous, items, force) {
2706
2761
  }
2707
2762
  function computeUpdatePlan(manifestHashes, installedHashes, sourceHashes, owned, exemptAgentDivisions = /* @__PURE__ */ new Set()) {
2708
2763
  const items = [];
2709
- for (const contentType of ["skills", "rules", "agents", "hooks"]) {
2710
- const itemType = contentType === "skills" ? "skill" : contentType === "rules" ? "rule" : contentType === "agents" ? "agent" : "hook";
2764
+ for (const contentType of ["skills", "rules", "agents", "hooks", "docs"]) {
2765
+ const itemType = contentType === "skills" ? "skill" : contentType === "rules" ? "rule" : contentType === "agents" ? "agent" : contentType === "hooks" ? "hook" : "doc";
2711
2766
  const manifest = manifestHashes?.[contentType] ?? {};
2712
2767
  const installed = installedHashes[contentType];
2713
2768
  const source = sourceHashes[contentType];
@@ -2942,6 +2997,8 @@ function getSourcePath(item, root) {
2942
2997
  return path17.join(root, "agents", item.name);
2943
2998
  case "hook":
2944
2999
  return path17.join(root, "hooks", item.name);
3000
+ case "doc":
3001
+ return path17.join(root, "docs", item.name);
2945
3002
  default:
2946
3003
  return null;
2947
3004
  }
@@ -2956,6 +3013,15 @@ function getInstalledPath(item, claudeDir) {
2956
3013
  return path17.join(claudeDir, "agents", item.name);
2957
3014
  case "hook":
2958
3015
  return path17.join(claudeDir, "hooks", item.name);
3016
+ case "doc":
3017
+ return path17.join(claudeDir, "docs", item.name);
3018
+ }
3019
+ }
3020
+ function isSymlink(p3) {
3021
+ try {
3022
+ return fs15.lstatSync(p3).isSymbolicLink();
3023
+ } catch {
3024
+ return false;
2959
3025
  }
2960
3026
  }
2961
3027
 
@@ -3024,7 +3090,7 @@ async function worktreeCommand(branch, opts) {
3024
3090
  if (!profileExpr) {
3025
3091
  console.error(
3026
3092
  chalk9.red(
3027
- "No profile specified and no existing installation to inherit from.\nUse --profile to specify one: npx claude-code-arcane worktree feat/api --profile backend-ts+agile"
3093
+ "No profile specified and no existing installation to inherit from.\nUse --profile to specify one: npx claude-code-arcane worktree feat/api --profile backend-typescript+agile"
3028
3094
  )
3029
3095
  );
3030
3096
  process.exit(1);
@@ -3453,7 +3519,7 @@ program.name("arcane").description(
3453
3519
  "Claude Code Arcane \u2014 Skills, agents, hooks and rules for Claude Code"
3454
3520
  ).version(getPackageVersion());
3455
3521
  program.command("install [profile]").description(
3456
- "Install profiles (e.g., backend-ts+agile). Without args, opens an interactive picker."
3522
+ "Install profiles (e.g., backend-typescript+agile). Without args, opens an interactive picker."
3457
3523
  ).option("-t, --target <dir>", "Target project directory", process.cwd()).option("-n, --dry-run", "Show what would be installed without changing files").option("-f, --force", "Overwrite without backup prompt").option(
3458
3524
  "-s, --share-from <dir>",
3459
3525
  "Share hooks/docs from an existing Arcane installation (e.g., main worktree)"