Skill Codex đầu tiên: biến một workflow thành SKILL.md
Cách biến một workflow đã làm ra thành skill Codex: thư mục .agents/skills, SKILL.md với name và description, progressive disclosure, và kiểm skill có chạy thật.
✓ Đã duyệt độc lập · cập nhật 31/10/2026 · 11 min
1. Vì sao lại phải giải quyết chuyện này lần nữa?
Chuck McCullough mở đầu video (đăng ngày 30/10/2026) bằng một câu hỏi: bạn đã bao giờ mất nửa cuộc hội thoại chỉ để khiến một agent làm một việc theo đúng cách bạn muốn chưa? Bạn thử vài tool, sửa output, và cuối cùng có được một quy trình chạy được. Rồi một cuộc hội thoại mới bắt đầu, và bạn lại ngồi giải thích lại đúng những quyết định ấy.
Anh kể mình đã gặp đúng chuyện này khi làm các bài thuyết trình cho khoá học. Phần có ích của cuộc hội thoại kia, theo anh, chính là tất cả những gì anh học được về quy trình, và anh muốn giữ lại phần đó.

Khi làm việc với một agent, anh nói (video đăng ngày 30/10/2026), ta thường đang đi qua vài bước của một workflow lớn hơn. Ví dụ, anh có thể đang làm một bài thuyết trình cho một khoá đào tạo anh đang xây dựng. Việc đó gồm nhiều bước, từ lập dàn ý tới thiết kế slide và chuẩn bị speaker notes.
Khi bắt đầu nhờ agent giúp, anh thấy có những lần tương tác suôn sẻ hơn nhiều so với những lần khác. Rất nhiều thứ phụ thuộc vào cách agent tiếp cận việc giúp anh (theo trải nghiệm Chuck kể trong video đăng ngày 30/10/2026). Qua nhiều lần tương tác, anh dần học được cách tiếp cận nào hiệu quả nhất với mình.
2. Skill giữ lại một workflow dùng lại được
Bây giờ anh muốn ghi lại những hướng dẫn, những lựa chọn tool và những hành động đó, để agent dùng lại được quy trình ấy. Theo Chuck (video đăng ngày 30/10/2026), đó là việc một skill cho phép anh làm: đóng gói một workflow dùng lại được thành các chỉ dẫn (instructions), kèm file hỗ trợ khi cần.

3. Ví dụ: từ video tới slideshow, và bài học về FFmpeg, Whisper
Anh đưa một ví dụ. Trong công việc, anh thường có một video hoặc một bản ghi âm anh giảng giải một chủ đề. Từ đó, anh muốn tạo ra một slideshow.
Slideshow là đích cuối, nhưng để tới đó có nhiều bước: thứ nhất là chuyển âm thanh thành chữ (transcribe), rồi tóm tắt các ý chính, thiết kế slide và thêm speaker notes.

Một điều anh học được trong workflow của mình (theo lời anh trong video đăng ngày 30/10/2026) là tách âm thanh ra khỏi video trước khi transcribe cho anh kết quả tốt hơn, và anh tìm được một tool tên là FFmpeg làm được việc đó. Anh cũng học được rằng có nhiều cách để transcribe âm thanh. Trong một số cuộc hội thoại, agent thử vài cách khác nhau, thất bại, rồi cứ thử tiếp cho tới khi tìm được cách chạy được.
Chuck thấy dùng Whisper để transcribe là cách đáng tin cậy nhất với nhu cầu của anh (theo trải nghiệm anh kể trong video đăng ngày 30/10/2026). Giờ anh có thể viết một script tách âm thanh từ video rồi transcribe bằng Whisper, và như vậy anh có một pipeline lặp lại được. Anh vẫn sẽ cần xem lại bản chữ để sửa lỗi, hoặc nhờ agent làm việc đó.
4. Phần cho tool, phần cho model, và giá trị của kinh nghiệm
Theo Chuck (video đăng ngày 30/10/2026), tóm tắt ý chính và thiết kế slide thì đòi hỏi nhiều phán đoán hơn. Đó là phần anh cần model làm. Khi tới bước tạo bài thuyết trình, anh thấy mình cần đưa khá nhiều hướng dẫn về nội dung slide, cũng như nên dùng ứng dụng trình chiếu nào.

Qua các vòng lặp đó (theo lời anh trong video đăng ngày 30/10/2026), anh học được về các tool để tạo ra những loại nội dung khác nhau, và cách chỉ đạo agent tạo nội dung rồi kiểm tra lại nội dung đó.
Theo Chuck, ghi lại những gì bạn biết là phần quan trọng nhất. Ngay cả khi model rốt cuộc cũng tự nghĩ ra được một lời giải chấp nhận được, kiến thức của bạn có thể giúp tiết kiệm thời gian và tiền bạc (theo Chuck, video đăng ngày 30/10/2026).
5. Một yêu cầu ngắn, một quy trình đứng sau
Vì vậy khi anh nói với agent: tôi có một video nói về một chủ đề nào đó trong file này, tên file là thế này, hãy tạo slideshow cho tôi, anh kỳ vọng nó đi theo skill anh đã xây. Theo Chuck (video đăng ngày 30/10/2026), khi skill đó được chọn, quy trình đã nằm sẵn ở đó: tách âm thanh nếu cần, transcribe bằng Whisper, tóm tắt các ý chính, thiết kế slide, thêm speaker notes bằng tool trình chiếu anh ưa dùng.

Agent khi đó có sẵn những lựa chọn tool và tuỳ chọn đã chạy được của anh, thay vì phải tự khám phá lại từ đầu. Theo Chuck (video đăng ngày 30/10/2026), điều đó có thể cải thiện hiệu quả và độ nhất quán, và giảm chi phí agent. Anh nói tất nhiên vẫn cần kiểm tra kết quả, nhưng mục tiêu là giảm thời gian và giảm chi phí.
6. Skill đi vào context của agent như thế nào
Chuck giải thích (video đăng ngày 30/10/2026): AI client ráp context cho model từ prompt của bạn, phần lịch sử hội thoại liên quan, các chỉ dẫn áp dụng như AGENTS.md, và thông tin về các tool cùng các skill đang có. Với skill, ban đầu model thấy tên và mô tả. Trong Codex, nó còn thấy cả đường dẫn file của chúng.

Khi model quyết định dùng một skill, nó đọc file SKILL.md của skill đó. Sau đó nó có thể đọc thêm các tài liệu tham khảo hỗ trợ hoặc chạy script khi cần. Chuck nói đó là cái ta gọi là progressive disclosure: chỉ dẫn chi tiết và resource chỉ vào context khi chúng hữu ích. Một task có thể dùng nhiều hơn một skill, và model tiếp tục làm việc với các chỉ dẫn này bên cạnh phần còn lại của context (theo Chuck, video đăng ngày 30/10/2026).
Anh nói thêm (video đăng ngày 30/10/2026): việc chọn một skill không bảo đảm mọi bước sẽ chạy đúng.
Trang tài liệu skill của Codex (đọc ngày 31/10/2026) cũng mô tả cùng cơ chế: Codex bắt đầu với tên và mô tả của từng skill, kèm đường dẫn file, rồi mới nạp toàn bộ chỉ dẫn trong SKILL.md khi quyết định dùng skill đó.
7. Tạo thư mục skill trong Codex
Theo hướng dẫn của Chuck (video đăng ngày 30/10/2026), trong Codex bạn bắt đầu với một thư mục .agents ở cấp user hoặc cấp project, tuỳ bạn muốn skill dùng được ở đâu. Các ứng dụng agent khác có thể dùng vị trí khác.
Tiếp theo, theo Chuck (video đăng ngày 30/10/2026), tạo một thư mục con tên là skills. Trong thư mục skills, tạo một thư mục riêng cho mỗi skill và đặt tên thư mục trùng với tên skill: dùng chữ thường, chữ số và dấu gạch nối, không có khoảng trắng. Chọn một cái tên giúp nhận ra đó là task gì. Còn phần mô tả (description) là nơi ta nói rõ khi nào agent nên cân nhắc dùng skill.

.agents/skills/agent-chat-mood/SKILL.md. Bên phải: cấp Project dùng chung với repo này, cấp User dùng được ở mọi project của bạn; hãy dùng những vị trí mà ứng dụng agent của bạn hỗ trợ. Dòng dưới: chọn tên task dễ nhận ra, tên thư mục khớp với name trong front matter (theo slide, video đăng ngày 30/10/2026).Cấu trúc trên slide:
.agents/
└ skills/
└ agent-chat-mood/
└ SKILL.mdTài liệu Codex (đọc ngày 31/10/2026) ghi vị trí cấp repo là $REPO_ROOT/.agents/skills (và các thư mục .agents/skills từ thư mục đang làm việc lên tới gốc repo), còn cấp user là $HOME/.agents/skills. Đặc tả Agent Skills (đọc ngày 31/10/2026) ghi trường name chỉ gồm chữ thường, số và dấu gạch nối, và phải khớp tên thư mục cha.
8. SKILL.md và YAML front matter
Bên trong thư mục skill, tạo một file tên SKILL.md. Theo Chuck (video đăng ngày 30/10/2026), file này chứa tài liệu và chỉ dẫn cho skill, gồm các bước, các tool và các nguyên tắc agent cần theo khi áp dụng skill.
Phần đầu file là YAML front matter. Nằm giữa hai dòng ba dấu gạch ngang, nó chứa tên skill (khớp với tên thư mục) và một mô tả. Mô tả đó cho agent biết skill làm gì và khi nào nên cân nhắc dùng nó (theo Chuck, video đăng ngày 30/10/2026).

create-slide-show-from-video. Name là một workflow dễ nhận ra; description là task sẽ khiến agent cân nhắc dùng skill (slide trong video đăng ngày 30/10/2026).Front matter trên slide:
--- name: create-slide-show-from-video description: > Create a slide show from a local video recording. ---
Với việc chọn tự động, tên và mô tả của skill giúp model quyết định skill đó có liên quan hay không (theo Chuck, video đăng ngày 30/10/2026).
9. Chọn skill tự động hay gọi đích danh
Theo Chuck (video đăng ngày 30/10/2026), việc chọn dựa trên ý nghĩa, nên một yêu cầu về làm slide từ video có thể khớp với skill của anh. Nhưng không phải cứ prompt chứa vài từ khoá nhất định là chắc chắn khớp. Khi skill đã được chọn, model đọc toàn bộ chỉ dẫn của nó, rồi dùng bất kỳ resource hỗ trợ nào nó cần.
Bạn cũng có thể gọi đích danh skill ngay trong prompt. Trong Codex CLI hoặc IDE extension, bạn có thể dùng bộ chọn skill (skills selector) hoặc nhắc tên skill bằng dấu đô la (theo Chuck, video đăng ngày 30/10/2026). Các client khác dùng cách chọn khác, nên hãy xem danh sách trên máy của bạn. Tài liệu Codex (đọc ngày 31/10/2026) ghi: trong Codex CLI hoặc IDE extension, chạy /skills hoặc gõ $ để nhắc tới một skill.
10. Skill chào hỏi theo ngày trong tuần
Chuck cho xem một skill đơn giản anh tạo ra để đổi giọng hội thoại của agent theo ngày trong tuần. Theo anh (demo trong video đăng ngày 30/10/2026), workflow này dùng tool call để tìm ra hôm nay là thứ mấy và thêm một chút ngẫu nhiên vào tâm trạng (mood). Phần mô tả cần khớp với những lời chào anh nhắm tới mà không khớp với các yêu cầu không liên quan.

agent-chat-mood, mô tả "Use a weekday-influenced mood for personal greetings.", kèm metadata version "1.1.0". Dòng dưới: trong SKILL.md, metadata nằm trên dấu phân cách, chỉ dẫn cho tool nằm bên dưới (slide trong video đăng ngày 30/10/2026).Theo Chuck (demo trong video đăng ngày 30/10/2026), phần thân file đưa ra những chỉ dẫn cụ thể anh muốn agent dùng, ví dụ hai lệnh PowerShell: Get-Date và Get-Random. Nội dung SKILL.md trên slide, phần front matter và phần thân ("Then the body gives the process"):
--- name: agent-chat-mood description: > Use a weekday-influenced mood for personal greetings. metadata: version: "1.1.0" --- 1. Run Get-Date for the weekday. Monday = 1 … Sunday = 7. 2. Run Get-Random -Minimum -1 -Maximum 2. 3. Add day + adjustment. 4. Choose a matching persona. 5. Reply; keep the index internal.
11. Phép tính mood index và lần sửa đầu tiên
Theo Chuck (demo trong video đăng ngày 30/10/2026), skill đánh số thứ Hai là 1 và Chủ nhật là 7, rồi cộng thêm một điều chỉnh ngẫu nhiên là trừ 1, 0 hoặc cộng 1. Kết quả là một mood index từ 0 tới 8: 0 là cáu kỉnh (grumpy), 8 là vui vẻ và lạc quan. Các số ở giữa là những tâm trạng trung gian.

Lần đầu Chuck thử skill này (demo trong video đăng ngày 30/10/2026), agent trả lời và để lộ cả index đã tính, nói những câu kiểu: vì hôm nay là thứ Hai nên tôi phải cáu kỉnh.
Nên anh thêm một chỉ dẫn: giữ index ngoài lời chào, thay vào đó dùng một persona hợp với tâm trạng. Khi bạn gửi cho agent một lời chào mang tính cá nhân, nó có thể chọn skill này để xác định tâm trạng phù hợp và trả lời theo đó, bằng một persona khớp với tâm trạng ấy (theo Chuck, video đăng ngày 30/10/2026).
12. Thử vào thứ Hai và thứ Sáu
Một hôm thứ Hai, Chuck cố tình gửi một lời chào vui vẻ, phấn chấn. Câu trả lời của agent có ghi nhận tin vui, nhưng giọng thì rõ ràng khô khan và cáu kỉnh (demo trong video đăng ngày 30/10/2026).
Rồi anh thử vào một ngày thứ Sáu. Anh làm ngược lại với tâm trạng của chính mình và đưa một prompt u ám. Agent trả lời theo kiểu nhìn thấy nửa ly đầy (demo trong video đăng ngày 30/10/2026).

Câu trả lời trông nhất quán với skill, nhưng theo Chuck, chỉ riêng giọng điệu thì chưa chứng minh được skill đã chạy. Anh phải xem các tool log có sẵn và chi tiết cuộc chat để kiểm xem agent có đọc skill và có chạy các lệnh bắt buộc hay không (demo trong video đăng ngày 30/10/2026).
13. Execution record mới là thứ để kiểm
Chuck nói mục tiêu thật của anh không phải là chính lời chào theo tâm trạng. Anh chỉ muốn cho thấy (demo trong video đăng ngày 30/10/2026) phần mô tả có dẫn tới việc chọn skill hay không, và agent có thực thi các bước anh đã định nghĩa hay không. Câu trả lời là một cách nhanh để quan sát kết quả mong muốn; còn execution record (bản ghi thực thi) mới là thứ cho phép kiểm tra quy trình thật sự.

Còn bây giờ, theo Chuck (video đăng ngày 30/10/2026), các ví dụ này cho ta một lần kiểm tra đầu tiên, chứ chưa chứng minh được skill chạy ổn định.
14. Đến lượt bạn thử
Chuck giao bài (video đăng ngày 30/10/2026): tạo cấu trúc thư mục và một file SKILL.md. Đặt vào vài chỉ dẫn đơn giản, rồi thử các prompt khác nhau để xem cái gì kích hoạt skill và cái gì không. Kiểm xem agent thực sự đã làm theo những chỉ dẫn nào.
Anh nhắc: chuyện này không tất định (non-deterministic). Theo Chuck (video đăng ngày 30/10/2026), agent vẫn đang dùng large language model. Tất cả những gì bạn làm với skill là bổ sung vào context gửi tới large language model, và bạn vẫn đang đi theo một kết quả mang tính xác suất (probabilistic outcome). Rồi anh nói thêm: thử nói câu đó nhanh ba lần xem.
15. Từ file prompt copy-paste tới một skill
Chuck nói có thể bạn đang có một file đầy prompt để copy rồi paste vào cuộc hội thoại. Có khi bạn còn có những "công thức" (recipes), thả lần lượt vài prompt vào cuộc hội thoại. Theo anh (video đăng ngày 30/10/2026), đó chính là một workflow.
Anh kể vài hôm trước khi quay video (video đăng ngày 30/10/2026), anh vừa nói chuyện với một người bạn về đúng chuyện này, và đó là cách cô ấy làm: cứ thả các prompt vào. Anh bảo cô: hãy làm một skill. Lấy kiến thức và kinh nghiệm của mình biến thành một skill.
Lần tới khi có task đó, bạn chỉ cần bảo agent dùng quy trình bạn đã tìm ra. Theo Chuck (video đăng ngày 30/10/2026), việc đó giúp bạn khỏi phải đưa từng bước cho agent lần nữa, trong khi bạn vẫn xem lại kết quả và xử lý những quyết định cần tới ý kiến của bạn.
Cuối video, anh giới thiệu mình là Chuck McCullough.
Nguồn và liên kết 6 nguồn
- Tên gốc: Create Your First Codex Skill: Turn a Workflow into SKILL.md
- Sự kiện: YouTube
- Video gốc: https://www.youtube.com/watch?v=0KC2BQBxNq8 youtube.com
- Kênh YouTube Coding With Chuck (Chuck McCullough): youtube.com/channel/UCx5fdKheO1UBTKUfRRSpZ3Q youtube.com
- Tài liệu Agent Skills của Codex (vị trí
.agents/skillstheo cấp repo và user, progressive disclosure, gọi skill bằng/skillshoặc$; đọc ngày 31/10/2026): developers.openai.com/codex/skills developers.openai.com - Đặc tả Agent Skills (quy tắc cho trường name và description trong SKILL.md; đọc ngày 31/10/2026): agentskills.io/specification agentskills.io