mirror of
https://github.com/openclaw/openclaw.git
synced 2026-07-13 22:36:10 +00:00
Update OpenClaw ClawHub docs and user-facing copy for canonical owner-qualified skill routes.\n\nEvidence:\n- pnpm docs:list\n- pnpm test src/plugins/clawhub.test.ts src/cli/plugins-cli.install.test.ts src/gateway/server-methods/skills.clawhub.test.ts ui/src/ui/views/skills.test.ts\n- pnpm exec oxfmt --check --threads=1 docs/clawhub/cli.md docs/clawhub/publishing.md docs/cli/skills.md docs/help/faq.md docs/start/showcase.md docs/tools/creating-skills.md docs/tools/skills.md src/gateway/server-methods/skills.clawhub.test.ts src/plugins/clawhub.test.ts src/plugins/clawhub.ts ui/src/ui/views/skills.test.ts\n- git diff --check\n- exact-head hosted CI passed for 8530374388d8a73235b2ac8444b95a4a4c7d0f1c\n\nNote: repo-native scripts/pr prepare-run was attempted; local broad pnpm test was stopped after unrelated existing failures in agent/media/provider shards, while hosted exact-head CI and targeted ClawHub route/copy validation were green.
97 lines
2.9 KiB
Markdown
97 lines
2.9 KiB
Markdown
---
|
|
summary: "How ClawHub publishing works for skills, plugins, owners, scopes, releases, and review."
|
|
read_when:
|
|
- Publishing a skill or plugin
|
|
- Debugging owner or package scope errors
|
|
- Adding publish UI, CLI, or backend behavior
|
|
---
|
|
|
|
# Publishing on ClawHub
|
|
|
|
ClawHub publishing is owner-scoped: every publish targets a publisher, and the
|
|
server decides whether the signed-in user is allowed to publish there.
|
|
|
|
## Owners
|
|
|
|
An owner is a ClawHub publisher handle, such as `@alice` or `@openclaw`.
|
|
Personal owners are created for users. Org owners can have multiple members.
|
|
|
|
When you publish, you either use your personal owner or choose an org owner
|
|
where you have publisher access.
|
|
|
|
## Skills
|
|
|
|
Skills are published from a skill folder. The public page is:
|
|
|
|
```text
|
|
https://clawhub.ai/<owner>/skills/<slug>
|
|
```
|
|
|
|
Example:
|
|
|
|
```text
|
|
https://clawhub.ai/alice/skills/review-helper
|
|
```
|
|
|
|
The publish request includes the selected owner, slug, version, changelog, and
|
|
files. The server verifies that the actor can publish as that owner before it
|
|
creates the release.
|
|
|
|
## Plugins
|
|
|
|
Plugins use npm-style package names. Scoped package names include the owner in
|
|
the first part of the name:
|
|
|
|
```text
|
|
@owner/package-name
|
|
```
|
|
|
|
The scope must match the selected publish owner. If your package is named
|
|
`@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.
|
|
|
|
## Release Flow
|
|
|
|
1. The UI, CLI, or GitHub workflow gathers package metadata and files.
|
|
2. The publish request is sent to ClawHub with the selected owner.
|
|
3. The server validates owner permissions, package scope, package name, version,
|
|
file limits, and source metadata.
|
|
4. ClawHub stores the release and starts automated security checks.
|
|
5. New releases are hidden from normal install/download surfaces until review
|
|
and verification finish.
|
|
|
|
If validation fails, the release is not created.
|
|
|
|
## FAQ
|
|
|
|
### Package scope must match selected owner
|
|
|
|
If the package scope and selected owner do not match, ClawHub rejects the
|
|
publish:
|
|
|
|
```text
|
|
Package scope "@openclaw" must match selected owner "@vintageayu".
|
|
Publish as "@openclaw" or rename this package to "@vintageayu/dronzer".
|
|
```
|
|
|
|
To fix it, either choose the owner named by the package scope, or rename the
|
|
package so the scope matches the owner you can publish as.
|
|
|
|
If the package name already has the right scope but the package is owned by the
|
|
wrong publisher, transfer ownership instead:
|
|
|
|
```sh
|
|
clawhub package transfer @opik/opik-openclaw --to opik
|
|
```
|
|
|
|
Use package transfer only when you have admin access to both the current package
|
|
owner and the destination publisher. It does not let you publish into a scope you
|
|
cannot manage.
|
|
|
|
This protects org namespaces. A package named `@openclaw/dronzer` claims the
|
|
`@openclaw` namespace, so only publishers with access to the `@openclaw` owner
|
|
can publish it.
|