# Agent skills: guideline và năng lực mới cho AI agent

[K. Siva Prasad Reddy](https://homus.dev/speakers/k-siva-prasad-reddy) · [SivaLabs](https://homus.dev/orgs/sivalabs)

> Agent skill là gì, vì sao gọn hơn AGENTS.md, cài bằng npx skills add, gọi trong Claude Code và Codex, rồi vibe code trang sản phẩm Spring Boot.

Topics: Skills, Coding Agents, Context Engineering

Canonical: https://homus.dev/talks/agent-skills-give-guidelines-additional-capabilities-to-ai-agents

## 1. Video này nói về gì

Siva (K. Siva Prasad Reddy, kênh SivaLabs) mở đầu bằng câu "Welcome back" rồi giới thiệu chủ đề: agent skills. Anh sẽ đi qua các câu hỏi: agent skill chính xác là gì, vì sao cần đến nó, dùng nó thế nào, và dùng nó trong IntelliJ IDEA ra sao. Sau đó anh sẽ tận dụng các agent skill dành cho Spring Boot để implement một trang danh sách sản phẩm (product listing page) trong app mẫu của loạt video (video đăng ngày 22/10/2026).

![Ảnh bìa: VIDEO 6, Agent Skills, Building with AI Agents, IntelliJ IDEA + Spring Boot](https://homus.dev/photos/Rf2U1tubj6E-0005.jpg)

Ảnh mở đầu cho biết đây là video số 6 của loạt "Building with AI Agents", dùng IntelliJ IDEA và Spring Boot, chủ đề Agent Skills (video đăng ngày 22/10/2026).

Cuối video, anh hứa sẽ chia sẻ một số agent skill được biết đến rộng rãi và chất lượng, đặc biệt cho việc phát triển ứng dụng Spring Boot, cùng vài agent skill dùng chung mà theo lời anh (video đăng ngày 22/10/2026) được nhiều người đánh giá cao và sử dụng. Rồi anh bắt đầu.

## 2. Agent skill là gì: guideline và năng lực mới

Câu hỏi đầu tiên: agent skill chính xác là gì? Siva giải thích: khi bạn yêu cầu agent implement một thứ gì đó, thường có nhiều hơn một cách để làm. Vậy làm sao agent biết phải theo pattern nào? Theo Siva (video đăng ngày 22/10/2026), đây chính là chỗ agent skill xuất hiện.

Với agent skill, bạn chỉ rõ bạn muốn agent implement một feature theo cách nào, dựa trên ngôn ngữ và framework bạn đang dùng. Trong ví dụ của anh là Java và Spring Boot. Bạn có thể nói với agent: "mỗi khi tôi nhờ bạn implement một feature, đây là cách tôi muốn bạn viết controller, đây là cách tôi muốn bạn viết service hay repository, và đây là công cụ database migration cần dùng". Tất cả những guideline đó bạn có thể viết thành một agent skill rồi đưa cho agent làm theo (theo Siva, video đăng ngày 22/10/2026).

Nhưng agent skill không chỉ để chứa guideline. Theo cách Siva mô tả (video đăng ngày 22/10/2026), một agent skill thường mở rộng năng lực của bất kỳ agent nào. Lấy ví dụ đang build một ứng dụng Spring Boot: một agent skill có thể đơn giản chỉ là một tập guideline, đơn giản vậy thôi. Hoặc nó có thể cung cấp thêm năng lực để làm một số việc cụ thể.

Anh đưa một ví dụ tưởng tượng: bạn có một loạt ảnh gốc và muốn tạo thumbnail từ những ảnh đó. Giả sử bạn đã có sẵn một script Python hoặc một CLI tool nào đó làm được việc này. Bạn có thể dùng chính script hay CLI tool đó để tạo một agent skill. Khi bạn nói với agent "thư mục này chứa các ảnh này, tôi muốn tạo thumbnail cho tất cả ảnh trong thư mục", và nếu description của skill được viết đúng cách, agent sẽ hiểu rằng: "à, cho việc này mình có thể dùng skill tạo thumbnail kia", rồi gọi CLI tool đó để làm các bước và cuối cùng tạo ra thumbnail (ví dụ minh hoạ của Siva, video đăng ngày 22/10/2026).

Tóm lại, theo Siva (video đăng ngày 22/10/2026), một agent skill có thể chỉ là một tập guideline, hoặc có thể thực sự làm một số việc, tức là ta đang mở rộng năng lực mặc định của agent.

Hai dạng agent skill Siva phân biệt: một bộ quy ước để agent làm theo, hoặc một năng lực mới mà agent gọi tới qua script hay CLI tool khi description của skill khớp với việc được giao (theo Siva, video đăng ngày 22/10/2026).

## 3. Vì sao không nhét hết vào AGENTS.md hay CLAUDE.md

Siva nói tiếp: nếu bạn bắt đầu dùng agent từ sớm, có lẽ bạn đã quen với file AGENTS.md, file CLAUDE.md, nơi chúng ta từng đặt tất cả thông tin về guideline và mọi thứ khác vào đó để AI agent làm theo. Vậy cách làm đó có vấn đề gì (video đăng ngày 22/10/2026)?

Theo Siva (video đăng ngày 22/10/2026), nếu bạn đặt toàn bộ guideline vào file AGENTS.md thì mỗi lần gửi request tới LLM, toàn bộ nội dung file AGENTS.md đó được gửi kèm cùng prompt. Như vậy là tốn thêm rất nhiều token.

Thay vào đó, bạn có thể tạo một agent skill, đặt cho nó một cái tên và một description đúng nghĩa. Khi bạn giao việc, agent đọc description và cân nhắc: "với việc này, có lẽ skill kia dùng được". Skill được load động (dynamically) dựa trên việc bạn đang giao, rồi agent làm theo các guideline trong đó. Siva gọi đây là một kiểu "dynamic discovery" của skill: thay vì nhúng mọi skill vào mọi prompt, agent tự khám phá skill phù hợp dựa trên việc được giao, và nhờ đó bạn không tốn nhiều token (theo Siva, video đăng ngày 22/10/2026).

Lập luận của Siva: nội dung AGENTS.md đi kèm mọi request nên tốn token; còn với skill, agent đọc description rồi chỉ load skill khớp với việc đang làm (video đăng ngày 22/10/2026).

## 4. Bộ SivaLabs agent skills và file SKILL.md

Vậy một agent skill trông như thế nào? Siva đã tạo một bộ agent skill riêng cho việc phát triển ứng dụng Java Spring Boot, đặt trong repo GitHub của anh tên [sivalabs-agent-skills](https://github.com/sivaprasadreddy/sivalabs-agent-skills). Anh nói trong đó chỉ có một số ít skill: skill Spring Boot, Spring Modulith Verifier và vài skill khác nữa. README của repo (đọc ngày 26/10/2026) liệt kê Progen, Spring Boot, Spring Modulith Verifier, jSpecify, Java Code Review và Apply Renovate PRs. Trong video này anh tập trung chủ yếu vào skill Spring Boot.

Anh mở bản clone của repo trong IntelliJ IDEA. Trong repo, bên dưới thư mục `skills`, bạn đặt tên cho skill của mình; ở đây là `spring-boot`. Và bạn cần có một file `SKILL.md`. Trong file đó, bạn đặt cho skill một cái tên (ở đây trên màn hình là `spring-boot-skill`) và một description chi tiết (repo của Siva như trong video đăng ngày 22/10/2026).

Siva nhấn mạnh description này rất quan trọng: theo anh (video đăng ngày 22/10/2026), chính dựa trên description mà AI agent quyết định có dùng skill này hay không. Trong description, anh viết rằng skill dùng để build ứng dụng Spring Boot 4.x theo best practices, và liệt kê khi nào dùng: khi tạo package structure cho Spring Boot, khi implement entity, và tất cả những việc thường làm trong một ứng dụng Spring Boot điển hình.

![File SKILL.md của skill spring-boot mở trong IntelliJ IDEA, phần description và các mục Maven pom.xml Configuration, Package structure](https://homus.dev/photos/Rf2U1tubj6E-0643.jpg)

Phần đầu file `skills/spring-boot/SKILL.md` (repo của Siva, như trong video đăng ngày 22/10/2026): description "Build Spring Boot 4.x applications following the best practices" kèm danh sách "Use this skill" (REST API, entity/repository, Thymeleaf, test, ArchUnit, Docker Compose, Taskfile), rồi phần thân "# Spring Boot Skill".

Với description như vậy, theo Siva (video đăng ngày 22/10/2026), khi bạn nhờ agent implement một thứ gì đó thì nhiều khả năng agent sẽ chọn skill này và làm theo mọi guideline anh viết trong đó. Còn nếu bạn không muốn để agent tự khám phá và tự tìm ra skill, bạn có thể gọi skill một cách tường minh (explicitly invoke) rồi mới đưa prompt; khi đó, theo lời anh, chắc chắn skill sẽ được load và agent sẽ làm theo.

## 5. Chia hướng dẫn ra nhiều file references

Bên trong skill, Siva cấu hình nhiều mục: những best practice anh thường theo khi build ứng dụng Spring Boot, những plugin anh thêm vào, những dependency anh dùng, và cấu hình `pom.xml` của Maven. Phần chi tiết đó anh để trong một file riêng. Thay vì dồn tất cả vào một file duy nhất, anh tổ chức thành nhiều file. Theo anh (video đăng ngày 22/10/2026), mỗi khi agent cần cấu hình một thứ gì đó cho ứng dụng Spring Boot dùng Maven, nó sẽ load đúng file đó và xem cần làm gì.

![SKILL.md với các mục Maven pom.xml Configuration, Package structure, Spring Data JPA, Service layer, Spring MVC REST APIs, và cây thư mục references bên trái](https://homus.dev/photos/Rf2U1tubj6E-0723.jpg)

Thân `SKILL.md` chỉ gồm các mục ngắn trỏ sang file trong thư mục `references`: `spring-boot-maven-config.md` cho Maven, `code-organization.md` cho package structure, `spring-data-jpa.md`, file cho service layer... Cây bên trái liệt kê các file như `archunit.md`, `spring-modulith.md`, `taskfile.md`, `testcontainers-wiring.md`, `thymeleaf.md` (repo của Siva như trong video đăng ngày 22/10/2026).

Tương tự, anh có các mục về cách cấu trúc code của ứng dụng, package structure muốn theo, và các best practice khi dùng Spring Data JPA. Rồi có mục cho Spring Modulith, cho cách tạo template Thymeleaf, và cho các kỹ thuật khi viết test. Test có nhiều loại, ví dụ web controller test hay data JPA test, nên anh có những file riêng mô tả cách làm từng loại (skill của Siva như trong video đăng ngày 22/10/2026).

Siva mời người xem tự khám phá bộ skill này và xem các hướng dẫn có hợp với sở thích của mình hay không; anh "strongly encourage" mọi người xem qua (video đăng ngày 22/10/2026). Anh nói rõ tất cả các guideline này là theo sở thích của riêng anh. Có thể bạn có guideline hơi khác, cách tiếp cận khác mà bạn thích hơn.

Lời khuyên chung của anh: bất cứ khi nào bạn định dùng một agent skill, không chỉ skill của anh mà bất kỳ skill nào, hãy đọc nó trước. Nếu nó khớp với sở thích của bạn thì dùng nguyên như vậy. Nếu không, hãy clone về, chỉnh sửa, thay đổi theo ý bạn rồi mới dùng (video đăng ngày 22/10/2026).

## 6. Cài skill bằng npx skills add

Có skill rồi, cài thế nào? Siva mở file README của repo. Theo anh, lựa chọn đơn giản và dễ nhất là dùng `npx skills add` kèm URL của repo; lệnh sẽ hỏi bạn có muốn cài tất cả skill hay không, và cài cho những agent nào. Anh nói chỉ cần chạy lệnh này là cài được, rất dễ làm theo (video đăng ngày 22/10/2026). Mục Usage trong README trên màn hình ghi:

```
$ npx skills add https://github.com/sivaprasadreddy/sivalabs-agent-skills
```

Dòng thứ hai của mục Usage trên màn hình là để cài một skill cụ thể; bản README đọc ngày 26/10/2026 ghi đầy đủ là:

```
$ npx skills add https://github.com/sivaprasadreddy/sivalabs-agent-skills --skill spring-boot
```

Bạn có thể cài ở mức project hoặc ở mức global. Siva đã cài bộ skill này ở mức global. Nhưng nếu bạn muốn repo của mình hoàn toàn tự chứa (self-contained), bạn có thể cài ở mức project, như vậy cũng đủ tốt (theo Siva, video đăng ngày 22/10/2026).

Dù đã cài ở mức global rồi, anh vẫn chạy lại lệnh trong terminal để cho xem nó trông thế nào. Lệnh đi lấy các skill từ repo về, và bạn có thể chọn cài riêng từng skill, ví dụ chỉ skill Spring Boot, hoặc cài tất cả. Chọn xong, bạn chọn cài cho agent nào: Claude Code, và nhiều agent khác đã có sẵn trong danh sách như Codex. Trên màn hình, nhóm "Universal (.agents/skills)" được ghi là "always included" và gồm Amp, Cline, Codex, Cursor, Droid, Gemini CLI, GitHub Copilot, Kilo Code, Kimi Code CLI, OpenCode, Pi, Warp, Zed và thêm vài cái nữa; phía dưới là nhóm "Additional agents" (theo màn hình trong video đăng ngày 22/10/2026). Siva hiểu nhóm universal là những agent hỗ trợ thư mục `.agents/skills`. Anh bấm Enter.

Tiếp theo, công cụ hỏi bạn muốn lưu file skill ở mức project hay global. Anh chọn global, và chọn cách cài bằng symlink. Lý do anh nêu (video đăng ngày 22/10/2026): vẫn chưa phải agent nào cũng hỗ trợ vị trí `.agents/skills`, đặc biệt là Claude, theo lời anh, vẫn chưa hỗ trợ. Cách symlink sẽ đặt toàn bộ file vào thư mục `.agents/skills`, đồng thời tạo symlink sang `.claude/skills`. Anh nói đây thường là cách được ưu tiên. Trên màn hình, lựa chọn này ghi "Symlink (Recommended)" với chú thích "Single source of truth, easy updates", bên cạnh lựa chọn "Copy to all agents"; danh sách agent đã chọn chạy từ Amp, Cline, Codex tới Claude Code và Junie (video đăng ngày 22/10/2026).

Bước cuối là xác nhận cài, và lệnh cài tất cả các skill đó. Theo Siva (video đăng ngày 22/10/2026), chỉ đơn giản vậy thôi, và cài xong là bạn có thể dùng ngay.

Trình tự câu hỏi của `npx skills add` như Siva đi qua trong video đăng ngày 22/10/2026, và lựa chọn của anh ở hai bước cuối.

## 7. Gọi skill trong Claude Code và Codex

Lúc này Siva đang dùng Claude Code bên trong IntelliJ IDEA. Anh bắt đầu gõ để gọi skill Spring Boot, rồi chỉ ra: giữa Claude và Codex có một khác biệt nhỏ trong cách gọi tường minh một agent skill (theo Siva, video đăng ngày 22/10/2026).

Với Claude Code, bạn gọi bằng dấu gạch chéo, kiểu `/spring-boot-skill`, rồi hỏi bất cứ gì bạn muốn. Trên màn hình, khi anh gõ `/sprin`, ô gợi ý hiện ra hai skill: `/spring-boot-skill` và `/spring-modulith-verifier` (video đăng ngày 22/10/2026).

![Ô Claude Code trong IntelliJ IDEA, gõ /sprin hiện gợi ý /spring-boot-skill và /spring-modulith-verifier](https://homus.dev/photos/Rf2U1tubj6E-1143.jpg)

Phiên Claude Code trong IntelliJ IDEA (video đăng ngày 22/10/2026): gõ `/sprin` là danh sách gợi ý hiện hai skill vừa cài, mỗi dòng gắn nhãn "Skill". Bên dưới là model Opus 5.5, effort Low và chế độ Auto.

Còn nếu bạn dùng Codex, Codex có cách hơi khác: lệnh bắt đầu bằng dấu đô la, rồi bạn gọi tên skill Spring Boot. Anh chuyển sang Codex để cho xem: gõ `$` là danh sách skill hiện ra, trên màn hình có những skill như `$angular-developer`, `$apply-renovate-prs`, `$find-skills`, `$java-code-review`, `$jspecify-skill` (video đăng ngày 22/10/2026). Hai cách khác nhau, nhưng theo Siva, dù sao thì đó là cách bạn gọi skill.

## 8. App Review Buddy và mockup trang products

Đã cài xong agent skills, và đã có sẵn một ứng dụng. Để xem nhanh những gì đã build, Siva khởi động ứng dụng. Đây là app Review Buddy của loạt video. Anh đăng nhập bằng tài khoản admin, và cho thấy hiện tại app chỉ có vậy: chỉ có đăng nhập và đăng ký user, không có gì khác (demo trong video đăng ngày 22/10/2026).

Việc của video này nằm trong thư mục mockup. Ở đó đã có sẵn `index.html`; anh nhắc rằng ở phần trước của loạt video, toàn bộ markup của ứng dụng đã được tạo ra. Trong đó có trang products: một lưới (grid) sản phẩm có phân trang (pagination), có lọc theo category, và có sắp xếp theo top rated, most reviewed. Video này sẽ implement trang đó. Tất nhiên app chưa có logic cho rating hay những thứ tương tự, nhưng anh vẫn sẽ implement trang danh sách (video đăng ngày 22/10/2026).

![Mockup trang Products của Review Buddy: banner Discover products worth trying, ô tìm kiếm, dropdown All categories và Top rated, lưới sản phẩm](https://homus.dev/photos/Rf2U1tubj6E-1313.jpg)

Mockup `products.html` mở trong trình duyệt: banner "Discover products worth trying", các nút Search, Filter by category, Sort by top rated, most reviewed or newest, rồi ô tìm kiếm, dropdown category và sort, và lưới sản phẩm như FocusFlow, APIPilot, TaskNest kèm số sao (video đăng ngày 22/10/2026).

## 9. Prompt kiểu vibe coding với Opus 5.5

Siva quay lại IDE và mở một session. Lần này anh dùng Claude Code, và có thể chọn Opus, Sonnet hay Haiku. Anh chọn Opus 5.5. Về mức effort, anh nói theo kinh nghiệm của anh thì thường effort thấp (low) là đủ tốt (video đăng ngày 22/10/2026). Anh chọn thêm auto mode.

Chọn xong, câu hỏi là đưa chi tiết cho agent thế nào. Đương nhiên bạn cần mô tả một sản phẩm gồm những gì, v.v. Nhưng anh nói mình sẽ làm theo kiểu vibe coding một chút, cố tình không đưa quá nhiều chi tiết. Anh chỉ nói: implement product listing feature dựa trên `product.html`, tức trang product listing vừa xem trong mockup; làm theo trang đó, implement danh sách sản phẩm có phân trang, và xem Opus làm được tới đâu, khớp với yêu cầu tới mức nào (video đăng ngày 22/10/2026).

Anh nói rõ mình cố tình không đưa nhiều chi tiết. Theo Siva (video đăng ngày 22/10/2026), một cách tốt hơn thường là nói rõ sản phẩm có những field nào, cần validation gì, tức tất cả những chi tiết bạn đáng lẽ phải đưa. Nhưng như đã nói, lúc này anh đi theo kiểu vibe coding.

Để tham chiếu một file, anh gõ `@` rồi chọn file, ở đây là `product.html`. Thêm vào đó, anh muốn rating tĩnh vì chưa có logic rating. Trong lời nói anh nhắc cả "rating of 4" lẫn "static rating of 5", còn prompt trên màn hình ghi số 4. Prompt anh gửi, như trên màn hình:

```
Implement Product Listing page to show a paginated list of products matching with product.html

- Include static rating of 4
```

![Phiên Claude Code với prompt Implement Product Listing page..., Ran 3 commands, Running](https://homus.dev/photos/Rf2U1tubj6E-1643.jpg)

Prompt đã gửi trong phiên Claude Code (video đăng ngày 22/10/2026): agent đã chạy 3 lệnh và đang làm việc. Thanh dưới cho thấy Opus 5.5, Low, Auto, Fast mode Off. Bên trái là thư mục `mockup` với `product.html`, `products.html` và các trang khác.

Siva giải thích điều sẽ xảy ra (video đăng ngày 22/10/2026): với prompt này, agent sẽ khám phá trang trông thế nào, phần đã implement tới đâu, tìm ra phần chênh lệch (delta) và cố đưa ra cách implement. Anh không yêu cầu lập plan hay những thứ tương tự, chỉ đưa trang tham chiếu và bảo implement. Anh biết phát triển ứng dụng thực tế không diễn ra như vậy.

## 10. Kết quả đầu tiên: reference thay cho spec đầy đủ

Theo Siva, lặp nhanh (quick iteration) là điều quan trọng. Đã có tham chiếu ứng dụng cuối cùng trông ra sao, và theo anh (video đăng ngày 22/10/2026) agent đủ thông minh: nếu bạn đưa một tham chiếu trực quan đầy đủ, chúng có thể suy ra sản phẩm cần những field nào, category cần những field nào. Có thể validation và độ dài field sẽ không khớp đúng ý. Ví dụ tiêu đề sản phẩm có thể là 100 ký tự, trong khi ta muốn tối đa 150. Sẽ có những khác biệt nhỏ như vậy.

Lý do anh chọn cách vibe coding này là để cho thấy các model mới nhất thông minh tới mức nào, theo nhận xét của anh trong video đăng ngày 22/10/2026. Bạn có thể tạo một trang mô tả đầy đủ mọi thứ, và cách đó cũng chạy được trong một lần (one shot), có khi còn tốt hơn. Nhưng bạn cũng có thể chỉ đưa tham chiếu rồi bảo implement. Khi agent làm xong, bạn nói tiếp "đổi độ dài tên sản phẩm thành thế này, description thành thế kia". Theo anh, làm vậy có khi nhanh hơn việc viết hẳn một spec đầy đủ rồi mô tả từng chi tiết.

Và agent vừa làm xong. Có thay đổi code: giờ đã có package `products` với đầy đủ các phần. Bản tóm tắt của agent trên màn hình liệt kê module mới gồm `ProductEntity`, `ProductRepository`, `ProductService`, `ProductDto` và `ProductController` cho `GET /products?page=N`; template `templates/products.html` theo banner xanh, số lượng sản phẩm và lưới 3 cột của mockup; mỗi thẻ hiển thị rating cố định 4.0 qua `STATIC_RATING`; phân trang chỉ hiện khi có hơn một trang; ai cũng xem được `/products` mà không cần đăng nhập; và test `ProductControllerTests` kiểm tra trang 1 có 6 sản phẩm, trang 2 có 2 sản phẩm còn lại. Agent cũng ghi rằng nó đặt page size là 6 để 8 sản phẩm seed trải ra hai trang, và đã bỏ qua ô search, filter category, sort cùng nút "Submit your product" vì prompt chỉ yêu cầu danh sách có phân trang (demo trong video đăng ngày 22/10/2026).

Siva khởi động lại ứng dụng để xem nó có implement đúng ý không. Anh refresh, bấm vào trang Products: sản phẩm hiện ra, có phân trang. "This is pretty nice for now", anh nói (demo trong video đăng ngày 22/10/2026). Agent chưa thêm phần filter và những thứ khác, nhưng không sao, anh sẽ yêu cầu ở prompt tiếp theo.

![Trang /products của Review Buddy chạy trên localhost: lưới sản phẩm với rating 4.0 và nút phân trang 1, 2, Next](https://homus.dev/photos/Rf2U1tubj6E-1851.jpg)

Trang `/products` do agent build, chạy trên máy (demo trong video đăng ngày 22/10/2026): các thẻ APIPilot, PixelPress, BudgetBee, TaskNest, CodeLens, LingoLoop đều hiện 4.0 sao, bên dưới là phân trang 1, 2, Next.

"Nhưng cái này khá ấn tượng, đúng không?", Siva nói. Theo anh, việc này thậm chí không mất quá một phút; rất nhanh, và anh nhận xét riêng Opus 5.5 rất tốt cả về sinh code lẫn tốc độ (nhận xét và số đo của Siva trong video đăng ngày 22/10/2026). Như ta thấy, đã có danh sách sản phẩm với phân trang.

## 11. Thêm search, filter, sort và đọc migration Flyway

Trong cùng session đó, Siva yêu cầu tiếp. Prompt trên màn hình:

```
Also, include search, filtering and sorting support as in product.html
```

Anh nhắc lại: anh vẫn chưa xem code, chưa kiểm tra database migration script có được tạo đúng không. Giờ, trong lúc agent làm, anh mới đi đọc code. Agent đã tạo một migration Flyway mới. Trong code có sẵn, bảng user dùng một sequence. Theo Siva (video đăng ngày 22/10/2026), dù ta không hề nói rõ, agent tự nhìn quanh, tìm ra các pattern bạn đang theo, rồi bắt chước cùng một kiểu cấu trúc. Ở đây nó cũng làm theo cách tương tự và đưa vào cột category.

![File V002__create_products_table.sql: create sequence product_id_seq, create table products với cột category kiểu text](https://homus.dev/photos/Rf2U1tubj6E-2043.jpg)

Migration `V002__create_products_table.sql` agent tạo (demo trong video đăng ngày 22/10/2026): `create sequence product_id_seq start with 100 increment by 50` giống cách bảng users làm, bảng `products` có `category text not null`, và các câu insert dữ liệu mẫu như TaskNest, CodeLens, BudgetBee.

Đây là chỗ khác biệt: agent tạo category chỉ như một đoạn text. Nó không nhận ra category là một entity riêng, mà coi category là một cột text (demo trong video đăng ngày 22/10/2026). Siva nói ta có thể lặp nhanh trên chỗ này; không cần làm đúng mọi thứ trong một lần.

Ở chiều ngược lại, bạn có thể làm spec-driven development hoàn chỉnh, nói rõ ngay từ đầu: "category là một entity, có name, slug và các thứ khác", vì có thể đến lúc nào đó ta muốn điều hướng theo category, và khi đó chắc chắn cần coi category là entity riêng (theo Siva, video đăng ngày 22/10/2026). Nhưng một lần nữa, anh nói bạn có thể lặp nhanh; không cần đúng ngay lần đầu, nhất là khi đang ở chế độ vibe coding. Và lúc này anh vẫn đang ở chế độ vibe coding.

Bản tóm tắt của agent sau prompt thứ hai, trên màn hình, mô tả: dropdown sort có Top rated (mặc định, như mockup), Most reviewed và Newest; search và category chạy cùng nhau, và các link trang giữ nguyên search, category, sort; các thiết lập nằm trên địa chỉ (`?q=...&category=...&sort=...&page=...`) nên có thể bookmark hay chia sẻ một view đã lọc; không có kết quả thì trang hiện "No products found". Agent cũng tự ghi một giới hạn: database chưa có dữ liệu rating hay review, nên cả ba lựa chọn sort hiện đều liệt kê sản phẩm mới nhất trước. `ProductControllerTests` có thêm ba test: tìm theo từ khoá, lọc theo category, và search cộng category không ra kết quả (demo trong video đăng ngày 22/10/2026).

Anh refresh trang: đã có danh sách category. Anh thử lọc thì thấy chạy được (demo trong video đăng ngày 22/10/2026). Nhưng như đã thấy, category đang bị coi như một đoạn text, còn anh muốn coi nó là một entity.

## 12. Category thành entity riêng, chi phí session và local profile

Siva gửi prompt tiếp theo, như trên màn hình:

```
Treat category as a separate entity with name and slug so that in future we can navigate to different category of products using slug.
```

Anh chỉ ra: đây là ngôn ngữ nghiệp vụ (business language), thậm chí không phải ngôn ngữ của developer. Theo anh (video đăng ngày 22/10/2026), đưa câu đó vào là agent sẽ tự tìm ra cần làm gì, và nhiều khả năng sẽ tạo một migration Flyway mới, đổi category thành tham chiếu tới entity này.

Trong lúc chờ, anh cho xem những gì đã diễn ra trong session. Bạn có thể mở rộng từng bước để hiểu agent đang làm gì; nếu muốn biết nó đang nghĩ gì, chi tiết thường được mô tả ở đó. Một feature khác trong IDE của JetBrains mà anh chỉ ra: nó hiện chi phí của từng session. Anh vẫn đang ở cùng một session, và trên màn hình session "Product listing page" ghi $0.81; theo anh, vẫn chưa tốn bao nhiêu (con số trong video đăng ngày 22/10/2026). Bạn có thể xem mỗi session tốn bao nhiêu tiền.

![Panel Agent Sessions với chi phí từng session, bên phải là bản tóm tắt search, category filtering và sorting, thông báo Agent task completed](https://homus.dev/photos/Rf2U1tubj6E-2343.jpg)

Panel Agent Sessions trong IntelliJ IDEA (video đăng ngày 22/10/2026): session "Product listing page" ghi $0.81, các session cũ như "Update Thymeleaf template styling" khoảng $3.68. Bên phải, agent báo search, category filtering và sorting đã có trên `/products` và `./mvnw clean verify` qua cả 10 test, kèm giới hạn: sort "Top rated" và "Most reviewed" chưa thực sự sắp theo rating hay review.

Có vẻ việc đã xong, chưa có gì được commit. Lần này agent cập nhật ngay chính migration Flyway cũ (demo trong video đăng ngày 22/10/2026). Rồi anh bật local profile. Trong run configuration của Spring Boot có một field riêng để chỉ định profile muốn kích hoạt, và anh kích hoạt profile `local`. Lý do: có một cấu hình Flyway gắn với local profile, nếu migration lỗi thì nó sẽ clean database rồi chạy lại. Trong lúc phát triển local thì điều này ổn với anh, vì feature này chưa được commit lên môi trường nào, nên clean rồi chạy lại cũng không sao.

Nhưng anh nói rõ: nói chung, khi làm với một ứng dụng thật và thay đổi đã được deploy lên một môi trường nào đó, đừng bao giờ động vào migration script đã có (video đăng ngày 22/10/2026).

Anh khởi động với local profile; ứng dụng clean rồi áp lại toàn bộ migration. Anh vào Home rồi Products. Category giờ hiện "finance", và theo anh nhiều khả năng đó là slug của category; thứ tự sort cũng được gửi đi. Anh thử tìm "pixel" và ra PixelPress. "Seems to be working", anh nói, nhưng không chắc 100%. Có PixelPress, có lọc theo category, và theo anh danh sách sản phẩm có vẻ đã ổn với phân trang và mọi thứ (demo trong video đăng ngày 22/10/2026).

Cách Siva lặp trong demo (video đăng ngày 22/10/2026): ba prompt ngắn nối nhau, mỗi lần chỉnh phần kết quả chưa khớp ý.

## 13. Code sinh ra đã theo skill như thế nào

Giờ Siva muốn hiểu chuyện gì đã xảy ra với code. Khi được yêu cầu implement trang product listing, agent đã theo agent skill Spring Boot (theo Siva, video đăng ngày 22/10/2026). Anh mở lại bộ skill: trong skill Spring Boot có mục tổ chức code (code organization), nơi anh ghi rõ: tổ chức package theo business domain, không theo layer.

![File code-organization.md: Use a domain-driven, modular layout, organize packages by business modules, cấu trúc package mẫu dev.sivalabs.projectname](https://homus.dev/photos/Rf2U1tubj6E-2703.jpg)

File `references/code-organization.md` trong skill của Siva (video đăng ngày 22/10/2026): "Use a domain-driven, modular layout: organize packages by business modules", kèm cây package mẫu với `shared/`, module `users/` gồm `config/`, `domain/`, `api/` và `UsersAPI.java` làm public API của module.

Vì vậy ứng dụng không có kiểu gom tất cả controller vào một chỗ, tất cả service vào một chỗ. Thay vào đó là kiểu tổ chức code package-by-module hay package-by-feature. Anh nói thêm: kể cả không có skill này, dựa trên cách sắp xếp sẵn có, agent có thể cũng sẽ tạo một package `products` rồi đặt mọi thứ vào đó. Nhưng ta muốn đảm bảo một phong cách code nhất quán, nên theo anh (video đăng ngày 22/10/2026) chắc chắn nên có một skill nói rõ cách tổ chức code và mọi thứ.

Tương tự, khi dùng Spring Data JPA, có một loạt điều anh thường muốn làm theo, và tất cả những thực hành tốt đó đã nằm sẵn trong skill Spring Boot. Trên màn hình, file `spring-data-jpa.md` có mục "Key principles" với những dòng như tạo `BaseEntity` cho các field audit, tạo protected no-arg constructor cho JPA, đặt tên bảng và tên cột tường minh, dùng optimistic locking với `@Version`, chỉ tạo repository cho aggregate root, dùng `@Query` với JPQL cho query tuỳ biến (skill của Siva như trong video đăng ngày 22/10/2026).

Anh nhắc lại: anh không hề bảo agent dùng skill Spring Boot, nhưng dựa trên việc được giao, agent đã tự chọn skill đó (demo trong video đăng ngày 22/10/2026). Nếu muốn dùng tường minh một skill cụ thể, bạn gọi skill đó rồi đưa prompt; agent sẽ chọn hành động phù hợp, đọc skill và cố làm theo skill theo cách phù hợp nhất. Theo anh, đó là cách ta "vibe code" feature của mình.

Nhưng code thực sự có tệ không? Anh mở entity. Entity không phải public class mà là package-private, nên không package nào khác truy cập được entity này, và ta không làm rò entity ra ngoài ranh giới của nó. Thay vào đó có `CategoryDto`, có `CategoryRepository`, rồi product controller, entity, repository, và product search criteria, những thứ anh gọi là "the usual" (demo trong video đăng ngày 22/10/2026).

Đánh giá của Siva (video đăng ngày 22/10/2026): code không tệ, anh nói là khá tốt; nhìn qua, anh thấy đây là một bản implement khá ổn (pretty decent). Có thể ta sẽ yêu cầu chuyển phần map product sang DTO vào một product mapper hay gì đó tương tự, nhưng nó không hẳn là "slop", nó đủ ổn, và có lẽ đủ tốt cho lúc này.

## 14. Harness engineering: bước tiếp theo

Tuy vậy, Siva muốn một quy trình chặt chẽ hơn. Giả sử ta không phó mặc cho agent kiểu "tôi đã đưa skill rồi, nhưng không chắc code sinh ra có thực sự tốt không". Theo anh (video đăng ngày 22/10/2026), đây là lúc harness engineering xuất hiện: bạn cố có được thứ gì đó dự đoán được, và có cả một quy trình kiểm tra theo guideline kiến trúc.

Đương nhiên ta nên viết test. Trước đây ta chỉ gọi đó là test, code coverage và những thứ tương tự, nhưng theo nhận xét của anh trong video đăng ngày 22/10/2026, dạo này gần như ai cũng nói về harness engineering: ta đặt ra những ranh giới và guardrail nhất định để giữ chất lượng code và kiến trúc đúng chỗ.

Trong video này, feature đã được implement, nhưng anh chưa kiểm tra agent có tạo test hay không. Anh mở ra xem: có test, và với nhiều use case, agent đã tạo cả test (demo trong video đăng ngày 22/10/2026). Trên màn hình là `ProductControllerTests` kế thừa `BaseIT`, với test `shouldCombineSearchAndCategoryFilter`, và cửa sổ Git liệt kê 12 file thay đổi như `CategoryEntity.java`, `ProductSearchCriteria.java`, `V002__create_products_table.sql`.

Còn có thể làm gì để chất lượng code cao? Siva kể ra: đương nhiên có thể đặt ra mức code coverage tối thiểu, như 80% hay 90%, tuỳ bạn (ví dụ của Siva, video đăng ngày 22/10/2026). Ngoài ra, nên đảm bảo các pattern trong code theo những phong cách kiến trúc nhất định. Để làm việc đó, anh sẽ dùng [ArchUnit](https://www.archunit.org/), cùng một thư viện tên [Taikai](https://github.com/enofex/taikai) xây trên ArchUnit (README của Taikai, đọc ngày 26/10/2026, mô tả nó mở rộng ArchUnit bằng một bộ rule định sẵn cho nhiều công nghệ), rồi viết một loạt test kiểm tra code do agent sinh ra có theo các nguyên tắc kiến trúc hay không.

Các lớp Siva nhắc tới (video đăng ngày 22/10/2026): skill đưa guideline, còn test, ngưỡng coverage và test kiến trúc bằng ArchUnit, Taikai là guardrail kiểm tra kết quả.

Anh nói hy vọng qua phần này người xem đã hiểu agent skill là gì và cài chúng thế nào (video đăng ngày 22/10/2026).

## 15. Agent skills trong IntelliJ IDEA

Một điều cuối cùng: theo Siva (video đăng ngày 22/10/2026), IntelliJ IDEA có hỗ trợ agent skills ngay khi cài (out of the box). Vào Settings, mục Tools, rồi AI Assistant. Anh nói vị trí này sắp thay đổi một chút: Skills hiện nằm bên dưới AI Assistant, nhưng sẽ trở thành một nhánh riêng trong cây settings (lời anh nói lúc quay, video đăng ngày 22/10/2026).

Trong mục Skills, bạn đã thấy tất cả agent skill đang cài trên máy. Có skill là global, có skill chỉ dành riêng cho Codex, có skill chỉ cho Claude, nhưng bạn thấy tất cả ở cùng một chỗ. Trên màn hình, mỗi skill có nhãn như "Claude Agent (Global)" hay "Codex (Global)", ví dụ `context-search`, `context7-mcp`, `figma`, `find-skills`, `imagegen`, `java-code-review`. Dòng chú thích phía trên ghi rằng skill chạy tự động khi liên quan hoặc khi được gọi, được hỗ trợ trong Codex và Claude Agent "today", còn ACP agent sẽ có sau, và repository mặc định của JetBrains được kiểm tra an toàn (theo màn hình trong video đăng ngày 22/10/2026).

![Settings của IntelliJ IDEA, Tools > AI Assistant > Skills, danh sách skill với nhãn Claude Agent (Global) và Codex (Global)](https://homus.dev/photos/Rf2U1tubj6E-3223.jpg)

Tools, AI Assistant, Skills trong IntelliJ IDEA (video đăng ngày 22/10/2026): thông báo đã tìm thấy agent skill bên ngoài IDE kèm nút "Import to IntelliJ IDEA", và danh sách skill đã cài với nhãn agent cùng phạm vi.

Bạn cũng cài thêm skill được từ đây. Có phần quản lý thư mục skill: bạn xem skill được lưu ở đâu, thêm thư mục khác nếu muốn, thêm đường dẫn khác nếu cần. Ngoài ra, bạn còn quản lý được external registry: lúc quay, repository skill của JetBrains đã được thêm sẵn, và nếu muốn thêm repository khác chứa skill, bạn thêm các skill registry đó vào (theo Siva, video đăng ngày 22/10/2026). Trên màn hình, hộp thoại "Manage External Skill Registries" cho thêm URL repo GitHub hoặc thư mục để load skill từ xa, và registry có sẵn là `https://github.com/JetBrains/skills`.

Lời khuyên của anh: thường thì nên kiểm tra skill trước rồi mới thêm, thay vì cài bừa skill từ internet (video đăng ngày 22/10/2026).

## 16. Những bộ skill Siva gợi ý và lời kết

Cuối cùng, Siva cho xem vài bộ agent skill anh rất thích, liệt kê trong README của project Review Buddy (danh sách trên màn hình trong video đăng ngày 22/10/2026):

- **SivaLabs Agent Skills**: bộ skill của chính anh vừa xem trong video. Theo anh, phần lớn là những skill tối giản cho việc phát triển ứng dụng Java Spring Boot, không có gì nhiều (video đăng ngày 22/10/2026).

- **JetBrains Skills**: các agent skill chính thức của JetBrains cho nhiều việc coding, debugging và các việc khác (theo Siva, video đăng ngày 22/10/2026). Anh khuyến khích người xem xem qua.

- **Kotlin Agent Skills**: nếu bạn dùng Kotlin, có bộ agent skill cho Kotlin. Anh nói những bộ này không dành riêng cho Java hay Spring Boot (video đăng ngày 22/10/2026).

- **Matt Pocock Skills**: nói chung, theo Siva (video đăng ngày 22/10/2026), bộ skill của Matt rất phổ biến, với những skill như "grill me" và các skill khác. Anh rất khuyến khích xem qua.

- **Addy Osmani Agent Skills**: anh rất khuyến nghị bộ này, vì anh rất nể Addy Osmani và theo anh các agent skill của Addy rất tốt (video đăng ngày 22/10/2026).

- **Piotr Mińkowski Spring Boot Skills**: cho Spring Boot, anh khuyến nghị bộ này. Theo anh (video đăng ngày 22/10/2026), lúc quay nó trông hơi gắn riêng với Claude, nhưng thật ra bạn có thể đặt thẳng các skill vào `.agents/skills` và nó vẫn chạy tốt.

- **Rrezart Prebreza**: còn một bộ agent skill khác nữa. Trong README trên màn hình, dòng cuối ghi "Rrezart Prebreza Kotlin Skills" trỏ tới repo `kotlin-skills`; một dòng chữ chèn trên video đính chính rằng link cuối bị sai, đúng phải là Rrezart Prebreza Spring Boot Skills tại `github.com/rrezartprebreza/spring-boot-skills` (video đăng ngày 22/10/2026).

![README.md của review-buddy, mục Agent Skills với bảy link tới các repo skill](https://homus.dev/photos/Rf2U1tubj6E-3442.jpg)

Mục "## Agent Skills" trong README của Review Buddy (video đăng ngày 22/10/2026): SivaLabs, JetBrains, Kotlin, Matt Pocock, Addy Osmani, Piotr Mińkowski, và dòng cuối Rrezart Prebreza mà video đính chính sang repo `spring-boot-skills`. Phía trên là cấu hình MCP server Playwright trong `~/.codex/config.toml`.

Bạn có thể tham khảo các agent skill này và khám phá chúng. Theo Siva, nếu description và guideline của skill hợp với sở thích của bạn, cứ dùng chúng (video đăng ngày 22/10/2026).

Siva kết thúc video tại đó và chào tạm biệt người xem (video đăng ngày 22/10/2026).

## Nguồn và liên kết

- Tên gốc: Agent Skills - Give Guidelines & Additional Capabilities to AI Agents
- Sự kiện: [YouTube](https://homus.dev/events/youtube)
- Video gốc: [https://www.youtube.com/watch?v=Rf2U1tubj6E](https://www.youtube.com/watch?v=Rf2U1tubj6E)

- Kênh YouTube SivaLabs (K. Siva Prasad Reddy): [youtube.com/channel/UC7yMHBNLA1AnVfy_beGJGqg](https://www.youtube.com/channel/UC7yMHBNLA1AnVfy_beGJGqg)

- Trang giới thiệu tác giả trên blog SivaLabs (đọc ngày 26/10/2026): [sivalabs.in/about](https://www.sivalabs.in/about/)

- SivaLabs Skills for AI Coding Agents, README liệt kê skill và lệnh `npx skills add` (đọc ngày 26/10/2026): [github.com/sivaprasadreddy/sivalabs-agent-skills](https://github.com/sivaprasadreddy/sivalabs-agent-skills)

- Source code app Review Buddy của loạt video (đọc ngày 26/10/2026): [github.com/sivaprasadreddy/review-buddy-spring-boot](https://github.com/sivaprasadreddy/review-buddy-spring-boot)

- JetBrains Skills (đọc ngày 26/10/2026): [github.com/JetBrains/skills](https://github.com/JetBrains/skills)

- Kotlin Agent Skills (đọc ngày 26/10/2026): [github.com/Kotlin/kotlin-agent-skills](https://github.com/Kotlin/kotlin-agent-skills)

- Matt Pocock Skills, có skill grill-me (đọc ngày 26/10/2026): [github.com/mattpocock/skills](https://github.com/mattpocock/skills)

- Addy Osmani Agent Skills (đọc ngày 26/10/2026): [github.com/addyosmani/agent-skills](https://github.com/addyosmani/agent-skills)

- Piotr Mińkowski, Spring Boot plugin cho Claude Code (đọc ngày 26/10/2026): [github.com/piomin/claude-ai-spring-boot](https://github.com/piomin/claude-ai-spring-boot)

- Rrezart Prebreza Spring Boot Skills, link đã đính chính trong video (đọc ngày 26/10/2026): [github.com/rrezartprebreza/spring-boot-skills](https://github.com/rrezartprebreza/spring-boot-skills)

- ArchUnit (đọc ngày 26/10/2026): [archunit.org](https://www.archunit.org/)

- Taikai, thư viện mở rộng ArchUnit (đọc ngày 26/10/2026): [github.com/enofex/taikai](https://github.com/enofex/taikai)

Nguồn: https://homus.dev/talks/agent-skills-give-guidelines-additional-capabilities-to-ai-agents · cập nhật 2026-10-26
