agentic-team-templates 0.16.0 → 0.18.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 (198) hide show
  1. package/README.md +30 -24
  2. package/package.json +1 -1
  3. package/src/index.js +221 -123
  4. package/src/index.test.js +138 -66
  5. package/templates/ux-designer/.cursor/rules/accessibility.md +214 -0
  6. package/templates/ux-designer/.cursor/rules/emotional-design.md +217 -0
  7. package/templates/ux-designer/.cursor/rules/handoff.md +251 -0
  8. package/templates/ux-designer/.cursor/rules/information-architecture.md +193 -0
  9. package/templates/ux-designer/.cursor/rules/interaction-design.md +221 -0
  10. package/templates/ux-designer/.cursor/rules/overview.md +110 -0
  11. package/templates/ux-designer/.cursor/rules/research.md +181 -0
  12. package/templates/ux-designer/.cursor/rules/visual-design.md +191 -0
  13. package/templates/ux-designer/CLAUDE.md +124 -0
  14. /package/templates/blockchain/{.cursorrules → .cursor/rules}/defi-patterns.md +0 -0
  15. /package/templates/blockchain/{.cursorrules → .cursor/rules}/gas-optimization.md +0 -0
  16. /package/templates/blockchain/{.cursorrules → .cursor/rules}/overview.md +0 -0
  17. /package/templates/blockchain/{.cursorrules → .cursor/rules}/security.md +0 -0
  18. /package/templates/blockchain/{.cursorrules → .cursor/rules}/smart-contracts.md +0 -0
  19. /package/templates/blockchain/{.cursorrules → .cursor/rules}/testing.md +0 -0
  20. /package/templates/blockchain/{.cursorrules → .cursor/rules}/web3-integration.md +0 -0
  21. /package/templates/cli-tools/{.cursorrules → .cursor/rules}/architecture.md +0 -0
  22. /package/templates/cli-tools/{.cursorrules → .cursor/rules}/arguments.md +0 -0
  23. /package/templates/cli-tools/{.cursorrules → .cursor/rules}/distribution.md +0 -0
  24. /package/templates/cli-tools/{.cursorrules → .cursor/rules}/error-handling.md +0 -0
  25. /package/templates/cli-tools/{.cursorrules → .cursor/rules}/overview.md +0 -0
  26. /package/templates/cli-tools/{.cursorrules → .cursor/rules}/testing.md +0 -0
  27. /package/templates/cli-tools/{.cursorrules → .cursor/rules}/user-experience.md +0 -0
  28. /package/templates/cpp-expert/{.cursorrules → .cursor/rules}/concurrency.md +0 -0
  29. /package/templates/cpp-expert/{.cursorrules → .cursor/rules}/error-handling.md +0 -0
  30. /package/templates/cpp-expert/{.cursorrules → .cursor/rules}/memory-and-ownership.md +0 -0
  31. /package/templates/cpp-expert/{.cursorrules → .cursor/rules}/modern-cpp.md +0 -0
  32. /package/templates/cpp-expert/{.cursorrules → .cursor/rules}/overview.md +0 -0
  33. /package/templates/cpp-expert/{.cursorrules → .cursor/rules}/performance.md +0 -0
  34. /package/templates/cpp-expert/{.cursorrules → .cursor/rules}/testing.md +0 -0
  35. /package/templates/cpp-expert/{.cursorrules → .cursor/rules}/tooling.md +0 -0
  36. /package/templates/csharp-expert/{.cursorrules → .cursor/rules}/aspnet-core.md +0 -0
  37. /package/templates/csharp-expert/{.cursorrules → .cursor/rules}/async-patterns.md +0 -0
  38. /package/templates/csharp-expert/{.cursorrules → .cursor/rules}/dependency-injection.md +0 -0
  39. /package/templates/csharp-expert/{.cursorrules → .cursor/rules}/error-handling.md +0 -0
  40. /package/templates/csharp-expert/{.cursorrules → .cursor/rules}/language-features.md +0 -0
  41. /package/templates/csharp-expert/{.cursorrules → .cursor/rules}/overview.md +0 -0
  42. /package/templates/csharp-expert/{.cursorrules → .cursor/rules}/performance.md +0 -0
  43. /package/templates/csharp-expert/{.cursorrules → .cursor/rules}/testing.md +0 -0
  44. /package/templates/csharp-expert/{.cursorrules → .cursor/rules}/tooling.md +0 -0
  45. /package/templates/data-engineering/{.cursorrules → .cursor/rules}/data-modeling.md +0 -0
  46. /package/templates/data-engineering/{.cursorrules → .cursor/rules}/data-quality.md +0 -0
  47. /package/templates/data-engineering/{.cursorrules → .cursor/rules}/overview.md +0 -0
  48. /package/templates/data-engineering/{.cursorrules → .cursor/rules}/performance.md +0 -0
  49. /package/templates/data-engineering/{.cursorrules → .cursor/rules}/pipeline-design.md +0 -0
  50. /package/templates/data-engineering/{.cursorrules → .cursor/rules}/security.md +0 -0
  51. /package/templates/data-engineering/{.cursorrules → .cursor/rules}/testing.md +0 -0
  52. /package/templates/devops-sre/{.cursorrules → .cursor/rules}/capacity-planning.md +0 -0
  53. /package/templates/devops-sre/{.cursorrules → .cursor/rules}/change-management.md +0 -0
  54. /package/templates/devops-sre/{.cursorrules → .cursor/rules}/chaos-engineering.md +0 -0
  55. /package/templates/devops-sre/{.cursorrules → .cursor/rules}/disaster-recovery.md +0 -0
  56. /package/templates/devops-sre/{.cursorrules → .cursor/rules}/incident-management.md +0 -0
  57. /package/templates/devops-sre/{.cursorrules → .cursor/rules}/observability.md +0 -0
  58. /package/templates/devops-sre/{.cursorrules → .cursor/rules}/overview.md +0 -0
  59. /package/templates/devops-sre/{.cursorrules → .cursor/rules}/postmortems.md +0 -0
  60. /package/templates/devops-sre/{.cursorrules → .cursor/rules}/runbooks.md +0 -0
  61. /package/templates/devops-sre/{.cursorrules → .cursor/rules}/slo-sli.md +0 -0
  62. /package/templates/devops-sre/{.cursorrules → .cursor/rules}/toil-reduction.md +0 -0
  63. /package/templates/documentation/{.cursorrules → .cursor/rules}/adr.md +0 -0
  64. /package/templates/documentation/{.cursorrules → .cursor/rules}/api-documentation.md +0 -0
  65. /package/templates/documentation/{.cursorrules → .cursor/rules}/code-comments.md +0 -0
  66. /package/templates/documentation/{.cursorrules → .cursor/rules}/maintenance.md +0 -0
  67. /package/templates/documentation/{.cursorrules → .cursor/rules}/overview.md +0 -0
  68. /package/templates/documentation/{.cursorrules → .cursor/rules}/readme-standards.md +0 -0
  69. /package/templates/educator/{.cursorrules → .cursor/rules}/accessibility.md +0 -0
  70. /package/templates/educator/{.cursorrules → .cursor/rules}/assessment.md +0 -0
  71. /package/templates/educator/{.cursorrules → .cursor/rules}/curriculum.md +0 -0
  72. /package/templates/educator/{.cursorrules → .cursor/rules}/engagement.md +0 -0
  73. /package/templates/educator/{.cursorrules → .cursor/rules}/instructional-design.md +0 -0
  74. /package/templates/educator/{.cursorrules → .cursor/rules}/overview.md +0 -0
  75. /package/templates/educator/{.cursorrules → .cursor/rules}/retention.md +0 -0
  76. /package/templates/fullstack/{.cursorrules → .cursor/rules}/api-contracts.md +0 -0
  77. /package/templates/fullstack/{.cursorrules → .cursor/rules}/architecture.md +0 -0
  78. /package/templates/fullstack/{.cursorrules → .cursor/rules}/overview.md +0 -0
  79. /package/templates/fullstack/{.cursorrules → .cursor/rules}/shared-types.md +0 -0
  80. /package/templates/fullstack/{.cursorrules → .cursor/rules}/testing.md +0 -0
  81. /package/templates/golang-expert/{.cursorrules → .cursor/rules}/concurrency.md +0 -0
  82. /package/templates/golang-expert/{.cursorrules → .cursor/rules}/error-handling.md +0 -0
  83. /package/templates/golang-expert/{.cursorrules → .cursor/rules}/interfaces-and-types.md +0 -0
  84. /package/templates/golang-expert/{.cursorrules → .cursor/rules}/overview.md +0 -0
  85. /package/templates/golang-expert/{.cursorrules → .cursor/rules}/performance.md +0 -0
  86. /package/templates/golang-expert/{.cursorrules → .cursor/rules}/production-patterns.md +0 -0
  87. /package/templates/golang-expert/{.cursorrules → .cursor/rules}/stdlib-and-tooling.md +0 -0
  88. /package/templates/golang-expert/{.cursorrules → .cursor/rules}/testing.md +0 -0
  89. /package/templates/java-expert/{.cursorrules → .cursor/rules}/concurrency.md +0 -0
  90. /package/templates/java-expert/{.cursorrules → .cursor/rules}/error-handling.md +0 -0
  91. /package/templates/java-expert/{.cursorrules → .cursor/rules}/modern-java.md +0 -0
  92. /package/templates/java-expert/{.cursorrules → .cursor/rules}/overview.md +0 -0
  93. /package/templates/java-expert/{.cursorrules → .cursor/rules}/performance.md +0 -0
  94. /package/templates/java-expert/{.cursorrules → .cursor/rules}/persistence.md +0 -0
  95. /package/templates/java-expert/{.cursorrules → .cursor/rules}/spring-boot.md +0 -0
  96. /package/templates/java-expert/{.cursorrules → .cursor/rules}/testing.md +0 -0
  97. /package/templates/java-expert/{.cursorrules → .cursor/rules}/tooling.md +0 -0
  98. /package/templates/javascript-expert/{.cursorrules → .cursor/rules}/language-deep-dive.md +0 -0
  99. /package/templates/javascript-expert/{.cursorrules → .cursor/rules}/node-patterns.md +0 -0
  100. /package/templates/javascript-expert/{.cursorrules → .cursor/rules}/overview.md +0 -0
  101. /package/templates/javascript-expert/{.cursorrules → .cursor/rules}/performance.md +0 -0
  102. /package/templates/javascript-expert/{.cursorrules → .cursor/rules}/react-patterns.md +0 -0
  103. /package/templates/javascript-expert/{.cursorrules → .cursor/rules}/testing.md +0 -0
  104. /package/templates/javascript-expert/{.cursorrules → .cursor/rules}/tooling.md +0 -0
  105. /package/templates/javascript-expert/{.cursorrules → .cursor/rules}/typescript-deep-dive.md +0 -0
  106. /package/templates/kotlin-expert/{.cursorrules → .cursor/rules}/coroutines.md +0 -0
  107. /package/templates/kotlin-expert/{.cursorrules → .cursor/rules}/error-handling.md +0 -0
  108. /package/templates/kotlin-expert/{.cursorrules → .cursor/rules}/frameworks.md +0 -0
  109. /package/templates/kotlin-expert/{.cursorrules → .cursor/rules}/language-features.md +0 -0
  110. /package/templates/kotlin-expert/{.cursorrules → .cursor/rules}/overview.md +0 -0
  111. /package/templates/kotlin-expert/{.cursorrules → .cursor/rules}/performance.md +0 -0
  112. /package/templates/kotlin-expert/{.cursorrules → .cursor/rules}/testing.md +0 -0
  113. /package/templates/kotlin-expert/{.cursorrules → .cursor/rules}/tooling.md +0 -0
  114. /package/templates/ml-ai/{.cursorrules → .cursor/rules}/data-engineering.md +0 -0
  115. /package/templates/ml-ai/{.cursorrules → .cursor/rules}/deployment.md +0 -0
  116. /package/templates/ml-ai/{.cursorrules → .cursor/rules}/model-development.md +0 -0
  117. /package/templates/ml-ai/{.cursorrules → .cursor/rules}/monitoring.md +0 -0
  118. /package/templates/ml-ai/{.cursorrules → .cursor/rules}/overview.md +0 -0
  119. /package/templates/ml-ai/{.cursorrules → .cursor/rules}/security.md +0 -0
  120. /package/templates/ml-ai/{.cursorrules → .cursor/rules}/testing.md +0 -0
  121. /package/templates/mobile/{.cursorrules → .cursor/rules}/navigation.md +0 -0
  122. /package/templates/mobile/{.cursorrules → .cursor/rules}/offline-first.md +0 -0
  123. /package/templates/mobile/{.cursorrules → .cursor/rules}/overview.md +0 -0
  124. /package/templates/mobile/{.cursorrules → .cursor/rules}/performance.md +0 -0
  125. /package/templates/mobile/{.cursorrules → .cursor/rules}/testing.md +0 -0
  126. /package/templates/platform-engineering/{.cursorrules → .cursor/rules}/ci-cd.md +0 -0
  127. /package/templates/platform-engineering/{.cursorrules → .cursor/rules}/developer-experience.md +0 -0
  128. /package/templates/platform-engineering/{.cursorrules → .cursor/rules}/infrastructure-as-code.md +0 -0
  129. /package/templates/platform-engineering/{.cursorrules → .cursor/rules}/kubernetes.md +0 -0
  130. /package/templates/platform-engineering/{.cursorrules → .cursor/rules}/observability.md +0 -0
  131. /package/templates/platform-engineering/{.cursorrules → .cursor/rules}/overview.md +0 -0
  132. /package/templates/platform-engineering/{.cursorrules → .cursor/rules}/security.md +0 -0
  133. /package/templates/platform-engineering/{.cursorrules → .cursor/rules}/testing.md +0 -0
  134. /package/templates/product-manager/{.cursorrules → .cursor/rules}/communication.md +0 -0
  135. /package/templates/product-manager/{.cursorrules → .cursor/rules}/discovery.md +0 -0
  136. /package/templates/product-manager/{.cursorrules → .cursor/rules}/metrics.md +0 -0
  137. /package/templates/product-manager/{.cursorrules → .cursor/rules}/overview.md +0 -0
  138. /package/templates/product-manager/{.cursorrules → .cursor/rules}/prioritization.md +0 -0
  139. /package/templates/product-manager/{.cursorrules → .cursor/rules}/requirements.md +0 -0
  140. /package/templates/python-expert/{.cursorrules → .cursor/rules}/async-python.md +0 -0
  141. /package/templates/python-expert/{.cursorrules → .cursor/rules}/overview.md +0 -0
  142. /package/templates/python-expert/{.cursorrules → .cursor/rules}/patterns-and-idioms.md +0 -0
  143. /package/templates/python-expert/{.cursorrules → .cursor/rules}/performance.md +0 -0
  144. /package/templates/python-expert/{.cursorrules → .cursor/rules}/testing.md +0 -0
  145. /package/templates/python-expert/{.cursorrules → .cursor/rules}/tooling.md +0 -0
  146. /package/templates/python-expert/{.cursorrules → .cursor/rules}/type-system.md +0 -0
  147. /package/templates/python-expert/{.cursorrules → .cursor/rules}/web-and-apis.md +0 -0
  148. /package/templates/qa-engineering/{.cursorrules → .cursor/rules}/automation.md +0 -0
  149. /package/templates/qa-engineering/{.cursorrules → .cursor/rules}/metrics.md +0 -0
  150. /package/templates/qa-engineering/{.cursorrules → .cursor/rules}/overview.md +0 -0
  151. /package/templates/qa-engineering/{.cursorrules → .cursor/rules}/quality-gates.md +0 -0
  152. /package/templates/qa-engineering/{.cursorrules → .cursor/rules}/test-design.md +0 -0
  153. /package/templates/qa-engineering/{.cursorrules → .cursor/rules}/test-strategy.md +0 -0
  154. /package/templates/rust-expert/{.cursorrules → .cursor/rules}/concurrency.md +0 -0
  155. /package/templates/rust-expert/{.cursorrules → .cursor/rules}/ecosystem-and-tooling.md +0 -0
  156. /package/templates/rust-expert/{.cursorrules → .cursor/rules}/error-handling.md +0 -0
  157. /package/templates/rust-expert/{.cursorrules → .cursor/rules}/overview.md +0 -0
  158. /package/templates/rust-expert/{.cursorrules → .cursor/rules}/ownership-and-borrowing.md +0 -0
  159. /package/templates/rust-expert/{.cursorrules → .cursor/rules}/performance-and-unsafe.md +0 -0
  160. /package/templates/rust-expert/{.cursorrules → .cursor/rules}/testing.md +0 -0
  161. /package/templates/rust-expert/{.cursorrules → .cursor/rules}/traits-and-generics.md +0 -0
  162. /package/templates/swift-expert/{.cursorrules → .cursor/rules}/concurrency.md +0 -0
  163. /package/templates/swift-expert/{.cursorrules → .cursor/rules}/error-handling.md +0 -0
  164. /package/templates/swift-expert/{.cursorrules → .cursor/rules}/language-features.md +0 -0
  165. /package/templates/swift-expert/{.cursorrules → .cursor/rules}/overview.md +0 -0
  166. /package/templates/swift-expert/{.cursorrules → .cursor/rules}/performance.md +0 -0
  167. /package/templates/swift-expert/{.cursorrules → .cursor/rules}/swiftui.md +0 -0
  168. /package/templates/swift-expert/{.cursorrules → .cursor/rules}/testing.md +0 -0
  169. /package/templates/swift-expert/{.cursorrules → .cursor/rules}/tooling.md +0 -0
  170. /package/templates/testing/{.cursorrules → .cursor/rules}/advanced-techniques.md +0 -0
  171. /package/templates/testing/{.cursorrules → .cursor/rules}/ci-cd-integration.md +0 -0
  172. /package/templates/testing/{.cursorrules → .cursor/rules}/overview.md +0 -0
  173. /package/templates/testing/{.cursorrules → .cursor/rules}/performance-testing.md +0 -0
  174. /package/templates/testing/{.cursorrules → .cursor/rules}/quality-metrics.md +0 -0
  175. /package/templates/testing/{.cursorrules → .cursor/rules}/reliability.md +0 -0
  176. /package/templates/testing/{.cursorrules → .cursor/rules}/tdd-methodology.md +0 -0
  177. /package/templates/testing/{.cursorrules → .cursor/rules}/test-data.md +0 -0
  178. /package/templates/testing/{.cursorrules → .cursor/rules}/test-design.md +0 -0
  179. /package/templates/testing/{.cursorrules → .cursor/rules}/test-types.md +0 -0
  180. /package/templates/utility-agent/{.cursorrules → .cursor/rules}/action-control.md +0 -0
  181. /package/templates/utility-agent/{.cursorrules → .cursor/rules}/context-management.md +0 -0
  182. /package/templates/utility-agent/{.cursorrules → .cursor/rules}/hallucination-prevention.md +0 -0
  183. /package/templates/utility-agent/{.cursorrules → .cursor/rules}/overview.md +0 -0
  184. /package/templates/utility-agent/{.cursorrules → .cursor/rules}/token-optimization.md +0 -0
  185. /package/templates/web-backend/{.cursorrules → .cursor/rules}/api-design.md +0 -0
  186. /package/templates/web-backend/{.cursorrules → .cursor/rules}/authentication.md +0 -0
  187. /package/templates/web-backend/{.cursorrules → .cursor/rules}/database-patterns.md +0 -0
  188. /package/templates/web-backend/{.cursorrules → .cursor/rules}/error-handling.md +0 -0
  189. /package/templates/web-backend/{.cursorrules → .cursor/rules}/overview.md +0 -0
  190. /package/templates/web-backend/{.cursorrules → .cursor/rules}/security.md +0 -0
  191. /package/templates/web-backend/{.cursorrules → .cursor/rules}/testing.md +0 -0
  192. /package/templates/web-frontend/{.cursorrules → .cursor/rules}/accessibility.md +0 -0
  193. /package/templates/web-frontend/{.cursorrules → .cursor/rules}/component-patterns.md +0 -0
  194. /package/templates/web-frontend/{.cursorrules → .cursor/rules}/overview.md +0 -0
  195. /package/templates/web-frontend/{.cursorrules → .cursor/rules}/performance.md +0 -0
  196. /package/templates/web-frontend/{.cursorrules → .cursor/rules}/state-management.md +0 -0
  197. /package/templates/web-frontend/{.cursorrules → .cursor/rules}/styling.md +0 -0
  198. /package/templates/web-frontend/{.cursorrules → .cursor/rules}/testing.md +0 -0
package/README.md CHANGED
@@ -14,7 +14,7 @@ AI coding assistant templates for Cursor IDE, Claude Code, and GitHub Copilot. P
14
14
  **Installs (configurable via `--ide`):**
15
15
 
16
16
  - **`CLAUDE.md`** - Development guide for Claude-based assistants (Claude Code, Cursor with Claude)
17
- - **`.cursorrules/`** - Rule files for Cursor IDE
17
+ - **`.cursor/rules/`** - Rule files for Cursor IDE
18
18
  - **`.github/copilot-instructions.md`** - Instructions for GitHub Copilot
19
19
 
20
20
  > **Disclaimer:** This project is provided for **educational and experimental purposes only**. The author takes no responsibility for any actions, outputs, or consequences resulting from an LLM or AI assistant following these rules. Use at your own risk. Always review AI-generated code before deploying to production.
@@ -204,19 +204,20 @@ After running `npx agentic-team-templates web-frontend`:
204
204
  ```text
205
205
  your-project/
206
206
  ├── CLAUDE.md # Development guide (Claude Code, Cursor)
207
- ├── .cursorrules/ # Rule files (Cursor IDE)
208
- ├── core-principles.md # Shared
209
- ├── code-quality.md # Shared
210
- ├── security-fundamentals.md # Shared
211
- ├── git-workflow.md # Shared
212
- ├── communication.md # Shared
213
- ├── web-frontend-overview.md # Template-specific
214
- ├── web-frontend-accessibility.md # Template-specific
215
- ├── web-frontend-component-patterns.md # Template-specific
216
- ├── web-frontend-performance.md # Template-specific
217
- ├── web-frontend-state-management.md # Template-specific
218
- ├── web-frontend-styling.md # Template-specific
219
- └── web-frontend-testing.md # Template-specific
207
+ ├── .cursor/
208
+ └── rules/ # Rule files (Cursor IDE)
209
+ ├── core-principles.md # Shared
210
+ ├── code-quality.md # Shared
211
+ ├── security-fundamentals.md # Shared
212
+ ├── git-workflow.md # Shared
213
+ ├── communication.md # Shared
214
+ ├── web-frontend-overview.md # Template-specific
215
+ ├── web-frontend-accessibility.md # Template-specific
216
+ ├── web-frontend-component-patterns.md # Template-specific
217
+ ├── web-frontend-performance.md # Template-specific
218
+ ├── web-frontend-state-management.md # Template-specific
219
+ ├── web-frontend-styling.md # Template-specific
220
+ │ └── web-frontend-testing.md # Template-specific
220
221
  └── .github/
221
222
  └── copilot-instructions.md # Instructions (GitHub Copilot)
222
223
  ```
@@ -225,7 +226,7 @@ your-project/
225
226
 
226
227
  ### Add Project-Specific Rules
227
228
 
228
- Create new `.md` files in `.cursorrules/`:
229
+ Create new `.md` files in `.cursor/rules/`:
229
230
 
230
231
  ```markdown
231
232
  # my-project-conventions.md
@@ -237,11 +238,15 @@ All API calls go through `/lib/api.ts`...
237
238
 
238
239
  ### Modify Existing Rules
239
240
 
240
- Edit any file in `.cursorrules/` or `CLAUDE.md` directly. Changes take effect immediately.
241
+ Edit any file in `.cursor/rules/` or `CLAUDE.md` directly. Changes take effect immediately.
241
242
 
242
243
  ### Combine with Existing Rules
243
244
 
244
- Templates merge with your existing `.cursorrules/` directory. Existing files are preserved unless they have the same name.
245
+ Templates merge with your existing `.cursor/rules/` directory. Existing files are preserved unless they have the same name.
246
+
247
+ ### Migrating from `.cursorrules/`
248
+
249
+ If your project uses the older `.cursorrules/` directory, the installer will detect it and offer to clean it up automatically. Cursor now uses `.cursor/rules/` for rule files. Support for `.cursorrules/` will be removed in a future version.
245
250
 
246
251
  ## Examples
247
252
 
@@ -279,7 +284,7 @@ npx agentic-team-templates ml-ai data-engineering
279
284
 
280
285
  - **Node.js**: 18.0.0 or higher
281
286
  - **Supported IDEs/Tools**:
282
- - Cursor IDE (any version with `.cursorrules/` support)
287
+ - Cursor IDE (any version with `.cursor/rules/` support)
283
288
  - Claude Code (reads `CLAUDE.md` automatically)
284
289
  - GitHub Copilot (reads `.github/copilot-instructions.md`)
285
290
 
@@ -342,11 +347,12 @@ We welcome contributions! Here's how to add new templates or improve existing on
342
347
  ```text
343
348
  templates/your-template/
344
349
  ├── CLAUDE.md # Main development guide (required)
345
- └── .cursorrules/
346
- ├── overview.md # Scope and core principles (required)
347
- ├── topic-one.md # Domain-specific rules
348
- ├── topic-two.md
349
- └── ...
350
+ └── .cursor/
351
+ └── rules/
352
+ ├── overview.md # Scope and core principles (required)
353
+ ├── topic-one.md # Domain-specific rules
354
+ ├── topic-two.md
355
+ └── ...
350
356
  ```
351
357
 
352
358
  2. **Follow the existing patterns:**
@@ -357,7 +363,7 @@ templates/your-template/
357
363
 
358
364
  3. **Required files:**
359
365
  - `CLAUDE.md` - Comprehensive guide with overview, tech stack, patterns, and examples
360
- - `.cursorrules/overview.md` - Scope, core principles, and project structure
366
+ - `.cursor/rules/overview.md` - Scope, core principles, and project structure
361
367
 
362
368
  ### Template Guidelines
363
369
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agentic-team-templates",
3
- "version": "0.16.0",
3
+ "version": "0.18.0",
4
4
  "description": "AI coding assistant templates for Cursor IDE. Pre-configured rules and guidelines that help AI assistants write better code. - use at your own risk",
5
5
  "keywords": [
6
6
  "cursor",
package/src/index.js CHANGED
@@ -10,6 +10,10 @@ const __filename = fileURLToPath(import.meta.url);
10
10
  const __dirname = path.dirname(__filename);
11
11
  const TEMPLATES_DIR = path.join(__dirname, '..', 'templates');
12
12
 
13
+ // Cursor rules directory paths
14
+ const CURSOR_RULES_DIR = '.cursor/rules'; // New path (Cursor IDE)
15
+ const LEGACY_CURSORRULES_DIR = '.cursorrules'; // Deprecated path
16
+
13
17
  // Read package.json for version info
14
18
  const packageJsonPath = path.join(__dirname, '..', 'package.json');
15
19
  const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
@@ -112,6 +116,10 @@ const TEMPLATES = {
112
116
  description: 'AI agent utilities with context management and hallucination prevention',
113
117
  rules: ['action-control.md', 'context-management.md', 'hallucination-prevention.md', 'overview.md', 'token-optimization.md']
114
118
  },
119
+ 'ux-designer': {
120
+ description: 'Principal-level UX design with user research, interaction design, design systems, accessibility, and emotional design',
121
+ rules: ['accessibility.md', 'emotional-design.md', 'handoff.md', 'information-architecture.md', 'interaction-design.md', 'overview.md', 'research.md', 'visual-design.md']
122
+ },
115
123
  'web-backend': {
116
124
  description: 'Backend APIs and services (REST, GraphQL, microservices)',
117
125
  rules: ['api-design.md', 'authentication.md', 'database-patterns.md', 'error-handling.md', 'overview.md', 'security.md', 'testing.md']
@@ -143,6 +151,10 @@ const TEMPLATE_ALIASES = {
143
151
  'cs': 'csharp-expert',
144
152
  'teach': 'educator',
145
153
  'teacher': 'educator',
154
+ 'ux': 'ux-designer',
155
+ 'uxd': 'ux-designer',
156
+ 'design': 'ux-designer',
157
+ 'designer': 'ux-designer',
146
158
  };
147
159
 
148
160
  /**
@@ -247,7 +259,7 @@ ${colors.yellow('Removal Options:')}
247
259
  --reset Remove ALL installed content (shared rules, templates, generated files)
248
260
 
249
261
  ${colors.yellow('IDE Targets:')}
250
- cursor .cursorrules/ directory (Cursor IDE)
262
+ cursor .cursor/rules/ directory (Cursor IDE)
251
263
  claude CLAUDE.md file (Claude Code, Cursor with Claude)
252
264
  codex .github/copilot-instructions.md (GitHub Copilot)
253
265
 
@@ -262,6 +274,7 @@ ${colors.yellow('Shorthand Aliases:')}
262
274
  cpp → cpp-expert
263
275
  csharp, cs → csharp-expert
264
276
  teach, teacher → educator
277
+ ux, uxd, design, designer → ux-designer
265
278
 
266
279
  ${colors.yellow('Examples:')}
267
280
  npx cursor-templates js
@@ -565,7 +578,7 @@ ${rules}`;
565
578
 
566
579
  return `# CLAUDE.md - Development Guide
567
580
 
568
- This project uses AI-assisted development with Cursor. The rules in \`.cursorrules/\` provide domain-specific guidance for the AI assistant.
581
+ This project uses AI-assisted development with Cursor. The rules in \`.cursor/rules/\` provide domain-specific guidance for the AI assistant.
569
582
 
570
583
  ---
571
584
 
@@ -578,7 +591,7 @@ ${templateList}
578
591
 
579
592
  ### Rule Files
580
593
 
581
- All rules are in \`.cursorrules/\`. The AI assistant automatically reads these when working on your project.
594
+ All rules are in \`.cursor/rules/\`. The AI assistant automatically reads these when working on your project.
582
595
 
583
596
  #### Shared Rules (Apply to All Code)
584
597
 
@@ -641,13 +654,13 @@ A feature is complete when:
641
654
 
642
655
  ### Adding Project-Specific Rules
643
656
 
644
- 1. Create new \`.md\` files in \`.cursorrules/\`
657
+ 1. Create new \`.md\` files in \`.cursor/rules/\`
645
658
  2. Follow the existing naming convention
646
659
  3. Include clear examples and anti-patterns
647
660
 
648
661
  ### Modifying Existing Rules
649
662
 
650
- Edit files directly in \`.cursorrules/\`. Changes take effect immediately.
663
+ Edit files directly in \`.cursor/rules/\`. Changes take effect immediately.
651
664
 
652
665
  ### Updating Templates
653
666
 
@@ -696,7 +709,7 @@ function generateCopilotInstructionsContent(installedTemplates) {
696
709
  // Read and concatenate template-specific rules
697
710
  const templateRulesContent = installedTemplates.map(template => {
698
711
  return TEMPLATES[template].rules.map(rule => {
699
- const rulePath = path.join(TEMPLATES_DIR, template, '.cursorrules', rule);
712
+ const rulePath = path.join(TEMPLATES_DIR, template, '.cursor', 'rules', rule);
700
713
  try {
701
714
  return fs.readFileSync(rulePath, 'utf8');
702
715
  } catch {
@@ -763,7 +776,7 @@ A feature is complete when:
763
776
  `;
764
777
  }
765
778
 
766
- function install(targetDir, templates, dryRun = false, force = false, ides = DEFAULT_IDES) {
779
+ async function install(targetDir, templates, dryRun = false, force = false, ides = DEFAULT_IDES, skipConfirm = false) {
767
780
  const stats = { copied: 0, skipped: 0, updated: 0, renamed: 0 };
768
781
  const renamedFiles = [];
769
782
  const installedFor = [];
@@ -775,20 +788,20 @@ function install(targetDir, templates, dryRun = false, force = false, ides = DEF
775
788
  }
776
789
  console.log();
777
790
 
778
- // 1. Install .cursorrules/ for Cursor IDE
791
+ // 1. Install .cursor/rules/ for Cursor IDE
779
792
  if (ides.includes('cursor')) {
780
793
  installedFor.push('cursor');
781
- const cursorrules = path.join(targetDir, '.cursorrules');
782
-
783
- if (!dryRun && !fs.existsSync(cursorrules)) {
784
- fs.mkdirSync(cursorrules, { recursive: true });
794
+ const cursorRulesDir = path.join(targetDir, CURSOR_RULES_DIR);
795
+
796
+ if (!dryRun && !fs.existsSync(cursorRulesDir)) {
797
+ fs.mkdirSync(cursorRulesDir, { recursive: true });
785
798
  }
786
799
 
787
800
  // Install shared rules
788
- console.log(colors.green('► Installing shared rules (.cursorrules/)...'));
801
+ console.log(colors.green(`► Installing shared rules (${CURSOR_RULES_DIR}/)...`));
789
802
  for (const rule of SHARED_RULES) {
790
803
  const src = path.join(TEMPLATES_DIR, '_shared', rule);
791
- const dest = path.join(cursorrules, rule);
804
+ const dest = path.join(cursorRulesDir, rule);
792
805
 
793
806
  if (dryRun) {
794
807
  const exists = fs.existsSync(dest);
@@ -820,11 +833,11 @@ function install(targetDir, templates, dryRun = false, force = false, ides = DEF
820
833
 
821
834
  // Install template-specific rules
822
835
  for (const template of templates) {
823
- console.log(colors.green(`► Installing ${template} template (.cursorrules/)...`));
824
-
836
+ console.log(colors.green(`► Installing ${template} template (${CURSOR_RULES_DIR}/)...`));
837
+
825
838
  for (const rule of TEMPLATES[template].rules) {
826
- const src = path.join(TEMPLATES_DIR, template, '.cursorrules', rule);
827
- const dest = path.join(cursorrules, `${template}-${rule}`);
839
+ const src = path.join(TEMPLATES_DIR, template, '.cursor', 'rules', rule);
840
+ const dest = path.join(cursorRulesDir, `${template}-${rule}`);
828
841
  const destName = `${template}-${rule}`;
829
842
 
830
843
  if (dryRun) {
@@ -855,6 +868,46 @@ function install(targetDir, templates, dryRun = false, force = false, ides = DEF
855
868
  }
856
869
  console.log();
857
870
  }
871
+
872
+ // Legacy .cursorrules/ detection and cleanup
873
+ const legacyDir = path.join(targetDir, LEGACY_CURSORRULES_DIR);
874
+ if (fs.existsSync(legacyDir)) {
875
+ console.log(colors.yellow(`⚠ Deprecated ${LEGACY_CURSORRULES_DIR}/ directory detected.`));
876
+ console.log(colors.yellow(` Cursor now uses ${CURSOR_RULES_DIR}/ for rule files.`));
877
+ console.log(colors.yellow(` New rules have been installed to ${CURSOR_RULES_DIR}/.`));
878
+ console.log();
879
+ console.log(colors.yellow(` Your existing ${LEGACY_CURSORRULES_DIR}/ files are still present.`));
880
+ console.log(colors.yellow(` Support for ${LEGACY_CURSORRULES_DIR}/ will be removed in a future version.`));
881
+ console.log();
882
+
883
+ if (!dryRun) {
884
+ const shouldCleanup = skipConfirm || await confirm(
885
+ colors.yellow(`? Would you like to remove the deprecated ${LEGACY_CURSORRULES_DIR}/ directory?`)
886
+ );
887
+
888
+ if (shouldCleanup) {
889
+ fs.rmSync(legacyDir, { recursive: true });
890
+ console.log(colors.green(` ✓ Removed deprecated ${LEGACY_CURSORRULES_DIR}/ directory.`));
891
+ } else {
892
+ // Create reference file so Cursor AI knows about legacy rules
893
+ const noticePath = path.join(cursorRulesDir, 'legacy-cursorrules-notice.md');
894
+ const noticeContent = `# Legacy Rules Notice
895
+
896
+ This project contains additional rule files in the deprecated \`.cursorrules/\` directory
897
+ at the project root. Those rules are still active and should be consulted alongside the
898
+ rules in this directory.
899
+
900
+ The \`.cursorrules/\` directory will be removed in a future version.
901
+ To clean up manually, move any custom rules to \`.cursor/rules/\` and delete \`.cursorrules/\`.
902
+ `;
903
+ fs.writeFileSync(noticePath, noticeContent);
904
+ console.log(colors.dim(` Created ${CURSOR_RULES_DIR}/legacy-cursorrules-notice.md as a reference.`));
905
+ }
906
+ } else {
907
+ console.log(colors.dim(' (dry-run: skipping cleanup prompt)'));
908
+ }
909
+ console.log();
910
+ }
858
911
  }
859
912
 
860
913
  // 2. Generate CLAUDE.md for Claude Code
@@ -981,7 +1034,7 @@ function install(targetDir, templates, dryRun = false, force = false, ides = DEF
981
1034
  console.log(colors.yellow('Installed for:'));
982
1035
  for (const ide of installedFor) {
983
1036
  const ideInfo = {
984
- cursor: '.cursorrules/ (Cursor IDE)',
1037
+ cursor: '.cursor/rules/ (Cursor IDE)',
985
1038
  claude: 'CLAUDE.md (Claude Code)',
986
1039
  codex: '.github/copilot-instructions.md (GitHub Copilot)'
987
1040
  };
@@ -1062,52 +1115,76 @@ async function remove(targetDir, templates, dryRun = false, force = false, skipC
1062
1115
  console.log(`${colors.blue('Templates:')} ${templates.join(', ')}`);
1063
1116
  console.log();
1064
1117
 
1065
- // 1. Collect files to remove from .cursorrules/
1118
+ // 1. Collect files to remove from .cursor/rules/ (and legacy .cursorrules/)
1066
1119
  if (ides.includes('cursor')) {
1067
- const cursorrules = path.join(targetDir, '.cursorrules');
1068
-
1069
- if (fs.existsSync(cursorrules)) {
1120
+ const cursorRulesDir = path.join(targetDir, CURSOR_RULES_DIR);
1121
+ const legacyDir = path.join(targetDir, LEGACY_CURSORRULES_DIR);
1122
+ const dirsToScan = [];
1123
+
1124
+ if (fs.existsSync(cursorRulesDir)) dirsToScan.push({ dir: cursorRulesDir, label: CURSOR_RULES_DIR });
1125
+ if (fs.existsSync(legacyDir)) dirsToScan.push({ dir: legacyDir, label: LEGACY_CURSORRULES_DIR });
1126
+
1127
+ if (dirsToScan.length > 0) {
1070
1128
  for (const template of templates) {
1071
1129
  console.log(colors.yellow(`► Scanning ${template} template files...`));
1072
-
1073
- for (const rule of TEMPLATES[template].rules) {
1074
- const destName = `${template}-${rule}`;
1075
- const destPath = path.join(cursorrules, destName);
1076
- const srcPath = path.join(TEMPLATES_DIR, template, '.cursorrules', rule);
1077
-
1078
- if (!fs.existsSync(destPath)) {
1079
- console.log(` ${colors.dim('[not found]')} ${destName}`);
1080
- stats.notFound++;
1081
- continue;
1130
+
1131
+ for (const { dir, label } of dirsToScan) {
1132
+ for (const rule of TEMPLATES[template].rules) {
1133
+ const destName = `${template}-${rule}`;
1134
+ const destPath = path.join(dir, destName);
1135
+ const srcPath = path.join(TEMPLATES_DIR, template, '.cursor', 'rules', rule);
1136
+
1137
+ if (!fs.existsSync(destPath)) {
1138
+ continue;
1139
+ }
1140
+
1141
+ const isUnmodified = isOurFile(destPath, srcPath);
1142
+ const displayName = `${destName} (${label}/)`;
1143
+
1144
+ if (!isUnmodified && !force) {
1145
+ console.log(` ${colors.yellow('[modified]')} ${displayName} (use --force to remove)`);
1146
+ modifiedFiles.push(displayName);
1147
+ stats.skipped++;
1148
+ } else {
1149
+ console.log(` ${colors.red('[remove]')} ${displayName}${!isUnmodified ? ' (modified, --force)' : ''}`);
1150
+ filesToRemove.push({ path: destPath, name: displayName });
1151
+ }
1082
1152
  }
1083
-
1084
- const isUnmodified = isOurFile(destPath, srcPath);
1085
-
1086
- if (!isUnmodified && !force) {
1087
- console.log(` ${colors.yellow('[modified]')} ${destName} (use --force to remove)`);
1088
- modifiedFiles.push(destName);
1089
- stats.skipped++;
1090
- } else {
1091
- console.log(` ${colors.red('[remove]')} ${destName}${!isUnmodified ? ' (modified, --force)' : ''}`);
1092
- filesToRemove.push({ path: destPath, name: destName });
1153
+
1154
+ // Also check for -1 variant files
1155
+ for (const rule of TEMPLATES[template].rules) {
1156
+ const altName = `${template}-${rule.replace('.md', '-1.md')}`;
1157
+ const altPath = path.join(dir, altName);
1158
+
1159
+ if (fs.existsSync(altPath)) {
1160
+ console.log(` ${colors.red('[remove]')} ${altName} (${label}/, alternate file)`);
1161
+ filesToRemove.push({ path: altPath, name: altName });
1162
+ }
1093
1163
  }
1094
1164
  }
1095
-
1096
- // Also check for -1 variant files
1165
+
1166
+ // Check for legacy-cursorrules-notice.md in new dir
1167
+ const noticePath = path.join(cursorRulesDir, 'legacy-cursorrules-notice.md');
1168
+ if (fs.existsSync(noticePath)) {
1169
+ console.log(` ${colors.red('[remove]')} legacy-cursorrules-notice.md`);
1170
+ filesToRemove.push({ path: noticePath, name: 'legacy-cursorrules-notice.md' });
1171
+ }
1172
+
1173
+ // Log not-found for templates that weren't in either dir
1097
1174
  for (const rule of TEMPLATES[template].rules) {
1098
- const altName = `${template}-${rule.replace('.md', '-1.md')}`;
1099
- const altPath = path.join(cursorrules, altName);
1100
-
1101
- if (fs.existsSync(altPath)) {
1102
- console.log(` ${colors.red('[remove]')} ${altName} (alternate file)`);
1103
- filesToRemove.push({ path: altPath, name: altName });
1175
+ const destName = `${template}-${rule}`;
1176
+ const inNew = fs.existsSync(path.join(cursorRulesDir, destName));
1177
+ const inLegacy = fs.existsSync(path.join(legacyDir, destName));
1178
+ if (!inNew && !inLegacy) {
1179
+ console.log(` ${colors.dim('[not found]')} ${destName}`);
1180
+ stats.notFound++;
1104
1181
  }
1105
1182
  }
1106
-
1183
+
1107
1184
  console.log();
1108
1185
  }
1109
1186
  } else {
1110
- console.log(colors.dim('No .cursorrules/ directory found.\n'));
1187
+ console.log(colors.dim(`No ${CURSOR_RULES_DIR}/ or ${LEGACY_CURSORRULES_DIR}/ directory found.\n`));
1111
1188
  }
1112
1189
  }
1113
1190
 
@@ -1185,86 +1262,105 @@ async function reset(targetDir, dryRun = false, force = false, skipConfirm = fal
1185
1262
  console.log(`${colors.blue('Target IDEs:')} ${ides.join(', ')}`);
1186
1263
  console.log();
1187
1264
 
1188
- // 1. Remove .cursorrules/ contents for Cursor
1265
+ // 1. Remove .cursor/rules/ and legacy .cursorrules/ contents for Cursor
1189
1266
  if (ides.includes('cursor')) {
1190
- const cursorrules = path.join(targetDir, '.cursorrules');
1191
-
1192
- if (fs.existsSync(cursorrules)) {
1193
- console.log(colors.yellow('► Scanning .cursorrules/ directory...'));
1194
-
1195
- // Check shared rules
1196
- for (const rule of SHARED_RULES) {
1197
- const destPath = path.join(cursorrules, rule);
1198
- const srcPath = path.join(TEMPLATES_DIR, '_shared', rule);
1199
-
1200
- if (!fs.existsSync(destPath)) continue;
1201
-
1202
- const isUnmodified = isOurFile(destPath, srcPath);
1203
-
1204
- if (!isUnmodified && !force) {
1205
- console.log(` ${colors.yellow('[modified]')} ${rule} (use --force to remove)`);
1206
- modifiedFiles.push(rule);
1207
- stats.skipped++;
1208
- } else {
1209
- console.log(` ${colors.red('[remove]')} ${rule}${!isUnmodified ? ' (modified, --force)' : ''}`);
1210
- filesToRemove.push({ path: destPath, name: rule });
1211
- }
1212
-
1213
- // Check for -1 variant
1214
- const altPath = path.join(cursorrules, rule.replace('.md', '-1.md'));
1215
- if (fs.existsSync(altPath)) {
1216
- console.log(` ${colors.red('[remove]')} ${rule.replace('.md', '-1.md')} (alternate file)`);
1217
- filesToRemove.push({ path: altPath, name: rule.replace('.md', '-1.md') });
1218
- }
1219
- }
1220
-
1221
- // Check template-specific rules
1222
- for (const [templateName, templateInfo] of Object.entries(TEMPLATES)) {
1223
- for (const rule of templateInfo.rules) {
1224
- const destName = `${templateName}-${rule}`;
1225
- const destPath = path.join(cursorrules, destName);
1226
- const srcPath = path.join(TEMPLATES_DIR, templateName, '.cursorrules', rule);
1227
-
1267
+ const cursorRulesDir = path.join(targetDir, CURSOR_RULES_DIR);
1268
+ const legacyDir = path.join(targetDir, LEGACY_CURSORRULES_DIR);
1269
+ const dirsToScan = [];
1270
+
1271
+ if (fs.existsSync(cursorRulesDir)) dirsToScan.push({ dir: cursorRulesDir, label: CURSOR_RULES_DIR });
1272
+ if (fs.existsSync(legacyDir)) dirsToScan.push({ dir: legacyDir, label: LEGACY_CURSORRULES_DIR });
1273
+
1274
+ if (dirsToScan.length > 0) {
1275
+ for (const { dir, label } of dirsToScan) {
1276
+ console.log(colors.yellow(`► Scanning ${label}/ directory...`));
1277
+
1278
+ // Check shared rules
1279
+ for (const rule of SHARED_RULES) {
1280
+ const destPath = path.join(dir, rule);
1281
+ const srcPath = path.join(TEMPLATES_DIR, '_shared', rule);
1282
+
1228
1283
  if (!fs.existsSync(destPath)) continue;
1229
-
1284
+
1230
1285
  const isUnmodified = isOurFile(destPath, srcPath);
1231
-
1286
+
1232
1287
  if (!isUnmodified && !force) {
1233
- console.log(` ${colors.yellow('[modified]')} ${destName} (use --force to remove)`);
1234
- modifiedFiles.push(destName);
1288
+ console.log(` ${colors.yellow('[modified]')} ${rule} (use --force to remove)`);
1289
+ modifiedFiles.push(`${rule} (${label}/)`);
1235
1290
  stats.skipped++;
1236
1291
  } else {
1237
- console.log(` ${colors.red('[remove]')} ${destName}${!isUnmodified ? ' (modified, --force)' : ''}`);
1238
- filesToRemove.push({ path: destPath, name: destName });
1292
+ console.log(` ${colors.red('[remove]')} ${rule}${!isUnmodified ? ' (modified, --force)' : ''}`);
1293
+ filesToRemove.push({ path: destPath, name: `${rule} (${label}/)` });
1239
1294
  }
1240
-
1295
+
1241
1296
  // Check for -1 variant
1242
- const altName = destName.replace('.md', '-1.md');
1243
- const altPath = path.join(cursorrules, altName);
1297
+ const altPath = path.join(dir, rule.replace('.md', '-1.md'));
1244
1298
  if (fs.existsSync(altPath)) {
1245
- console.log(` ${colors.red('[remove]')} ${altName} (alternate file)`);
1246
- filesToRemove.push({ path: altPath, name: altName });
1299
+ console.log(` ${colors.red('[remove]')} ${rule.replace('.md', '-1.md')} (alternate file)`);
1300
+ filesToRemove.push({ path: altPath, name: rule.replace('.md', '-1.md') });
1247
1301
  }
1248
1302
  }
1303
+
1304
+ // Check template-specific rules
1305
+ for (const [templateName, templateInfo] of Object.entries(TEMPLATES)) {
1306
+ for (const rule of templateInfo.rules) {
1307
+ const destName = `${templateName}-${rule}`;
1308
+ const destPath = path.join(dir, destName);
1309
+ const srcPath = path.join(TEMPLATES_DIR, templateName, '.cursor', 'rules', rule);
1310
+
1311
+ if (!fs.existsSync(destPath)) continue;
1312
+
1313
+ const isUnmodified = isOurFile(destPath, srcPath);
1314
+
1315
+ if (!isUnmodified && !force) {
1316
+ console.log(` ${colors.yellow('[modified]')} ${destName} (use --force to remove)`);
1317
+ modifiedFiles.push(`${destName} (${label}/)`);
1318
+ stats.skipped++;
1319
+ } else {
1320
+ console.log(` ${colors.red('[remove]')} ${destName}${!isUnmodified ? ' (modified, --force)' : ''}`);
1321
+ filesToRemove.push({ path: destPath, name: `${destName} (${label}/)` });
1322
+ }
1323
+
1324
+ // Check for -1 variant
1325
+ const altName = destName.replace('.md', '-1.md');
1326
+ const altPath = path.join(dir, altName);
1327
+ if (fs.existsSync(altPath)) {
1328
+ console.log(` ${colors.red('[remove]')} ${altName} (alternate file)`);
1329
+ filesToRemove.push({ path: altPath, name: altName });
1330
+ }
1331
+ }
1332
+ }
1333
+
1334
+ // Check for legacy-cursorrules-notice.md
1335
+ const noticePath = path.join(dir, 'legacy-cursorrules-notice.md');
1336
+ if (fs.existsSync(noticePath)) {
1337
+ console.log(` ${colors.red('[remove]')} legacy-cursorrules-notice.md`);
1338
+ filesToRemove.push({ path: noticePath, name: 'legacy-cursorrules-notice.md' });
1339
+ }
1340
+
1341
+ // Check if we should remove the directory itself (only if it would be empty)
1342
+ const remainingFiles = fs.readdirSync(dir).filter(f => {
1343
+ const fullPath = path.join(dir, f);
1344
+ const willBeRemoved = filesToRemove.some(fr => fr.path === fullPath);
1345
+ return !willBeRemoved;
1346
+ });
1347
+
1348
+ if (remainingFiles.length === 0 || force) {
1349
+ console.log(` ${colors.red('[remove]')} ${label}/ directory`);
1350
+ dirsToRemove.push(dir);
1351
+ // If removing .cursor/rules/, also check if .cursor/ would be empty
1352
+ if (label === CURSOR_RULES_DIR) {
1353
+ const cursorDir = path.join(targetDir, '.cursor');
1354
+ dirsToRemove.push(cursorDir);
1355
+ }
1356
+ } else if (remainingFiles.length > 0) {
1357
+ console.log(colors.dim(` ${label}/ will be kept (${remainingFiles.length} non-template file(s) remain)`));
1358
+ }
1359
+
1360
+ console.log();
1249
1361
  }
1250
-
1251
- // Check if we should remove the directory itself (only if it would be empty)
1252
- const remainingFiles = fs.readdirSync(cursorrules).filter(f => {
1253
- const fullPath = path.join(cursorrules, f);
1254
- const willBeRemoved = filesToRemove.some(fr => fr.path === fullPath);
1255
- return !willBeRemoved;
1256
- });
1257
-
1258
- if (remainingFiles.length === 0 || force) {
1259
- console.log(` ${colors.red('[remove]')} .cursorrules/ directory`);
1260
- dirsToRemove.push(cursorrules);
1261
- } else if (remainingFiles.length > 0) {
1262
- console.log(colors.dim(` .cursorrules/ will be kept (${remainingFiles.length} non-template file(s) remain)`));
1263
- }
1264
-
1265
- console.log();
1266
1362
  } else {
1267
- console.log(colors.dim('No .cursorrules/ directory found.\n'));
1363
+ console.log(colors.dim(`No ${CURSOR_RULES_DIR}/ or ${LEGACY_CURSORRULES_DIR}/ directory found.\n`));
1268
1364
  }
1269
1365
  }
1270
1366
 
@@ -1277,8 +1373,8 @@ async function reset(targetDir, dryRun = false, force = false, skipConfirm = fal
1277
1373
 
1278
1374
  // Check if it contains our signature content
1279
1375
  const content = fs.readFileSync(claudePath, 'utf8');
1280
- const isOurs = content.includes('# CLAUDE.md - Development Guide') &&
1281
- content.includes('.cursorrules/');
1376
+ const isOurs = content.includes('# CLAUDE.md - Development Guide') &&
1377
+ (content.includes('.cursor/rules/') || content.includes('.cursorrules/'));
1282
1378
 
1283
1379
  if (!isOurs && !force) {
1284
1380
  console.log(` ${colors.yellow('[modified]')} CLAUDE.md (doesn't match template, use --force)`);
@@ -1523,7 +1619,7 @@ export async function run(args) {
1523
1619
  }
1524
1620
 
1525
1621
  // Install to current directory
1526
- install(process.cwd(), resolvedTemplates, dryRun, force, targetIdes);
1622
+ await install(process.cwd(), resolvedTemplates, dryRun, force, targetIdes, skipConfirm);
1527
1623
  }
1528
1624
 
1529
1625
  // Export internals for testing
@@ -1532,6 +1628,8 @@ export const _internals = {
1532
1628
  CURRENT_VERSION,
1533
1629
  REPO_URL,
1534
1630
  CHANGELOG_URL,
1631
+ CURSOR_RULES_DIR,
1632
+ LEGACY_CURSORRULES_DIR,
1535
1633
  TEMPLATES,
1536
1634
  TEMPLATE_ALIASES,
1537
1635
  SHARED_RULES,