Agent skill thực sự là gì? Cách hoạt động và MCP
Agent skill là thư mục chứa SKILL.md, chỉ được đọc khi request khớp mô tả. Xem progressive disclosure giúp giảm context ra sao và skill khác MCP thế nào.
Agent skill thực sự là gì
Agent skill là một thư mục trên disk có một file tên SKILL.md. 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 load mô tả khi khởi động, và chỉ đọc phần hướng dẫn khi request của bạn khớp với mô tả đó. 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 ba thư mục tùy chọn: scripts/ chứa code để agent chạy, references/ chứa tài liệu agent đọc khi cần, và assets/ chứa template và 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.shMô 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êu rõ skill làm gì và khi nào cần dùng, bằng những từ mà người dùng thực sự sẽ nhập.
Vì sao một skill gần như không tốn chi phí cho đến khi được dùng
Đây là lập luận khiến format này đáng để tìm hiểu. Vấn đề nằm ở context, không phải tính năng. Quá trình tải diễn ra theo từng giai đoạn, được specification gọi là progressive disclosure.
Khi khởi động, agent chỉ tải name và description của mọi skill đã cài đặt. Agent Skills specification ướ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ố, tính đến tháng 8 năm 2026). Cài một tá skill chỉ tiêu tốn lượng context tương đương một đoạn văn dài.
Khi request khớp với một mô tả, agent đọc phần thân của riêng SKILL.md đó. Specification khuyến nghị giữ phần thân dưới 5.000 token và file dưới 500 dòng. Các file trong references/ và scripts/ vẫn chưa tốn chi phí ở thời điểm này. Một file tham chiếu chỉ được tải nếu instructions yêu cầu agent đọc file đó. Script đi kèm lại khác: agent chạy script qua shell, nên source của script không đi vào context window; chỉ output của nó mới được đưa vào.
Bây giờ hãy so sánh với thứ mọi người thường dùng đầu tiên: một prompt khổng lồ. Mọi dòng trong system prompt hoặc file instructions luôn được bật đều bị tính chi phí trong mọi request, mọi session, dù task có cần hay không, và chúng cạnh tranh sự chú ý với câu hỏi thực tế. 10.000 token instructions cố định là khoản chi phí bạn vẫn phải trả ngay cả khi chỉ hỏi 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, phần thân của nó vẫn nằm trong context cho đến hết session. Vì vậy, một SKILL.md dài là chi phí lặp lại, không phải chi phí một lần. Đưa nội dung chi tiết vào references/ không chỉ để gọn gàng. Đó là cơ chế hoạt động đúng theo thiết kế.
Một skill của agent không phải là một tool call
Một 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 argument. Model phát ra một call, code của bạn chạy call đó, rồi kết quả được gửi lại dưới dạng một message. Tool thực hiện các tác vụ. 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 chính là thành phần đọc các mô tả skill khi khởi động và quyết định thời điểm mở một skill.
Skill tự nó không thực thi gì. Agent đọc skill, rồi hành động bằng các tool mà nó đã có. Model không thể truyền tham số cho skill theo cách truyền tham 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 một job cho agent thứ hai là ví dụ rõ nhất: một phiên Claude Code đã có thể nhắn tin cho một phiên khác, và skill là nơi bạn 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 cung cấp phán đoán về một khả năng mà agent đã 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 hợp lệ, 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 nghĩ một cách nhất quán, bạn cần skill. Skill có thể chỉ chứa phán đoán nhưng vẫn là thứ bạn dùng nhiều 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 thêm khả năng mới mà chỉ thay đổi cách agent sử dụng các khả năng đã có. Phán đoán đó cũng có thể định hướng theo chiều ngược lại, và unlazy skill, skill dùng Depth Tree để ngăn agent tuyên bố job đã hoàn tất quá sớm cũng áp dụng cách này để tăng mức độ cẩn thận thay vì hạn chế thay đổi.
Skill của agent không phải là MCP server
MCP (model context protocol) là một protocol dùng để kết nối agent với hệ thống bên ngoài. MCP server là một process chạy protocol đó và cung cấp các tool cho agent. MCP server thường cần cấu hình, credentials và một lệnh 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.
Chi phí context cũng khác theo cách tương tự. Mỗi tool mà MCP server cung cấp đều có tên, mô tả và schema của các argument. Theo mặc định, những thông tin này nằm trong request trong suốt cả session, dù có được dùng hay không. Một số client đã bắt đầu fetch tool schema theo nhu cầu, nhưng tải schema ngay từ đầu vẫn là trường hợp phổ biến. Skill khi không hoạt động chỉ là một dòng text.
Hai thành phần này bổ trợ cho nhau, và các setup tốt 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: 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ốt cần như thế nào. Nếu bạn tự host MCP server, chạy MCP server trên một 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 trông như thế nào
Trong Claude Code, 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. Skill của project nằm trong .claude/skills/<name>/SKILL.md và được commit vào git, vì vậy mọi người và mọi agent làm việc trong repository đó đều có chúng. GitHub Copilot và VS Code thay vào đó đọc skill của workspace từ .github/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, vì vậy 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. Nếu skill không xuất hiện trong menu đó thì có một tên bị sai: file phải có tên SKILL.md, còn tên thư mục chỉ được chứa chữ thường, chữ số và dấu gạch ngang đơn. Việc viết cùng quy trình đó thành một procedure để agent có thể chạy lại là phần bổ trợ tự nhiên cho backup restic theo lịch trên VPS, vì backup đang chạy không có nghĩa là backup có thể restore.
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à 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 nó dưới dạng tiêu chuẩn mở được lưu trữ tại agentskills.io. Tính đến tháng 8 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ế nạp theo từng giai đoạn. Đặc tả cũng có kèm 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 đáng chú ý. Claude Code, Cursor, OpenAI Codex, Gemini CLI, GitHub Copilot, VS Code, Goose, OpenHands và opencode, cùng nhiều công cụ khác, đều đọc cùng một thư mục. Microsoft công bố các skill của mình theo định dạng này tại github.com/microsoft/skills, đồng thời phát hành một công cụ desktop có tên Skill Recorder. Công cụ này ghi lại cách 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 chỉ là tính năng của một sản phẩm.
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
Đặc điểm của agent skill khác gì so với MCP server?
MCP (model context protocol) server là một process đang chạy và expose các tool cho agent thông qua một protocol. Vì vậy, nó cần cấu hình và credentials. Các định nghĩa tool của nó thường chiếm context trong toàn bộ session, dù có được sử dụng hay không. Agent skill là một folder chứa file SKILL.md, không có process và không có protocol. Nó chỉ tốn khoảng 100 token cho đến khi agent quyết định đọc file này. 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 quy trình 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 dưới dạng 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/ trong repository. File SKILL.md tự nó được chuyển giữa các client mà không thay đổi.
Có thể cài bao nhiêu skill trước khi hệ thống bị chậm?
Giới hạn nằm ở startup budget, không phải số lượng skill. Mỗi skill đã cài đóng góp tên và mô tả, 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. Vấn đề xuất hiện trước tiên là việc matching, không phải tốc độ: nhiều skill có mô tả chồng lấn khiến model khó chọn đúng skill hơn. Hãy viết các mô tả 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 trong 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 đặt trong file luôn được load. Đây chính là mục đích của việc load file này mỗi lần. Một procedure chỉ chạy thỉnh thoảng, chẳng hạn release checklist hoặc restore drill, nên là skill. Khi đó, các task không cần procedure này sẽ không tốn chi phí context. 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 tách ra.