The signed pack registry for mvmctl.
This repository was formerly named mvm-templates; templates are no longer
its supported interface.
index.json is the main list of published packs.
It is the only catalog. Schema v2 lists each version together with the
manifest_sha256 of its exact published manifest.json bytes. It is generated
from published manifests, not unpublished source metadata, and validation
requires every entry and digest to match. Do not edit it by hand.
Browse the generated pack registry pages for a
human-readable index and individual pack details. The generator reads
index.json, the pinned published manifests, pack policy files and
revocations.toml; the Markdown is rendered as a
static site and deployed from
main by the Pages workflow.
To submit a new pack (it must embed its application binary), follow the publishing guide.
Every pack must embed its application binary in a signed .mvmpkg; a policy
alone cannot be signed. The policy-only agent/claude@1.0.1 is revoked, so
mvmctl pull agent/claude@1.0.1 is refused. The runnable Claude pack is
agent/claude@2.0.1: an aarch64 application archive built on the mvm v0.27.0-rc.4
runtime, bundle-signed by a dedicated author key and signed into the registry by this
repository's publish workflow. agent/claude@2.0.0 is also published, but the
image-set revocation list embedded in its archive expires 2026-11-08T14:35Z, after which
it cannot launch, so use 2.0.1. Pulling a GitHub release asset needs an mvmctl that
follows redirects (the final v0.27.0, or a build from main); the rc.4 client cannot.
Running it needs the owner's provider-bound host secret and --allow-host api.anthropic.com:443. The environment is described in
CLAUDE-ENVIRONMENT.md.
Other published packs remain in the catalog as legacy policy-only versions; publication alone is not a claim that they are supported.
Catalogs are discovery metadata, not proof of authenticity. Each published
pack has a signed manifest.json and an adjacent manifest.sigstore.json:
The manifest binds the pack reference, description, and payload SHA-256
digests and sizes. Clients must verify its signature against the publisher
trust policy before trusting those bytes. See
README.packs.md for publisher identities,
historical-signature handling, and revocation requirements.
index.json # sole pack catalog, schema v2 (generated)
pack-sources/<namespace>/<name>/ # editable pack.toml and pack/ payload
packs/<namespace>/<name>/<version>/
manifest.json # signed metadata and payload digests
manifest.sigstore.json # detached Sigstore bundle
files/ # manifest-declared payload
Edit a source under pack-sources/ and bump its version when content changes.
The publisher builds and keyless-signs bundles, regenerates the root catalog,
verifies the registry, and commits the published output. Published versions
are immutable; never hand-edit their manifests, signatures, or payloads.
Run the repository checks:
python3 -m unittest discover -s tests
python3 scripts/build-packs.py --check-sources
python3 scripts/build-pack-pages.py --check
python3 scripts/validate-packs.pyWith just installed, plain just lists the
available recipes; just check runs these checks. Use just pages to regenerate
docs/registry/, or just pages-check to check them without writing. To preview
the Starlight site locally, use Node.js 22.23.4 or newer (.node-version).
If mise is installed, the recipes select that version automatically:
just pages-install
just pages-devOpen http://127.0.0.1:8000/mvm-packs/. The preview rebuilds when the catalog, revocations or published pack files change; Ctrl+C stops the server.
To additionally verify publisher signatures (requires cosign):
python3 scripts/validate-packs.py --verify-signaturesFull publishing and revocation validation is documented in
README.packs.md.