Skills trong Claude Code: biến quy trình thành lệnh tái dùng

Nội dung

Hướng dẫn dùng skills trong Claude Code: cấu trúc SKILL.md, vị trí lưu cho cá nhân và team, kiểm soát ai được gọi skill, và các pattern nâng cao như arguments, dynamic context injection, context fork.

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ó.

Skills Claude Code biến quy trình lặp lại thành lệnh tái dùng
Skills gói quy trình lặp lại thành một lệnh gọi lại bất cứ lúc nào.

Tóm tắt nhanh

  • Skills Claude Code là các thư mục chứa SKILL.md: YAML frontmatter khai báo name và 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: true chỉ cho bạn gọi, user-invocable: false cho 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 name và 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.

Progressive disclosure trong skills Claude Code — metadata nạp lúc khởi động, nội dung nạp khi kích hoạt
Progressive disclosure: chỉ ~100 token metadata nạp lúc khởi động, phần còn lại đợi đúng lúc cần.

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.mdSkill (SKILL.md)
Khi nào nạpLuôn, mọi sessionChỉ khi được kích hoạt hoặc gọi /name
Phù hợp vớiQuy tắc, convention, sự thật về dự ánQuy trình nhiều bước, checklist, tài liệu tham chiếu
Chi phí contextTốn token cố định mỗi sessionGần như miễn phí khi không dùng
File đi kèmKhôngCó: reference.md, script, template
Ai gọiKhông gọi — luôn có sẵnBạ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]

Cấu trúc file SKILL.md gồm YAML frontmatter và phần hướng dẫn Markdown
SKILL.md = frontmatter khai báo khi nào dùng + body hướng dẫn Claude làm gì.

Đặ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ẫnAi dùng được
Personal~/.claude/skills/<ten>/SKILL.mdBạn, mọi project trên máy này
Project.claude/skills/<ten>/SKILL.mdAi clone repo — commit để team có chung
Nested (monorepo)<subdir>/.claude/skills/<ten>/SKILL.mdSession đụng file trong subdir đó
Plugin<plugin>/skills/<ten>/SKILL.mdNơi plugin được bật, gọi qua /plugin:skill
Enterprise.claude/skills/ trong managed settingsToà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]

Các vị trí lưu skills trong Claude Code — personal, project, plugin và enterprise
Bốn tầng đặt skill — từ máy cá nhân tới repo chung và cả tổ chức.

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 skillChưa cần
Checklist review/deploy lặp mỗi tuầnTask một lần rồi thôi
Quy trình nhiều bước team phải làm giống nhauQuy tắc một câu — cho vào CLAUDE.md
Tài liệu API/convention dài, chỉ cần đúng lúcViệc bundled skill đã lo (/doctor, /debug)
Workflow cần script hay template kèm theoThứ 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.

Nhiều skill nhỏ trong Claude Code ghép thành một pipeline hoàn chỉnh
Nhiều skill nhỏ ghép lại thành pipeline — mỗi skill một việc.

Nguồn tham khảo

  1. Claude Code Docs — Extend Claude with skills
  2. Agent Skills — Format Specification
  3. Anthropic — Donating Agent Skills to the Agentic AI Foundation (10/2026)
  4. Anthropic — Equipping agents for the real world with Agent Skills
  5. Claude Docs — Create custom skills
  6. Claude Dev Blog — Lessons from building Claude Code: How we use skills
  7. Adam Young — From Plan to PR: A Delivery Pipeline Built from Claude Code Skills
  8. 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.

Tú Anh

Cây bút chính tại VietnamTutor

Bài viết cùng chuyên mục

Plan mode Claude Code: bắt AI lập kế hoạch trước khi viết code

Bài giải thích plan mode trong Claude Code: cách bật bằng Shift+Tab hoặc /plan, Claude được làm gì khi chỉ-đọc, checklist đọc plan trước khi duyệt,

Checkpoint trong Claude Code: quay lại khi AI sửa hỏng code

Bài giải thích cơ chế checkpoint của Claude Code, cách dùng /rewind để khôi phục code và hội thoại, những trường hợp checkpoint không cứu được,

Permission mode trong Claude Code: chọn mức quyền an toàn

Bài giải thích 6 permission mode của Claude Code, cách đổi chế độ bằng Shift+Tab và cờ khởi động, cùng nguyên tắc chọn mức quyền an

Sửa code bằng Claude Code: quy trình an toàn cho người mới

Bài hướng dẫn quy trình sửa code bằng Claude Code an toàn cho người mới: cách viết yêu cầu, duyệt quyền, kiểm tra thay đổi, kiểm

CLAUDE.md là gì? Cách ghi quy tắc dự án để Claude Code làm đúng

Bài giải thích CLAUDE.md là gì, file này load từ đâu, nên ghi nội dung nào và cách bảo trì để Claude Code làm đúng quy

7 lệnh Claude Code cần biết: /help, /clear, /compact và cách dùng

Bài hướng dẫn 7 lệnh Claude Code quan trọng nhất cho người mới bắt đầu, kèm ví dụ thực tế và thời điểm nên dùng từng

Claude Code là gì? Hướng dẫn cài đặt và chạy dự án đầu tiên

Bài giải thích Claude Code là gì, cách cài đặt đúng trên macOS, Windows và Linux, cùng quy trình chạy dự án đầu tiên an toàn

Prompt vibe coding: mẫu brief để AI hiểu rõ sản phẩm

Prompt vibe coding hiệu quả bắt đầu từ một brief rõ, không phải một câu lệnh dài. Mẫu này giúp bạn mô tả sản phẩm, giới

@wordpress/build là gì? Tooling mới cho plugin WordPress

@wordpress/build là hướng tooling mới cho plugin WordPress: build nhanh hơn, convention-based, hỗ trợ script modules và tự tạo file PHP registration.

WordPress cho developer 2026: những thay đổi cần kiểm tra

Bài viết tóm tắt các thay đổi WordPress cho developer 2026 đáng chú ý trong tháng 5: Gutenberg, REST API, block editor, theme và kiểm thử

Docker sandbox AI coding agent: cấu hình an toàn

Bài viết hướng dẫn lập trình viên cấu hình Docker sandbox AI coding agent để giảm rủi ro khi agent đọc repo, sửa file và chạy

Vibe coding và nợ kỹ thuật thầm lặng: kiểm soát bằng kỹ thuật ngữ cảnh

Vibe coding tăng tốc nhưng âm thầm tích lũy nợ kỹ thuật. Bài này giải thích vì sao và cách context engineering giúp bạn giữ codebase