Skills trong Claude Code – Viên gạch bí mật giúp AI làm việc thông minh hơn

Nếu bạn đã đọc bài trước về Claude Code và WAT Framework, hẳn bạn đã thấy mình đề cập đến Skills như một phần trong hệ sinh thái của Claude Code. Nhưng nhiều bạn vẫn hay hỏi: “Skills là gì? Nó khác gì với Workflows hay MCP?”

Bài viết này sẽ đi sâu vào đúng thứ đó — từ khái niệm, cách tạo, đến cách tổ chức Skills sao cho hiệu quả nhất trong dự án thực tế.

Skills là gì?

Hãy tưởng tượng bạn có một nhân viên mới rất thông minh (đó là Claude). Nhưng dù thông minh đến mấy, nếu không có hướng dẫn cụ thể, nhân viên đó sẽ làm mỗi việc theo một cách khác nhau, không nhất quán.

Skills chính là những “sổ tay hướng dẫn” đó — các file Markdown (.md) chứa instruction cụ thể, giúp Claude biết cách xử lý một loại tác vụ nhất định theo đúng tiêu chuẩn bạn đặt ra.

Điểm đặc biệt của Skills so với các loại prompt thông thường là:

  • Tái sử dụng được: Viết một lần, dùng mãi mãi trong nhiều project
  • Load theo nhu cầu: Claude chỉ đọc Skill khi thực sự cần, không tốn token vô ích
  • Có thể kết hợp: Một task phức tạp có thể trigger nhiều Skills khác nhau

Local Skills vs Global Skills

Trong Claude Code, Skills được chia thành 2 loại chính:

Local Skills

Là các Skills được đặt bên trong project của bạn, thường ở thư mục /skills hoặc .claude/skills.

my-project/
├── .claude/
│   └── skills/
│       ├── code-review.md
│       └── write-test.md
├── src/
└── ...

Khi nào dùng Local Skills?

  • Khi Skill chỉ có ý nghĩa với project đó (ví dụ: quy ước đặt tên riêng của team)
  • Khi bạn muốn version control Skill cùng với code
  • Khi mỗi dự án có tiêu chuẩn khác nhau

Global Skills

Là các Skills được cài đặt ở cấp độ toàn bộ Claude Code, không thuộc về một project cụ thể nào.

~/.claude/
└── skills/
    ├── canva-design.md
    ├── email-writer.md
    └── pr-reviewer.md

Khi nào dùng Global Skills?

  • Khi bạn có những thói quen/quy trình muốn áp dụng cho mọi project
  • Các task chung như: viết commit message, review PR, format code…
  • Những skill bạn thường xuyên dùng lại bất kể đang làm gì

Lưu ý: Global Skills có thể bị override bởi Local Skills nếu có trùng tên — Claude sẽ ưu tiên Local trước.

Cấu trúc của một Skill file

Một Skill tốt thường bao gồm các thành phần sau:

# Tên Skill

## Mô tả
[Mô tả ngắn gọn Skill này làm gì]

## Khi nào dùng
[Điều kiện để trigger Skill này]

## Quy trình thực hiện
1. Bước 1...
2. Bước 2...
3. Bước 3...

## Ví dụ
[Ví dụ input/output cụ thể]

## Lưu ý
[Những điều cần tránh, edge case...]

Không có format cứng nhắc — điều quan trọng là rõ ràng và đủ context để Claude hiểu đúng ý bạn muốn.

Thực hành: Tạo Skill đầu tiên của bạn

Hãy thử tạo một Skill đơn giản: viết unit test cho function Python.

Bước 1: Tạo file Skill

Tạo file .claude/skills/write-unit-test.md trong project của bạn:

# Skill: Viết Unit Test Python

## Mô tả
Skill này giúp tạo unit test chuẩn cho các function Python trong project.

## Khi nào dùng
Khi được yêu cầu viết test, tạo test case, hoặc kiểm thử một function.

## Tiêu chuẩn
- Dùng thư viện `pytest`
- Mỗi function phải có ít nhất 3 test case: happy path, edge case, và error case
- Tên test phải bắt đầu bằng `test_` và mô tả rõ tình huống
- Dùng `pytest.mark.parametrize` khi có nhiều input tương tự

## Quy trình
1. Đọc hiểu function cần test: input, output, side effects
2. Xác định các tình huống cần cover
3. Viết test theo thứ tự: happy path → edge case → error case
4. Thêm docstring giải thích mục đích của từng test group

Ví dụ function cần test:

def calculate_discount(price: float, discount_percent: float) -> float:
    if discount_percent < 0 or discount_percent > 100:
        raise ValueError("Discount must be between 0 and 100")
    return price * (1 - discount_percent / 100)

Test mong muốn:

import pytest
from mymodule import calculate_discount

class TestCalculateDiscount:
    def test_normal_discount(self):
        """Happy path: discount hợp lệ"""
        assert calculate_discount(100, 20) == 80.0

    def test_zero_discount(self):
        """Edge case: không có discount"""
        assert calculate_discount(100, 0) == 100.0

    def test_full_discount(self):
        """Edge case: discount 100%"""
        assert calculate_discount(100, 100) == 0.0

    def test_invalid_discount_raises_error(self):
        """Error case: discount ngoài khoảng cho phép"""
        with pytest.raises(ValueError):
            calculate_discount(100, 150)

Bước 2: Kích hoạt Skill trong Claude Code

Khi bạn muốn Claude sử dụng Skill này, có hai cách:

Cách 1 — Explicit trigger (chỉ định rõ):

Dùng skill write-unit-test để tạo test cho function parse_csv() ở file utils.py

Cách 2 — Implicit trigger (Claude tự nhận diện): Nếu bạn đã cấu hình trong claude.md (file system prompt của project), Claude sẽ tự động load Skill phù hợp khi nhận ra context.

Trong claude.md, thêm đoạn:

## Skills
Khi được yêu cầu viết test, hãy tham khảo skill tại `.claude/skills/write-unit-test.md`

Một số Skill hữu ích để bắt đầu

Dưới đây là một vài ý tưởng Skill bạn có thể tạo ngay:

1. code-review.md

Định nghĩa tiêu chí review code của team: naming convention, security checklist, performance concern…

2. commit-message.md

Chuẩn hóa format commit message theo Conventional Commits hoặc quy ước riêng của project.

3. api-documentation.md

Hướng dẫn cách viết doc cho REST API endpoint: mô tả, request/response schema, error codes…

4. refactor-guide.md

Các nguyên tắc refactor code của bạn: khi nào nên extract function, khi nào nên dùng design pattern nào…

5. bug-investigation.md

Quy trình debug theo thứ tự: check log → reproduce → isolate → fix → test.

Skills kết hợp với MCP và Workflows

Nhớ lại sơ đồ WAT Framework từ bài trước? Skills hoàn toàn có thể phối hợp với hai thành phần còn lại:

Workflows (làm gì)
    ↓
Skills (làm như thế nào)
    ↓
Tools/MCP (công cụ để làm)

Ví dụ thực tế: Bạn có một Workflow “Review Pull Request hàng ngày”. Workflow này sẽ:

  1. Dùng MCP GitHub để lấy danh sách PR đang mở
  2. Dùng Skill code-review.md để review từng PR theo tiêu chuẩn team
  3. Dùng Skill comment-writer.md để viết comment phản hồi tự nhiên, không cứng nhắc
  4. Dùng Tool để post comment lên GitHub

Không có Skills, Claude vẫn làm được — nhưng mỗi lần review sẽ theo một cách khác nhau. Có Skills, output sẽ nhất quán và đúng chuẩn hơn hẳn.

Tips để viết Skill hiệu quả

Sau một thời gian thử nghiệm, đây là những điều mình rút ra:

✅ Nên làm:

  • Viết Skill tập trung vào một loại tác vụ duy nhất — đừng cố nhét quá nhiều thứ vào một file
  • Kèm ví dụ cụ thể (input/output mẫu) — Claude học qua example rất tốt
  • Ghi rõ điều kiện trigger — giúp Claude biết khi nào nên dùng Skill này
  • Version control Skill cùng với code — khi quy trình thay đổi, Skill cũng được cập nhật

❌ Không nên:

  • Viết Skill quá dài và phức tạp — nếu cần nhiều bước, hãy chia thành nhiều Skill nhỏ
  • Để Skill bị “stale” — Skill lỗi thời còn tệ hơn không có Skill
  • Tạo quá nhiều Skill chồng chéo — gây confusion cho cả bạn lẫn Claude

Tổng kết

Skills là một trong những tính năng dễ bị bỏ qua nhất của Claude Code, nhưng lại mang lại giá trị thực sự khi bạn đã quen với hệ thống. Thay vì phải nhắc đi nhắc lại “làm theo kiểu này nhé” mỗi khi chat, bạn chỉ cần viết một lần và Skills sẽ đảm bảo Claude làm đúng cách đó mãi mãi.

Tóm lại:

  • Local Skills → cho quy trình riêng của từng project
  • Global Skills → cho thói quen/quy trình áp dụng mọi nơi
  • Skill file tốt = mô tả rõ + có ví dụ + chỉ rõ khi nào dùng
  • Kết hợp Skills + MCP + Workflows = hệ thống automation thực sự mạnh mẽ

Nếu bạn chưa thử tạo Skill nào, hãy bắt đầu ngay hôm nay với một thứ đơn giản nhất trong workflow hàng ngày của bạn. Bạn sẽ thấy sự khác biệt sau lần đầu tiên dùng lại nó.

Chúc anh em code vui! 🚀

1 Comment

  1. Hãy tưởng tượng bạn có một nhân viên mới rất thông minh (đó là Claude). Nhưng dù thông minh đến mấy, nếu không có hướng dẫn cụ thể, nhân viên đó sẽ làm mỗi việc theo một cách khác nhau, không nhất quán.

    Skills chính là những “sổ tay hướng dẫn” đó — các file Markdown (.md) chứa instruction cụ thể, giúp Claude biết cách xử lý một loại tác vụ nhất định theo đúng tiêu chuẩn bạn đặt ra.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *