Skip to main content

命令列介面

命令列介面套件:clawhub,執行檔:clawhub 使用 npm 或 pnpm 全域安裝:
npm i -g clawhub
# or
pnpm add -g clawhub
然後驗證它:
clawhub --help
clawhub login
clawhub whoami

全域旗標

  • --workdir <dir>:工作目錄(預設:cwd;若已設定,則退回使用 Clawdbot 工作區)
  • --dir <dir>:workdir 下的安裝目錄(預設:skills
  • --site <url>:瀏覽器登入的基底 URL(預設:https://clawhub.ai
  • --registry <url>:API 基底 URL(預設:自動探索,否則為 https://clawhub.ai
  • --no-input:停用提示
環境變數對應項:
  • CLAWHUB_SITE(舊版 CLAWDHUB_SITE
  • CLAWHUB_REGISTRY(舊版 CLAWDHUB_REGISTRY
  • CLAWHUB_WORKDIR(舊版 CLAWDHUB_WORKDIR

HTTP Proxy

命令列介面會遵循標準 HTTP Proxy 環境變數,供位於企業 Proxy 或受限網路後方的系統使用:
  • HTTPS_PROXY / https_proxy
  • HTTP_PROXY / http_proxy
  • NO_PROXY / no_proxy
設定任何這些變數時,命令列介面會透過指定的 Proxy 路由對外請求。HTTPS_PROXY 用於 HTTPS 請求,HTTP_PROXY 用於純 HTTP。NO_PROXY / no_proxy 會被遵循,以便針對特定主機或網域略過 Proxy。 這在直接對外連線遭封鎖的系統上是必要的(例如 Docker 容器、僅能透過 Proxy 上網的 Hetzner VPS、企業防火牆)。 範例:
export HTTPS_PROXY=http://proxy.example.com:3128
export NO_PROXY=localhost,127.0.0.1
clawhub search "my query"
未設定任何 Proxy 變數時,行為不變(直接連線)。

設定檔

儲存你的 API 權杖與快取的 registry URL。
  • 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 存在,命令列介面會重用舊版路徑
  • 覆寫:CLAWHUB_CONFIG_PATH(舊版 CLAWDHUB_CONFIG_PATH

命令

login / auth login

  • 預設:開啟瀏覽器到 <site>/cli/auth,並透過 loopback callback 完成。
  • 無介面:clawhub login --token clh_...
  • 遠端/無介面互動:clawhub login --device 會列印代碼,並在你於 <site>/cli/device 授權時等待。

whoami

  • 透過 /api/v1/whoami 驗證已儲存的權杖。

token

  • 將已儲存的 API 權杖列印到 stdout。
  • 適合將本機登入權杖以管線傳入 CI secret 設定命令。

star <skill> / unstar <skill>

  • 從你的精選中新增/移除技能。
  • 呼叫 POST /api/v1/stars/<slug>DELETE /api/v1/stars/<slug>
  • --yes 會略過確認。

search <query...>

  • 呼叫 /api/v1/search?q=...
  • 輸出包含技能 slug、擁有者 handle、顯示名稱與相關性分數。
  • 搜尋會優先考量精確的 slug/名稱 token 符合,再考量下載熱門度。像 map 這樣的獨立 slug token,會比 amap 內的子字串更強烈地符合 personal-map
  • 熱門度只是小幅排序先驗,並不保證排在最前。
  • 如果某項技能應該出現但沒有,請在登入後執行 clawhub inspect @owner/slug,在重新命名中繼資料前先檢查擁有者可見的審核診斷。

explore

  • 透過 /api/v1/skills?limit=...&sort=createdAt 列出最新技能(依 createdAt 遞減排序)。
  • 旗標:
    • --limit <n>(1-200,預設:25)
    • --sort newest|updated|rating|downloads|trending(預設:newest)。舊版安裝排序別名仍可相容使用。
    • --json(機器可讀輸出)
  • 輸出:<slug> v<version> <age> <summary>(摘要會截斷為 50 個字元)。

inspect @owner/slug

  • 在不安裝的情況下擷取技能中繼資料與版本檔案。
  • --version <version>:檢查特定版本(預設:latest)。
  • --tag <tag>:檢查帶有標籤的版本(例如 latest)。
  • --versions:列出版本歷史(第一頁)。
  • --limit <n>:可列出的最大版本數(1-200)。
  • --files:列出所選版本的檔案。
  • --file <path>:擷取原始檔案內容(僅限文字檔;200KB 限制)。
  • --json:機器可讀輸出。

install @owner/slug

  • 解析指定擁有者與技能的最新版本。
  • 透過 /api/v1/download 下載 zip。
  • 解壓縮到 <workdir>/<dir>/<slug>
  • 拒絕覆寫已釘選技能;請先執行 clawhub unpin <skill>
  • 寫入:
    • <workdir>/.clawhub/lock.json(舊版 .clawdhub
    • <skill>/.clawhub/origin.json(舊版 .clawdhub

uninstall <skill>

  • 移除 <workdir>/<dir>/<slug>,並刪除 lockfile 項目。
  • 登入時會以 best-effort telemetry 傳送資料,以便停用目前的安裝計數。
  • 互動式:要求確認。
  • 非互動式(--no-input):需要 --yes

list

  • 讀取 <workdir>/.clawhub/lock.json(舊版 .clawdhub)。
  • 在透過 clawhub pin 凍結的技能旁顯示 pinned,包含可選原因。

pin <skill>

  • 在 lockfile 中將已安裝技能標記為已釘選。
  • --reason <text> 記錄技能被凍結的原因。
  • 已釘選技能會被 update --all 略過,且直接 update <skill> 會被拒絕。
  • 已釘選技能也會拒絕 install --force,避免本機位元組意外被替換。

unpin <skill>

  • 從已安裝技能移除 lockfile 釘選,讓未來更新可以修改它。

update [@owner/slug] / update --all

  • 從本機檔案計算 fingerprint。
  • 如果 fingerprint 符合已知版本:不提示。
  • 如果 fingerprint 不符合:
    • 預設拒絕
    • 使用 --force 覆寫(若為互動式,則提示)
  • 已釘選技能永遠不會被 --force 更新。
  • update <skill> 會對已釘選技能快速失敗,並告訴你先執行 clawhub unpin <skill>
  • update --all 會略過已釘選 slug,並列印哪些保持凍結的摘要。

skill publish <path>

  • 比較本機 bundle fingerprint 與 ClawHub;內容已發布時會成功結束。
  • 新技能預設為 1.0.0;已變更技能預設為下一個 patch 版本。
  • --version <version> 會明確選取版本,並在內容符合既有版本時仍然發布。
  • --dry-run 會在不上傳的情況下解析發布;--json 會列印機器可讀結果。
  • --owner <handle> 會在執行者具備 publisher 存取權時,以組織/使用者 publisher handle 發布。
  • --migrate-owner 會在發布新版本時,將既有技能移至 --owner。需要兩個 publisher 的管理員/擁有者存取權。
  • 擁有者與審查行為在 docs/publishing.md 中說明。
  • 發布技能表示它會在 ClawHub 上以 MIT-0 發行。
  • 已發布技能可免費使用、修改與再散布,無需署名。
  • ClawHub 不支援付費技能或按技能定價。
  • 舊版別名:publish <path>
clawhub skill publish ./my-skill --dry-run
clawhub skill publish ./my-skill
clawhub skill publish ./my-skill --version 2.0.0

GitHub Actions

ClawHub 的可重用 skill-publish.yml workflow 會對一個 skill_path 呼叫 skill publish,或對 root 下每個直接技能資料夾呼叫(預設:skills)。它會略過未變更技能,並使用相同的自動 patch 版本行為。 設定 dry_run: true 可在沒有權杖的情況下預覽。實際發布需要 clawhub_token secret。

sync

  • 掃描目前 workdir、已設定的 skills 目錄,以及任何 --root <dir> 資料夾,尋找包含 SKILL.mdskill.md 的本機技能資料夾。
  • 比較每個本機技能 fingerprint 與 ClawHub,並只發布新的或已變更的技能。
  • 新技能發布為 1.0.0;已變更技能預設發布為下一個 patch 版本。針對應以更大 semver 步幅移動的更新批次,請使用 --bump minor|major
  • --dry-run 顯示發布計畫而不上傳;--json 會列印機器可讀計畫。
  • --all 會在不提示的情況下發布每個新的或已變更技能。沒有 --all 時,互動式終端機可讓你選取要發布的技能。
  • --owner <handle> 會在執行者具備 publisher 存取權時,以組織/使用者 publisher handle 發布。
  • sync 只會單向發布。它不會安裝、更新、下載,或回報安裝/下載 telemetry。
clawhub sync --all --dry-run
clawhub sync --all
clawhub sync --root ./skills --owner openclaw --bump minor

scan --slug <slug>

  • 需要 clawhub login
  • 透過 POST /api/v1/skills/-/scan 執行 ClawHub ClawScan,然後輪詢直到掃描進入終端狀態。
  • 掃描是非同步的,可能需要一些時間完成。排隊期間,終端機 spinner 會顯示目前的優先掃描位置,以及前方還有多少掃描。
  • 已發布掃描需要擁有權或 publisher 管理存取權。版主/管理員可透過 clawhub-admin 使用相同後端。
  • --update 只有搭配 --slug 時有效;它會將成功的已發布掃描結果寫回所選版本。
  • --output <file.zip> 會下載完整報告封存,包含 manifest.jsonclawscan.jsonskillspector.jsonstatic-analysis.jsonvirustotal.jsonREADME.md
  • --json 會列印完整輪詢回應以供自動化使用。
  • 不再支援本機路徑掃描。請上傳新版本,然後使用 scan download 擷取該提交版本已儲存的掃描結果。
clawhub scan --slug gifgrep
clawhub scan --slug gifgrep --version 1.2.3
clawhub scan --slug gifgrep --update --output report.zip

scan download <name>

  • 需要 clawhub login
  • 下載已提交技能或外掛版本的已儲存掃描報告 ZIP,包含被 ClawHub 安全檢查封鎖或隱藏的版本。
  • 技能下載使用技能 slug,且預設為 --kind skill
  • 外掛下載使用套件名稱,且需要 --kind plugin
  • --version 是必要的,讓作者檢查 ClawHub 封鎖的確切提交版本。
  • --output <file.zip> 選擇目的地路徑。
clawhub scan download gifgrep --version 1.2.3
clawhub scan download @scope/demo --version 2.0.0 --kind plugin --output report.zip

GitHub Actions

ClawHub 在 /.github/workflows/skill-publish.yml 提供官方可重用 workflow,供技能 repo 與 catalog repo 使用。 典型 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 對 catalog repo 預設為 skills
  • 傳入 skill_path: skills/review-helper 可處理單一技能資料夾。
  • owner 對應到命令列介面的 --owner 旗標;省略它則以已驗證使用者身分發布。
  • V1 技能發布使用 clawhub_token;GitHub OIDC trusted publishing 目前僅適用於套件。

delete <skill>

  • 不帶 --version 時,軟刪除一個技能(擁有者、版主或管理員)。
  • 呼叫 DELETE /api/v1/skills/{slug}
  • 由擁有者發起的軟刪除會保留該 slug 30 天;命令會列印到期時間。
  • --version <version> 會透過失敗即關閉、 版本專屬的路由,永久刪除一個已擁有且非最新的版本。 已刪除的版本無法還原或重新發布。刪除目前最新版本前,請先發布替代版本。平台工作人員不會在此僅限版本的流程中繞過擁有權。
  • --reason <text> 會在整個技能的軟刪除和稽核記錄中記錄一則審核備註。
  • --note <text>--reason 的別名。
  • --yes 會略過確認。

undelete <skill>

  • 還原隱藏的技能(擁有者、版主或管理員)。
  • 沒有版本取消刪除;永久刪除的版本無法還原。
  • 呼叫 POST /api/v1/skills/{slug}/undelete
  • --reason <text> 會在技能和稽核記錄中記錄一則審核備註。
  • --note <text>--reason 的別名。
  • --yes 會略過確認。

hide <skill>

  • 隱藏一個技能(擁有者、版主或管理員)。
  • delete 的別名。

unhide <skill>

  • 取消隱藏一個技能(擁有者、版主或管理員)。
  • undelete 的別名。

skill rename <skill> <new-name>

  • 重新命名已擁有的技能,並保留先前的 slug 作為重新導向別名。
  • 呼叫 POST /api/v1/skills/{slug}/rename
  • --yes 會略過確認。

skill merge <source> <target>

  • 將一個已擁有的技能合併到另一個已擁有的技能。
  • 來源 slug 會停止公開列出,並成為目標的重新導向別名。
  • 呼叫 POST /api/v1/skills/{sourceSlug}/merge
  • --yes 會略過確認。

transfer

  • 擁有權轉移工作流程。
  • 轉移給使用者 handle 會建立一個待處理請求,由接收者接受。
  • 轉移給組織/發布者 handle 時,只有在執行者同時具備目前擁有者與目的地發布者的 管理員存取權時,才會立即套用。
  • 子命令:
    • 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}/transfer
    • POST /api/v1/skills/{slug}/transfer/accept
    • POST /api/v1/skills/{slug}/transfer/reject
    • POST /api/v1/skills/{slug}/transfer/cancel
    • GET /api/v1/transfers/incoming
    • GET /api/v1/transfers/outgoing

package explore [query...]

  • 透過 GET /api/v1/packagesGET /api/v1/packages/search 瀏覽或搜尋統一套件目錄。
  • 請將此用於外掛和其他套件家族項目;頂層 search 仍是技能搜尋介面。
  • 旗標:
    • --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-plugin
clawhub package explore --family code-plugin --os darwin --requires-desktop
clawhub package explore --family code-plugin --artifact-kind npm-pack
clawhub package explore --npm-mirror
clawhub package explore episodic-claw --family code-plugin

package inspect <name>

  • 擷取套件中繼資料而不安裝。
  • 請將此用於外掛中繼資料、相容性、驗證、來源,以及版本/檔案檢查。
  • --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 integrity、 npm shasum,以及 tarball 的 package.json 名稱/版本。
  • 舊版 ZIP 版本會透過舊版 ZIP 路由下載。
  • 旗標:
    • --version <version>:下載特定版本。
    • --tag <tag>:下載帶有標籤的版本(預設:latest)。
    • -o, --output <path>:輸出檔案或目錄。
    • --force:覆寫現有輸出檔案。
    • --json:機器可讀輸出。
範例:
clawhub package download @openclaw/example-plugin --tag latest
clawhub package download @openclaw/example-plugin --version 1.2.3 -o artifacts/

package verify <file>

  • 為本機成品計算 ClawHub SHA-256、npm sha512 integrity 和 npm shasum。
  • 搭配 --package 時,會從 ClawHub 解析預期中繼資料,並將 本機檔案與已發布的成品中繼資料比較。
  • 搭配直接摘要旗標時,無需網路查詢即可驗證。
  • 旗標:
    • --package <name>:用於解析預期成品中繼資料的套件名稱。
    • --version <version>--tag <tag>:預期的套件版本。
    • --sha256 <hex>:預期的 ClawHub SHA-256。
    • --npm-integrity <sri>:預期的 npm integrity。
    • --npm-shasum <sha1>:預期的 npm shasum。
    • --json:機器可讀輸出。
範例:
clawhub package verify ./example-plugin-1.2.3.tgz --package @openclaw/example-plugin --version 1.2.3
clawhub package verify ./example-plugin-1.2.3.tgz --sha256 <hex>

package validate <source>

  • 針對本機外掛套件 資料夾執行 ClawHub 命令列介面內建的 Plugin Inspector。
  • 預設為離線/靜態驗證,不會定位或匯入本機 OpenClaw checkout。
  • 嚴重相容性錯誤會以非零狀態結束。僅警告的發現項目會列印出來,但 以零狀態結束。
  • 旗標:
    • --out <dir>:將 Plugin Inspector 報告寫入此目錄。
    • --openclaw <path>:針對明確的本機 OpenClaw checkout 進行檢查。
    • --runtime:啟用執行階段擷取;匯入外掛程式碼。
    • --allow-execute:允許在隔離工作區中進行執行階段擷取。
    • --no-mock-sdk:在執行階段擷取期間停用模擬的 OpenClaw SDK。
    • --json:機器可讀輸出。
範例:
clawhub package validate ./example-plugin
如果驗證回報套件、manifest、SDK 匯入或成品發現項目,請參閱 外掛驗證修正,然後重新執行命令。

package delete <name>

  • 不帶 --version 時,軟刪除一個套件及所有發布版本。
  • --version <version> 會透過失敗即關閉、 版本專屬的路由,永久刪除一個已擁有且非最新的發布版本。 已刪除的版本無法還原或重新發布。刪除目前最新版本前,請先發布替代版本。此僅限版本的流程需要套件擁有者或組織發布者 管理員;平台工作人員不會繞過套件擁有權。
  • 整個套件的軟刪除需要套件擁有者、組織發布者擁有者/管理員、平台 版主或平台管理員。
  • 旗標:
    • --version <version>:永久刪除一個非最新版本。
    • --yes:略過確認。
    • --json:機器可讀輸出。
範例:
clawhub package delete @openclaw/example-plugin --yes
clawhub package delete @openclaw/example-plugin --version 1.2.3 --yes

package undelete <name>

  • 還原已軟刪除的套件和發布版本。
  • 沒有版本取消刪除;永久刪除的版本無法還原。
  • 需要套件擁有者、組織發布者擁有者/管理員、平台版主, 或平台管理員。
  • 呼叫 POST /api/v1/packages/{name}/undelete
  • 旗標:
    • --yes:略過確認。
    • --json:機器可讀輸出。
範例:
clawhub package undelete @openclaw/example-plugin --yes

package transfer <name>

  • 將套件轉移給另一個發布者。
  • 需要同時具備目前套件擁有者和目的地 發布者的管理員存取權,除非由平台管理員執行。
  • 具命名空間的套件名稱必須轉移給相符的命名空間擁有者。
  • 呼叫 POST /api/v1/packages/{name}/transfer
  • 旗標:
    • --to <owner>:目的地發布者 handle。
    • --reason <text>:選用的稽核原因。
    • --json:機器可讀輸出。
範例:
clawhub package transfer @openclaw/example-plugin --to openclaw

package 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-plugin

package readiness <name>

  • 檢查套件是否已準備好供未來 OpenClaw 使用。
  • 呼叫 GET /api/v1/packages/{name}/readiness
  • 回報官方狀態、ClawPack 可用性、成品摘要、 來源出處、OpenClaw 相容性、主機目標、環境中繼資料 和掃描狀態的阻擋項目。
  • 旗標:
    • --json:機器可讀輸出。
範例:
clawhub package readiness @openclaw/example-plugin

package migration-status <name>

  • 顯示可取代 bundled OpenClaw 外掛的套件之面向操作員的遷移狀態。
  • 呼叫與 package readiness 相同的計算後 readiness 端點,但會列印 以遷移為重點的狀態、最新版本、官方套件狀態、檢查和 阻擋項目。
  • 旗標:
    • --json:機器可讀輸出。
範例:
clawhub package migration-status @openclaw/example-plugin

publisher create <handle>

  • 建立由已驗證使用者擁有的組織發布者。
  • handle 會正規化為小寫,並可帶或不帶 @ 傳入。
  • 新建立的組織發布者預設不是受信任/官方。
  • 如果 handle 已被現有發布者、使用者或保留路由使用,則會失敗。
clawhub publisher create opik --display-name "Opik"

package publish <source>

  • 透過 POST /api/v1/packages 發佈程式碼外掛或 bundle 外掛。
  • <source> 可接受:
    • 本機資料夾路徑:./my-plugin
    • 本機 ClawPack npm-pack tarball:./my-plugin-1.2.3.tgz
    • GitHub repo:owner/repoowner/repo@ref
    • GitHub URL:https://github.com/owner/repo
  • 中繼資料會從 package.jsonopenclaw.plugin.json,以及 真正的 OpenClaw bundle 標記自動偵測,例如 .codex-plugin/plugin.json.claude-plugin/plugin.json.cursor-plugin/plugin.json
  • .tgz 來源會被視為 ClawPack。命令列介面會上傳確切的 npm-pack 位元組,並只使用解出的 package/ 內容進行驗證與 中繼資料預先填入。
  • 程式碼外掛資料夾會先封裝成 ClawPack npm tarball 再上傳,讓 OpenClaw 安裝項目可以驗證確切成品。bundle 外掛資料夾仍然 使用解出檔案的發佈路徑。
  • 對於 GitHub 來源,來源歸屬會從 repo、解析後的 commit、ref 和子路徑自動填入。
  • 對於本機資料夾,當 origin remote 指向 GitHub 時,來源歸屬會從本機 git 自動偵測。
  • 外部程式碼外掛必須明確宣告 openclaw.compat.pluginApiopenclaw.build.openclawVersion。 頂層 package.json.version 不會作為發佈驗證的 fallback。
  • --dry-run 會預覽解析後的發佈 payload,而不上傳。
  • --json 會輸出 CI 可讀取的機器可讀格式。
  • 當執行者具有 publisher 存取權時,--owner <handle> 會以使用者或組織 publisher handle 發佈。
  • scoped package 名稱必須符合選取的 owner。請參閱 docs/publishing.md
  • 既有旗標(--family--name--version--source-repo--source-commit--source-ref--source-path)仍可作為覆寫使用。
  • 私有 GitHub repo 需要 GITHUB_TOKEN
clawhub package publish ./plugin.tgz --owner openclaw

建議的本機流程

先使用 --dry-run,如此你可以在建立正式 release 前確認解析後的 package 中繼資料和 來源歸屬:
npm pack
clawhub package publish ./my-plugin-1.2.3.tgz --family code-plugin --dry-run
clawhub package publish ./my-plugin-1.2.3.tgz --family code-plugin

本機資料夾流程

對於程式碼外掛,資料夾發佈會從 package 資料夾建置並上傳 ClawPack 成品:
clawhub package publish ./my-plugin --family code-plugin --dry-run
clawhub package publish ./my-plugin --family code-plugin

--family code-plugin 的最小 package.json

外部程式碼外掛需要在 package.json 中提供少量 OpenClaw 中繼資料。這個最小 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.pluginApi
  • openclaw.build.openclawVersion
注意事項:
  • package.json.version 是你的 package release 版本,但它不會作為 OpenClaw 相容性/建置驗證的 fallback。
  • openclaw.hostTargetsopenclaw.environment 是選用中繼資料。 ClawHub 可能會在存在時顯示它們,但發佈時不需要。
  • 如果你想發佈 更詳細的相容性中繼資料,openclaw.compat.minGatewayVersionopenclaw.build.pluginSdkVersion 是選用附加項。
  • 如果你使用較舊的 clawhub 命令列介面 release,請先升級再發佈,讓 本機 preflight 檢查在上傳前執行。
  • 如果驗證回報 remediation code,請參閱 外掛驗證修正

GitHub Actions

ClawHub 也為外掛 repo 提供官方可重用 workflow: /.github/workflows/package-publish.yml 典型 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 repo。
  • 對於 monorepo,請傳入 source_path,讓 workflow 發佈外掛 package 資料夾,例如 source_path: extensions/codex
  • 將可重用 workflow pin 到穩定 tag 或完整 commit SHA。不要從 @main 執行 release 發佈。
  • pull_request 應使用 dry_run: true,讓 CI 維持不污染狀態。
  • 真正的發佈應限制在受信任事件,例如 workflow_dispatch 或 tag pushes。
  • 不使用 secret 的受信任發佈只適用於 workflow_dispatch;tag pushes 仍需要 clawhub_token
  • 保留 clawhub_token 供首次發佈、不受信任 package,或 break-glass 發佈使用。
  • workflow 會將 JSON 結果作為 artifact 上傳,並將其公開為 workflow outputs。

package trusted-publisher get <name>

  • 顯示 package 的 GitHub Actions 受信任 publisher 設定。
  • 設定 config 後使用此命令,以確認 repository、workflow filename, 以及選用的 environment pin。
  • 旗標:
    • --json:機器可讀輸出。
範例:
clawhub package trusted-publisher get @openclaw/example-plugin

package trusted-publisher set <name>

  • 為既有 package 附加或取代 GitHub Actions 受信任 publisher 設定。
  • package 必須先透過一般手動或 token-authenticated clawhub package publish 建立。
  • 設定 config 後,未來支援的 GitHub Actions 發佈可以使用 OIDC/受信任發佈,而不需要長期有效的 ClawHub token。
  • --repository <repo> 必須是 owner/repo
  • --workflow-filename <file> 必須符合 .github/workflows/ 中的 workflow 檔名。
  • --environment <name> 是選用項。設定後,OIDC claim 中的 GitHub Actions environment 必須完全相符。
  • ClawHub 會在此命令執行時驗證已設定的 GitHub repository。 公開 repository 可透過公開 GitHub 中繼資料驗證。私有 repository 需要 ClawHub 具有該 repository 的 GitHub 存取權,例如 透過未來的 ClawHub GitHub App 安裝或其他已授權的 GitHub 整合。
  • 旗標:
    • --repository <repo>:GitHub repository,例如 openclaw/example-plugin
    • --workflow-filename <file>:workflow 檔名,例如 package-publish.yml
    • --environment <name>:選用的 exact-match GitHub Actions environment。
    • --json:機器可讀輸出。
範例:
clawhub package trusted-publisher set @openclaw/example-plugin \
  --repository openclaw/example-plugin \
  --workflow-filename package-publish.yml \
  --environment release

package trusted-publisher delete <name>

  • 從 package 移除受信任 publisher 設定。
  • 如果 workflow、repository 或 environment pin 需要 停用或重新建立,請將此作為 rollback 使用。
  • 未來真正發佈必須使用一般 authenticated publishing,直到再次設定 config。
  • 旗標:
    • --json:機器可讀輸出。
範例:
clawhub package trusted-publisher delete @openclaw/example-plugin

安裝遙測

  • 登入時,在 clawhub install <slug> 後傳送,除非 已設定 CLAWHUB_DISABLE_TELEMETRY=1
  • 回報採 best-effort。若 telemetry 不可用,install 命令不會失敗。
  • 詳情:docs/telemetry.md