ClawHub
Historical reference for ClawHub (clawhub.ai), the OpenClaw skill registry whose HTTP client has since been retired from Aleph.
Status (2026-07): ClawHub is no longer reachable as a first-class source. The dedicated
src/clawhub/module has been retired; the Settings tab that pointed at it was removed and folded into Settings → Advanced. Browsing, searching, and installing ClawHub content now happens through the unified Extensions Store, which fronts the aleph-hub catalog (https://hub.heyaleph.com/catalog.json) plus the Claude / Aleph plugin marketplaces, the Official MCP Registry, and the Docker MCP Catalog. The only placeclawhubappears in current source is as aviaprovenance label on aHubCatalogentry (when an artifact traces back to its original OpenClaw upstream) and as the OpenClawClawHubSKILL.md metadata namespace that the markdown-skill loader still recognises for backward-compatible installs. This page is kept as historical reference only.
Design Philosophy (historical)
The ClawHub integration, when it shipped, followed two principles:
- Read-only access — The client fetched skills from the registry; it never uploaded or modified registry contents. Public API access did not require authentication.
- Clean type separation — Raw API types were converted to internal unified types via
Fromimplementations, keeping the HTTP layer decoupled from domain logic.
Historical HTTP Client
The retired clawhub module exposed an HTTP client and type definitions for interacting with the ClawHub skill registry at https://clawhub.ai. It has since been removed from src/; the snippets below reflect the historical API and are kept for archival reference.
ClawHubClient (historical)
pub struct ClawHubClient {
base_url: String,
client: reqwest::Client,
}
impl ClawHubClient {
pub fn new() -> Self { /* ... */ }
pub async fn browse(
&self,
category: Option<String>,
) -> Result<Vec<SkillSummary>, ClawHubError> { /* ... */ }
pub async fn search(
&self,
query: &str,
) -> Result<Vec<SkillSummary>, ClawHubError> { /* ... */ }
pub async fn download(
&self,
slug: &str,
) -> Result<Vec<u8>, ClawHubError> { /* ... */ }
}Historical behaviors:
browsefalls back tosearchwhen the browse endpoint returns empty.downloadsanitises the slug (replacing/with-) before using it in temp filenames.- All methods used
?ormap_errfor error propagation.
Historical Types
pub struct SkillSummary {
pub slug: String, // "owner/skill" format
pub name: String,
pub description: String,
pub version: String,
pub downloads: u64,
}
pub struct SkillDetail {
pub summary: SkillSummary,
pub readme: String,
pub manifest: SkillManifest,
}Historical API Operations
Browse
Lists skills by category. Falls back to search when the category endpoint returns empty.
Search
Full-text search across the registry.
Download
Fetches a skill package as a ZIP archive.
Historical Utility Functions
URL Encoding
pub fn encode_slug_path(slug: &str) -> StringPer-segment percent-encoding for use in URLs.
Version Comparison
pub fn is_newer_version(current: &str, latest: &str) -> boolCompares two semantic version strings. Falls back to string comparison for non-semver inputs.
Timestamp Conversion
pub fn unix_ms_to_rfc3339(ts: i64) -> StringConverts Unix milliseconds to RFC 3339 format. Returns empty string for invalid timestamps.
Historical Error Handling
The client used reqwest for HTTP and returned Result<T, ClawHubError> from all operations. Errors covered:
- Network failures
- HTTP non-2xx status codes
- Invalid response parsing
- Filesystem errors during download
Where ClawHub Appears in Current Code
| Location | Role |
|---|---|
src/hub/catalog_client.rs | "via": "clawhub" provenance label on HubCatalog entries whose upstream traces back to OpenClaw; the label is purely informational and never triggers a network fetch. |
src/hub/types.rs | via field on ExtensionEntry; same informational role. |
src/tools/markdown_skill/spec.rs | The OpenClaw metadata namespace (ClawHub SKILL.md compatibility) — the loader still parses legacy ClawHub-style SKILL.md frontmatter so existing skills keep installing. |
src/skill/guard.rs | Skips .clawhub.json sidecars when scanning skill directories. |
The ClawHub HTTP client itself is not present in src/; there are no clawhub.* gateway RPCs and no installer that talks to clawhub.ai.
Code Location
- Historical module:
src/clawhub/(removed) —client.rs,types.rs - Current appearances:
src/hub/catalog_client.rs,src/hub/types.rs,src/tools/markdown_skill/spec.rs,src/skill/guard.rs
See Also
- Extensions Store — The replacement: unified catalog covering Skills, Plugins, and MCP servers from the official Aleph Hub, plugin marketplaces, the MCP registry, and Docker MCP Catalog.
- Skills — How skills work within Aleph
- Extensions — Plugin architecture for adding capabilities