Skip to content

How to create a self-hosted catalogue

Derive, brand, validate, and package an owned catalogue from an existing source without losing provenance or safety rails.

Use this guide when you want to create an enterprise-derived or domain-specific catalogue from an existing source catalogue — for example, rebranding a public catalogue for your organization or customizing a set of packs for a restricted environment.

Prerequisites:

  • agentbundle installed (python -m pip install agentbundle)
  • A source catalogue accessible at a local path
  • An empty (or nonexistent) target directory

Terminal window
agentbundle catalogue init my-catalogue \
--preset self-hosted \
--source /path/to/source-catalogue \
--name my-org-catalogue \
--display-name "My Org Catalogue" \
--owner-name "Platform Engineering" \
--owner-email "platform@example.com"

This copies selected packs and profiles from the source, generates a catalogue.toml with your identity fields, and runs a fail-closed leak check before writing anything.


The curation tools (catalogue-curation pack, agentbundle CLI) are installed from the registry — not embedded in the target directory.

Terminal window
agentbundle catalogue init my-catalogue \
--preset self-hosted \
--source /path/to/source \
--tooling external

After init, follow the printed next steps to install catalogue-curation in your target.

For air-gapped environments, use --tooling vendored. This copies the agentbundle source and catalogue-curation pack into .agentbundle/tooling/ inside the target.

Terminal window
agentbundle catalogue init my-catalogue \
--preset self-hosted \
--source /path/to/source \
--tooling vendored

Then install from the vendored copy:

Terminal window
python -m pip install -e my-catalogue/.agentbundle/tooling/agentbundle/

All source-catalogue identity strings (name, owner, URL) are replaced with your target values. The init fails if any source identity survives the transformation.

Terminal window
agentbundle catalogue init my-catalogue \
--preset self-hosted \
--source /path/to/source \
--attribution white-label \
--repository-url https://example.com/my-catalogue

Source identity is preserved but only allowed in designated attribution surfaces (catalogue.toml and ATTRIBUTION.md). Use this when you want to credit the upstream source publicly.

Terminal window
agentbundle catalogue init my-catalogue \
--preset self-hosted \
--source /path/to/source \
--attribution attributed

By default, all packs (except catalogue-curation, which is tooling) and all profiles are copied. Use --pack and --profile to narrow the selection:

Terminal window
agentbundle catalogue init my-catalogue \
--preset self-hosted \
--source /path/to/source \
--pack core \
--pack governance-extras \
--profile engineering

Use --guides selected (default) to copy guides/_shared/ from the source, or --guides none to omit guides entirely:

Terminal window
agentbundle catalogue init my-catalogue \
--preset self-hosted \
--source /path/to/source \
--guides none

Preview what would be created without writing any files:

Terminal window
agentbundle catalogue init my-catalogue \
--preset self-hosted \
--source /path/to/source \
--dry-run

Once the catalogue is initialized and customized, package it for Artifactory upload:

Terminal window
# Runtime archive (standard distributable)
agentbundle catalogue package \
--root my-catalogue \
--bundle my-org \
--release 1.0.0 \
--channel stable \
--output /path/to/output
# Source archive (for self-hosted downstream catalogues)
agentbundle catalogue package \
--root my-catalogue \
--bundle my-org \
--release 1.0.0 \
--channel stable \
--output /path/to/output \
--flavor source

The --flavor source archive includes catalogue.toml, packs, profiles, guides/_shared/, and legal files. It also emits a self-hosted-source-manifest.json with kind = agentbundle-self-hosted-source for downstream verification.


After initialization, verify the target catalogue is well-formed:

Terminal window
agentbundle catalogue verify --root my-catalogue

FlagDescriptionDefault
--preset self-hostedEnable self-hosted init— (required)
--source PATHSource catalogue root— (required)
--tooling external|vendoredTooling modeexternal
--attribution white-label|attributedIdentity modewhite-label
--guides none|selectedGuide inclusionselected
--name NAMECatalogue identifierDerived from target dirname
--display-name TEXTHuman-readable nameTitle-cased from --name
--description TEXTOne-sentence descriptionAuto-generated
--owner-name TEXTMaintainer nameDerived from display name
--owner-email EMAILMaintainer emailEmpty (prompted on TTY)
--repository-url URLRepository URLEmpty
--pack NAMEPack to include (repeatable)All packs
--adapter NAMEAdapter to include (repeatable)All adapters
--profile NAMEProfile to include (repeatable)All profiles
--dry-runPreview without writingOff
--format table|jsonOutput formattable