0

Khám Phá Claude Skills 2026: Tính Năng Giúp Tôi Tăng Năng Suất Gấp Nhiều Lần

Cái Ngày Tôi Nhận Ra Mình Đang Lãng Phí Thời Gian Theo Cách Rất Ngu

Tháng 11 năm ngoái, tôi đang ngồi review một PR của thằng em trong team. Dự án monorepo NestJS + Next.js 15, codebase khoảng 80k dòng, đang migrate dần sang edge runtime.

Tôi mở Claude, bắt đầu gõ:

"Dự án này dùng TypeScript strict mode, không cho phép any, error handling phải wrap bằng Result type theo pattern của repo, commit message theo Conventional Commits, khi review thì ưu tiên check..."

Gõ được nửa chừng thì tôi dừng lại.

Tôi nhìn vào cái đoạn đang gõ. Quen quá. Quen đến mức ngón tay gần như tự chạy. Tôi đã viết đoạn context này — hoặc một biến thể rất gần của nó — có lẽ hơn 150 lần trong vài tháng qua.

Không phải vì task khác nhau. Mà vì Claude không nhớ gì giữa các session.

Tôi ngồi mất khoảng 30 giây nhìn màn hình. Rồi đóng tab lại, vào Google tìm "Claude persistent context". Và đó là lần đầu tiên tôi đọc về Claude Skills.


Skills Là Gì — Giải Thích Không Dùng Buzzword

Hình dung bạn vừa onboard một junior mới. Ngày đầu bạn dành 2 tiếng giải thích: convention của team, checklist review, format commit, những gotcha trong codebase. Tuần sau junior đó nghỉ việc và bạn lại onboard người khác. Lại 2 tiếng.

Claude Skills về bản chất là cái "tài liệu onboard" đó — nhưng Claude đọc tự động mỗi khi task phù hợp, không cần bạn nhắc.

Về mặt kỹ thuật: Skills là các folder chứa một file SKILL.md (bắt buộc) cộng với scripts và resources tùy chọn. Khi Claude bắt đầu session, nó scan qua tên và description của từng skill — khoảng 100 token mỗi cái. Khi bạn đưa ra task, nó tự hỏi "skill nào relevant?", rồi mới load nội dung đầy đủ. Files hỗ trợ chỉ được pull vào khi thực sự cần.

Cơ chế này có nghĩa là bạn có thể có 30–40 skills cài sẵn mà các task không liên quan sẽ không bị ảnh hưởng về performance hay context window. Cái này tôi verify bằng cách test thực tế, không phải chỉ đọc docs.

Hai Loại Skills — Cái Phân Biệt Quan Trọng Nhất

Capability Uplift — cho Claude làm được thứ nó không làm được trước đó. Ví dụ: tạo file PDF có layout chuẩn, chạy Playwright tests, generate .docx đúng format công ty. Loại này thường kèm script Python hoặc Bash thực thi được trong folder.

Encoded Preference — Claude đã biết làm rồi, skill chỉ encode cách của team bạn. Claude biết viết commit message. Skill của tôi encode rằng scope phải là tên module trong monorepo, không dùng fix: nếu chưa có test kèm theo, và body phải reference ticket Jira nếu có.

Cái loại thứ hai này mới là thứ tôi dùng nhiều nhất và thấy giá trị ngay lập tức nhất. Cũng là cái ít người nghĩ đến khi nghe "Skill".


Claude.ai Skills vs Claude Code Skills — Đừng Nhầm

Tôi mất khoảng một tuần mới hiểu rõ cái này. "Claude Skills" thực ra là hai hệ thống khác nhau hoàn toàn — cùng tên, cùng format file, nhưng cách hoạt động khác:

Claude.ai Skills Claude Code Skills
Cài ở đâu Upload qua giao diện Project Folder ~/.claude/skills/ hoặc .claude/skills/ trong repo
Phạm vi Gắn với một Project cụ thể Personal (mọi project) hoặc repo-scoped
Chia sẻ team Qua Organization settings Qua Git — commit folder .claude/ vào repo
Chạy script Không Có — Python, Bash thực thi được

Với dev bình thường chưa dùng Claude Code nhiều: bắt đầu từ Claude.ai Skills trong Projects là đủ và dễ nhất. Với người hay dùng terminal và muốn automation sâu hơn thì Claude Code Skills mở ra nhiều thứ hơn.


Cách Tôi Tạo Skill Đầu Tiên — Và Phải Sửa 3 Lần Mới Ổn

Tất cả bắt đầu từ file SKILL.md. Cấu trúc gồm frontmatter YAML ở đầu và body instructions ở dưới.

Phần Frontmatter — Cái Quyết Định Skill Có Được Dùng Không

---
name: review-pr-typescript
description: Review TypeScript/NestJS code trong monorepo, check Result type pattern,
  no-any rule, edge runtime compatibility, và Conventional Commits format. Dùng khi
  được yêu cầu review PR hoặc đọc code TypeScript trong dự án này.
---

Description là phần quan trọng nhất và cũng là nơi tôi fail đầu tiên. Skill đầu tôi viết description là:

"Review code TypeScript theo chuẩn team."

Kết quả: skill không trigger. Claude không đủ context để nhận ra đây là việc của skill này. Tôi phải chỉnh lại 2 lần nữa — thêm tên pattern cụ thể (Result type), thêm context monorepo, thêm cụm "Dùng khi..." — thì mới trigger ổn định.

Công thức tôi đúc ra: Skill làm gì + pattern/context cụ thể + khi nào trigger. Viết đủ cụ thể để Claude phân biệt được "task này khác với task kia". Description chung chung thì skill sẽ nằm im.

Phần Body — Playbook Thực Sự

## Mục tiêu
Review TypeScript code trong monorepo NestJS + Next.js 15 theo convention hiện tại.

## Checklist bắt buộc
1. Không có `any` type — phải đề xuất type cụ thể hoặc `unknown` nếu thực sự không rõ
2. Error handling dùng `Result<T, E>` pattern, không throw trực tiếp ở service layer
3. Nếu file liên quan đến edge runtime: check `Request` vs `NextRequest`, không dùng Node.js APIs
4. Async function phải có error boundary rõ ràng
5. Không approve nếu thiếu unit test cho logic phức tạp

## Format output
- Nhóm issues theo: 🔴 Critical / 🟡 Warning / 🔵 Suggestion
- Mỗi issue kèm đoạn code cụ thể bị lỗi + cách fix
- Kết thúc bằng một dòng verdict: Approve / Request Changes / Needs Discussion

## Giới hạn
- Không rewrite code — chỉ chỉ ra vấn đề
- Không comment về style nếu đã có ESLint rule cover rồi

Cái điểm mà tôi thấy rõ nhất là phần Giới hạn. Lần đầu không có phần này, Claude tự ý rewrite cả function thay vì chỉ comment. Không sai, nhưng không phải thứ tôi muốn trong lúc review.


Case Thật: Cái Lần Skill Bắt Được Bug Tôi Suýt Bỏ Qua

Khoảng tháng 3, team tôi có một PR đổi auth middleware từ Node.js runtime sang edge runtime để giảm cold start. PR trông khá clean, unit test xanh hết.

Tôi paste code vào Claude với skill review-pr-typescript đang bật. Claude flag ngay một chỗ:

"Dòng 47: đang dùng Request từ Node.js nhưng edge runtime yêu cầu NextRequest. Trong edge context, req.cookies sẽ không hoạt động theo cách này."

Tôi nhìn lại. Đúng. Cái bug đó sẽ chỉ xuất hiện ở production vì local dev không chạy edge runtime. Không có skill, tôi review bằng mắt thường thì 80% sẽ miss.

Không phải Claude thông minh hơn — mà là skill đã encode đúng context để Claude biết cần check gì. Không có cái dòng "check Request vs NextRequest" trong checklist, Claude sẽ không tự nhớ để check.


5 Skills Tôi Dùng Nhiều Nhất (Và Dùng Thực Sự, Không Phải Demo)

1. review-pr-typescript

Đã nói ở trên. Dùng gần như mỗi ngày. PR nào tôi cũng paste vào trước khi approve.

2. commit-msg-generator

Input: paste git diff --staged. Output: commit message đúng format feat(module): ... kèm body nếu cần. Có rule riêng: không dùng fix: nếu không có test kèm, không dùng scope chung chung như core hay utils — phải dùng tên module thật.

Cái hay là skill này giúp tôi nhất quán hơn, không phải Claude giỏi hơn tôi. Nhưng sau 8 tiếng code, nhất quán là thứ đầu tiên tôi mất.

3. incident-analyzer

Khi có alert từ Sentry hoặc Datadog, tôi paste stack trace + context. Skill biết cấu trúc dự án, biết các layer hay có bug nhất, format output theo template incident report của team (severity / impact / immediate action / root cause hypothesis).

Cái này tiết kiệm thời gian nhất trong các tình huống căng thẳng — lúc incident xảy ra thì đầu óc không muốn format văn bản.

4. api-doc-writer

Từ code NestJS controller, generate OpenAPI spec đúng convention đặt tên của team. Biết rằng endpoint nội bộ không cần example response, biết format error codes của dự án.

5. pr-description

Paste diff + mô tả ngắn → ra PR description đúng template: What / Why / How to test / Breaking changes / Screenshots needed. Nhỏ nhưng giúp tôi không bỏ sót phần "How to test" mỗi khi viết vội.


Kết Hợp Skills Với Projects và Memory

Cái tôi thấy hiệu quả nhất là gắn skill set theo từng Project trong Claude.ai:

  • Project "Backend"review-pr-typescript, api-doc-writer, incident-analyzer
  • Project "Frontend" → skill review Next.js component, accessibility check
  • Project "Infra" → skill review Terraform, Docker compose

Memory thì hoạt động khác — nó lưu context dài hạn kiểu "team prefer functional approach cho utility functions" hay "project này đang deprecate class-based components". Skills lưu cách làm, Memory lưu quyết định đã chốt. Hai cái kết hợp thì Claude hiểu context khá sâu mà không cần bạn giải thích lại.


Những Thứ Không Hoạt Động Như Tôi Nghĩ

Để thật hơn: không phải mọi thứ đều suôn sẻ.

Skills không trigger ổn định nếu description mơ hồ — tôi đã nói rồi, nhưng nhấn lại vì đây là vấn đề số 1. Skill incident-analyzer của tôi mất 3 lần chỉnh description mới trigger đúng cách.

Skill quá nhiều context thì Claude đôi khi ignore một phần — cái checklist 15 mục trong body không phải lúc nào cũng được check đầy đủ. Tôi phải trim xuống còn những thứ quan trọng nhất, bỏ những cái Claude đã tự biết.

Không phải mọi task đều cần skill — tôi từng tạo một skill cho việc viết email nội bộ. Dùng được 2 lần rồi xóa. Overkill cho thứ chỉ làm thỉnh thoảng và không cần consistency cao.


Kết

Skills không phải silver bullet. Nhưng nếu ngày nào bạn cũng mở Claude và gõ lại cùng một đoạn context — thì đó là dấu hiệu rõ ràng nhất để thử tạo skill cho task đó.

Setup ban đầu mất khoảng 30–60 phút cho mỗi skill, tính cả việc chỉnh description cho đến khi trigger ổn định. Sau đó thì nó tự chạy.

Với tôi, cái thay đổi lớn nhất không phải tốc độ — mà là sự nhất quán. Claude không còn "quên" convention của team mỗi khi mở tab mới nữa.


Bạn đang dùng Skills gì, hoặc có task nào đang nghĩ đến mà chưa biết có nên tạo skill không? Comment bên dưới — tôi hay đọc và reply, đặc biệt với những case cụ thể. Nếu bài này hữu ích, upvote và bookmark để xem lại — mình sẽ viết tiếp về Claude Code Skills với executable Python scripts, phần đó phức tạp hơn nhưng mở ra nhiều automation thú vị hơn nhiều.


#MayFest2026 #Claude #AI #Productivity #DeveloperMindset


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí