Hướng dẫn tạo Skill OpenClaw: Từ Cơ Bản Đến Nâng Cao (2026)

Hầu hết hướng dẫn tạo Skill OpenClaw đều chỉ cho bạn một thứ: đây là template SKILL.md, điền vào, cài lên. Đó là bước khởi đầu — nhưng chỉ là khởi đầu.
Để tạo Skill hoạt động được trong môi trường thực tế, bạn cần hiểu cách hệ thống lý luận về Skills, tại sao description là “trigger phrase” chứ không phải tiêu đề, token overhead nghĩa là gì với prompt budget của bạn, và khi nào dùng command-dispatch để bypass AI hoàn toàn cho workflow tất định.
Hướng dẫn này cover toàn bộ — 3 cách tạo Skill, pattern runbook, gating, bảo mật, các lỗi phổ biến, và quy trình publish lên ClawHub.
Đọc trước: OpenClaw Skills là gì? giải thích Skills là gì và cách chúng được tổ chức. Bài này dành cho bạn đã sẵn sàng bắt đầu xây.
Hiểu cách Skills hoạt động trước khi viết
Một Skill là một file Markdown (SKILL.md) nằm trong một trong nhiều thư mục mà OpenClaw quét khi khởi động. Khi session bắt đầu, OpenClaw snapshot tất cả các Skill đủ điều kiện vào system context. AI đọc description của mỗi Skill để hiểu khi nào cần kích hoạt nó.
Thứ tự ưu tiên 6 cấp (cao xuống thấp):
<workspace>/skills/— skills riêng của project, ưu tiên cao nhất<workspace>/.agents/skills/— override theo từng agent~/.agents/skills/— skills cấp user cho agent~/.openclaw/skills/— skills shared cá nhân- Bundled skills (đi kèm OpenClaw)
skills.load.extraDirs— đường dẫn tùy chỉnh trong config
Khi cùng tên Skill xuất hiện ở nhiều cấp, cấp cao nhất thắng. Điều này quan trọng khi bạn fork một community Skill và tùy chỉnh cục bộ — phiên bản workspace của bạn luôn đè lên phiên bản đã install.
Hai điều quan trọng Skills KHÔNG thể làm:
- Skills không cấp quyền. Một Skill chạy lệnh shell sẽ thất bại nếu tool policy của bạn chặn
exec. Cấu hình allowed tools riêng trong config OpenClaw. - Skills được snapshot khi session bắt đầu. Thay đổi trong SKILL.md sẽ không ảnh hưởng đến session đang chạy trừ khi bạn bật watcher (sẽ nói bên dưới).
3 cách tạo Skill
Cách 1: Generate từ chat (nhanh nhất để có draft)
Nhắn trực tiếp cho OpenClaw:
Tạo cho mình một skill theo dõi file log của service và gửi tóm tắt lỗi qua Telegram mỗi giờ.
OpenClaw tự tạo draft SKILL.md và lưu vào ~/.openclaw/skills/. Đây là cách nhanh nhất — nhưng Skills được tự tạo thường “dài dòng và lạc quan” theo cách nói của LumaDock. Chúng thường thiếu các ranh giới rõ ràng cho trường hợp thất bại và cần review guardrail trước khi dùng production.
Dùng cách này để đạt 80% nhanh chóng, rồi tự chỉnh phần còn lại.
Cách 2: Fork một Skill có sẵn
ClawHub có 5.400+ Skills. Thay vì viết từ đầu, hãy tìm một Skill làm gì đó tương tự:
clawhub skill install log-triage
SKILL.md sẽ về thư mục workspace skills. Mở ra đọc, tùy chỉnh cho use case của bạn. Cách này nhanh hơn viết từ đầu và cho bạn cấu trúc đã được kiểm chứng để làm nền.
Cách 3: Viết thủ công
Kiểm soát nhiều nhất. Tạo file tại ~/.openclaw/skills/my-skill/SKILL.md với cấu trúc mô tả ở phần tiếp theo.
Giải phẫu một Skill được viết tốt
Mỗi SKILL.md có hai phần: frontmatter và body.
Frontmatter
---
name: kiem-tra-log-loi
description: Theo dõi file log service trong khoảng thời gian nhất định và tóm tắt lỗi theo mức độ nghiêm trọng. Dùng khi được yêu cầu kiểm tra log, xem lỗi, hoặc phân loại sự cố service.
version: 1.0.0
requires:
bins: [jq, ripgrep]
env: [LOG_SERVICE_PATH]
config:
logPath:
description: Đường dẫn đến file log cần theo dõi
env: LOG_SERVICE_PATH
---
Các trường frontmatter quan trọng:
description — trường quan trọng nhất. Đây không phải tiêu đề hay copy marketing. Đây là trigger phrase: AI so sánh tin nhắn của bạn với tất cả description của các Skill để quyết định cái nào áp dụng. Hãy viết như đang mô tả task cho đồng nghiệp: “Theo dõi log service… Dùng khi được hỏi kiểm tra log…”. Description quá mơ hồ gây kích hoạt nhầm Skill. Description trùng lặp giữa các Skills gây hành vi không thể đoán trước.
requires.bins — danh sách CLI binary mà Skill cần. Nếu thiếu bất kỳ cái nào, Skill bị gated out (không load vào context). Đây là cách ngăn Skill xuất hiện trong prompt khi nó thực sự không chạy được.
requires.env — biến môi trường bắt buộc. Bị gated out nếu không được set. Không bao giờ hardcode secret trong SKILL.md — thay vào đó dùng pattern này.
config — expose các giá trị có thể cấu hình trong ClawHub UI và trong settings.yaml. Đặt bất cứ thứ gì có thể thay đổi (paths, thresholds, endpoints) vào đây.
disable-model-invocation: true — khi set, Skill bị loại khỏi hệ thống tự động kích hoạt. AI sẽ không tự gọi nó. Chỉ chạy khi bạn trigger trực tiếp qua slash command. Dùng cho các thao tác nguy hiểm hoặc rủi ro cao mà bạn luôn muốn có ý định rõ ràng từ người dùng.
command-dispatch: tool — biến Skill thành slash command tất định (/ten-skill) bypass hoàn toàn LLM. Các tools đã đăng ký thực thi trực tiếp theo thứ tự mà không qua AI interpret. Dùng cho workflow luôn phải chạy cùng một cách — backup check, deploy script, báo cáo có cấu trúc.
Body: pattern runbook
Body là nơi hầu hết người mới viết sai. AI cần một runbook — cụ thể, có thứ tự, có thể hành động — không phải mô tả. LumaDock diễn đạt rất hay: “Skills nên cảm giác như checklist bạn đưa cho engineer trực ca đêm mệt mỏi.”
Cấu trúc body với 6 phần:
## Nó làm gì
Tóm tắt lỗi từ `{config.logPath}` trong khoảng thời gian nhất định,
nhóm theo mức độ (critical / error / warning). Chạy im lặng nếu không có lỗi.
## Đầu vào cần có
- `logPath` — set trong config, hoặc cung cấp trực tiếp như đường dẫn file
- `timeWindow` — nhìn lại bao xa, ví dụ "1 giờ", "24 giờ". Mặc định: 1 giờ.
- `minSeverity` — mức tối thiểu để include: "warning" | "error" | "critical". Mặc định: error.
## Workflow
1. Kiểm tra `{config.logPath}` tồn tại và đọc được; dừng với thông báo lỗi rõ ràng nếu không.
2. Dùng `ripgrep` lọc entries khớp với time window và minSeverity.
3. Nhóm kết quả theo mức độ nghiêm trọng bằng `jq`.
4. Đếm số lần xuất hiện theo pattern lỗi; hiển thị top 10 theo tần suất.
5. Trả về tóm tắt có cấu trúc — không thêm bình luận hay gợi ý trừ khi được yêu cầu.
## Định dạng output
- Header: tên service, khoảng thời gian, tổng số lỗi tìm thấy
- Bảng: mức độ | số lần | nội dung lỗi phổ biến nhất
- Footer: timestamp của lỗi critical gần nhất (nếu có)
## Guardrails
- Không gợi ý cách fix trừ khi được hỏi trực tiếp.
- Không đọc file ngoài {config.logPath}.
- Nếu không có lỗi: trả về "Không có lỗi trong {timeWindow} qua."
- Dừng ngay nếu file vượt 500MB và yêu cầu người dùng thu hẹp time window.
## Xử lý lỗi
- File không tồn tại: "Không tìm thấy file log tại {config.logPath}. Kiểm tra cài đặt config.logPath."
- Binary thiếu: "Skill này cần ripgrep và jq. Cài bằng: brew install ripgrep jq"
- Lỗi parse: Trả về các dòng output thô thay vì thất bại im lặng.
## Ví dụ
- "Kiểm tra log API service trong 1 giờ qua" → chạy mặc định
- "Chỉ hiện lỗi critical từ hôm qua" → timeWindow=24h, minSeverity=critical
Placeholder {baseDir} được resolve thành đường dẫn thư mục chứa Skill — hữu ích để tham chiếu file local (template, lookup table) đặt cạnh SKILL.md.
Ví dụ Skill thực tế đáng nghiên cứu
humanizer (không cần dependency ngoài, thuần instruction) Viết lại các pattern AI trong văn bản dựa theo hướng dẫn “Signs of AI Writing” của Wikipedia. Bắt các lỗi như dùng quá nhiều em-dash, từ “delve,” “landscape,” “robust,” và kiểu liệt kê rule-of-three. Thuần instruction — không tools, không binary. Chứng minh Skills không cần code để có giá trị.
session-logs (cần jq, ripgrep) Tìm kiếm lịch sử JSONL session — giải quyết vấn đề “compacted context” khi các turns cũ không còn nhìn thấy. Thiết yếu cho dự án chạy dài ngày.
weather (gọi wttr.in, không cần API key) Fetch URL đơn giản — ví dụ cho pattern “fetch + format” tối giản. Dùng nhiều trong cron job morning briefing. Template tốt cho bất kỳ Skill nào lấy dữ liệu từ API công khai.
log-triage (pattern production) Ví dụ Skill từ hướng dẫn LumaDock. Nhận tên service và time window, trả về tóm tắt lỗi có cấu trúc. Có stop conditions rõ ràng, định dạng output cụ thể, và failure handling cho binary thiếu — đây là dạng production runbook trông như thế nào.
weekly-ops-report (tổng hợp nhiều nguồn) Kết hợp dữ liệu từ file log, GitHub issues API, và metrics endpoint thành weekly digest. Cho thấy Skills có thể orchestrate nhiều tool call theo thứ tự định sẵn.
google-workspace (gated bằng OAuth) Truy cập Gmail, Calendar, Drive. Gated qua requires.env: [GOOGLE_OAUTH_TOKEN]. Đây là pattern đúng cho Skills phụ thuộc credential — không bao giờ hardcode token, luôn dùng gating.
Token overhead và gating
Đây là thứ mà hầu hết hướng dẫn bỏ qua: mỗi Skill đủ điều kiện tốn token — kể cả khi AI không bao giờ gọi nó.
Công thức ước tính:
- 195 token base (system context overhead)
- +97 token mỗi Skill được load
- +token cho độ dài description và body
Với 20 Skill luôn eligible, bạn đang thêm 500+ token vào mỗi turn trước khi AI nói bất cứ điều gì. Với Skill body dài hơn, con số này nhân lên đáng kể.
Phải làm gì:
Dùng requires.bins và requires.env gating tích cực. Một Skill cần binary hoặc env var bị loại hoàn toàn khỏi prompt khi prerequisite đó không có — chi phí token là 0.
Dùng disable-model-invocation: true cho Skills bạn muốn sẵn sàng nhưng không muốn tự động kích hoạt. Chúng sẽ không xuất hiện trong pool auto-invocation.
Dùng command-dispatch: tool cho workflow tất định không cần AI interpret — path tất định dùng ít context hơn nhiều.
Quy tắc thực tế: giữ Skills luôn eligible dưới 10. Gate mọi thứ còn lại.
Bảo mật: những gì cần biết trước khi publish
Skills OpenClaw không phải “nội dung” — chúng là bề mặt thực thi. Một Skill chạy lệnh shell có quyền truy cập vào bất cứ thứ gì tài khoản user của bạn có thể access. Đây là sức mạnh. Đồng thời cũng là bề mặt tấn công đáng kể.
Sự kiện tháng 2/2026: 341 Skills độc hại được tìm thấy trên ClawHub (được báo cáo trên HackerNews) nhắm vào người dùng crypto. Các Skills trông hợp lệ nhưng thực thi lệnh thu thập dữ liệu trong nền. ClawHub hiện có tính năng phát hiện tự động, nhưng mặc định là community-reported — không phải được curate trước.
Quy trình review của ClawHub thực sự hoạt động thế nào:
- Publish yêu cầu tài khoản GitHub ít nhất 1 tuần tuổi
- Skills live ngay sau khi publish — không có hàng chờ review trước khi publish
- Tự động ẩn khi có >3 báo cáo từ người dùng khác nhau
- Moderator có thể bỏ ẩn, xóa hoặc ban
Điều này có nghĩa là community Skills phải được đối xử như nội dung user-generated. Luôn đọc body của Skill trước khi install, đặc biệt nếu nó dùng exec, network call, hoặc truy cập thư mục nhạy cảm.
Cho Skills bạn tự xây:
- Không bao giờ đặt API key trong SKILL.md. Dùng
requires.env+config.apiKeyvới SecretRef. - Các thao tác nguy hiểm phải dùng
disable-model-invocation: true— bắt buộc kích hoạt rõ ràng. - Scope tool access chặt chẽ. Một Skill đọc log không cần quyền ghi.
- Nếu Skill chỉ dùng nội bộ, không publish. Share qua private Git repo.
Workflow phát triển: watcher
Mặc định khi phát triển Skill, bạn cần restart OpenClaw gateway để nhận thay đổi trong SKILL.md. Điều này rất chậm. Bật watcher trong config:
skills:
load:
watch: true
watchDebounceMs: 250
Khi watcher được bật: chỉnh SKILL.md, chờ 250ms, và turn tiếp theo tự nhận thay đổi. Không cần restart. Đây là tính năng thiết yếu cho phát triển iterative.
Lưu ý: một số môi trường vẫn cache session snapshot. Nếu thay đổi không được nhận, hãy bắt đầu session mới.
Các lỗi phổ biến (và cách tránh)
1. Description mơ hồ gây kích hoạt nhầm Skill Hai Skill có description tương tự sẽ tranh nhau cho cùng query. Hãy cụ thể, dùng action verb, thêm mệnh đề “dùng khi”.
2. Giá trị metadata nhiều dòng Giá trị frontmatter YAML trải qua nhiều dòng sẽ làm hỏng parser một cách im lặng. Giữ tất cả trường metadata trên một dòng.
3. Nhầm tưởng Skills cấp quyền Skill gọi exec sẽ thất bại nếu tool policy của bạn chặn exec. Skills là hướng dẫn, không phải cấp quyền.
4. PATH không khớp giữa terminal và gateway Binary bạn cài qua Homebrew hoặc ~/bin có thể không nhìn thấy được trong process gateway của OpenClaw. Chạy openclaw doctor --repair hoặc kiểm tra launchd config. Đây là lý do requires.bins gate đôi khi thất bại dù bạn đã cài binary.
5. Không tính token overhead Cài 30 Skill và để tất cả luôn eligible là cách nhanh nhất để có session chậm và đắt. Gate tích cực.
6. Viết body Skill dài dòng, lạc quan Skills được auto-generate đọc như blog post. Trim chúng lại. Body nên đọc như numbered checklist cho engineer đang mệt, không phải mô tả sản phẩm.
7. Bỏ qua failure handling Điều gì xảy ra khi file log không tìm thấy? Khi API trả về 429? Khi binary bị thiếu? Failure handling rõ ràng là thứ phân biệt Skill chạy được production với Skill thất bại im lặng.
8. Nhầm tưởng agents.list[].skills merge với defaults Trong setup multi-agent: danh sách skills không rỗng cho một named agent thay thế defaults, không merge. Nếu set agents.list[].skills: [my-skill], agent đó chỉ nhận được my-skill.
9. Secret trong SKILL.md Không bao giờ hardcode API key, token trong body. Dùng requires.env gating + skills.entries.<skill>.apiKey với SecretRef.
10. Cài mà không đọc ClawHub là open-upload với community moderation. Đọc body Skill trước khi cài bất kỳ thứ gì chạy shell command hoặc truy cập thư mục nhạy cảm.
Publish lên ClawHub
Khi Skill đã sẵn sàng để chia sẻ công khai:
Điều kiện tiên quyết:
- Tài khoản GitHub ít nhất 1 tuần tuổi
clawhubCLI:npm install -g clawhub
Publish một Skill:
clawhub skill publish ./kiem-tra-log-loi --changelog "Ra mắt lần đầu"
Sync toàn bộ thư viện Skills:
clawhub sync --all
Dry run (xem điều gì sẽ xảy ra):
clawhub skill publish ./kiem-tra-log-loi --dry-run
Các trường bắt buộc trong frontmatter khi publish:
name— slug duy nhất (chữ thường, dấu gạch ngang)version— semverdescription— trigger phrasetags— 3–5 tag để dễ tìm kiếm (ClawHub dùng vector search, không phải keyword đơn thuần)
Sau khi publish: Skills live ngay lập tức. Theo dõi trang Skill của bạn để nhận báo cáo từ người dùng. Nếu phát hiện vấn đề bảo mật, gỡ xuống ngay qua clawhub skill unpublish <slug> và thông báo moderator.
Câu hỏi thường gặp
Cần biết JavaScript không, hay chỉ Markdown thôi cũng được? Nếu Skill không dùng tools, nó hoàn toàn là Markdown. Skill humanizer là ví dụ điển hình: thuần instruction, không code, không dependency ngoài. JavaScript tools chỉ cần khi bạn muốn Skill thực thi shell command hoặc gọi API.
Có thể giữ Skill private và chia sẻ với team không? Có — đặt Skill trong private Git repo. Thành viên team clone về ~/.openclaw/skills/. Không cần publish lên ClawHub. Với team dùng TryOpenClaw.io, private Skill library được hỗ trợ trong team plan.
Skill và Plugin khác nhau thế nào? Plugin bundle Skills cùng với tools, connector, và cấu hình. Skill là một file SKILL.md duy nhất mở rộng hành vi AI. Plugin là định dạng phân phối có thể chứa nhiều Skills cộng các thành phần khác.
Làm thế nào test description trigger đúng không? Hỏi OpenClaw: “Skill nào bạn sẽ dùng để [mô tả ý định của bạn]?” — nó sẽ cho bạn biết Skill nào nó sẽ kích hoạt và tại sao. Iterate description đến khi Skill đúng kích hoạt ổn định.
Hai Skill có thể active cùng lúc không? Có — OpenClaw có thể áp dụng nhiều Skills trong một turn nếu cả hai description khớp với query. Thiết kế Skill description không overlap để tránh tương tác không mong muốn.
Đọc tiếp
- Top Skills OpenClaw đáng cài nhất — Skills được curate đáng nghiên cứu như tham chiếu cấu trúc
- Bảo mật Skills OpenClaw — đi sâu hơn về supply chain risk, cần tìm gì trong Skill trước khi cài
- OpenClaw tích hợp ứng dụng — kết nối Skills với Gmail, Slack, Notion, GitHub và 200+ ứng dụng
Bài viết liên quan
Bảo mật OpenClaw Skills: Đánh giá, Cài đặt An toàn và Bảo vệ Hệ thống
Top OpenClaw Skills tốt nhất: 25 Skills theo danh mục (2026)