Agent Skills และ SKILL.md: วัด Progressive Disclosure อย่างเป็นรูปธรรม
skill จริง 5 รายการมีคำสั่ง 128,374 token แต่ใช้ context 253 token เมื่อตัด description สั้นเกินไป agent ก็หาไม่เจอ
ในหน้านี้
ลองนึกถึงโปรเจกต์หนึ่งที่ติดตั้ง skill ที่เผยแพร่แล้วไว้ห้ารายการ นี่คือต้นทุนของมัน
ls .claude/skills/next-best-practices next-cache-components vercel-composition-patterns
vercel-react-best-practices vercel-react-native-skillsskill level 1 level 2 level 3 files
next-best-practices 40 966 19,374 19
next-cache-components 28 2,334 0 0
vercel-composition-patterns 59 533 10,667 13
vercel-react-best-practices 68 1,670 53,670 75
vercel-react-native-skills 58 950 37,957 41
------ ------- --------
total 253 6,453 121,668คำสั่ง ตัวอย่าง และกฎรวมหนึ่งแสนสองหมื่นแปดพัน token — มากกว่าที่จะใส่ใน context window 128,000-token ได้ — แต่ต้นทุนคงที่ของการมีทั้งห้ารายการพร้อมใช้งานคือ 253 token หรือสองในสิบของหนึ่งเปอร์เซ็นต์ ไม่มีอย่างอื่นในคอร์สนี้ที่มีรูปทรงแบบนี้ นิยามของ tool ต้องจ่ายในทุก request ไม่ว่าจะถูกใช้หรือไม่ และ บทที่ 26 วัด MCP server หนึ่งตัวได้ 1,619 token ก่อนที่มันจะทำอะไรด้วยซ้ำ: สามสิบสองเท่า ของบรรทัด level-1 เฉลี่ยในตารางด้านบน
บทนี้ว่าด้วยกลไกที่สร้างอัตราส่วนนี้ ว่าด้วยสองวิธีที่มันพัง และว่าด้วยคำถามที่กลไกนี้บังคับให้ถาม แต่แทบไม่มีใครตอบ: เมื่อมีความรู้ชิ้นหนึ่ง มันควรอยู่ในที่ใดในสี่ที่
ทำไมบทนี้ไม่มีภาษาโปรแกรมมิง
ลิงก์ไปยังส่วน: ทำไมบทนี้ไม่มีภาษาโปรแกรมมิงบทที่ 14 ตั้งกฎสำหรับครึ่งหลังของคอร์สนี้ — การเชื่อมต่อ การ retry และการยกเลิกเป็น TypeScript — และประกาศข้อยกเว้นไว้ห้าข้อ นี่คือหนึ่งในนั้น และเหตุผลไม่ใช่ความชอบส่วนตัว
skill คือไฟล์ Markdown ไม่ใช่ไฟล์ที่คอนฟิกโปรแกรม ไม่ใช่ไฟล์ที่โปรแกรมคอมไพล์ แต่เป็นเอกสารที่โมเดล อ่าน แบบเดียวกับที่มันอ่านข้อความที่คุณพิมพ์ การให้บทนี้มีภาษาโปรแกรมมิงจะเท่ากับยังไม่เข้าใจฟอร์แมต และความเข้าใจผิดนั้นคือความเข้าใจผิดที่พบบ่อยที่สุดเรื่อง skill ทุกอย่างด้านล่างคือ Markdown และ YAML บวกกับ shell script เล็ก ๆ หนึ่งตัวที่มีอยู่เพื่อแสดงอย่างชัดเจนว่า code ควรและไม่ควรอยู่ตรงไหนภายใน skill
ค่าใช้จ่ายที่มันแก้ และนี่คือคณิตศาสตร์ของบทที่ 16
ลิงก์ไปยังส่วน: ค่าใช้จ่ายที่มันแก้ และนี่คือคณิตศาสตร์ของบทที่ 16นี่คือคำสั่งจริง: บริษัทหนึ่งเขียน release note อย่างไร มันเป็นกระบวนการ ไม่ใช่ความชอบ — มีชุดขั้นตอนที่เรียงลำดับ มี taxonomy มีน้ำเสียง มีเทมเพลต และมีสคริปต์ที่รวบรวมวัตถุดิบ
เอาทั้งหมดใส่ใน system prompt แบบที่ทีมส่วนใหญ่ทำ แล้วคณิตศาสตร์ของ บทที่ 16 ก็เข้ามาคุมทันที system prompt คือ prefix และ prefix ต้องจ่ายใน ทุก call วัดด้วย o200k_base บนโฟลเดอร์ที่เขียนขึ้นสำหรับบทนี้:
whole thing pasted into the system prompt 1,716 x 40 = 68,640 input tokens $0.1373
as a skill, activated once on turn 12 46 x 40
+ 324 (SKILL.md body)
+ 665 (two reference files read)
= 2,829 input tokens $0.0057
as a skill, never activated at all 46 x 40 = 1,840 input tokens $0.0037ถูกกว่ายี่สิบสี่เท่าเมื่อถูกใช้ และถูกกว่าสามสิบเจ็ดเท่าเมื่อไม่ถูกใช้ อัตราเป็นของบทที่ 16: $2.00 ต่อ input token หนึ่งล้าน token
ทีนี้มาดูข้อโต้แย้งที่ซื่อสัตย์ เพราะถ้าบทหนึ่งข้ามเรื่องนี้ไปก็คงเป็นโฆษณา prompt caching ปิดช่องว่างด้านเงินได้เกือบหมด system prompt มีความเสถียรและอยู่เป็นอันดับแรก จึงเป็นผู้สมัครที่ดีที่สุดสำหรับ cache เท่าที่จะมีได้ ที่ $0.20 ต่อหนึ่งล้านสำหรับ input ที่ cache แล้ว token 68,640 เดิมจึงมีค่าใช้จ่าย $0.0168 แทนที่จะเป็น $0.1373 ยังแพงกว่า skill สามเท่า แต่ไม่ใช่ต่างกันคนละลำดับขนาดอีกต่อไป
เงินไม่เคยเป็นข้อโต้แย้งที่แข็งแรงที่สุด ข้อนี้ต่างหาก:
Caching ทำให้ prefix ถาวรถูกลง แต่มันไม่ได้ทำให้ prefix เล็กลง
ที่ turn 40 เวอร์ชัน system-prompt ยังมีนโยบาย release note 1,716 token นั่งอยู่ใน window ระหว่างบทสนทนาเกี่ยวกับเรื่องอื่นโดยสิ้นเชิง แข่งแย่งสิ่งที่ บทที่ 24 เรียกว่า attention budget ของโมเดล เวอร์ชัน skill มี 46 ถ้า cache สิ่งผิด คุณก็ซื้อส่วนลดให้สิ่งรบกวน
เขียนเป็นสูตร โดยมี turn, เป็น metadata, เป็น body, เป็น bundle ทั้งหมด และ เป็นเซตของไฟล์ที่ bundle มาและถูกอ่านจริง:
ทั้งบทนี้คือความแตกต่างระหว่างการคูณพจน์ที่สองด้วย กับการคูณด้วยหนึ่งหรือด้วยศูนย์
skill จริง ๆ คืออะไร
ลิงก์ไปยังส่วน: skill จริง ๆ คืออะไรskill คือ directory ข้อกำหนดสั้นพอที่จะกล่าวได้ครบถ้วน:
release-notes/
├── SKILL.md # required: YAML frontmatter + Markdown instructions
├── scripts/ # optional: executable code
├── references/ # optional: documentation read on demand
├── assets/ # optional: templates, schemas, examples
└── ... # anything else you likeSKILL.md ต้องขึ้นต้นด้วย YAML frontmatter และมี field ที่บังคับใช้พอดีสองรายการ: name และ description1 อีกสี่รายการเป็น optional และไม่มีรายการอื่นที่ถูกนิยามไว้:
| Field | Required | Constraint |
|---|---|---|
name | yes | 1–64 ตัวอักษร ตัวพิมพ์เล็ก ตัวเลข และยัติภังค์; ไม่มียัติภังค์นำหน้า ท้าย หรือซ้ำติดกัน; ต้องตรงกับชื่อ directory |
description | yes | 1–1024 ตัวอักษร ไม่ว่าง; บอกว่า skill ทำอะไร และ ควรใช้เมื่อไร |
license | no | ชื่อ licence หรือชื่อไฟล์ licence ที่ bundle มาด้วย |
compatibility | no | สูงสุด 500 ตัวอักษร: ผลิตภัณฑ์เป้าหมาย แพ็กเกจที่ต้องใช้ การเข้าถึงเครือข่าย |
metadata | no | map อิสระจาก string key ไปยัง string value สำหรับ tooling ของคุณเอง |
allowed-tools | no | รายการ tool ที่อนุมัติล่วงหน้า คั่นด้วยช่องว่าง; ทำเครื่องหมายว่า experimental |
นี่คือ skill สำหรับ release-notes แบบครบถ้วน โดยมี body ต่ำกว่าสามสิบบรรทัด:
---
name: release-notes
description: Write the release notes for a tagged version in this company's house style. Use when preparing a release, drafting a changelog entry, or when someone asks for the notes for a version number or a tag.
allowed-tools: Bash(git log:*) Bash(git tag:*) Read
---
# Release notes
## Procedure
1. Run `scripts/collect.sh <previous-tag> <new-tag>`. It prints one line per merged
pull request: number, title, author and the labels.
2. Drop every line whose labels contain `internal`, `ci` or `chore`.
3. Put each surviving line into exactly one of the four categories in
[references/categories.md](references/categories.md). A change that seems to fit two
belongs in the higher one; the order in that file is the order of precedence.
4. Rewrite each line as a sentence in the voice defined in
[references/voice.md](references/voice.md). The pull request title is a note to
the team; the release note is a note to a stranger.
5. Check the result against [references/examples.md](references/examples.md).
## The one rule that is not negotiable
Every note says what a person can now do, or what stopped happening to them. If a
sentence can only be understood by someone who has read the diff, it is not finished.อ่านให้ชัดว่า body นั้นคืออะไร มันไม่ใช่นโยบาย — มันคือ สารบัญพร้อมลำดับการทำงาน นโยบายอยู่ในไฟล์สามไฟล์ที่มันเอ่ยชื่อแต่ไม่ได้ include เข้ามา และขั้นตอนแรกส่งงานให้สคริปต์ เพราะ code ของสคริปต์ไม่เคยเข้าสู่ context window เลย: มีเพียง output ของมันเท่านั้นที่เข้า2
สามระดับ และแต่ละระดับมีต้นทุนเท่าไร
ลิงก์ไปยังส่วน: สามระดับ และแต่ละระดับมีต้นทุนเท่าไรโมเดลการโหลดมีชื่อและมีสามขั้น ข้อกำหนดระบุพร้อม token budget:1
- Metadata ประมาณ 100 token:
nameและdescriptionโหลดตอนเริ่มต้นสำหรับ skill ทุกตัวที่ติดตั้งไว้ - Instructions แนะนำให้ต่ำกว่า 5,000 token: body ของ
SKILL.mdโหลดเมื่อ skill ถูก activate - Resources ตามจำเป็น: ไฟล์ที่ bundle มา โหลดเฉพาะเมื่อมีบางอย่างต้องใช้
เอกสารอ้างอิงเพิ่มคอลัมน์ที่สี่ลงในตารางเดียวกัน — เมื่อโหลด, token cost, content — และแถวที่สำคัญคือแถวที่สาม: ไม่มีจนกว่าจะถูกเข้าถึง3 ประโยคที่สรุปทั้งบทก็อยู่ตรงนั้นด้วย:
Files don't consume context until accessed, so Skills can include comprehensive API documentation, large datasets, or extensive examples. There's no context penalty for bundled content that isn't used.3
ตารางที่วัดไว้ตอนต้นบทนี้คือการตรวจสอบคำกล่าวนั้นกับ skill ห้ารายการที่ไม่มีใครเขียนขึ้นเพื่อบทความนี้ มีสองแถวที่ควรอ่านเทียบกัน
next-best-practices มี body 966 token ที่ลิงก์ไปยังไฟล์สิบเก้าไฟล์ซึ่งรวม 19,374 token ถามให้มันแก้ hydration error แล้ว agent อ่าน body บวกกับ hydration-error.md: 1,409 token จาก 20,340 เป็นอัตราส่วนสิบสี่เท่า และไฟล์อีกสิบแปดไฟล์ไม่เคยถูกเปิด
next-cache-components มี body 2,334 token และ ไม่มีไฟล์ที่ bundle มาเลย มันเป็น skill ที่ถูกต้องและเขียนดี และไม่มี level 3 ให้เปิดเผย นี่คือขีดจำกัดที่ซื่อสัตย์ของเทคนิคนี้: progressive disclosure ประหยัดได้ก็ต่อเมื่อมีบางอย่างให้เลื่อนออกไป skill ที่ความรู้แยกส่วนไม่ได้ต้องจ่ายทั้ง body เมื่อ activate และคันโยกเดียวที่เหลือคือไม่ activate มัน
ทำให้มันพัง: description คือ interface ทั้งหมด
ลิงก์ไปยังส่วน: ทำให้มันพัง: description คือ interface ทั้งหมดLevel 1 คือการตัดสินใจ routing จากหนึ่งประโยค ไม่มีสิ่งอื่นใดเกี่ยวกับ skill ที่มีอิทธิพลว่ามันจะถูกเปิดหรือไม่ — ไม่ใช่คุณภาพของ body ไม่ใช่ตัวอย่าง ไม่ใช่สคริปต์ ดังนั้น description จึงไม่ใช่เอกสารประกอบ มันคือ query surface และมันผิดได้
ข้อกำหนดบอกเช่นนั้นผ่านตัวอย่างที่ดีและตัวอย่างที่แย่ และตัวอย่างที่แย่มีสี่คำ: description: Helps with PDFs.1 เรื่องนี้ควรวัดมากกว่ายอมรับเฉย ๆ
หก skill แต่ละรายการมี description ที่สมเหตุสมผล บอกว่ามันทำอะไรและควรใช้เมื่อไร ยี่สิบสี่ request รายการละสี่ request ต่อ skill phrased แบบที่คนจริงจะ phrased และไม่เอ่ยชื่อ skill เลย โมเดลเห็นหกบรรทัดใน system prompt และต้องตอบด้วยชื่อหนึ่งชื่อหรือด้วย NONE ใช้ greedy decoding เพื่อให้มันทำซ้ำได้ จากนั้นทำ request ยี่สิบสี่รายการเดิมกับ skill หกรายการเดิมอีกครั้ง แต่ตัด description กลับจนเหลือแค่หัวข้อเปล่า ๆ
rich - sql-review: Review a SQL migration for locks, missing indexes and unsafe
defaults before it runs on the production database. Use when someone adds
or changes a migration, an index, or a table column.
thin - sql-review: Helps with SQL.rich 295 tokens of level 1 for six skills 18/24 correct = 75.0 % [55.1, 88.0]
thin 81 tokens of level 1 for six skills 10/24 correct = 41.7 % [24.5, 61.2]
paired: rich only 9, thin only 1, two-sided sign test p = 0.0215
answered NONE: rich 1 of 24, thin 9 of 24อ่านช่วงความเชื่อมั่นก่อน ตามที่ บทที่ 4 ยืนยันและ บทที่ 29 จะยืนยันอีกครั้ง: มันทับซ้อนกัน และเคสยี่สิบสี่เคสไม่สามารถจัดอันดับสองระบบจาก aggregate เพียงอย่างเดียวได้ การเปรียบเทียบแบบ paired ต่างหากที่ตัดสิน และมันคือเครื่องมือของ บทที่ 15: จากสิบเคสที่สอง arm เห็นไม่ตรงกัน เก้าเคสเป็นของ description แบบ rich และหนึ่งเคสเป็นของแบบ thin เรื่องนี้ตั้งมั่นที่ threshold ปกติ
ทีนี้อ่านบรรทัดสุดท้าย ซึ่งเป็นข้อค้นพบจริง ด้วย description แบบ thin โมเดลตอบ NONE ใน เก้าจากยี่สิบสี่ request ไม่ใช่ skill ผิด: ไม่มี skill เลย นี่คือสี่รายการจากนั้น แบบ verbatim:
"Check this migration before I run it against production." -> release-notes
"Will this CREATE INDEX lock writes?" -> NONE
"Is this ALTER TABLE safe to deploy at peak traffic?" -> NONE
"Is 'seamless and powerful' allowed in the app store listing?" -> next-best-practicesมี skill sql-review ที่สมบูรณ์แบบติดตั้งอยู่ พร้อม body ตัวอย่าง และ checklist แต่มันไม่เคยถูกเปิด สามครั้งติดกัน บนคำถามสามข้อที่มันถูกเขียนขึ้นมาเพื่อแก้ Levels 2 และ 3 ไม่เกี่ยวข้องกับ skill ที่ level 1 ไปไม่ถึง
ต้นทุนของการแก้ไข: 214 token คือส่วนต่างระหว่าง 295 และ 81 กระจายอยู่บน skill หกรายการ ซึ่งเป็นข้อค้นพบของ บทที่ 18 ที่มาถึงจากอีกด้านหนึ่ง ที่นั่น การเปลี่ยนเพียง description ของ tool ทำให้การจัดรูปแบบวันที่จากถูก 2 จาก 24 เป็น 24 จาก 24 ที่นี่ การเปลี่ยนเพียง description ของ skill ทำให้ activation จาก 10 จาก 24 เป็น 18 ในทั้งสองกรณี วิธีแก้ที่ถูกที่สุดในระบบคือประโยคหนึ่งประโยค และในทั้งสองกรณี ประโยคนั้นต้องตั้งชื่อ trigger ไม่ใช่แค่หัวข้อ: ไม่ใช่ว่าสิ่งนั้นคืออะไร แต่คือผู้ใช้น่าจะเพิ่งพูดอะไรเมื่อมันควรใช้
มี caveat หนึ่งข้อที่บทนี้ติดค้างมาตรฐานของตัวเอง นี่คือโมเดลครึ่งพันล้านพารามิเตอร์ และ frontier model route ได้ดีกว่า 75 % มาก อ่านกลไก ไม่ใช่ขนาดของผล: routing signal ยาวหนึ่งประโยคไม่ว่าโมเดลใดจะอ่าน และไม่มีโมเดลใดเลือกจากข้อมูลที่คุณไม่ได้ใส่ไว้ในประโยคนั้นได้
ทำให้มันพังอีกครั้ง: escape hatch ที่มีต้นทุน 26,362 token
ลิงก์ไปยังส่วน: ทำให้มันพังอีกครั้ง: escape hatch ที่มีต้นทุน 26,362 tokenความล้มเหลวที่สองอยู่คนละขั้วกับข้อแรก skill ถูกพบ ระดับถูกแยกอย่างถูกต้อง และ agent ก็อ่านทั้งหมดอยู่ดี
vercel-react-best-practices เป็น skill ที่สร้างมาดีจริง ๆ body 1,670 token ของมันคือตาราง priority ของแปดหมวดหมู่และ quick reference ที่เอ่ยชื่อ ไฟล์กฎ 70 ไฟล์ ไฟล์ละหนึ่งบรรทัด กฎอยู่บนดิสก์ข้าง ๆ: 70 ไฟล์ เล็กสุด 132 token ค่ามัธยฐาน 319 ใหญ่สุด 1,052 ถามคำถามหนึ่งข้อเกี่ยวกับ barrel imports แล้วต้นทุนที่ซื่อสัตย์คือ body บวกไฟล์หนึ่งไฟล์ — ต่ำกว่า 2,400 token เทียบกับ bundle 53,670
แล้วบรรทัดสุดท้ายของ body พูดว่า:
## Full Compiled Document
For the complete guide with all rules expanded: `AGENTS.md`AGENTS.md คือ 26,362 token มันคือไฟล์กฎ 70 ไฟล์ที่ต่อกัน: ผลรวมของไฟล์เหล่านั้นคือ 25,784 และส่วนต่างคือ heading ระหว่างไฟล์ ดังนั้น skill จึงเสนอทางเลือกให้ agent ระหว่างอ่านกฎค่ามัธยฐานหนึ่งข้อที่ 319 token กับอ่านเนื้อหาเดียวกันทั้งหมดที่ราคาสูงกว่าแปดสิบสามเท่า — และมันเสนอทางเลือกนั้นในประโยคที่ไม่มีต้นทุนกำกับและไม่มีเงื่อนไขว่าเมื่อไรควรใช้
นั่นไม่ใช่ bug และไฟล์ก็ไม่ผิด เอกสารที่คอมไพล์แล้วมีประโยชน์จริงสำหรับมนุษย์ และสำหรับ agent ที่ถูกขอให้ audit codebase ทั้งหมด มันคือ ไฟล์ level-3 ที่มีคำเชิญแบบ level-2 และบทเรียนนี้ generalise ไปไกลกว่า skill นี้: ทุก path ที่ออกจาก SKILL.md ควรบอกว่ามันมีต้นทุนเท่าไรและคุ้มเมื่อไร เพราะโมเดลไม่มีทางรู้ว่าชื่อไฟล์หนึ่งแพงกว่าชื่อไฟล์ที่อยู่เหนือมันแปดสิบสามเท่า
โฟลเดอร์เดียวกันมีบทเรียนเล็กกว่าเรื่อง staleness ด้วย body บอกว่า “70 rules across 8 categories” และลิสต์ไว้ 70; directory rules/ มีไฟล์ 72 ไฟล์ โดยสองไฟล์เป็น scaffolding (_template.md และ _sections.md); และ sidecar metadata.json บอกว่า “40+ rules” การนับเซตเดียวกันสามครั้งในโฟลเดอร์เดียว หนึ่งครั้งถูก หนึ่งครั้งเป็นเลขคณิต และอีกหนึ่งครั้งตกค้างจากเวอร์ชันก่อน skill คือเอกสาร และเอกสารผุพังเหมือน code comment ที่ drift ห่างออกจาก code ที่อยู่ข้าง ๆ ทุกประการ — ต่างกันตรงที่เอกสารนี้ถูกอ่านโดยเครื่องที่ไม่มีทางเลิกคิ้วสงสัย
field ที่ reference implementation เพิ่ม และกับดัก portability
ลิงก์ไปยังส่วน: field ที่ reference implementation เพิ่ม และกับดัก portabilityข้อกำหนดแบบเปิดนิยาม frontmatter ไว้หก field reference implementation คือ Claude Code รับยี่สิบรายการ2 มีกลุ่มห้ากลุ่มที่ควรรู้ชื่อ เพราะมันคือจุดที่ฟอร์แมตหยุดเป็นเพียงเอกสาร:
Permission และ invocation allowed-tools อนุมัติ tool ล่วงหน้าสำหรับ turn ที่ invoke skill และ grant จะถูกล้างในข้อความถัดไป; disallowed-tools ลบออก disable-model-invocation กันไม่ให้โมเดลโหลดมันเอง ซึ่งเปลี่ยน skill ให้เป็น command ที่คนรัน user-invocable: false ทำตรงข้าม: ซ่อนจากคน ใช้ได้เฉพาะโมเดล สำหรับความรู้พื้นหลัง
Isolation และ cost context: fork รัน skill ใน context ของ sub-agent แยกต่างหากพร้อม window ของตัวเอง — ขอบเขต sub-agent ของ บทที่ 25 ใน YAML หนึ่งบรรทัด — โดย agent เลือกชนิด และ background ตัดสินว่า turn จะรอหรือไม่ model และ effort เปลี่ยนว่าโมเดลใดรันระหว่างที่ skill active สำหรับ turn นั้นเท่านั้น
Arguments (arguments, argument-hint) ให้คนส่งค่าที่ถูกแทนลงใน body ได้ ซึ่งเป็นสิ่งที่ทำให้ skill ใช้เป็น slash command ได้ Scoping (paths) จำกัด activation ไว้กับไฟล์ที่ match glob และ dynamic context injection คือสิ่งที่เปลี่ยน mental model: บรรทัดรูปแบบ !`git diff HEAD` จะรัน ก่อน ส่ง body และ output ของมันจะถูกแทนลงในข้อความ เอกสารคือเทมเพลต และส่วนหนึ่งของมันถูกคำนวณ ณ เวลาอ่าน
ทีนี้กับดัก และมันถูกระบุไว้ในเอกสารเดียวกัน: นอก Claude Code — บนผลิตภัณฑ์เว็บ ผ่าน Skills API ใน packaging — อนุญาตเฉพาะ field หกรายการที่ระบุไว้ และ field อื่นใดเป็น hard error ตอน upload2 ดังนั้น skill ที่ทำงานสมบูรณ์แบบในผลิตภัณฑ์หนึ่งจะติดตั้งไม่สำเร็จในอีกผลิตภัณฑ์หนึ่งของ vendor เดียวกัน และมันล้มที่ frontmatter ไม่ใช่สิ่งใดที่คุณทดสอบได้ด้วยการอ่านข้อความ prose หากคุณตั้งใจให้ skill portable ได้ field หกรายการคือ budget ทั้งหมด หากไม่ตั้งใจ ให้พูดไว้ใน compatibility ซึ่งมีอยู่เพื่อสิ่งนี้โดยเฉพาะ
ตารางที่บทนี้มีอยู่เพื่อมัน
ลิงก์ไปยังส่วน: ตารางที่บทนี้มีอยู่เพื่อมันสี่สิ่งถูกสับสนกันตลอดเวลา และความสับสนนี้ไม่ใช่การจับผิดศัพท์: เลือกผิดแล้วเสียเงินทุก turn หรือเสีย guarantee ที่คุณคิดว่ามี
| System prompt | Skill | Tool | MCP server | |
|---|---|---|---|---|
| มันคืออะไร | ข้อความในทุก request | โฟลเดอร์ที่ root เป็น SKILL.md | JSON Schema บวก endpoint ใน code ของคุณ | process หรือ service ที่พูด protocol |
| โมเดลทำอะไร | อ่านมันเสมอ | อ่าน มัน เมื่อมันตัดสินว่า description match | calls มัน และรอผลจากคุณ | calls มัน ผ่าน host หนึ่ง client ต่อ server |
| ต้นทุนคืออะไร | ความยาวทั้งหมด ทุก turn ตลอดไป | ประมาณ 50 token ต่อ turn; body หนึ่งครั้ง หากใช้ | schema ของมัน ทุก turn; execution เมื่อถูก call | ทุก schema บวก instructions ของ server ทุก turn |
| มัน guarantee อะไรได้ | ไม่มี — มันคือคำแนะนำ | ไม่มี — มันคือคำแนะนำที่โมเดลอาจข้าม | ทุกอย่างที่ code ของคุณ enforce ก่อนลงมือ | ทุกอย่างที่ server enforce |
| ใครเขียน | คุณ | คุณ เพื่อนร่วมงาน หรือ vendor | คุณ | คนอื่น สำหรับหลาย host |
| บท | 15 | บทนี้ | 18 | 26 และ 27 |
สองแถวที่เป็นตัวหนาคือความแตกต่างทั้งหมด skill ถูกอ่าน; tool ถูก invoke skill คือ prose ที่เข้ามาใน context window และแข่งแย่ง attention กับทุกอย่างที่อยู่ในนั้น โมเดลอาจทำตามมัน อ่านผิด หรือเพิกเฉย และไม่มีอะไรในระบบสังเกตเห็น tool คือ call ที่หลุดออกจากมือของโมเดลโดยสิ้นเชิง: code ของคุณรับ arguments, validate, ตรวจ permissions และตัดสินใจ บทที่ 18 อธิบายว่าโมเดลเสนอ แล้ว code ของคุณเป็นผู้ตัดสิน และการแบ่งนั้นคือสิ่งที่ skill ไม่มีพอดี
ดังนั้นเคสจริงหกข้อ สรุปได้ดังนี้:
“Answer in the user's language. Never state a price you have not been given.”
ลิงก์ไปยังส่วน: “Answer in the user's language. Never state a price you have not been given.”System prompt มันใช้กับทุก turn เป็น constraint มากกว่ากระบวนการ และยาวสองประโยค สิ่งที่ใช้เสมอไม่มีอะไรให้ disclose แบบ progressive และการจ่าย discovery line ทุก turn เพื่อเลี่ยงการจ่ายสองประโยคทุก turn ไม่ใช่การประหยัด
“How we write release notes here.”
ลิงก์ไปยังส่วน: “How we write release notes here.”Skill เป็น procedural ต้องใช้บางทีหนึ่ง turn ในสี่สิบ แยกออกเป็น voice, taxonomy และ examples ได้ และเป็น prose ที่คนจะแก้ไข นี่คือรูปทรงที่ฟอร์แมตนี้ถูกออกแบบมาเพื่อรองรับ และการวัดด้านบนคือสิ่งที่มันประหยัด
“Look up an order by its identifier in the warehouse database.”
ลิงก์ไปยังส่วน: “Look up an order by its identifier in the warehouse database.”Tool มี deterministic function อยู่เบื้องหลัง และโมเดลต้องไม่ improvise query การเขียนสิ่งนี้เป็น skill — เอกสารที่อธิบายวิธี query warehouse — เท่ากับยื่น schema ให้โมเดลแล้วหวัง schema บวก endpoint ยื่นคำตอบให้มัน
“Read and write issues in our tracker, from every agent product the company uses.”
ลิงก์ไปยังส่วน: “Read and write issues in our tracker, from every agent product the company uses.”MCP server capability นี้ไม่ใช่ของคุณ host หลายตัวต้องใช้ และมันมีเรื่อง authentication นั่นคือปัญหา ที่บทที่ 26 เปิดไว้ protocol คือคำตอบของมัน และ บทที่ 27 ship ตัวหนึ่งสองครั้ง skill ไม่อาจถูกค้นพบโดย host ที่ไม่เคยเห็น filesystem ของคุณ — ซึ่งก็คือช่องว่างที่งานมาตรฐานช่วงท้ายบทนี้กำลังปิดพอดี
“The four-hundred-page brand manual.”
ลิงก์ไปยังส่วน: “The four-hundred-page brand manual.”None of the four มันคือความรู้ที่ต้อง look up ไม่ใช่กระบวนการที่ต้องทำตาม และมันควรอยู่ใน index ที่ agent search: บทที่ 19 การ bundle มันเป็น level 3 ทำได้ น่าล่อใจ และผิด เพราะโมเดลต้องเดาจากชื่อไฟล์ล้วน ๆ ว่าไฟล์ไหนในสี่สิบไฟล์มีคำตอบ สิ่งที่ เป็น skill ที่ดีคือกระบวนการสองหน้าที่บอก agent ว่าควร search index นั้นเมื่อไร similarity score ต่ำหมายความว่าอะไร และจะ cite สิ่งที่พบอย่างไร
“Never refund more than two hundred euros without a human.”
ลิงก์ไปยังส่วน: “Never refund more than two hundred euros without a human.”Tool ที่มี approval gate และไม่มีวันเป็น skill นี่คือเคสที่สำคัญ เขียนลงใน SKILL.md แล้ว limit คือประโยคที่โมเดลอ่านและมักเคารพ; เขียนลงใน refund tool แล้วมันคือ branch ที่รันก่อนเงินเคลื่อนที่ limit ที่จะทำให้คุณอับอายหากถูกข้ามไม่ใช่เอกสาร กฎที่ควรจำให้ขึ้นใจคือ: ถ้าผลลัพธ์ของการเพิกเฉยต่อคำสั่งแย่กว่าคำตอบที่จัดรูปแบบผิด คำสั่งนั้นไม่ควรอยู่ในเอกสาร
จากศัพท์เฉพาะในบ้านสู่มาตรฐาน พร้อมตัวเลข
ลิงก์ไปยังส่วน: จากศัพท์เฉพาะในบ้านสู่มาตรฐาน พร้อมตัวเลขประวัติสั้น มีวันที่ชัดเจนผิดปกติ และเป็นส่วนที่แทบไม่มีใครเล่า
Agent Skills ถูกเผยแพร่เมื่อ 16 ตุลาคม 2025 ในฐานะฟีเจอร์ของ vendor รายหนึ่ง โดยนิยามไว้ในประกาศนั้นว่า “organized folders of instructions, scripts, and resources that agents can discover and load dynamically to perform better at specific tasks” พร้อมสามระดับที่อธิบายผ่านอุปมาที่ควรเก็บไว้: “like a well-organized manual that starts with a table of contents, then specific chapters, and finally a detailed appendix”4
เมื่อ 18 ธันวาคม 2025 หน้าเดียวกันถูกอัปเดตเพื่อประกาศฟอร์แมตนี้เป็น open standard พร้อมข้อกำหนดของตัวเองที่ agentskills.io, governance ที่เปิดให้มี contributions และ reference validator3 เมื่ออ่านวันที่ 7 กันยายน 2026 showcase ของ client ในมาตรฐานระบุผลิตภัณฑ์ สี่สิบหก รายการ — editor, terminal, cloud platform และ mobile runtime รวมถึง coding agent แบบ first-party ของ Anthropic, OpenAI, Google และ Mistral — แต่ละรายการลิงก์ไปยัง setup documentation ของตัวเอง1
การบรรจบกับ MCP กำลังทำแบบเปิด พร้อมตัวเลขที่คุณตรวจสอบได้:
| What it is | Opened | State on 7 Sep 2026 | |
|---|---|---|---|
| SEP-2076 | Agent Skills as a First-Class MCP Primitive: method ใหม่ skills/list และ skills/get, capability skills, notification list_changed | 13 มกราคม 2026 | closed, 24 กุมภาพันธ์ 2026 |
| Skills Over MCP working group | นิยามว่า skills ถูก “discovered, distributed, and consumed through MCP” อย่างไร; ประชุมทุกสัปดาห์; สมาชิกที่ระบุไว้สิบเจ็ดคน โดยสองคนเป็น lead | interest group 1 กุมภาพันธ์ 2026; working group 16 เมษายน 2026 | active |
| SEP-2640 | Skills Extension, Extensions Track: convention ของ resource skill://, extension identifier io.modelcontextprotocol/skills, discovery ผ่าน skills/list และ content ผ่าน resources/read | 23 เมษายน 2026 | in review |
ส่วนที่น่าสนใจคือการปิด ไม่ใช่ proposal SEP-2076 ขอ primitive ที่สี่ถัดจาก tools, resources และ prompts working group ที่ก่อตัวขึ้นจากมันตัดสินว่าคำตอบคือ ไม่: skills อาศัย resources primitive ที่มีอยู่แล้ว ในฐานะ extension แบบ opt-in5 บทที่ 26 วัดสัญชาตญาณเดียวกันใน changelog ของ protocol เอง ที่ sampling, roots และ logging ถูก deprecate แทนที่จะคงไว้ standards body ที่ลบ proposal ที่ตัวเองเขียนกำลังประพฤติตัวดี และเหตุผลที่ต้องเล่าเรื่องนี้พร้อมตัวเลขอยู่ตรงหน้า คือ summary ที่คุณจะอ่านจากที่อื่นยังอธิบาย skills ว่าเป็น MCP primitive
ต่อจากนี้ไปที่ไหน
ลิงก์ไปยังส่วน: ต่อจากนี้ไปที่ไหนตอนนี้คุณเขียน SKILL.md ได้ แยกมันเป็นสามระดับที่คุ้มค่าในตัวเองได้ อ่าน frontmatter ของ skill ของคนอื่นแล้วรู้ว่า field ใดจะไม่รอดเมื่อ upload ไปที่อื่น และตอบคำถามที่ทั้งบทถูกสร้างขึ้นรอบ ๆ — system prompt, skill, tool หรือ server — ด้วยเหตุผลแทนที่จะเป็นนิสัย
สิ่งที่คุณยังทำไม่ได้คือบอกว่าของคุณใช้ได้หรือไม่
ทุก claim ในบทนี้ที่สำคัญคือการวัด และสิ่งที่สำคัญที่สุดคือ accuracy: 18 จาก 24 เทียบกับ 10 จาก 24 พร้อม interval บนแต่ละค่าและ paired test ระหว่างกัน เพราะ aggregate สองค่าที่ทับซ้อนกันไม่ตัดสินอะไร เครื่องมือนั้นถูกยืมมา description ของ skill คือ routing key, body ของมันคือ procedure ที่โมเดลอาจทำตามหรือไม่ทำตาม และทั้งสองเป็น property ที่คุณค้นพบได้ด้วยการรันสิ่งนั้นหลายครั้งและให้คะแนนสิ่งที่กลับมาเท่านั้น — ซึ่งคือ golden set, grader ที่คุณเขียนก่อนรัน และ metric ที่ถามว่ามันทำงานได้ ทุก ครั้งหรือไม่ แทนที่จะเป็น อย่างน้อยหนึ่งครั้ง
บทที่ 29 คือเรื่องนั้น และเปิดด้วยตัวเลขที่ method ของบทนี้พึ่งพา: agent ที่สำเร็จเจ็ดครั้งจากสิบดูเหมือน 70 % และ pass^10 ของมัน — โอกาสที่มันจะสำเร็จครบทั้งสิบ — คือศูนย์ บทนั้นยังวัด grader สามตัวบน transcript สองร้อยรายการเดียวกัน และได้ 0 %, 13 % และ 26 % โดยไม่ regenerate token แม้แต่ตัวเดียว ก่อนที่คุณจะเชื่อประโยคที่เพิ่งเขียนลงใน description คุณต้องมีเครื่องมือที่บอกได้ว่ามันแย่กว่าประโยคที่คุณแทนที่
แหล่งที่มาและวิธีการ
ลิงก์ไปยังส่วน: แหล่งที่มาและวิธีการทุก token count ในบทนี้ผลิตในเครื่องด้วย tiktoken 0.14.0 และ encoding o200k_base เมื่อ 7 กันยายน 2026: บน skill third-party ห้ารายการที่ลิสต์ไว้ตอนต้นบทนี้ และบน skill release-notes ที่เขียนขึ้นสำหรับบทนี้ ซึ่งนำข้อความสมบูรณ์มาทำซ้ำด้านบนบางส่วน Level 1 วัดเป็นบรรทัดเดียว - name: description ที่ host render ลงใน system prompt; level 2 คือ body ของ SKILL.md หลัง frontmatter; level 3 คือไฟล์อื่นทุกไฟล์ในโฟลเดอร์ ต้นทุนใช้อัตราที่วัดในบทที่ 16 สำหรับ gpt-5.6-terra, $2.00 ต่อ input token หนึ่งล้าน token และ $0.20 ต่อ input token หนึ่งล้าน token ที่ cache แล้ว นำมาใช้กับจำนวนเหล่านั้น — มันคือคณิตศาสตร์บน token ที่วัดแล้ว ไม่ใช่ observation ของ bill สด ไม่มีการเรียก API แบบเสียเงินเพื่อเขียนบทนี้
การทดลอง activation รัน Qwen/Qwen2.5-0.5B-Instruct แบบ half precision บน consumer GPU หนึ่งตัว, greedy decoding, request 24 รายการบน skill หกรายการ สองครั้ง — ครั้งหนึ่งด้วย description ที่ระบุว่า skill ทำอะไรและใช้เมื่อไร อีกครั้งด้วย description ที่ตัดให้เหลือ subject เปล่า ๆ ตามสไตล์ “poor example” ของข้อกำหนดเอง Intervals เป็น Wilson ที่ 95 %; paired comparison เป็น two-sided exact sign test บนสิบเคสที่ discordant; Wilson interval เป็นของบทที่ 4 และ exact paired sign test เป็นของบทที่ 15 ทั้งสองถูกใช้ซ้ำโดยไม่เปลี่ยน อ่าน magnitude ว่าเป็น property ของโมเดลที่เล็กมาก และอ่าน method ว่าถ่ายโอนได้
skill ห้ารายการที่วัดที่นี่เป็นแพ็กเกจ third-party ไม่ได้เขียนขึ้นสำหรับบทนี้: next-best-practices และ next-cache-components จาก vercel-labs/next-skills, และ vercel-composition-patterns, vercel-react-best-practices และ vercel-react-native-skills จาก vercel-labs/agent-skills จำนวนภายในของมัน — ไฟล์กฎ 70 ไฟล์, AGENTS.md ที่ 26,362 token, metadata.json ลงวันที่มกราคม 2026 และอ้างว่า “40+ rules” — อ่านจากไฟล์บนดิสก์เมื่อ 7 กันยายน 2026 และเป็น property ของเวอร์ชันที่เผยแพร่นั้น ไม่ใช่คำวิจารณ์ผู้เขียน: ทุกข้อคือ drift แบบที่เกิดขึ้นใน documentation tree ใด ๆ ที่ถูกแก้บ่อยกว่าถูกนับ
รายการอ้างอิง
ลิงก์ไปยังส่วน: รายการอ้างอิง-
Agent Skills Specification และ Overview,
agentskills.io/specificationและagentskills.io, อ่านเมื่อ 7 กันยายน 2026 แหล่งที่มาของ layout ของ directory; ตาราง frontmatter ที่ทำซ้ำด้านบนพร้อม constraint ทุกข้อ (name1–64 ตัวอักษรและตรงกับ directory,description1–1024 ตัวอักษร,compatibilityสูงสุด 500,allowed-toolsทำเครื่องหมายว่า experimental); ตัวอย่างdescriptionที่ดีและแย่; คำอธิบาย progressive-disclosure สามขั้นพร้อม token budget (metadata ประมาณ 100 token, instructions แนะนำให้ต่ำกว่า 5,000, resources ตามจำเป็น) และคำแนะนำให้คงSKILL.mdต่ำกว่า 500 บรรทัด; note ว่า “the agent will load this entire file once it's decided to activate a skill”; conventionscripts/,references/และassets/; commandskills-ref validate; statement ว่าฟอร์แมต “was originally developed by Anthropic, released as an open standard, and has been adopted by a growing number of agent products”; และ client showcase ซึ่งระบุผลิตภัณฑ์สี่สิบหกรายการในวันที่อ่าน ↩ ↩2 ↩3 ↩4 -
Skills ในเอกสาร Claude Code,
code.claude.com/docs/en/skills, อ่านเมื่อ 7 กันยายน 2026 แหล่งที่มาของตาราง field แบบเต็มที่ใช้ในส่วน “fields the reference implementation adds” —when_to_use,argument-hint,arguments,disable-model-invocation,user-invocable,allowed-tools,disallowed-tools,model,effort,context,agent,background,hooks,paths,shell,metadata,license,compatibility— ของคำอธิบาย dynamic context injection ที่!`command`รันก่อนส่ง body, ของกฎที่ grantallowed-toolsถูกล้างในข้อความถัดไป และของ compliance note ว่านอก Claude Code รับเฉพาะ field หกรายการที่ระบุไว้ และรายการอื่นใดทำให้เกิด hard error ใน upload หรือ packaging ↩ ↩2 ↩3 -
ภาพรวม Agent Skills,
platform.claude.com/docs/en/agents-and-tools/agent-skills/overview, อ่านเมื่อ 7 กันยายน 2026 แหล่งที่มาของตาราง level พร้อมสี่คอลัมน์ (Level 1 metadata, always, ประมาณ 100 token ต่อ skill; Level 2 instructions, when triggered, ต่ำกว่า 5k token; Level 3+ resources, as needed, none until accessed); ของประโยคที่ quote เต็มเกี่ยวกับ bundled content ที่ไม่มี context penalty; ของ “until a Skill is triggered, only its name and description occupy context”; ของ statement ว่า code ของสคริปต์ไม่เคยเข้าสู่ context window และมีเพียง output ของมันเท่านั้นที่เข้า; และของ security section ซึ่งบอกให้ใช้ skills จากแหล่งที่เชื่อถือได้เท่านั้น และเตือนว่า skill ที่เป็นอันตราย “can direct Claude to invoke tools or execute code in ways that don't match the Skill's stated purpose” — หัวข้อของ บทที่ 30 ที่มาถึงผ่านเอกสารแทนที่จะผ่าน description ของ tool ↩ ↩2 ↩3 -
Anthropic, Equipping agents for the real world with Agent Skills, 16 ตุลาคม 2025,
anthropic.com/engineering/equipping-agents-for-the-real-world-with-agent-skills, อ่านเมื่อ 7 กันยายน 2026 แหล่งที่มาของนิยามที่ quote ด้านบน ของอุปมา table-of-contents/chapters/appendix ของสามระดับตามคำอธิบายดั้งเดิม และของ framing ว่า agents ต้องการ “more composable, scalable, and portable ways” ในการได้รับ domain expertise ประกาศผลิตภัณฑ์คู่กันที่claude.com/blog/skillsมีวันที่เผยแพร่ 16 ตุลาคม 2025 และการอัปเดต 18 ธันวาคม 2025 ที่แนะนำการจัดการระดับองค์กรและ open standard ↩ -
Skills Over MCP Charter,
modelcontextprotocol.io/community/working-groups/skills-over-mcp, อ่านเมื่อ 7 กันยายน 2026 แหล่งที่มาของ mission statement ที่ quote ด้านบน ของวันที่ใน changelog (interest group ก่อตั้ง 1 กุมภาพันธ์ 2026, initial charter 14 เมษายน 2026, แปลงเป็น working group 16 เมษายน 2026, SEP-2640 linked 25 เมษายน 2026), ของ leadership และสมาชิกที่ระบุไว้สิบเจ็ดคน ของจังหวะการประชุมรายสัปดาห์ และของ success criterion ที่ตั้งชื่อ draft Skills Extension ว่า “a formal extension using existing Resources primitives” SEP-2076, Agent Skills as a First-Class MCP Primitive,github.com/modelcontextprotocol/modelcontextprotocol/pull/2076, เปิดเมื่อ 13 มกราคม 2026 และปิดเมื่อ 24 กุมภาพันธ์ 2026; มันเสนอskills/list,skills/get, server capabilityskillsและ notificationskills/list_changedและนิยาม skill ว่า “a named bundle of instructions plus references to tools, prompts, and resources that together teach an agent how to perform a domain-specific workflow” SEP-2640, Skills Extension,.../pull/2640, เปิดเมื่อ 23 เมษายน 2026 บน Extensions Track และมี resource conventionskill://กับ extension identifierio.modelcontextprotocol/skillsบทที่ 26 ระบุ working group เดียวกันนี้ไว้ใน optional extensions ของ protocol ↩