SSD Nodes Learn 🎉 VPS từ $4.99/tháng
Hướng dẫn Matt ConnorBởi Matt Connor

Agent skill là gì? Khác gì MCP và prompt lớn

Agent skill là thư mục chứa SKILL.md, chỉ được đọc khi request khớp mô tả. Tìm hiểu progressive disclosure, vì sao nhẹ hơn prompt lớn và khác MCP thế nào.

Skill của agent thực sự là gì

Skill của agent 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 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ừ 2 câu này.

Thư mục có thể chứa nhiều hơn file duy nhất đó. Đặc tả Agent Skills nêu 3 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 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 đã là một skill hoàn chỉnh.

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

Phần mô tả thường bị đánh giá thấp. Đây là phần văn bản 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ừ người dùng thực sự sẽ nhập.

Vì sao một skill gần như không tốn tài nguyên cho đến khi được sử dụng

Đây là lý do khiến format này đáng để tìm hiểu. 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. Specification gọi cơ chế này là progressive disclosure.

Khi khởi động, agent chỉ tải namedescription 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ỉ tốn lượng context tương đương một đoạn văn dài.

Khi request khớp với một phần mô tả, agent đọc phần nội dung của riêng SKILL.md đó. Specification khuyến nghị giữ phần nội dung dưới 5.000 token và file dưới 500 dòng. Các file trong references/scripts/ vẫn chưa tốn gì ở thời điểm này. Một reference file chỉ được tải nếu instruction yêu cầu agent đọc file đó. Bundled script lại khác: agent chạy script thông qua shell, nên source của script không đi vào context window; chỉ output của script được đưa vào đó.

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 instruction luôn được nạp đều bị tính vào mỗi request, trong mọi session, dù task có cần chúng hay không. Chúng cũng tranh giành sự chú ý với câu hỏi thực tế. 10.000 token instruction cố định là 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 chưa được dùng và chỉ mở rộng khi task cần đến chúng. Đó 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ễ gây nhầm lẫn. Khi skill được tải, phần nội dung của nó vẫn nằm trong context cho đến hết session. Vì vậy, SKILL.md dài sẽ tạo ra chi phí lặp lại, không phải chi phí chỉ phát sinh một lần. Chuyển phần chi tiết vào references/ không chỉ để nội dung gọn gàng. Đó là cơ chế hoạt động đúng theo thiết kế.

Skill của agent không phải là lần gọi tool

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ác tham số. Model tạo một lần gọi, mã của bạn chạy, rồi kết quả được trả về dưới dạng một message. Tool thực hiện hành động.

Skill không tự thực thi gì. Agent đọc skill, sau đó sử dụng các tool đã có. Model không thể truyền tham số cho skill theo cách truyền tham số cho tool. Skill chỉ có thể hướng dẫn model nên dùng tool nào, theo thứ tự nào và cần kiểm tra gì sau đó.

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 để sử dụng một khả năng đã 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 luận một cách nhất quán, bạn cần skill.

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 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 configuration, credentials và một command cục bộ hoặc network endpoint. Skill là một folder chứa một file markdown. Skill không có process, port hoặc protocol.

Context cost cũng khác theo cách tương tự. Mỗi tool do MCP server expose đều có tên, mô tả và argument schema. Theo mặc định, các thông tin này nằm trong request suốt cả session, dù có được dùng hay không. Một số client đã bắt đầu fetch tool schema on demand, nhưng load schema ngay từ đầu vẫn là cách phổ biến. Skill khi chưa được dùng chỉ là một dòng text.

Hai thành phần này bổ trợ cho nhau, và setup mạnh nhất thường chạy cả hai. MCP server cung cấp quyền truy cập. Skill cung cấp quy trình: cần gọi 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 bạn tự host, chạy MCP server trên VPS trình bày phần đó.

Skill của agent không phải là system prompt hoặc AGENTS.md

Cả hai đều là hướng dẫn viết bằng markdown, nên dễ nhầm lẫn. Điểm khác biệt 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.

Hãy kiểm tra bằng một câu hỏi: nếu bỏ qua đoạn này trong một tác vụ không liên quan 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 tác vụ, nên chúng thuộc file luôn được nạp. Việc kiểm tra checklist release hai lần mỗi tháng không áp dụng cho mọi tác vụ, nên nó thuộc một skill. Khi một phần trong file luôn được nạp đã trở thành một quy trình được đánh số, đó là dấu hiệu nên chuyển phần đó sang skill.

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

Một skill tối giản 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, nên mọi người và mọi agent làm việc trong repository đó đều có skill này. GitHub Copilot và VS Code đọ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, nên skill này là /restore-drill. Trong Claude Code, menu /skills liệt kê các skill đã 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 đó, tên đang bị sai: file phải có tên SKILL.md, còn tên thư mục chỉ được dùng chữ thường, chữ số và dấu gạch ngang đơn. Việc viết cùng quy trình dưới dạng procedure để 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à backup đã khôi phục được.

Khi skill nên được viết thành 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 cho biết khi nào chạy script và cách đọc output. Có 2 lý do, và cả 2 đều mang tính thực tế.

Thứ nhất, source code của script không đi vào context window. Một parser dài 300 dòng chỉ tiêu tốn phần output của nó, trong khi cùng logic đó nếu viết thành hướng dẫn markdown sẽ chiếm toàn bộ độ dài 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 phải tự suy ra lại cùng một quy tắc phân tích log, kết quả có thể khác một chút vào những ngày không may. Bạn có thể không nhận ra cho đến khi 2 con số không khớp.

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

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

description của skill chỉ nói skill làm gì mà không nói khi nào cần dùng. Agent chỉ có dòng đó để đối chiếu với yêu cầu của bạn. “Hỗ trợ các công việc về database” không khớp cụ thể với yêu cầu nào. “Chạy schema migration trên database staging. Dùng khi người dùng yêu cầu migrate một table, thêm một 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 được 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 nội dung skill được nạp trong mọi task và 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 nạp và vẫn dùng được skill khi bạn nhập tên của nó.

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

Đừng đoán bạn đang gặp trường hợp nào trong 3 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 thứ mà skill nêu ra, nên sẽ 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 lẽ ra 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.

Đây là định dạng riêng của một nhà cung cấp 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 dưới dạng một tiêu chuẩn mở 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 namedescription, các trường tùy chọn license, compatibility, metadataallowed-tools, ba thư mục tùy chọn và cơ chế tải theo từng giai đoạn. Định dạng này cũng kèm theo một trình xác thực tham chiếu, vì vậy 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à dấu hiệu đáng chú ý. 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 phát hành 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 gồm các bước theo đúng thứ tự, rồi ghi kết quả thành một skill. Việc một vendor xây dựng recorder có output format 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.

Nên 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 bộ 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 phần đã dán. Sự lặp lại mà bạn đã trực tiếp nhận thấy là tín hiệu đáng tin cậy duy nhất cho một skill đáng lưu giữ. Quy trình tìm kiếm là lựa chọn tốt để bắt đầu, và một search skill dùng SearXNG instance của riêng bạn cho thấy cấu trúc của nó.

Hai thói quen giúp thư viện luôn an toàn và dễ quản lý. 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 các hướng dẫn mà agent sẽ làm theo và code mà agent có thể chạy: hãy xử lý việc này như cài phần mềm từ một người xa lạ. Đồng thời, không lưu credential trong thư mục này, vì skill là một file văn bản có thể được commit và chia sẻ. Cách giữ secret cách xa các 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 với các phần còn lại của quá trình thiết lập.

FAQ

Agent skill khác MCP server như thế nào?

MCP (model context protocol) server là một process đang chạy và cung cấp tools cho agent 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. Nó không có process và không dùng protocol. Chi phí của nó chỉ khoảng 100 tokens cho đến khi agent quyết định đọc file. Dùng MCP server để cho agent truy cập một hệ thống. 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, sau đó 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 thêm những field frontmatter nào. Claude Code đọc ~/.claude/skills/.claude/skills/, còn GitHub Copilot và VS Code đọc .github/skills/ trong repository. File SKILL.md vẫ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 chạy chậm?

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, khoảng 100 tokens theo hướng dẫn được công bố trong specification. Vì vậy, 30 skill tốn khoảng 3,000 tokens trước khi bất kỳ skill nào được dùng. Thứ suy giảm trước 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 trong AGENTS.md?

Hãy xác định instruction đó có áp dụng cho mọi task trong repository hay không. Build command, quy ước 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 đó mỗi lần. Một procedure chỉ chạy thỉnh thoảng, như release checklist hoặc restore drill, nên là một skill. Khi đó, các task không cần procedure này sẽ không phải trả chi phí load. 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.

#ai-agents#skills#claude-code#prompting#tooling