Context Engineering P5 – Claude Code Skill System

26 min read

Claude Code Skill System

Bạn mở system prompt của agent: 22.000 token. Năm năng lực khác nhau, mỗi năng lực có “đặc tả”, ví dụ minh họa và các trường hợp ngoại lệ riêng. Hướng dẫn xuất bản lên WordPress đan xen với quy tắc viết lại markdown, phía sau là tham số tạo hình ảnh, quy trình kiểm thử và thủ tục triển khai.

Agent vẫn hoạt động, phần lớn thời gian là vậy. Nhưng rồi bạn bắt đầu nhận ra một vấn đề: khi yêu cầu nó xuất bản một bài blog, đôi lúc nó áp dụng quy tắc viết lại markdown quá sớm. Khi tạo hình ảnh, thỉnh thoảng nó lại cố chạy các assertion kiểm thử. Các năng lực bắt đầu chồng chéo, can thiệp lẫn nhau theo những cách mà bạn chưa từng dự tính.

Rồi hiệu suất suy giảm. Agent vốn phản hồi trong 3 giây giờ mất 8 giây. Chi phí token tăng gấp ba. Bạn trả tiền cho 22.000 token chỉ thị với mọi yêu cầu, ngay cả khi người dùng chỉ muốn kiểm tra đường dẫn file.

Thế Giới Cũ: Cuộc Sống với Mega-Prompt

Đầu năm 2024, mega-prompt là state of the art. Bạn có 200K token context (xem context engineering). Nhồi 20K chỉ thị vào đó có vẻ hợp lý. Tuy nhiên, cách tiếp cận này bắt đầu gặp vấn đề khi mở rộng. Mẫu hình xuất hiện tự nhiên: một file system.md chứa mọi thứ agent cần biết. Documentation writer, code reviewer, data analyst mỗi vai trò có section riêng. File phình to, nhưng nó hoạt động.

Tất nhiên, có những ưu điểm thực sự. Mọi thứ ở một chỗ. Không có logic tải phức tạp, không có quy tắc kích hoạt để debug. Muốn đổi hành vi? Sửa một file. Kiểm thử nghĩa là một artifact để version control. Tính đơn giản rất hấp dẫn. Với agent có 2-3 khả năng, đây thực sự là lựa chọn đúng.

Nhưng yêu cầu phát triển. Agent bắt đầu là “code reviewer” thành “code reviewer kiêm viết test, tạo documentation, xuất bản release và giám sát deployment”. Mỗi khả năng mang theo context riêng: định nghĩa tool, workflow step, output format, xử lý lỗi (xem context architecture). File đơn phình từ 15.000 token lên 25.000, rồi hơn nữa. Và đó là lúc vết nứt xuất hiện.

Điểm Bùng Phá: Ba Vấn đề Mega-Prompt Không Giải Quyết Được

Vấn đề 1: Nhiễu Chéo Lệnh – The Ghost in the Machine

Agent của bạn có hai khả năng: (1) viết tài liệu kỹ thuật, (2) tạo SQL query từ ngôn ngữ tự nhiên. Cả hai hoạt động hoàn hảo khi tách biệt. Nhưng khi cả hai instruction set nạp cùng lúc, điều kỳ lạ xảy ra. Tài liệu bắt đầu có code block định dạng như SQL schema. Trình tạo SQL bắt đầu thêm văn xuôi giải thích như đang viết tutorial.

Đây là nhiễu chéo lệnh. Khi các khả năng dùng chung cửa sổ ngữ cảnh, các chỉ thị của chúng rò rỉ vào nhau (xem progressive disclosure). Model thấy “dùng ngôn ngữ rõ ràng, dễ hiểu” từ docs skill và “chính xác, tối giản” từ SQL skill trong cùng prompt. Nó cố thỏa mãn cả hai. Kết quả không là cái nào.

Hơn nữa, vấn đề trở nên nghiêm trọng khi mở rộng. Hai khả năng can thiệp thỉnh thoảng. Năm khả năng can thiệp liên tục. Đến khi có tám, hành vi agent trở nên không đoán trước được không phải vì bất kỳ instruction set đơn lẻ nào sai, mà vì chúng tạo ra các prior xung đột khi tải chung.

Vấn đề 2: Bùng Nổ Token – Trả Tiền cho Context Bạn Không Dùng

Con số tàn khốc. Agent của bạn có năm khả năng. Trung bình, một yêu cầu cần một trong số đó. Nhưng cả năm đều nạp với mọi yêu cầu vì chúng sống trong cùng system prompt.

Đặt con số cụ thể:

  • WordPress publishing: 3.500 token
  • Markdown rewriting: 4.200 token
  • Image generation: 5.800 token
  • Testing workflows: 4.100 token
  • Deployment procedures: 3.900 token

Tổng nạp: 21.500 token mỗi yêu cầu

Trung bình thực dùng: ~4.300 token (một khả năng cần thiết)

Hiệu suất token: 20% (4.300 / 21.500)

Lãng phí: Bạn trả tiền cho 17.200 token chỉ thị không liên quan với mọi yêu cầu. Ở mức $3 trên triệu input token (giá Claude Sonnet), đó là 5 cent lãng phí mỗi yêu cầu. Nhân với 10.000 yêu cầu mỗi tháng và bạn đã bỏ $500 cho chỉ thị agent chưa bao giờ dùng.

Tuy nhiên, chi phí token còn chưa phải vấn đề thực sự. Độ dài context làm suy giảm chất lượng suy luận. Nghiên cứu từ Stanford và UC Berkeley (2025) phát hiện rằng ngay cả khi model đạt độ chính xác truy xuất hoàn hảo, hiệu suất giảm 13,9% đến 85% khi độ dài input tăng từ 10K lên 100K token. Llama-3.1-8B giảm 24,2% trên các tác vụ suy luận ở 30K token dù độ chính xác truy xuất là 97%. Model có thể tìm được thông tin. Nhưng không thể suy luận trên nó.

Do đó, mega-prompt không chỉ lãng phí token. Nó còn chủ động làm agent của bạn ngớ ngẩn hơn bằng cách buộc nó xử lý hàng nghìn token context không liên quan với mọi yêu cầu.

Vấn đề 3: Version Quản Lý Địa Ngục – Khi Mọi Thay Đổi Đều Toàn Cục

Bạn cần sửa bug trong workflow xuất bản WordPress. Vấn đề rõ ràng: nó không xử lý đúng category. Bạn thực hiện sửa đổi nhắm mục tiêu đổi 3 dòng trong section publishing.

Nhưng đây là vấn đề: sửa đổi nằm trong cùng file với bốn khả năng khác. Triển khai nghĩa là nạp lại toàn bộ prompt 22.000 token. Nếu thay đổi của bạn vô tình phá vỡ điều gì đó trong logic tạo hình ảnh ba section đằng xa thì sao? Nếu chỉ thị WordPress mới can thiệp vào markdown rewriter thì sao?

Bạn không thể A/B test chỉ riêng sửa đổi WordPress. Không thể rollback chỉ WordPress nếu sửa đổi không hiệu quả. Không thể cho một nửa người dùng hành vi WordPress mới trong khi giữ image generator cũ. Monolith buộc version toàn cục. Mọi thay đổi, dù nhắm mục tiêu như thế nào, đều ảnh hưởng tất cả khả năng cùng lúc.

Cuối cùng, các team bắt đầu maintain nhiều bản sao hoàn chỉnh của prompt file: system-v1.md, system-v2.md, system-experimental.md. Họ diff các file khổng lồ để hiểu thay đổi gì. Họ xây dựng công cụ tùy chỉnh để ghép các section lại. Tính đơn giản vốn làm mega-prompt hấp dẫn bay hơi.

Giới Thiệu Skill System: Khả Năng như Gói Rời Rạc

Tháng 11/2025, Anthropic chính thức hóa phương án thay thế: Agent Skills. Ý tưởng cốt lõi đơn giản. Thay vì một prompt khổng lồ chứa tất cả khả năng, mỗi khả năng trở thành gói rời rạc, một skill với vòng đời tải riêng.

Thực tế như thế này. Lấy khả năng xuất bản WordPress và biến thành skill.

Trước đây (monolithic prompt):

## System Prompt

## WordPress Publishing
When the user wants to publish to WordPress:
1. Check for .env file with WP_SITE_URL, WP_COOKIE_LOGGED_IN, WP_COOKIE_SEC
2. Run wordpress_publisher.py script
3. If authentication fails, guide cookie refresh
[... 3,500 token chỉ thị nữa ...]

## Markdown Rewriting
[... 4,200 token ...]

## Image Generation
[... 5,800 token ...]

Sau này (skill-based):

.claude/skills/wordpress-publisher/
├── SKILL.md (227 dòng chỉ thị)
└── scripts/
    └── wordpress_publisher.py

SKILL.md bắt đầu bằng YAML frontmatter:

---
name: wordpress-publisher
description: Publishes markdown blog posts to WordPress as drafts using REST API with cookie authentication. Use this skill whenever the user wants to publish a blog post, push content to WordPress, upload articles to their blog, or set up WordPress publishing. Also trigger when they mention WordPress configuration, cookie authentication issues, or need help getting WordPress credentials set up.
---

Vậy thôi. Đó là những gì nạp mặc định. Khi người dùng nói “publish my blog post to WordPress,” Claude thấy description này trong danh sách available skills, xác định khớp, và lúc đó mới nạp SKILL.md đầy đủ với 227 dòng chỉ thị.

Hiệu suất token trước đây: 20% (dùng 4.300 trong 21.500 nạp)

Hiệu suất token sau này: ~95% (nạp description 100 token, sau đó chỉ skill cần thiết)

Khác biệt không chỉ là token. Nó là kiến trúc. Skill biến đổi khả năng từ payload (đẩy vào mọi yêu cầu) thành resource (kéo theo nhu cầu khi cần).

Giải Phẫu Skill: Ba Tầng, Một Hợp Đồng

Skill thực hiện progressive disclosure ở cấp độ khả năng. Nhớ Rabbit Hole Principle từ Phần 2 series này: cấu trúc thông tin như điểm vào nông dẫn đến chi tiết dần sâu hơn, mỗi cấp độ tiếp cận được bằng một lệnh gọi tool duy nhất. Skill áp dụng nguyên tắc này cho khả năng nhận thức.

Skill Anatomy: Three-layer progressive disclosure structure

Tầng 1: Metadata (~100 token)

Tầng bề mặt. Tên cộng description. Luôn nạp, luôn hiển thị. Đây là những gì Claude thấy trong danh sách available_skills khi bắt đầu mọi cuộc trò chuyện.

Trường description là cơ chế kích hoạt chính. Nó phải trả lời hai câu hỏi:

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

Từ .claude/skills/wordpress-publisher/SKILL.md:

description: Publishes markdown blog posts to WordPress as drafts using REST API with cookie authentication. Use this skill whenever the user wants to publish a blog post, push content to WordPress, upload articles to their blog, or set up WordPress publishing. Also trigger when they mention WordPress configuration, cookie authentication issues, or need help getting WordPress credentials set up.

Chú ý mẫu: câu đầu tiên là GÌ (xuất bản lên WordPress). Phần còn lại là KHI NÀO (cụm từ kích hoạt rõ ràng). Không ngẫu nhiên. Tài liệu skill-creator ghi chú:

Note: currently Claude has a tendency to “undertrigger” skills — to not use them when they’d be useful. To combat this, please make the skill descriptions a little bit “pushy”.

Description nạp mọi lần, nên giữ súc tích. Claude Code có ngân sách chưa được ghi chép là ~15.500-16.000 ký tự cho toàn bộ danh sách skill (GitHub Issue #13099). Khi vượt quá, một số skill trở nên vô hình với agent. Nếu bạn có 20 skill với description 100 token mỗi cái, bạn tiêu thụ ~40.000 ký tự đã vượt giới hạn. Ràng buộc này biến “viết description rõ ràng, tối giản” thành yêu cầu thực sự, không chỉ hướng dẫn phong cách.

Tầng 2: Core Instructions (200-5.000 token)

Tầng chi tiết. Phần thân SKILL.md đầy đủ. Chỉ nạp khi skill kích hoạt.

Đây là nơi các chỉ thị thực sự nằm. Workflow step, xử lý lỗi, output format, trường hợp ngoại lệ. Từ wordpress-publisher:

## Core Workflow

### First-Time Setup
If the user hasn't set up WordPress publishing yet:
1. Check for dependencies: `python3 -c "import requests, dotenv, markdown"`
2. Create `.env` file if it doesn't exist
3. Guide cookie extraction from browser DevTools
4. Test the connection

### Publishing Posts
1. Identify the post to publish
2. Determine parameters: status (draft/publish), category, tags
3. Run the publishing script
4. Handle the output: success → show URLs, error → diagnose

Tài liệu skill-creator khuyên giữ SKILL.md dưới 500 dòng. Tại sao 500? Vì Tầng 2 nạp toàn bộ khi skill kích hoạt, nên kích thước ảnh hưởng trực tiếp chi phí mỗi lần gọi. Chính skill-creator là 479 dòng đó là chuẩn độ phức tạp cho “skill lớn, tinh vi”.

Nhưng Tầng 2 không cần chứa mọi thứ. Nó chỉ cần chứa đủ để chỉ đến mọi thứ.

Tầng 3+: Bundled Resources (không giới hạn)

Tầng độ sâu. Script, file tham khảo, ví dụ, config template bất cứ thứ gì trong thư mục skill. Nạp theo nhu cầu khi agent gặp nhu cầu cụ thể trong quá trình thực thi.

wordpress-publisher/
├── SKILL.md
├── scripts/
│   ├── wordpress_publisher.py
│   └── requirements.txt
└── evals/
    └── evals.json

Insight quan trọng, từ tài liệu Anthropic:

“Lượng context có thể gói vào skill thực tế không giới hạn.”

Không có hình phạt token cho nội dung agent không truy cập. Một skill có thể bao gồm 50.000 token tài liệu tham khảo, và nếu agent chỉ cần tóm tắt 300 token, đó là tất cả những gì nó nạp. Độ sâu ở đó khi cần, nhưng không làm suy giảm chú ý khi không cần.

Đây là mẫu giống Rabbit Hole Principle, chỉ áp dụng cho khả năng thay vì dữ liệu. Tầng 1 là bản đồ (gì tồn tại). Tầng 2 là hướng dẫn (cách dùng). Tầng 3+ là chi tiết (triển khai thực tế). Agent đi xuống chỉ sâu bằng tác vụ hiện tại yêu cầu.

Skill vs Tool vs System Prompt: Chọn Abstraction Đúng

Khi nào dùng skill thay vì tool thay vì chỉ viết vào system prompt? Câu trả lời phụ thuộc vào bạn đang gói gì.

ChiềuSystem PromptToolSkill
Nó gói gìHành vi agent, giọng văn, chỉ thị chungThao tác xác định, API ngoàiWorkflow, mẫu nhận thức, quy trình đa bước
Khi nào nạpLuôn luôn (mọi yêu cầu)Khi agent gọiKhi tác vụ khớp description
Token overheadChi phí đầy đủ mọi yêu cầuĐịnh nghĩa tool (~50-200 token)Metadata (~100 token) cho đến khi kích hoạt
Kích thước thông thường1.000-5.000 token50-300 token (định nghĩa)200-5.000 token (chỉ thị)
Tần suất thay đổiHiếm (tính cách agent cốt lõi)Trung bình (API phát triển)Cao (workflow cải thiện lặp lại)
Ví dụ“You are a senior engineer. Be concise.”get_weather(location: str)WordPress publishing workflow, test generation process

Chọn system prompt cho bản sắc và hành vi agent nên áp dụng cho mọi tương tác. Persona cốt lõi, tùy chọn output format, hành vi cấm. Bất cứ thứ gì bạn muốn agent luôn nhớ.

Chọn tool cho thao tác xác định. Đọc file, gọi API, chạy tính toán. Nếu tác vụ giải quyết được bằng code và có hợp đồng input/output rõ ràng, đó là tool. Tool rẻ (định nghĩa 50-200 token) và chính xác (agent truyền tham số, nhận kết quả).

Chọn skill cho workflow. Quy trình đa bước yêu cầu phán đoán, quyết định theo ngữ cảnh và tinh chỉnh lặp lại. Xuất bản lên WordPress yêu cầu đọc file, kiểm tra cấu hình, xử lý lỗi và hướng dẫn người dùng qua thiết lập. Đó là workflow, không phải function call. Skill cho phép bạn gói mẫu nhận thức.

Ví dụ thực tế: Skill article-illustrator trong codebase này.

Nó làm gì: Phân tích bài viết, xác định vị trí minh họa tối ưu, tạo hình ảnh bằng hệ thống nhất quán type × style.

Tại sao là skill, không phải tool: Workflow yêu cầu phán đoán ở mọi bước. Section nào cần minh họa? Loại gì (infographic vs scene vs flowchart)? Style nào khớp nội dung? Tool sẽ cần tham số rõ ràng cho mọi quyết định. Skill cung cấp framework nhận thức và để agent suy luận qua các lựa chọn.

Cách nó dùng progressive loading: SKILL.md (199 dòng) định nghĩa workflow và decision framework. Nó tham chiếu 8 style guide (notion, warm, minimal, blueprint, watercolor, elegant, editorial, scientific), mỗi cái 300-800 token. Đó là 6 type × 8 style = 48 tổ hợp có thể, đại diện ~20.000+ token specification.

Nhưng chỉ 2 file nạp mỗi lần gọi: SKILL.md (workflow) + style cụ thể được chọn (ví dụ references/styles/notion.md). 47 tổ hợp còn lại không tốn token. Đó là “context không giới hạn, độ sâu không tốn chi phí” trong thực tế.

Skill Isolation và Composition: Tại Sao Tách Biệt Hiệu Quả

Lợi ích tinh vi nhất của skill không phải hiệu suất token hay version. Nó là cô lập nhận thức.

Khi chỉ thị xuất bản WordPress sống trong mega-prompt cùng markdown rewriting và image generation, chúng dùng chung không gian chú ý. Agent thấy tất cả chỉ thị cùng lúc và phải quyết định cái nào áp dụng cho tác vụ hiện tại. Điều đó tạo nhiễu WordPress skill đôi khi cố áp dụng quy tắc định dạng markdown khi tạo thông báo lỗi.

Skill sửa điều này bằng cách chỉ nạp context nhận thức liên quan. Khi agent xử lý yêu cầu xuất bản WordPress:

  1. Tầng 1 nạp: Thấy wordpress-publisher trong available skill
  2. Skill kích hoạt: SKILL.md nạp với workflow xuất bản
  3. Agent thực thi: Chỉ chỉ thị WordPress hoạt động
  4. Skill khác: markdown-rewriter, image-generator giữ chưa nạp

Quy tắc viết lại markdown không cạnh tranh chú ý. Mẫu tạo hình ảnh không tạo prior xung đột. Context của agent chứa chính xác chỉ thị của một khả năng. Nhiễu biến mất.

Nhưng cô lập không nghĩa là skill không thể làm việc cùng nhau. Composition xảy ra qua môi trường dùng chung: file, tool, bộ nhớ. Một workflow skill có thể gọi tool để lấy dữ liệu, sau đó gọi skill khác xử lý kết quả. Bản thân các skill không biết về nhau chúng chỉ hoạt động trên cùng state.

Ví dụ từ codebase này: Workflow xuất bản blog.

  1. Người dùng: “Publish my context engineering post”
  2. Hệ thống: Tìm blog/contents/pratiacel-context-enginering/p5.../post.md
  3. wordpress-publisher skill nạp → xuất bản phiên bản tiếng Anh
  4. Phát hiện post-vn.md tồn tại → xuất bản phiên bản tiếng Việt
  5. Cả hai xuất bản dùng cùng skill, gọi hai lần

Composition tuần tự, không trạng thái và trung gian qua file. Mỗi lần gọi cô lập xuất bản thứ hai không kế thừa context từ lần đầu. Tính đơn giản này là điểm mấu chốt. Skill kết hợp qua data flow, không qua trạng thái nhận thức dùng chung.

Skill-creator skill cho thấy mẫu phức tạp hơn: composition phân cấp. SKILL.md tham chiếu ba file agent:

agents/
├── grader.md     — Đánh giá assertion so với output
├── comparator.md — So sánh mù A/B giữa các phiên bản
└── analyzer.md   — Phân tích tại sao phiên bản nào thắng

Đây không phải skill riêng biệt (chúng không có YAML frontmatter hay kích hoạt độc lập). Chúng là resource tham chiếu mà skill-creator nạp khi cần. Khi chạy evaluation, skill-creator tạo subagent và chỉ nó vào agents/grader.md. Agent đó nạp chỉ chỉ thị grader, thực thi, trả kết quả. Grader không biết nó là phần của skill lớn hơn. Nó chỉ tuân theo chỉ thị.

Đây là composition qua ủy quyền: skill-creator điều phối, subagent thực thi. Mỗi tầng giữ cô lập. Context đầy đủ không bao giờ cần nạp đồng thời.

Quản Lý Phiên Bản Skill như Phần Mềm: Định Dạng Gói .skill

Mega-prompt có một chiến lược version: commit toàn bộ file vào git và hy vọng. Skill cho phép các mẫu version phần mềm đúng nghĩa.

Mỗi skill là thư mục với hợp đồng rõ ràng:

skill-name/
├── SKILL.md (bắt buộc — frontmatter + chỉ thị)
├── scripts/ (tùy chọn — code thực thi)
├── references/ (tùy chọn — doc nạp theo nhu cầu)
├── assets/ (tùy chọn — template, file dùng trong output)
└── evals/ (tùy chọn — test case)

Cấu trúc này cho phép version skill độc lập. Xuất bản v2.1.0 của wordpress-publisher không ảnh hưởng markdown-rewriter v1.3.2. Bạn có thể chạy A/B test: 50% người dùng nhận workflow xuất bản mới, 50% giữ cũ. Bạn có thể rollback từng skill nếu gì đó hỏng.

Skill-creator bao gồm script đóng gói bundling skill thành file .skill archive di động có thể phân phối, cài đặt và quản lý phiên bản như software package:

python -m scripts.package_skill .claude/skills/wordpress-publisher
## Tạo: wordpress-publisher.skill

Định dạng .skill mở khả năng hệ sinh thái: skill marketplace, organizational skill registry, versioned capability catalog. Thay vì mọi team xây lại cùng khả năng “publish to WordPress” hay “generate test cases”, họ cài đặt và quản lý phiên bản skill như npm package.

Một số team đã ở đó. Anthropic maintain official skill repository (github.com/anthropics/skills) với các skill production-ready cho workflow phổ biến. Tổ chức đang xây dựng internal skill registry capability catalog nơi team xuất bản, khám phá và quản lý phiên bản skill qua các dự án.

Mẫu phản chiếu cách chúng ta quản lý phiên bản phần mềm: semantic versioning cho breaking change, feature branch cho thử nghiệm, blue-green deployment cho cập nhật zero-downtime. Ngoại trừ thay vì version code, bạn đang version khả năng nhận thức.

Xây Dựng Skill Đầu Tiên: Hướng Dẫn Migration

Cùng xem qua việc migrate khả năng từ mega-prompt sang skill. Chúng ta dùng ví dụ thực tế: tạo test.

Trước Đây: Monolithic Prompt

## System Prompt

## Test Generation
When the user asks you to generate tests:
1. Analyze the code file to understand the functions and their logic
2. For each function, create test cases covering:
   - Happy path: typical valid inputs
   - Edge cases: boundary values, empty inputs
   - Error cases: invalid inputs that should raise errors
3. Use pytest format with clear test names: test_<function>_<scenario>
4. Include docstrings explaining what each test verifies
5. Mock external dependencies (API calls, database access)
6. Aim for 80%+ code coverage

Example test structure:
```python
def test_calculate_discount_valid_input():
    """Verify discount calculation with standard valid input."""
    result = calculate_discount(price=100, discount_pct=20)
    assert result == 80

[… 3.000 token ví dụ, trường hợp ngoại lệ, xử lý lỗi nữa …]


**Chi phí token**: 3.200 token nạp với mọi yêu cầu, ngay cả khi không tạo test.

### Sau Này: Skill

Tạo `.claude/skills/test-generator/SKILL.md`:

```yaml
---
name: test-generator
description: Generates comprehensive pytest test cases for Python code. Use when the user asks to write tests, create test cases, add test coverage, or mentions pytest. Also trigger for requests to verify, validate, or check code behavior.
---

## Test Generator Skill

Generate comprehensive pytest test suites for Python functions and classes.

## Core Workflow

1. **Analyze the code**
   - Read the target file
   - Identify functions, classes, and their signatures
   - Note external dependencies (APIs, databases, file I/O)

2. **Design test cases**
   - Happy path: typical valid inputs
   - Edge cases: boundary values (empty strings, zero, negative numbers, None)
   - Error cases: invalid inputs that should raise exceptions

3. **Generate tests**
   - Use pytest format
   - Clear naming: `test_<function>_<scenario>`
   - Docstrings explaining what each test verifies
   - Mock external dependencies

4. **Verify coverage**
   - Aim for 80%+ code coverage
   - Ensure critical paths are tested

For detailed examples and patterns, see references/test-patterns.md.

Tạo references/test-patterns.md với 3.000 token ví dụ.

Chi phí token bây giờ:

  • Metadata: ~80 token (luôn nạp)
  • SKILL.md: ~400 token (nạp khi skill kích hoạt)
  • references/test-patterns.md: ~3.000 token (nạp chỉ nếu agent đọc nó)

Tổng khi dùng: 80 + 400 + (có thể 3.000) = 480-3.480 token

Tổng khi không dùng: 80 token

Chỉ Số Migration

Đo lường tác động. Giả sử:

  • 10 khả năng trong mega-prompt gốc
  • Trung bình 3.200 token mỗi khả năng
  • Yêu cầu người dùng gọi trung bình 1-2 khả năng

Trước đây (monolithic):

  • Token mỗi yêu cầu: 32.000 (tất cả 10 khả năng)
  • Dùng: ~6.400 (2 khả năng × 3.200 token)
  • Lãng phí: 25.600 (80% lãng phí)
  • Chi phí cho 1M yêu cầu: $96.000 (ở mức $3/M input token)

Sau này (skill-based):

  • Metadata nạp: 10 × 80 = 800 token
  • Skill nạp: 2 × 400 = 800 token
  • Tổng mỗi yêu cầu: 1.600 token
  • Chi phí cho 1M yêu cầu: $4.800

Tiết kiệm: $91.200 trên triệu yêu cầu (giảm 95%)

Nhưng chi phí token không phải thắng lợi duy nhất. Dựa trên nghiên cứu Stanford/UC Berkeley cho thấy suy giảm hiệu suất 13,9-85% với độ dài context tăng, bạn cũng có thể thấy cải thiện chất lượng từ việc giảm nhiễm context.

Đo Lường Cải Thiện

Skill-creator bao gồm công cụ evaluation để đo xem skill của bạn có thực sự hoạt động không. Tạo test case trong evals/evals.json:

{
  "skill_name": "test-generator",
  "evals": [
    {
      "id": 1,
      "prompt": "Generate tests for the calculate_discount function in utils/pricing.py",
      "expected_output": "pytest test suite with happy path, edge cases, and error cases",
      "assertions": [
        "Contains test_calculate_discount_valid_input",
        "Includes edge case for 0% discount",
        "Includes edge case for 100% discount",
        "Tests negative discount raises ValueError"
      ]
    }
  ]
}

Chạy eval:

python .claude/skills/skill-creator/scripts/run_eval.py \
  --skill-path .claude/skills/test-generator \
  --eval-file .claude/skills/test-generator/evals/evals.json

Script tạo test run, chấm điểm assertion và tạo báo cáo so sánh. Bạn nhận tỉ lệ pass định lượng và ví dụ định tính cạnh nhau. Đây là cách xác minh rằng việc tách khả năng thành skill không phá vỡ hành vi.

Mẫu Nâng Cao: Configuration Matrix và Meta-Skill

Khi hiểu cấu trúc ba tầng cơ bản, bạn có thể xây dựng mẫu tinh vi hơn.

Mẫu 1: Configuration Matrix (article-illustrator)

Một số skill cần hỗ trợ nhiều biến thể mà không nạp tất cả. Skill article-illustrator xử lý 6 loại minh họa (infographic, scene, flowchart, comparison, framework, timeline) × 8 phong cách thị giác (notion, warm, minimal, blueprint, watercolor, elegant, editorial, scientific) = 48 tổ hợp.

Nạp tất cả 48 style guide sẽ tốn ~35.000 token. Thay vào đó, SKILL.md bao gồm hướng dẫn lựa chọn:

### Type Selection Guide
| Type | Best For |
|------|----------|
| infographic | Data, metrics, technical articles |
| scene | Narratives, personal stories |
| flowchart | Tutorials, workflows |

### Style Selection Guide
| Style | Best For |
|-------|----------|
| notion | Knowledge sharing, SaaS |
| elegant | Business, thought leadership |
| warm | Personal growth, lifestyle |

Agent đọc cái này, chọn type + style phù hợp dựa trên nội dung bài viết, sau đó nạp chỉ style guide đó (ví dụ references/styles/notion.md – 650 token).

Kết quả: 48 cấu hình có sẵn, chỉ 1 nạp, ~650 token thay vì 35.000.

Mẫu 2: Meta-Skill (skill-creator)

Skill có thể về việc tạo skill. Skill-creator là skill 479 dòng để xây dựng, kiểm thử và tối ưu hóa các skill khác. Nó bao gồm:

  • Chỉ thị phỏng vấn người dùng về yêu cầu skill
  • Template cho cấu trúc SKILL.md
  • Script chạy evaluation và chấm điểm assertion
  • Viewer dựa trên HTML để xem xét kết quả test
  • Vòng tối ưu hóa description A/B test các cụm từ kích hoạt

Đây là skill tạo skill. Mẫu tổng quát hóa: bạn có thể xây skill hoạt động trên workflow, skill kết hợp các skill khác, skill phân tích hiệu suất skill. Abstraction đệ quy.

Mẫu 3: Progressive Depth Reference

SKILL.md của skill-creator là 479 dòng. Lớn, nhưng không quá tải vì dùng con trỏ rõ ràng đến nội dung sâu hơn:

## Creating a skill

[... 200 dòng workflow ...]

For detailed examples and patterns, see references/test-patterns.md.

For JSON schema specifications, see references/schemas.md.

## Running evaluations

[... 300 dòng eval workflow ...]

For grading instructions, spawn a subagent with agents/grader.md.
For blind comparison, use agents/comparator.md.
For analysis of results, use agents/analyzer.md.

Agent đọc SKILL.md 479 dòng, theo con trỏ khi cần. Phần lớn thời gian nó không cần toàn bộ schema reference hay blind comparison agent. Khi cần, đường dẫn file ngay đó. Điều này giữ Tầng 2 điều hướng được trong khi duy trì độ sâu Tầng 3 không giới hạn.

Mẫu Production: Khả Năng Cấp Team

Skill không chỉ cho agent cá nhân. Chúng đang xuất hiện như hệ thống quản lý khả năng cấp team.

Organizational Skill Registry

Một số tổ chức maintain catalog skill nội bộ:

company-skills/
├── legal-review/        — Workflow phân tích hợp đồng
├── data-pipeline/       — Tạo ETL job
├── incident-response/   — Tự động hóa runbook on-call
├── compliance-check/    — Xác minh yêu cầu quy định
└── vendor-onboarding/   — Workflow tích hợp nhà cung cấp

Mỗi skill được sở hữu bởi một team, quản lý phiên bản độc lập và có sẵn qua các dự án. Khi legal cập nhật workflow xem xét hợp đồng, mọi agent dùng skill đó nhận cập nhật. Khi data eng phát hiện bug trong pipeline generator, họ sửa một lần và triển khai cho tất cả consumer.

Mẫu phản chiếu cách tổ chức quản lý software library: central registry, semantic versioning, dependency management. Ngoại trừ các gói là khả năng nhận thức.

Persona Bundle

Skill có thể gói thành bộ khả năng cụ thể vai trò:

Customer Support Agent bundle:

  • ticket-classifier (phân loại yêu cầu đến)
  • knowledge-base-search (tìm doc liên quan)
  • response-generator (soạn phản hồi với giọng thương hiệu)

Data Analyst bundle:

  • sql-generator (ngôn ngữ tự nhiên → query)
  • chart-builder (hình dung kết quả)
  • report-formatter (tạo tóm tắt stakeholder)

DevOps Engineer bundle:

  • log-analyzer (parse và chẩn đoán lỗi)
  • deployment-runner (thực thi workflow release)
  • rollback-handler (hoàn tác deploy thất bại)

Mỗi bundle là bộ skill được tuyển chọn cho vai trò cụ thể. Agent nạp bundle, có quyền truy cập tất cả skill bao gồm và kích hoạt chúng khi cần. Đây là kiến thức tổ chức được gói như khả năng có thể cài đặt.

Skill Marketplace (Tương Lai)

Mẫu mở rộng ra ngoài tổ chức. Skill repository công khai của Anthropic (github.com/anthropics/skills) đã tồn tại. Các developer độc lập đang xây dựng và chia sẻ skill. Hệ sinh thái có vẻ hướng đến:

  • Skill registry: Package manager kiểu NPM cho khả năng
  • Versioned dependency: Skill phụ thuộc vào skill khác
  • Automated testing: CI/CD cho chất lượng skill
  • Usage analytics: Skill nào kích hoạt nhiều nhất, thất bại ở đâu
  • Marketplace dynamics: Skill miễn phí, skill premium, enterprise support

Không phải suy đoán. Cơ sở hạ tầng đã tồn tại. Định dạng gói .skill, framework evaluation, hệ thống kích hoạt, đây là khối xây dựng của capability marketplace.

Nhìn Về Phía Trước: Kỷ Luật Capability Engineering

Chúng ta đang chứng kiến kỷ luật mới xuất hiện: capability engineering.

Năm 2020, primitive là prompt. Bạn viết prompt tốt, bạn nhận kết quả tốt. Đến 2023, nó phát triển thành prompt engineering kỹ thuật hệ thống để cấu trúc yêu cầu. Năm 2024, nó trở thành context engineering thiết kế kiến trúc cách thông tin chảy qua hệ thống agent. Giờ, năm 2026, chúng ta thấy capability engineering,. thực hành gói workflow nhận thức như skill modular, versioned, composable.

Skill system còn sớm. Chưa có ngôn ngữ composition, skill không phụ thuộc vào skill khác theo chương trình. Chưa có type system cho capability contract. Chưa có tối ưu hóa tự động skill description dựa trên dữ liệu kích hoạt. Nhưng chúng sẽ đến.

Quá trình rõ ràng:

Giai đoạn 1 (Hiện tại): Tạo skill thủ công. Bạn viết SKILL.md bằng tay, test thủ công, triển khai bằng copy file.

Giai đoạn 2 (Sớm): Ngôn ngữ composition skill. Skill khai báo phụ thuộc vào skill khác. Agent cài đặt và quản lý phiên bản chuỗi khả năng. Testing trở nên tự động qua eval framework.

Giai đoạn 3 (Sau này): Tổng hợp khả năng. Agent phân tích hiệu suất riêng, xác định khoảng trống và tạo skill mới để lấp chúng. Skill-creator đã đi được 70% đường đến đó, nó có thể phỏng vấn bạn, soạn skill, test nó và cải thiện lặp lại. Bước tiếp theo là agent làm điều này tự động.

Tại AWS re:Invent 2025, thông điệp của Anthropic trực tiếp: “Claude đã đủ thông minh, trí thông minh không phải nút thắt cổ chai, context mới là.” Skill là câu trả lời cho nút thắt đó. Không phải bằng mở rộng context window (chúng ta đã có 200K token), mà bằng thiết kế kiến trúc cách context nạp. Progressive disclosure. Độ sâu không giới hạn, sẵn sàng không tốn chi phí. Khả năng như resource, không phải payload.

Kỷ nguyên mega-prompt kết thúc. Skill là primitive mới. Câu hỏi không phải liệu có áp dụng chúng, mà bạn có thể migrate nhanh như thế nào.

*Bài viết dựa trên nghiên cứu từ blog kỹ thuật Anthropic, phân tích kiến trúc skill của Claude Code và các mẫu production từ triển khai thực tế tính đến tháng 1/2026. Skill tiếp tục phát triển — mong đợi các mẫu mô tả ở đây trưởng thành nhanh chóng.*

Nguồn & Tài Liệu Tham Khảo

  • Anthropic Engineering Blog — “Equipping agents for the real world with agent skills” (claude.com/blog/…, 2025)
  • CodeAgents Research — “CodeAgents: Multi-Agent Systems for Software Engineering” (arxiv.org/html/2507.03254v1, 2025) — Giảm 54% token, giảm 50% latency trong hệ thống modular
  • Stanford/UC Berkeley Research — Suy giảm hiệu suất trong LLM context dài dù truy xuất hoàn hảo (2025)
  • Epixelsoft Analysis — “Beyond Mega-Prompts: Scaling AI with Modular Agent Skills” (epixelsoft.com, 2025) — Giảm 30% latency qua modular loading
Avatar photo

Leave a Reply

Your email address will not be published. Required fields are marked *