Recipe Registry

Publish and pull recipes from local or remote registries

Recipe Registry CLI

The recipe registry allows you to publish, pull, and manage recipes in a centralized location.

Quick Start

bash
# Publish a recipe to local registry
praisonai recipe publish ./my-recipe

# Pull a recipe from registry
praisonai recipe pull my-recipe@1.0.0

# List recipes in registry
praisonai recipe list

Commands

publish

Publish a recipe bundle or directory to the registry.

bash
praisonai recipe publish <bundle-or-directory> [options]

Options:

OptionDescription
--registry <path-or-url>Registry path or URL (default: ~/.praisonai/registry)
--token <token>Authentication token for remote registry
--forceOverwrite existing version
--jsonOutput JSON format

Examples:

bash
# Publish a bundle
praisonai recipe publish my-recipe-1.0.0.praison

# Publish a directory (auto-packs)
praisonai recipe publish ./my-recipe

# Publish to custom registry
praisonai recipe publish ./my-recipe --registry /path/to/registry

# Force overwrite existing version
praisonai recipe publish ./my-recipe --force

# JSON output
praisonai recipe publish ./my-recipe --json

pull

Pull a recipe from the registry.

bash
praisonai recipe pull <name>[@version] [options]

Options:

OptionDescription
--registry <path-or-url>Registry path or URL
--token <token>Authentication token
-o, --output <dir>Output directory (default: current)
--jsonOutput JSON format

Examples:

bash
# Pull latest version
praisonai recipe pull my-recipe

# Pull specific version
praisonai recipe pull my-recipe@1.0.0

# Pull to specific directory
praisonai recipe pull my-recipe -o ./recipes

# Pull from custom registry
praisonai recipe pull my-recipe --registry /path/to/registry

list

List every recipe in the local registry. This is registry-scoped and differs from praisonai recipe list — recipe list reads per-recipe metadata, while registry list enumerates the full registry with tag filtering.

bash
praisonai registry list [options]

Options:

OptionTypeDefaultDescription
--dir <path>string~/.praison/registryRegistry directory
--tags <a,b>comma-separatedNoneFilter recipes by tags (any-match)
--jsonflagfalseOutput in JSON format

Examples:

bash
# List all local recipes
praisonai registry list

# Filter by tags (matches audio OR video)
praisonai registry list --tags audio,video

# JSON output
praisonai registry list --json

For remote-registry listing, use praisonai recipe list --registry http://… instead — registry list only reads the local --dir.

Registry Types

Local Registry

The default registry is stored at ~/.praisonai/registry. No configuration required.

bash
# Uses default local registry
praisonai recipe publish ./my-recipe
praisonai recipe pull my-recipe

Custom Local Registry

Specify a custom path for the registry:

bash
# Use custom path
praisonai recipe publish ./my-recipe --registry /shared/recipes
praisonai recipe pull my-recipe --registry /shared/recipes

HTTP Registry

Start a local HTTP registry server and connect to it:

bash
# Start HTTP registry server
praisonai serve registry --port 7777

# Start with authentication required
praisonai serve registry --port 7777 --token mysecret

# Start in read-only mode
praisonai serve registry --port 7777 --read-only

Connect to HTTP registry:

bash
# Publish to HTTP registry
praisonai recipe publish ./my-recipe --registry http://localhost:7777

# Publish with token authentication
praisonai recipe publish ./my-recipe \
  --registry http://localhost:7777 \
  --token $PRAISONAI_REGISTRY_TOKEN

# Pull from HTTP registry
praisonai recipe pull my-recipe --registry http://localhost:7777

# List recipes from HTTP registry
praisonai recipe list --registry http://localhost:7777

# Search HTTP registry
praisonai recipe search agent --registry http://localhost:7777

Remote HTTPS Registry

Connect to remote registries:

bash
# Publish to remote registry
praisonai recipe publish ./my-recipe \
  --registry https://registry.example.com \
  --token $REGISTRY_TOKEN

# Pull from remote registry
praisonai recipe pull my-recipe \
  --registry https://registry.example.com

Registry Server Commands

serve

Start a local HTTP registry server.

bash
praisonai serve registry [options]

Options:

OptionDescription
--host <addr>Host to bind to (default: 127.0.0.1)
--port <port>Port to bind to (default: 7777)
--dir <path>Registry directory (default: ~/.praisonai/registry)
--token <token>Require token for write operations
--read-onlyDisable all write operations
--jsonOutput in JSON format

Examples:

bash
# Start on default port
praisonai serve registry

# Start on custom port
praisonai serve registry --port 8080

# Start with authentication
praisonai serve registry --token mysecrettoken

# Start with custom directory
praisonai serve registry --dir /path/to/registry

# Start in read-only mode (no publish/delete)
praisonai serve registry --read-only

status

Check registry server health.

bash
praisonai registry status [options]

Options:

OptionDescription
--registry <url>Registry URL (default: http://localhost:7777)
--jsonOutput in JSON format

Examples:

bash
# Check default registry
praisonai registry status

# Check specific registry
praisonai registry status --registry http://localhost:8080

# JSON output
praisonai registry status --json

To enumerate recipes in the local registry, use the list command above.

HTTP API Endpoints

When running praisonai serve registry, the following endpoints are available:

MethodEndpointDescription
GET/healthzHealth check
GET/v1/recipesList all recipes
GET/v1/recipes/{name}Get recipe info
GET/v1/recipes/{name}/{version}Get version info
GET/v1/recipes/{name}/{version}/downloadDownload bundle
POST/v1/recipes/{name}/{version}Publish bundle (auth required)
DELETE/v1/recipes/{name}/{version}Delete version (auth required)
GET/v1/search?q=...Search recipes

Registry Structure

~/.praisonai/registry/
├── index.json           # Recipe index
└── recipes/
    └── my-recipe/
        └── 1.0.0/
            ├── manifest.json
            └── my-recipe-1.0.0.praison

Environment Variables

VariableDescription
PRAISONAI_REGISTRY_TOKENDefault authentication token

Exit Codes

CodeMeaning
0Success
2Validation error (invalid bundle)
7Recipe not found

Python API

python
from praisonai.recipe.registry import LocalRegistry, get_registry

# Create registry
registry = LocalRegistry()  # Uses default path
# or
registry = LocalRegistry("/custom/path")

# Publish
result = registry.publish("my-recipe-1.0.0.praison")
print(f"Published: {result['name']}@{result['version']}")

# Pull
result = registry.pull("my-recipe", version="1.0.0", output_dir="./recipes")
print(f"Pulled to: {result['path']}")

# List
recipes = registry.list_recipes()
for r in recipes:
    print(f"{r['name']} ({r['version']})")

# Search
results = registry.search("hello")

Next Steps