---
read_when:
    - การเผยแพร่ Skills
    - การแก้ไขข้อบกพร่องของการเผยแพร่ที่ล้มเหลว
summary: รูปแบบโฟลเดอร์ Skills, ไฟล์ที่จำเป็น, อาร์ติแฟกต์สนับสนุน, ข้อจำกัดต่าง ๆ
x-i18n:
    generated_at: "2026-07-21T15:17:06Z"
    model: gpt-5.6
    postprocess_version: locale-links-v1
    prompt_version: 32
    provider: openai
    source_hash: fdf16a589b8961ccd9181a53a9fa92a358952b9147d22eaf977f23e0b4b4d653
    source_path: clawhub/skill-format.md
    workflow: 16
---

# รูปแบบ Skill

## บนดิสก์

Skill คือโฟลเดอร์

จำเป็น:

- `SKILL.md` (หรือ `skill.md`; รองรับ `skills.md` แบบเดิมด้วย)

ไม่บังคับ:

- ไฟล์ปกติที่ใช้สนับสนุน (ดู “ไฟล์ Skill”)
- `.clawhubignore` (รูปแบบการละเว้นสำหรับการเผยแพร่, แบบเดิมคือ `.clawdhubignore`)
- `.gitignore` (รองรับด้วยเช่นกัน)

## การนำเข้าจาก GitHub

ตัวนำเข้า GitHub บนเว็บเข้มงวดกว่าการเผยแพร่/ซิงค์ในเครื่อง โดยจะค้นพบเฉพาะไฟล์
`SKILL.md` หรือ `skills.md` แบบเดิมในที่เก็บสาธารณะที่ไม่ใช่ fork และเป็นของ
บัญชี GitHub ที่ลงชื่อเข้าใช้เท่านั้น โดยจะไม่นำเข้าที่เก็บส่วนตัว, fork,
ที่เก็บที่จัดเก็บถาวร/ปิดใช้งาน หรือที่เก็บสาธารณะของบุคคลที่สาม

ข้อมูลเมตาการติดตั้งในเครื่อง (เขียนโดย CLI):

- `<skill>/.clawhub/origin.json` (แบบเดิมคือ `.clawdhub`)

สถานะการติดตั้งในไดเรกทอรีทำงาน (เขียนโดย CLI):

- `<workdir>/.clawhub/lock.json` (แบบเดิมคือ `.clawdhub`)

## `SKILL.md`

- Markdown พร้อม YAML frontmatter ที่ไม่บังคับ
- เซิร์ฟเวอร์ดึงข้อมูลเมตาจาก frontmatter ระหว่างการเผยแพร่
- ใช้ `description` เป็นข้อมูลสรุป Skill ใน UI/การค้นหา

สำหรับ Agent Skills ที่นำไปใช้ได้ในหลายระบบ `name` ควรตรงกับไดเรกทอรีแม่และใช้
ตัวอักษรพิมพ์เล็ก ตัวเลข หรือยัติภังค์จำนวน 1–64 ตัว ClawHub แยก slug ที่ใช้กำหนดเส้นทางออกจาก
ชื่อที่แสดงในแค็ตตาล็อก ดังนั้นชื่อเดิมจากไคลเอนต์อื่นจึงยังเผยแพร่ได้
และจะไม่ถูกเขียนใหม่โดยอัตโนมัติ รายการแค็ตตาล็อกอาจย่อชื่อที่ยาว
ในการแสดงผลโดยไม่เปลี่ยนชื่อที่จัดเก็บไว้

## ข้อมูลเมตา Frontmatter

ประกาศข้อมูลเมตาของ Skill ใน YAML frontmatter ที่ด้านบนของ `SKILL.md` ซึ่งบอกรีจิสทรี (และการวิเคราะห์ความปลอดภัย) ว่า Skill ต้องการสิ่งใดในการทำงาน

### Frontmatter พื้นฐาน

```yaml
---
name: my-skill
description: สรุปสั้น ๆ ว่า Skill นี้ทำอะไร
version: 1.0.0
---
```

### ข้อมูลเมตารันไทม์ (`metadata.openclaw`)

ประกาศข้อกำหนดรันไทม์ของ Skill ภายใต้ `metadata.openclaw` (นามแฝง: `metadata.clawdbot`, `metadata.clawdis`)

```yaml
---
name: my-skill
description: จัดการงานผ่าน Todoist API
metadata:
  openclaw:
    requires:
      env:
        - TODOIST_API_KEY
      bins:
        - curl
    primaryEnv: TODOIST_API_KEY
---
```

ใช้ `requires.env` สำหรับตัวแปรสภาพแวดล้อมที่ต้องมีอยู่ก่อน Skill จะทำงานได้ ใช้ `envVars` เมื่อต้องการข้อมูลเมตาแยกตามตัวแปร รวมถึงตัวแปรที่ไม่บังคับด้วย `required: false`

### การอ้างอิงฟิลด์ทั้งหมด

| ฟิลด์              | ชนิด       | คำอธิบาย                                                                                                                                  |
| ------------------ | ---------- | -------------------------------------------------------------------------------------------------------------------------------------------- |
| `requires.env`     | `string[]` | ตัวแปรสภาพแวดล้อมที่จำเป็นซึ่ง Skill คาดว่าจะมี                                                                                           |
| `requires.bins`    | `string[]` | ไบนารี CLI ที่ต้องติดตั้งทั้งหมด                                                                                                     |
| `requires.anyBins` | `string[]` | ไบนารี CLI ที่ต้องมีอยู่อย่างน้อยหนึ่งรายการ                                                                                                  |
| `requires.config`  | `string[]` | พาธไฟล์การกำหนดค่าที่ Skill อ่าน                                                                                                          |
| `primaryEnv`       | `string`   | ตัวแปรสภาพแวดล้อมหลักที่เก็บข้อมูลประจำตัวสำหรับ Skill                                                                                                  |
| `envVars`          | `array`    | การประกาศตัวแปรสภาพแวดล้อมพร้อม `name`, `required` ที่ไม่บังคับ และ `description` ที่ไม่บังคับ ตั้งค่า `required: false` สำหรับตัวแปรสภาพแวดล้อมที่ไม่บังคับ |
| `always`           | `boolean`  | หากเป็น `true` Skill จะทำงานอยู่เสมอ (ไม่ต้องติดตั้งอย่างชัดเจน)                                                                              |
| `skillKey`         | `string`   | แทนที่คีย์เรียกใช้ของ Skill                                                                                                         |
| `emoji`            | `string`   | อีโมจิที่แสดงสำหรับ Skill                                                                                                                 |
| `homepage`         | `string`   | URL ไปยังหน้าแรกหรือเอกสารของ Skill                                                                                                         |
| `os`               | `string[]` | ข้อจำกัดของ OS (เช่น `["macos"]`, `["linux"]`)                                                                                             |
| `install`          | `array`    | ข้อกำหนดการติดตั้งสำหรับการขึ้นต่อกัน (ดูด้านล่าง)                                                                                                  |
| `nix`              | `object`   | ข้อกำหนด Plugin ของ Nix (ดู README)                                                                                                                |
| `config`           | `object`   | ข้อกำหนดการกำหนดค่าของ Clawdbot (ดู README)                                                                                                           |

### ข้อกำหนดการติดตั้ง

หาก Skill ต้องติดตั้งการขึ้นต่อกัน ให้ประกาศในอาร์เรย์ `install`:

```yaml
metadata:
  openclaw:
    install:
      - kind: brew
        formula: jq
        bins: [jq]
      - kind: node
        package: typescript
        bins: [tsc]
```

ชนิดการติดตั้งที่รองรับ: `brew`, `node`, `go`, `uv`

### ตัวแปรสภาพแวดล้อมที่ไม่บังคับ

ประกาศตัวแปรสภาพแวดล้อมที่ไม่บังคับภายใต้ `metadata.openclaw.envVars` และตั้งค่า `required: false` อย่าเพิ่มรายการที่ไม่บังคับลงใน `requires.env` เนื่องจาก `requires.env` หมายความว่า Skill ไม่สามารถทำงานได้หากไม่มีตัวแปรเหล่านั้น

```yaml
metadata:
  openclaw:
    primaryEnv: TODOIST_API_KEY
    envVars:
      - name: TODOIST_API_KEY
        required: true
        description: โทเค็น Todoist API ที่ใช้สำหรับคำขอที่ผ่านการยืนยันตัวตน
      - name: TODOIST_PROJECT_ID
        required: false
        description: ID โปรเจกต์เริ่มต้นที่ไม่บังคับ เมื่อผู้ใช้ไม่ได้ระบุ
```

### เหตุผลที่เรื่องนี้สำคัญ

การวิเคราะห์ความปลอดภัยของ ClawHub จะตรวจสอบว่าสิ่งที่ Skill ประกาศตรงกับสิ่งที่ทำจริงหรือไม่ หากโค้ดอ้างอิง `TODOIST_API_KEY` แต่ frontmatter ไม่ได้ประกาศไว้ภายใต้ `requires.env`, `primaryEnv` หรือ `envVars` การวิเคราะห์จะระบุว่าข้อมูลเมตาไม่ตรงกัน การรักษาความถูกต้องของการประกาศช่วยให้ Skill ผ่านการรีวิวและช่วยให้ผู้ใช้เข้าใจว่ากำลังติดตั้งอะไร

### ตัวอย่าง: frontmatter ฉบับสมบูรณ์

```yaml
---
name: todoist-cli
description: จัดการงาน โปรเจกต์ และป้ายกำกับของ Todoist จากบรรทัดคำสั่ง
version: 1.2.0
metadata:
  openclaw:
    requires:
      env:
        - TODOIST_API_KEY
      bins:
        - curl
    primaryEnv: TODOIST_API_KEY
    envVars:
      - name: TODOIST_API_KEY
        required: true
        description: โทเค็น Todoist API
      - name: TODOIST_PROJECT_ID
        required: false
        description: ID โปรเจกต์เริ่มต้นที่ไม่บังคับ
    emoji: "\u2705"
    homepage: https://github.com/example/todoist-cli
---
```

## ไฟล์ Skill

การเผยแพร่รองรับไฟล์ปกติทั้งหมดในโฟลเดอร์ Skill โดยไม่คำนึงถึงนามสกุล ทั้งนี้ยังคงใช้ข้อกำหนดเกี่ยวกับไฟล์ที่ละเว้น
พาธที่ซ่อนอยู่ symlink ข้อมูลเมตาของ macOS และขีดจำกัดขนาดฝั่งเซิร์ฟเวอร์

- ไฟล์ที่มีขนาดอยู่ภายในขอบเขตและมี UTF-8 ที่ถูกต้องสามารถแสดงตัวอย่างเป็นข้อความธรรมดาที่ escape แล้ว และรวมอยู่
  ในการวิเคราะห์ข้อความแบบจำกัดขอบเขต
- ไฟล์อื่นจะคงไบต์เดิมไว้อย่างถูกต้องและพร้อมให้ดาวน์โหลด
- เครื่องมือสแกนความปลอดภัยจะได้รับอาร์ติแฟกต์ที่จัดเก็บทั้งหมด การตรวจจับข้อความเป็นเรื่องของการเรนเดอร์และ
  การวิเคราะห์ ไม่ใช่รายการอนุญาตสำหรับการอัปโหลด

ขีดจำกัด (ฝั่งเซิร์ฟเวอร์):

- ขนาดบันเดิลรวม: 50MB
- ข้อความสำหรับ embedding รวม `SKILL.md` + ไฟล์ UTF-8 ที่มีขนาดอยู่ภายในขอบเขตสูงสุดประมาณ 40 ไฟล์ (ขีดจำกัดแบบพยายามให้ดีที่สุด)

## Slug

- โดยค่าเริ่มต้น สร้างจากชื่อโฟลเดอร์
- ขอบเขตแพ็กเกจต้องตรงกับแฮนเดิลผู้เผยแพร่ ClawHub ทุกประการ แฮนเดิลผู้เผยแพร่ใช้ตัวอักษรพิมพ์เล็ก ตัวเลข ยัติภังค์ จุด และขีดล่างได้ โดยต้องเริ่มต้นและลงท้ายด้วยตัวอักษรพิมพ์เล็กหรือตัวเลข
- Slug ของแพ็กเกจต้องเป็นตัวพิมพ์เล็กและปลอดภัยสำหรับ npm เช่น `@example.tools/demo-plugin` หรือ `demo-plugin`

## การกำหนดเวอร์ชัน + แท็ก

- การเผยแพร่แต่ละครั้งจะสร้างเวอร์ชันใหม่ (semver)
- แท็กเป็นตัวชี้แบบสตริงไปยังเวอร์ชัน โดยนิยมใช้ `latest`

## ใบอนุญาต

- Skill ทั้งหมดที่เผยแพร่บน ClawHub อยู่ภายใต้ใบอนุญาต `MIT-0`
- ทุกคนสามารถใช้ แก้ไข และเผยแพร่ Skill ที่เผยแพร่แล้วต่อได้ รวมถึงเพื่อการค้า
- ไม่จำเป็นต้องระบุที่มา
- อย่าเพิ่มข้อกำหนดใบอนุญาตที่ขัดแย้งกันใน `SKILL.md`; ClawHub ไม่รองรับการแทนที่ใบอนุญาตแยกตาม Skill

## Skill แบบชำระเงิน

- ClawHub ไม่รองรับ Skill แบบชำระเงิน การกำหนดราคาแยกตาม Skill เพย์วอลล์ หรือการแบ่งรายได้
- อย่าเพิ่มข้อมูลเมตาการกำหนดราคาลงใน `SKILL.md`; ข้อมูลนี้ไม่ได้เป็นส่วนหนึ่งของรูปแบบ Skill และจะไม่ทำให้ Skill ที่เผยแพร่แล้วกลายเป็นแบบชำระเงิน
- หาก Skill ผสานรวมกับบริการแบบชำระเงินของบุคคลที่สาม ให้ระบุค่าใช้จ่ายภายนอกและบัญชีที่จำเป็นไว้อย่างชัดเจนในคำแนะนำของ Skill และการประกาศตัวแปรสภาพแวดล้อม (`requires.env` สำหรับตัวแปรที่จำเป็น หรือ `envVars` พร้อม `required: false` สำหรับตัวแปรที่ไม่บังคับ)
