Publishing
Publishing sends a skill folder or plugin package to ClawHub under the owner you choose. ClawHub checks that your token can publish for that owner, validates the metadata, name, version, files, and source information, then stores the release and starts automated security checks. If validation fails, nothing is published. New releases may also stay out of normal install and download surfaces until review finishes.Skills
The simplest publishing path is the CLI. Sign in, then publish a local skill folder:--owner <handle> when publishing to an org owner. Omit it to publish as
the authenticated user. Publishing skips unchanged content. A new skill starts
at 1.0.0, and later changes automatically publish the next patch version. Pass
--version only when you need an explicit version.
For catalog repos, use ClawHub’s reusable
skill-publish.yml workflow.
It calls skill publish for each immediate skill folder under root (default:
skills), or only the folder supplied as skill_path.
dry_run: true to preview new and changed skills without publishing.
Plugins
Plugins use npm-style package names. Scoped package names include the owner in the first part of the name:@openclaw/dronzer, it can only be published as @openclaw. If you publish as
@vintageayu, rename the package to @vintageayu/dronzer.
This prevents a package from claiming an org namespace that the publisher does
not control.
If you are the rightful owner of an org, brand, package scope, owner handle, or
namespace that is already claimed or reserved on ClawHub, open an
Org / Namespace Claim issue
with public, non-sensitive proof. See
Org and Namespace Claims for what to include and what
to keep out of public issues.
Before Publishing a Plugin
- Pick an owner that matches the package scope.
- Include
openclaw.plugin.json. Code plugins also needpackage.jsonwithopenclaw.compat.pluginApiandopenclaw.build.openclawVersion. - To show a custom plugin card icon, add
icontoopenclaw.plugin.jsonwith any HTTPS image URL. - Include source repository and exact commit metadata, or use the CLI from a GitHub-backed checkout so it can detect them.
- Run
clawhub package validate <source>before publishing. For package, manifest, SDK import, or artifact findings, see Plugin validation fixes. - Run
clawhub package publish <source> --dry-runbefore creating a release. - Expect new releases to stay out of public install surfaces until automated security checks and verification finish.
Trusted Publishing for Packages
Package trusted publishing is a two-step setup:- Publish the package once through normal manual or token-authenticated
clawhub package publish. This creates the package row and establishes the package managers who can change its trusted publisher config. - A package manager sets the GitHub Actions trusted publisher config:
--environment <name>, the GitHub
Actions environment claim must match that name exactly.
ClawHub verifies the configured GitHub repository when trusted publisher config
is set. Public repositories can be verified through public GitHub metadata.
Private repositories require ClawHub to have GitHub access to that repository,
for example through a future ClawHub GitHub App installation or another
authorized GitHub integration.
The current reusable package publish workflow supports secretless trusted
publishing for workflow_dispatch publishes when id-token: write is
available. Tag-push real publishes still need clawhub_token, so keep
CLAWHUB_TOKEN available for tag releases, first publishes, untrusted packages,
or break-glass publishes.
Inspect or remove the config with:
FAQ
Package scope must match selected owner
If the package scope and selected owner do not match, ClawHub rejects the publish:@openclaw/dronzer claims the
@openclaw namespace, so only publishers with access to the @openclaw owner
can publish it.