Getting Started
This guide walks through installing asrpm, configuring it for your chain of choice, and running your first commands.
Prerequisites
- macOS or Linux (Windows builds are not currently published)
- For build-from-source: Go 1.24 or later
- For authoring commands (
register,publish): a Foundry keystore at~/.foundry/keystores/<name>or anASRPM_PRIVATE_KEYenvironment variable
Installation
Homebrew (macOS, Linux)
brew install vorpalengineering/tap/asrpm
Prebuilt binary
Download a tarball for your platform from the GitHub releases page and place the extracted asrpm binary somewhere on your PATH.
Go install
go install github.com/vorpalengineering/asrpm/cmd/asrpm@latest
Build from source
git clone https://github.com/vorpalengineering/asrpm
cd asrpm
go build -o asrpm ./cmd/asrpm
Quick Start
asrpm ships with defaults pointing at the canonical Sepolia deployment of the ASR contracts, so read-only commands work out of the box.
Inspect a skill
resolve is read-only and requires no signer. It fetches the manifest, verifies the manifestHash commitment, and prints the result.
asrpm resolve 0
Add --json to emit the raw manifest, or --verbose for full URIs and integrity values.
Install a skill
install resolves the skill, verifies every integrity hash along the way, and writes the matching target's body to ~/.claude/skills/<sanitized-name>/SKILL.md:
asrpm install 0
# Restart Claude Code to load the new skill.
The default install target is claude-code (v1 supports this target only). Add --scope project to install under the current project's .claude/skills/ directory instead of the user-level location.
List installed skills
asrpm list
asrpm list --json
Refresh a skill
update re-resolves a previously-installed skill and rewrites its body if the onchain version has changed.
asrpm update 0
Re-running update when already at the latest version is a no-op.
Uninstall
asrpm uninstall <name|skillId>
The CLI looks up the install in the local index. Pass --force to remove a directory not managed by asrpm.
Configuration
The configuration file lives at ~/.asrpm/config.json and is created on the first asrpm config set … call (mode 0600). Environment variables always override file values. Multiple fields can be set in a single call.
Configuration keys
| Key | Env var | Default | Purpose |
|---|---|---|---|
rpc_url | ASRPM_RPC_URL | https://ethereum-sepolia-rpc.publicnode.com | JSON-RPC endpoint for the target chain |
skill_registry | ASRPM_SKILL_REGISTRY | 0x8239AAbaa1A44338bEeFAAf4C3a373d2a18D5DC4 (Sepolia) | SkillRegistry contract address |
Inspecting current configuration
asrpm config
asrpm config --json
asrpm config get rpc_url
Updating configuration
asrpm config set \
--rpc-url <RPC_URL> \
--skill-registry <SKILL_REGISTRY_ADDRESS>
Pass --registry <addr> on any read or write command to override the configured registry for a single invocation.
The config file never stores private keys or other secrets.
Wallet Handling
asrpm deliberately does not manage its own keystore. Write commands (register, publish) accept signing material from one of two sources, both of which keep plaintext keys off disk under the CLI's control.
Foundry keystore (recommended)
Pass --account <name> to load and decrypt ~/.foundry/keystores/<name> after prompting for the password on stdin:
asrpm register \
--manifest path/to/manifest.json \
--uri https://gateway.pinata.cloud/ipfs/<cid> \
--account my-keystore
Foundry (cast, forge) is the keystore custodian; asrpm only borrows the decrypted key for the duration of signing a transaction.
Environment variable (CI and local development)
Set ASRPM_PRIVATE_KEY to a raw hex private key. A warning is printed on use.
export ASRPM_PRIVATE_KEY=0x1234567890abcdef...
asrpm register --manifest path/to/manifest.json --uri https://example.com/manifest.json
--account always takes precedence over ASRPM_PRIVATE_KEY when both are present.
Read-only commands (resolve, verify, list) never require a signer.
URI Schemes
Manifests and target bodies must use one of the supported URI schemes:
| Scheme | Notes |
|---|---|
https:// | Recommended for hosted content. |
http:// | Supported but discouraged. |
data: | Inline content (base64 or URL-encoded). Recommended for small bodies; lets the manifest be fully self-contained. |
The ipfs:// scheme is not supported. Use the HTTPS gateway URL your pinning provider serves (e.g. https://gateway.pinata.cloud/ipfs/<cid> or https://ipfs.io/ipfs/<cid>). Integrity is verified against the manifest's manifestHash and per-target integrity regardless of gateway choice.
Next Steps
- See the CLI Reference for complete command and flag documentation
- See the Manifest Reference for the Skill Manifest File schema
- Read the ERC-8239 specification for protocol details