Learn > Claude > Introduction to Agent Skills

Introduction to Agent Skills

Skill là folder chỉ dẫn (SKILL.md) Claude Code tự khám phá và nạp on demand khi yêu cầu khớp description: tạo skill, bộ field metadata, allowed-tools, progressive disclosure, thứ tự ưu tiên Enterprise → Personal → Project → Plugins, ba cách chia sẻ cho team, và checklist troubleshooting.

  • Skill là một folder chỉ dẫn mà Claude Code tự khám phá và dùng để xử lý một loại tác vụ chuẩn hơn; lõi của nó là file SKILL.md với name và description trong YAML frontmatter, còn phần body là chỉ dẫn thật.
  • Description là cơ chế routing: mỗi khi người dùng gửi yêu cầu, Claude so yêu cầu đó với description của mọi skill khả dụng và activate những skill khớp.
  • Personal skill nằm ở ~/.claude/skills và theo người dùng qua mọi project; project skill nằm ở .claude/skills trong root repository và được commit vào version control nên cả team dùng chung.
  • Skill nạp on demand — khác CLAUDE.md (nạp vào mọi hội thoại) và slash command (phải gõ tay); ban đầu Claude chỉ nạp name và description nên skill không chiếm context window.
  • Rule of thumb: nếu phải giải thích cùng một thứ cho Claude nhiều lần thì đó là một skill đang chờ được viết.
  • Một skill là một directory có tên khớp tên skill, bên trong chứa file SKILL.md; Claude Code quét bốn vị trí lúc startup nên mọi thay đổi — tạo, sửa, xoá — đều cần restart mới có hiệu lực.
  • Claude khớp yêu cầu với description bằng semantic matching (khớp theo ý định, không phải khớp từ khoá), và luôn hỏi xác nhận trước khi nạp toàn bộ nội dung skill vào context.
  • Thứ tự ưu tiên khi trùng tên skill là Enterprise → Personal → Project → Plugins; personal skill thắng project skill, còn plugin xếp cuối.
  • Frontmatter theo agent skills open standard có bốn field: name và description bắt buộc (name tối đa 64 ký tự, chỉ chữ thường/số/gạch ngang; description tối đa 1.024 ký tự), allowed-tools và model tuỳ chọn.
  • allowed-tools giới hạn tool Claude được dùng khi skill active — hợp với read-only và security-sensitive workflow; bỏ trống field này nghĩa là KHÔNG giới hạn gì, Claude dùng permission model bình thường.
  • Progressive disclosure: giữ SKILL.md dưới 500 dòng, đẩy chi tiết ra scripts/, references/, assets/ và link kèm chỉ dẫn khi nào nạp — như có mục lục trong context window thay vì cả cuốn sách.
  • Script trong skill directory chạy được mà không cần nạp nội dung vào context: chỉ output tốn token — nhưng phải viết rõ trong SKILL.md là bảo Claude CHẠY script chứ không phải ĐỌC nó.
  • Skill thêm kiến thức vào chính hội thoại đang chạy, còn subagent chạy ở context tách biệt rồi trả kết quả về — chọn subagent khi cần delegate, cần tool access khác main conversation, hoặc cần isolation.
  • Hook là event-driven (chạy khi save file, trước tool call), skill là request-driven (kích hoạt theo điều người dùng đang hỏi); MCP server là phạm trù hoàn toàn khác — nó cung cấp tool và integration bên ngoài.
  • Setup điển hình dùng cả năm: CLAUDE.md cho standard luôn bật, skill cho expertise theo task, hook cho thao tác tự động theo event, subagent cho việc delegate ở context cách ly, MCP cho tool bên ngoài — đừng ép mọi thứ vào skill.
  • Ba cách chia sẻ skill: commit vào .claude/skills của repo (ai clone là có), đóng gói vào plugin rồi phát hành lên marketplace (dùng chung xuyên project), và enterprise managed settings (deploy toàn tổ chức, ưu tiên cao nhất — dành cho chuẩn bắt buộc, security và compliance).
  • Subagent KHÔNG tự thấy skill: nó khởi đầu với context sạch. Built-in agent không truy cập được skill; custom subagent trong .claude/agents thì dùng được nhưng phải liệt kê tường minh ở field skills trong frontmatter, và skill được nạp lúc subagent START chứ không phải on demand.
  • Troubleshooting theo ba tầng: Claude không biết skill tồn tại (không load — lỗi path, tên file SKILL.md, YAML), biết mà không chọn (không trigger hoặc chọn nhầm — lỗi description), hoặc chọn rồi mà chạy hỏng (runtime — dependency, permission, path separator).
  • Skill không trigger thì nguyên nhân gần như luôn là description: test bằng nhiều biến thể của cách hỏi, biến thể nào không trigger thì thêm chính keyword đó vào description.
  • Skill không load thì kiểm tra hai yêu cầu cấu trúc: SKILL.md phải nằm trong một directory có tên (không để ở root thư mục skills) và tên file phải đúng chính xác SKILL.md — SKILL viết hoa, md viết thường; chạy claude --debug để xem lỗi loading.

TL;DRSkill là folder chỉ dẫn Claude Code tự khám phá rồi dùng khi gặp đúng loại việc. Lõi là file SKILL.md với name + description trong YAML frontmatter; description chính là thứ Claude dùng để khớp yêu cầu và activate skill. Personal skill ở ~/.claude/skills, project skill ở .claude/skills. Khác CLAUDE.md (nạp mọi hội thoại) và slash command (phải gõ tay), skill nạp on demand.

Vấn đề skill giải quyết

Mỗi lần giải thích coding standard của team cho Claude là một lần lặp lại chính mình. Mỗi lần review PR lại mô tả lại cách muốn feedback được cấu trúc. Mỗi commit message lại nhắc lại format ưa dùng.

Skill sửa đúng chỗ đó: một file markdown dạy Claude cách làm một việc — một lần. Sau đó Claude tự áp dụng mỗi khi việc ấy xuất hiện.

Skill là gì

Skill là folder chứa chỉ dẫn và resource mà Claude Code có thể discover (khám phá) rồi dùng để xử lý tác vụ chính xác hơn. Mỗi skill sống trong một file SKILL.md, có namedescription trong frontmatter:

---
name: pr-review
description: Reviews pull requests for code quality. Use when reviewing PRs or checking code changes.
---

Dưới frontmatter là chỉ dẫn thật: checklist review, format ưa dùng, hoặc bất cứ gì Claude cần biết cho tác vụ đó.

Description quyết định skill có được dùng

description là cách Claude quyết định có dùng skill hay không — không phải mô tả suông cho người đọc. Khi người dùng nhờ review một PR, Claude đọc yêu cầu, so với description của mọi skill khả dụng, rồi activate những cái khớp.

Nói cách khác: descriptioncơ chế routing. Skill không được gọi như mong đợi → chỗ cần sửa đầu tiên chính là nó.

Skill lưu ở đâu

Tuỳ ai cần dùng:

Loại Đường dẫn Phạm vi Hợp với
Personal skill ~/.claude/skills (home directory) Theo người dùng qua mọi project Style commit message, format tài liệu, cách muốn code được giải thích
Project skill .claude/skills (root repository) Ai clone repo cũng có Chuẩn của team: brand guideline, font, màu cho web design

Trên Windows, personal skill nằm ở C:/Users/<user>/.claude/skills.

Project skill được commit vào version control cùng code, nên cả team dùng chung.

Skill vs CLAUDE.md vs Slash command

Claude Code có nhiều cách tuỳ biến hành vi. Skill đặc biệt ở chỗ nó tự độnggắn với tác vụ:

Cơ chế Nạp khi nào Ví dụ hợp
CLAUDE.md Nạp vào mọi hội thoại Muốn Claude luôn dùng TypeScript strict mode
Skill On demand, khi khớp description Checklist review PR — không cần nằm trong context lúc đang debug
Slash command Chỉ khi gõ tay Việc người dùng chủ động gọi

Chi tiết quan trọng: ban đầu Claude chỉ nạp namedescription, không nạp cả nội dung skill → skill không lấp đầy context window. Khớp rồi mới nạp phần thân. Khi một skill được match, có thể thấy nó load ngay trên terminal.

Tạo một skill từ đầu

Ví dụ: một personal skill dạy Claude viết PR description theo format nhất quán. Vì là personal skill, nó nằm ở home directory và dùng được ở mọi project.

Bước 1 — tạo directory trong thư mục skills. Tên directory khớp tên skill:

mkdir -p ~/.claude/skills/pr-description

Bước 2 — tạo file SKILL.md bên trong directory đó. File gồm hai phần, ngăn nhau bởi dấu gạch frontmatter:

---
name: pr-description
description: Writes pull request descriptions. Use when creating a PR, writing a PR, or when the user asks to summarize changes for a pull request.
---

When writing a PR description:

1. Run `git diff main...HEAD` to see all changes on this branch
2. Write a description following this format:

## What
One sentence explaining what this PR does.

## Why
Brief context on why this change is needed

## Changes
- Bullet points of specific changes made
- Group related changes together
- Mention any files deleted or renamed
  • name — định danh skill.
  • description — nói cho Claude biết khi nào dùng skill; đây chính là matching criteria.
  • Mọi thứ sau dấu gạch thứ hai — chỉ dẫn Claude làm theo khi skill được activate.

Test skill

Claude Code nạp skill lúc startup, nên phải restart session sau khi tạo. Kiểm tra bằng cách xem danh sách skill khả dụng — skill mới phải có trong đó.

Test thật: sửa vài chỗ trên một branch rồi nói "write a PR description for my changes". Claude sẽ báo là đang dùng pr-description skill, chạy git diff và viết description đúng template — mỗi lần đều giống nhau.

Cơ chế matching hoạt động ra sao

Bốn bước:

# Điều gì xảy ra
1 Lúc startup, Claude Code quét bốn vị trí chứa skill nhưng chỉ nạp name + descriptionkhông nạp nội dung.
2 Người dùng gửi tin nhắn → Claude so tin nhắn với description của mọi skill khả dụng.
3 Khớp rồi → Claude hỏi xác nhận trước khi nạp skill.
4 Xác nhận xong → Claude đọc trọn SKILL.md và làm theo chỉ dẫn.

Việc khớp là semantic matching — khớp theo ý định (intent), không phải theo từ khoá. Ví dụ "explain what this function does" vẫn khớp một skill mô tả là "explain code with visual diagrams"intent trùng nhau.

Bước confirmation ở (3) giữ cho người dùng biết context nào đang được kéo vào — skill không tự nạp nội dung một cách im lặng.

Skill priority

Clone một repo có skill trùng tên với skill cá nhân thì cái nào thắng? Có thứ tự rõ ràng, cao → thấp:

# Nguồn Ghi chú
1 Enterprise Managed settings — ưu tiên cao nhất
2 Personal Home directory (~/.claude/skills)
3 Project .claude/skills trong repository
4 Plugins Plugin đã cài — thấp nhất

Thứ tự này cho phép tổ chức ép chuẩn qua enterprise skill mà vẫn để cá nhân tuỳ biến. Ví dụ: công ty có enterprise skill code-review, mình tự tạo personal skill cũng tên code-reviewbản enterprise thắng.

Cách tránh xung đột: đặt tên mô tả rõ. Đừng đặt review, hãy frontend-review hoặc backend-review.

Update & remove

  • Update — sửa file SKILL.md của skill đó.
  • Removexoá directory của skill (skill là một directory, không phải file lẻ).
  • Luôn restart Claude Code sau mọi thay đổi thì mới có hiệu lực.

Bộ field metadata đầy đủ

Agent skills open standard hỗ trợ bốn field trong frontmatter của SKILL.mdhai bắt buộc, hai tuỳ chọn:

Field Bắt buộc Vai trò & giới hạn
name Định danh skill. Chỉ chữ thường, số và dấu gạch ngang. Tối đa 64 ký tự. Nên khớp tên directory.
description Nói cho Claude biết khi nào dùng skill. Tối đa 1.024 ký tự. Field quan trọng nhất — Claude dùng nó để matching.
allowed-tools Giới hạn tool Claude được dùng khi skill active.
model Chỉ định model chạy skill.

Viết description hiệu quả

Hãy explicit với chỉ dẫn. Nếu ai đó bảo ta "việc của bạn là giúp về docs" thì ta không biết phải làm gìClaude nghĩ y hệt như vậy.

Một description tốt trả lời đúng hai câu hỏi:

  1. Skill này làm gì?
  2. Khi nào Claude nên dùng nó?

Skill không trigger như mong đợi → thêm keyword khớp với cách ta thật sự diễn đạt yêu cầu. Description chính là thứ Claude dùng để quyết định skill có liên quan hay không, nên ngôn ngữ trong đó rất quan trọng.

Giới hạn tool bằng allowed-tools

Đôi khi ta muốn một skill chỉ đọc file, không sửa — hợp với security-sensitive workflow, tác vụ read-only, hoặc bất cứ tình huống nào cần guardrail.

---
name: codebase-onboarding
description: Helps new developers understand the system works.
allowed-tools: Read, Grep, Glob, Bash
model: sonnet
---

Ở ví dụ này allowed-toolsRead, Grep, Glob, Bash: khi skill active, Claude chỉ dùng được đúng các tool đó mà không cần hỏi permissionkhông edit, không write.

⚠️ Bỏ hẳn allowed-tools = KHÔNG giới hạn gì. Claude dùng permission model bình thường của nó. Không khai báo không đồng nghĩa với cấm hết tool.

Progressive disclosure

Skill dùng chung context window với hội thoại. Khi Claude activate một skill, toàn bộ nội dung SKILL.md được nạp vào context. Nhưng đôi khi skill cần reference, ví dụ, hoặc utility script đi kèm.

Nhồi hết vào một file 2.000 dònghai vấn đề: chiếm nhiều context window, và maintain rất khổ.

Progressive disclosure giải quyết: giữ chỉ dẫn cốt lõi trong SKILL.md, đẩy tài liệu chi tiết sang file riêng mà Claude chỉ đọc khi cần.

Open standard gợi ý cấu trúc skill directory:

Thư mục Chứa gì
scripts/ Code chạy được (executable)
references/ Tài liệu bổ sung
assets/ Ảnh, template, hoặc data file khác

Trong SKILL.md, link tới file phụ kèm chỉ dẫn rõ ràng về khi nào nạp chúng. Ví dụ: Claude chỉ đọc architecture-guide.md khi có người hỏi về system design; nếu chỉ hỏi "thêm component vào đâu" thì file đó không bao giờ được nạp. Giống như có mục lục trong context window thay vì cả cuốn sách.

Rule of thumb: giữ SKILL.md dưới 500 dòng. Vượt ngưỡng đó → cân nhắc tách nội dung sang reference file riêng.

Dùng script hiệu quả

Script trong skill directory chạy được mà không cần nạp nội dung vào context: script thực thi, và chỉ output tốn token.

Chỉ dẫn then chốt phải viết trong SKILL.md: bảo Claude CHẠY script, đừng ĐỌC nó.

Đặc biệt hữu ích cho:

  • Environment validation
  • Data transformation cần nhất quán
  • Thao tác đáng tin cậy hơn khi là code đã test thay vì code sinh ra tại chỗ

Chọn đúng cơ chế: skill vs CLAUDE.md, subagent, hook, MCP

Claude Code có nhiều cơ chế tuỳ biến — Skills, CLAUDE.md, subagents, hooks, MCP servers. Chúng giải những bài toán khác nhau, và chọn sai dẫn tới phức tạp hoá vô ích.

CLAUDE.md vs Skills — luôn bật vs theo yêu cầu

CLAUDE.md nạp vào mọi hội thoại, luôn luôn. Skill nạp on demand: khớp yêu cầu thì chỉ dẫn của nó nhập vào hội thoại.

Dùng CLAUDE.md cho Dùng Skill cho
Project-wide standard luôn áp dụng Task-specific expertise
Constraint — vd "never modify the database schema" Kiến thức chỉ đôi khi mới liên quan
Framework preference và coding style Thủ tục chi tiết — nhét vào mọi hội thoại thì thành rác

Skills vs Subagents — context hiện tại vs context tách biệt

Skill thêm kiến thức vào hội thoại hiện tại: activate thì chỉ dẫn của nó nhập vào context đang có. Subagent chạy ở context riêng: nhận task, làm việc độc lập, trả kết quả vềcách ly khỏi hội thoại chính.

Dùng Subagent khi Dùng Skill khi
Muốn delegate task sang execution context riêng Muốn nâng kiến thức của Claude cho task hiện tại
Cần tool access khác main conversation Expertise áp dụng xuyên suốt hội thoại
Muốn isolation giữa việc được giao và context chính

Skills vs Hooks — event-driven vs request-driven

Hook kích hoạt theo sự kiện: chạy linter mỗi lần Claude save file, validate input trước một số tool call. Skill kích hoạt theo điều người dùng đang hỏi.

Dùng Hook cho Dùng Skill cho
Thao tác phải chạy mỗi lần save file Kiến thức định hướng cách Claude xử lý yêu cầu
Validation trước tool call cụ thể Guideline ảnh hưởng tới lập luận của Claude
Side effect tự động của hành động Claude

MCP servers

Cung cấp tool và integration bên ngoàimột phạm trù hoàn toàn khác với skill.

Ghép tất cả lại

Một setup điển hình:

Cơ chế Chuyên môn
CLAUDE.md Always-on project standard
Skills Task-specific expertise, nạp on demand
Hooks Thao tác tự động, kích hoạt bởi event
Subagents Execution context cách ly cho việc được delegate
MCP servers Tool và integration bên ngoài

Mỗi cái lo đúng chuyên môn của nó. Đừng ép mọi thứ vào skill khi cơ chế khác hợp hơn — và hoàn toàn có thể dùng nhiều cái cùng lúc.

Dùng skill khi có kiến thức mà Claude nên tự động áp dụng lúc chủ đề trở nên liên quan, rồi kết hợp với các cơ chế còn lại để tuỳ biến toàn diện.

Chia sẻ skill: ba cách phân phối

Skill có giá trị hơn hẳn khi được chia sẻ. Một PR review skill chỉ mình dùng thì hữu ích; cùng skill đó chia cho cả team thì nó chuẩn hoá code review và tạo trải nghiệm nhất quán cho cả tổ chức.

1. Commit vào repository

Cách đơn giản nhất: đặt skill ở .claude/skills → ai clone repo là có ngay, không cần cài gì thêm. Push update → mọi người nhận ở lần pull kế tiếp.

Hợp với:

  • Team coding standard
  • Project-specific workflow
  • Skill tham chiếu cấu trúc codebase

Thư mục .claude chứa agents, hooks, skills và settings — tất cả version-controlled và chia sẻ với team qua Git workflow bình thường.

2. Phân phối qua plugin

Plugin là cách mở rộng Claude Code bằng chức năng tuỳ biến, thiết kế để chia sẻ xuyên team và project. Trong plugin project, tạo thư mục skills theo cấu trúc giống .claude: mỗi skill một folder riêng, bên trong có SKILL.md.

Phát hành plugin lên marketplace → người khác discover và install vào Claude Code của họ.

Hợp khi skill không quá project-specifichữu ích cho cộng đồng ngoài team trực tiếp.

3. Enterprise deployment qua managed settings

Administrator deploy skill toàn tổ chức qua managed settings. Enterprise skill có ưu tiên cao nhấtđè personal, project và plugin skill cùng tên.

Managed settings hỗ trợ strictKnownMarketplaces để kiểm soát plugin được cài từ đâu:

"strictKnownMarketplaces": [
  {
    "source": "github",
    "repo": "acme-corp/approved-plugins"
  },
  {
    "source": "npm",
    "package": "@acme-corp/compliance-plugins"
  }
]

Đây là lựa chọn đúng cho mandatory standard, security requirement, compliance workflow, và coding practice phải nhất quán toàn tổ chức. Từ khoá ở đây là "must".

Skill và Subagent

Điều làm nhiều người bất ngờ: subagent KHÔNG tự thấy skill của bạn. Delegate một task cho subagent = nó khởi đầu với context sạch tinh.

Ba phân biệt cần nắm:

Truy cập skill?
Built-in agent (Explorer, Plan, Verify) Không truy cập được skill — chấm hết
Custom subagent (định nghĩa trong .claude/agents) ✅ Được — nhưng chỉ khi liệt kê tường minh
Thời điểm nạp Skill được nạp lúc subagent START, không on demand như ở main conversation

⚠️ Lưu ý về danh sách built-in agent: bài này liệt kê Explorer, Plan, Verify, trong khi khoá Introduction to Subagents nói General purpose, Explore, Plan — bộ built-in agent thay đổi theo version của Claude Code. Thứ không đổi và đáng thuộc: built-in agent không dùng được skill; chỉ custom subagent trong .claude/agents mới dùng được.

Cách tạo custom subagent có skill: thêm file agent markdown vào .claude/agents (có thể dùng lệnh /agents để tạo tương tác). File agent sinh ra có field skills liệt kê skill cần nạp:

---
name: frontend-security-accessibility-reviewer
description: "Use this agent when you need to review frontend code for accessibility..."
tools: Bash, Glob, Grep, Read, WebFetch, WebSearch, Skill...
model: sonnet
color: blue
skills: accessibility-audit, performance-check
---

Delegate cho subagent này → nó có sẵn cả hai skill và áp dụng cho mọi lần review.

Thứ tự làm: đảm bảo skill đã tồn tại trong .claude/skills trước, rồi mới tạo subagent mới hoặc thêm field skills vào file agent có sẵn.

Pattern này chạy rất tốt khi:

  • Muốn delegate cách ly nhưng vẫn có expertise cụ thể
  • Subagent khác nhau cần skill khác nhau (frontend reviewer vs backend reviewer)
  • Muốn ép chuẩn trong việc được delegatekhông phải dựa vào prompt

Troubleshooting

Skill hỏng thì gần như luôn rơi vào vài nhóm đoán trước được: không trigger, không load, xung đột, hoặc fail lúc chạy. Tin tốt: hầu hết cách sửa đều đơn giản.

Bắt đầu bằng skills validator

Việc đầu tiên nên thử là lệnh agent skills verifier. Cách cài tuỳ hệ điều hành, nhưng dùng uv là cách nhanh nhất. Cài xong thì vào thư mục skill hoặc chạy từ bất cứ đâu.

Validator bắt các vấn đề cấu trúc trước khi ta tốn thời gian debug thứ khác.

Skill không trigger

Skill tồn tại, pass validation, nhưng Claude không dùng khi ta mong đợi. Nguyên nhân gần như luôn là description.

Claude dùng semantic matching, nên yêu cầu phải chồng lấn về nghĩa với description. Không đủ chồng lấn = không khớp. Cách xử lý:

  • Đối chiếu description với cách ta thật sự diễn đạt yêu cầu
  • Thêm trigger phrase mà người dùng thật sự nói
  • Test bằng nhiều biến thể: "help me profile this" · "why is this slow?" · "make this faster"
  • Biến thể nào không trigger → thêm chính keyword đó vào description

Skill không load

Hỏi Claude "what skills are available"không thấy skill của mình → kiểm tra hai yêu cầu cấu trúc:

  • File SKILL.md phải nằm TRONG một directory có tênkhông để ở root của thư mục skills.
  • Tên file phải đúng chính xác SKILL.mdSKILL viết hoa hết, md viết thường.

Chạy claude --debug để xem lỗi loading; tìm dòng có nhắc tên skill của mình. Nhiều khi chỉ vậy là ra ngay vấn đề.

Dùng nhầm skill

Claude dùng sai skill hoặc lẫn lộn giữa các skilldescription quá giống nhau. Làm chúng khác biệt hẳn.

Viết description càng cụ thể càng tốt không chỉ giúp Claude biết khi nào dùng skill, mà còn ngăn xung đột với những skill nghe na ná.

Xung đột priority

Personal skill bị phớt lờ → có thể một enterprise skill (hoặc skill ưu tiên cao hơn) đang trùng tên. Ví dụ: công ty có enterprise skill code-review, ta cũng có personal skill code-reviewbản enterprise thắng mọi lần.

Hai lựa chọn:

  1. Đổi tên skill của mình thành cái khác biệt hơn — thường là đường dễ hơn.
  2. Trao đổi với admin về enterprise skill đó.

Skill của plugin không xuất hiện

Clear cache → restart Claude Code → reinstall.

Vẫn không thấy → cấu trúc plugin có thể sai. Đây chính là lúc validator tool phát huy giá trị.

Runtime error

Skill load được nhưng fail lúc thực thi. Vài nguyên nhân thường gặp:

  • Missing dependency — skill dùng package ngoài thì package phải được cài. Thêm thông tin dependency vào description của skill để Claude biết cần những gì.
  • Permission issue — script cần quyền thực thi: chạy chmod +x lên mọi script mà skill tham chiếu.
  • Path separatordùng forward slash ở mọi nơi, kể cả trên Windows.

Checklist nhanh

Triệu chứng Xử lý
Không trigger? Cải thiện description, thêm trigger phrase
Không load? Kiểm tra path, tên file, cú pháp YAML
Dùng nhầm skill? Làm description khác biệt hẳn nhau
Bị che (shadowed)? Xem priority hierarchy, đổi tên nếu cần
Skill plugin mất tích? Clear cachereinstall
Runtime failure? Kiểm tra dependencies, permissions, paths

Khi nào dùng skill

Skill hợp nhất với kiến thức chuyên biệt áp dụng cho tác vụ cụ thể:

  • Code review standard của team
  • Commit message format ưa dùng
  • Brand guideline của tổ chức
  • Documentation template cho từng loại tài liệu
  • Debugging checklist cho một framework cụ thể

Rule of thumb gọn trong một câu: nếu thấy mình giải thích cùng một thứ cho Claude nhiều lần, đó là một skill đang chờ được viết.

Áp dụng thực tế

Ba cơ chế này ánh xạ khá sạch sang cách một team thật vận hành. CLAUDE.mdnội quy dán ở cửa — ai vào cũng đọc, mọi lúc; nên nó phải ngắn, vì dán nhiều quá thì hết tường. Slash commandgọi tên rồi ra lệnh — không gọi thì không có gì xảy ra. Skillcẩm nang trong tủ hồ sơ: ngoài gáy sách ghi "Quy trình review PR — dùng khi review PR hoặc kiểm tra thay đổi code", và người ta chỉ liếc gáy sách, đến lúc cần mới rút đúng cuốn ra đọc.

Hệ quả của việc "chỉ liếc gáy sách" là chỗ tôi thấy đáng nhớ nhất: gáy sách viết mơ hồ thì cuốn cẩm nang hay tới đâu cũng nằm im trong tủ. Đây đúng bằng bài học description ở subagent — Anthropic lặp lại cùng một pattern: thứ quyết định cái gì được kích hoạt luôn là dòng metadata, không phải phần nội dung. Nên khi skill không chạy, đừng viết lại chỉ dẫn cho hay hơn; sửa description trước.

Ranh giới personal vs project thì tôi đọc thẳng là ranh giới sở hữu: cái gì là khẩu vị cá nhân (tôi thích commit message viết thế nào) thì ở ~/.claude/skills — không ai phải chịu; cái gì là chuẩn chung cả team phải giống nhau thì ở .claude/skillsđi vào git như code. Chuẩn team mà nằm trong máy từng người thì mỗi người review một kiểu — vẫn là bài toán cũ, chỉ đổi chỗ chứa.

Nhưng priority order thì phá đúng cái ranh giới vừa vẽ — và đây là chỗ tôi thấy phải nhớ kỹ nhất bài này: Personal thắng Project. Trực giác nói "cụ thể hơn thì thắng", nên ta dễ mặc định project skill đè personal skill. Không phải. Nghĩa là: chuẩn team đặt trong repo KHÔNG bảo vệ được khỏi khẩu vị cá nhân — một dev có personal skill trùng tên là im lặng dùng bản của họ, repo không hay biết. Ở góc quản lý delivery, đây không phải bug mà là tuyên bố về ai được quyền ép: chỉ Enterprise (managed settings) mới ép được thật; project chỉ đề nghị. Nếu một chuẩn thực sự bắt buộc cho cả team thì nó phải lên enterprise, hoặc phải được gác bằng thứ chạy trong CI chứ không phải bằng file nằm trong repo. Và mẹo phòng thủ rẻ nhất mà bài đưa ra vẫn đúng: đặt tên đủ đặc thù (frontend-review thay vì review) để hai bên đơn giản là không đụng nhau.

Chi tiết nạp lúc startup thì nhỏ nhưng cắn thật: sửa skill xong mà quên restart, ta sẽ ngồi debug một description hoàn toàn không có lỗi. Và bước confirmation trước khi nạp là thứ tôi đánh giá cao hơn vẻ ngoài của nó — nó biến việc "context bị kéo vào" từ ngầm thành có người ký: đúng nguyên tắc mọi thứ ảnh hưởng đầu ra đều phải nhìn thấy được.

Progressive disclosure thì tôi thấy đúng bằng cách viết một bộ tài liệu dự án tử tế. Không ai đưa người mới cuốn 2.000 trang rồi bảo "đọc đi"; ta đưa một trang onboarding mỏng có mục lục, và ghi rõ "cần hiểu kiến trúc thì mở phụ lục A". Chỗ tinh tế nằm ở "kèm chỉ dẫn khi nào nạp": link không thôi là chưa đủ — phải nói điều kiện để Claude biết lúc nào không cần mở. Ngưỡng 500 dòng vì thế không phải luật thẩm mỹ, nó là ngưỡng cảnh báo rằng ta đang trả tiền context cho thứ 90% lần dùng không đọc tới.

Nhưng phần đắt nhất bài này là script: RUN, đừng READ. Nó tách bạch hai thứ mà ta hay gộp: kiến thức (Claude cần đọc để hiểu) và công cụ (Claude chỉ cần bấm để lấy kết quả). Với công cụ, việc bắt Claude đọc code là trả token để nó suy luận lại một thứ đã đúng sẵn. Lý do thứ hai còn quan trọng hơn tiền: bài nói script hợp với thao tác "đáng tin hơn khi là code đã test" — nghĩa là cùng input thì cùng output, mỗi lần chạy đều thế. Code Claude sinh ra tại chỗ thì mỗi lần một dị bản, và với data transformation thì "gần đúng nhưng khác nhau mỗi lần" là thứ tệ nhất có thể xảy ra. Ở góc delivery, đây chính là nguyên tắc quen: cái gì cần lặp lại giống hệt thì đóng thành script/checklist và ép chạy — đừng để mỗi lần một người làm một kiểu, kể cả khi "người" đó là AI.

allowed-tools thì tôi lưu ý cái bẫy ngược: bỏ trống không phải là "cấm hết", mà là "theo quy định chung". Nên nó là guardrail chủ động — muốn read-only thì phải nói ra, im lặng không cho ta sự an toàn nào. Và đây là chỗ skill giao đúng với bài tools của subagent: cấp quyền theo vai trò, một codebase-onboarding skill thì Read, Grep, Glob, Bash là đủ, mở thêm Write chỉ là mở cửa cho tai nạn.

Đến bài so sánh thì cả năm cơ chế xếp gọn được vào một câu tôi dùng để chọn: skill đổi Claude biết gì; subagent đổi ai làm và làm ở đâu; hook đổi cái gì tự chạy khi có sự kiện; MCP đổi Claude chạm được tới đâu; CLAUDE.md đổi luật nền luôn đúng. Năm câu hỏi khác nhau, nên "cái nào tốt hơn" là câu hỏi sai — bài nói thẳng: đừng ép mọi thứ vào skill, và dùng nhiều cái một lúc là chuyện bình thường.

Chỗ tôi thấy dễ chọn sai nhất là skill vs subagent, vì cả hai đều "đóng gói một vai trò" và đều có field giới hạn tool. Phân biệt bằng context: skill đọc tại bàn của mình — kiến thức nhập thẳng vào hội thoại đang chạy, ta vẫn nhìn thấy mọi thứ; subagent là cử người sang phòng khác làm — bàn riêng, quyền riêng, và chỉ tờ tóm tắt quay về. Nên khi bài liệt kê "cần tool access khác main conversation" là lý do chọn subagent, đừng nhầm với allowed-tools của skill: allowed-tools siết tool của chính hội thoại hiện tại, không tạo ra một không gian quyền hạn thứ hai.

Cặp hook vs skill thì tôi nhớ bằng ai là người bấm nút. Hook: sự việc bấm — file được save, tool sắp chạy; nó xảy ra dù ta có nói gì hay không, nên mọi thứ bắt buộc phải chạy (lint, validate) đều thuộc về hook. Skill: lời ta nói bấm — nó chỉ tham gia khi yêu cầu khớp description. Hệ quả thực dụng cho team: một chuẩn code mà ta thật sự muốn ép thì viết skill là chọn nhầm cơ chế — skill có thể không được kích hoạt, còn hook thì không có cửa trốn. Đây cũng là mảnh còn thiếu của bài priority ở lesson 2: chuẩn bắt buộc thì hoặc enterprise, hoặc hook/CI — đừng gửi gắm vào thứ chạy bằng cơ chế khớp ngữ nghĩa.

Còn MCP thì tôi đọc như tích hợp hệ thống thuần tuý, đúng nghề: nó không dạy Claude điều gì, nó nối dây ra hệ thống ngoài. Kiến thức về cách dùng cái dây đó cho đúng quy trình team — cái đó mới là skill. Hai thứ bổ sung nhau, và một setup trưởng thành thường có cả: MCP mang Jira vào tầm với, skill dạy khi tạo ticket thì viết theo template nào.

Bài chia sẻ thì đóng lại đúng vòng tròn tôi mở ở lesson 2. Ở đó tôi ghi: chuẩn team đặt trong repo không ép được ai, vì Personal thắng Project. Lesson 5 trả lời thẳng: muốn ép thì lên enterprise managed settings — nơi duy nhất có ưu tiên cao nhất, đè cả personal. Và bài chốt bằng đúng một chữ mà tôi thấy nên treo trước mặt mỗi khi định "chuẩn hoá" thứ gì: "must". Ba mức phân phối vì thế map rất sạch sang ba mức cam kết thật của một tổ chức: repo = "team mình làm thế này" (đề nghị, ai có bản riêng thì bản riêng thắng); plugin/marketplace = "ai thấy hay thì lấy dùng" (tự nguyện hoàn toàn, nên nội dung phải sạch chuyện nội bộ); enterprise = "bắt buộc, không bàn". Đẩy một chuẩn "nên" lên enterprise là lạm quyền cơ chế; để một chuẩn "must" nằm trong repo là ảo tưởng đã kiểm soát — đây mới là lỗi tôi thấy hay gặp hơn.

Nhưng phần đắt nhất bài là cái bẫy subagent không kế thừa skill, và tôi thích nó vì nó nhất quán chứ không phải bug. Cả khoá Subagents dạy: subagent tồn tại để có context sạch. Nếu nó tự động kéo mọi skill vào thì cái "sạch" ấy mất ngay từ giây đầu. Nên Anthropic bắt khai báo tường minh — anh muốn context của nó có gì thì tự ghi ra và tự chịu. Hệ quả kéo theo cũng logic: skill trong subagent nạp lúc start, không on demand, vì subagent không có ai ngồi đó để hỏi xác nhận — không có người thì không có bước confirm, nên chỉ còn cách nạp sẵn theo danh sách.

Điều đó đẻ ra một mẹo thực dụng tôi sẽ dùng ngay: skills trong agent frontmatter là cách ép chuẩn mà không cần cầu xin prompt. Bài nói đúng ý — "enforce standards in delegated work without relying on prompts". Ở main conversation, skill là request-driven: khớp thì chạy, không khớp thì thôi — tức là may rủi. Nhưng trong subagent, liệt kê skills:chắc chắn nạp, mọi lần review đều áp dụng. Với một reviewer subagent của team, đây là khác biệt giữa "hy vọng nó nhớ chuẩn accessibility""nó luôn có chuẩn accessibility trong tay". Nói cách khác: muốn skill hết ngẫu nhiên, hãy gắn nó vào một subagent — cùng một file skill, nhưng đổi từ gợi ý thành bắt buộc chỉ bằng chỗ khai báo.

Cuối cùng, một nhắc nhở nghề: bài này gọi built-in agent là Explorer/Plan/Verify còn khoá Subagents gọi General purpose/Explore/Plan — hai tài liệu chính chủ, lệch nhau. Bài học không phải "cái nào đúng" mà là danh sách sản phẩm thì đổi, cơ chế thì bền. Cái đáng thuộc là built-in không dùng được skill, custom mới dùng được — thứ này còn đúng lâu sau khi tên mấy con agent kia đã đổi.

Phần troubleshooting thì tôi quy về một câu chẩn đoán trước khi động vào bất cứ file nào: Claude không biết skill tồn tại, hay biết mà không chọn, hay chọn rồi mà chạy hỏng? Ba tầng đó sửa ở ba chỗ hoàn toàn khác nhaukhông load là lỗi vật lý (sai folder, sai tên file, YAML gãy); không trigger / chọn nhầm là lỗi ngôn ngữ (description); runtime là lỗi môi trường (dependency, permission, path). Giá trị của việc tách ba tầng nằm ở chỗ nó chặn kiểu debug đoán mò hay gặp nhất: ngồi viết lại description cho hay hơn trong khi bệnh thật là file đặt sai chỗ. Đây cũng là lý do bài bảo chạy validator TRƯỚC — nó dọn sạch tầng vật lý để ta khỏi mất buổi chiều nghi oan cho câu chữ.

Chi tiết tôi thấy sắc nhất bài: nhét thông tin dependency vào description. Đọc lần đầu thấy sai chỗ — description là để matching cơ mà? Nhưng ngẫm lại thì đúng: description là thứ duy nhất Claude đọc trước khi quyết định, nên nó là chỗ duy nhất đặt được cảnh báo "muốn chạy cái này thì cần có X". Cộng dồn cả khoá, description gánh bốn vai: quyết định trigger, định hình cách phân biệt với skill khác, mang dependency info, và (từ bài subagent) định hình prompt mà main agent viết ra. Nói cách khác, hầu như mọi thứ sai với skill đều sửa được ở đúng một dòng — nên khi bí, đọc lại dòng đó trước.

cách test trigger của bài đáng chép vào quy trình team: đừng ngồi đoán description đã hay chưa — viết ra 3–4 cách mình sẽ thật sự hỏi ("help me profile this", "why is this slow?", "make this faster"), thử từng cái, cái nào trượt thì nhét chữ đó vào. Đây là thử nghiệm, không phải suy luận — và nó thừa nhận một sự thật dễ chịu: ta không sửa được cách Claude hiểu, ta chỉ sửa được hợp đồng ngôn ngữ giữa hai bên. Riêng với tôi làm trên Windows, hai dòng cuối là loại lỗi mất buổi tối mà đọc trước thì né được: SKILL.md phân biệt hoa-thường, và forward slash ở mọi nơi, kể cả Windows.

Về xung đột enterprise, lời khuyên "đổi tên mình đi, thường dễ hơn" nghe như nhượng bộ nhưng thực ra là lời khuyên đúng về mặt tổ chức: nếu công ty đã bỏ công đưa code-review lên enterprise thì đó là chuẩn "must", và thứ ta muốn thêm hầu như luôn là một góc riêng — nên nó xứng đáng có tên riêng (frontend-review) chứ không phải một bản code-review thứ hai âm thầm tranh chỗ. Trùng tên với chuẩn bắt buộc, xét cho cùng, là một lỗi đặt tên, không phải một cuộc tranh chấp quyền.

Từ khoá cần thuộc

🔴 Core: skill · SKILL.md · frontmatter · name (required · ≤ 64 ký tự · lowercase/số/hyphen) · description (required · ≤ 1.024 ký tự · matching criteria — field quan trọng nhất) · allowed-tools (optionalbỏ trống = KHÔNG giới hạn) · model (optional) · ~/.claude/skills (personal) · .claude/skills (project) · skill = load on demand · CLAUDE.md (load mọi hội thoại) · slash command (phải gõ tay) · rule of thumb: lặp lại chỉ dẫn nhiều lần = một skill đang chờ viết · priority: Enterprise → Personal → Project → Plugins · semantic matching · confirmation prompt trước khi load · skills load lúc startup → phải restart · progressive disclosure · SKILL.md < 500 dòng · script: RUN, đừng READ — chỉ output tốn token · description trả lời 2 câu hỏi: làm gì? khi nào dùng?

🔴 Core (bài so sánh): skill = request-driven vs hook = event-driven · skill nhập vào context hiện tại vs subagent = context tách biệt/isolation · MCP = phạm trù khác (tool + integration bên ngoài) · CLAUDE.md = always-on vs skill = on demand · kết hợp, đừng ép mọi thứ vào skill

🔴 Core (troubleshooting): chạy skills validator (agent skills verifier) TRƯỚC TIÊN · không trigger → description + trigger phrases · không load → SKILL.md phải trong directory có tên (không ở root) + tên file chính xác SKILL.md · claude --debug · dùng nhầm skill → description quá giống nhau → làm khác biệt hẳn · bị shadow → priority hierarchy → đổi tên (đường dễ hơn) · plugin skill mất → clear cache + restart + reinstall · runtime → dependencies · chmod +x · forward slash kể cả trên Windows · ⭐ ghi dependency info vào description

🔴 Core (bài chia sẻ): 3 cách phân phối: repo (.claude/skills) · plugin/marketplace · enterprise managed settings · enterprise = ưu tiên cao nhất, đè personal/project/plugin · từ khoá "must" · ⚠️ subagent KHÔNG tự thấy skill — context sạch · built-in agent KHÔNG dùng được skill · custom subagent phải liệt kê tường minh · field skills: trong frontmatter của .claude/agents/<name>.md · skill nạp lúc subagent START, không on demand

🟡 Important: discover · activate · match request against description · context window · personal skill vs project skill · version control · delegate to a separate execution context · "different tool access than the main conversation" → subagent · isolation · project-wide standards · constraints (vd "never modify the database schema") · framework preferences · coding style · hook: linter mỗi lần save file · validation trước tool call · automated side effects · skill: knowledge informs how Claude handles requests · guidelines affect Claude's reasoning · C:/Users/<user>/.claude/skills (Windows) · root directory of repository · folder of instructions and resources · skill = directory, tên directory khớp tên skill · mkdir -p ~/.claude/skills/<name> · update = sửa SKILL.md · remove = xoá directory · enterprise (managed settings) · plugins (ưu tiên thấp nhất) · tên mô tả rõ để tránh conflict (frontend-review thay vì review) · scan bốn vị trí, chỉ nạp name + description · agent skills open standard · scripts/ · references/ · assets/ · link file phụ + chỉ dẫn KHI NÀO nạp · Read, Grep, Glob, Bash (ví dụ read-only) · allowed-tools = dùng tool đó không cần hỏi permission · permission model · guardrails · security-sensitive workflow · environment validation · data transformation (cần nhất quán)

🟢 Good-to-know: code review standard · commit message format · brand guideline · documentation template · debugging checklist · skill load hiển thị trên terminal · pr-description skill (ví dụ của khoá) · git diff main...HEAD · format What / Why / Changes · available skills list · codebase-onboarding skill (ví dụ allowed-tools) · architecture-guide.md (ví dụ reference file) · ví von "mục lục thay vì cả cuốn sách" · file 2.000 dòng = tốn context + khó maintain · .claude chứa agents · hooks · skills · settings · marketplace · strictKnownMarketplaces (source: github/npm · repo · package) · mandatory standards · security requirements · compliance workflows · frontend-security-accessibility-reviewer (ví dụ agent) · accessibility-audit · performance-check · Explorer/Plan/Verify (built-in agent theo khoá này — khoá Subagents ghi General purpose/Explore/Plan) · "enforce standards in delegated work without relying on prompts" · uv (cách cài validator nhanh nhất) · "what skills are available" · biến thể test trigger: "help me profile this" · "why is this slow?" · "make this faster" · chmod +x · "the best skills come from real pain points"


Nguồn: Introduction to Agent Skills (Anthropic Academy) — Copyright Anthropic. Phần đề thi thử cho khoá này nằm ở tab "Đề thi thử".

Câu hỏi thường gặp

Agent Skill trong Claude Code là gì?
Skill là một folder chứa chỉ dẫn và resource mà Claude Code có thể tự khám phá và dùng để xử lý tác vụ chính xác hơn. Mỗi skill sống trong một file SKILL.md, có name và description trong YAML frontmatter; phần dưới frontmatter là chỉ dẫn thật — checklist review, format commit message hay bất cứ thứ gì Claude cần biết cho tác vụ đó.
Claude quyết định dùng skill nào bằng cách nào?
Bằng field description. Khi người dùng gửi một yêu cầu, Claude đọc yêu cầu đó, so với description của mọi skill khả dụng và activate những skill khớp. Vì vậy description không phải mô tả suông cho người đọc — nó chính là cơ chế quyết định skill có được dùng hay không.
Skill được lưu ở đâu?
Hai nơi. Personal skill nằm ở ~/.claude/skills trong home directory và theo người dùng qua mọi project — ví dụ style commit message, format tài liệu, cách muốn code được giải thích. Trên Windows đường dẫn là C:/Users/<user>/.claude/skills. Project skill nằm ở .claude/skills trong root directory của repository, được commit vào version control nên ai clone repo về cũng có ngay — đây là chỗ để chuẩn của team.
Skill khác CLAUDE.md ở chỗ nào?
CLAUDE.md nạp vào mọi hội thoại, hợp với thứ luôn đúng — ví dụ "luôn dùng TypeScript strict mode". Skill nạp on demand, chỉ khi Claude thấy yêu cầu khớp description. Ban đầu Claude chỉ nạp name và description của skill nên chúng không lấp đầy context window; checklist review PR không cần nằm trong context lúc đang debug, nó chỉ được nạp khi thật sự cần review.
Skill khác slash command ra sao?
Slash command bắt buộc người dùng gõ tay để gọi. Skill thì không — Claude tự áp dụng khi nhận ra tình huống khớp với description. Đó là điểm khác biệt cốt lõi: skill là tự động và gắn với tác vụ.
Tạo một skill mới thế nào?
Tạo một directory trong thư mục skills, tên directory khớp tên skill — ví dụ mkdir -p ~/.claude/skills/pr-description — rồi tạo file SKILL.md bên trong. File gồm hai phần ngăn bởi dấu gạch frontmatter: phần trên là name và description, phần dưới dấu gạch thứ hai là chỉ dẫn Claude làm theo khi skill được activate. Tạo xong phải restart Claude Code vì skill chỉ được nạp lúc startup.
Vì sao phải restart Claude Code sau khi tạo hoặc sửa skill?
Vì Claude Code quét các vị trí chứa skill và nạp chúng ở thời điểm startup. Mọi thay đổi — tạo skill mới, sửa SKILL.md, hay xoá directory của skill — chỉ có hiệu lực sau khi restart session.
Claude Code khớp yêu cầu với skill bằng cách nào?
Lúc khởi động, Claude Code quét bốn vị trí chứa skill nhưng chỉ nạp name và description, không nạp nội dung. Khi người dùng gửi tin nhắn, Claude so tin nhắn đó với description của mọi skill khả dụng bằng semantic matching — khớp theo ý định chứ không phải khớp từ khoá. Ví dụ "explain what this function does" vẫn khớp một skill mô tả là "explain code with visual diagrams" vì ý định trùng nhau.
Claude có tự nạp nội dung skill vào context không?
Không tự động im lặng. Khi tìm được skill khớp, Claude hỏi xác nhận trước đã; bước này giữ cho người dùng biết context nào đang được kéo vào. Sau khi xác nhận, Claude mới đọc trọn file SKILL.md và làm theo chỉ dẫn trong đó.
Trùng tên skill thì cái nào thắng?
Thứ tự ưu tiên từ cao xuống thấp là Enterprise (managed settings), Personal (~/.claude/skills), Project (.claude/skills trong repository), rồi Plugins (thấp nhất). Nhờ vậy tổ chức có thể ép chuẩn bằng enterprise skill trong khi cá nhân vẫn tuỳ biến được. Lưu ý personal thắng project: clone một repo có skill trùng tên với skill cá nhân thì bản cá nhân vẫn được dùng. Cách tránh xung đột là đặt tên mô tả rõ — dùng frontend-review hay backend-review thay vì chỉ review.
Cập nhật hoặc xoá một skill thế nào?
Cập nhật thì sửa file SKILL.md của skill đó. Xoá thì xoá cả directory của skill — vì skill là một directory chứ không phải một file lẻ. Cả hai trường hợp đều phải restart Claude Code thì thay đổi mới có hiệu lực.
Frontmatter của SKILL.md có những field nào?
Theo agent skills open standard có bốn field, hai bắt buộc và hai tuỳ chọn. name (bắt buộc) định danh skill — chỉ dùng chữ thường, số và dấu gạch ngang, tối đa 64 ký tự, nên khớp tên directory. description (bắt buộc) nói cho Claude biết khi nào dùng skill, tối đa 1.024 ký tự, và là field quan trọng nhất vì Claude dùng nó để matching. allowed-tools (tuỳ chọn) giới hạn tool Claude được dùng khi skill active. model (tuỳ chọn) chỉ định model chạy skill.
Viết description thế nào cho skill trigger đúng lúc?
Phải explicit. Nếu ai đó bảo bạn "việc của bạn là giúp về docs" thì bạn không biết phải làm gì — Claude cũng nghĩ y hệt. Một description tốt trả lời đúng hai câu hỏi: skill này làm gì, và khi nào Claude nên dùng nó. Nếu skill không trigger như mong đợi, hãy thêm keyword khớp với cách bạn thật sự diễn đạt yêu cầu — description chính là thứ Claude dùng để quyết định skill có liên quan hay không, nên ngôn ngữ trong đó rất quan trọng.
Field allowed-tools dùng để làm gì?
Nó giới hạn những tool Claude được dùng khi skill đang active. Ví dụ đặt allowed-tools là Read, Grep, Glob, Bash thì khi skill chạy Claude chỉ dùng được đúng các tool đó mà không cần hỏi permission — không edit, không write. Rất hợp với security-sensitive workflow, tác vụ read-only, hoặc bất cứ tình huống nào cần guardrail.
Không khai báo allowed-tools thì sao?
Bỏ hẳn allowed-tools nghĩa là skill KHÔNG giới hạn gì cả — Claude dùng permission model bình thường của nó. Đây là điểm dễ hiểu ngược: không khai báo không đồng nghĩa với cấm hết tool.
Progressive disclosure trong agent skill là gì?
Là cách tổ chức skill lớn để khỏi tốn context. Skill dùng chung context window với hội thoại, và khi activate thì toàn bộ nội dung SKILL.md được nạp vào context. Nhồi mọi thứ vào một file 2.000 dòng gây hai vấn đề: chiếm nhiều context window và rất khó maintain. Progressive disclosure giữ chỉ dẫn cốt lõi trong SKILL.md và đẩy tài liệu tham khảo chi tiết sang các file riêng mà Claude chỉ đọc khi cần — giống như có mục lục trong context window thay vì cả cuốn sách.
Nên tổ chức thư mục của một skill lớn thế nào?
Open standard gợi ý ba thư mục con: scripts/ chứa code chạy được, references/ chứa tài liệu bổ sung, assets/ chứa ảnh, template hoặc data file. Trong SKILL.md thì link tới các file phụ kèm chỉ dẫn rõ ràng về thời điểm nạp chúng. Ví dụ Claude chỉ đọc architecture-guide.md khi có người hỏi về system design; nếu người dùng chỉ hỏi thêm component vào đâu thì file đó không bao giờ được nạp.
SKILL.md nên dài bao nhiêu?
Rule of thumb là giữ SKILL.md dưới 500 dòng. Vượt ngưỡng đó thì nên cân nhắc tách bớt nội dung sang các reference file riêng.
Vì sao script trong skill lại tiết kiệm context?
Vì script trong skill directory chạy được mà không cần nạp nội dung vào context: script thực thi và chỉ phần output tốn token. Chỉ dẫn then chốt phải viết trong SKILL.md là bảo Claude CHẠY script chứ không phải ĐỌC nó. Cách này đặc biệt hữu ích cho environment validation, data transformation cần nhất quán, và những thao tác đáng tin cậy hơn khi là code đã test thay vì code được sinh ra tại chỗ.
Skill khác subagent ra sao?
Skill thêm kiến thức vào chính hội thoại hiện tại: khi skill activate, chỉ dẫn của nó nhập vào context đang có. Subagent thì chạy ở một context tách biệt — nó nhận task, làm việc độc lập rồi trả kết quả về, và được cách ly khỏi hội thoại chính. Dùng subagent khi muốn delegate task sang execution context riêng, cần tool access khác main conversation, hoặc muốn isolation giữa việc được giao và context chính. Dùng skill khi muốn nâng kiến thức của Claude cho task hiện tại và expertise đó áp dụng xuyên suốt hội thoại.
Skill khác hook thế nào?
Hook là event-driven: nó kích hoạt theo sự kiện — chạy linter mỗi lần Claude save file, hoặc validate input trước một số tool call nhất định. Skill là request-driven: nó kích hoạt dựa trên điều người dùng đang hỏi. Dùng hook cho thao tác phải chạy mỗi lần save file, validation trước tool call cụ thể, và side effect tự động của hành động Claude. Dùng skill cho kiến thức định hướng cách Claude xử lý yêu cầu và guideline ảnh hưởng tới lập luận của Claude.
MCP server và skill khác nhau chỗ nào?
Chúng thuộc hai phạm trù hoàn toàn khác nhau. MCP server cung cấp tool và integration bên ngoài — tức mở rộng những gì Claude chạm tới được. Skill cung cấp kiến thức áp dụng theo task, nạp vào hội thoại khi yêu cầu khớp description. Không nên so hai thứ này theo kiểu cái nào tốt hơn.
Một setup Claude Code điển hình gồm những gì?
Năm mảnh, mỗi mảnh lo đúng chuyên môn của nó. CLAUDE.md cho project standard luôn bật. Skill cho task-specific expertise, nạp on demand. Hook cho thao tác tự động kích hoạt bởi event. Subagent cho execution context cách ly khi delegate việc. MCP server cho tool và integration bên ngoài. Nguyên tắc: đừng ép mọi thứ vào skill khi cơ chế khác hợp hơn, và hoàn toàn có thể dùng nhiều cơ chế cùng lúc.
Có mấy cách chia sẻ skill cho team?
Ba cách. Một là commit thẳng vào repository: đặt skill ở .claude/skills, ai clone repo là có ngay không cần cài gì, push update thì mọi người nhận ở lần pull kế — hợp với team coding standard, project-specific workflow và skill tham chiếu cấu trúc codebase. Hai là đóng gói vào plugin: trong plugin project tạo thư mục skills theo cấu trúc giống .claude, mỗi skill một folder có SKILL.md, rồi phát hành lên marketplace cho người khác discover và install — hợp khi skill không quá project-specific. Ba là enterprise managed settings: admin deploy toàn tổ chức với ưu tiên cao nhất — dành cho mandatory standard, security requirement và compliance workflow.
Thư mục .claude chứa những gì?
Nó chứa agents, hooks, skills và settings của project — tất cả đều được đưa vào version control và chia sẻ với team qua Git workflow bình thường.
Khi nào nên dùng enterprise managed settings để deploy skill?
Khi chuẩn đó là bắt buộc. Enterprise skill có ưu tiên cao nhất, đè lên personal, project và plugin skill cùng tên — đúng cho mandatory standard, security requirement, compliance workflow, và coding practice phải nhất quán toàn tổ chức. Từ khoá ở đây là "must": nếu chuẩn chỉ ở mức "nên" thì không thuộc về enterprise. Managed settings còn hỗ trợ strictKnownMarketplaces để kiểm soát plugin được phép cài từ nguồn nào.
Subagent có tự động dùng được skill không?
Không — và đây là điểm làm nhiều người bất ngờ. Khi delegate một task cho subagent, nó khởi đầu với context sạch tinh và KHÔNG tự thấy skill nào. Built- in agent thì không truy cập được skill, chấm hết. Custom subagent do người dùng định nghĩa thì dùng được, nhưng chỉ khi liệt kê tường minh. Ngoài ra skill trong subagent được nạp lúc subagent START, không phải on demand như ở main conversation.
Làm sao cho custom subagent dùng được skill?
Thêm field skills vào YAML frontmatter của file agent trong .claude/agents, liệt kê tên các skill cần nạp — ví dụ "skills: accessibility-audit, performance-check". Có thể dùng lệnh /agents để tạo agent tương tác. Thứ tự làm: đảm bảo skill đã tồn tại trong .claude/skills trước, rồi mới tạo subagent mới hoặc thêm field skills vào file agent có sẵn. Khi delegate, subagent sẽ có sẵn cả hai skill và áp dụng cho mọi lần review.
Khi nào nên cho subagent kèm skill?
Pattern này hợp khi muốn delegate task một cách cách ly nhưng vẫn có expertise cụ thể, khi các subagent khác nhau cần skill khác nhau (frontend reviewer vs backend reviewer), và khi muốn ép chuẩn trong việc được delegate mà không phải dựa vào prompt.
Skill không được kích hoạt thì sửa ở đâu?
Gần như luôn là do description. Claude dùng semantic matching, nên yêu cầu của người dùng phải chồng lấn về nghĩa với description — không đủ chồng lấn thì không khớp. Cách xử lý: đối chiếu description với cách bạn thật sự diễn đạt yêu cầu, thêm trigger phrase mà người dùng thật sự nói, và test bằng nhiều biến thể như "help me profile this", "why is this slow?", "make this faster". Biến thể nào không trigger thì thêm chính keyword đó vào description.
Skill không load, hỏi Claude thì không thấy trong danh sách — kiểm tra gì?
Hai yêu cầu cấu trúc. Thứ nhất, file SKILL.md phải nằm TRONG một directory có tên, không được để ở root của thư mục skills. Thứ hai, tên file phải đúng chính xác là SKILL.md — chữ SKILL viết hoa hết, phần mở rộng md viết thường. Sau đó chạy claude --debug để xem lỗi loading và tìm dòng có nhắc tên skill của bạn; nhiều khi chỉ vậy là ra ngay vấn đề.
Có công cụ nào kiểm tra skill trước khi dùng không?
Có — lệnh agent skills verifier, tức skills validator. Cách cài tuỳ hệ điều hành nhưng dùng uv là cách nhanh nhất. Cài xong thì vào thư mục skill hoặc chạy từ bất cứ đâu. Nên chạy nó ĐẦU TIÊN khi gặp sự cố: validator bắt các vấn đề cấu trúc trước khi bạn tốn thời gian debug những thứ khác. Nó cũng đặc biệt hữu ích khi skill của plugin không xuất hiện vì cấu trúc plugin sai.
Claude dùng nhầm skill hoặc lẫn lộn giữa các skill thì sao?
Nghĩa là description của chúng quá giống nhau — hãy làm cho chúng khác biệt hẳn. Viết description càng cụ thể càng tốt không chỉ giúp Claude biết khi nào dùng skill, mà còn ngăn xung đột với những skill nghe na ná.
Personal skill bị phớt lờ thì xử lý thế nào?
Có thể một enterprise skill hoặc skill ưu tiên cao hơn đang trùng tên — ví dụ công ty có enterprise skill code-review và bạn cũng có personal skill code-review thì bản enterprise thắng mọi lần. Hai lựa chọn: đổi tên skill của mình thành cái gì đó khác biệt hơn (thường là đường dễ hơn), hoặc trao đổi với admin về enterprise skill đó.
Cài plugin rồi mà không thấy skill của nó?
Clear cache, restart Claude Code, rồi reinstall. Nếu vẫn không thấy thì có thể cấu trúc plugin bị sai — đây chính là lúc validator tool phát huy giá trị.
Skill load được nhưng fail lúc chạy — nguyên nhân thường gặp?
Ba nguyên nhân. Missing dependency: nếu skill dùng package ngoài thì package phải được cài — và nên thêm thông tin dependency vào description của skill để Claude biết cần những gì. Permission issue: script cần quyền thực thi, chạy chmod +x lên mọi script mà skill tham chiếu. Path separator: dùng forward slash ở mọi nơi, kể cả trên Windows.
Khi nào nên viết một skill?
Skill hợp nhất với kiến thức chuyên biệt áp dụng cho tác vụ cụ thể: chuẩn code review của team, format commit message ưa dùng, brand guideline của tổ chức, template tài liệu, checklist debug cho một framework. Rule of thumb rất gọn: nếu thấy mình giải thích cùng một thứ cho Claude nhiều lần thì đó là một skill đang chờ được viết.

Đề thi thử (70 câu)

Đề thi thử tự biên soạn, bám sát đề thi chứng chỉ thật — trích 20 câu đầu dưới đây. Bản tương tác — chấm điểm, đáp án & giải thích từng câu — nằm ở tab “Đề thi thử” trên trang.

  1. Introduction to agent skills What is an Agent Skill in Claude Code?

    • A. A folder of instructions and resources that Claude Code can discover and use to handle a task more accurately
    • B. A background subagent that runs the task in its own context window
    • C. A CLI plugin that adds new built-in tools to Claude Code
    • D. A configuration block inside settings.json that changes model behavior
  2. Introduction to agent skills Which file is at the core of a skill, and what two fields does its frontmatter contain?

    • A. skill.yaml, with `id` and `trigger`
    • B. AGENT.md, with `role` and `tools`
    • C. SKILL.md, with `name` and `description`
    • D. CLAUDE.md, with `name` and `scope`
  3. Introduction to agent skills How does Claude decide which skills to use for a given request?

    • A. It loads every skill and lets the model pick after reading all of them
    • B. It compares the request against the available skills' descriptions and activates the ones that match
    • C. It runs the skills in the order they appear in .claude/skills
    • D. The user must invoke each skill explicitly by typing its name
  4. Introduction to agent skills Where do personal skills live, and what is their scope?

    • A. In .claude/skills at the repository root; they apply only to that repository
    • B. In ~/.claude/skills; they follow you across all of your projects
    • C. In ~/.claude/agents; they apply to every terminal session
    • D. In the Claude Code cloud account; they sync to every machine you log in from
  5. Introduction to agent skills Your team wants everyone who clones the repository to automatically get the company's brand guidelines, preferred fonts, and colors for web design. Where should that skill go?

    • A. ~/.claude/skills, so it follows each developer across projects
    • B. .claude/skills inside the repository root, committed to version control
    • C. CLAUDE.md at the repository root, so it loads into every conversation
    • D. A slash command, so developers can invoke it when needed
  6. Introduction to agent skills On Windows, where do personal skills live?

    • A. C:/Users/<your-user>/.claude/skills
    • B. C:/Program Files/Claude/skills
    • C. C:/Users/<your-user>/AppData/Roaming/claude/skills
    • D. The path is the same as macOS: /home/<your-user>/.claude/skills
  7. Introduction to agent skills What is the key difference between a skill and a slash command?

    • A. Slash commands load automatically when relevant; skills must be typed explicitly
    • B. Skills activate automatically when Claude recognizes the situation; slash commands require you to type them explicitly
    • C. Skills only work in project scope; slash commands only work in personal scope
    • D. Skills run in a separate context window; slash commands run in the main context
  8. Introduction to agent skills You want Claude to ALWAYS use TypeScript's strict mode, in every conversation. Where does that instruction belong?

    • A. In a skill's SKILL.md, so it loads when relevant
    • B. In CLAUDE.md
    • C. In a slash command you type at the start of each session
    • D. In the description field of every project skill
  9. Introduction to agent skills Why don't skills fill up your context window?

    • A. Skills are compressed and only decompressed when the model needs them
    • B. Skills run inside a subagent's separate context window
    • C. Claude initially loads only the name and description; the rest loads on demand when a skill matches
    • D. Skills are capped at a fixed token limit enforced by Claude Code
  10. Introduction to agent skills According to the course, what is the rule of thumb for knowing when to write a skill?

    • A. Write a skill whenever a task takes more than one tool call
    • B. If you find yourself explaining the same thing to Claude repeatedly, that's a skill waiting to be written
    • C. Write a skill for any task that touches more than three files
    • D. Write a skill whenever CLAUDE.md grows past a few hundred lines
  11. Introduction to agent skills Which of the following is NOT a good fit for a skill, based on the course's guidance?

    • A. Your team's code review standards
    • B. A debugging checklist for a particular framework
    • C. A global rule that must apply to every single conversation
    • D. Documentation templates for specific types of docs
  12. Introduction to agent skills Your PR-review skill exists but Claude never uses it when you ask for a review. Based on how skills work, what should you check first?

    • A. The instructions in the body of SKILL.md — they are probably too vague
    • B. The description field — it is what Claude matches your request against
    • C. The file permissions on the .claude/skills folder
    • D. Whether the skill is registered in CLAUDE.md
  13. Creating your first skill You are creating a personal skill named `pr-description`. What is the correct structure?

    • A. A single file ~/.claude/skills/pr-description.md
    • B. A directory ~/.claude/skills/pr-description containing a SKILL.md file
    • C. A directory ~/.claude/skills/pr-description containing a pr-description.md file
    • D. A single file ~/.claude/skills/SKILL.md listing all of your skills
  14. Creating your first skill In a SKILL.md file, what is everything after the second set of frontmatter dashes?

    • A. Optional documentation for humans; Claude ignores it
    • B. The matching criteria Claude uses to decide whether to activate the skill
    • C. The instructions Claude follows once the skill is activated
    • D. A list of tools the skill is allowed to use
  15. Creating your first skill You just created a new skill. Why doesn't Claude Code see it yet?

    • A. Skills must be registered in settings.json before they are discovered
    • B. Claude Code loads skills at startup — you need to restart your session
    • C. New skills take effect only after the next `git commit`
    • D. Personal skills need to be enabled per project with a slash command
  16. How skill matching works At startup, what does Claude Code load from each of the four skill locations?

    • A. The full content of every SKILL.md file
    • B. Only the name and description of each skill
    • C. Only the skills whose directory name matches the current project
    • D. Nothing — skills are scanned only when you type a slash command
  17. How skill matching works A skill's description says "explain code with visual diagrams". The user types "explain what this function does". What happens?

    • A. No match — the request does not contain the keywords "visual diagrams"
    • B. The skill matches, because Claude matches on intent (semantic matching), not exact keywords
    • C. No match — the user must invoke the skill explicitly by name
    • D. The skill matches only if it is a project skill in the current repository
  18. How skill matching works What happens immediately after Claude finds a skill that matches your request?

    • A. Claude silently loads the full SKILL.md and follows it
    • B. Claude asks you to confirm before loading the skill's full content
    • C. Claude asks you to choose between all matching skills
    • D. Claude launches a subagent to run the skill in a separate context window
  19. Skill priority What is the priority order when two skills share the same name, from highest to lowest?

    • A. Project → Personal → Enterprise → Plugins
    • B. Enterprise → Project → Personal → Plugins
    • C. Enterprise → Personal → Project → Plugins
    • D. Personal → Project → Plugins → Enterprise
  20. Skill priority You have a personal skill named `code-review`. You clone a repository that ships a project skill also named `code-review`. Which one does Claude use?

    • A. The project skill, because project scope is more specific
    • B. Your personal skill, because Personal outranks Project
    • C. Both are loaded and merged together
    • D. Claude prompts you to pick one each time

…và 50 câu nữa trong bản đề thi thử đầy đủ (70 câu) — mở tab “Đề thi thử” trên trang để làm toàn bộ, có chấm điểm & giải thích.