Mục tiêu học tập

Sau bài này, bạn sẽ có thể:
  • ✅ Giải thích Agent Skill là gì và cơ chế auto-trigger hoạt động như thế nào
  • ✅ Viết một SKILL.md đúng format với YAML frontmatter và body instructions
  • ✅ Quyết định đặt skill ở đâu: personal (~/.claude/skills/) hay project (.claude/skills/)
  • ✅ Phân biệt chính xác Skill vs CLAUDE.md vs slash command vs hook — cái nào dùng khi nào
  • ✅ Nhận ra pattern lặp lại trong workflow của mình và biến nó thành skill trong dưới 20 phút

Mở đầu: 20 lần nhắc cho 20 landing page

Bạn là người làm marketing, creator, hoặc founder nhỏ. Mỗi tháng bạn cần tạo nhiều landing page cho khóa học, webinar, ebook, dịch vụ tư vấn, hoặc chiến dịch quảng cáo. Lần nào bạn mở Claude Code để làm một landing page mới, bạn cũng phải nhắc:
“Landing page phải có Hero, Problem, Solution, Benefits, Social Proof, Pricing, FAQ và CTA. Viết bằng tiếng Việt thân thiện, tránh văn mẫu quá AI. Nút chính dùng màu xanh lá, tone chuyên nghiệp, ưu tiên người mới bắt đầu. Nếu thiếu thông tin về sản phẩm thì hỏi lại trước.”
Claude ghi nhớ — nhưng chỉ trong session đó. Session tiếp theo, bạn lại nhắc lại y chang. 20 landing page/tháng = 20 lần copy-paste đoạn instructions đó. Tính ra một năm bạn đã mất nhiều giờ chỉ để nhắc Claude cùng một thứ. Tệ hơn: nếu có teammate mới join, bạn phải gửi đoạn instructions đó cho họ qua Slack, rồi họ lại phải nhớ copy-paste mỗi lần tạo trang mới. Đây chính xác là vấn đề mà Agent Skills giải quyết. Bạn viết SKILL.md cho landing-page một lần. Claude tự đọc, tự hiểu, và mỗi khi bạn nói “tạo landing page”, “làm trang đăng ký webinar”, “viết page bán khóa học” — Claude tự apply toàn bộ quy tắc đó mà không cần bạn nhắc lại.
“If you find yourself explaining the same thing to Claude repeatedly, that’s a skill waiting to be written.”
20 landing page/tháng → 0 lần nhắc lại checklist. Skill viết một lần, dùng mãi mãi.

Skill là gì?

Agent Skill là một folder chứa file markdown (SKILL.md) — có thể kèm scripts và resources thêm — mà Claude Code tự động phát hiện và load khi request của bạn match với description của skill đó. Định nghĩa chính thức từ Anthropic:
“Agent skills are folders of instructions, scripts, and resources that agents can discover and use to do things more accurately and efficiently.”
Điểm khác biệt then chốt: skill không phải là lệnh bạn phải gõ. Skill là kiến thức bạn dạy cho Claude một lần — Claude tự biết khi nào nên dùng kiến thức đó.

Cơ chế auto-trigger

Khi bạn gõ bất kỳ prompt nào, Claude không chỉ đọc prompt đó. Claude đọc xong rồi so sánh với toàn bộ danh sách skill đang available, xem description của skill nào match nhất, sau đó load skill đó vào context để thực thi. Điểm quan trọng: khi không match, Claude chỉ load tên + description của skill (vài chục token). Full content của skill chỉ load khi match. Đây là lý do skill tiết kiệm context hơn CLAUDE.md — như đã thấy ở Bài 2.5: skill là on-demand, CLAUDE.md là always-on.

Anatomy của SKILL.md

Một SKILL.md có hai phần bắt buộc: YAML frontmatterbody instructions.

Ví dụ thực tế: Landing page skill

---
name: landing-page
description: >
  Tạo landing page theo cấu trúc rõ ràng, có copywriting, CTA,
  social proof, FAQ và tone phù hợp với sản phẩm. Trigger khi user nói
  "tạo landing page", "làm trang bán hàng", "page đăng ký",
  "sales page", "trang giới thiệu khóa học".
---

# Landing Page Skill

## Khi thực hiện

Tạo landing page cho một sản phẩm, dịch vụ, khóa học, webinar, hoặc chiến dịch marketing. Mục tiêu là giúp user có một trang rõ thông điệp, dễ đọc, có lời kêu gọi hành động cụ thể.

## Input cần có

- Sản phẩm/dịch vụ cần bán hoặc giới thiệu
- Khách hàng mục tiêu
- Mục tiêu chính của trang: đăng ký, mua hàng, đặt lịch, tải tài liệu
- Tone mong muốn: chuyên nghiệp, thân thiện, cao cấp, gần gũi
- Màu chủ đạo hoặc brand guideline nếu có
- Nếu thiếu sản phẩm, khách hàng mục tiêu, hoặc CTA, hỏi lại trước khi viết

## Quy tắc / conventions

- Viết bằng ngôn ngữ cụ thể, tránh câu chung chung như "giải pháp toàn diện"
- Mỗi section chỉ có một mục tiêu rõ ràng
- CTA phải nhất quán trên toàn trang
- Nội dung phải phù hợp với mức hiểu biết của khách hàng mục tiêu
- Nếu tạo UI, ưu tiên layout dễ scan trên mobile trước

## Quy trình thực hiện

1. Xác định offer chính và khách hàng mục tiêu
2. Viết thông điệp Hero: headline, subheadline, CTA
3. Mô tả vấn đề khách hàng đang gặp
4. Trình bày giải pháp và lợi ích cụ thể
5. Thêm social proof: testimonial, số liệu, logo, hoặc case study nếu có
6. Viết pricing hoặc offer block nếu user cần bán trực tiếp
7. Viết FAQ để xử lý các rào cản mua hàng
8. Kết thúc bằng CTA rõ ràng

## Output format

Trả về theo format:

1. **Tóm tắt trang:** mục tiêu, audience, CTA chính
2. **Section outline:** danh sách section theo thứ tự
3. **Copywriting:** headline, body copy, CTA cho từng section
4. **Gợi ý UI:** layout, màu, hình ảnh, icon nếu cần
5. **Điểm cần hỏi thêm:** chỉ liệt kê nếu còn thiếu thông tin

Nếu user yêu cầu tạo file, sau phần nội dung mới viết mã hoặc chỉnh file theo cấu trúc đã chốt.

## Lưu ý / tránh làm

- Không bịa testimonial, số liệu doanh thu, logo khách hàng, hoặc chứng nhận
- Không dùng quá nhiều buzzword nếu chưa có bằng chứng cụ thể
- Không đổi offer chính nếu user đã nêu rõ
- Không tạo landing page quá dài nếu mục tiêu chỉ là đăng ký đơn giản

### Checklist tham khảo

**Hero**
- Headline nói rõ kết quả khách hàng nhận được
- Subheadline giải thích offer trong 1-2 câu
- CTA dùng động từ cụ thể: "Đăng ký ngay", "Nhận tư vấn", "Tải ebook"

**Register form**
- Chỉ hỏi thông tin thật sự cần: tên, email, số điện thoại nếu bắt buộc
- Có microcopy nói rõ người dùng sẽ nhận được gì sau khi đăng ký
- Có thông báo thành công rõ ràng sau khi submit

**Trust**
- Dùng bằng chứng thật: review, ảnh sản phẩm, số liệu đã xác minh
- FAQ trả lời các câu hỏi khiến người dùng chần chừ
- Chính sách hoàn tiền hoặc hỗ trợ nếu có

YAML frontmatter — phần quan trọng nhất

---
name: landing-page # Tên ngắn, kebab-case
description: ... # Claude dùng cái này để quyết định trigger
---
name: Định danh của skill. Dùng kebab-case, ngắn gọn. description: Đây là trái tim của skill. Claude đọc description này để quyết định có nên load skill hay không. Description tốt cần:
  • Mô tả skill làm gì (để Claude hiểu scope)
  • List trigger keywords/phrases điển hình (để matching chính xác hơn)
  • Đủ specific để không trigger nhầm, đủ broad để không miss variation
Description quá generic: “Giúp tôi làm marketing tốt hơn” → Claude có thể trigger mọi lúc bạn hỏi về marketing. Description quá specific: “Trigger chỉ khi user gõ đúng chữ ‘tạo landing page khóa tiếng Anh màu xanh light mode’” → Miss hàng loạt variation hợp lệ. Description đúng: Mô tả rõ ràng task type, list 3-6 trigger phrase tự nhiên, không giới hạn cứng nhắc.

Body — instructions chi tiết

Body là phần Claude thực sự đọc khi skill được trigger. Viết như bạn đang viết instructions cho một người cộng tác mới rất giỏi nhưng chưa biết context của bạn:
  • Dùng heading cố định để Claude biết lúc nào cần làm gì
  • Bullet points cho checklist và conventions
  • Ví dụ cụ thể khi cần
  • Explicit về input, quy trình, output, và những gì không được làm
Với skill thực tế, body nên có 6 phần sau:
## Khi thực hiện
Mô tả ngắn Claude cần làm gì và mục tiêu của skill.

## Input cần có
Các thông tin Claude cần lấy từ user, từ repo, hoặc dùng mặc định.

## Quy tắc / conventions
Các nguyên tắc bắt buộc khi làm.

## Quy trình thực hiện
Các bước tuần tự Claude phải follow.

## Output format
Kết quả phải trả về theo format nào.

## Lưu ý / tránh làm
Anti-pattern hoặc constraint quan trọng.
Không có limit cứng cho body, nhưng nên giữ SKILL.md ngắn gọn. Nếu body bắt đầu dài, tách reference, examples, scripts, hoặc templates sang file riêng để Claude chỉ đọc khi cần. Skill 200 dòng vẫn tốt hơn CLAUDE.md 200 dòng về cùng topic vì skill chỉ load khi match, nhưng skill càng gọn thì context càng sạch.

Bảng so sánh: Skill vs CLAUDE.md vs Slash Command vs Hook

Đây là bảng bạn cần thuộc lòng. Bốn công cụ này thoạt nhìn có vẻ overlap — nhưng mỗi cái có use case riêng biệt hoàn toàn.
Tiêu chíSkillCLAUDE.mdSlash CommandHook
TriggerAuto — Claude nhận ra khi nào cầnLuôn luôn — load mọi sessionManual — bạn phải gõ /tênEvent-driven — sự kiện xảy ra
Context costThấp — chỉ tên+desc cho đến khi matchCao — full content mọi lúcOn-demand — chỉ khi invokeBằng 0 với Claude context
Ai quyết định dùngClaude tự quyếtKhông áp dụngBạn quyếtHệ thống (trigger by event)
Use case chínhTask-specific knowledgeAlways-relevant project infoExplicit invocationDeterministic automation
Ví dụ điển hình”Landing page theo brand checklist""Project dùng màu brand nào, tone voice nào”/create-landing-page theo templateAuto-format file sau mỗi lần edit
SharingProject skill: cả team. Personal: chỉ bạnProject CLAUDE.md: cả teamCó thể share qua repoShare qua settings.json
Khi nào tạoPattern lặp ≥3 lần, task-specificInfo luôn relevant mọi taskMuốn explicit controlMuốn guaranteed every-time

Quy tắc quyết định nhanh

Storage locations — đặt skill ở đâu?

Skill có thể lưu ở hai nơi, với ý nghĩa hoàn toàn khác nhau:

Personal skills: ~/.claude/skills/

~/.claude/
└── skills/
    ├── writing-style/
    │   └── SKILL.md
    ├── landing-copy/
    │   └── SKILL.md
    └── meeting-summary/
        ├── SKILL.md
        └── scripts/
            └── transcript-cleaner.sh
  • Theo bạn qua mọi project
  • Không được commit vào git (nằm ngoài repo)
  • Phù hợp cho: personal preferences, style viết của bạn, cách bạn muốn Claude tóm tắt nội dung, workflow cá nhân

Project skills: .claude/skills/

project-root/
├── .claude/
│   └── skills/
│       ├── landing-page/
│       │   └── SKILL.md
│       ├── register-flow/
│       │   └── SKILL.md
│       └── brand-guidelines/
│           ├── SKILL.md
│           └── assets/
│               └── color-tokens.json
├── pages/
└── ...
  • Checked in vào git
  • Ai clone repo đều có skill tự động
  • Phù hợp cho: team standards, brand guidelines, tone of voice, conventions của form đăng ký hoặc landing page

Bảng quyết định: personal vs project

Câu hỏiPersonalProject
Teammate có cần skill này không?Không
Skill có team-specific convention không?Không
Skill phản ánh style cá nhân không?Không
Cần cả team dùng cùng landing page guideline không?Không
Ví dụ”Viết nội dung theo style cá nhân của tôi""Landing page phải đúng brand checklist của công ty”

Ví dụ thực chiến: Tạo skill register-flow từ scratch

Bước 0: Identify pattern

Bạn thường xuyên tạo form đăng ký cho webinar, khóa học, ebook, hoặc buổi tư vấn. Lần nào bạn cũng phải nhắc Claude:
  • Chỉ hỏi thông tin thật sự cần
  • Có thông báo lỗi dễ hiểu
  • Có màn hình thành công sau khi đăng ký
  • Có email xác nhận hoặc tin nhắn follow-up
Sau lần thứ tư nhắc cùng một checklist, đây rõ ràng là một skill.

Bước 1: Tạo folder

mkdir -p ~/.claude/skills/register-flow
touch ~/.claude/skills/register-flow/SKILL.md

Bước 2: Viết frontmatter

---
name: register-flow
description: >
  Thiết kế luồng đăng ký cho form, landing page, webinar, khóa học,
  hoặc tài khoản mới. Trigger khi user nói "tạo form đăng ký",
  "register flow", "page đăng ký", "màn hình đăng ký",
  "đăng ký webinar", "đăng ký khóa học".
---

Bước 3: Viết body — 6 sections thiết yếu

# Register Flow Skill

## Khi thực hiện

Thiết kế luồng đăng ký cho người dùng mới, khách hàng tiềm năng, hoặc người tham gia sự kiện. Mục tiêu là giúp user có form ngắn gọn, copy rõ ràng, xử lý lỗi tốt, và bước sau đăng ký mạch lạc.

## Input cần có

- Người dùng đang đăng ký gì: tài khoản, webinar, khóa học, ebook, tư vấn
- Mục tiêu sau khi đăng ký: vào dashboard, nhận email, đặt lịch, thanh toán
- Thông tin bắt buộc cần thu thập
- Brand tone: chuyên nghiệp, thân thiện, trẻ trung, cao cấp
- Nếu thiếu mục tiêu sau khi đăng ký, hỏi lại trước khi thiết kế flow

## Quy tắc / conventions

- Form càng ngắn càng tốt; chỉ hỏi trường thật sự cần
- Label phải rõ nghĩa, không dùng placeholder thay label
- Error message phải chỉ rõ người dùng cần sửa gì
- Success state phải nói rõ bước tiếp theo
- Không thu thập thông tin nhạy cảm nếu chưa có lý do rõ ràng
- Nếu có checkbox đồng ý nhận email, copy phải minh bạch

## Quy trình thực hiện

1. Xác định mục tiêu đăng ký và đối tượng người dùng
2. Chọn các field cần có trong form
3. Viết label, helper text, placeholder nếu cần
4. Viết error message cho từng lỗi phổ biến
5. Thiết kế success state sau khi submit
6. Viết follow-up email hoặc message nếu user yêu cầu
7. Vẽ flow bằng Mermaid nếu luồng có nhiều bước

Ví dụ flow đăng ký webinar:

1. User mở landing page
2. User nhập tên và email
3. User submit form
4. Hệ thống hiển thị success message
5. User nhận email xác nhận có link tham gia

## Output format

Trả về theo format:

1. **Flow summary:** luồng đăng ký gồm những bước nào
2. **Form fields:** field, label, required/optional, helper text
3. **Error messages:** thông báo lỗi cho từng tình huống
4. **Success state:** nội dung sau khi đăng ký thành công
5. **Follow-up:** email hoặc tin nhắn nếu cần
6. **Mermaid flow:** chỉ thêm nếu flow có nhiều bước

## Lưu ý / tránh làm

- Không hỏi quá nhiều thông tin chỉ để "cho đủ form"
- Không dùng error message kiểu "Invalid input" quá chung chung
- Không hứa email, ưu đãi, hoặc quà tặng nếu user chưa xác nhận
- Không tự thêm trường số điện thoại nếu mục tiêu chỉ là nhận ebook

Bước 4: Test với 3 prompt variations

Prompt 1: "Tạo form đăng ký webinar cho khóa học AI"
Prompt 2: "Làm register flow cho ebook miễn phí"
Prompt 3: "Viết màn hình success sau khi user đăng ký tư vấn"
Cả ba nên trigger skill. Nếu không trigger, kiểm tra lại description — thêm keyword từ prompt variation đó vào description.

Bước 5: Iterate

Sau vài lần dùng, bạn nhận ra Claude đôi khi tạo form quá dài. Thêm vào body:
## Độ dài form

- Form tối giản: 1-2 field
- Form tiêu chuẩn: 3-4 field
- Form dài: chỉ dùng khi có lý do nghiệp vụ rõ ràng

Nếu user chưa nói rõ, ưu tiên form tối giản.
Tune description và body dựa trên thực tế dùng là process bình thường — skill tốt thường mất 2-3 lần iterate.

Case studies theo role

Product/UX team: skill login-flow

Vấn đề: Mỗi lần làm màn hình đăng nhập, team phải nhắc lại cùng một checklist: login bằng email, forgot password, social login, lỗi sai mật khẩu, trạng thái loading, và copy cho user mới. Skill:
---
name: login-flow
description: Thiết kế luồng đăng nhập cho website hoặc app: email login,
forgot password, social login, error message, loading state, success state.
Trigger khi "login flow", "màn hình đăng nhập", "forgot password",
"đăng nhập bằng Google", "login page".
---
Body: Checklist các trạng thái của màn hình login, copy cho từng lỗi phổ biến, quy tắc không tiết lộ tài khoản có tồn tại hay không, và output format gồm flow summary, field list, error messages, success state. Kết quả: Team có login flow nhất quán, user hiểu cần làm gì khi đăng nhập lỗi, và Claude không cần được nhắc lại từng trạng thái.

Marketing team: skill campaign-landing-page

Vấn đề: Mỗi chiến dịch mới cần một landing page khác nhau, nhưng cấu trúc trang, tone of voice, CTA, FAQ và bằng chứng xã hội luôn theo cùng một chuẩn brand. Skill:
---
name: campaign-landing-page
description: Tạo landing page cho chiến dịch marketing theo brand voice,
offer structure, CTA, FAQ và social proof. Trigger khi "landing page",
"campaign page", "trang bán hàng", "lead magnet", "webinar page".
---
Body: Cấu trúc section chuẩn, checklist thông tin cần hỏi, quy tắc viết headline, format CTA, và điều cấm như không bịa testimonial hoặc số liệu. Kết quả: Người viết nội dung chỉ cần nói sản phẩm và audience. Claude tự tạo outline, copy, CTA và FAQ theo chuẩn.

Education team: skill course-registration

Vấn đề: Mỗi khóa học mới cần trang đăng ký, email xác nhận, reminder trước buổi học, và câu trả lời cho các thắc mắc phổ biến. Skill:
---
name: course-registration
description: Tạo luồng đăng ký khóa học gồm form fields, success message,
email xác nhận, reminder và FAQ. Trigger khi "đăng ký khóa học",
"course registration", "form khóa học", "email xác nhận học viên".
---
Body: Các field tối thiểu cần thu thập, template email xác nhận, reminder trước buổi học, chính sách đổi lịch/hoàn tiền nếu có, và checklist tránh hỏi quá nhiều thông tin. Kết quả: Mỗi khóa học có luồng đăng ký giống nhau, học viên nhận thông tin rõ ràng, team không phải viết lại từ đầu.

Customer support: skill faq-answer

Vấn đề: Support team thường trả lời lặp lại các câu hỏi như “tôi chưa nhận email”, “đổi lịch thế nào”, “có hoàn tiền không”, nhưng mỗi người viết một kiểu. Skill:
---
name: faq-answer
description: Viết câu trả lời FAQ theo tone hỗ trợ khách hàng: rõ ràng,
ngắn gọn, lịch sự, có bước tiếp theo. Trigger khi "trả lời FAQ",
"support reply", "khách hỏi", "email hỗ trợ", "tin nhắn support".
---
Body: Tone of voice, cấu trúc trả lời 3 phần (xác nhận vấn đề, hướng dẫn bước tiếp theo, lời mời phản hồi), danh sách câu không nên dùng, và escalation rule khi vấn đề liên quan thanh toán.

Operations team: skill meeting-summary

Vấn đề: Sau mỗi cuộc họp, team cần summary, decisions, action items, owner, deadline. Nếu làm thủ công, format dễ bị lệch và action item dễ bị bỏ sót. Skill:
---
name: meeting-summary
description: Tóm tắt meeting notes hoặc transcript thành decisions,
action items, owner, deadline và open questions. Trigger khi "meeting summary",
"tóm tắt cuộc họp", "biên bản họp", "action items", "recap meeting".
---
Body: Template summary, cách phân biệt decision với discussion, format action item, quy tắc đánh dấu owner/deadline chưa rõ để hỏi lại.

Marketing/Content team: skill blog-seo-check

Vấn đề: Content writer dùng Claude để viết blog post nhưng hay quên check SEO basics trước khi publish. Skill:
---
name: blog-seo-check
description: Audit blog post cho SEO: headers, meta description, internal
links, image alt text, keyword density. Trigger khi "seo check",
"review bài viết", "before publish", "audit content".
---
Body: Checklist H1/H2 structure, meta description 150-160 chars, internal link tối thiểu 2-3, image có alt text, focus keyword xuất hiện trong title + first paragraph + một H2, readability (Flesch score).

Khi nào tạo Skill? — Decision flowchart

Tóm tắt quy tắc:
  • Xảy ra guaranteed mỗi lần event? → Hook
  • Bạn muốn explicit invoke? → Slash command
  • Relevant mọi task? → CLAUDE.md
  • Pattern lặp, task-specific, auto-trigger? → Skill

Anti-patterns

Anti-pattern 1: Description quá generic

# WRONG
description: "Giúp Claude làm marketing tốt hơn"

# RIGHT
description: "Tạo landing page cho khóa học, webinar, ebook, hoặc dịch vụ tư vấn.
Trigger khi 'tạo landing page', 'làm trang bán hàng', 'page đăng ký',
'sales page', 'trang giới thiệu khóa học'."
Description generic → Claude trigger nhầm (load skill khi không cần) hoặc không trigger đúng lúc cần.

Anti-pattern 2: Description quá cứng nhắc

# WRONG
description: "Chỉ trigger khi user gõ đúng chữ 'tạo landing page khóa tiếng Anh màu xanh light mode'"

# RIGHT
description: "Trigger khi user đề cập landing page, trang bán hàng,
page đăng ký, sales page, webinar page, lead magnet — dù phrasing khác nhau."
Skill không trigger = skill vô dụng.

Anti-pattern 3: Nhồi mọi thứ vào 1 skill khổng lồ

WRONG:
skills/
└── everything/
    └── SKILL.md (500+ dòng, cover landing page + login + register + SEO + email)
Khi match, toàn bộ 500 dòng load vào context. Thay vào đó:
RIGHT:
skills/
├── landing-page/ (chỉ tạo landing page)
├── login-flow/ (chỉ luồng đăng nhập)
├── register-flow/ (chỉ luồng đăng ký)
└── blog-seo-check/ (chỉ SEO bài viết)
Mỗi skill nhỏ, focused. Chỉ load khi thực sự cần.

Anti-pattern 4: Hardcode paths và thông tin cá nhân

# WRONG — trong SKILL.md body
Logo luôn nằm ở `/Users/alice/Desktop/logo-final-v7.png`
Mặc định mọi landing page dùng số hotline cá nhân của Alice

# RIGHT
Logo: dùng asset trong thư mục brand của project, hoặc hỏi user nếu chưa có
Hotline: lấy từ brand guideline hoặc hỏi user trước khi đưa lên trang
Hardcode paths → skill chỉ dùng được trên máy của một người. Hardcode thông tin liên hệ → outdated sau 3 tháng.

Anti-pattern 5: Nhầm skill với hook

Nếu bạn muốn tự động format file, tạo backup, hoặc chạy một bước kiểm tra sau MỖI lần Claude edit file — đó không phải skill, đó là hook (xem Bài 2.11). Skill là kiến thức Claude áp dụng khi recognize task type. Hook là automation chạy mỗi khi event xảy ra, guaranteed, không cần Claude “nhận ra”. Dấu hiệu bạn đang dùng skill cho việc của hook: bạn viết trong description “Trigger EVERY TIME Claude edits a file” — “every time” + “event” = hook territory.

Anti-pattern 6: Personal skill trong project repo (hoặc ngược lại)

Personal skill chứa style cá nhân (“Viết nội dung theo giọng của tôi”) → đừng checked in vào project repo, vì mọi teammate sẽ thấy Claude viết theo style của bạn, không phải của họ. Team standard skill (“Landing page phải đúng brand checklist này”) → phải vào project .claude/skills/, không phải personal ~/.claude/skills/, vì teammate cần có skill này khi clone repo.

Anti-pattern 7: Không version skill khi brand hoặc quy trình thay đổi

Skill brand-voice được viết năm 2024 khi công ty dùng tone trẻ trung, vui vẻ. Năm 2025 công ty rebrand sang premium và nghiêm túc hơn. Skill cũ vẫn còn trong .claude/skills/ nhưng instructions không còn đúng. Cách tránh: treat skill như tài liệu sống. Khi brand, sản phẩm, hoặc quy trình thay đổi, update hoặc archive skill cũ. Có thể thêm version note trong skill header:
<!-- Last updated: 2026-01 — rebrand to premium voice -->

Mẹo nâng cao

Mẹo 1: Test description với 5 variations trước khi deploy

Trước khi dùng skill trong production, thử 5 cách gõ khác nhau để trigger:
Variation 1: "Tạo landing page cho khóa học tiếng Anh"
Variation 2: "Làm trang đăng ký webinar AI"
Variation 3: "Viết sales page cho dịch vụ tư vấn"
Variation 4: "Need a landing page for my ebook"
Variation 5: "Tạo page thu lead cho workshop cuối tuần"
Skill tốt nên trigger cả 5. Nếu miss 2/5, tune lại description — thêm keywords từ những variation bị miss.

Mẹo 2: Composable skills

Skill không cần standalone. Skill campaign-landing-page có thể reference checklist của skill brand-voice:

Bước 1: Xác định brand voice

Đọc brand voice hiện tại: tone, từ nên dùng, từ cần tránh, cách viết CTA, và mức độ trang trọng.

Bước 2: Áp dụng vào landing page

Nếu project có skill brand-voice available, dùng nó để giữ tone nhất quán. Nếu không, follow format mặc định: headline rõ lợi ích, body copy ngắn, CTA dùng động từ cụ thể, không bịa testimonial.

Mẹo 3: Tham khảo real skill example

Reference skills trong repo của bạn (thư mục skills/ hoặc .claude/skills/) là ví dụ real của một skill phức tạp — có frontmatter, có multi-phase workflow, có reference files, có principles. Đọc nó để hiểu skill có thể scale đến mức độ phức tạp nào. Anthropic cũng có course riêng về Agent Skills: Introduction to Agent Skills — nên xem sau khi hoàn thành bài này.

Mẹo 4: Skill template trong organization

Nếu bạn là team lead của một team lớn, tạo “skill template repo” — một repo riêng chứa các skill cơ bản mà mọi project nên có. Thành viên mới fork repo đó vào personal ~/.claude/skills/, xong là có ngay bộ skill cơ bản. Ví dụ structure:
team-claude-skills/
├── README.md
├── brand-voice/ (tone of voice của công ty)
├── landing-page-standard/ (cấu trúc landing page chuẩn)
├── login-register-flow/ (copy và UX cho login/register)
└── blog-seo-check/ (SEO checklist cho bài viết)

Mẹo 5: Document trigger keywords rõ ràng trong description

Thay vì hy vọng Claude suy ra, hãy explicit:
description: "... Trigger khi user dùng các từ/phrase sau:
VI: 'tạo landing page', 'trang bán hàng', 'page đăng ký', 'thu lead'
EN: 'landing page', 'sales page', 'registration page', 'lead magnet'"
Multi-language trigger list đặc biệt hữu ích nếu team của bạn mix tiếng Anh và tiếng Việt.

Áp dụng ngay

Bài tập 1 (20 phút): Viết skill đầu tiên của bạn

Bước 1: Nghĩ về 3 tháng gần nhất. Bạn đã nhắc Claude cùng một thứ ít nhất 3 lần chưa? Ghi ra:
Pattern lặp: ________________________________
Ví dụ câu nhắc: ______________________________
Tần suất: _____ lần/tháng
Bước 2: Tạo skill folder:
# Personal skill (chỉ cho bạn)
mkdir -p ~/.claude/skills/ten-skill-cua-ban

# Project skill (cả team)
mkdir -p .claude/skills/ten-skill-cua-ban
Bước 3: Viết SKILL.md với frontmatter và body. Checklist:
  • name ngắn, kebab-case
  • description có mô tả scope + ít nhất 3 trigger phrases
  • Body có đủ 6 phần: Khi thực hiện, Input cần có, Quy tắc / conventions, Quy trình thực hiện, Output format, Lưu ý / tránh làm
  • Không hardcode paths hoặc thông tin cá nhân
Bước 4: Test với 3 prompt variations khác nhau. Skill trigger cả 3? Nếu không, tune description. Bước 5: Dùng skill trong 1 tuần, ghi lại:
  • Số lần trigger đúng: ______
  • Số lần trigger nhầm (false positive): ______
  • Số lần miss (bạn cần nhắc mà skill không trigger): ______
Dựa vào data đó để iterate.

Bài tập 2 (15 phút): Khám phá skills hiện có

Bước 1: Check xem bạn đang có skills nào:
# Personal skills
ls ~/.claude/skills/ 2>/dev/null || echo "Chưa có personal skills"

# Project skills (từ trong project folder)
ls .claude/skills/ 2>/dev/null || echo "Chưa có project skills"
Bước 2: Đọc SKILL.md của một skill có sẵn. Trigger keywords là gì? Scope là gì? Bước 3: Thử invoke skill đó với 2-3 prompt variations. Hoạt động như expected không? Bước 4: Nếu chưa có skill nào, vào Introduction to Agent Skills để xem Anthropic cung cấp skill template gì.

Tóm tắt

5 takeaways từ bài này: 🎯 Skill = kiến thức dạy một lần, Claude tự apply mãi mãi. Pattern lặp ≥3 lần là tín hiệu rõ ràng cần viết skill. 🎯 Description là linh hồn của skill. Claude dùng description để quyết định trigger — quá generic trigger nhầm, quá specific bỏ sót. Cần balance và test với nhiều prompt variations. 🎯 Personal skill theo bạn, project skill theo repo. Không nhầm hai loại — đặt sai chỗ gây ra inconsistency trong team hoặc mất skill khi đổi máy. 🎯 Skill tiết kiệm context hơn CLAUDE.md cho task-specific knowledge. Skill chỉ load khi match — checklist landing page không ngồi trong context khi bạn đang làm task khác (xem Bài 2.5). 🎯 Skill không thay thế được hook hay slash command — mỗi công cụ có use case riêng. Hiểu bảng so sánh để dùng đúng tool cho đúng job.

Bài tiếp theo

Bạn đã hiểu Skills — cách dạy Claude một kỹ năng cụ thể và để nó tự nhận ra khi nào cần dùng. Bài tiếp theo đi sâu vào MCP (Model Context Protocol) — cách kết nối Claude với các công cụ và dữ liệu bên ngoài: database, API, Figma, Linear, GitHub, Slack. Nếu skill là “dạy Claude cách làm việc của bạn”, thì MCP là “cho Claude thêm tay để với tới các công cụ bạn đang dùng hàng ngày”. Hai thứ complement nhau — và Bài 2.10 sẽ chỉ ra khi nào dùng MCP thay vì tạo skill (hint: nếu CLI tool đã có sẵn và documented tốt, thường không cần MCP). ➡️ Bài tiếp theo: Bài 2.10 — MCP: Kết nối Claude với thế giới bên ngoài

Tài liệu tham khảo

  • Introduction to Agent Skills — Course chuyên sâu của Anthropic về Agent Skills
  • Claude Code documentation — Skills — Official reference
  • Bài 2.5 — Quản lý Context: lý do skill tiết kiệm context hơn CLAUDE.md
  • Bài 2.7 — File CLAUDE.md: khi nào dùng CLAUDE.md thay vì skill
  • Bài 2.8 — Subagents: skill vs subagent (hai sides of the same coin)
  • Bài 2.10 — MCP: skill thay thế MCP CLI tools trong nhiều trường hợp
  • Bài 2.11 — Hooks: khi nào hook thay skill cho deterministic automation
Khoá học “Claude Code 101” — bản tiếng Việt v1.0Bản quyền 2026 Anthropic. Mọi quyền được bảo lưu.