Bài 7 · Nâng cao · 22 phút· Cập nhật 11/06/2026
Agent Skills
Biên soạn bởi Nguyễn Anh Tuấn
Đóng gói quy trình lặp lại thành Skill (SKILL.md): tiết lộ dần (progressive disclosure), allowed-tools, model tự gọi - khác gì slash command.
Bài trước bạn tạo lệnh bằng một file. Skill là dạng đầy đủ của cùng ý tưởng đó - vẫn tạo ra /tên, nhưng thêm ba thứ:
- ▸Một THƯ MỤC (kèm file phụ: scripts, tài liệu) thay vì chỉ một file.
- ▸Claude có thể TỰ GỌI khi phù hợp - nhờ phần mô tả (description).
- ▸Tiết lộ dần: gần như không tốn ngữ cảnh cho tới khi skill được dùng.
Khi nào tạo Skill
Mỗi skill là một thư mục chứa file SKILL.md: frontmatter (giữa hai dòng ---) cho biết khi nào dùng, rồi phần thân là hướng dẫn Claude làm theo. Tên thư mục chính là tên lệnh:
~/.claude/skills/tom-tat-thay-doi/SKILL.md
---
name: tom-tat-thay-doi
description: Tóm tắt các thay đổi chưa commit và gắn cờ chỗ rủi ro. Dùng khi người dùng hỏi đã đổi gì, muốn commit message, hoặc nhờ review diff.
---
!`git diff HEAD`
Tóm tắt các thay đổi ở trên bằng tiếng Việt, ngắn gọn.
Nêu rõ bất cứ thay đổi nào có thể gây rủi ro (xoá kiểm tra,
sửa logic thanh toán, đổi cấu hình…). - ▸Vị trí: ~/.claude/skills/<tên>/SKILL.md (cá nhân) hoặc .claude/skills/<tên>/SKILL.md (dự án).
- ▸Tên THƯ MỤC = tên lệnh: tom-tat-thay-doi → /tom-tat-thay-doi.
- ▸name + description là cốt lõi; phần thân là hướng dẫn thực thi.
Đây là điểm khiến Skill khác biệt. Không phải mọi thứ đều nằm trong ngữ cảnh cùng lúc - nó nạp theo ba lớp:
1 · Luôn trong ngữ cảnh (rất rẻ)
Chỉ name + description - vài dòng, để Claude biết skill TỒN TẠI và khi nào dùng.
2 · Nạp KHI dùng
Phần thân SKILL.md (hướng dẫn đầy đủ) chỉ vào ngữ cảnh khi skill được gọi.
3 · Nạp KHI CẦN
File phụ kèm trong thư mục (tài liệu dài, scripts) chỉ đọc lúc thật sự cần tới.
Vì sao bạn cần biết điều này
Mặc định cả hai: bạn gõ /tên, hoặc Claude tự nạp khi câu chuyện khớp với description. Một description tốt giúp Claude gọi đúng lúc:
› Tôi vừa thay đổi những gì? Có gì rủi ro không?
⏺ ⤷ tự gọi skill: tom-tat-thay-doi (khớp description)
⏺ !`git diff HEAD` → (nhúng diff)
3 file đổi. Đáng chú ý: bỏ kiểm tra null trong payment.ts (dòng 42) - rủi ro. Còn lại là đổi giao diện an toàn.
Thử ngay - gõ một câu hỏi tự nhiên và xem skill nào tự được gọi (hoặc không), cùng lượng ngữ cảnh thay đổi ra sao:
Chọn một prompt - Claude tự gọi skill phù hợp mà không cần bạn gõ /tên. Xem phần thân skill chỉ nạp khi được gọi:
Review các thay đổi trong PR hoặc diff. Dùng khi người dùng nhờ review, xem diff, hoặc kiểm code trước khi gộp.
280 token thân nạp vào ngữ cảnh lúc này. So sánh: nếu gõ /tên thì cũng tương tự - điểm khác là bạn không cần nhớ tên.
Ngữ cảnh đang dùng (đơn vị dạy)
- ▸Mặc định: bạn gọi (/tên) VÀ Claude tự gọi (theo description).
- ▸description phải nêu “KHI NÀO dùng”, không chỉ “làm gì” - đó là tín hiệu để Claude tự gọi.
- ▸disable-model-invocation: true → CHỈ bạn gọi (hợp cho deploy/commit/gửi tin).
allowed-tools: chạy mượt thao tác an toàn
Bốn cách mở rộng đã/đang học - đừng nhầm vai của chúng:
| Công cụ | Dùng cho |
|---|---|
| CLAUDE.md | Sự thật & luật LUÔN đúng (lệnh build, quy ước) - luôn trong ngữ cảnh. |
| Slash command | Một prompt hay dùng, gọi tay nhanh - dạng đơn giản. |
| Skill | Quy trình nhiều bước (+ file phụ) Claude tự gọi khi cần - tiết lộ dần. |
| Subagent | Việc phụ chạy trong NGỮ CẢNH RIÊNG, trả về tóm tắt (bài kế tiếp). |
Tiếp theo: Subagents
Câu hỏi thường gặp
Hợp nhất nghĩa là cùng một cơ chế: cả hai tạo /tên và chạy như nhau. “Skill” chỉ là dạng ĐẦY ĐỦ: một THƯ MỤC (kèm file phụ) thay vì một file, có frontmatter để Claude TỰ GỌI khi phù hợp, và tải nội dung dần. Dùng dạng command (một file) cho việc đơn giản; nâng lên Skill khi cần file phụ hoặc muốn Claude tự gọi.
Khi bạn cứ dán đi dán lại cùng một checklist/quy trình nhiều bước, HOẶC khi một mục trong CLAUDE.md đã phình thành “quy trình” chứ không còn là “sự thật”. Quy tắc: CLAUDE.md giữ SỰ THẬT & LUẬT luôn đúng; Skill gói QUY TRÌNH gọi khi cần.
Là cách Skill tiết kiệm ngữ cảnh: LUÔN trong ngữ cảnh chỉ có name + description (vài dòng, rất rẻ). Phần THÂN skill chỉ nạp KHI skill được dùng. File tham khảo/scripts kèm theo chỉ nạp khi thật sự cần. Nhờ vậy bạn có thể có rất nhiều skill mà gần như không tốn ngữ cảnh tới lúc dùng.
Nó đọc trường description. Vì thế description phải nêu RÕ “khi nào dùng” - không chỉ skill làm gì. Vd: “Dùng khi người dùng hỏi điều gì đã thay đổi, muốn commit message, hoặc nhờ review diff.” Mô tả mơ hồ → Claude gọi sai lúc hoặc bỏ sót.
Thêm disable-model-invocation: true vào frontmatter. Khi đó CHỈ bạn gõ /deploy mới chạy; Claude không tự quyết định deploy vì “code trông có vẻ xong”. Dùng cho mọi skill có tác dụng phụ: deploy, commit, gửi tin nhắn…
Là các công cụ Claude được dùng KHÔNG cần hỏi phép khi skill đang chạy. Nó KHÔNG giới hạn công cụ (mọi công cụ vẫn gọi được, theo luật quyền của bạn) - chỉ giúp skill chạy mượt cho những thao tác an toàn đã liệt kê. Với skill commit vào dự án, allowed-tools chỉ có hiệu lực sau khi bạn “tin” thư mục đó.
Tick những điều em tự tin làm được. Càng lên cao, em càng hiểu sâu.
Trả lời vài câu để chắc rằng em đã nắm bài.
“Tiết lộ dần” (progressive disclosure) của Skill nghĩa là gì?
- 1
Skill đầu tiên
Tạo
~/.claude/skills/tom-tat-thay-doi/SKILL.md: frontmattername+description, thân chèn !git diff HEADvà yêu cầu tóm tắt thay đổi, gắn cờ chỗ rủi ro.Hoàn thành khi: Sửa một file bất kỳ rồi gõ
/tom-tat-thay-doi→ Claude tóm tắt đúng diff hiện tại. - 2
Để Claude tự gọi
Viết
descriptionthật rõ “khi nào dùng”. Rồi THAY VÌ gõ lệnh, hãy hỏi tự nhiên: “Tôi vừa đổi những gì?” và xem Claude có tự gọi skill không.Hoàn thành khi: Claude tự nhận ra và chạy skill nhờ
descriptionkhớp câu hỏi của bạn. - 3
Chỉ mình tôi gọi
Tạo một skill
/deploy(giả lập, chỉ in các bước) và thêmdisable-model-invocation: true. Kiểm chứng Claude không tự chạy nó.Hoàn thành khi: Chỉ khi bạn gõ
/deploynó mới chạy; hỏi bâng quơ không kích hoạt nó. - 4
Skill hay CLAUDE.md?
Phân loại: (a) “dự án dùng pnpm”, (b) “quy trình phát hành phiên bản gồm 6 bước”. Cái nào vào
CLAUDE.md, cái nào thành Skill?Hoàn thành khi: (a) sự thật →
CLAUDE.md; (b) quy trình nhiều bước → Skill (gọi khi cần, không tốn ngữ cảnh thường trực). - 5
Mô tả tốt
Viết lại một
descriptionmơ hồ (“Quản lý test”) thành rõ ràng nêu khi nào dùng.Hoàn thành khi: Vd: “Chạy & sửa test thất bại. Dùng khi người dùng báo test fail hoặc nhờ chạy bộ test.” - nêu rõ tình huống kích hoạt.