hoziron-cli package
Package authoring — scaffold, build, inspect, lint, verify, and publish .hpkg packages.
Synopsis
hoziron-cli package <subcommand> [options]
Subcommands
| Subcommand | Description |
|---|---|
init | Scaffold a new package directory |
build <path> | Build a .hpkg archive |
inspect <path> | Display manifest and payload structure |
lint <path> | Validate against ADR-003 packaging rules |
verify <path> | Verify content-hash integrity (and, with --provenance, registry signature) |
publish <path> | Lint, build, and upload to a registry in one step |
provenance <name> | Show the version/fork-lineage history for a package |
There is no hoziron-cli package sign or hoziron-cli package keygen —
the registry signs the package at publish time, using its own key, and
records the authenticated publisher identity. package verify --provenance checks that registry signature, not a local one.
hoziron-cli package init
Scaffold a new package directory with MANIFEST.toml template. name is a
positional argument, not a --name flag.
hoziron-cli package init --type <type> <name> [--contract <variant>] [--json]
Package Types
| Type | Description |
|---|---|
skill | Tool bundle with runtime config (covers single-tool packages too) |
competency | COMPETENCY.md (frontmatter + system prompt body) |
agent-template | Full agent config (competencies, tool visibility) |
workflow-template | Workflow definition JSON + referenced agent templates |
integration | MCP server or external service integration |
contract | Schema-bearing [implements.<name>] contract package (ADR-066) — see contract.md |
Flags
| Flag | Description |
|---|---|
--type <type> | Required. One of the package types above |
--contract <variant> | Only with --type integration. Scaffolds adapter.json + Starlark transform templates for the named contract variant (e.g. rest-soap) instead of the default mcp.json |
--json | JSON output |
Examples
$ hoziron-cli package init --type competency claims-intake
✓ Created claims-intake/
├── MANIFEST.toml
└── payload/
└── COMPETENCY.md
$ hoziron-cli package init --type skill pdf-extractor
✓ Created pdf-extractor/
├── MANIFEST.toml
└── payload/
└── SKILL.md
$ hoziron-cli package init --type integration salesforce-connector
✓ Created salesforce-connector/
├── MANIFEST.toml
└── payload/
└── mcp.json
# Integration package with an explicit contract variant (ADR-057) —
# scaffolds adapter.json + Starlark transform templates instead of mcp.json
$ hoziron-cli package init --type integration --contract rest-soap legacy-billing-adapter
✓ Created legacy-billing-adapter/
├── MANIFEST.toml
└── payload/
├── adapter.json
└── transforms/
├── _template_build_body.star
└── _template_extract.star
# Contract package (ADR-066) — schema-bearing [implements.<name>] artifact
$ hoziron-cli package init --type contract claims-write
✓ Created claims-write/
├── MANIFEST.toml
└── payload/
└── CONTRACT.json
hoziron-cli package build
Build a .hpkg archive from a package directory.
hoziron-cli package build <path> [--output <dir>] [--json]
Flags
| Flag | Description |
|---|---|
-o, --output <dir> | Output directory (default: parent of source dir) |
--json | JSON output for scripting |
Example
$ hoziron-cli package build ./claims-intake/
✓ Built: claims-intake-1.0.0.hpkg (24 KB)
Output: ./claims-intake-1.0.0.hpkg
$ hoziron-cli package build ./claims-intake/ --output /tmp/packages/
✓ Built: claims-intake-1.0.0.hpkg (24 KB)
Output: /tmp/packages/claims-intake-1.0.0.hpkg
hoziron-cli package inspect
Display manifest and payload structure without installing.
hoziron-cli package inspect <path> [--json]
Example
$ hoziron-cli package inspect ./claims-intake/
Package: claims-intake
Title: Claims Intake
Type: competency
Version: 1.0.0
License: MIT
Min Platform: 0.5.0
Dependencies:
document-ocr: ^1.0
claims-core-adapter: ^2.0
email-skill: ^1.2
Payload:
COMPETENCY.md (12.4 KB)
references/
claims-guide.md (8.4 KB)
coverage-rules.md (3.2 KB)
Signing: unsigned
Content Hash: sha256:a1b2c3...
hoziron-cli package verify
Verify package integrity — recomputes the SHA-256 Merkle root of the payload
and compares it to the hash recorded in MANIFEST.toml at build time.
hoziron-cli package verify <path> [--provenance] [--registry <url>] [--json]
Flags
| Flag | Description | Default |
|---|---|---|
--provenance | Also contact the registry to verify the registry's signature and display the authenticated publisher identity | off (local-only) |
--registry <url> | Registry URL to verify provenance against | from config/context |
--json | JSON output | — |
Examples
# Local-only content-hash check (no network access needed)
$ hoziron-cli package verify ./claims-intake/
✓ Package integrity verified
Content hash: sha256:a1b2c3d4... (valid)
# With registry provenance — also checks the registry's signature
$ hoziron-cli package verify ./claims-intake/ --provenance
✓ Package integrity verified
Content hash: sha256:a1b2c3d4... (valid)
Provenance:
Publisher: discovery-insure
Signature: ✓ valid
Signed by: registry-key-01 (2026-06-01T10:00:00Z)
$ hoziron-cli package verify ./claims-intake/ --provenance --json
{
"content_hash_valid": true,
"content_hash": "sha256:a1b2c3d4...",
"provenance": {
"publisher_id": "discovery-insure",
"registry_signature_valid": true,
"registry_key_id": "registry-key-01",
"signed_at": "2026-06-01T10:00:00Z"
}
}
# Failed local verification (tampered payload)
$ hoziron-cli package verify ./tampered-package/
Error: content hash mismatch — payload does not match MANIFEST.toml
hoziron-cli package lint
Validate manifest and payload structure against packaging rules.
hoziron-cli package lint <path> [--json]
Example
$ hoziron-cli package lint ./claims-intake/
✓ MANIFEST.toml valid
✓ Package name format (kebab-case, 3–64 chars)
✓ Version is valid semver
✓ License is valid SPDX identifier
✓ Dependencies use semver ranges
✓ Payload COMPETENCY.md exists
✓ Frontmatter valid (description, skills present)
All checks passed (7/7)
# With errors
$ hoziron-cli package lint ./bad-package/
✓ MANIFEST.toml valid
✗ Package name format: "Bad Package!" contains invalid characters (expected kebab-case)
✗ Dependencies: "document-ocr: latest" is not a valid semver range
✗ SKILL.md: 'description' is required in frontmatter
3 errors found (4/7 passed)
hoziron-cli package publish
Runs the full pipeline: lint → build → upload to registry. The registry
signs the package at publish time — no local signing step, and no --key
flag.
hoziron-cli package publish <path> [--registry <name>] [--skip-lint] --notes <text> \
[--derived-from-registry <url> --derived-from-name <name> --derived-from-version <version>] \
[--json]
Flags
| Flag | Description | Default |
|---|---|---|
--registry <name> | Target registry name (overrides scope-based routing and default) | — |
--skip-lint | Skip the lint step | off |
--notes <text> | Release notes — a short summary of what changed in this version. Required. If omitted, you're prompted interactively; with --json it must be supplied here (no prompt in non-interactive mode) | — |
--derived-from-registry <url> | Registry URL this version was forked from | — |
--derived-from-name <name> | Package name on the origin registry this fork was derived from | — |
--derived-from-version <version> | Version on the origin registry this fork was derived from — the origin's content hash is looked up live from that registry, not taken on trust from the flag | — |
--json | JSON output | — |
The three --derived-from-* flags must be supplied together or not at all —
publishing a fork without full lineage information is rejected.
Examples
$ hoziron-cli package publish ./claims-intake/ --notes "Add CLUE report caching"
→ Linting package...
→ Building .hpkg archive...
✓ Published claims-intake@1.0.0 to default registry
# Publish to a specific registry
$ hoziron-cli package publish ./claims-intake/ --registry internal --notes "Internal hotfix"
✓ Published claims-intake@1.0.1 to internal
# Publish a fork, with full lineage
$ hoziron-cli package publish ./claims-intake-fork/ \
--notes "Add EU coverage rules on top of upstream 1.2.0" \
--derived-from-registry https://catalog.hoziron.com \
--derived-from-name claims-intake \
--derived-from-version 1.2.0
✓ Published claims-intake-fork@0.1.0 to default registry
hoziron-cli package provenance
Show the version/lineage history for an installed or published package —
publisher, signed-at timestamp, release notes — and, if any version carries a
derived_from fork snapshot, walk the chain back to the origin registry
(fetched live when reachable, falling back to the recorded snapshot when it
isn't).
hoziron-cli package provenance <name> [--registry <url>] [--json]
Flags
| Flag | Description | Default |
|---|---|---|
--registry <url> | Registry URL or name to query | from config/context |
--json | JSON output | — |
Example
$ hoziron-cli package provenance claims-intake
claims-intake — provenance chain
https://catalog.hoziron.com (reachable)
1.2.0 2026-05-20 discovery-insure "Add CLUE report caching"
1.1.0 2026-04-15 discovery-insure "Fix coverage rounding"
1.0.0 2026-03-01 discovery-insure "Initial release"
MANIFEST.toml Reference
[package]
type = "competency"
name = "claims-intake"
title = "Claims Intake"
version = "1.0.0"
description = "First Notice of Loss processing"
license = "MIT"
min_platform_version = "0.5.0"
# There is no [package.author] section — package provenance comes from the
# registry's signed publish record, not a self-declared field. See
# ../config/manifest-schemas.md for the full schema.
[package.metadata]
repository = "https://github.com/company/claims-intake"
homepage = "https://company.com/docs/claims-intake"
keywords = ["insurance", "claims", "fnol"]
categories = ["insurance/claims"]
regions = ["us", "uk"]
[dependencies]
document-ocr = "^1.0"
claims-core-adapter = "^2.0"
[standards]
mcp_compatible = true
openapi_spec = "payload/openapi.yaml"
[signing]
# Populated by `hoziron-cli package build` (content hash only — the registry
# signature is assigned at publish time, not stored locally in the manifest).
content_hash = "sha256:a1b2c3d4..."
See Also
- catalog.md — Installing and searching published packages
- competency.md — Using installed competencies
- ../../guides/competencies/authoring.md — Writing COMPETENCY.md