เป้าหมาย
สร้าง skill ที่ Claude เรียกใช้ถูกจังหวะ มีสคริปต์คำนวณจริง แชร์ให้ทีมได้ และทดสอบได้ว่าทำงาน
Skill คืออะไร ต่างจาก CLAUDE.md ตรงไหน
| CLAUDE.md | Skill | |
|---|---|---|
| โหลดเมื่อไร | ทุก session ตั้งแต่ต้น | เฉพาะตอนงานตรงกับ description หรือพิมพ์ /ชื่อ |
| เหมาะกับ | กติกาที่ใช้ตลอด (สไตล์โค้ด คำสั่ง build) | ขั้นตอนเฉพาะงาน (ทำใบเสนอราคา ออกรายงาน) |
| มีไฟล์ประกอบ | ไม่ค่อย | สคริปต์ เทมเพลต เอกสารอ้างอิง |
Progressive disclosure: ตอนเริ่ม Claude เห็นแค่ name + description ของทุก skill → เนื้อหา SKILL.md โหลดเมื่อจะใช้ → ไฟล์ประกอบโหลดเมื่อถูกอ้างถึง มี skill 50 อันก็ไม่กิน context
โครงสร้างโฟลเดอร์ (ตัวอย่างเต็ม)
.claude/skills/lease-quote/
├── SKILL.md # คำสั่งหลัก (จำเป็น)
├── template.md # แบบฟอร์มใบเสนอราคา
└── scripts/calc.py # คำนวณค่างวดด้วยโค้ด ไม่ให้ AI บวกเลขในหัว| ที่เก็บ | path | ใครใช้ได้ |
|---|---|---|
| ส่วนตัว | ~/.claude/skills/<name>/ |
คุณ ทุกโปรเจกต์ |
| โปรเจกต์ | .claude/skills/<name>/ (commit) |
ทุกคนใน repo |
| plugin | อยู่ใน plugin เรียกแบบ /plugin-name:skill-name |
ทุกคนที่ติดตั้ง plugin (บท 6d-04) |
เขียน description ให้ "ติด"
description คือสิ่งเดียวที่ Claude ใช้ตัดสินว่าจะหยิบ skill ไหน → เขียน ทำอะไร + ใช้เมื่อไร + คำที่ผู้ใช้มักพิมพ์
- ❌
ช่วยเรื่องลีสซิ่ง(กว้าง ไม่รู้จะใช้ตอนไหน) - ✅
คำนวณค่างวดเช่าซื้อรถและร่างใบเสนอราคาภาษาไทย ใช้เมื่อผู้ใช้ขอคำนวณค่างวด ผ่อนรถ เช่าซื้อ หรือใบเสนอราคาลีสซิ่ง - skill ที่มีผลข้างเคียง (deploy, ส่งอีเมล) ใส่
disable-model-invocation: true→ เรียกได้เฉพาะคนพิมพ์/ชื่อ
ฟีเจอร์ใน SKILL.md
$ARGUMENTS= ข้อความหลัง/lease-quote ...(หรือประกาศarguments: [price]แล้วใช้$price)!`คำสั่ง`= รันคำสั่งก่อน แล้วแทนที่ด้วยผลลัพธ์ เช่นวันที่วันนี้allowed-tools= เครื่องมือที่ skill ใช้ได้โดยไม่ต้องถามทุกครั้ง → ให้แคบที่สุด
⚠️ ต้องตรวจสอบ: รายชื่อฟิลด์ frontmatter ล่าสุดที่ code.claude.com/docs (หัวข้อ Skills)
ลองเลย 🧪
ทดลอง A — สร้าง skill ทั้งโฟลเดอร์ (รันที่ root ของโปรเจกต์)
mkdir -p .claude/skills/lease-quote/scripts
cat > .claude/skills/lease-quote/SKILL.md <<'EOF'
---
name: lease-quote
description: คำนวณค่างวดเช่าซื้อรถและร่างใบเสนอราคาภาษาไทย ใช้เมื่อผู้ใช้ขอคำนวณค่างวด ผ่อนรถ เช่าซื้อ หรือใบเสนอราคาลีสซิ่ง
allowed-tools: Bash(python3 .claude/skills/lease-quote/scripts/calc.py *)
---
วันที่ออกใบเสนอราคา: !`date +%Y-%m-%d`
ข้อมูลจากผู้ใช้: $ARGUMENTS
## ขั้นตอน
1. ต้องได้ ราคารถ เงินดาวน์ จำนวนงวด อัตราดอกเบี้ยต่อปี (flat) ถ้าขาดให้ถามก่อน ห้ามเดา
2. คำนวณด้วย `python3 .claude/skills/lease-quote/scripts/calc.py ราคา ดาวน์ งวด อัตรา` เท่านั้น
3. กรอกผลลง template.md ในโฟลเดอร์นี้ ตอบเป็นภาษาไทย
4. ปิดท้ายว่า "ตัวเลขเบื้องต้น อนุมัติจริงขึ้นกับผลพิจารณาสินเชื่อ"
EOF
cat > .claude/skills/lease-quote/template.md <<'EOF'
# ใบเสนอราคาเบื้องต้น (วันที่ ...)
| รายการ | จำนวน |
|---|---:|
| ราคารถ / เงินดาวน์ / ยอดจัด | ... |
| ดอกเบี้ยรวม | ... |
| ค่างวดต่อเดือน x จำนวนงวด | ... |
EOF
cat > .claude/skills/lease-quote/scripts/calc.py <<'EOF'
import sys
price, down, months, rate = float(sys.argv[1]), float(sys.argv[2]), int(sys.argv[3]), float(sys.argv[4])
principal = price - down
interest = principal * rate / 100 * months / 12
print(f"ยอดจัด {principal:,.2f} บาท | ดอกเบี้ยรวม {interest:,.2f} บาท | ค่างวด {(principal + interest) / months:,.2f} บาท x {months} งวด")
EOF→ เปิด claude ในโฟลเดอร์นั้นแล้วทำทดลอง B
ทดลอง B — ทดสอบว่า skill "ติด" และ "ไม่ติด" ถูกที่
ลูกค้าอยากผ่อนรถราคา 850,000 ดาวน์ 170,000 ผ่อน 48 งวด ดอกเบี้ย 2.89% ต่อปี ช่วยทำใบเสนอราคาให้หน่อยเขียนอีเมลขอบคุณลูกค้าที่มาดูรถเมื่อวาน→ ข้อแรกต้องใช้ skill และรันสคริปต์ (ค่างวด 15,804.33 บาท) ข้อสองต้อง ไม่ ใช้
→ ลองพิมพ์ตรงๆ /lease-quote 850000 170000 48 → ต้องถามอัตราดอกเบี้ยก่อน ไม่เดา
ทดลอง C — พกไปใช้ที่อื่น
Skills เป็นมาตรฐานเปิด (Agent Skills) → zip โฟลเดอร์ lease-quote แล้วอัปโหลดใน claude.ai (Settings → Skills) หรือใช้ผ่าน API ที่มี code execution
→ สังเกตว่า !`...` และ allowed-tools อาจทำงานต่างจาก Claude Code ให้ทดสอบซ้ำบนแพลตฟอร์มปลายทาง
⚠️ ต้องตรวจสอบ: ชื่อเมนูอัปโหลด skill และแพ็กเกจที่ใช้ได้บน claude.ai
ความปลอดภัย
- skill จากคนอื่น = โค้ดที่รันบนเครื่องคุณ → อ่าน SKILL.md และ scripts ทุกไฟล์ก่อนติดตั้ง
- ห้ามใส่ API key ใน skill ให้สคริปต์อ่านจาก environment variable
สรุปจำง่าย
description บอก "เมื่อไร" ให้ชัด ตัวเลขให้สคริปต์คิด ทดสอบทั้งกรณีที่ต้องติดและไม่ต้องติด