Using ClawHub
CLI
CLI
แพ็กเกจ CLI: clawhub, bin: clawhub.
ติดตั้งแบบ global ด้วย npm หรือ pnpm:
npm i -g clawhub# orpnpm add -g clawhubจากนั้นตรวจสอบ:
clawhub --helpclawhub loginclawhub whoamiแฟล็ก global
--workdir <dir>: ไดเรกทอรีทำงาน (ค่าเริ่มต้น: cwd; ย้อนกลับไปใช้ workspace ของ Clawdbot หากกำหนดค่าไว้)--dir <dir>: ไดเรกทอรีติดตั้งภายใต้ workdir (ค่าเริ่มต้น:skills)--site <url>: URL หลักสำหรับการเข้าสู่ระบบผ่านเบราว์เซอร์ (ค่าเริ่มต้น:https://clawhub.ai)--registry <url>: URL หลักของ API (ค่าเริ่มต้น: ค้นพบอัตโนมัติ มิฉะนั้นใช้https://clawhub.ai)--no-input: ปิดใช้งานพรอมป์
ตัวแปรสภาพแวดล้อมที่เทียบเท่า:
CLAWHUB_SITE(เดิมCLAWDHUB_SITE)CLAWHUB_REGISTRY(เดิมCLAWDHUB_REGISTRY)CLAWHUB_WORKDIR(เดิมCLAWDHUB_WORKDIR)
พร็อกซี HTTP
CLI เคารพตัวแปรสภาพแวดล้อมพร็อกซี HTTP มาตรฐานสำหรับระบบที่อยู่หลัง พร็อกซีองค์กรหรือเครือข่ายที่ถูกจำกัด:
HTTPS_PROXY/https_proxyHTTP_PROXY/http_proxyNO_PROXY/no_proxy
เมื่อตั้งค่าตัวแปรใดๆ เหล่านี้ CLI จะส่งคำขอขาออกผ่าน
พร็อกซีที่ระบุ HTTPS_PROXY ใช้สำหรับคำขอ HTTPS, HTTP_PROXY
ใช้สำหรับ HTTP ปกติ และเคารพ NO_PROXY / no_proxy เพื่อข้ามพร็อกซีสำหรับ
โฮสต์หรือโดเมนที่ระบุ
สิ่งนี้จำเป็นบนระบบที่บล็อกการเชื่อมต่อขาออกโดยตรง (เช่น คอนเทนเนอร์ Docker, Hetzner VPS ที่ใช้อินเทอร์เน็ตผ่านพร็อกซีเท่านั้น, ไฟร์วอลล์องค์กร)
ตัวอย่าง:
export HTTPS_PROXY=http://proxy.example.com:3128export NO_PROXY=localhost,127.0.0.1clawhub search "my query"เมื่อไม่ได้ตั้งค่าตัวแปรพร็อกซี พฤติกรรมจะไม่เปลี่ยนแปลง (เชื่อมต่อโดยตรง)
ไฟล์กำหนดค่า
จัดเก็บโทเค็น API ของคุณ + URL registry ที่แคชไว้
- macOS:
~/Library/Application Support/clawhub/config.json - Linux/XDG:
$XDG_CONFIG_HOME/clawhub/config.jsonหรือ~/.config/clawhub/config.json - Windows:
%APPDATA%\\clawhub\\config.json - ทางเลือกย้อนหลังแบบเดิม: หาก
clawhub/config.jsonยังไม่มีอยู่ แต่clawdhub/config.jsonมีอยู่ CLI จะนำพาธเดิมกลับมาใช้ - แทนที่ค่า:
CLAWHUB_CONFIG_PATH(เดิมCLAWDHUB_CONFIG_PATH)
คำสั่ง
login / auth login
- ค่าเริ่มต้น: เปิดเบราว์เซอร์ไปที่
<site>/cli/authและทำให้เสร็จผ่าน callback ของ local loopback - แบบ headless:
clawhub login --token clh_... - แบบ remote/headless interactive:
clawhub login --deviceพิมพ์โค้ดและรอขณะที่คุณอนุญาตที่<site>/cli/device
whoami
- ตรวจสอบโทเค็นที่จัดเก็บไว้ผ่าน
/api/v1/whoami
token
- พิมพ์โทเค็น API ที่จัดเก็บไว้ไปยัง stdout
- มีประโยชน์สำหรับส่งโทเค็นเข้าสู่ระบบในเครื่องเข้าไปยังคำสั่งตั้งค่า secret ของ CI ผ่าน pipe
star <skill> / unstar <skill>
- เพิ่ม/ลบสกิลจากรายการที่คุณไฮไลต์ไว้
- เรียก
POST /api/v1/stars/<slug>และDELETE /api/v1/stars/<slug> --yesข้ามการยืนยัน
search <query...>
- เรียก
/api/v1/search?q=... - เอาต์พุตประกอบด้วย slug ของสกิล, handle เจ้าของ, ชื่อที่แสดง และคะแนนความเกี่ยวข้อง
- การค้นหาให้ความสำคัญกับการตรงกันของโทเค็น slug/name แบบตรงตัวก่อนความนิยมจากการดาวน์โหลด โทเค็น slug เดี่ยว เช่น
mapจะตรงกับpersonal-mapได้แรงกว่าข้อความย่อยภายในamap - ความนิยมเป็นเพียงตัวตั้งต้นเล็กน้อยในการจัดอันดับ ไม่ใช่การรับประกันว่าจะได้ตำแหน่งบนสุด
- หากสกิลควรปรากฏแต่ไม่ปรากฏ ให้เรียก
clawhub inspect @owner/slugขณะเข้าสู่ระบบ เพื่อตรวจดู diagnostics การกลั่นกรองที่เจ้าของมองเห็น ก่อนเปลี่ยนชื่อ metadata
explore
- แสดงรายการสกิลใหม่ล่าสุดผ่าน
/api/v1/skills?limit=...&sort=createdAt(เรียงตามcreatedAtจากมากไปน้อย) - แฟล็ก:
--limit <n>(1-200, ค่าเริ่มต้น: 25)--sort newest|updated|rating|downloads|trending(ค่าเริ่มต้น: newest) alias การเรียงลำดับ install แบบเดิมยังใช้งานได้เพื่อความเข้ากันได้--json(เอาต์พุตที่เครื่องอ่านได้)
- เอาต์พุต:
<slug> v<version> <age> <summary>(summary ถูกตัดเหลือ 50 อักขระ)
inspect @owner/slug
- ดึง metadata ของสกิลและไฟล์เวอร์ชันโดยไม่ติดตั้ง
--version <version>: ตรวจสอบเวอร์ชันที่ระบุ (ค่าเริ่มต้น: latest)--tag <tag>: ตรวจสอบเวอร์ชันที่ติดแท็ก (เช่นlatest)--versions: แสดงประวัติเวอร์ชัน (หน้าแรก)--limit <n>: จำนวนเวอร์ชันสูงสุดที่จะแสดง (1-200)--files: แสดงรายการไฟล์สำหรับเวอร์ชันที่เลือก--file <path>: ดึงเนื้อหาไฟล์ดิบ (เฉพาะไฟล์ข้อความ; จำกัด 200KB)--json: เอาต์พุตที่เครื่องอ่านได้
install @owner/slug
- resolve เวอร์ชันล่าสุดสำหรับเจ้าของและสกิลที่ระบุ
- ดาวน์โหลด zip ผ่าน
/api/v1/download - แตกไฟล์ไปยัง
<workdir>/<dir>/<slug> - ปฏิเสธการเขียนทับสกิลที่ pin ไว้; เรียก
clawhub unpin <skill>ก่อน - เขียน:
<workdir>/.clawhub/lock.json(เดิม.clawdhub)<skill>/.clawhub/origin.json(เดิม.clawdhub)
uninstall <skill>
- ลบ
<workdir>/<dir>/<slug>และลบรายการใน lockfile - ส่ง telemetry แบบ best-effort ขณะเข้าสู่ระบบ เพื่อให้จำนวน install ปัจจุบันสามารถ ถูกปิดใช้งานได้
- แบบ interactive: ถามเพื่อยืนยัน
- แบบ non-interactive (
--no-input): ต้องใช้--yes
list
- อ่าน
<workdir>/.clawhub/lock.json(เดิม.clawdhub) - แสดง
pinnedถัดจากสกิลที่ถูกตรึงด้วยclawhub pinรวมถึงเหตุผลที่เลือกได้
pin <skill>
- ทำเครื่องหมายสกิลที่ติดตั้งแล้วว่า pinned ใน lockfile
--reason <text>บันทึกเหตุผลที่สกิลถูกแช่ไว้- สกิลที่ pinned จะถูกข้ามโดย
update --allและถูกปฏิเสธโดยupdate <skill>โดยตรง - สกิลที่ pinned ยังปฏิเสธ
install --forceด้วย เพื่อไม่ให้ bytes ในเครื่องถูกแทนที่โดยไม่ตั้งใจ
unpin <skill>
- ลบ pin ใน lockfile ออกจากสกิลที่ติดตั้งแล้ว เพื่อให้การอัปเดตในอนาคตแก้ไขได้
update [@owner/slug] / update --all
- คำนวณ fingerprint จากไฟล์ในเครื่อง
- หาก fingerprint ตรงกับเวอร์ชันที่รู้จัก: ไม่มีพรอมป์
- หาก fingerprint ไม่ตรง:
- ปฏิเสธโดยค่าเริ่มต้น
- เขียนทับด้วย
--force(หรือพรอมป์ หากเป็น interactive)
- สกิลที่ pinned จะไม่ถูกอัปเดตด้วย
--forceเด็ดขาด update <skill>ล้มเหลวทันทีสำหรับสกิลที่ pinned และบอกให้คุณเรียกclawhub unpin <skill>ก่อนupdate --allข้าม slug ที่ pinned และพิมพ์สรุปว่าสิ่งใดยังคงถูกแช่ไว้
skill publish <path>
- เปรียบเทียบ fingerprint ของ bundle ในเครื่องกับ ClawHub และออกสำเร็จเมื่อ เนื้อหาถูกเผยแพร่แล้ว
- สกิลใหม่มีค่าเริ่มต้นเป็น
1.0.0; สกิลที่เปลี่ยนแปลงมีค่าเริ่มต้นเป็นเวอร์ชัน patch ถัดไป --version <version>เลือกเวอร์ชันอย่างชัดเจน และเผยแพร่แม้เมื่อ เนื้อหาตรงกับเวอร์ชันที่มีอยู่แล้ว--dry-runresolve การเผยแพร่โดยไม่อัปโหลด;--jsonพิมพ์ผลลัพธ์ ที่เครื่องอ่านได้--owner <handle>เผยแพร่ภายใต้ handle ผู้เผยแพร่แบบ org/user เมื่อ actor มีสิทธิ์เข้าถึง publisher--migrate-ownerย้ายสกิลที่มีอยู่ไปยัง--ownerขณะเผยแพร่ เวอร์ชันใหม่ ต้องมีสิทธิ์ admin/owner บน publisher ทั้งสองฝั่ง- พฤติกรรมของเจ้าของและการตรวจทานอธิบายไว้ใน
docs/publishing.md - การเผยแพร่สกิลหมายความว่าสกิลถูกปล่อยภายใต้
MIT-0บน ClawHub - สกิลที่เผยแพร่แล้วใช้ฟรี แก้ไข และแจกจ่ายต่อได้โดยไม่ต้องแสดงที่มา
- ClawHub ไม่รองรับสกิลแบบชำระเงินหรือการตั้งราคารายสกิล
- alias เดิม:
publish <path>
clawhub skill publish ./my-skill --dry-runclawhub skill publish ./my-skillclawhub skill publish ./my-skill --version 2.0.0GitHub Actions
workflow ที่ใช้ซ้ำได้ของ ClawHub
skill-publish.yml
เรียก skill publish สำหรับ skill_path หนึ่งรายการ หรือสำหรับแต่ละโฟลเดอร์สกิลโดยตรง
ภายใต้ root (ค่าเริ่มต้น: skills) โดยจะข้ามสกิลที่ไม่เปลี่ยนแปลงและใช้
พฤติกรรมเวอร์ชัน patch อัตโนมัติแบบเดียวกัน
ตั้งค่า dry_run: true เพื่อดูตัวอย่างโดยไม่มีโทเค็น การเผยแพร่จริงต้องใช้
secret clawhub_token
sync
- สแกน workdir ปัจจุบัน, ไดเรกทอรี skills ที่กำหนดค่าไว้ และโฟลเดอร์
--root <dir>ใดๆ เพื่อหาโฟลเดอร์สกิลในเครื่องที่มีSKILL.mdหรือskill.md - เปรียบเทียบ fingerprint ของสกิลในเครื่องแต่ละรายการกับ ClawHub และเผยแพร่เฉพาะสกิลใหม่หรือ สกิลที่เปลี่ยนแปลง
- สกิลใหม่เผยแพร่เป็น
1.0.0; สกิลที่เปลี่ยนแปลงเผยแพร่เป็นเวอร์ชัน patch ถัดไป โดยค่าเริ่มต้น ใช้--bump minor|majorสำหรับชุดอัปเดตที่ควรขยับด้วย ขั้น semver ที่ใหญ่กว่า --dry-runแสดงแผนการเผยแพร่โดยไม่อัปโหลด;--jsonพิมพ์แผน ที่เครื่องอ่านได้--allเผยแพร่สกิลใหม่หรือสกิลที่เปลี่ยนแปลงทั้งหมดโดยไม่ถาม หากไม่มี--allเทอร์มินัลแบบ interactive จะให้คุณเลือกสกิลที่จะเผยแพร่--owner <handle>เผยแพร่ภายใต้ handle ผู้เผยแพร่แบบ org/user เมื่อ actor มีสิทธิ์เข้าถึง publishersyncเป็นการเผยแพร่ทางเดียวเท่านั้น ไม่ติดตั้ง อัปเดต ดาวน์โหลด หรือ รายงาน telemetry การ install/download
clawhub sync --all --dry-runclawhub sync --allclawhub sync --root ./skills --owner openclaw --bump minorscan --slug <slug>
- ต้องใช้
clawhub login - เรียกใช้ ClawHub ClawScan ผ่าน
POST /api/v1/skills/-/scanจากนั้น poll จนกว่าการสแกนจะเป็น terminal - การสแกนเป็นแบบ asynchronous และอาจใช้เวลาให้เสร็จ ขณะอยู่ในคิว spinner ของเทอร์มินัลจะแสดงตำแหน่งการสแกนตามลำดับความสำคัญปัจจุบัน และจำนวนการสแกนที่อยู่ข้างหน้า
- การสแกนที่เผยแพร่แล้วต้องมี ownership หรือสิทธิ์จัดการ publisher Moderator/admin สามารถใช้ backend เดียวกันผ่าน
clawhub-admin --updateใช้ได้เฉพาะกับ--slug; โดยจะเขียนผลการสแกนที่เผยแพร่แล้วซึ่งสำเร็จกลับไปยังเวอร์ชันที่เลือก--output <file.zip>ดาวน์โหลด archive รายงานฉบับเต็มพร้อมmanifest.json,clawscan.json,skillspector.json,static-analysis.json,virustotal.jsonและREADME.md--jsonพิมพ์ poll response ฉบับเต็มสำหรับ automation- ไม่รองรับการสแกนพาธในเครื่องอีกต่อไป อัปโหลดเวอร์ชันใหม่ จากนั้นใช้
scan downloadเพื่อดึงผลการสแกนที่จัดเก็บไว้สำหรับเวอร์ชันที่ส่งนั้น
clawhub scan --slug gifgrepclawhub scan --slug gifgrep --version 1.2.3clawhub scan --slug gifgrep --update --output report.zipscan download <name>
- ต้องใช้
clawhub login - ดาวน์โหลด ZIP รายงานการสแกนที่จัดเก็บไว้สำหรับเวอร์ชันสกิลหรือ Plugin ที่ส่ง รวมถึงเวอร์ชันที่ถูกบล็อกหรือซ่อนโดยการตรวจสอบความปลอดภัยของ ClawHub
- การดาวน์โหลดสกิลใช้ slug ของสกิลและมีค่าเริ่มต้นเป็น
--kind skill - การดาวน์โหลด Plugin ใช้ชื่อแพ็กเกจและต้องใช้
--kind plugin - ต้องระบุ
--versionเพื่อให้ผู้เขียนตรวจสอบเวอร์ชันที่ส่งจริงซึ่ง ClawHub บล็อกไว้ --output <file.zip>เลือกพาธปลายทาง
clawhub scan download gifgrep --version 1.2.3clawhub scan download @scope/demo --version 2.0.0 --kind plugin --output report.zipGitHub Actions
ClawHub มี workflow ที่ใช้ซ้ำได้อย่างเป็นทางการที่
/.github/workflows/skill-publish.yml
สำหรับ repo สกิลและ repo catalog
การตั้งค่า catalog ทั่วไป:
name: Skill Publish on: pull_request: workflow_dispatch: jobs: dry-run: if: github.event_name == 'pull_request' uses: openclaw/clawhub/.github/workflows/skill-publish.yml@v1 with: owner: nvidia dry_run: true publish: if: github.event_name == 'workflow_dispatch' uses: openclaw/clawhub/.github/workflows/skill-publish.yml@v1 with: owner: nvidia dry_run: false secrets: clawhub_token: ${{ secrets.CLAWHUB_TOKEN }}หมายเหตุ:
rootมีค่าเริ่มต้นเป็นskillsสำหรับ repo catalog- ส่ง
skill_path: skills/review-helperเพื่อประมวลผลโฟลเดอร์สกิลหนึ่งรายการ ownerแมปกับแฟล็ก CLI--owner; ละไว้เพื่อเผยแพร่ในฐานะผู้ใช้ที่ผ่านการยืนยันตัวตน- การเผยแพร่สกิล V1 ใช้
clawhub_token; การเผยแพร่ที่เชื่อถือได้ด้วย GitHub OIDC ยังใช้ได้เฉพาะกับแพ็กเกจในตอนนี้
delete <skill>
- หากไม่มี
--versionให้ลบ Skills แบบซ่อนชั่วคราว (เจ้าของ ผู้ดูแลเนื้อหา หรือผู้ดูแลระบบ) - เรียก
DELETE /api/v1/skills/{slug} - การลบแบบซ่อนชั่วคราวที่เริ่มโดยเจ้าของจะจอง slug ไว้ 30 วัน; คำสั่งจะแสดงเวลาหมดอายุ
--version <version>จะลบเวอร์ชันที่เป็นเจ้าของและไม่ใช่เวอร์ชันล่าสุดอย่างถาวรผ่านเส้นทางเฉพาะเวอร์ชัน ที่ปิดเมื่อเกิดข้อผิดพลาด เวอร์ชันที่ถูกลบจะกู้คืนหรือนำกลับมาเผยแพร่ไม่ได้ เผยแพร่เวอร์ชันทดแทนก่อนลบ เวอร์ชันล่าสุดปัจจุบัน เจ้าหน้าที่แพลตฟอร์มไม่ข้ามสิทธิ์ความเป็นเจ้าของสำหรับโฟลว์ที่ใช้กับเวอร์ชันเท่านั้นนี้--reason <text>บันทึกหมายเหตุการดูแลเนื้อหาในการลบ Skills ทั้งรายการแบบซ่อนชั่วคราวและบันทึกการตรวจสอบ--note <text>เป็นนามแฝงของ--reason--yesข้ามการยืนยัน
undelete <skill>
- กู้คืน Skills ที่ถูกซ่อน (เจ้าของ ผู้ดูแลเนื้อหา หรือผู้ดูแลระบบ)
- ไม่มีการกู้คืนเวอร์ชัน; เวอร์ชันที่ถูกลบถาวรจะกู้คืนไม่ได้
- เรียก
POST /api/v1/skills/{slug}/undelete --reason <text>บันทึกหมายเหตุการดูแลเนื้อหาใน Skills และบันทึกการตรวจสอบ--note <text>เป็นนามแฝงของ--reason--yesข้ามการยืนยัน
hide <skill>
- ซ่อน Skills (เจ้าของ ผู้ดูแลเนื้อหา หรือผู้ดูแลระบบ)
- นามแฝงของ
delete
unhide <skill>
- ยกเลิกการซ่อน Skills (เจ้าของ ผู้ดูแลเนื้อหา หรือผู้ดูแลระบบ)
- นามแฝงของ
undelete
skill rename <skill> <new-name>
- เปลี่ยนชื่อ Skills ที่เป็นเจ้าของและเก็บ slug เดิมไว้เป็นนามแฝงสำหรับเปลี่ยนเส้นทาง
- เรียก
POST /api/v1/skills/{slug}/rename --yesข้ามการยืนยัน
skill merge <source> <target>
- รวม Skills ที่เป็นเจ้าของรายการหนึ่งเข้ากับ Skills ที่เป็นเจ้าของอีกรายการหนึ่ง
- slug ต้นทางจะหยุดแสดงแบบสาธารณะและกลายเป็นนามแฝงสำหรับเปลี่ยนเส้นทางไปยังเป้าหมาย
- เรียก
POST /api/v1/skills/{sourceSlug}/merge --yesข้ามการยืนยัน
transfer
- เวิร์กโฟลว์การโอนความเป็นเจ้าของ
- การโอนไปยังแฮนเดิลผู้ใช้จะสร้างคำขอที่รอดำเนินการให้ผู้รับยอมรับ
- การโอนไปยังแฮนเดิลองค์กร/ผู้เผยแพร่จะมีผลทันทีเฉพาะเมื่อผู้ดำเนินการมี สิทธิ์ผู้ดูแลระบบต่อทั้งเจ้าของปัจจุบันและผู้เผยแพร่ปลายทาง
- คำสั่งย่อย:
transfer request <skill> <handle> [--message "..."] [--yes]transfer list [--outgoing]transfer accept <skill> [--yes]transfer reject <skill> [--yes]transfer cancel <skill> [--yes]
- เอนด์พอยต์:
POST /api/v1/skills/{slug}/transferPOST /api/v1/skills/{slug}/transfer/acceptPOST /api/v1/skills/{slug}/transfer/rejectPOST /api/v1/skills/{slug}/transfer/cancelGET /api/v1/transfers/incomingGET /api/v1/transfers/outgoing
package explore [query...]
- เรียกดูหรือค้นหาแค็ตตาล็อกแพ็กเกจแบบรวมผ่าน
GET /api/v1/packagesและGET /api/v1/packages/search - ใช้คำสั่งนี้สำหรับ plugins และรายการตระกูลแพ็กเกจอื่น ๆ;
searchระดับบนยังคงเป็นพื้นผิวค้นหา Skills - แฟล็ก:
--family skill|code-plugin|bundle-plugin--official--executes-code--target <target>,--os <os>,--arch <arch>,--libc <libc>--requires-browser,--requires-desktop,--requires-native-deps--requires-external-service,--external-service <name>--binary <name>,--os-permission <name>--artifact-kind legacy-zip|npm-pack--npm-mirror--limit <n>(1-100, ค่าเริ่มต้น: 25)--json
ตัวอย่าง:
clawhub package explore --family code-pluginclawhub package explore --family code-plugin --os darwin --requires-desktopclawhub package explore --family code-plugin --artifact-kind npm-packclawhub package explore --npm-mirrorclawhub package explore episodic-claw --family code-pluginpackage inspect <name>
- ดึงข้อมูลเมตาของแพ็กเกจโดยไม่ติดตั้ง
- ใช้คำสั่งนี้สำหรับข้อมูลเมตา Plugin, ความเข้ากันได้, การตรวจยืนยัน, แหล่งที่มา และการตรวจสอบเวอร์ชัน/ไฟล์
--version <version>: ตรวจสอบเวอร์ชันที่ระบุ (ค่าเริ่มต้น: ล่าสุด)--tag <tag>: ตรวจสอบเวอร์ชันที่ติดแท็ก (เช่นlatest)--versions: แสดงประวัติเวอร์ชัน (หน้าแรก)--limit <n>: จำนวนเวอร์ชันสูงสุดที่จะแสดง (1-100)--files: แสดงไฟล์สำหรับเวอร์ชันที่เลือก--file <path>: ดึงเนื้อหาไฟล์ดิบ (เฉพาะไฟล์ข้อความ; จำกัด 200KB)--json: เอาต์พุตที่เครื่องอ่านได้
package download <name>
- แก้เวอร์ชันแพ็กเกจผ่าน
GET /api/v1/packages/{name}/versions/{version}/artifact - ดาวน์โหลดอาร์ติแฟกต์จาก
downloadUrlของตัวแก้ - ตรวจยืนยัน ClawHub SHA-256 สำหรับอาร์ติแฟกต์ทั้งหมด
- สำหรับอาร์ติแฟกต์ ClawPack npm-pack จะตรวจยืนยันความถูกต้อง npm
sha512, npm shasum และชื่อ/เวอร์ชันในpackage.jsonของ tarball ด้วย - เวอร์ชัน ZIP แบบเดิมดาวน์โหลดผ่านเส้นทาง ZIP แบบเดิม
- แฟล็ก:
--version <version>: ดาวน์โหลดเวอร์ชันที่ระบุ--tag <tag>: ดาวน์โหลดเวอร์ชันที่ติดแท็ก (ค่าเริ่มต้น:latest)-o, --output <path>: ไฟล์หรือไดเรกทอรีเอาต์พุต--force: เขียนทับไฟล์เอาต์พุตที่มีอยู่--json: เอาต์พุตที่เครื่องอ่านได้
ตัวอย่าง:
clawhub package download @openclaw/example-plugin --tag latestclawhub package download @openclaw/example-plugin --version 1.2.3 -o artifacts/package verify <file>
- คำนวณ ClawHub SHA-256, ความถูกต้อง npm
sha512และ npm shasum สำหรับ อาร์ติแฟกต์ในเครื่อง - เมื่อใช้
--packageจะแก้ข้อมูลเมตาที่คาดไว้จาก ClawHub และเปรียบเทียบ ไฟล์ในเครื่องกับข้อมูลเมตาอาร์ติแฟกต์ที่เผยแพร่ - เมื่อใช้แฟล็ก digest โดยตรง จะตรวจยืนยันโดยไม่ค้นหาผ่านเครือข่าย
- แฟล็ก:
--package <name>: ชื่อแพ็กเกจเพื่อแก้ข้อมูลเมตาอาร์ติแฟกต์ที่คาดไว้--version <version>หรือ--tag <tag>: เวอร์ชันแพ็กเกจที่คาดไว้--sha256 <hex>: ClawHub SHA-256 ที่คาดไว้--npm-integrity <sri>: ความถูกต้อง npm ที่คาดไว้--npm-shasum <sha1>: npm shasum ที่คาดไว้--json: เอาต์พุตที่เครื่องอ่านได้
ตัวอย่าง:
clawhub package verify ./example-plugin-1.2.3.tgz --package @openclaw/example-plugin --version 1.2.3clawhub package verify ./example-plugin-1.2.3.tgz --sha256 <hex>package validate <source>
- เรียกใช้ Plugin Inspector ที่รวมมากับ ClawHub CLI กับโฟลเดอร์แพ็กเกจ Plugin ในเครื่อง
- ค่าเริ่มต้นคือการตรวจสอบแบบออฟไลน์/สแตติก โดยไม่ระบุตำแหน่งหรือนำเข้า checkout OpenClaw ในเครื่อง
- ข้อผิดพลาดความเข้ากันได้ที่ร้ายแรงจะออกด้วยค่าที่ไม่ใช่ศูนย์ ผลการตรวจพบที่เป็นเฉพาะคำเตือนจะถูกพิมพ์แต่ ออกด้วยค่าศูนย์
- แฟล็ก:
--out <dir>: เขียนรายงาน Plugin Inspector ไปยังไดเรกทอรีนี้--openclaw <path>: ตรวจสอบเทียบกับ checkout OpenClaw ในเครื่องที่ระบุชัดเจน--runtime: เปิดใช้การจับข้อมูล runtime; นำเข้าโค้ด Plugin--allow-execute: อนุญาตการจับข้อมูล runtime ในพื้นที่ทำงานที่แยกไว้--no-mock-sdk: ปิดใช้งาน OpenClaw SDK จำลองระหว่างการจับข้อมูล runtime--json: เอาต์พุตที่เครื่องอ่านได้
ตัวอย่าง:
clawhub package validate ./example-pluginหากการตรวจสอบรายงานข้อพบเกี่ยวกับแพ็กเกจ, manifest, การนำเข้า SDK หรืออาร์ติแฟกต์ โปรดดู การแก้ไขการตรวจสอบ Plugin แล้วเรียกใช้คำสั่งอีกครั้ง
package delete <name>
- หากไม่มี
--versionให้ลบแพ็กเกจและรีลีสทั้งหมดแบบซ่อนชั่วคราว --version <version>จะลบรีลีสที่เป็นเจ้าของและไม่ใช่เวอร์ชันล่าสุดหนึ่งรายการอย่างถาวรผ่านเส้นทางเฉพาะเวอร์ชัน ที่ปิดเมื่อเกิดข้อผิดพลาด เวอร์ชันที่ถูกลบจะกู้คืนหรือนำกลับมาเผยแพร่ไม่ได้ เผยแพร่เวอร์ชันทดแทนก่อนลบ เวอร์ชันล่าสุดปัจจุบัน โฟลว์ที่ใช้กับเวอร์ชันเท่านั้นนี้ต้องเป็นเจ้าของแพ็กเกจหรือผู้ดูแลระบบผู้เผยแพร่ขององค์กร; เจ้าหน้าที่แพลตฟอร์มไม่ข้ามสิทธิ์ความเป็นเจ้าของแพ็กเกจ- การลบแพ็กเกจทั้งรายการแบบซ่อนชั่วคราวต้องเป็นเจ้าของแพ็กเกจ, เจ้าของ/ผู้ดูแลระบบผู้เผยแพร่ขององค์กร, ผู้ดูแลเนื้อหาแพลตฟอร์ม หรือผู้ดูแลระบบแพลตฟอร์ม
- แฟล็ก:
--version <version>: ลบเวอร์ชันที่ไม่ใช่ล่าสุดหนึ่งรายการอย่างถาวร--yes: ข้ามการยืนยัน--json: เอาต์พุตที่เครื่องอ่านได้
ตัวอย่าง:
clawhub package delete @openclaw/example-plugin --yesclawhub package delete @openclaw/example-plugin --version 1.2.3 --yespackage undelete <name>
- กู้คืนแพ็กเกจและรีลีสที่ถูกลบแบบซ่อนชั่วคราว
- ไม่มีการกู้คืนเวอร์ชัน; เวอร์ชันที่ถูกลบถาวรจะกู้คืนไม่ได้
- ต้องเป็นเจ้าของแพ็กเกจ, เจ้าของ/ผู้ดูแลระบบผู้เผยแพร่ขององค์กร, ผู้ดูแลเนื้อหาแพลตฟอร์ม หรือผู้ดูแลระบบแพลตฟอร์ม
- เรียก
POST /api/v1/packages/{name}/undelete - แฟล็ก:
--yes: ข้ามการยืนยัน--json: เอาต์พุตที่เครื่องอ่านได้
ตัวอย่าง:
clawhub package undelete @openclaw/example-plugin --yespackage transfer <name>
- โอนแพ็กเกจไปยังผู้เผยแพร่อื่น
- ต้องมีสิทธิ์ผู้ดูแลระบบต่อทั้งเจ้าของแพ็กเกจปัจจุบันและผู้เผยแพร่ ปลายทาง เว้นแต่ดำเนินการโดยผู้ดูแลระบบแพลตฟอร์ม
- ชื่อแพ็กเกจแบบมี scope ต้องโอนไปยังเจ้าของ scope ที่ตรงกัน
- เรียก
POST /api/v1/packages/{name}/transfer - แฟล็ก:
--to <owner>: แฮนเดิลผู้เผยแพร่ปลายทาง--reason <text>: เหตุผลการตรวจสอบที่ไม่บังคับ--json: เอาต์พุตที่เครื่องอ่านได้
ตัวอย่าง:
clawhub package transfer @openclaw/example-plugin --to openclawpackage report
- คำสั่งที่ต้องยืนยันตัวตนสำหรับรายงานแพ็กเกจต่อผู้ดูแลเนื้อหา
- เรียก
POST /api/v1/packages/{name}/report - รายงานอยู่ในระดับแพ็กเกจ อาจผูกกับเวอร์ชันได้ และจะปรากฏให้ ผู้ดูแลเนื้อหาตรวจสอบ
- รายงานจะไม่ซ่อนแพ็กเกจโดยอัตโนมัติหรือบล็อกการดาวน์โหลดด้วยตัวเอง
- แฟล็ก:
--version <version>: เวอร์ชันแพ็กเกจที่ไม่บังคับเพื่อแนบกับรายงาน--reason <text>: เหตุผลของรายงานที่จำเป็น--json: เอาต์พุตที่เครื่องอ่านได้
ตัวอย่าง:
clawhub package report @openclaw/example-plugin --version 1.2.3 --reason "suspicious native payload"package moderation-status
- คำสั่งของเจ้าของสำหรับตรวจสอบการมองเห็นด้านการดูแลเนื้อหาของแพ็กเกจ
- เรียก
GET /api/v1/packages/{name}/moderation - แสดงสถานะการสแกนแพ็กเกจปัจจุบัน, จำนวนรายงานที่เปิดอยู่, สถานะการดูแลเนื้อหาด้วยตนเองของรีลีสล่าสุด, สถานะการบล็อกการดาวน์โหลด และเหตุผลการดูแลเนื้อหา
- แฟล็ก:
--json: เอาต์พุตที่เครื่องอ่านได้
ตัวอย่าง:
clawhub package moderation-status @openclaw/example-pluginpackage readiness <name>
- ตรวจสอบว่าแพ็กเกจพร้อมสำหรับการใช้งานโดย OpenClaw ในอนาคตหรือไม่
- เรียก
GET /api/v1/packages/{name}/readiness - รายงานตัวบล็อกสำหรับสถานะทางการ, ความพร้อมใช้งาน ClawPack, digest ของอาร์ติแฟกต์, ที่มาของแหล่งข้อมูล, ความเข้ากันได้กับ OpenClaw, เป้าหมายโฮสต์, ข้อมูลเมตาสภาพแวดล้อม, และสถานะการสแกน
- แฟล็ก:
--json: เอาต์พุตที่เครื่องอ่านได้
ตัวอย่าง:
clawhub package readiness @openclaw/example-pluginpackage migration-status <name>
- แสดงสถานะการย้ายข้อมูลที่มุ่งเน้นผู้ปฏิบัติการสำหรับแพ็กเกจที่อาจแทนที่ Plugin OpenClaw ที่รวมมา
- เรียกเอนด์พอยต์ readiness ที่คำนวณเหมือนกับ
package readinessแต่พิมพ์ สถานะที่เน้นการย้ายข้อมูล, เวอร์ชันล่าสุด, สถานะแพ็กเกจทางการ, การตรวจสอบ และ ตัวบล็อก - แฟล็ก:
--json: เอาต์พุตที่เครื่องอ่านได้
ตัวอย่าง:
clawhub package migration-status @openclaw/example-pluginpublisher create <handle>
- สร้างผู้เผยแพร่องค์กรที่ผู้ใช้ที่ยืนยันตัวตนเป็นเจ้าของ
- แฮนเดิลจะถูกปรับให้เป็นตัวพิมพ์เล็กและอาจส่งมาพร้อมหรือไม่มี
@ก็ได้ - ผู้เผยแพร่องค์กรที่เพิ่งสร้างใหม่จะไม่ถูกเชื่อถือ/ไม่เป็นทางการโดยค่าเริ่มต้น
- ล้มเหลวหากแฮนเดิลถูกใช้แล้วโดยผู้เผยแพร่ ผู้ใช้ หรือเส้นทางที่สงวนไว้ที่มีอยู่
clawhub publisher create opik --display-name "Opik"package publish <source>
- เผยแพร่ code Plugin หรือ bundle Plugin ผ่าน
POST /api/v1/packages <source>รองรับ:- พาธโฟลเดอร์ในเครื่อง:
./my-plugin - ไฟล์ tarball แบบ npm-pack ของ ClawPack ในเครื่อง:
./my-plugin-1.2.3.tgz - รีโพ GitHub:
owner/repoหรือowner/repo@ref - URL GitHub:
https://github.com/owner/repo
- พาธโฟลเดอร์ในเครื่อง:
- ระบบตรวจหาเมตาดาต้าโดยอัตโนมัติจาก
package.json,openclaw.plugin.jsonและ marker ของ bundle OpenClaw จริง เช่น.codex-plugin/plugin.json,.claude-plugin/plugin.jsonและ.cursor-plugin/plugin.json - แหล่งที่มาแบบ
.tgzจะถูกถือว่าเป็น ClawPack โดย CLI จะอัปโหลดไบต์ npm-pack เดิมทุกประการ และใช้เนื้อหาpackage/ที่แตกออกมาเฉพาะสำหรับการตรวจสอบความถูกต้องและ การเติมเมตาดาต้าล่วงหน้า - โฟลเดอร์ code Plugin จะถูกแพ็กเป็น npm tarball ของ ClawPack ก่อนอัปโหลด เพื่อให้ การติดตั้ง OpenClaw สามารถตรวจสอบ artifact ที่ตรงกันทุกประการได้ ส่วนโฟลเดอร์ bundle Plugin ยังคง ใช้เส้นทางการเผยแพร่แบบไฟล์ที่แตกออกมา
- สำหรับแหล่งที่มาจาก GitHub ระบบจะเติมที่มาของซอร์สโดยอัตโนมัติจากรีโพ, commit ที่ resolve แล้ว, ref และ subpath
- สำหรับโฟลเดอร์ในเครื่อง ระบบจะตรวจหาที่มาของซอร์สโดยอัตโนมัติจาก git ในเครื่องเมื่อ origin remote ชี้ไปที่ GitHub
- code Plugin ภายนอกต้องประกาศ
openclaw.compat.pluginApiและopenclaw.build.openclawVersionอย่างชัดเจนpackage.json.versionระดับบนสุดจะไม่ถูกใช้เป็น fallback สำหรับการตรวจสอบการเผยแพร่ --dry-runแสดงตัวอย่าง publish payload ที่ resolve แล้วโดยไม่อัปโหลด--jsonส่งออกผลลัพธ์ที่เครื่องอ่านได้สำหรับ CI--owner <handle>เผยแพร่ภายใต้ handle ผู้เผยแพร่ของผู้ใช้หรือองค์กรเมื่อ actor มีสิทธิ์เผยแพร่- ชื่อแพ็กเกจแบบ scoped ต้องตรงกับ owner ที่เลือก ดู
docs/publishing.md - flag เดิม (
--family,--name,--version,--source-repo,--source-commit,--source-ref,--source-path) ยังคงใช้เป็น override ได้ - รีโพ GitHub ส่วนตัวต้องใช้
GITHUB_TOKEN
clawhub package publish ./plugin.tgz --owner openclawขั้นตอนในเครื่องที่แนะนำ
ใช้ --dry-run ก่อน เพื่อยืนยันเมตาดาต้าแพ็กเกจที่ resolve แล้วและ
ที่มาของซอร์สก่อนสร้าง release จริง:
npm packclawhub package publish ./my-plugin-1.2.3.tgz --family code-plugin --dry-runclawhub package publish ./my-plugin-1.2.3.tgz --family code-pluginขั้นตอนโฟลเดอร์ในเครื่อง
สำหรับ code Plugin การเผยแพร่จากโฟลเดอร์จะสร้างและอัปโหลด artifact ของ ClawPack จาก โฟลเดอร์แพ็กเกจ:
clawhub package publish ./my-plugin --family code-plugin --dry-runclawhub package publish ./my-plugin --family code-pluginpackage.json ขั้นต่ำสำหรับ --family code-plugin
code Plugin ภายนอกต้องมีเมตาดาต้า OpenClaw จำนวนเล็กน้อยใน
package.json manifest ขั้นต่ำนี้เพียงพอสำหรับการเผยแพร่ให้สำเร็จ:
{ "name": "@myorg/openclaw-my-plugin", "version": "1.0.0", "type": "module", "openclaw": { "extensions": ["./index.ts"], "compat": { "pluginApi": ">=2026.3.24-beta.2" }, "build": { "openclawVersion": "2026.3.24-beta.2" } }}ฟิลด์ที่จำเป็น:
openclaw.compat.pluginApiopenclaw.build.openclawVersion
หมายเหตุ:
package.json.versionคือเวอร์ชัน release ของแพ็กเกจคุณ แต่จะไม่ถูกใช้เป็น fallback สำหรับการตรวจสอบ compatibility/build ของ OpenClawopenclaw.hostTargetsและopenclaw.environmentเป็นเมตาดาต้าแบบไม่บังคับ ClawHub อาจแสดงข้อมูลเหล่านี้เมื่อมีอยู่ แต่ไม่จำเป็นสำหรับการเผยแพร่openclaw.compat.minGatewayVersionและopenclaw.build.pluginSdkVersionเป็นข้อมูลเสริมแบบไม่บังคับหากคุณต้องการเผยแพร่ เมตาดาต้า compatibility ที่ละเอียดขึ้น- หากคุณใช้ CLI
clawhubrelease เก่า ให้อัปเกรดก่อนเผยแพร่ เพื่อให้ การตรวจสอบ preflight ในเครื่องทำงานก่อนอัปโหลด - หากการตรวจสอบรายงาน remediation code ให้ดู การแก้ไขการตรวจสอบ Plugin
GitHub Actions
ClawHub ยังมาพร้อม workflow ที่ใช้ซ้ำได้อย่างเป็นทางการที่
/.github/workflows/package-publish.yml
สำหรับรีโพ Plugin
การตั้งค่าฝั่ง caller ทั่วไป:
name: Package Publish on: pull_request: workflow_dispatch: push: tags: - "v*" jobs: dry-run: if: github.event_name == 'pull_request' uses: openclaw/clawhub/.github/workflows/package-publish.yml@v0.12.0 with: dry_run: true publish: if: github.event_name == 'workflow_dispatch' || startsWith(github.ref, 'refs/tags/') permissions: contents: read id-token: write uses: openclaw/clawhub/.github/workflows/package-publish.yml@v0.12.0 with: dry_run: false secrets: clawhub_token: ${{ secrets.CLAWHUB_TOKEN }}หมายเหตุ:
- workflow ที่ใช้ซ้ำได้จะตั้งค่าเริ่มต้น
sourceเป็นรีโพของ caller - สำหรับ monorepo ให้ส่ง
source_pathเพื่อให้ workflow เผยแพร่โฟลเดอร์แพ็กเกจ Plugin เช่นsource_path: extensions/codex - pin workflow ที่ใช้ซ้ำได้กับ tag ที่เสถียรหรือ commit SHA แบบเต็ม อย่ารันการเผยแพร่ release จาก
@main pull_requestควรใช้dry_run: trueเพื่อให้ CI ไม่สร้างผลข้างเคียง- การเผยแพร่จริงควรถูกจำกัดไว้กับเหตุการณ์ที่เชื่อถือได้ เช่น
workflow_dispatchหรือการ push tag - trusted publishing โดยไม่มี secret ใช้ได้เฉพาะบน
workflow_dispatch; การ push tag ยังคงต้องใช้clawhub_token - เก็บ
clawhub_tokenให้พร้อมใช้งานสำหรับการเผยแพร่ครั้งแรก แพ็กเกจที่ไม่น่าเชื่อถือ หรือการเผยแพร่ฉุกเฉิน - workflow จะอัปโหลดผลลัพธ์ JSON เป็น artifact และเปิดเผยเป็น output ของ workflow
package trusted-publisher get <name>
- แสดง config trusted publisher ของ GitHub Actions สำหรับแพ็กเกจ
- ใช้คำสั่งนี้หลังตั้งค่า config เพื่อยืนยัน repository, ชื่อไฟล์ workflow และ environment pin แบบไม่บังคับ
- flag:
--json: ผลลัพธ์ที่เครื่องอ่านได้
ตัวอย่าง:
clawhub package trusted-publisher get @openclaw/example-pluginpackage trusted-publisher set <name>
- แนบหรือแทนที่ config trusted publisher ของ GitHub Actions สำหรับแพ็กเกจ ที่มีอยู่แล้ว
- ต้องสร้างแพ็กเกจก่อนผ่าน
clawhub package publishแบบปกติที่ใช้การยืนยันตัวตน ด้วยตนเองหรือ token - หลังตั้งค่า config แล้ว การเผยแพร่ผ่าน GitHub Actions ที่รองรับในอนาคตสามารถใช้ OIDC/trusted publishing โดยไม่ต้องใช้ token ClawHub ที่มีอายุยาว
--repository <repo>ต้องเป็นowner/repo--workflow-filename <file>ต้องตรงกับชื่อไฟล์ workflow ใน.github/workflows/--environment <name>เป็นตัวเลือกเสริม เมื่อกำหนดค่าแล้ว environment ของ GitHub Actions ใน claim ของ OIDC ต้องตรงกันทุกประการ- ClawHub จะตรวจสอบ repository GitHub ที่กำหนดค่าไว้เมื่อรันคำสั่งนี้ repository สาธารณะสามารถตรวจสอบผ่านเมตาดาต้า GitHub สาธารณะได้ ส่วน repository ส่วนตัวต้องให้ ClawHub มีสิทธิ์เข้าถึง GitHub repository นั้น เช่น ผ่านการติดตั้ง GitHub App ของ ClawHub ในอนาคต หรือ integration GitHub อื่นที่ได้รับอนุญาต
- flag:
--repository <repo>: repository GitHub เช่นopenclaw/example-plugin--workflow-filename <file>: ชื่อไฟล์ workflow เช่นpackage-publish.yml--environment <name>: environment ของ GitHub Actions ที่ต้องตรงกันทุกประการแบบไม่บังคับ--json: ผลลัพธ์ที่เครื่องอ่านได้
ตัวอย่าง:
clawhub package trusted-publisher set @openclaw/example-plugin \ --repository openclaw/example-plugin \ --workflow-filename package-publish.yml \ --environment releasepackage trusted-publisher delete <name>
- ลบ config trusted publisher ออกจากแพ็กเกจ
- ใช้เป็น rollback หากต้องปิดใช้งานหรือสร้าง workflow, repository หรือ environment pin ใหม่
- การเผยแพร่จริงในอนาคตต้องใช้การเผยแพร่แบบยืนยันตัวตนตามปกติจนกว่าจะตั้งค่า config อีกครั้ง
- flag:
--json: ผลลัพธ์ที่เครื่องอ่านได้
ตัวอย่าง:
clawhub package trusted-publisher delete @openclaw/example-plugintelemetry การติดตั้ง
- ส่งหลังจาก
clawhub install <slug>เมื่อเข้าสู่ระบบแล้ว เว้นแต่ ตั้งค่าCLAWHUB_DISABLE_TELEMETRY=1 - การรายงานเป็นแบบ best-effort คำสั่งติดตั้งจะไม่ล้มเหลวหาก telemetry ไม่พร้อมใช้งาน
- รายละเอียด:
docs/telemetry.md