jvinhit//lab

Search posts

Type to search across journal entries.

↑ ↓ navigate ↵ open esc close

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 khiVí dụ
CLAUDE.mdNgữ cảnh bền vững, nạp ở mọi hội thoạiConvention của project, luật “luôn luôn làm X""Use pnpm, not npm. Run tests before committing.”
SkillChỉ dẫn, kiến thức và quy trình Claude dùng đượcNộ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
SubagentContext thực thi cô lập, trả về kết quả đã tóm tắtCô lập context, việc song song, worker chuyên biệtViệ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ậpNghiên cứu song song, phát triển feature mới, debug với nhiều giả thuyết cạnh tranhSinh 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 serverNgôn ngữ có kiểu, codebase lớn nơi grep chậm hoặc thiếu chính xácNhảy tới định nghĩa của một symbol thay vì đọc cả file
MCPNối tới dịch vụ ngoàiCần dữ liệu hoặc hành động ở hệ thống khácTruy vấn database, đăng lên Slack, điều khiển trình duyệt
HookChạy script, HTTP request, prompt hoặc subagent khi có sự kiệnTự động hoá phải chạy ở mọi sự kiện khớpChạy ESLint sau mỗi lần sửa file
ArtifactXuất bản kết quả phiên thành trang web riêng tư, tương tácKết quả cần nhìn hoặc chia sẻ trực quan thay vì chữ trong terminalDò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ệuThê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 taskLư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ứ baGhi 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 đượcNố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 ở đâuCà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ỏiViế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ạnhSkillSubagent
Là gìChỉ dẫn, kiến thức hoặc quy trình tái dùngWorker cô lập với context riêng
Lợi ích chínhChia sẻ nội dung xuyên các contextCô lập context. Việc diễn ra riêng, chỉ bản tóm tắt quay về
Ảnh hưởng context windowCộng vào cửa sổ chính của bạnDùng cửa sổ riêng, có input và output token riêng
Hợp nhất vớiTài liệu tham chiếu, quy trình gọi đượcViệ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ạnhCLAUDE.mdSkill
Nạp lúc nàoMọi phiên, tự độngTheo nhu cầu
Import file khácCó, bằng @pathCó, bằng @path
Kích hoạt quy trình được khôngKhôngCó, bằng /<tên>
Hợp nhất vớiLuậ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ạnhCLAUDE.md.claude/rules/Skill
Nạp lúc nàoMọi phiênMọ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 viCả projectGắn được vào đường dẫn file cụ thểTheo từng task
Hợp nhất vớiConvention cốt lõi và lệnh buildHướng dẫn theo ngôn ngữ hoặc theo thư mụcTà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ạnhSubagentAgent team
ContextCửa sổ riêng; kết quả quay về nơi gọiCửa sổ riêng; hoàn toàn độc lập
Giao tiếpChỉ báo kết quả về agent chínhCác thành viên nhắn tin trực tiếp cho nhau
Điều phốiAgent 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ớiViệ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í tokenThấp hơn — kết quả được tóm tắt về context chínhCao 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ạnhMCPSkill
Là gìGiao thức nối tới dịch vụ ngoàiKiến thức, quy trình và tài liệu tham chiếu
Cung cấpTool và quyền truy cập dữ liệuKiế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ệtChecklist 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ạnhHookSkill
Chạy cái gìLệnh shell, HTTP request, prompt gửi LLM, hoặc subagentChỉ dẫn Claude đọc rồi làm theo
Kích hoạt bởiSự kiện vòng đời như PostToolUse hay SessionStartBạn gõ /<tên>, hoặc Claude khớp mô tả với task
Tính tất địnhLuôn kích hoạt ở sự kiện của nó — trigger được đảm bảoClaude diễn giải chỉ dẫn; kết quả có thể khác nhau
Chi phí contextBằng không, trừ khi hook trả về outputMô tả nạp mỗi phiên; nội dung đầy đủ nạp khi dùng
Hợp nhất vớiLint sau khi sửa, chặn lệnh nguy hiểm, ghi log, thông báoQuy 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” trong CLAUDE.md hay trong skill là một lời đề nghị, không phải một đảm bảo. Một PreToolUse hook 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àoNạp cái gìChi phí context
CLAUDE.mdĐầu phiênToàn bộ nội dungMọi request
SkillĐầu phiên + khi dùngMô tả ở đầu, nội dung đầy đủ khi dùngThấp (chỉ mô tả ở mọi request)
MCP serverĐầu phiênTên tool; schema đầy đủ nạp theo nhu cầuThấp cho tới khi một tool được dùng
Code intelligenceSau khi sửa file và khi cầnChẩn đoán sau khi sửa; vị trí symbol khi traThấp; giảm số lượt đọc file ở chỗ khác
SubagentKhi được sinh raContext mới với các skill được chỉ địnhCô lập khỏi phiên chính
HookKhi triggerKhông gì cả — chạy ở ngoàiBằ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ẫuCách hoạt độngVí dụ
Skill + MCPMCP cấp kết nối; skill dạy Claude dùng nó cho tốtMCP nối database, skill ghi lại schema và mẫu truy vấn
Skill + SubagentMột skill sinh ra nhiều subagent chạy song songSkill /audit khởi động các subagent security, performance, style trong context cô lập
CLAUDE.md + SkillCLAUDE.md giữ luật luôn bật; skill giữ tài liệu nạp theo nhu cầuCLAUDE.md nói “follow our API conventions”, skill chứa trọn style guide
Hook + MCPHook kích hoạt hành động bên ngoài qua MCPHook 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.