Bạn vừa dán vào Claude Code một đoạn prompt 300 chữ — lần thứ năm trong tuần. Cùng một checklist review, cùng một format commit message, cùng một quy trình deploy. Mỗi lần gõ lại là mỗi lần kết quả hơi khác một chút, vì prompt không bao giờ giống hệt lần trước.
Có một cách để gói toàn bộ quy trình đó thành một lệnh gọi lại bất cứ lúc nào: skills Claude Code. Một skill là một thư mục chứa file SKILL.md — bạn viết hướng dẫn một lần, Claude load nó đúng lúc cần, hoặc bạn tự gọi bằng /ten-skill. [1]
Đây là bài thứ tám trong series Claude Code. Nếu bạn chưa cài tool, đọc hướng dẫn cài đặt trước. Bài này chỉ cho bạn khi nào nên tạo skill, cấu trúc SKILL.md đúng chuẩn, đặt skill ở đâu cho team, và cách kiểm soát ai được gọi nó.

Tóm tắt nhanh
- Skills Claude Code là các thư mục chứa
SKILL.md: YAML frontmatter khai báonamevàdescription, phần body là hướng dẫn Claude thực thi. [1] - Claude tự gọi skill khi yêu cầu của bạn khớp
description, hoặc bạn gọi trực tiếp bằng/ten-skill— giống slash command. - Khác CLAUDE.md: body skill chỉ nạp khi được dùng — tài liệu dài gần như không tốn token cho tới khi cần. [1][4]
- Skill cá nhân đặt ở
~/.claude/skills/, skill project đặt ở.claude/skills/và commit vào repo cho cả team. - Hai cờ quan trọng:
disable-model-invocation: truechỉ cho bạn gọi,user-invocable: falsecho tài liệu nền chỉ Claude nạp.
Skills Claude Code là gì?
Một skill là một thư mục chứa file SKILL.md với hai phần: YAML frontmatter mô tả skill làm gì và khi nào dùng, còn phần Markdown bên dưới là hướng dẫn Claude thực thi từng bước. Claude tự nạp skill khi yêu cầu của bạn khớp mô tả, hoặc bạn gọi trực tiếp bằng /ten-skill. [1]
- SKILL.md
- File bắt buộc trong mỗi skill, gồm frontmatter (
name,description) và body hướng dẫn. Tên thư mục chứa nó trở thành tên lệnh bạn gõ. - Progressive disclosure
- Cơ chế nạp theo tầng: lúc khởi động Claude chỉ đọc
namevàdescription(~100 token); toàn bộ nội dung chỉ nạp khi skill được kích hoạt; các file đính kèm chỉ đọc khi thật sự cần. [4] - Bundled skill
- Skill có sẵn như
/doctor,/code-review,/debug— hoạt động giống skill tự viết.
Điểm thú vị nhất của skills Claude Code là cơ chế progressive disclosure. Claude chỉ biết “có một skill tên X, dùng khi Y” cho tới khi task thật sự cần — lúc đó body mới được nạp. Một quy trình 200 dòng trong skill gần như miễn phí khi bạn không dùng tới. [4]
Và skills Claude Code không phải sáng chế riêng của một công cụ. Anthropic đã đưa định dạng này thành chuẩn mở Agent Skills, rồi donate cho Agentic AI Foundation thuộc Linux Foundation tháng 10/2026 — hơn 70 nền tảng tích hợp, 1 triệu skill đã publish, khoảng 280 triệu lượt cài. Skill bạn viết hôm nay có thể chạy cả trên Cursor hay Copilot. [2][3]
Bạn đang đọc bài thuộc chuyên mục Lập trình của VietnamTutor — nơi mình chia sẻ cách dùng AI trong engineering có kiểm soát.

Skill khác gì CLAUDE.md và slash command?
CLAUDE.md là quy tắc luôn nạp vào mọi session, còn skill chỉ nạp khi cần — và chứa được cả quy trình dài lẫn script, file tham chiếu. Custom slash command đã được gộp vào skill: file .claude/commands/deploy.md và skill .claude/skills/deploy/SKILL.md đều tạo ra /deploy giống hệt nhau. [1]
| CLAUDE.md | Skill (SKILL.md) | |
|---|---|---|
| Khi nào nạp | Luôn, mọi session | Chỉ khi được kích hoạt hoặc gọi /name |
| Phù hợp với | Quy tắc, convention, sự thật về dự án | Quy trình nhiều bước, checklist, tài liệu tham chiếu |
| Chi phí context | Tốn token cố định mỗi session | Gần như miễn phí khi không dùng |
| File đi kèm | Không | Có: reference.md, script, template |
| Ai gọi | Không gọi — luôn có sẵn | Bạn (/name) hoặc Claude tự quyết |
Quy tắc ngón tay: tạo skill khi bạn lặp paste cùng một quy trình nhiều bước — hoặc khi một đoạn CLAUDE.md đã phình thành “quy trình” thay vì “sự thật”. [1] Phần nào trong CLAUDE.md mang tính “làm theo các bước” thì đó là ứng viên tách thành skill.
Còn file .claude/commands/ cũ vẫn chạy bình thường, đừng lo. Nhưng với việc mới, mình khuyên viết thẳng thành skill — vì skills Claude Code cho thêm frontmatter kiểm soát ai được gọi và thư mục chứa file đính kèm. [1]
Tạo skill đầu tiên trong 3 bước
Tạo thư mục trong ~/.claude/skills/, viết file SKILL.md gồm frontmatter và hướng dẫn, rồi mở session gọi /ten-skill hoặc đặt một câu hỏi khớp description để Claude tự kích hoạt. [1]
Ví dụ từ tài liệu chính thức — skill tóm tắt thay đổi chưa commit và cảnh báo rủi ro. Bước một, tạo thư mục:
# Skill cá nhân: dùng được ở mọi project trên máy này mkdir -p ~/.claude/skills/summarize-changes
Bước hai, viết SKILL.md. File này có đúng hai phần: frontmatter giữa hai dấu ---, và body Markdown bên dưới:
--- name: summarize-changes description: Tóm tắt các thay đổi chưa commit và cảnh báo rủi ro. Dùng khi user hỏi đã thay đổi gì, muốn viết commit message, hoặc review diff. --- ## Thay đổi hiện tại !`git diff HEAD` ## Hướng dẫn Tóm tắt thay đổi trên thành 2-3 gạch đầu dòng, sau đó liệt kê rủi ro: thiếu xử lý lỗi, giá trị hardcode, test cần cập nhật. Nếu diff rỗng thì báo không có thay đổi chưa commit.
Hai quy tắc đáng nhớ: name chỉ gồm chữ thường, số và gạch nối (tối đa 64 ký tự, trùng tên thư mục); description tối đa 1.024 ký tự, chính là tiêu chí Claude quyết định có nạp skill không. [2] Viết kiểu “làm X, dùng khi user hỏi Y” — càng cụ thể trigger, Claude càng ít bỏ lỡ.
Bước ba, test thử. Mở một git project, sửa một file nhỏ, chạy claude rồi hỏi “Tôi vừa thay đổi gì?” — Claude sẽ tự nạp skill, hoặc gõ thẳng /summarize-changes. Nếu Claude không tự bắt, sửa description sát câu hỏi thật hơn. [1]
Một giới hạn cần biết: giữ SKILL.md dưới 500 dòng — nội dung dài hơn thì tách sang reference.md, examples.md hoặc script trong cùng thư mục, rồi nhắc đường dẫn để Claude chỉ đọc khi cần. [5]

Đặt skill ở đâu: máy mình, repo hay cả team?
Skill cá nhân đặt ở ~/.claude/skills/ để dùng ở mọi project trên máy bạn; skill của project đặt ở .claude/skills/ và commit vào repo để cả team có cùng lệnh; skill doanh nghiệp hoặc plugin thì phát qua managed settings và marketplace. [1]
| Vị trí | Đường dẫn | Ai dùng được |
|---|---|---|
| Personal | ~/.claude/skills/<ten>/SKILL.md | Bạn, mọi project trên máy này |
| Project | .claude/skills/<ten>/SKILL.md | Ai clone repo — commit để team có chung |
| Nested (monorepo) | <subdir>/.claude/skills/<ten>/SKILL.md | Session đụng file trong subdir đó |
| Plugin | <plugin>/skills/<ten>/SKILL.md | Nơi plugin được bật, gọi qua /plugin:skill |
| Enterprise | .claude/skills/ trong managed settings | Toàn bộ máy trong tổ chức |
Với team nhỏ, cách phổ biến là commit skill vào repo — ai clone về cũng có ngay /review-pr hay /deploy-staging chuẩn của dự án. Khi hai skill trùng tên, ưu tiên enterprise > personal > project. [1]

Kiểm soát ai được gọi skill
Mặc định cả bạn lẫn Claude đều gọi được skill: bạn gõ /name, Claude tự nạp khi thấy khớp mô tả. Hai cờ frontmatter để siết lại — disable-model-invocation: true chỉ cho bạn gọi, và user-invocable: false chỉ cho Claude nạp ngầm. [1]
Dùng mỗi cờ thế nào:
disable-model-invocation: true— cho workflow có side effect bạn muốn tự quyết thời điểm:/deploy,/commit. Bạn không muốn Claude tự ý deploy chỉ vì “code trông ổn rồi”.user-invocable: false— cho tài liệu nền không phải hành động, ví dụ skill giải thích hệ thống cũ. Claude cần biết khi liên quan, nhưng gõ lệnh cho nó chẳng có nghĩa gì.allowed-tools— cấp sẵn quyền tool trong turn chạy skill, khỏi hỏi từng cái: ví dụallowed-tools: Read Grep Bash(gh *)cho skill đọc PR qua GitHub CLI.
Đây chính là chỗ skill ăn đứt file command cũ: .claude/commands/ không có mấy cờ này. Nếu muốn hiểu toàn bộ hệ thống quyền của Claude Code, đọc bài permission mode — skill chỉ là một lớp kiểm soát bổ sung phía trên.
Nâng cao: tham số, dữ liệu động và chạy trong subagent
Skill nhận tham số qua $ARGUMENTS, chạy lệnh shell chèn kết quả thật vào prompt, và chạy trong subagent riêng với context: fork. Ba tính năng này biến skill từ “prompt lưu sẵn” thành workflow thật. [1]
Với tham số, đặt $ARGUMENTS (hoặc $0, $1) trong body — gõ /fix-issue 123 thì Claude nhận “Fix GitHub issue 123…”. Khai báo arguments: trong frontmatter nếu muốn đặt tên.
Với dữ liệu động, dòng !git diff HEAD được chạy như shell command trước khi nội dung tới tay Claude — output thật chèn thẳng vào prompt, nên Claude đọc diff thực tế chứ không đoán. Đó là cách skill summarize-changes ở trên lấy diff sống. [1]
Còn context: fork cho skill chạy trong một subagent riêng có context sạch, mặc định ở nền — hợp task nặng như research hay review độc lập. Cần kết quả ngay thì thêm background: false. Cơ chế subagent này sẽ là chủ đề bài tiếp theo của series.
--- name: pr-summary description: Tóm tắt thay đổi trong một pull request context: fork agent: Explore allowed-tools: Bash(gh *) --- ## Dữ liệu PR Lấy diff và danh sách commit của PR hiện tại bằng GitHub CLI. ## Nhiệm vụ Tóm tắt PR thành 3 gạch đầu dòng, nêu rõ file quan trọng nhất thay đổi và rủi ro merge.
Khi nào nên tạo skill — và khi nào không?
Tạo skill khi một quy trình lặp lại từ 3 lần trở lên, khi nhiều người trong team cần cùng một cách làm, hoặc khi tài liệu dài chỉ nên nạp đúng lúc. Đừng tạo cho việc làm một lần, quy tắc một dòng, hay thứ đã có sẵn trong bundled skills.
| Nên làm skill | Chưa cần |
|---|---|
| Checklist review/deploy lặp mỗi tuần | Task một lần rồi thôi |
| Quy trình nhiều bước team phải làm giống nhau | Quy tắc một câu — cho vào CLAUDE.md |
| Tài liệu API/convention dài, chỉ cần đúng lúc | Việc bundled skill đã lo (/doctor, /debug) |
| Workflow cần script hay template kèm theo | Thứ thay đổi mỗi tuần, chưa ổn định |
Nhìn cách các team thật dùng sẽ dễ hình dung hơn. Team Anthropic vận hành hàng trăm skill nội bộ — standup-post tổng hợp ticket và GitHub thành bài standup, weekly-recap gộp PR và deploy thành recap tuần. [6] Còn một developer xây pipeline /deliver từ chuỗi skill nhỏ — plan, implement, review, mở PR — mỗi skill đúng một chặng thay vì một skill khổng lồ. [7]
Đó là pattern đáng học nhất: nhiều skill nhỏ compose với nhau, đúng tinh thần một lệnh — một việc. Đây cũng là lý do vibe coding có kiểm soát mới là cách dùng AI bền, thay vì prompt cảm hứng từng lần một.

Nguồn tham khảo
- Claude Code Docs — Extend Claude with skills
- Agent Skills — Format Specification
- Anthropic — Donating Agent Skills to the Agentic AI Foundation (10/2026)
- Anthropic — Equipping agents for the real world with Agent Skills
- Claude Docs — Create custom skills
- Claude Dev Blog — Lessons from building Claude Code: How we use skills
- Adam Young — From Plan to PR: A Delivery Pipeline Built from Claude Code Skills
- EcomLabs — Claude Code workflow: plan, build, understand, continue
Các câu hỏi thường gặp
Skills Claude Code khác gì slash command?
Slash command tùy chỉnh đã được gộp vào skills Claude Code: file .claude/commands/deploy.md và skill .claude/skills/deploy/SKILL.md đều tạo lệnh /deploy giống nhau. Skill chỉ thêm các khả năng mới — thư mục chứa file đính kèm, frontmatter điều khiển ai được gọi, và khả năng Claude tự nạp khi thấy task liên quan.
Làm sao để Claude Code tự chạy skill mà không cần gõ lệnh?
Viết description trong frontmatter mô tả đúng tình huống dùng, kiểu “Dùng khi user hỏi đã thay đổi gì hoặc muốn review diff”. Claude đọc description của mọi skill lúc khởi động và tự nạp skill khi yêu cầu khớp. Nếu Claude bỏ lỡ, chỉnh description sát câu hỏi thật của bạn hơn.
Nên dùng skill hay viết vào CLAUDE.md?
Quy tắc và sự thật về dự án (convention, lệnh build, cấu trúc) cho vào CLAUDE.md vì cần có sẵn mọi lúc. Quy trình nhiều bước, checklist hay tài liệu tham chiếu dài cho vào skill — body skill chỉ nạp khi được dùng nên gần như không tốn context. Nếu một đoạn CLAUDE.md đã phình thành quy trình, đó là lúc tách ra thành skill.
Chia sẻ skill cho cả team thì làm thế nào?
Đặt skill trong .claude/skills/ của project và commit vào repository — ai clone về cũng có lệnh đó ngay. Ở quy mô lớn hơn, phát skill qua managed settings của tổ chức hoặc đóng gói thành plugin. Skill ở ~/.claude/skills/ chỉ tồn tại trên máy bạn.
Có cách nào cấm Claude tự chạy một skill không?
Có — đặt disable-model-invocation: true trong frontmatter. Skill vẫn gọi được bằng /ten-skill nhưng Claude không được tự kích hoạt. Đây là cài đặt nên có cho workflow có side effect như deploy hay gửi thông báo, nơi chỉ bạn mới được quyết thời điểm chạy.
Skill viết cho Claude Code có dùng được trên công cụ khác không?
Phần lớn có. Skills tuân theo chuẩn mở Agent Skills mà Anthropic đã donate cho Agentic AI Foundation thuộc Linux Foundation — hơn 70 nền tảng như ChatGPT, Cursor, GitHub Copilot hay VS Code đã tích hợp. Chỉ cần giới hạn frontmatter trong các trường chuẩn (name, description, license, compatibility, metadata, allowed-tools) nếu muốn skill chạy ở mọi nơi.
Skills Claude Code là bước chuyển từ “dùng tool” sang “vận hành tool”: quy trình nào lặp từ ba lần trở lên thì đáng gói lại một lần cho xong. Bắt đầu nhỏ — một skill /summarize-changes hay /review-checklist — rồi mới nghĩ tới pipeline nhiều skill ghép lại. Bạn đã có quy trình nào muốn biến thành skill chưa? Kể mình nghe ở comment nhé, hoặc ghé bài tiếp theo trong series về subagent để xem cách chia việc cho agent phụ an toàn.
