Registry Management¶
Clown distributes agent manifests, profile templates, and model catalogs through a GitHub-hosted registry. This guide covers how to work with the registry system.
Overview¶
The registry provides:
- Agent manifests - How to detect and configure each agent
- Provider definitions - API backends and their endpoints
- Rhai scripts - Configuration generation logic
- Profile templates - Pre-configured setups
- Model catalog - Available models with metadata
Benefits¶
- Single source of truth - Consistent metadata across all installations
- Open and reviewable - Changes vetted through pull requests
- Extensible - Support multiple channels and private forks
- Offline friendly - Local cache keeps CLI working without network
Repository Layout¶
registry/
├── registry.json # Versioned index with channels
├── agents/
│ └── claude/
│ ├── manifest.toml # Agent manifest
│ └── hooks/ # Optional scripts/assets
├── providers/
│ └── minimax.toml # Provider definition
├── scripts/
│ ├── claude.rhai # Config generation script
│ ├── codex.rhai
│ └── grok.rhai
├── profiles/
│ └── claude/
│ ├── minimax.toml # Profile template
│ └── anthropic.toml
├── models/
│ └── catalog.json # Model metadata
└── templates/
└── README.md
Key Files¶
| File | Description |
|---|---|
registry.json | Index pointing to entries, includes checksums, maps to channels |
agents/<id>/manifest.toml | Agent detection and configuration |
providers/<id>.toml | API backend definitions |
scripts/<agent>.rhai | Configuration generation scripts |
profiles/<agent>/<template>.toml | Pre-configured profile templates |
models/catalog.json | Model metadata for autocomplete |
CLI Commands¶
Sync Registry¶
Update local cache from GitHub:
# Normal sync (uses cache if fresh)
ringlet registry sync
# Force refresh
ringlet registry sync --force
# Use cached data only
ringlet registry sync --offline
Inspect Registry¶
View current registry status:
Output:
Registry Status
───────────────
Channel: stable
Commit: f4a12c3
Last Sync: 2026-01-08T10:00:00Z
Cached: Yes
Artifacts: 25
Agents: 5
Providers: 4
Templates: 8
Pin Version¶
Lock to a specific version:
Sync Workflow¶
When you run ringlet registry sync:
- CLI sends
RegistrySyncRequestto daemon - Daemon acquires per-channel lock
- Checks
registry.lockfor cached data - If online and not cached/forced:
- Downloads
registry.json - Verifies checksums/signatures
- Fetches missing artifacts
- Stages under
commits/<sha>/ - Updates
registry.lockwith resolved state - Publishes
RegistryUpdatedevent - Returns summary to CLI
Caching¶
The registry is cached under:
~/.config/ringlet/registry/
├── current -> commits/f4a12c3 # Symlink to active version
├── registry.lock # Lock file with state
├── litellm-pricing.json # Model pricing data
└── commits/
└── f4a12c3/
├── registry.json
├── agents/
├── providers/
├── scripts/
└── models/
Offline Mode¶
When GitHub is unreachable:
Returns the currently pinned commit with offline=true indicator.
Profile Templates¶
Templates define common setups for agent+provider combinations.
Using Templates¶
# Create profile from template
ringlet profiles create claude work --template minimax
# List available templates
ringlet registry templates
Template Format¶
# profiles/claude/minimax.toml
name = "Claude + MiniMax"
description = "Claude Code with MiniMax API"
agent = "claude"
provider = "minimax"
[defaults]
model = "MiniMax-M2.1"
endpoint = "international"
[prompts]
api_key = "Enter your MiniMax API key"
[env]
API_TIMEOUT_MS = "3000000"
Template Features¶
- Required prompts for API keys and settings
- Default environment variables and CLI args
- Optional hooks or setup tasks
- Recommended MCP servers
Model Catalog¶
The model catalog provides metadata for autocomplete and validation.
Format¶
{
"id": "MiniMax-M2.1",
"provider": "minimax",
"base_urls": {
"international": "https://api.minimax.io/anthropic",
"china": "https://api.minimaxi.com/anthropic"
},
"capabilities": ["code", "image"],
"max_output_tokens": 64000,
"notes": "Use with Claude-compatible CLIs"
}
Pricing Data¶
LiteLLM pricing is downloaded during sync:
Contains per-token costs for 200+ models.
Channels¶
The registry supports multiple channels:
| Channel | Description |
|---|---|
stable | Production-ready, thoroughly tested |
beta | New features, may have bugs |
nightly | Latest changes, unstable |
Switching Channels¶
Private Registries¶
Enterprises can host their own registry:
Setup¶
- Fork the registry repository
- Host on GitHub Enterprise or artifact server
- Configure Clown to use your registry:
Benefits¶
- Control which agents/providers are available
- Add internal-only configurations
- Audit changes through your review process
- Air-gapped environments support
Contributing¶
Adding a New Agent¶
- Fork the registry repository
- Create
agents/<id>/manifest.toml:
id = "my-agent"
name = "My Agent"
binary = "my-agent"
version_flag = "--version"
[detect]
commands = ["my-agent --version"]
[profile]
strategy = "home-wrapper"
source_home = "~/.my-agent-profiles/{alias}"
script = "my-agent.rhai"
[models]
default = "default-model"
supported = ["default-model"]
- Create
scripts/my-agent.rhai - Open a pull request
Adding a Provider¶
- Create
providers/<id>.toml:
id = "my-provider"
name = "My Provider"
type = "anthropic-compatible"
[endpoints]
default = "https://api.example.com/v1"
[auth]
env_key = "MY_PROVIDER_API_KEY"
prompt = "Enter your API key"
[models]
available = ["model-a", "model-b"]
default = "model-a"
- Open a pull request
Validation¶
Before submitting:
# Validate manifests (planned)
ringlet registry lint
# Test locally
cp -r my-changes ~/.config/ringlet/registry/
ringlet agents list
Security¶
Verification¶
- Registry releases are tagged
- Checksums verified before caching
- Optional Sigstore attestations
- Only trusted artifacts served to clients
Best Practices¶
- Review changes before syncing in production
- Pin to specific versions in CI/CD
- Use private registries for sensitive configurations
- Audit registry access in enterprise environments
Troubleshooting¶
Sync Fails¶
- Check network connectivity
- Try
--offlineto use cache - Check if GitHub is accessible
- Review daemon logs
Manifest Not Found¶
- Verify manifest exists in registry
- Force sync:
ringlet registry sync --force - Check if using correct channel
Custom Provider Not Detected¶
- Place in
~/.config/ringlet/providers.d/ - Verify TOML syntax
- Run
ringlet registry sync --force - Check
ringlet providers list