Skip to content

catalog

Declarative package manager for the pi coding agent. Manage your skills and extensions from a single cat.yaml file, sync across machines via GitHub Gist.

Installation

bash
pi install npm:@pi-stef/catalog

Quick Start

bash
/ct login          # Authenticate with GitHub (requires gh CLI)
/ct init           # Initialize catalog from installed packages
/ct add npm:@pi-stef/team   # Add a package
/ct sync           # Install + push to gist

Hot-Reload

Commands that install, update, or remove packages (add, update, remove, disable, sync, pull) automatically reload extensions after a successful operation. New or updated tools are available immediately without restarting pi.

If the reload fails or is not available (e.g., when invoked via an LLM tool), you'll see a message asking you to restart pi for changes to take effect.

Command Reference

SubcommandDescriptionFlags
syncFull sync cycle: pull → reconcile → execute → push--dry-run, --force, --no-push, --profile=<name>
initInitialize catalog from installed packages or a gist--from-gist=<id>
addAdd a package to the catalog and install it--type=<t>, --scope=@pi-stef
removeRemove a package from the catalog--yes, --scope=@pi-stef
toggleToggle a package's enabled state
enableEnable a disabled package
disableDisable a package and uninstall it
updateUpdate packages to latest versions--all
pushPush local catalog + lock to GitHub Gist--dry-run, --profile=<name>
pullPull remote catalog from gist and reconcile--dry-run, --profile=<name>
loginAuthenticate with GitHub via gh CLI
statusShow catalog status with package listing
diffShow diff between local and remote catalog
verifyVerify catalog integrity
profilesList all profiles with active indicator
profileShow or switch active profile
resetUninstall all @pi-stef packages and delete config--yes

cat.yaml Format

yaml
meta:
  pi_version: "0.70.0"
  activeProfile: default

packages:
  superpowers-adapter:
    source: "npm:@pi-stef/superpowers-adapter"
    type: skill
  team:
    source: "npm:@pi-stef/team"
    type: skill
  atlassian:
    source: "npm:@pi-stef/atlassian"
    type: skill
    enabled: false

Package Fields

FieldRequiredDescription
sourcePackage source URL (npm:… or git:…)
typeskill or pi-native
profileProfile name this package belongs to
enabledtrue (default) or false

Setup Detection

Packages can include a .pi-setup.json file declaring requirements (environment variables, config files, CLI tools). After install or update, the catalog checks these requirements and warns if anything is missing.

Profiles

Profiles let you maintain different package sets for different machines or contexts. See Profiles & Sharing for details.

Configuration

FilePathPurpose
Catalog~/.pi/sf/catalog/cat.yamlDeclarative package manifest
Lock file~/.pi/sf/catalog/catalog.lock.jsonInstalled versions and hashes
Gist cache~/.pi/sf/catalog/Cached gist ID for sync

Development

bash
pnpm install
pnpm -F @pi-stef/catalog test
pnpm -F @pi-stef/catalog typecheck