Claude Code từ zero đến thành thạo · Phần 11 — Các cơ chế mở rộng: chọn cái nào khi nào
CLAUDE.md, skill, rule, hook, MCP, subagent, agent team và plugin giải những bài toán khác nhau. Bảng so sánh từng cặp hay bị nhầm, chi phí context của mỗi cơ chế, và tám dấu hiệu cho biết đã tới lúc thêm cái nào.
Mười phần đầu nói về Claude Code như nó được ship. Từ đây là chuyện biến nó thành công cụ của riêng bạn.
Vấn đề là có tới tám cơ chế mở rộng, và chúng trông giống nhau ở bề mặt: cả CLAUDE.md, rule, skill lẫn hook đều “bảo Claude làm gì đó”. Chọn sai cơ chế không làm hỏng thứ gì ngay, nhưng nó âm thầm làm bạn tốn context, hoặc tệ hơn — làm bạn tin rằng một luật đang được cưỡng chế trong khi nó chỉ là lời khuyên.
Bài này là bản đồ. Phần 12 tới 15 sẽ đi vào từng cái.
Tám cơ chế
| Cơ chế | Làm gì | Dùng khi | Ví dụ |
|---|---|---|---|
CLAUDE.md | Ngữ cảnh bền vững, nạp ở mọi hội thoại | Convention của project, luật “luôn luôn làm X" | "Use pnpm, not npm. Run tests before committing.” |
| Skill | Chỉ dẫn, kiến thức và quy trình Claude dùng được | Nội dung tái dùng, tài liệu tham chiếu, việc lặp lại | /deploy chạy checklist triển khai; một skill tài liệu API |
| Subagent | Context thực thi cô lập, trả về kết quả đã tóm tắt | Cô lập context, việc song song, worker chuyên biệt | Việc nghiên cứu đọc rất nhiều file nhưng chỉ trả về kết luận |
| Agent team | Điều phối nhiều phiên Claude Code độc lập | Nghiên cứu song song, phát triển feature mới, debug với nhiều giả thuyết cạnh tranh | Sinh nhiều reviewer cùng lúc kiểm security, performance, test |
| Code intelligence | Điều hướng và chẩn đoán qua language server | Ngôn ngữ có kiểu, codebase lớn nơi grep chậm hoặc thiếu chính xác | Nhảy tới định nghĩa của một symbol thay vì đọc cả file |
| MCP | Nối tới dịch vụ ngoài | Cần dữ liệu hoặc hành động ở hệ thống khác | Truy vấn database, đăng lên Slack, điều khiển trình duyệt |
| Hook | Chạy script, HTTP request, prompt hoặc subagent khi có sự kiện | Tự động hoá phải chạy ở mọi sự kiện khớp | Chạy ESLint sau mỗi lần sửa file |
| Artifact | Xuất bản kết quả phiên thành trang web riêng tư, tương tác | Kết quả cần nhìn hoặc chia sẻ trực quan thay vì chữ trong terminal | Dòng thời gian sự cố tự cập nhật khi Claude điều tra |
Plugin là tầng đóng gói: một plugin gộp skill, hook, subagent và MCP server thành một đơn vị cài đặt được. Skill của plugin có namespace riêng, kiểu /my-plugin:review, nên nhiều plugin cùng tồn tại được. Dùng plugin khi bạn muốn tái dùng cùng một thiết lập ở nhiều repo, hoặc phân phối cho người khác qua marketplace.
Skill là cơ chế linh hoạt nhất. Một skill là file markdown chứa kiến thức, quy trình hoặc chỉ dẫn. Bạn gọi nó bằng lệnh kiểu
/deploy, hoặc Claude tự nạp khi thấy liên quan. Skill chạy được trong hội thoại hiện tại, hoặc trong context cô lập qua subagent.
Tám dấu hiệu cho biết nên thêm cái gì
Bạn không cần cấu hình tất cả từ đầu. Mỗi cơ chế có một dấu hiệu nhận biết rõ ràng, và phần lớn team thêm chúng theo đúng thứ tự này:
| Dấu hiệu | Thêm |
|---|---|
| Claude làm sai một convention hoặc một lệnh tới lần thứ hai | Đưa vào CLAUDE.md |
| Bạn cứ gõ lại cùng một prompt để bắt đầu một task | Lưu nó thành skill do bạn gọi |
| Bạn dán cùng một playbook nhiều bước vào chat tới lần thứ ba | Ghi lại thành skill |
| Bạn cứ copy dữ liệu từ một tab trình duyệt mà Claude không thấy được | Nối hệ thống đó thành MCP server |
| Claude đọc rất nhiều file chỉ để tìm một symbol được định nghĩa hoặc dùng ở đâu | Cài code intelligence plugin cho ngôn ngữ của bạn |
| Một việc phụ làm ngập hội thoại bằng output bạn sẽ không đọc lại | Đẩy qua subagent |
| Bạn muốn một thứ xảy ra mọi lần, không cần hỏi | Viết hook |
| Repo thứ hai cần đúng thiết lập đó | Đóng gói thành plugin |
Chính những dấu hiệu này cũng cho biết khi nào cần cập nhật thứ bạn đã có. Một lỗi lặp lại hoặc một review comment cứ quay lại là một lần sửa CLAUDE.md, không phải một lần chỉnh tay trong chat. Một workflow bạn cứ phải tinh chỉnh thủ công là một skill cần thêm một bản sửa.
Sáu cặp hay bị nhầm
Skill hay subagent?
- Skill là nội dung tái dùng bạn nạp được vào bất kỳ context nào.
- Subagent là worker cô lập chạy tách khỏi hội thoại chính của bạn.
| Khía cạnh | Skill | Subagent |
|---|---|---|
| Là gì | Chỉ dẫn, kiến thức hoặc quy trình tái dùng | Worker cô lập với context riêng |
| Lợi ích chính | Chia sẻ nội dung xuyên các context | Cô lập context. Việc diễn ra riêng, chỉ bản tóm tắt quay về |
| Ảnh hưởng context window | Cộng vào cửa sổ chính của bạn | Dùng cửa sổ riêng, có input và output token riêng |
| Hợp nhất với | Tài liệu tham chiếu, quy trình gọi được | Việc đọc nhiều file, việc song song, worker chuyên biệt |
Skill có hai dạng. Reference skill cấp kiến thức Claude dùng xuyên suốt phiên, ví dụ style guide API của bạn. Action skill bảo Claude làm một việc cụ thể, ví dụ /deploy chạy quy trình triển khai.
Hai thứ kết hợp được: subagent nạp trước một số skill cụ thể qua trường skills:; và một skill chạy được trong context cô lập bằng context: fork.
CLAUDE.md hay skill?
| Khía cạnh | CLAUDE.md | Skill |
|---|---|---|
| Nạp lúc nào | Mọi phiên, tự động | Theo nhu cầu |
| Import file khác | Có, bằng @path | Có, bằng @path |
| Kích hoạt quy trình được không | Không | Có, bằng /<tên> |
| Hợp nhất với | Luật “luôn luôn làm X” | Tài liệu tham chiếu, quy trình gọi được |
Đưa vào CLAUDE.md nếu Claude luôn phải biết: convention code, lệnh build, cấu trúc project, luật “không bao giờ làm X”. Đưa vào skill nếu đó là tài liệu tham chiếu Claude thỉnh thoảng mới cần, hoặc một quy trình bạn kích hoạt bằng /<tên>.
Quy tắc gọn: giữ CLAUDE.md dưới 200 dòng. Nếu nó phình ra, chuyển nội dung tham chiếu sang skill hoặc tách thành các file trong .claude/rules/.
CLAUDE.md, rule hay skill?
Cả ba đều chứa chỉ dẫn, nhưng nạp khác nhau:
| Khía cạnh | CLAUDE.md | .claude/rules/ | Skill |
|---|---|---|---|
| Nạp lúc nào | Mọi phiên | Mọi phiên, hoặc khi file khớp được mở | Theo nhu cầu, khi được gọi hoặc khi liên quan |
| Phạm vi | Cả project | Gắn được vào đường dẫn file cụ thể | Theo từng task |
| Hợp nhất với | Convention cốt lõi và lệnh build | Hướng dẫn theo ngôn ngữ hoặc theo thư mục | Tài liệu tham chiếu, quy trình lặp lại |
Dùng rule để giữ CLAUDE.md gọn: rule có frontmatter paths chỉ nạp khi Claude làm việc với file khớp, tiết kiệm context.
Subagent hay agent team?
Cả hai đều song song hoá công việc, nhưng khác nhau về kiến trúc: subagent chạy bên trong phiên của bạn và báo kết quả về context chính; agent team là các phiên Claude Code độc lập nói chuyện trực tiếp với nhau.
| Khía cạnh | Subagent | Agent team |
|---|---|---|
| Context | Cửa sổ riêng; kết quả quay về nơi gọi | Cửa sổ riêng; hoàn toàn độc lập |
| Giao tiếp | Chỉ báo kết quả về agent chính | Các thành viên nhắn tin trực tiếp cho nhau |
| Điều phối | Agent chính quản lý toàn bộ | Tự điều phối qua tin nhắn, cộng một task list dùng chung |
| Hợp nhất với | Việc có trọng tâm, chỉ cần kết quả | Việc phức tạp cần thảo luận và cộng tác |
| Chi phí token | Thấp hơn — kết quả được tóm tắt về context chính | Cao hơn — mỗi thành viên là một instance Claude riêng |
Điểm chuyển: nếu bạn đang chạy nhiều subagent song song mà đụng giới hạn context, hoặc nếu các subagent của bạn cần nói chuyện với nhau, agent team là bước kế tiếp tự nhiên.
Agent team là tính năng thử nghiệm và tắt mặc định.
MCP hay skill?
MCP nối Claude tới dịch vụ ngoài. Skill mở rộng thứ Claude biết, gồm cả biết cách dùng dịch vụ đó cho hiệu quả.
| Khía cạnh | MCP | Skill |
|---|---|---|
| Là gì | Giao thức nối tới dịch vụ ngoài | Kiến thức, quy trình và tài liệu tham chiếu |
| Cung cấp | Tool và quyền truy cập dữ liệu | Kiến thức, quy trình, tài liệu |
| Ví dụ | Tích hợp Slack, truy vấn database, điều khiển trình duyệt | Checklist code review, quy trình deploy, style guide API |
Hai thứ này giải hai bài toán khác nhau và đi rất hợp với nhau: MCP nối database, còn một skill ghi lại schema và các mẫu truy vấn của team bạn.
Hook hay skill?
Đây là cặp quan trọng nhất, vì nó chạm tới một khác biệt về bản chất chứ không phải về tiện lợi.
| Khía cạnh | Hook | Skill |
|---|---|---|
| Chạy cái gì | Lệnh shell, HTTP request, prompt gửi LLM, hoặc subagent | Chỉ dẫn Claude đọc rồi làm theo |
| Kích hoạt bởi | Sự kiện vòng đời như PostToolUse hay SessionStart | Bạn gõ /<tên>, hoặc Claude khớp mô tả với task |
| Tính tất định | Luôn kích hoạt ở sự kiện của nó — trigger được đảm bảo | Claude diễn giải chỉ dẫn; kết quả có thể khác nhau |
| Chi phí context | Bằng không, trừ khi hook trả về output | Mô tả nạp mỗi phiên; nội dung đầy đủ nạp khi dùng |
| Hợp nhất với | Lint sau khi sửa, chặn lệnh nguy hiểm, ghi log, thông báo | Quy trình cần suy luận, tài liệu tham chiếu, việc nhiều bước |
Đặt lan can vào hook. Một chỉ dẫn kiểu “never edit
.env” trongCLAUDE.mdhay trong skill là một lời đề nghị, không phải một đảm bảo. MộtPreToolUsehook chặn lần sửa đó mới là cưỡng chế. Nếu một luật phải đúng ở mọi lần, hãy viết nó thành hook chứ đừng viết thành chỉ dẫn trong prompt.
Và một điểm hay bị bỏ qua: output của hook rơi vào context. Một PostToolUse hook chạy linter sẽ đưa kết quả về dưới dạng text để Claude đọc; còn một skill /fix-lint thì dạy Claude cách xử lý chúng.
Chi phí context của từng cơ chế
Mọi thứ bạn thêm đều ăn một phần context của Claude. Quá nhiều không chỉ làm đầy cửa sổ — nó còn thêm nhiễu khiến Claude kém hiệu quả: skill có thể không kích hoạt đúng, hoặc Claude mất dấu convention của bạn.
| Cơ chế | Nạp lúc nào | Nạp cái gì | Chi phí context |
|---|---|---|---|
CLAUDE.md | Đầu phiên | Toàn bộ nội dung | Mọi request |
| Skill | Đầu phiên + khi dùng | Mô tả ở đầu, nội dung đầy đủ khi dùng | Thấp (chỉ mô tả ở mọi request) |
| MCP server | Đầu phiên | Tên tool; schema đầy đủ nạp theo nhu cầu | Thấp cho tới khi một tool được dùng |
| Code intelligence | Sau khi sửa file và khi cần | Chẩn đoán sau khi sửa; vị trí symbol khi tra | Thấp; giảm số lượt đọc file ở chỗ khác |
| Subagent | Khi được sinh ra | Context mới với các skill được chỉ định | Cô lập khỏi phiên chính |
| Hook | Khi trigger | Không gì cả — chạy ở ngoài | Bằng không, trừ khi hook trả về context |
Ba hệ quả thực dụng:
CLAUDE.md là thứ đắt nhất vì nó nằm trong mọi request. Đó là lý do giới hạn 200 dòng không phải khuyến nghị suông.
Skill mặc định vẫn tốn một ít — mô tả của chúng nạp ở đầu phiên để Claude tự quyết khi nào dùng. Đặt disable-model-invocation: true trong frontmatter của một skill để giấu hẳn nó khỏi Claude cho tới khi bạn gọi tay; khi đó chi phí là không. Với skill do người khác viết, dùng skillOverrides trong settings để làm điều tương tự mà không phải sửa file của họ.
Skill hoạt động khác trong subagent. Thay vì nạp theo nhu cầu, các skill liệt kê ở trường skills: của subagent được nạp đầy đủ ngay lúc khởi động. Subagent vẫn phát hiện và gọi được skill không liệt kê qua tool Skill.
Claude chọn skill như thế nào
Claude khớp task của bạn với mô tả của các skill để quyết cái nào liên quan. Nếu mô tả mơ hồ hoặc chồng lấn nhau, Claude có thể nạp nhầm skill, hoặc bỏ sót cái lẽ ra giúp được.
Muốn chắc chắn thì gọi thẳng bằng /<tên>. Skill có disable-model-invocation: true thì vô hình với Claude cho tới khi bạn gọi.
Khi cùng một thứ tồn tại ở nhiều cấp
Cơ chế mở rộng khai được ở nhiều cấp: theo user, theo project, qua plugin, hoặc qua managed policy. Bốn cách xếp chồng khác nhau:
CLAUDE.md— cộng dồn. Mọi cấp cùng đóng góp nội dung vào context. Khi chỉ dẫn mâu thuẫn, Claude tự cân nhắc, và chỉ dẫn cụ thể hơn thường thắng.- Skill và subagent — ghi đè theo tên. Cùng tên ở nhiều cấp thì một định nghĩa thắng theo độ ưu tiên: managed > user > project với skill; managed > CLI flag > project > user > plugin với subagent. Skill của plugin có namespace nên không đụng độ.
- MCP server — ghi đè theo tên: local > project > user.
- Hook — gộp. Mọi hook đã đăng ký đều kích hoạt cho sự kiện khớp, bất kể đến từ nguồn nào.
Bốn mẫu kết hợp
Thiết lập thật gần như luôn là sự kết hợp, vì mỗi cơ chế mạnh ở một chỗ khác nhau:
| Mẫu | Cách hoạt động | Ví dụ |
|---|---|---|
| Skill + MCP | MCP cấp kết nối; skill dạy Claude dùng nó cho tốt | MCP nối database, skill ghi lại schema và mẫu truy vấn |
| Skill + Subagent | Một skill sinh ra nhiều subagent chạy song song | Skill /audit khởi động các subagent security, performance, style trong context cô lập |
CLAUDE.md + Skill | CLAUDE.md giữ luật luôn bật; skill giữ tài liệu nạp theo nhu cầu | CLAUDE.md nói “follow our API conventions”, skill chứa trọn style guide |
| Hook + MCP | Hook kích hoạt hành động bên ngoài qua MCP | Hook sau khi sửa gửi thông báo Slack khi Claude động vào file quan trọng |
Bắt đầu từ đâu
Nếu bạn mới dùng Claude Code: bắt đầu bằng CLAUDE.md cho convention của project, rồi thêm các cơ chế khác khi dấu hiệu tương ứng xuất hiện — đừng thêm trước.
Bốn phần tiếp theo đi vào từng cơ chế: skill (phần 12, dịch đầy đủ trang docs), hook (phần 13), MCP (phần 14), plugin và marketplace (phần 15). Subagent và agent team nằm ở chặng 4, phần 16 và 17.
Nguồn
Docs gốc cập nhật thường xuyên; khi có mâu thuẫn, tin bản tiếng Anh.