Slash Command và Skill tùy chỉnh
Những điều bạn cần biết
Custom command và skill đã được hợp nhất thành một hệ thống thống nhất: hệ thống Skills. Các file đặt tại .claude/skills/ hoặc .claude/commands/ đều tạo ra cùng một /command hoạt động y hệt nhau. Đường dẫn .claude/skills/ là vị trí chuẩn (canonical); .claude/commands/ là một alias tương thích ngược.
Hệ thống Skills thống nhất
Cả hai đường dẫn đều cho ra cùng một kết quả — một /command mà developer có thể gọi:
.claude/commands/deploy.mdtạo ra/deploy.claude/skills/deploy/SKILL.mdcũng tạo ra/deploy
Đường dẫn skills là đường dẫn được khuyến nghị vì nó bổ sung các tính năng mà alias commands không có: một thư mục file hỗ trợ đi kèm SKILL.md, cơ chế tự động phát hiện để Claude có thể nạp một skill khi nó khớp với ý định của bạn, và quyền ưu tiên khi một skill và một command trùng tên (skill thắng). Cả hai đường dẫn đều hỗ trợ cùng frontmatter YAML (context: fork, allowed-tools, argument-hint) và đều tạo ra cùng một /command, nên các file .claude/commands/ hiện có vẫn hoạt động bình thường, không thay đổi.
Hai cấp độ phạm vi
Phạm vi dự án (chia sẻ qua git):
Đặt skill trong .claude/skills/ (chuẩn) hoặc .claude/commands/ (alias) bên trong repository của bạn. Cả hai đều được quản lý bằng git và chia sẻ qua git. Mọi developer clone hoặc pull repository đều tự động nhận các command này. Dùng cho các workflow chung của cả nhóm: /review, /deploy-check, /lint, /migration-guide.
markdownCopy
<!-- .claude/commands/review.md — tạo ra /review -->
Review the staged changes against our team checklist:
1. Check error handling patterns
2. Verify test coverage for new functions
3. Confirm API naming conventions
4. Flag any hardcoded credentials or secretsPhạm vi người dùng (cá nhân):
Đặt skill trong ~/.claude/skills/ (chuẩn) hoặc ~/.claude/commands/ (alias). Đây là các skill cá nhân, không được quản lý hay chia sẻ. Dùng cho các workflow năng suất cá nhân mà các thành viên khác trong nhóm không cần đến.
Khái niệm chính
Mẫu hình phạm vi này nhất quán xuyên suốt Claude Code: cấp dự án (.claude/) được chia sẻ qua git; cấp người dùng (~/.claude/) là cá nhân. Điều này áp dụng cho CLAUDE.md, commands/skills, và rules. Hãy ghi nhớ mẫu hình này — nó xuất hiện xuyên suốt Domain 3. Cả .claude/commands/ lẫn .claude/skills/ đều có phạm vi dự án và tạo ra cùng các command; .claude/skills/ là đường dẫn chuẩn, đầy đủ tính năng hơn.
Frontmatter của Skills: cấu hình tùy chọn
Các skill trong .claude/skills/ với file SKILL.md hỗ trợ cấu hình frontmatter YAML tùy chọn. Frontmatter này cũng hoạt động với các file .claude/commands/, nhưng .claude/skills/ là vị trí chuẩn cho các skill có cấu hình. Skills là các workflow theo tác vụ cụ thể, được gọi khi cần — chúng không tự động nạp như CLAUDE.md.
Ba tùy chọn frontmatter quan trọng nhất:
context: fork
Chạy skill trong một context sub-agent cô lập. Toàn bộ output chi tiết được giữ trong nhánh fork đó. Cuộc hội thoại chính vẫn sạch sẽ, không bị lộn xộn. Điều này thiết yếu cho:
- Phân tích codebase (tạo ra danh sách file và trích đoạn code rất dài)
- Brainstorm (tạo ra nhiều phương án và đánh giá)
- Bất kỳ tác vụ nào tạo ra output ồn ào, mang tính khám phá
Không có context: fork, output của skill chảy vào cuộc hội thoại chính và tiêu tốn token của context window. Với các skill dài dòng, điều này làm giảm chất lượng các phản hồi tiếp theo.
Frontmatter nằm ở đầu file SKILL.md của skill. Với một skill được gọi bằng /analyse-feature, file đó nằm tại .claude/skills/analyse-feature/SKILL.md:
yamlCopy
---
context: fork
allowed-tools:
- Read
- Grep
- Glob
argument-hint: "Provide a feature description or area of the codebase to analyse"
---allowed-tools
Phê duyệt trước các tool được liệt kê để Claude có thể dùng mà không cần nhắc xin quyền trong khi skill đang chạy. Nó không hạn chế những tool nào khả dụng: mọi tool khác vẫn có thể gọi bình thường, và các cài đặt quyền thông thường của bạn vẫn chi phối những gì không nằm trong danh sách. Dùng nó để cho phép một workflow đáng tin cậy chạy mà không phải dừng lại xin phép ở mỗi lần gọi.
yamlCopy
---
allowed-tools:
- Read
- Grep
- Glob
---Để loại bỏ tool khỏi bộ công cụ mà Claude có thể dùng trong khi skill chạy — đây mới thực sự là ranh giới bảo mật — hãy liệt kê chúng trong disallowed-tools, hoặc thêm quy tắc deny trong cài đặt quyền của bạn.
argument-hint
Nhắc developer nhập các tham số bắt buộc khi skill được gọi mà không có đối số. Cải thiện trải nghiệm developer bằng cách làm rõ đầu vào cần thiết thay vì trông chờ developer nhớ skill cần gì.
yamlCopy
---
argument-hint: "Specify the module path to analyse (e.g., src/api/auth)"
---Skills so với CLAUDE.md: sự khác biệt then chốt
Sự khác biệt này được kiểm tra trực tiếp trong đề thi:
- Skills = workflow theo tác vụ cụ thể, được gọi khi cần. Phần mô tả của chúng luôn nằm trong context để Claude biết chúng tồn tại, nhưng toàn bộ nội dung skill chỉ nạp khi được gọi. Việc gọi có thể tường minh (
/skill-name) hoặc tự động: Claude chọn các skill códescriptionkhớp với ý định của người dùng, hoặc các skill có trường frontmatterpathskhi bạn đang làm việc trên các file khớp. Các skill códisable-model-invocation: truebắt buộc phải được người dùng gọi tường minh. - CLAUDE.md = chuẩn phổ quát, luôn được nạp. Tự động áp dụng cho mọi phiên, không cần bước gọi nào.
Quy tắc: đừng đặt các quy trình theo tác vụ cụ thể vào CLAUDE.md. Đừng đặt tài liệu tham chiếu luôn-bật vào skill.
Các quy ước đặt tên API phải áp dụng cho mọi tác vụ sinh code thuộc về CLAUDE.md (hoặc .claude/rules/). Một workflow phân tích codebase nhiều bước mà developer thỉnh thoảng mới chạy thuộc về một skill. Với các quy ước áp dụng cho một loại file cụ thể — như file test — .claude/rules/ theo phạm vi đường dẫn là lựa chọn phù hợp nhất vì chúng nạp như context luôn-bật cùng các file khớp.
Tùy chỉnh Skill cá nhân
Tạo các biến thể cá nhân trong ~/.claude/skills/ (hoặc ~/.claude/commands/) với tên khác để không ảnh hưởng đến đồng đội. Nếu nhóm có một skill /analyse chuẩn nhưng bạn muốn một phiên bản chi tiết hơn, hãy tạo skill của riêng bạn trong ~/.claude/skills/ với tên khác (ví dụ, /deep-analyse). Skill cá nhân của bạn không ghi đè hay xung đột với phiên bản của nhóm.
Đặt custom command ở đâu: tra cứu nhanh
| Nhu cầu | Vị trí chuẩn | Alias (cũng hoạt động) | Phạm vi |
|---|---|---|---|
| Command dùng chung cho cả nhóm | .claude/skills/ | .claude/commands/ | Dự án (chia sẻ qua git) |
| Command dùng chung cho cả nhóm kèm cấu hình frontmatter | .claude/skills/ | .claude/commands/ | Dự án (chia sẻ qua git) |
| Command cá nhân | ~/.claude/skills/ | ~/.claude/commands/ | Người dùng (không chia sẻ) |
| Chuẩn phổ quát | .claude/CLAUDE.md hoặc CLAUDE.md ở gốc | — | Dự án (luôn được nạp) |
| Sở thích cá nhân | ~/.claude/CLAUDE.md | — | Người dùng (không chia sẻ) |
Bẫy thi
Bẫy thi: Đặt một command dùng chung của nhóm vào đường dẫn phạm vi người dùng (~/.claude/commands/ hoặc ~/.claude/skills/) thay vì đường dẫn phạm vi dự án
Các đường dẫn phạm vi người dùng (~/.claude/commands/ và ~/.claude/skills/) là cá nhân và không được quản lý bằng git. Các command của nhóm cần khả dụng cho tất cả mọi người khi clone phải nằm trong đường dẫn phạm vi dự án (.claude/skills/ hoặc .claude/commands/) bên trong repository. Cả hai đường dẫn phạm vi dự án đều tạo ra cùng các command; .claude/skills/ là vị trí chuẩn, đầy đủ tính năng hơn.
Bẫy thi: Nghĩ rằng skill hoạt động như CLAUDE.md để cung cấp hướng dẫn luôn-bật
Skills nạp khi cần theo kiểu workflow tác vụ, không phải như hướng dẫn luôn nằm trong context. Claude có thể tự động gọi một skill khi prompt khớp với mô tả của skill (hoặc khi một skill giới hạn theo paths khớp với file đang chỉnh sửa), nhưng skill vẫn nạp như một đơn vị theo kiểu gọi riêng biệt thay vì định hình mọi phiên theo mặc định. CLAUDE.md và .claude/rules/ tự động nạp vào context cho mọi phiên (hoặc mọi file khớp, với các rules theo phạm vi đường dẫn). Nếu câu hỏi hỏi về các quy ước luôn-bật áp dụng cho mọi lần chỉnh sửa, câu trả lời là CLAUDE.md hoặc .claude/rules/, không phải một skill.
Bẫy thi: Không biết khi nào nên dùng context: fork
context: fork cô lập output chi tiết của skill khỏi cuộc hội thoại chính. Không có nó, output brainstorm hoặc phân tích codebase làm ô nhiễm context window. Đề thi sẽ đưa ra các kịch bản mà output chi tiết làm lộn xộn cuộc hội thoại chính — cách sửa là context: fork.
Bẫy thi: Đặt các workflow theo tác vụ cụ thể vào CLAUDE.md
CLAUDE.md dành cho các chuẩn phổ quát luôn được nạp. Các quy trình theo tác vụ cụ thể (workflow review code, quy trình phân tích, mẫu brainstorm) thuộc về các skill được gọi khi cần.
Tình huống luyện tập
Không tìm thấy câu hỏi luyện tập "q-3-2-001".
Bài tập thực hành
Tạo Custom Command và Skill
Bạn sẽ học được gì
- Phân biệt vị trí command theo phạm vi dự án và phạm vi người dùng
- Cấu hình frontmatter của SKILL.md với context: fork, allowed-tools, và argument-hint
- Hiểu khi nào dùng skill so với CLAUDE.md cho quy ước so với workflow
- Xác minh ranh giới phạm vi giữa cấu hình dùng chung và cấu hình cá nhân
- Áp dụng mẫu context: fork để cô lập output chi tiết khỏi cuộc hội thoại chính
Các bước
Vì sao: Các command theo phạm vi dự án được chia sẻ qua git nên mọi developer đều nhận được khi clone. Đề thi kiểm tra xem bạn có đặt các command của nhóm trong .claude/commands/ (dự án) thay vì ~/.claude/commands/ (cá nhân) hay không.
Bạn sẽ thấy: Một file tại .claude/commands/review.md trong repository. Chạy /review trong Claude Code kích hoạt checklist review code. Command này xuất hiện khi bất kỳ developer nào clone repository.
Vì sao: Tùy chọn frontmatter context: fork cô lập output chi tiết của skill khỏi cuộc hội thoại chính. Không có nó, output phân tích codebase lấp đầy context window và làm giảm chất lượng các phản hồi tiếp theo. Đề thi kiểm tra trực tiếp khái niệm này.
Bạn sẽ thấy: Một file SKILL.md tại ~/.claude/skills/brainstorm/SKILL.md với frontmatter YAML chứa context: fork. Skill chỉ khả dụng trong các phiên của bạn, không chia sẻ với đồng đội.
Vì sao: Frontmatter allowed-tools giới hạn những tool mà một skill có thể truy cập, tạo ra một ranh giới bảo mật. Một skill phân tích chỉ đọc không bao giờ nên có quyền truy cập Write hay Bash. Đề thi kiểm tra điều này như một thực hành bảo mật tốt nhất.
Bạn sẽ thấy: Frontmatter của SKILL.md giờ bao gồm danh sách allowed-tools với chính xác Read, Grep, và Glob. Skill không thể dùng Write, Bash, hay các tool khác trong khi thực thi.
Vì sao: argument-hint nhắc developer nhập các tham số bắt buộc khi gọi skill mà không có đối số. Điều này cải thiện trải nghiệm developer và là một trong ba tùy chọn frontmatter của SKILL.md được kiểm tra trong đề thi.
Bạn sẽ thấy: Frontmatter của SKILL.md giờ bao gồm argument-hint. Khi một developer gọi /brainstorm mà không có đối số, họ thấy một lời nhắc yêu cầu mô tả tính năng hoặc khu vực codebase.
Vì sao: Điều này xác minh ranh giới phạm vi mà đề thi liên tục kiểm tra: .claude/ có phạm vi dự án và được chia sẻ qua git, còn ~/.claude/ có phạm vi người dùng và mang tính cá nhân. Xác nhận điều này bằng thực nghiệm giúp khắc sâu khái niệm.
Bạn sẽ thấy: Chạy /review hoạt động trong bất kỳ bản clone nào của repository. Chạy /brainstorm chỉ hoạt động trong phiên của bạn. Một đồng nghiệp hoặc một bản clone mới không có cấu hình thư mục home của bạn sẽ không thấy /brainstorm là một command khả dụng.
Vì sao: Tùy chọn context: fork chạy skill trong một sub-agent cô lập. Cuộc hội thoại chính chỉ nhận bản tóm tắt, không phải toàn bộ output chi tiết. Điều này thiết yếu để bảo toàn token của context window trong các tác vụ mang tính khám phá.
Bạn sẽ thấy: Sau khi gọi /brainstorm với một khu vực codebase, cuộc hội thoại chính hiển thị một bản tóm tắt ngắn gọn về các phát hiện. Danh sách file chi tiết, trích đoạn code, và ghi chú phân tích không hiển thị trong lịch sử cuộc hội thoại chính. Các phản hồi tiếp theo vẫn giữ chất lượng cao vì context window không bị lấp đầy bởi output khám phá.