TROISINH
Sử dụng thực chiếnSkills & Custom Commands

Skills là gì? Cách Claude Code tự động 'đoán ý' và chạy lệnh thay bạn

Hiểu Skills trong Claude Code: cách biến workflow thủ công thành automation thông minh, phân biệt rõ Skills vs MCP, và tạo custom commands tự động invoke.

Định nghĩa

Skills là những "bộ kỹ năng" được đóng gói trong file SKILL.md, cho phép Claude Code tự động kích hoạt (auto-invoke) workflow dựa trên ngữ cảnh hội thoại thay vì đợi bạn gõ lệnh thủ công. Nó đóng vai trò cầu nối giữa slash command (phải ra lệnh trực tiếp) và MCP (kết nối hệ thống bên ngoài), mang automation vào đúng lúc, đúng chỗ mà bạn không cần nhớ tên lệnh.

Giải thích chi tiết

Skill vs Slash Command: Sự khác biệt cốt lõi

Nhiều người nhầm lẫn Skills và slash commands là một. Sự thật: chúng là hai kiến trúc điều khiển khác nhau.

Slash commands (/plan, /commit, /test) là imperative — bạn phải nhớ tên lệnh, gõ đúng cú pháp, và kích hoạt thủ công. Đây là "chế độ kéo cò" (manual trigger).

Skills là declarative — bạn mô tả vấn đề bằng ngôn ngữ tự nhiên, Claude đọc "menu" các description có sẵn và tự quyết định có nên gọi skill hay không. Hãy tưởng tượng slash command như điện thoại bàn phải quay số, còn skill như smartphone hiển thị ứng dụng phù hợp khi bạn cần.

Điểm mấu chốt nằm ở YAML frontmatter. Skill sử dụng trường description (tối đa 200 ký tự) như một điều kiện if ngầm: nếu mô tả trong skill khớp ngữ nghĩa (semantically) với ý định của bạn, Claude sẽ auto-invoke mà không cần prefix /.

Cấu trúc SKILL.md: Progressive Disclosure

Skill sử dụng kiến trúc 3 cấp độ tải (progressive disclosure) để tiết kiệm context window — điều mà slash command truyền thống không làm được:

  1. Level 1 (Metadata): YAML frontmatter (name, description, autoInvoke) luôn được load (~100 tokens). Đây là "bìa sách" để Claude biết skill tồn tại.
  2. Level 2 (Instructions): Nội dung markdown body chỉ load khi skill được trigger (dưới 5k tokens). Đây là "nội dung chương sách".
  3. Level 3 (Resources): File tham chiếu (REFERENCE.md, scripts) được gọi qua bash khi cần, không bao giờ nằm trong context window.

Cấu trúc này cho phép bạn có hàng chục skill trong dự án mà chỉ tốn ~100 tokens mỗi skill khi chưa dùng đến — hiệu quả gấp 60-80 lần so với nhồi toàn bộ hướng dẫn vào system prompt.

Auto-invoke: Từ thủ công sang tự động

Trường autoInvoke trong frontmatter chứa các trigger phrase (ví dụ: "that worked", "problem solved", "let's document this"). Khi Claude phát hiện các cụm từ này trong lịch sử chat, skill sẽ tự động chạy mà không cần bạn gõ lệnh.

Kết hợp với effort (implicit filter), Claude chỉ auto-invoke khi phát hiện dấu hiệu "cố gắng" — ví dụ: nhiều lần thử lỗi, stack trace dài, hoặc nhiều file bị chỉnh sửa. Điều này tránh việc ghi chép lại mọi câu lệnh đơn giản như sửa typo.

Vị trí và phạm vi: User vs Project

Skills có hai phạm vi persistence:

  • User scope (~/.claude/skills/): Skill cá nhân, áp dụng mọi dự án (ví dụ: skill viết commit message theo chuẩn của bạn).
  • Project scope (.claude/skills/): Skill đặc thù dự án, chia sẻ qua git với cả team (ví dụ: skill triển khai microservice nội bộ).

Khi có xung đột tên, project scope ghi đè user scope — cho phép override behavior cục bộ mà không ảnh hưởng global workflow.

Ví dụ thực tế

Skill /test cho developer Việt Nam

Bạn đang làm việc với hệ thống backend Node.js của một startup fintech tại Hà Nội. Thay vì chạy npm test và đợi 10 phút cho toàn bộ suite, bạn tạo skill auto-test với description: "Automatically run relevant test suites when user mentions testing, debugging, or 'it broke'".

Khi bạn chat "hmm, function tính lãi suất này chạy sai kết quả", Claude không chỉ đọc code — nó auto-invoke skill, quét git diff để tìm file vừa sửa, xác định test file liên quan qua import graph, và chạy jest chỉ trên module đó thay vì toàn bộ suite.

# .claude/skills/auto-test/SKILL.md
---
name: auto-test
description: "Run relevant tests when debugging failures or verifying fixes. Trigger on: 'test', 'broke', 'bug', 'fix'."
autoInvoke: ["broke", "fix verified", "let's test"]
---

When invoked:
1. Read recent git diff to identify changed files
2. Use glob to find test files matching patterns: *test_{filename}.py or [filename]_test.py
3. Run: python -m pytest <matched_tests> -v
4. Report pass/fail with concise summary

Skill /deploy cho DevOps tại Việt Nam

Thay vì nhớ sequence docker build → tag → push → restart khi triển khai lên VPS Vultr ở Singapore hoặc server vật lý tại Viettel Cloud, bạn tạo skill deploy với description chứa từ khóa "deploy", "ship to production", "release".

Khi bạn nói "ship cái feature này lên prod đi", Claude tự động:

  1. Check git status đảm bảo không có uncommitted changes
  2. Chạy test suite (qua skill /test nếu có)
  3. Build Docker image với tag semantic version
  4. Push lên registry (Docker Hub hoặc Harbor nội bộ)
  5. SSH vào server thông qua jump host và restart service

Khác với alias bash tĩnh, skill này có thể xử lý edge case như "nếu test fail thì abort và notify Slack channel #backend-vn" nhờ reasoning capability của Claude.

Skill chuẩn hóa code review cho team logistics

Một team phát triển ứng dụng giao hàng nội địa tạo skill pr-checklist với autoInvoke: ["created a PR", "ready for review", "submit this"]. Mỗi khi developer nói "tôi vừa tạo PR xong", Claude auto-load checklist nội bộ: kiểm tra có thêm unit test cho tính năng tính phí ship VietQR không, có cập nhật API docs không, có để lại console.log debug không.

Đây là cách institutionalize tribal knowledge — biến "quy tắc ngầm" của team thành automation không cần tech lead phải nhắc nhở mỗi lần review.

Ứng dụng

Developer cá nhân

  • Context switching zero-cost: Chuyển giữa dự án React của khách hàng Mỹ và dự án Spring Boot của đối tác Hàn Quốc không cần nhớ lại "dự án này dùng Jest hay Vitest", skill tự detect và chạy đúng lệnh.
  • Vibe coding accelerator: Non-coder dùng skill để tự động hóa các bước lặp lại (resize ảnh sản phẩm cho Shopee, chuyển đổi file CSV từ VietQR sang định dạng MISA) mà không cần học syntax bash phức tạp.

Team/Doanh nghiệp

  • Standardization: Đóng gói best practices (security scan, conventional commits) vào skill chia sẻ qua .claude/skills/, đảm bảo mọi member tuân thủ cùng workflow dù làm việc từ Hà Nội hay TP.HCM.
  • Onboarding nhanh: New hire chỉ cần clone repo, skill đã sẵn sàng hướng dẫn cách build, test, deploy theo chuẩn công ty mà không cần mentor ngồi cạnh chỉ từng bước.

Non-coder & Content creators

  • Content pipeline: Skill tự động chuyển bản thảo markdown thành định dạng publish khác nhau (Ghost, Substack, LinkedIn) khi bạn nói "xuất bản bài này".
  • Data cleaning: Auto-invoke khi phát hiện file CSV mới từ báo cáo bán hàng, tự động chuẩn hóa encoding UTF-8 và xử lý missing values trước khi import vào Google Sheets.

So sánh

Đặc điểmSkillsSlash CommandsMCP (Model Context Protocol)
Kích hoạtAuto-invoke (semantic matching) hoặc ManualChỉ Manual (/command)Manual (tool calling)
Thành phầnSKILL.md + scriptsMarkdown file đơn thuầnExternal server (JSON-RPC)
ContextProgressive disclosure (lazy load)Load toàn bộ khi gọiKhông load code, chỉ gọi API
Phạm viSingle-file, nội bộ ClaudeSingle-file, nội bộ ClaudeKết nối hệ thống bên ngoài (DB, API, GitHub)
Use caseWorkflow nội bộ, automation lặp lạiLệnh one-off, tương tác thủ côngTích hợp dữ liệu real-time từ bên ngoài
Ví dụ/test, /deploy, /simplify/plan, /commit, /askTruy vấn PostgreSQL, post Slack message

Kết luận: Skills là "công cụ nội bộ" của Claude Code — chúng biến các thao tác lặp lại thành reflex tự động. MCP là "cầu nối ra thế giới bên ngoài". Đừng dùng skill để gọi API bên ngoài (dùng MCP), cũng đừng dùng MCP cho các workflow nội bộ đơn giản (tốn context và latency).

Bài viết liên quan

Cùng cụm (Skills & Custom Commands)

Đọc tiếp

On this page