Skip to main content

Managing skills

The Registry Server provides API endpoints for managing skills — reusable instruction sets for AI coding agents. You can publish skills to your registry, search for existing skills, and manage their lifecycle.

Skills endpoints are available under the extension path /registry/{registryName}/v0.1/x/dev.toolhive/skills. All endpoints require authentication unless the registry is configured in anonymous mode.

Managed registry required for write operations

Publishing and deleting skills requires a managed registry. Read operations (list, get) work with all registry types.

List skills

Retrieve all skills from a registry, with optional filtering and pagination.

curl -s "https://REGISTRY_URL/registry/REGISTRY_NAME/v0.1/x/dev.toolhive/skills" \
-H "Authorization: Bearer TOKEN" | jq

Query parameters

ParameterTypeDefaultDescription
searchstring-Filter by name or description substring
statusstring-Filter by status (comma-separated, e.g. active,deprecated)
limitinteger50Maximum results per page (max 100)
cursorstring-Pagination cursor from a previous response

The response includes a metadata object with count (total matching skills) and nextCursor (for pagination).

Example: search for skills

curl -s "https://REGISTRY_URL/registry/REGISTRY_NAME/v0.1/x/dev.toolhive/skills?search=lint&status=active" \
-H "Authorization: Bearer TOKEN" | jq

Get a skill

Retrieve the latest version of a specific skill by namespace and name.

curl -s "https://REGISTRY_URL/registry/REGISTRY_NAME/v0.1/x/dev.toolhive/skills/NAMESPACE/SKILL_NAME" \
-H "Authorization: Bearer TOKEN" | jq

For example, to get the latest version of a skill named lint-fix in the io.github.user namespace:

curl -s "https://REGISTRY_URL/registry/my-registry/v0.1/x/dev.toolhive/skills/io.github.user/lint-fix" \
-H "Authorization: Bearer TOKEN" | jq

List skill versions

Retrieve all published versions of a skill.

curl -s "https://REGISTRY_URL/registry/REGISTRY_NAME/v0.1/x/dev.toolhive/skills/NAMESPACE/SKILL_NAME/versions" \
-H "Authorization: Bearer TOKEN" | jq

Get a specific version

Retrieve a specific version of a skill.

curl -s "https://REGISTRY_URL/registry/REGISTRY_NAME/v0.1/x/dev.toolhive/skills/NAMESPACE/SKILL_NAME/versions/VERSION" \
-H "Authorization: Bearer TOKEN" | jq

Publish a skill

Publish a new skill version to a managed registry. The request body is a JSON object containing the skill metadata.

curl -X POST "https://REGISTRY_URL/registry/REGISTRY_NAME/v0.1/x/dev.toolhive/skills" \
-H "Authorization: Bearer TOKEN" \
-H "Content-Type: application/json" \
-d '{
"namespace": "io.github.user",
"name": "lint-fix",
"title": "Lint Fixer",
"description": "Find and fix linting errors in a project",
"version": "1.0.0",
"status": "active",
"license": "Apache-2.0",
"allowedTools": ["Read", "Edit", "Bash", "Grep"],
"packages": [
{
"registryType": "oci",
"identifier": "ghcr.io/user/skills/lint-fix",
"ref": "1.0.0",
"digest": "sha256:abc123..."
}
],
"repository": {
"type": "git",
"url": "https://github.com/user/my-skills"
}
}'

A successful publish returns a 201 Created response.

Skill fields

FieldTypeRequiredDescription
namespacestringYesReverse-DNS owner identifier (e.g. io.github.user)
namestringYesSkill identifier (lowercase alphanumeric and hyphens)
versionstringYesSemantic version or commit hash
titlestringNoHuman-readable display name
descriptionstringYesSummary of what the skill does
statusstringNoactive (default), deprecated, or archived
licensestringNoSPDX license identifier
compatibilitystringNoEnvironment requirements
allowedToolsstring[]NoTools the skill needs (experimental)
packagesarrayNoDistribution references (see Packages below)
repositoryobjectNoSource repository (type and url)
iconsarrayNoIcon references (src, type, size, label)
metadataobjectNoSkill metadata from the SKILL.md frontmatter
_metaobjectNoOpaque extended metadata

Packages

Each package entry describes where the skill artifact is distributed.

FieldTypeDescription
registryTypestringDistribution type: oci or git
identifierstringOCI identifier (e.g. ghcr.io/user/skills/name)
refstringTag or branch reference
urlstringDirect URL to the package
commitstringGit commit SHA
subfolderstringSubfolder within the repository
digeststringContent digest for integrity verification
mediaTypestringMedia type of the package

Delete a skill version

Delete a specific version of a skill from a managed registry.

curl -X DELETE "https://REGISTRY_URL/registry/REGISTRY_NAME/v0.1/x/dev.toolhive/skills/NAMESPACE/SKILL_NAME/versions/VERSION" \
-H "Authorization: Bearer TOKEN"

A successful delete returns a 204 No Content response.

Next steps