Trước tiên, khi sử dụng Cursor AI trong các project lớn, bạn sẽ nhanh chóng nhận ra rằng AI thường không tự hiểu convention hoặc kiến trúc nội bộ của team.
Vì vậy, việc xây dựng Cursor Rules là một bước rất quan trọng để đảm bảo AI tạo ra code đúng với tiêu chuẩn dự án.
Ngoài ra, rule còn giúp giảm thời gian review code và hạn chế việc AI tự ý refactor không cần thiết.
Tiếp theo, chúng ta sẽ tìm hiểu Cursor Rule thực sự là gì và cách nó hoạt động trong project thực tế.
1. Cursor Rule là gì?
Cursor Rule là bộ hướng dẫn cố định giúp Cursor AI hiểu cách làm việc trong project của bạn: coding style, kiến trúc, convention, thư viện nên dùng, thư viện không nên dùng, cách đặt tên, cách viết test, cách xử lý API, database, UI… Cursor hiện khuyến nghị dùng Project Rules trong thư mục .cursor/rules với file định dạng .mdc.

Thay vì mỗi lần chat phải nhắc:
“Hãy dùng NestJS, không dùng any, viết service theo pattern hiện tại, luôn validate DTO…”
Bạn có thể viết rule một lần, commit vào repo, và Cursor sẽ tự dùng khi phù hợp.
Nói cách khác, Cursor Rule hoạt động giống như một bộ guideline kỹ thuật dành riêng cho AI.
Thay vì phải lặp lại cùng một yêu cầu trong mỗi cuộc trò chuyện, bạn chỉ cần định nghĩa rule một lần trong project.
Sau khi hiểu khái niệm cơ bản, điều quan trọng tiếp theo là xác định khi nào nên bắt đầu viết Cursor Rule cho project.
2. Khi nào nên viết Cursor Rule?
Nên viết rule khi project có những quy ước lặp lại nhiều lần, ví dụ:
- Cách tổ chức folder.
- Coding convention.
- Tech stack bắt buộc.
- Cách viết API.
- Cách viết component UI.
- Cách đặt tên biến, file, class.
- Quy tắc bảo mật.
- Quy tắc database migration.
- Quy tắc test.
- Những điều AI hay làm sai.
Ví dụ, nếu project dùng NestJS + Prisma, bạn nên có rule riêng để Cursor không tự ý viết raw SQL, không bỏ qua DTO validation, không viết logic trực tiếp trong controller.
3. Cấu trúc thư mục Rule
Thông thường, các rule sẽ được tổ chức theo từng phạm vi riêng để dễ maintain hơn.
Ví dụ, cấu trúc phổ biến sẽ như sau:
.cursor/
rules/
general.mdc
backend.mdc
frontend.mdc
database.mdc
testing.mdc
Mỗi file .mdc là một rule riêng. Cursor dùng .mdc để quản lý rule theo phạm vi, thay vì chỉ dùng một file .cursorrules cũ.
4. Cấu trúc một file .mdc
Một file rule thường có dạng:
---
description: Quy tắc chung cho toàn bộ project
globs:
alwaysApply: true
---
# General Rules
- Luôn trả lời bằng tiếng Anh trong code comment.
- Không dùng `any` trong TypeScript.
- Ưu tiên code rõ ràng, dễ maintain hơn code quá ngắn.
- Không tự ý thêm thư viện mới nếu chưa được yêu cầu.
- Khi sửa code, hãy giữ nguyên style hiện tại của project.
Các phần quan trọng:
description
Mô tả rule dùng cho việc gì.
globs
Chỉ định rule áp dụng cho file nào, ví dụ src/**/*.ts.
alwaysApply
Nếu là true, rule luôn được áp dụng. Nếu là false, Cursor sẽ dùng description hoặc context để quyết định khi nào cần áp dụng.
5. Các loại Cursor Rule nên có
Dùng cho toàn bộ project.
---
description: General coding rules for this project
globs:
alwaysApply: true
---
# General Coding Rules
- Follow existing project structure before creating new folders.
- Do not introduce new dependencies without asking.
- Prefer readable and maintainable code.
- Do not remove existing comments unless they are incorrect.
- Keep changes minimal and focused on the requested task.
- Always check related files before making architectural changes.
Rule này nên ngắn. Những rule alwaysApply quá dài sẽ làm tốn context trong mọi request.
6. Best Practices khi viết Cursor Rule
6.1. Viết Cursor rule ngắn, rõ, có tính hành động
Không nên viết:
Write good code.
Nên viết:
Prefer small functions with a single responsibility.
Rule càng cụ thể thì Cursor càng dễ làm đúng.
Bên cạnh việc viết rule rõ ràng, cách tổ chức rule cũng rất quan trọng đối với khả năng maintain lâu dài.
6.2. Không nhồi tất cả Cursor Rules vào một file
Không nên có một file rules.mdc dài hàng trăm dòng. Hãy tách theo phạm vi:
general.mdc
frontend.mdc
backend.mdc
database.mdc
testing.mdc
security.mdc
Việc tách rule giúp Cursor chỉ load rule liên quan, giảm nhiễu context.
6.3. Dùng globs để giới hạn phạm vi
Ví dụ:
globs: apps/backend/src/**/*.ts
Rule này chỉ áp dụng cho backend TypeScript files.
globs: apps/web/src/**/*.{tsx,ts}
Rule này chỉ áp dụng cho frontend.
6.4. Không lạm dụng alwaysApply: true
Chỉ dùng alwaysApply: true cho rule thật sự global.
Ví dụ nên always apply:
- Do not introduce new dependencies without asking.
- Keep changes minimal and focused.
- Follow existing code style.
Không nên always apply:
- Use Prisma transaction when updating order payment status.
Rule như vậy nên đặt trong database hoặc payment rule riêng.
Tuy nhiên, không nên lạm dụng `alwaysApply: true` vì điều này có thể khiến context của AI trở nên quá tải.
Do đó, chỉ những rule thực sự mang tính toàn cục mới nên được áp dụng ở mọi request.
Bên cạnh đó, hãy ưu tiên viết rule ngắn gọn, rõ ràng và có tính hành động cao.
6.5. Thêm ví dụ code nếu rule phức tạp
Ví dụ:
# API Response Format
Always return API responses using this format:
```
ts
{
data: result,
message: 'Success'
}```
Do not return raw entities directly from controllers.
AI thường làm tốt hơn khi có ví dụ cụ thể.
---
## 7. Template Rule tổng quát cho project
Bạn có thể bắt đầu với file này:
```mdc
---
description: General project rules
globs:
alwaysApply: true
---
# General Project Rules
## Code Style
- Follow the existing code style and folder structure.
- Keep code simple, readable, and maintainable.
- Do not introduce new libraries unless explicitly requested.
- Avoid large refactors unless the task requires it.
- Prefer explicit names over short or unclear names.
## TypeScript
- Do not use any unless there is no reasonable alternative.
- Prefer type-safe implementations.
- Reuse existing types before creating new ones.
- Keep function signatures clear.
## Changes
- Make the smallest possible change to solve the problem.
- Do not remove existing functionality.
- Do not modify unrelated files.
- Explain important assumptions when the implementation is not obvious.
## Quality
- Handle errors properly.
- Consider edge cases.
- Follow existing validation patterns.
- Add or update tests when changing important business logic.```
7. Kết Luận
Cuối cùng, Cursor Rule không chỉ giúp AI code tốt hơn mà còn giúp cả team giữ được sự nhất quán trong quá trình phát triển.
Tóm lại, một bộ rule được tổ chức tốt sẽ giúp tăng chất lượng code, giảm thời gian review và cải thiện hiệu quả làm việc với AI.
Ngoài ra, khi project ngày càng lớn, việc duy trì rule tốt sẽ giúp onboarding thành viên mới dễ dàng hơn.
Quan trọng hơn, AI sẽ dần hoạt động giống một thành viên kỹ thuật thực thụ trong team thay vì chỉ là công cụ generate code đơn thuần.
External Links:
