@litmers/cursorflow-orchestrator 0.1.0 → 0.1.2

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.
package/README.md CHANGED
@@ -1,310 +1,375 @@
1
- # CursorFlow
2
-
3
- > Git worktree 기반 병렬 AI 에이전트 오케스트레이션 시스템
4
-
5
- [![npm version](https://img.shields.io/npm/v/@cursorflow/orchestrator.svg)](https://www.npmjs.com/package/@cursorflow/orchestrator)
6
- [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
7
- [![Node.js](https://img.shields.io/badge/node-%3E%3D18.0.0-brightgreen.svg)](https://nodejs.org/)
8
-
9
- ## 주요 기능
10
-
11
- - 🚀 **병렬 실행**: Git worktree를 활용한 여러 레인 동시 실행
12
- - 🔍 **자동 리뷰**: AI 기반 코드 리뷰 및 피드백 루프
13
- - 📝 **상세 로깅**: 대화, 커밋, Git 작업 전문 기록
14
- - 🔀 **의존성 관리**: 자동 dependency gate 재개
15
- - 🎯 **레인별 포트**: 레인에 고유한 개발 서버 포트 할당
16
- - 💻 **Cursor 통합**: 커스텀 커맨드로 IDE 내에서 직접 관리
17
- - 🛠️ **설정 기반**: 프로젝트별 유연한 설정
18
-
19
- ## 빠른 시작
20
-
21
- ### 설치
22
-
23
- ```bash
24
- # npm
25
- npm install -g @litmers/cursorflow-orchestrator
26
-
27
- # pnpm (권장)
28
- pnpm add -g @cursorflow/orchestrator
29
-
30
- # yarn
31
- yarn global add @cursorflow/orchestrator
32
- ```
33
-
34
- ### 요구사항
35
-
36
- - **Node.js** >= 18.0.0
37
- - **Git** with worktree support
38
- - **cursor-agent CLI**: `npm install -g @cursor/agent`
39
-
40
- ### 프로젝트 초기화
41
-
42
- ```bash
43
- cd your-project
44
- cursorflow init --example
45
- ```
46
-
47
- 명령은:
48
- 1. `cursorflow.config.js` 설정 파일 생성
49
- 2. `_cursorflow/tasks/` 및 `_cursorflow/logs/` 디렉토리 생성
50
- 3. Cursor IDE 커맨드 설치
51
- 4. 예제 태스크 생성 (--example 옵션 사용 시)
52
-
53
- ### 예제 실행
54
-
55
- ```bash
56
- # 예제 태스크 실행
57
- cursorflow run _cursorflow/tasks/example/
58
-
59
- # 다른 터미널에서 모니터링
60
- cursorflow monitor --watch
61
- ```
62
-
63
- ## Cursor IDE 통합
64
-
65
- CursorFlow는 Cursor IDE 내에서 사용할 수 있는 커스텀 커맨드를 제공합니다.
66
-
67
- ### 커맨드 설치
68
-
69
- ```bash
70
- # 초기화 시 자동 설치
71
- cursorflow init
72
-
73
- # 또는 수동 설치
74
- npx cursorflow-setup
75
- ```
76
-
77
- ### 사용법
78
-
79
- Cursor IDE 채팅에서 `/` 입력 후 다음 커맨드 사용:
80
-
81
- - `/cursorflow-init` - 프로젝트 초기화
82
- - `/cursorflow-prepare` - 태스크 준비
83
- - `/cursorflow-run` - 오케스트레이션 실행
84
- - `/cursorflow-monitor` - 실행 모니터링
85
- - `/cursorflow-clean` - 정리 작업
86
- - `/cursorflow-resume` - 중단된 레인 재개
87
- - `/cursorflow-review` - 리뷰 설정 확인
88
-
89
- ## CLI 명령어
90
-
91
- ### 초기화
92
- ```bash
93
- cursorflow init [options]
94
- --example 예제 태스크 생성
95
- --with-commands Cursor 커맨드 설치 (기본: true)
96
- --config-only 설정 파일만 생성
97
- ```
98
-
99
- ### 태스크 준비
100
- ```bash
101
- cursorflow prepare <feature> [options]
102
- --lanes <number> 레인 개수
103
- --template <path> 템플릿 파일 경로
104
- ```
105
-
106
- ### 실행
107
- ```bash
108
- cursorflow run <tasks-dir> [options]
109
- --dry-run 실행 계획만 확인
110
- --executor <type> cursor-agent | cloud
111
- ```
112
-
113
- ### 모니터링
114
- ```bash
115
- cursorflow monitor [run-dir] [options]
116
- --watch 실시간 모니터링
117
- --interval <sec> 갱신 간격
118
- ```
119
-
120
- ### 정리
121
- ```bash
122
- cursorflow clean <type> [options]
123
- branches 브랜치 정리
124
- worktrees 워크트리 정리
125
- logs 로그 정리
126
- all 모두 정리
127
- ```
128
-
129
- ### 재개
130
- ```bash
131
- cursorflow resume <lane> [options]
132
- --clean 브랜치 정리 후 재시작
133
- --restart 처음부터 다시 시작
134
- ```
135
-
136
- ## 설정
137
-
138
- ### 설정 파일 (cursorflow.config.js)
139
-
140
- ```javascript
141
- module.exports = {
142
- // 디렉토리 설정
143
- tasksDir: '_cursorflow/tasks',
144
- logsDir: '_cursorflow/logs',
145
-
146
- // Git 설정
147
- baseBranch: 'main',
148
- branchPrefix: 'feature/',
149
-
150
- // 실행 설정
151
- executor: 'cursor-agent', // 'cursor-agent' | 'cloud'
152
- pollInterval: 60,
153
-
154
- // 의존성 관리
155
- allowDependencyChange: false,
156
- lockfileReadOnly: true,
157
-
158
- // 리뷰 설정
159
- enableReview: true,
160
- reviewModel: 'sonnet-4.5-thinking',
161
- maxReviewIterations: 3,
162
-
163
- // 레인 기본 설정
164
- defaultLaneConfig: {
165
- devPort: 3001,
166
- autoCreatePr: false,
167
- },
168
-
169
- // 로깅
170
- logLevel: 'info',
171
- verboseGit: false,
172
- };
173
- ```
174
-
175
- ### 태스크 파일 (JSON)
176
-
177
- ```json
178
- {
179
- "repository": "https://github.com/your-org/your-repo",
180
- "baseBranch": "main",
181
- "branchPrefix": "feature/my-",
182
- "executor": "cursor-agent",
183
- "laneNumber": 1,
184
- "devPort": 3001,
185
- "enableReview": true,
186
- "tasks": [
187
- {
188
- "name": "implement",
189
- "model": "sonnet-4.5",
190
- "acceptanceCriteria": [
191
- "빌드 에러 없음",
192
- "주요 기능 구현됨"
193
- ],
194
- "prompt": "구현 지시사항..."
195
- }
196
- ]
197
- }
198
- ```
199
-
200
- ## 사용 예시
201
-
202
- ### 단일 기능 개발
203
-
204
- ```bash
205
- # 1. 태스크 준비
206
- cursorflow prepare AddUserAuth --lanes 1
207
-
208
- # 2. 태스크 JSON 편집
209
- # _cursorflow/tasks/2512191830_AddUserAuth/01-task.json
210
-
211
- # 3. 실행
212
- cursorflow run _cursorflow/tasks/2512191830_AddUserAuth/
213
-
214
- # 4. 모니터링
215
- cursorflow monitor --watch
216
- ```
217
-
218
- ### 멀티 도메인 병렬 개발
219
-
220
- ```bash
221
- # 1. 태스크 준비 (5개 레인)
222
- cursorflow prepare AdminDashboard --lanes 5
223
-
224
- # 2. 각 레인 설정
225
- # 01-dashboard.json, 02-clients.json, ...
226
-
227
- # 3. 병렬 실행
228
- cursorflow run _cursorflow/tasks/2512191830_AdminDashboard/
229
-
230
- # 4. 실시간 모니터링
231
- cursorflow monitor --watch --interval 5
232
- ```
233
-
234
- ## 아키텍처
235
-
236
- ```
237
- ┌─────────────────────────────────────────────────────────┐
238
- │ CursorFlow CLI │
239
- └──────────────────┬──────────────────────────────────────┘
240
-
241
- ┌──────────┴──────────┐
242
- │ │
243
- ┌────▼────┐ ┌────▼────┐
244
- │ Config │ │ Core │
245
- │ System │ │ Engine │
246
- └────┬────┘ └────┬────┘
247
- │ │
248
- │ ┌──────────┼──────────┐
249
- │ │ │ │
250
- ┌────▼────┐ ┌─▼──┐ ┌────▼────┐ ┌─▼─────┐
251
- │ Git │ │Run │ Monitor │ │Review │
252
- Utils │ │ner │ │ │ │ │
253
- └─────────┘ └─┬──┘ └─────────┘ └───────┘
254
-
255
- ┌────────┼────────┐
256
- │ │ │
257
- ┌────▼───┐ ┌─▼──────┐
258
- │Worktree│ Cursor │ │
259
- │ │ │ Agent │ │
260
- └────────┘ └────────┘
261
-
262
- ┌────▼────┐
263
- │ Logs │
264
- │ State │
265
- └─────────┘
266
- ```
267
-
268
- ## 문서
269
-
270
- - [📖 사용 가이드](docs/GUIDE.md) - 상세한 사용 방법
271
- - [📋 API 레퍼런스](docs/API.md) - CLI 및 설정 API
272
- - [🎨 커맨드 가이드](docs/COMMANDS.md) - Cursor 커맨드 사용법
273
- - [🏗️ 아키텍처](docs/ARCHITECTURE.md) - 시스템 구조
274
- - [🔧 트러블슈팅](docs/TROUBLESHOOTING.md) - 문제 해결
275
- - [📦 예제 모음](examples/) - 실전 예제
276
-
277
- ## 로드맵
278
-
279
- - [ ] v1.0: 핵심 기능 및 기본 문서
280
- - [ ] v1.1: 향상된 리뷰 시스템
281
- - [ ] v1.2: 클라우드 실행 개선
282
- - [ ] v1.3: 플러그인 시스템
283
- - [ ] v2.0: GUI 도구
284
-
285
- ## 기여하기
286
-
287
- 기여는 환영합니다! [CONTRIBUTING.md](CONTRIBUTING.md)를 참조해주세요.
288
-
289
- ### 개발 환경 설정
290
-
291
- ```bash
292
- git clone https://github.com/eungjin-cigro/cursorflow.git
293
- cd cursorflow
294
- pnpm install
295
- pnpm test
296
- ```
297
-
298
- ## 라이선스
299
-
300
- MIT © Eugene Jin
301
-
302
- ## 지원
303
-
304
- - 🐛 [Issue Tracker](https://github.com/eungjin-cigro/cursorflow/issues)
305
- - 💬 [Discussions](https://github.com/eungjin-cigro/cursorflow/discussions)
306
- - 📧 Email: eungjin.cigro@gmail.com
307
-
308
- ---
309
-
310
- **Made with ❤️ for Cursor IDE users**
1
+ # CursorFlow
2
+
3
+ > Parallel AI agent orchestration system built on Git worktrees
4
+
5
+ [![npm version](https://img.shields.io/npm/v/@litmers/cursorflow-orchestrator.svg)](https://www.npmjs.com/package/@litmers/cursorflow-orchestrator)
6
+ [![CI](https://github.com/eungjin-cigro/cursorflow/actions/workflows/ci.yml/badge.svg)](https://github.com/eungjin-cigro/cursorflow/actions/workflows/ci.yml)
7
+ [![Security Scan](https://github.com/eungjin-cigro/cursorflow/actions/workflows/security.yml/badge.svg)](https://github.com/eungjin-cigro/cursorflow/actions/workflows/security.yml)
8
+ [![Publish to NPM](https://github.com/eungjin-cigro/cursorflow/actions/workflows/npm-publish.yml/badge.svg)](https://github.com/eungjin-cigro/cursorflow/actions/workflows/npm-publish.yml)
9
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
10
+ [![Node.js](https://img.shields.io/badge/node-%3E%3D18.0.0-brightgreen.svg)](https://nodejs.org/)
11
+
12
+ ## Key Features
13
+
14
+ - 🚀 **Parallel execution**: Run multiple lanes concurrently with Git worktrees
15
+ - 🔍 **Automatic review**: AI-powered code review with iterative feedback
16
+ - 📝 **Detailed logging**: Capture conversations, commits, and Git operations
17
+ - 🔀 **Dependency management**: Automatic dependency gating and resume support
18
+ - 🎯 **Per-lane ports**: Unique dev server ports for each lane
19
+ - 💻 **Cursor integration**: Manage workflows directly inside the IDE with custom commands
20
+ - 🛠️ **Config-driven**: Flexible project-specific configuration
21
+ - 🔒 **Security-first**: Multi-layer automated security scanning before deployment
22
+
23
+ ## Quick Start
24
+
25
+ ### Install
26
+
27
+ ```bash
28
+ # npm
29
+ npm install -g @litmers/cursorflow-orchestrator
30
+
31
+ # pnpm (recommended)
32
+ pnpm add -g @litmers/cursorflow-orchestrator
33
+
34
+ # yarn
35
+ yarn global add @litmers/cursorflow-orchestrator
36
+ ```
37
+
38
+ ### Requirements
39
+
40
+ - **Node.js** >= 18.0.0
41
+ - **Git** with worktree support
42
+ - **cursor-agent CLI**: `npm install -g @cursor/agent`
43
+
44
+ ### Initialize a project
45
+
46
+ ```bash
47
+ cd your-project
48
+ cursorflow init --example
49
+ ```
50
+
51
+ This command:
52
+ 1. Creates the `cursorflow.config.js` config file
53
+ 2. Creates `_cursorflow/tasks/` and `_cursorflow/logs/` directories
54
+ 3. Installs Cursor IDE commands
55
+ 4. Generates example tasks when `--example` is provided
56
+
57
+ ### Run the example
58
+
59
+ ```bash
60
+ # Run example tasks
61
+ cursorflow run _cursorflow/tasks/example/
62
+
63
+ # Monitor from another terminal
64
+ cursorflow monitor --watch
65
+ ```
66
+
67
+ ## 🧪 Testing CursorFlow
68
+
69
+ A complete demo project is included for testing with real LLM execution.
70
+
71
+ ### Quick Test
72
+
73
+ ```bash
74
+ # From the CursorFlow repository root
75
+ ./test-cursorflow.sh setup # Verify prerequisites
76
+ ./test-cursorflow.sh run # Run demo with LLM
77
+ ./test-cursorflow.sh watch # Monitor in real-time
78
+ ./test-cursorflow.sh clean # Clean up after test
79
+ ```
80
+
81
+ ### What Gets Tested
82
+
83
+ - Task orchestration with 2 parallel lanes
84
+ - Git worktree creation and management
85
+ - Real LLM execution (Claude Sonnet 4.5 via cursor-agent)
86
+ - Branch creation and commits
87
+ - Real-time monitoring with status updates
88
+ - ✅ Complete log capture (conversation + terminal)
89
+
90
+ ### Demo Tasks
91
+
92
+ 1. **create-utils**: Creates `src/utils.js` with utility functions
93
+ 2. **add-tests**: Creates `src/utils.test.js` with simple tests
94
+
95
+ Each task runs ~1-2 minutes, demonstrating the full CursorFlow workflow.
96
+
97
+ **See**: `test-projects/demo-project/README.md` for detailed documentation.
98
+
99
+ ## 📚 Examples
100
+
101
+ Ready-to-use examples are included in the `examples/` directory.
102
+
103
+ ### Demo Project
104
+
105
+ A complete example demonstrating CursorFlow's core features:
106
+
107
+ ```bash
108
+ # Copy example tasks to your project
109
+ cd your-project
110
+ cursorflow init
111
+ cp -r /path/to/cursorflow/examples/demo-project/_cursorflow/tasks/demo-test _cursorflow/tasks/
112
+
113
+ # Run the demo
114
+ cursorflow run _cursorflow/tasks/demo-test/
115
+
116
+ # Monitor in real-time
117
+ cursorflow monitor --watch
118
+ ```
119
+
120
+ **Includes:**
121
+ - 2 parallel tasks with real LLM execution
122
+ - Complete documentation and setup instructions
123
+ - Expected results and troubleshooting guide
124
+
125
+ **See**: `examples/demo-project/README.md` for detailed instructions.
126
+
127
+ **Browse more examples**: `examples/README.md`
128
+
129
+ ## Cursor IDE Integration
130
+
131
+ CursorFlow ships custom commands that are available directly inside Cursor IDE.
132
+
133
+ ### Install commands
134
+
135
+ ```bash
136
+ # Installed automatically during init
137
+ cursorflow init
138
+
139
+ # Or install manually
140
+ npx cursorflow-setup
141
+ ```
142
+
143
+ ### Usage
144
+
145
+ Type `/` in Cursor chat and use:
146
+
147
+ - `/cursorflow-init` - initialize a project
148
+ - `/cursorflow-prepare` - prepare tasks
149
+ - `/cursorflow-run` - run orchestration
150
+ - `/cursorflow-monitor` - monitor runs
151
+ - `/cursorflow-clean` - clean resources
152
+ - `/cursorflow-resume` - resume a lane
153
+ - `/cursorflow-review` - configure or check reviews
154
+
155
+ ## CLI Commands
156
+
157
+ ### Init
158
+ ```bash
159
+ cursorflow init [options]
160
+ --example Create example tasks
161
+ --with-commands Install Cursor commands (default: true)
162
+ --config-only Generate config file only
163
+ ```
164
+
165
+ ### Prepare tasks
166
+ ```bash
167
+ cursorflow prepare <feature> [options]
168
+ --lanes <number> Number of lanes
169
+ --template <path> Template file path
170
+ ```
171
+
172
+ ### Run
173
+ ```bash
174
+ cursorflow run <tasks-dir> [options]
175
+ --dry-run Show the execution plan only
176
+ --executor <type> cursor-agent | cloud
177
+ ```
178
+
179
+ ### Monitor
180
+ ```bash
181
+ cursorflow monitor [run-dir] [options]
182
+ --watch Live monitoring
183
+ --interval <sec> Refresh interval
184
+ ```
185
+
186
+ ### Clean
187
+ ```bash
188
+ cursorflow clean <type> [options]
189
+ branches Clean branches
190
+ worktrees Clean worktrees
191
+ logs Clean logs
192
+ all Clean everything
193
+ ```
194
+
195
+ ### Resume
196
+ ```bash
197
+ cursorflow resume <lane> [options]
198
+ --clean Clean branches before restart
199
+ --restart Restart from the beginning
200
+ ```
201
+
202
+ ## Configuration
203
+
204
+ ### Config file (cursorflow.config.js)
205
+
206
+ ```javascript
207
+ module.exports = {
208
+ // Directories
209
+ tasksDir: '_cursorflow/tasks',
210
+ logsDir: '_cursorflow/logs',
211
+
212
+ // Git settings
213
+ baseBranch: 'main',
214
+ branchPrefix: 'feature/',
215
+
216
+ // Run settings
217
+ executor: 'cursor-agent', // 'cursor-agent' | 'cloud'
218
+ pollInterval: 60,
219
+
220
+ // Dependency management
221
+ allowDependencyChange: false,
222
+ lockfileReadOnly: true,
223
+
224
+ // Review settings
225
+ enableReview: true,
226
+ reviewModel: 'sonnet-4.5-thinking',
227
+ maxReviewIterations: 3,
228
+
229
+ // Default lane settings
230
+ defaultLaneConfig: {
231
+ devPort: 3001,
232
+ autoCreatePr: false,
233
+ },
234
+
235
+ // Logging
236
+ logLevel: 'info',
237
+ verboseGit: false,
238
+ };
239
+ ```
240
+
241
+ ### Task file (JSON)
242
+
243
+ ```json
244
+ {
245
+ "repository": "https://github.com/your-org/your-repo",
246
+ "baseBranch": "main",
247
+ "branchPrefix": "feature/my-",
248
+ "executor": "cursor-agent",
249
+ "laneNumber": 1,
250
+ "devPort": 3001,
251
+ "enableReview": true,
252
+ "tasks": [
253
+ {
254
+ "name": "implement",
255
+ "model": "sonnet-4.5",
256
+ "acceptanceCriteria": [
257
+ "No build errors",
258
+ "Key features implemented"
259
+ ],
260
+ "prompt": "Implementation instructions..."
261
+ }
262
+ ]
263
+ }
264
+ ```
265
+
266
+ ## Usage Examples
267
+
268
+ ### Single feature development
269
+
270
+ ```bash
271
+ # 1. Prepare tasks
272
+ cursorflow prepare AddUserAuth --lanes 1
273
+
274
+ # 2. Edit the task JSON
275
+ # _cursorflow/tasks/2512191830_AddUserAuth/01-task.json
276
+
277
+ # 3. Run
278
+ cursorflow run _cursorflow/tasks/2512191830_AddUserAuth/
279
+
280
+ # 4. Monitor
281
+ cursorflow monitor --watch
282
+ ```
283
+
284
+ ### Multi-domain parallel development
285
+
286
+ ```bash
287
+ # 1. Prepare tasks (5 lanes)
288
+ cursorflow prepare AdminDashboard --lanes 5
289
+
290
+ # 2. Configure each lane
291
+ # 01-dashboard.json, 02-clients.json, ...
292
+
293
+ # 3. Run in parallel
294
+ cursorflow run _cursorflow/tasks/2512191830_AdminDashboard/
295
+
296
+ # 4. Live monitor
297
+ cursorflow monitor --watch --interval 5
298
+ ```
299
+
300
+ ## Architecture
301
+
302
+ ```
303
+ ┌─────────────────────────────────────────────────────────┐
304
+ │ CursorFlow CLI │
305
+ └──────────────────┬──────────────────────────────────────┘
306
+
307
+ ┌──────────┴──────────┐
308
+ │ │
309
+ ┌────▼────┐ ┌────▼────┐
310
+ Config │ │ Core │
311
+ │ System │ │ Engine │
312
+ └────┬────┘ └────┬────┘
313
+ │ │
314
+ │ ┌──────────┼──────────┐
315
+ │ │ │ │
316
+ ┌────▼────┐ ┌─▼──┐ ┌────▼────┐ ┌─▼─────┐
317
+ │ Git │ │Run │ │ Monitor │ │Review │
318
+ │ Utils │ │ner │ │ │ │ │
319
+ └─────────┘ └─┬──┘ └─────────┘ └───────┘
320
+
321
+ ┌────────┼────────┐
322
+ │ │ │
323
+ ┌────▼───┐ ┌─▼──────┐ │
324
+ │Worktree│ │ Cursor │ │
325
+ │ │ │ Agent │ │
326
+ └────────┘ └────────┘ │
327
+
328
+ ┌────▼────┐
329
+ │ Logs │
330
+ │ State │
331
+ └─────────┘
332
+ ```
333
+
334
+ ## Documentation
335
+
336
+ - [📖 User Guide](docs/GUIDE.md) - Detailed usage instructions
337
+ - [📋 API Reference](docs/API.md) - CLI and config API
338
+ - [🎨 Command Guide](docs/COMMANDS.md) - Cursor command usage
339
+ - [🏗️ Architecture](docs/ARCHITECTURE.md) - System structure
340
+ - [🔧 Troubleshooting](docs/TROUBLESHOOTING.md) - Issue resolution
341
+ - [📦 Examples](examples/) - Practical examples
342
+
343
+ ## Roadmap
344
+
345
+ - [ ] v1.0: Core features and base docs
346
+ - [ ] v1.1: Enhanced review system
347
+ - [ ] v1.2: Improved cloud execution
348
+ - [ ] v1.3: Plugin system
349
+ - [ ] v2.0: GUI tool
350
+
351
+ ## Contributing
352
+
353
+ Contributions are welcome! See [CONTRIBUTING.md](CONTRIBUTING.md).
354
+
355
+ ### Set up dev environment
356
+ ```bash
357
+ git clone https://github.com/eungjin-cigro/cursorflow.git
358
+ cd cursorflow
359
+ pnpm install
360
+ pnpm test
361
+ ```
362
+
363
+ ## License
364
+
365
+ MIT © Eugene Jin
366
+
367
+ ## Support
368
+
369
+ - 🐛 [Issue Tracker](https://github.com/eungjin-cigro/cursorflow/issues)
370
+ - 💬 [Discussions](https://github.com/eungjin-cigro/cursorflow/discussions)
371
+ - 📧 Email: eungjin.cigro@gmail.com
372
+
373
+ ---
374
+
375
+ **Made with ❤️ for Cursor IDE users**