CLAUDE.md Và Thư Mục .claude/: Cấu Hình Claude Code Từ A-Z (2026)

73% team kỹ thuật dùng AI coding tools hàng ngày, tăng từ 41% năm 2025 (Pragmatic Engineer Survey, 2026). Nhưng bao nhiêu người thực sự config để AI hiểu đúng project, quy tắc, và workflow của mình?
Nếu bạn đang dùng Claude Code là gì, câu trả lời nằm ở hai thứ: file CLAUDE.md và thư mục .claude/. Hai thứ này cùng nhau tạo nên toàn bộ hệ thống cấu hình của Claude Code, từ project instructions đến permissions, từ auto memory đến custom skills.
Bài này là hướng dẫn đầy đủ nhất về cả hai. Mình sẽ đi qua từng phần: CLAUDE.md là gì, thư mục .claude/ có gì, cấu hình settings.json ra sao, và cách kết hợp để làm việc hiệu quả nhất.
CLAUDE.md is a markdown file that Claude Code automatically reads at the start of every session, containing project instructions, coding conventions, and workflow rules. The .claude/ directory extends this with settings, path-specific rules, custom commands, and skills.
CLAUDE.md là file markdown đặt ở root project, tự động được Claude Code đọc mỗi phiên. Thư mục .claude/ mở rộng thêm với settings.json (8 sections, 4 scopes), .claude/rules/ (path-specific rules), và .claude/skills/ (custom skills). Kết hợp với auto memory MEMORY.md, đây là hệ thống cấu hình đầy đủ nhất để Claude Code hiểu project của bạn. Claude Code đang có hơn 110.000 GitHub stars (2026).
Claude Code (2026)
settings.json
settings.json
tối đa CLAUDE.md

CLAUDE.md Là Gì?
CLAUDE.md là file markdown đặt ở root project, được Claude Code tự động đọc mỗi khi bạn bắt đầu phiên làm việc. Claude Code đang có hơn 110.000 GitHub stars (GitHub, 2026), và file chỉ dẫn này là cách bạn “dạy” nó hiểu codebase của mình mà không cần giải thích lại mỗi phiên.
Nghĩ đơn giản thế này: CLAUDE.md giống như bản mô tả công việc cho nhân viên mới. Tech stack, conventions, lệnh build, những điều cần tránh. Tất cả chỉ cần viết một lần, Claude Code sẽ nhớ mãi.
Vị trí và cách hoạt động
Bạn đặt file CLAUDE.md ở thư mục root của project, cùng cấp với .git/ hoặc package.json. Mỗi khi chạy claude trong terminal, file này được đọc tự động. Không cần cấu hình thêm, không cần plugin.
Ngoài vị trí mặc định, bạn còn có thể đặt ở .claude/CLAUDE.md nếu muốn tách biệt khỏi root. Cả hai vị trí đều được Claude Code nhận diện. Chỉ cần chọn một cách nhất quán.
So sánh với các AI coding tools khác
CLAUDE.md không phải khái niệm hoàn toàn mới. Các tools khác cũng có cơ chế tương tự, nhưng Claude Code hỗ trợ multi-level hierarchy và path-specific rules, hai thứ các tool khác chưa có.

Cấu Trúc Thư Mục .claude/ Như Thế Nào?
Thư mục .claude/ là nơi chứa toàn bộ cấu hình nâng cao của Claude Code, từ settings đến rules theo path, từ custom commands đến skills. Theo tài liệu chính thức, cấu trúc này được thiết kế để phân tách rõ ràng giữa cấu hình team (git committed) và cấu hình cá nhân (gitignored).
Đây là toàn bộ cấu trúc bạn cần biết:
Project vs User config
Có hai vị trí chính: trong project và trong home directory (~/.claude/). Project config áp dụng cho dự án cụ thể, được commit vào git để cả team dùng chung. User config áp dụng cho mọi project trên máy bạn, là preferences cá nhân.
Bạn nên tách bạch rõ ràng: những gì team cần biết thì để trong project, những gì chỉ bạn cần thì để trong ~/.claude/. Ví dụ, ~/.claude/CLAUDE.md có thể chứa “Luôn trả lời bằng tiếng Việt khi mình hỏi tiếng Việt” mà không cần cả team biết.
Local files và .gitignore
Các file .local được thiết kế để gitignore. Quy tắc đơn giản: nếu tên file có .local, đừng commit nó. Thêm vào .gitignore:
Bằng cách này, mỗi developer trên team có thể có preferences riêng mà không ảnh hưởng đến người khác. Đây là pattern mình dùng cho dự án ongboit.com, cực kỳ hiệu quả khi làm việc với người khác.

settings.json Cấu Hình Gì?
File .claude/settings.json là trung tâm cấu hình của Claude Code, gồm 8 sections chính. Theo tài liệu chính thức, đây là nơi bạn kiểm soát mọi thứ từ quyền truy cập file system đến hooks tự động hóa và environment variables.
1. permissions – Kiểm soát quyền truy cập
Section quan trọng nhất. Bạn định nghĩa Claude Code được phép làm gì qua ba loại: allow, deny, và ask. Hỗ trợ glob patterns để nhắm đúng file hoặc lệnh cụ thể.
2. hooks – Tự động hóa theo sự kiện
Hooks cho phép chạy script tự động khi Claude Code thực hiện các hành động. Ví dụ: chạy linter sau khi write file, log mọi bash command để audit. Bốn hook events chính: PreToolUse, PostToolUse, PreCompact, PostCompact.
Đọc bài Claude Code Hooks để xem cách mình dùng hooks để tự động validate code sau mỗi lần Claude ghi file.
3. model – Chọn model mặc định
Bạn có thể chỉ định model nào được dùng mặc định. Hữu ích khi bạn muốn dùng model rẻ hơn cho tasks đơn giản, hoặc model mạnh hơn cho tasks phức tạp.
4. env – Environment variables
Thay vì export biến môi trường mỗi lần, bạn định nghĩa một lần trong settings. Claude Code sẽ inject tự động. Lưu ý: không đặt secrets trực tiếp trong settings.json nếu file này được commit vào git. Dùng settings.local.json cho secrets.
5-8. Các sections còn lại

Bốn Scope Settings Ưu Tiên Thế Nào?
Claude Code áp dụng settings theo thứ tự ưu tiên từ cao xuống thấp qua 4 scopes. Scope có độ ưu tiên cao hơn sẽ override scope thấp hơn. Theo tài liệu chính thức, cơ chế này cho phép tổ chức đặt policy bắt buộc ở tầng cao nhất mà developer không thể override.
Managed Policy dùng khi nào?
Managed Policy là scope dành cho enterprise và tổ chức. IT admin cài đặt ở cấp hệ thống, developer không thể override. Dùng khi bạn cần enforce security rules bắt buộc, ví dụ: “không bao giờ được phép đọc file *.pem” hoặc “không được push thẳng lên production branch.”
Với cá nhân và team nhỏ, bạn có thể bỏ qua scope này. Tập trung vào Project Shared (.claude/settings.json) và User Global (~/.claude/settings.json).
Thứ tự load CLAUDE.md
Tương tự settings, CLAUDE.md cũng có thứ tự load riêng. Claude Code đọc từ trên xuống dưới, nội dung đọc sau có thể override nội dung đọc trước:
- Managed Policy CLAUDE.md (toàn tổ chức, bắt buộc)
- CLAUDE.md từ các thư mục cha (đi từ thư mục hiện tại lên root)
- Project root CLAUDE.md hoặc
.claude/CLAUDE.md CLAUDE.local.md(personal, gitignored)~/.claude/CLAUDE.md(user global)- Subdirectory CLAUDE.md (load on-demand khi Claude đọc file trong thư mục đó)
Cách Viết CLAUDE.md Hiệu Quả?
Một CLAUDE.md tốt gồm 5 phần chính, giữ dưới 200 dòng theo khuyến nghị của tài liệu chính thức Anthropic. Theo blog kỹ thuật của Anthropic, các team viết file chỉ dẫn rõ ràng thấy Claude Code thực hiện đúng yêu cầu từ lần đầu, giảm đáng kể số vòng chỉnh sửa.
Năm phần cần có:
- Project overview: 2-3 câu mô tả project là gì, mục tiêu chính.
- Tech stack và architecture: Liệt kê công nghệ, kiến trúc tổng thể.
- Commands: Lệnh build, test, lint, deploy. Claude Code sẽ dùng chính xác những lệnh này.
- Code conventions: Naming, file structure, import order, error handling.
- Gotchas: Những lỗi thường gặp, giới hạn kỹ thuật, điều cần tránh.
Template thực tế – Next.js project
@import – Tách file khi cần
Khi file vượt quá 200 dòng, tách thành nhiều file và import chúng bằng cú pháp @path/to/file. Claude Code sẽ expand file được import vào context. Hỗ trợ tối đa 5 hops (import trong import trong import…) và đường dẫn tương đối tính từ file đang import.
Kỹ thuật này giúp giữ file chính ngắn gọn. Đặt nội dung theo chủ đề vào các file riêng, dễ maintain hơn khi cần cập nhật. Mình dùng cách này cho dự án ongboit.com, tách directives thành nhiều file .md nhỏ.
Best practices mình đúc kết được
Sau hàng trăm giờ dùng CLAUDE.md, mình nhận ra: phần Gotchas mang lại giá trị cao nhất. Đây là những lỗi bạn đã gặp và không muốn Claude lặp lại. Viết cụ thể: “Không dùng npm install --legacy-peer-deps vì lý do X” tốt hơn nhiều so với “Cẩn thận với npm install.”
Một rule quan trọng khác: HTML comments trong CLAUDE.md bị strip trước khi inject vào context. Bạn có thể dùng comments để note cho người đọc file mà không làm “bẩn” context của Claude.
Template CLAUDE.md mẫu (copy về dùng ngay)
Đây là CLAUDE.md thực tế mình dùng cho project ongboit.com. Không phải template lý thuyết, đây là file đang chạy production hàng ngày. Copy về, chỉnh lại Architecture và Commands cho project của bạn.
/init để Claude tự phân tích project và tạo CLAUDE.md cho bạn. Sau đó chỉnh sửa theo template trên. Đây là cách nhanh nhất để bắt đầu.

.claude/rules/ Dùng Khi Nào?
Thư mục .claude/rules/ cho phép tạo rules theo path pattern, chỉ load khi Claude làm việc với file phù hợp. Đây là cách hiệu quả nhất để quản lý rules trong project lớn, vì Claude không phải load mọi rules mọi lúc. Rules không có path sẽ load vô điều kiện khi khởi động.
Cú pháp YAML frontmatter
Mỗi file trong .claude/rules/ là một markdown file với YAML frontmatter ở đầu. Frontmatter định nghĩa rule áp dụng cho paths nào. Claude Code đọc frontmatter và chỉ inject rule vào context khi bạn đang làm việc với file phù hợp.
Rules không có paths
Nếu bạn không khai báo paths trong frontmatter, rule đó được load mọi lúc khi Claude Code khởi động. Dùng cho các quy tắc chung như “luôn dùng tiếng Việt trong comments” hoặc “không bao giờ commit credentials.”
Symlinks để chia sẻ rules
Một tính năng ít được biết đến: .claude/rules/ hỗ trợ symlinks. Nếu bạn có monorepo với nhiều packages, bạn có thể tạo rules ở một chỗ và symlink vào các packages khác. Giúp DRY hoàn toàn cho rules management. Đây là cách mình muốn thử khi mở rộng dự án ongboit.com.
Loại Trừ Files Khỏi Context Thế Nào?
Claude Code không có file .claudeignore riêng. Thay vào đó, có 3 cơ chế loại trừ files khỏi context để tiết kiệm token:
1. .gitignore (mặc định)
Claude Code tự động respect .gitignore khi dùng @ file picker. Setting respectGitignore mặc định là true. Các files như node_modules/, .env, dist/ tự động bị loại khỏi autocomplete.
2. permissions.deny trong settings.json
Đây là cách mạnh nhất để block Claude Code truy cập files nhạy cảm. Không chỉ ẩn khỏi picker mà còn deny read/write hoàn toàn:
3. claudeMdExcludes
Dùng khi bạn muốn Claude Code bỏ qua CLAUDE.md files từ thư mục khác (phổ biến trong monorepo):
.gitignore là cách đơn giản nhất. Claude Code sẽ tự bỏ qua.

Custom Commands Và Skills Để Ở Đâu?
Claude Code hỗ trợ hai cơ chế để tùy chỉnh hành vi: custom commands (deprecated, đang dần thay thế bởi skills) và skills. Với hơn 110.000 GitHub stars, cộng đồng đã tạo ra nhiều skills hữu ích chia sẻ công khai. Nắm rõ sự khác biệt giúp bạn chọn đúng công cụ.
commands/ – Legacy, đang deprecated
Thư mục .claude/commands/ chứa custom slash commands dạng markdown. Ví dụ, file deploy.md tạo command /deploy. Cơ chế này hoạt động nhưng đang được thay thế dần bởi skills. Nếu bạn đang bắt đầu mới, hãy dùng skills ngay.
skills/ – Hệ thống mới, nên dùng
Skills là phiên bản mạnh hơn của commands. Mỗi skill là một file SKILL.md trong .claude/skills/. Skills hỗ trợ cả project-level (.claude/skills/) và user-level (~/.claude/skills/).
Đọc thêm về hệ thống skills của Claude Code và cách tự tạo skill cho workflow của bạn.
So sánh commands vs skills

Auto Memory Hoạt Động Thế Nào?
Auto memory là tính năng cho phép Claude Code tự ghi nhớ thông tin qua các phiên làm việc. Theo tài liệu chính thức Anthropic, 200 dòng đầu tiên hoặc 25KB của file MEMORY.md được load tự động khi bắt đầu phiên mới. Đây là cách Claude Code “nhớ” những gì bạn đã nói mà không cần nhắc lại.
Cơ chế hoạt động
Khi bạn nói “nhớ điều này” hoặc Claude nhận ra thông tin đáng nhớ, nó sẽ ghi vào MEMORY.md theo đường dẫn:
MEMORY.md và topic files
Hệ thống memory gồm hai loại file. MEMORY.md là file index, chứa những thông tin quan trọng nhất. Topic files (các file .md khác trong cùng thư mục) chứa thông tin chi tiết, chỉ được load khi cần.
200 dòng đầu của MEMORY.md được load tự động mỗi phiên. Đây là con số quan trọng bạn cần nhớ: đặt thông tin quan trọng nhất vào 200 dòng đầu, thông tin ít dùng hơn vào topic files hoặc cuối MEMORY.md.
Quản lý memory hiệu quả
Mình thấy MEMORY.md phát huy tác dụng nhất khi dùng như một “index” thực sự. File MEMORY.md chỉ chứa danh sách các notes và link đến topic files, không chứa nội dung chi tiết. Cách này giúp 200 dòng đầu luôn có thông tin tổng quan đầy đủ, Claude có thể load topic file khi cần chi tiết. Nhiều người còn dùng Obsidian làm wiki bên cạnh auto memory để quản lý knowledge base project lớn hơn.
Bật và tắt auto memory
Auto memory được bật mặc định. Để tắt, dùng lệnh /memory trong Claude Code hoặc thêm vào settings:
Sub-agents cũng có thể maintain auto memory riêng. Đọc thêm về Claude Code sub-agents và quản lý memory và context trong các bài chuyên sâu hơn.
Lệnh /init Và /memory Làm Gì?
Hai lệnh này là điểm khởi đầu quan trọng nhất khi setup Claude Code cho project mới. /init phân tích codebase và tạo CLAUDE.md tự động. /memory cho phép bạn duyệt và quản lý auto memory. Theo Builder.io, /init là cách nhanh nhất để bắt đầu với dự án đã có sẵn code.
Dùng /init như thế nào?
- 1 Mở terminal trong thư mục root của project.
- 2 Chạy
claudeđể khởi động Claude Code. - 3 Gõ
/initvà nhấn Enter. - 4 Claude phân tích
package.json,pyproject.toml,Dockerfile, cấu trúc thư mục, rồi tạo CLAUDE.md. - 5 Review file được tạo, bổ sung phần Gotchas và team conventions.
Những gì /init không tự biết
/init tạo file cơ bản khá tốt. Nó nhận diện tech stack và cấu trúc thư mục rất nhanh. Nhưng có một số thứ nó không thể biết, bạn phải bổ sung thủ công:
- Naming conventions riêng của team
- Gotchas và lỗi đã gặp trong quá khứ
- Architecture decisions và lý do đằng sau
- Workflow riêng (“luôn tạo PR, không push thẳng main”)
- Thông tin business domain cụ thể
Mình thường dùng /init như điểm khởi đầu, rồi bổ sung thêm 30-50% nội dung từ kinh nghiệm thực tế. Phần Gotchas thường bị bỏ qua nhưng lại có giá trị cao nhất.
/memory – Duyệt và chỉnh sửa auto memory
Lệnh /memory mở giao diện để bạn xem toàn bộ notes trong auto memory của project hiện tại. Bạn có thể xem, chỉnh sửa, hoặc xóa từng note. Nếu Claude đã nhớ thứ gì đó sai, đây là nơi để sửa.
/memory định kỳ để “dọn dẹp” những notes cũ không còn phù hợp. Auto memory có thể tích lũy thông tin lỗi thời theo thời gian, đặc biệt nếu project đã thay đổi nhiều.
Đọc thêm về các slash commands quan trọng khác và cách kết hợp chúng trong workflow hàng ngày.
Câu Hỏi Thường Gặp
CLAUDE.md và .claude/CLAUDE.md khác nhau thế nào?
Cả hai đều là project instructions và được Claude Code đọc giống nhau. Sự khác biệt là về tổ chức: CLAUDE.md ở root nhìn thấy ngay khi mở project, dễ tìm hơn. .claude/CLAUDE.md gọn gàng hơn vì tất cả config nằm trong một thư mục. Chọn một cách và nhất quán. Nếu team bạn đã dùng cách nào, theo cách đó.
settings.json nên commit vào git không?
Có hai file: .claude/settings.json nên commit, chứa team settings như permissions và hooks. .claude/settings.local.json không commit, chứa personal preferences và secrets. Tương tự, CLAUDE.md commit nhưng CLAUDE.local.md thì không. Thêm CLAUDE.local.md và .claude/settings.local.json vào .gitignore. Theo tài liệu chính thức, đây là cách phân tách được thiết kế sẵn.
.claude/rules/ khác với CLAUDE.md thế nào?
CLAUDE.md load toàn bộ mỗi phiên. Rules trong .claude/rules/ chỉ load khi Claude làm việc với file phù hợp với path pattern. Ví dụ, frontend rules chỉ load khi Claude đọc file src/components/*.tsx. Cách này giảm context noise và giúp Claude tập trung vào đúng rules cho đúng context. Dùng CLAUDE.md cho rules chung, .claude/rules/ cho rules theo domain.
Auto memory có tự động tắt không?
Không, auto memory bật mặc định và không tự tắt. Bạn phải chủ động tắt qua /memory command hoặc đặt "autoMemoryEnabled": false trong ~/.claude/settings.json. Nếu bạn lo ngại về privacy hoặc không muốn Claude lưu thông tin nhạy cảm, tắt tính năng này. MEMORY.md lưu trên máy bạn, không được gửi về Anthropic.
Managed Policy là gì và ai cần nó?
Managed Policy là scope cao nhất trong 4 scopes của settings, được cài đặt ở cấp hệ thống bởi IT admin. Developer không thể override. Dùng cho doanh nghiệp cần enforce security policies bắt buộc như “không đọc file *.pem” hoặc “không chạy sudo.” Cá nhân và startup nhỏ không cần quan tâm đến scope này. Tập trung vào Project Shared và User Global là đủ.
Skills và Hooks liên quan thế nào đến .claude/ directory?
Skills lưu trong .claude/skills/ (project) hoặc ~/.claude/skills/ (user). Hooks được cấu hình trong .claude/settings.json ở section hooks. Skills là workflow automation dạng markdown, hooks là script chạy tự động khi tool events xảy ra. Cả hai đều là phần của .claude/ directory ecosystem. Đọc thêm bài Skills vs Hooks vs MCP để hiểu khi nào dùng cái nào.
@import trong CLAUDE.md hỗ trợ đến bao nhiêu cấp?
Tối đa 5 hops theo tài liệu chính thức. Nghĩa là CLAUDE.md import file A, file A import file B, file B import C, C import D, D import E là giới hạn. Đường dẫn trong @import là tương đối, tính từ file đang import. Tính năng này giúp tổ chức instructions lớn mà không phải nhét tất cả vào một file.
Làm sao debug khi Claude Code không tuân theo instructions?
Ba bước debug: (1) Kiểm tra file đúng vị trí chưa (cùng cấp .git/), (2) Dùng /memory để xem Claude đang load gì, (3) Viết lại instructions theo imperative cụ thể (“Use named exports” thay vì “We prefer named exports”). Context window đầy cũng gây ra vấn đề này, dùng /compact rồi nhắc lại yêu cầu. Nếu vẫn không được, thử tạo rule trong .claude/rules/ với path pattern cụ thể.
Muốn bắt đầu ngay? Mình đã tạo sẵn một template repo có đầy đủ CLAUDE.md, settings.json (permissions), quality rules, và hướng dẫn 10 bước build app đầu tiên.
Kết Luận
Hệ thống cấu hình của Claude Code gồm nhiều lớp, mỗi lớp phục vụ một mục đích khác nhau. Nhưng đừng để bị overwhelm. Hầu hết developer chỉ cần ba thứ để bắt đầu tốt:
- CLAUDE.md ở root project: 5 phần chính, dưới 200 dòng, viết cụ thể bằng imperative. Dùng
/initđể tạo bản đầu, customize phần Gotchas sau. - .claude/settings.json: Tối thiểu cần cấu hình section
permissionsđể Claude Code biết được phép làm gì và không được làm gì. - Auto memory bật mặc định: Để nó chạy, dùng
/memoryđịnh kỳ để dọn dẹp notes cũ.
Khi project lớn hơn, thêm .claude/rules/ cho path-specific rules, và .claude/skills/ cho workflow automation. Nhưng bắt đầu đơn giản, rồi mở rộng dần khi thấy cần.
Một điểm quan trọng cần hiểu: CLAUDE.md là “working memory” trong session hiện tại, nhưng không giữ được context giữa các sessions khác nhau. Nếu bạn cần bộ nhớ dài hạn thực sự, hãy xem workflow kết hợp Claude Code với NotebookLM: một lớp memory ngoài miễn phí, hoạt động song song với CLAUDE.md.
Nếu bạn chưa biết Claude Code là gì, đọc bài giới thiệu trước. Nếu bạn đã dùng Claude Code và muốn tiết kiệm token, xem bài về tối ưu token Claude Code. Còn nếu bạn muốn xây dựng workflow automation phức tạp hơn, roadmap Claude Code sẽ chỉ ra hướng tiếp theo.
