Manifest Reference
The Skill Manifest File is the JSON document that describes a skill: its name, version, license, the per-host materializations (targets) it ships, and optional dependency, taxonomy, and provenance metadata.
When a skill is registered onchain, the manifest's keccak256 hash is stored in manifestHashes(skillId) on the SkillRegistry. Clients fetch the manifest from tokenURI(skillId), verify that hash, then dereference and verify each target body against its declared integrity. Any byte-level change to the manifest invalidates the onchain commitment.
This page documents the schema implemented by asrpm. See the ERC-8239 specification for the normative definition.
Top-Level Fields
| Field | Type | Required | Description |
|---|---|---|---|
type | string | optional | Manifest type discriminator (e.g. skill) |
name | string | recommended | Short, human-readable skill name. Used as the install directory name (sanitized). |
description | string | recommended | One-line description of what the skill does |
image | string | optional | URL to an icon or banner image |
version | string | recommended | Semver string for this skill release |
license | string | recommended | SPDX license identifier (e.g. MIT, Apache-2.0) |
keywords | string[] | optional | Tags for discovery |
homepage | string | optional | Project homepage URL |
repository | string | optional | Source repository URL |
author | Author | optional | Author identification |
targets | Target[] | required | Per-host materializations of the skill |
requirements | object | optional | Free-form host or runtime requirements |
taxonomy | object | optional | Free-form classification metadata |
dependencies | SkillReference[] | optional | Other skills this skill depends on |
supersedes | SkillReference | optional | Skill this release supersedes |
status | string | optional | Lifecycle status. deprecated triggers a client warning. |
Unknown fields are tolerated by asrpm and ignored on unmarshal.
Target
A Target describes one way the skill is materialized for a particular host — a Claude Code SKILL.md, a Cursor rule, an MCP server, a CLI binary, etc. A skill manifest must include at least one target.
| Field | Type | Required | Description |
|---|---|---|---|
kind | string | required | Host identifier (e.g. claude-code-skill, cursor-rule, mcp-server). Clients pick a target by matching their host's expected kind. |
version | string | optional | Per-target version, if it diverges from the manifest's version |
runtime | string | optional | Runtime hint for the host (e.g. interpreter version) |
installation | string | optional | Free-form installation notes for hosts that need them |
uri | string | required | URI to the target body. Supported schemes: https://, http://, data:. (ipfs:// is intentionally not supported.) |
integrity | string | required | <algorithm>:<hex> digest of the body bytes (see Integrity Format) |
format | string | optional | How to interpret the fetched content (default: file) |
Target Kinds
asrpm v1 installs targets with kind = "claude-code-skill" into ~/.claude/skills/<name>/SKILL.md. Other kinds are recognized by the manifest format and may be referenced in dependency graphs, but writing them to disk is not yet implemented.
Author convention is to use a stable, hyphenated, host-prefixed identifier:
| Kind | Description |
|---|---|
claude-code-skill | Claude Code SKILL.md body |
cursor-rule | Cursor rules file |
mcp-server | Manifest pointing to an MCP server bundle |
cli-binary | Pre-built CLI binary |
The list is not normative — hosts and authors may define new kinds. asrpm matches by exact string equality on the configured --target flag.
Author
| Field | Type | Required | Description |
|---|---|---|---|
name | string | optional | Human-readable author name |
url | string | optional | Author homepage |
agentId | number | optional | ERC-8004 agent identifier, if the author is itself an onchain agent |
agentRegistry | string | optional | Address of the agent registry, qualified with the chain (e.g. eip155:1:0x...) |
SkillReference
A SkillReference points to another skill in the registry (or a different registry). Used by dependencies[] and supersedes.
| Field | Type | Required | Description |
|---|---|---|---|
skillId | number | required | Token ID of the referenced skill |
skillRegistry | string | optional | Chain-qualified registry address (e.g. eip155:11155111:0x8239…). Defaults to the current registry. |
version | string | optional | Pinned version of the referenced skill |
Integrity Format
The integrity field uses an OCI-style algorithm-prefixed hex digest:
<algorithm>:<hex>
| Algorithm | Notes |
|---|---|
keccak256 | Recommended for EVM-native skills; matches the manifestHash commitment algorithm |
sha256 | Recommended for interoperability with non-EVM tooling |
Examples:
keccak256:97837f988678ef34cf4ea778f062a25e334d896d73bcf70bf81bfd7c9243f01e
sha256:4a8b1d8e3c2b6f5a0c9e1f2d3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b
asrpm verifies the digest by recomputing the hash over the exact bytes returned from the target's URI and comparing to the declared value. Any mismatch aborts the install or verify operation.
URI Schemes
The manifest URI (written to tokenURI) and each target's uri must use one of the following schemes:
| Scheme | Notes |
|---|---|
https:// | Recommended for hosted content. Subject to gateway availability. |
http:// | Supported but discouraged. |
data: | Inline content (base64 or URL-encoded). Recommended for small bodies — the URI is self-contained and does not depend on a gateway. |
The ipfs:// scheme is intentionally not supported by asrpm. Use the HTTPS gateway URL your pinning provider serves (e.g. https://gateway.pinata.cloud/ipfs/<cid>).
Status
The status field is a lifecycle marker. Recognized values:
| Value | Effect |
|---|---|
| (unset) | Standard skill, no warning |
deprecated | asrpm emits a warning before installing or invoking |
Other values are tolerated but have no client-side effect.
Example Manifest
A minimal manifest with one claude-code-skill target served from a data: URI:
{
"type": "skill",
"name": "asrpm",
"description": "Use the Agent Skill Registry (ERC-8239) to discover, install, and publish onchain agent skills.",
"version": "0.1.0",
"license": "MIT",
"keywords": ["asr", "erc-8239", "agent-skill", "claude-code"],
"homepage": "https://github.com/vorpalengineering/asrpm",
"repository": "https://github.com/vorpalengineering/asrpm",
"author": {
"name": "Vorpal Engineering",
"url": "https://vorpalengineering.com"
},
"targets": [
{
"kind": "claude-code-skill",
"version": "0.1.0",
"uri": "data:text/markdown;charset=utf-8;base64,LS0tCm5hbWU6IGFzcnBtCi4uLg==",
"integrity": "keccak256:97837f988678ef34cf4ea778f062a25e334d896d73bcf70bf81bfd7c9243f01e",
"format": "file"
}
]
}
A manifest with multiple targets and dependencies:
{
"name": "example-skill",
"version": "1.2.0",
"license": "Apache-2.0",
"author": {
"name": "Example Author",
"agentId": 42,
"agentRegistry": "eip155:1:0xAgentRegistry..."
},
"targets": [
{
"kind": "claude-code-skill",
"uri": "https://example.com/skill.md",
"integrity": "keccak256:abc123...",
"format": "file"
},
{
"kind": "cursor-rule",
"uri": "https://example.com/rule.mdc",
"integrity": "sha256:def456...",
"format": "file"
}
],
"dependencies": [
{
"skillId": 0,
"skillRegistry": "eip155:11155111:0x8239AAbaa1A44338bEeFAAf4C3a373d2a18D5DC4",
"version": "^0.1.0"
}
],
"supersedes": {
"skillId": 17,
"version": "1.1.0"
}
}
Authoring Tips
- The manifest URI must serve byte-identical content to the local file you hashed. Any change — trailing newline, key reordering, whitespace — invalidates the onchain commitment and causes integrity verification to fail for downstream clients.
- Prefer
data:URIs for small manifests and target bodies. They are self-contained and avoid gateway availability issues. - When hosting on IPFS, register the gateway HTTPS URL (e.g.
https://gateway.pinata.cloud/ipfs/<cid>) rather thanipfs://<cid>. Integrity verification works regardless of gateway choice. - Use the
asrpm-prepare.shhelper to handle the body-encoding, hashing, and manifest-splicing steps in one pass.
See Also
- ERC-8239 specification — the normative protocol definition
asrpmCLI Reference —register,publish, and authoring helpers