SSD Nodes Learn Hosting plans →
Hướng dẫn Matt ConnorBởi Matt Connor · Cập nhật ngày 2026-10-21

Agent skill là gì? Khác gì so với MCP

Agent skill là thư mục có SKILL.md, chỉ nạp hướng dẫn khi cần. Xem vì sao cách này tiết kiệm context hơn giant prompt và khác MCP ra sao.

Agent skill thực sự là gì

Agent skill là một thư mục trên đĩa có một file tên là SKILL.md bên trong. File đó chứa tên, mô tả ngắn và các hướng dẫn được viết bằng markdown thuần. Agent tải mô tả khi khởi động và chỉ đọc hướng dẫn khi yêu cầu của bạn khớp với mô tả đó, hoặc khi bạn gọi skill bằng tên. Hầu hết các đặc điểm khác của skill đều bắt nguồn từ hai câu này.

Thư mục có thể chứa nhiều hơn một file. Đặc tả Agent Skills nêu tên 3 thư mục tùy chọn: scripts/ chứa code mà agent chạy, references/ chứa tài liệu agent đọc khi cần, và assets/ chứa template cùng dữ liệu. Không thư mục nào trong số này là bắt buộc. Một thư mục chỉ chứa SKILL.md vẫn là một skill hoàn chỉnh.

restore-drill/
  SKILL.md
  references/retention-policy.md
  scripts/verify_snapshot.sh

Mô tả là phần thường bị đánh giá thấp. Đây là đoạn text duy nhất agent thấy trước khi quyết định có mở skill hay không. Vì vậy, mô tả phải nói rõ skill làm gì và khi nào nên dùng, bằng những từ mà người dùng thực sự sẽ gõ.

Vì sao một skill gần như không tốn chi phí cho đến khi được sử dụng

Đây là lý do khiến việc hiểu định dạng này trở nên đáng giá. Vấn đề nằm ở context, không phải tính năng. Việc tải diễn ra theo từng giai đoạn. Đặc tả gọi cơ chế này là progressive disclosure.

Khi khởi động, agent chỉ tải name và description của mọi skill đã cài đặt. Đặc tả Agent Skills ước tính phần này vào khoảng 100 token cho mỗi skill (theo hướng dẫn được công bố vào tháng 10 năm 2026). Cài đặt một tá skill chỉ tiêu tốn lượng context tương đương một đoạn văn dài.

Khi một request khớp với phần mô tả, agent đọc nội dung của SKILL.md đó. Đặc tả khuyến nghị giữ nội dung dưới 5.000 token và file dưới 500 dòng. Các file trong references/ và scripts/ vẫn không tốn chi phí ở thời điểm này. Một file tham chiếu chỉ được tải khi phần hướng dẫn yêu cầu agent đọc file đó. Script đi kèm lại khác: agent chạy script qua shell, nên mã nguồn của script không đi vào cửa sổ context; chỉ output của script mới được đưa vào.

Bây giờ hãy so sánh với cách mọi người thường chọn đầu tiên: một prompt khổng lồ. Mọi dòng trong system prompt hoặc file hướng dẫn luôn được bật đều bị tính ở mọi request, trong mọi session, dù task có cần hay không, đồng thời phải cạnh tranh sự chú ý với câu hỏi thực tế. 10.000 token hướng dẫn cố định là chi phí bạn vẫn phải trả ngay cả khi chỉ hỏi bây giờ là mấy giờ. Một tá skill chỉ tốn khoảng 1.200 token khi ở trạng thái chờ và chỉ mở rộng khi task tương ứng cần đến. Đó là toàn bộ lý do nên dùng skill, và cũng là lý do một thư viện nhỏ hiệu quả hơn một prompt dài.

Có một điểm dễ bị bỏ sót. Sau khi skill được tải, nội dung của skill vẫn nằm trong context cho đến hết session. Vì vậy, SKILL.md dài sẽ tạo chi phí lặp lại, không phải chi phí một lần. Chuyển phần chi tiết vào references/ không chỉ để gọn gàng. Đó là cách cơ chế này hoạt động theo đúng thiết kế.

Một skill của agent không phải là một tool call

Tool, còn gọi là function call, là thứ model có thể gọi. Harness gửi cho model một schema gồm tên, mô tả và cấu trúc của các đối số. Model phát ra một lệnh gọi, code của bạn thực thi lệnh đó, rồi kết quả quay lại dưới dạng một message. Tool thực hiện công việc. Cả hai phía của quá trình trao đổi này đều thuộc về harness, chương trình chạy vòng lặp quanh model, cũng là thành phần đọc mô tả skill khi khởi động và quyết định khi nào mở một skill.

Skill tự nó không thực thi gì cả. Agent đọc skill, rồi thực hiện công việc bằng các tool mà nó đã có. Model không thể truyền đối số cho skill như cách nó truyền đối số cho tool. Skill có thể cho model biết nên dùng tool nào, theo thứ tự nào và cần kiểm tra gì sau đó. Giao việc cho agent thứ hai là ví dụ rõ nhất: một session Claude Code đã có thể gửi message cho session khác, còn skill là nơi ghi rõ khi nào nên làm vậy và cần gửi nội dung gì.

Tóm lại: tool cung cấp cho agent một khả năng mới, còn skill chủ yếu cung cấp phán đoán về những khả năng agent đã có. Khi skill bổ sung một khả năng, nó thực hiện việc đó thông qua một script đi kèm mà agent chạy bằng shell sẵn có. Nếu một bước phải luôn tạo ra kết quả chính xác và đã được kiểm tra, bạn cần tool hoặc script. Nếu một bước cần áp dụng cùng một cách suy xét một cách nhất quán, bạn cần skill. Skill có thể chỉ gồm phán đoán mà vẫn là thứ bạn thường xuyên sử dụng nhất, như Ponytail, skill buộc coding agent thực hiện thay đổi nhỏ nhất nhưng vẫn hoạt động, cho thấy: nó không bổ sung capability mới mà chỉ thay đổi cách agent sử dụng những capability sẵn có. Phán đoán đó cũng có thể hướng theo chiều ngược lại; skill unlazy, dùng Depth Tree để ngăn agent tuyên bố hoàn tất công việc quá sớm cũng áp dụng cùng cơ chế này, nhưng nhằm tăng tính đầy đủ thay vì hạn chế thay đổi.

Skill của agent không phải là MCP server

MCP (model context protocol) là protocol để kết nối agent với một hệ thống bên ngoài. MCP server là một process chạy protocol đó và expose các tool cho agent. MCP server thường cần cấu hình, credentials và một command cục bộ hoặc network endpoint. Skill chỉ là một thư mục chứa một file markdown. Nó không có process, port hay protocol.

Context cost cũng khác theo cách tương tự. Mỗi tool mà MCP server expose đều có tên, mô tả và schema của các argument. Với client tải các tool này ngay từ đầu, những thông tin đó nằm trong request suốt cả session, dù có được dùng hay không. Claude Code mặc định không còn hoạt động theo cách đó: từ October 2026, tính năng tool search được bật sẵn, nên lúc bắt đầu session chỉ tải tên tool và instruction của server. Full definition chỉ được tải khi Claude tìm kiếm chúng. Skill khi nằm trên filesystem chỉ chiếm một dòng text.

Hai thành phần này bổ trợ cho nhau. Setup mạnh nhất thường dùng cả hai. MCP server cung cấp quyền truy cập. Skill cung cấp quy trình: cần gọi những tool nào cho workflow thực tế của team, gọi theo thứ tự nào và kết quả đạt yêu cầu phải như thế nào. Nếu tự host, chạy MCP server trên VPS sẽ trình bày phần đó.

Kỹ năng của agent không phải là system prompt hoặc AGENTS.md

Cả hai đều là hướng dẫn trong markdown, nên dễ nhầm là đúng. Điểm khác nhau là thời điểm chúng được nạp. AGENTS.md, CLAUDE.md và system prompt luôn được áp dụng. Skill chỉ được áp dụng khi cần. Output styles của Claude Code nằm ở cực luôn được áp dụng, vì việc chọn một output style sẽ chỉnh sửa chính system prompt. Do đó, nó định hình mọi câu trả lời trong session, kể cả những câu trả lời không hề dùng skill nào.

Cách kiểm tra chỉ gồm một câu hỏi: nếu bỏ qua đoạn này trong một task không liên quan đến nó thì có sai không? Quy ước về style, lệnh build và quy tắc đặt tên branch áp dụng cho mọi task, nên chúng thuộc file luôn được bật; mục đích của file này là được nạp trong mọi lần chạy. Checklist release mà bạn chỉ chạy hai lần mỗi tháng không áp dụng cho mọi task, nên nó thuộc một kỹ năng. Khi một section trong file luôn được bật đã phát triển thành một quy trình được đánh số, đó là dấu hiệu cần chuyển nó đi.

Các file này cũng có những quy ước riêng cần tuân thủ chính xác. Xem nội dung nên đặt trong AGENTS.md và nội dung nên đặt trong file dành cho con người và một file design.md giải thích cấu trúc của codebase để xem hai loại file chúng tôi sử dụng.

Một skill tối thiểu có dạng như thế nào

Trong Claude Code, các skill cá nhân nằm trong ~/.claude/skills/<name>/SKILL.md và áp dụng cho tất cả project của bạn. Các skill của project nằm trong .claude/skills/<name>/SKILL.md và được commit vào git, nên mọi người và mọi agent làm việc trong repository đó đều có chúng. GitHub Copilot và VS Code đọc skill của project từ .github/skills/, .agents/skills/ và .claude/skills/. File bên trong là cùng một file.

mkdir -p ~/.claude/skills/restore-drill
---
name: restore-drill
description: Run a restic restore drill and report what was recovered. Use when the user asks to test backups, verify a restore, or check that a snapshot is readable.
---

# Restore drill

1. Run `restic snapshots` and pick the newest snapshot for the host in question.
2. Restore it into a scratch directory under `/tmp`, never over live data.
3. Compare the restored file count and total size against the snapshot summary.
4. Report the snapshot ID and anything that failed to restore.

If `restic snapshots` prints `Fatal: unable to open config file`, the repository path or the password is wrong. Stop and report that instead of guessing.

Đó là một skill hoàn chỉnh. Tên thư mục trở thành command bạn nhập, nên skill này là /restore-drill. Trong Claude Code, menu /skills liệt kê những gì đã được cài đặt. Đây là cách nhanh nhất để xác nhận file đã được nhận diện. Nếu skill không có trong menu đó, trước tiên hãy kiểm tra tên: file phải có tên SKILL.md. Đặc tả Agent Skills yêu cầu tên chỉ dùng chữ thường, chữ số và dấu gạch ngang đơn, đồng thời phải khớp với tên thư mục. Quy trình tương tự, được viết để agent có thể chạy lại, là phần bổ sung tự nhiên cho backup restic định kỳ trên VPS, vì backup đang chạy không có nghĩa là có thể restore backup đó.

Khi nào một skill nên là script

Mọi bước luôn có một đáp án đúng duy nhất nên được viết thành script. Khi đó, skill chỉ cần vài dòng nêu thời điểm chạy và cách đọc output. Có 2 lý do, và cả 2 đều mang tính thực tế.

Thứ nhất, source của script không đi vào context window. Một parser dài 300 dòng chỉ làm tốn phần output của nó, không tốn thêm gì khác. Trong khi đó, nếu viết cùng logic dưới dạng hướng dẫn markdown, toàn bộ độ dài của hướng dẫn sẽ bị tính vào mỗi lần skill được nạp.

Thứ hai, script cho cùng một đáp án trong mọi lần chạy. Nếu mỗi lần chạy model lại phải tự suy ra quy tắc parse log, kết quả có thể hơi khác vào những ngày model xử lý không tốt. Bạn sẽ không nhận ra cho đến khi 2 con số không khớp.

Vì vậy, hãy chia công việc theo loại. “Parse CSV và in mọi row có tổng không khớp với các line item” là công việc của script. “Xem các row mà script đã in và giải thích row nào có vẻ là lỗi nhập dữ liệu” là chỉ dẫn cho skill. Giữ phần cần phán đoán trong markdown và phần có tính xác định trong code là cùng một nguyên tắc với xây dựng một vòng lặp mà agent có thể chạy mà không cần bạn giám sát.

Vì sao skill của tôi không bao giờ được kích hoạt?

Vì description của skill chỉ nói skill làm gì, không nói khi nào cần dùng. Agent chỉ dựa vào dòng đó để đối chiếu với request của bạn. “Hỗ trợ xử lý database” không khớp cụ thể với yêu cầu nào. “Chạy schema migration trên staging database. Dùng khi user yêu cầu migrate một table, thêm column hoặc thay đổi schema” chứa những từ mà người dùng thực sự nhập, nên skill sẽ được kích hoạt.

Trường hợp ngược lại là skill bị kích hoạt liên tục. Mô tả như “Dùng cho mọi thay đổi code trong repository này” khớp với mọi yêu cầu, nên phần nội dung được load trong mọi task rồi tiếp tục nằm trong context suốt phần còn lại của session. Hãy thu hẹp mô tả vào đúng trường hợp bạn muốn. Trong Claude Code, bạn cũng có thể đặt disable-model-invocation: true trong frontmatter để tắt việc tự động load và vẫn giữ skill khả dụng khi bạn nhập tên của nó.

Trường hợp thứ ba là skill trùng chức năng với một tool. Các instruction yêu cầu agent curl một API đã được MCP server cung cấp, hoặc yêu cầu grep qua các file khi harness đã có search tool, tạo ra một quy trình chậm hơn cùng hai bộ instruction có thể mâu thuẫn. Hãy xóa phần trùng lặp và chỉ mô tả intent.

Đừng đoán bạn đang gặp trường hợp nào trong ba trường hợp trên. Hãy chạy cùng một prompt 2 lần trong session mới: một lần khi skill khả dụng và một lần khi đã tắt skill, sau đó so sánh các câu trả lời. Session mới rất quan trọng, vì session nơi bạn viết skill đã chứa sẵn mọi nội dung mà skill nói đến; điều này che giấu các thiếu sót trong phiên bản đã viết. Plugin skill-creator của Anthropic tự động hóa việc so sánh này trong Claude Code, bao gồm tạo các prompt đáng lẽ phải và không được kích hoạt skill, rồi đo tần suất từng trường hợp xảy ra. Nếu skill có load nhưng agent vẫn không làm đúng nội dung skill yêu cầu, thì mô tả không phải vấn đề; hãy xem tiếp các lý do agent bỏ qua instruction dù đã đọc chúng.

Đây là định dạng riêng của một vendor hay là một tiêu chuẩn?

Anthropic công bố định dạng này vào cuối năm 2025, sau đó phát hành dưới dạng tiêu chuẩn mở tại agentskills.io. Tính đến tháng 10 năm 2026, đặc tả này định nghĩa các trường bắt buộc name và description, các trường tùy chọn license, compatibility, metadata và allowed-tools, ba thư mục tùy chọn và cơ chế tải theo từng giai đoạn. Đặc tả cũng cung cấp một validator tham chiếu, nên skills-ref validate ./my-skill có thể kiểm tra một thư mục theo đặc tả trước khi bạn chia sẻ thư mục đó.

Danh sách client mới là tín hiệu quan trọng. Cùng một thư mục có thể được Claude Code, Cursor, OpenAI Codex, Gemini CLI, GitHub Copilot, VS Code, Goose, OpenHands và opencode đọc, cùng nhiều công cụ khác. Microsoft phát hành các skill của riêng mình theo định dạng này tại github.com/microsoft/skills, đồng thời cung cấp một công cụ desktop có tên Skill Recorder. Công cụ này theo dõi bạn thực hiện một tác vụ một lần, tái dựng tác vụ đó thành một intent kèm các bước theo thứ tự, rồi ghi kết quả thành một skill. Việc một vendor xây dựng recorder có định dạng đầu ra tuân theo đặc tả của bên khác là dấu hiệu rõ ràng cho thấy định dạng này không còn là tính năng riêng của một sản phẩm nữa.

Viết gì trước

Đừng lên kế hoạch xây dựng một thư viện. Hãy chờ đến khi bạn nhận ra mình đã dán cùng một nhóm hướng dẫn vào chat lần thứ ba, rồi chuyển phần văn bản đó vào một SKILL.md và xóa bản dán đi. Sự lặp lại mà bạn đã trực tiếp gặp phải là tín hiệu đáng tin cậy duy nhất cho thấy một skill đáng được lưu giữ. Quy trình tìm kiếm là lựa chọn tốt để bắt đầu, và một skill tìm kiếm dùng instance SearXNG của chính bạn cho thấy cấu trúc cần có.

Có hai thói quen giúp thư viện luôn dễ bảo trì. Hãy đọc mọi skill mà bạn không tự viết trước khi cài đặt, bao gồm cả các script, vì skill chứa hướng dẫn mà agent sẽ làm theo và code mà agent có thể chạy: hãy xem việc này giống như cài phần mềm từ một người lạ. Đồng thời, không lưu credential trong thư mục đó, vì skill là một file văn bản có thể được commit và chia sẻ. Không để secret trong agent của bạn giải thích nơi nên lưu các giá trị đó, còn lộ trình học về agent trong năm nay sắp xếp skill cùng các phần khác của quá trình thiết lập.

FAQ

Khác nhau giữa agent skill và MCP server là gì?

MCP (model context protocol) server là một process đang chạy và cung cấp các tool cho agent thông qua một protocol. Vì vậy, nó cần cấu hình và credentials. Toàn bộ định nghĩa tool của nó chiếm context trong suốt session, trừ khi client trì hoãn việc nạp chúng như Claude Code hiện mặc định. Agent skill là một folder chứa file SKILL.md. Nó không có process và không dùng protocol. Skill chỉ tốn khoảng 100 token cho đến khi agent quyết định đọc nó. Dùng MCP server để cấp cho agent quyền truy cập vào một system. Dùng skill để hướng dẫn agent sử dụng quyền truy cập đó đúng cách. Nhiều setup dùng cả hai.

Agent skill chỉ hoạt động với Claude Code phải không?

Không. Anthropic phát triển format này rồi phát hành nó thành một open standard tại agentskills.io. Cùng một folder có thể được Cursor, OpenAI Codex, Gemini CLI, GitHub Copilot, VS Code, Goose, OpenHands và các client khác đọc. Điểm khác nhau là mỗi client tìm folder ở đâu và hiểu những field frontmatter bổ sung nào. Claude Code đọc ~/.claude/skills/ và .claude/skills/, còn GitHub Copilot và VS Code đọc .github/skills/, .claude/skills/ hoặc .agents/skills/ trong repository. File SKILL.md tự nó được dùng giữa các client mà không cần thay đổi.

Có thể cài bao nhiêu skill trước khi hệ thống chậm đi?

Giới hạn nằm ở startup budget, không phải số lượng skill. Mỗi skill đã cài thêm name và description của nó, khoảng 100 token theo hướng dẫn được công bố trong specification. Vì vậy, 30 skill tốn khoảng 3,000 token trước khi bất kỳ skill nào được dùng. Thứ suy giảm đầu tiên là khả năng matching, không phải tốc độ. Nhiều skill có description trùng lặp khiến model khó chọn đúng skill hơn. Hãy viết các description không chồng lấn và xóa những skill bạn không còn dùng.

Nên đặt instruction này trong skill hay AGENTS.md?

Hãy xác định instruction đó có áp dụng cho mọi task trong repository hay không. Build command, house style và quy tắc đặt tên áp dụng cho tất cả task, nên chúng thuộc file luôn được nạp. Mục đích của file này là được nạp trong mọi lần chạy. Một procedure chỉ thỉnh thoảng mới chạy, như release checklist hoặc restore drill, nên là một skill. Khi đó, các task không cần nó chỉ phải trả chi phí cho description một dòng của skill. Một section trong AGENTS.md đã phát triển thành các bước được đánh số thường là một skill đang chờ được chuyển ra.

Bài viết này có hữu ích không?