1. Skills là gì?
Skills là các module có thể tái sử dụng trong Claude Code, cho phép bạn mở rộng khả năng của Claude với các hướng dẫn và quy trình làm việc tùy chỉnh. Mỗi Skill là một tập hợp các instructions được đóng gói trong một file SKILL.md.
1.1. Tại sao cần Skills?
- Tái sử dụng: Viết một lần, sử dụng nhiều lần cho các tác vụ tương tự
- Chuyên môn hóa: Tạo các Skills chuyên biệt cho từng domain cụ thể
- Tự động hóa: Claude có thể tự động invoke Skills dựa trên context
- Tổ chức: Quản lý và chia sẻ knowledge một cách có cấu trúc
1.2. Skills hoạt động như thế nào?
Khi bạn tạo một Skill, Claude Code sẽ:
- Load metadata: Tên và mô tả của Skill được load vào context
- Auto-invoke: Claude tự động quyết định khi nào nên sử dụng Skill dựa trên description
- Load instructions: Khi cần, file SKILL.md được load vào context để Claude thực thi
- Execute: Claude follow các instructions trong Skill để hoàn thành task
Lưu ý quan trọng: Skills chia sẻ context window với system prompts, conversation history, và metadata của các Skills khác. Chỉ có tên và description được pre-load; file SKILL.md chỉ được load khi thực sự cần thiết.
2. Tóm tắt Best Practices
Dựa trên tài liệu chính thức từ Anthropic, đây là các best practices quan trọng nhất khi tạo Skills:
2.1. Nguyên tắc cốt lõi: “Concise is key”
Skills phải ngắn gọn vì chúng chia sẻ context window với các thành phần khác. Mỗi từ trong Skill đều có giá trị:
- Challenge mỗi piece of information – hỏi xem Claude có thực sự cần explanation không
- Assume Claude đã rất thông minh – tránh các giải thích không cần thiết
- Chỉ include những gì thực sự cần thiết cho task cụ thể
2.2. Cấu trúc Skill hiệu quả
Một Skill tốt nên có cấu trúc rõ ràng với các phần sau:
- Overview: Mô tả ngắn gọn Skill làm gì
- Prerequisites: Điều kiện cần thiết trước khi sử dụng
- Execution steps: Các bước thực hiện cụ thể
- Examples: Ví dụ cụ thể về input/output
- Error handling: Cách xử lý lỗi
- Limitations: Những gì Skill không thể làm
2.3. Viết Description hiệu quả
Description là phần quan trọng nhất – nó quyết định khi nào Skill được tự động invoke. Một description tốt nên:
- Specific capabilities: Mô tả rõ ràng Skill có thể làm gì
- Clear triggers: Khi nào Skill nên được sử dụng
- Relevant context: Loại context nào cần thiết
- Boundaries: Giới hạn của Skill
Cảnh báo: Description quá dài hoặc quá mơ hồ sẽ khiến Claude không thể quyết định đúng khi nào nên sử dụng Skill, hoặc invoke Skill không đúng lúc.
2.4. Sử dụng Guardrails
Để tránh Claude “improvise” quá mức, sử dụng các qualifiers mạnh mẽ:
- ALWAYS: Cho các yêu cầu bắt buộc
- NEVER: Cho các điều cấm tuyệt đối
- IMPORTANT: Cho các điểm quan trọng cần nhấn mạnh
2.5. Progressive Disclosure cho Skills phức tạp
Với Skills dài hơn 100 dòng hoặc có branching logic phức tạp:
- Sử dụng reference files thay vì viết tất cả trong một file
- Chia nhỏ logic thành các sections rõ ràng
- Bundle scripts (Python/Node) và có chúng print JSON để giảm verbose instructions
2.6. Testing là bắt buộc
Một Skill tốt phải được test với real usage:
- Test với các scenarios thực tế
- Verify Skill được invoke đúng lúc
- Kiểm tra output có đúng expectations không
- Test edge cases và error handling
3. Cấu trúc của một Skill
Mỗi Skill được tạo bằng một file SKILL.md với cấu trúc sau:
3.1. YAML Frontmatter (Bắt buộc)
Phần đầu file phải chứa YAML frontmatter với các metadata:
--- name: tên-skill description: Mô tả ngắn gọn về Skill (tối đa 200 ký tự) dependencies: [] # Optional: các package cần thiết ---
3.2. Nội dung Markdown
Sau YAML frontmatter là nội dung Markdown chứa instructions cho Claude:
- Sử dụng headers để tổ chức nội dung
- Dùng bullet points cho danh sách
- Include code examples khi cần
- Specify error handling và limitations
3.3. Cấu trúc thư mục
Skills thường được đặt trong thư mục có cấu trúc:
skills/ your-skill-name/ SKILL.md (optional: supporting files)
4. Hướng dẫn tạo Skill từng bước
Dưới đây là hướng dẫn chi tiết từng bước để tạo một Skill mới trong Claude Code:
Bước 1: Mở Claude Code và chuẩn bị workspace
Đầu tiên, bạn cần mở Claude Code và chuẩn bị workspace để tạo Skill:
- Mở Claude Code trong workspace của bạn
- Xác định nơi bạn muốn tạo Skills (thường là thư mục skills/ hoặc .claude/skills/)
- Tạo thư mục mới cho Skill của bạn (ví dụ: blog-formatter)

Màn hình Claude Code với workspace đã mở, hiển thị cấu trúc thư mục hiện tại.
Bước 2: Tạo thư mục và file SKILL.md
Tạo cấu trúc thư mục cho Skill mới:
- Trong workspace, tạo thư mục mới với tên Skill (ví dụ: blog-formatter)
- Tạo file SKILL.md trong thư mục đó
- File này sẽ chứa toàn bộ definition của Skill

File explorer trong Claude Code, hiển thị việc tạo thư mục mới và file SKILL.md.
Bước 3: Viết YAML Frontmatter
Mở file SKILL.md và bắt đầu với YAML frontmatter:
--- name: blog-formatter description: Format và chuẩn hóa blog posts với structure, typography, và accessibility standards ---
Lưu ý quan trọng:
- name: Tối đa 64 ký tự, lowercase với hyphens. Tên này sẽ trở thành slash command (ví dụ: /blog-formatter)
- description: Tối đa 200 ký tự. Đây là phần quan trọng nhất – Claude dùng description để quyết định khi nào invoke Skill
- dependencies: (Optional) Liệt kê các package cần thiết, ví dụ: dependencies: [“python>=3.8”]

Editor trong Claude Code, hiển thị file SKILL.md với YAML frontmatter đã được viết.
Cảnh báo: Description phải rõ ràng và cụ thể. Description mơ hồ sẽ khiến Claude không biết khi nào nên sử dụng Skill.
Bước 4: Viết Overview và Prerequisites
Sau YAML frontmatter, viết phần Overview và Prerequisites:
## Overview Skill này format và chuẩn hóa blog posts để đảm bảo: - Structure rõ ràng với proper headings hierarchy - Typography nhất quán - Accessibility compliance (WCAG 2.1 AA) - SEO-friendly structure ## Prerequisites - Blog post phải có nội dung cơ bản (không cần format hoàn hảo) - Claude Code đang hoạt động trong workspace có quyền write files

Editor hiển thị phần Overview và Prerequisites đã được thêm vào SKILL.md.
Bước 5: Viết Execution Steps
Đây là phần quan trọng nhất – các bước thực hiện cụ thể:
## Execution Steps 1. **Analyze structure**: Kiểm tra heading hierarchy (h1 → h2 → h3) 2. **Format headings**: Đảm bảo headings có proper formatting và không skip levels 3. **Check typography**: - Consistent spacing - Proper line breaks - Code blocks có proper syntax highlighting 4. **Accessibility check**: - Images có alt text - Links có descriptive text - Color contrast đạt chuẩn 5. **SEO optimization**: - Meta description (nếu có) - Proper heading tags - Semantic HTML

Editor hiển thị phần Execution Steps với các bước chi tiết.
Tips: Sử dụng guardrails như ALWAYS, NEVER, IMPORTANT để nhấn mạnh các yêu cầu quan trọng.
Bước 6: Thêm Examples
Examples giúp Claude hiểu rõ hơn về expectations:
## Examples
### Example 1: Format blog post với headings
**Input:**
```markdown
# Title
Some content
## Subtitle
More content
```
**Output:**
```markdown
# Title
Some content
## Subtitle
More content
```
### Example 2: Add alt text cho images
**Input:**
```html
<img src="image.png" />
```
**Output:**
```html
<img src="image.png" alt="Mô tả rõ ràng về nội dung ảnh" />
```

Editor hiển thị phần Examples với input/output examples.
Bước 7: Thêm Error Handling và Limitations
Luôn specify những gì Skill có thể và không thể làm:
## Error Handling - Nếu file không tồn tại: Thông báo lỗi rõ ràng và suggest tạo file mới - Nếu format không hợp lệ: Giữ nguyên và thông báo warning - Nếu thiếu thông tin: Yêu cầu user cung cấp thêm context ## Limitations - Skill này KHÔNG tự động generate nội dung mới - Skill này KHÔNG thay đổi logic hoặc meaning của content - Skill này chỉ format, không rewrite content - Skill này yêu cầu content phải có structure cơ bản

Editor hiển thị phần Error Handling và Limitations.
Bước 8: Lưu file và kiểm tra cấu trúc
Sau khi hoàn thành, lưu file và kiểm tra:
- File được lưu với tên chính xác: SKILL.md (chữ hoa, có dấu chấm)
- YAML frontmatter đúng format (có dấu –
--ở đầu và cuối) - Nội dung Markdown được format đúng
- File nằm trong thư mục riêng của Skill
Bước 9: Test Skill trong Claude Code
Bây giờ test Skill để đảm bảo nó hoạt động đúng:
- Trong Claude Code chat, thử invoke Skill bằng cách mô tả task phù hợp
- Hoặc sử dụng slash command nếu có: /blog-formatter
- Quan sát xem Claude có tự động invoke Skill không
- Kiểm tra output có đúng expectations không
Prompt mẫu (gõ vào chat khi test):
Format blog posts in the SKILL.md file according to standard structure, typography, and accessibility guidelines.

Claude Code chat interface, hiển thị việc invoke Skill bằng prompt hoặc slash command.

Claude Code hiển thị kết quả sau khi Skill được execute, với output đã được format.
5. Ví dụ thực tế: Tạo Skill “blog-formatter”
Dưới đây là ví dụ hoàn chỉnh của một Skill thực tế:
--- name: blog-formatter description: Format và chuẩn hóa blog posts với structure, typography, và accessibility standards --- ## Overview Skill này format và chuẩn hóa blog posts để đảm bảo: - Structure rõ ràng với proper headings hierarchy - Typography nhất quán - Accessibility compliance (WCAG 2.1 AA) - SEO-friendly structure ## Prerequisites - Blog post phải có nội dung cơ bản (không cần format hoàn hảo) - Claude Code đang hoạt động trong workspace có quyền write files ## Execution Steps 1. **Analyze structure**: Kiểm tra heading hierarchy (h1 → h2 → h3) 2. **Format headings**: Đảm bảo headings có proper formatting và không skip levels 3. **Check typography**: - Consistent spacing - Proper line breaks - Code blocks có proper syntax highlighting 4. **Accessibility check**: - Images có alt text - Links có descriptive text - Color contrast đạt chuẩn 5. **SEO optimization**: - Meta description (nếu có) - Proper heading tags - Semantic HTML ## Examples ### Example 1: Format blog post với headings **Input:** ```markdown # Title Some content ## Subtitle More content ``` **Output:** ```markdown # Title Some content ## Subtitle More content ``` ## Error Handling - Nếu file không tồn tại: Thông báo lỗi rõ ràng và suggest tạo file mới - Nếu format không hợp lệ: Giữ nguyên và thông báo warning - Nếu thiếu thông tin: Yêu cầu user cung cấp thêm context ## Limitations - Skill này KHÔNG tự động generate nội dung mới - Skill này KHÔNG thay đổi logic hoặc meaning của content - Skill này chỉ format, không rewrite content - Skill này yêu cầu content phải có structure cơ bản
6. Testing và Debugging
Testing là bước quan trọng để đảm bảo Skill hoạt động đúng:
6.1. Test Cases cơ bản
- Happy path: Test với input hợp lệ và đúng format
- Edge cases: Test với input ở biên (empty, very long, special characters)
- Error cases: Test với input không hợp lệ
- Auto-invoke: Verify Skill được invoke đúng lúc
6.2. Debugging Tips
- Kiểm tra YAML frontmatter có đúng format không
- Verify description có đủ specific để trigger đúng không
- Check xem instructions có rõ ràng không
- Test với các scenarios khác nhau
- Xem Claude có hiểu đúng instructions không

Claude Code hiển thị quá trình debug Skill, với error messages hoặc warnings nếu có.
7. Kết luận
Qua bài viết này, chúng ta đã tìm hiểu cách tạo Claude Code Skills từ cơ bản đến best practices. Skills là công cụ mạnh mẽ để mở rộng khả năng của Claude Code, cho phép bạn tạo các workflows tùy chỉnh và tái sử dụng cho các tác vụ cụ thể.
Những điểm quan trọng cần nhớ:
- Description là phần quan trọng nhất – nó quyết định khi nào Skill được tự động invoke
- Ngắn gọn là chìa khóa – Skills chia sẻ context window, nên mỗi từ đều có giá trị
- Testing là bắt buộc – Một Skill tốt phải được test với real scenarios
- Cấu trúc rõ ràng – Overview, Prerequisites, Execution Steps, Examples, Error Handling, và Limitations
- Guardrails quan trọng – Sử dụng ALWAYS, NEVER, IMPORTANT để nhấn mạnh các yêu cầu
Với hướng dẫn từng bước chi tiết trong bài viết, bạn có thể bắt đầu tạo Skills cho riêng mình. Hãy bắt đầu với một Skill đơn giản, test kỹ lưỡng, và dần dần mở rộng sang các Skills phức tạp hơn.