Skip to content

Commit cde99c3

Browse files
docs: add ClawHub publishing page
1 parent 9e1e597 commit cde99c3

1 file changed

Lines changed: 96 additions & 0 deletions

File tree

docs/clawhub/publishing.md

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
---
2+
summary: "How ClawHub publishing works for skills, plugins, owners, scopes, releases, and review."
3+
read_when:
4+
- Publishing a skill or plugin
5+
- Debugging owner or package scope errors
6+
- Adding publish UI, CLI, or backend behavior
7+
---
8+
9+
# Publishing on ClawHub
10+
11+
ClawHub publishing is owner-scoped: every publish targets a publisher, and the
12+
server decides whether the signed-in user is allowed to publish there.
13+
14+
## Owners
15+
16+
An owner is a ClawHub publisher handle, such as `@alice` or `@openclaw`.
17+
Personal owners are created for users. Org owners can have multiple members.
18+
19+
When you publish, you either use your personal owner or choose an org owner
20+
where you have publisher access.
21+
22+
## Skills
23+
24+
Skills are published from a skill folder. The public page is:
25+
26+
```text
27+
https://clawhub.ai/<owner>/<slug>
28+
```
29+
30+
Example:
31+
32+
```text
33+
https://clawhub.ai/alice/review-helper
34+
```
35+
36+
The publish request includes the selected owner, slug, version, changelog, and
37+
files. The server verifies that the actor can publish as that owner before it
38+
creates the release.
39+
40+
## Plugins
41+
42+
Plugins use npm-style package names. Scoped package names include the owner in
43+
the first part of the name:
44+
45+
```text
46+
@owner/package-name
47+
```
48+
49+
The scope must match the selected publish owner. If your package is named
50+
`@openclaw/dronzer`, it can only be published as `@openclaw`. If you publish as
51+
`@vintageayu`, rename the package to `@vintageayu/dronzer`.
52+
53+
This prevents a package from claiming an org namespace that the publisher does
54+
not control.
55+
56+
## Release Flow
57+
58+
1. The UI, CLI, or GitHub workflow gathers package metadata and files.
59+
2. The publish request is sent to ClawHub with the selected owner.
60+
3. The server validates owner permissions, package scope, package name, version,
61+
file limits, and source metadata.
62+
4. ClawHub stores the release and starts automated security checks.
63+
5. New releases are hidden from normal install/download surfaces until review
64+
and verification finish.
65+
66+
If validation fails, the release is not created.
67+
68+
## FAQ
69+
70+
### Package scope must match selected owner
71+
72+
If the package scope and selected owner do not match, ClawHub rejects the
73+
publish:
74+
75+
```text
76+
Package scope "@openclaw" must match selected owner "@vintageayu".
77+
Publish as "@openclaw" or rename this package to "@vintageayu/dronzer".
78+
```
79+
80+
To fix it, either choose the owner named by the package scope, or rename the
81+
package so the scope matches the owner you can publish as.
82+
83+
If the package name already has the right scope but the package is owned by the
84+
wrong publisher, transfer ownership instead:
85+
86+
```sh
87+
clawhub package transfer @opik/opik-openclaw --to opik
88+
```
89+
90+
Use package transfer only when you have admin access to both the current package
91+
owner and the destination publisher. It does not let you publish into a scope you
92+
cannot manage.
93+
94+
This protects org namespaces. A package named `@openclaw/dronzer` claims the
95+
`@openclaw` namespace, so only publishers with access to the `@openclaw` owner
96+
can publish it.

0 commit comments

Comments
 (0)