URI Scheme
Every primitive instance in CKP is addressable via a claw:// URI. This enables unambiguous references between tools, skills, swarm peers, and registry packages.
Canonical forms
Section titled “Canonical forms”CKP defines two canonical URI forms:
References a primitive defined in the current manifest or available on the local runtime:
claw://local/{kind}/{name}claw://local/{kind}/{name}@{version}Examples:
claw://local/identity/research-assistantclaw://local/tool/web-fetchclaw://local/tool/[email protected]claw://local/sandbox/container-sandboxclaw://local/world-model/environment-modelRegistry
Section titled “Registry”References a primitive published to a remote registry:
claw://registry/{namespace}/{name}@{version}Examples:
claw://registry/community-skills/[email protected]claw://registry/datastrat/[email protected]Registry URIs MUST include a version. The registry endpoint is configured at the runtime level, not in the protocol.
Alias form (manifest only)
Section titled “Alias form (manifest only)”For ergonomics, manifests support a shortened alias form:
claw://{kind}/{name}This resolves to claw://local/{kind}/{name} before any wire transmission.
Examples:
# In claw.yaml -- alias form for readabilitytools: - name: web-fetch sandbox: claw://sandbox/network-sandbox # alias policy: claw://policy/standard-policy # aliasAlias URIs MUST NOT appear in JSON-RPC messages. The runtime resolves them to canonical form during the INIT phase.
ABNF grammar
Section titled “ABNF grammar”The URI scheme follows RFC 5234 (ABNF):
claw-uri = claw-local / claw-registry
claw-local = "claw://local/" kind "/" name [ "@" version ]claw-registry = "claw://registry/" namespace "/" name "@" version
kind = "identity" / "provider" / "channel" / "tool" / "skill" / "memory" / "world-model" / "sandbox" / "policy" / "swarm" / "telemetry"
name = 1*63( ALPHA / DIGIT / "-" )namespace = 1*63( ALPHA / DIGIT / "-" / "." )
version = semversemver = 1*DIGIT "." 1*DIGIT "." 1*DIGIT [ "-" pre-release ]pre-release = 1*( ALPHA / DIGIT / "-" / "." )Validation rules
Section titled “Validation rules”- Kind MUST be one of the 11 primitive types. Unknown kinds are invalid.
- Name MUST be 1-63 characters, alphanumeric plus hyphens.
- Registry URIs MUST include a version. Local URIs MAY omit it.
- Alias URIs MUST be resolved before wire transmission. A runtime that sends an alias URI over JSON-RPC is non-conformant.
- Names are case-sensitive.
Web-Fetchandweb-fetchare different primitives.
Registry resolution
Section titled “Registry resolution”The runtime resolves registry URIs using configured registry endpoints:
# Runtime configuration (not part of the manifest)registries: - name: default url: https://registry.clawkernel.dev/v1 - name: internal url: https://registry.company.com/v1Resolution order:
- Check local manifest for a matching primitive
- Query configured registries in order
- Return the first match or fail with an error
Registry resolution happens during the INIT phase. By the time the agent reaches READY, all URIs are fully resolved.
Quick reference
Section titled “Quick reference”| Form | Pattern | Wire Valid | Example |
|---|---|---|---|
| Local | claw://local/{kind}/{name} | Yes | claw://local/tool/web-fetch |
| Local + version | claw://local/{kind}/{name}@{ver} | Yes | claw://local/tool/[email protected] |
| Registry | claw://registry/{ns}/{name}@{ver} | Yes | claw://registry/community/[email protected] |
| Alias | claw://{kind}/{name} | No (manifest only) | claw://sandbox/network-sandbox |