Skip to main content
BRV Hub supports multiple registries beyond the official hub.byterover.dev. Add private registries to distribute internal skills and bundles across your team. All registries are fetched in parallel with graceful degradation — if a private registry is unreachable, others continue to work normally.
The official registry is always included and cannot be removed.

Quick Start

1

Add your registry

brv hub registry add myco --url https://example.com/registry.json
2

Verify it was added

brv hub registry list
3

Install from your registry

brv hub install my-custom-skill --registry myco --agent "Claude Code"

CLI Commands

brv hub registry list

List all configured registries with their connection status and entry counts.
brv hub registry list [OPTIONS]
FlagDescriptionDefault
-f, --format <format>Output format: text or jsontext
The output includes each registry’s name, URL, authentication status, and entry count (or error message if unreachable).

brv hub registry add <name>

Add a new private registry.
brv hub registry add <name> [OPTIONS]
Argument / FlagDescriptionRequired
nameRegistry name (used in --registry flag)Yes
-u, --url <url>Registry URLYes
-t, --token <token>Auth token for private registryNo
-s, --auth-scheme <scheme>Authentication schemeNo
--header-name <name>Custom header name (for custom-header scheme)No
-f, --format <format>Output format: text or jsonNo
# Public registry (no auth)
brv hub registry add myco --url https://example.com/registry.json

# Bearer token (default when --token is provided)
brv hub registry add myco --url https://example.com/registry.json --token secret123

# GitHub personal access token
brv hub registry add ghrepo \
  --url https://raw.githubusercontent.com/org/repo/main/registry.json \
  --auth-scheme token \
  --token ghp_xxx

# GitLab private token
brv hub registry add gitlab \
  --url https://gitlab.com/org/repo/-/raw/main/registry.json \
  --auth-scheme custom-header \
  --header-name PRIVATE-TOKEN \
  --token glpat-xxx

# Basic auth
brv hub registry add internal \
  --url https://internal.example.com/registry.json \
  --auth-scheme basic \
  --token user:password
The following registry names are reserved and cannot be used: brv, byterover, campfire, campfirein, official.

brv hub registry remove <name>

Remove a private registry and its stored credentials.
brv hub registry remove <name>
brv hub registry remove myco
Both the registry configuration and any stored authentication token are removed.

Authentication Schemes

SchemeHTTP Header SentUse Case
bearerAuthorization: Bearer <token>Most APIs (default when --token is provided)
tokenAuthorization: token <token>GitHub personal access tokens
basicAuthorization: Basic <base64>HTTP basic auth
custom-header<header-name>: <token>GitLab, custom APIs
none(no header)Public registries

Token Storage

Authentication tokens are stored using file-based AES-256-GCM encryption with the following storage locations:
  • macOS~/Library/Application Support/brv/
  • Linux$XDG_DATA_HOME/brv/ (defaults to ~/.local/share/brv/)
  • Windows%LOCALAPPDATA%/brv/
Encryption keys and credential files are created with 0600 permissions (owner read/write only). The encryption key is regenerated on every write operation. Registry configurations (name, URL, auth scheme — but not tokens) are stored in hub-registries.json within the same data directory.

Registry Format

A registry is a JSON file containing a version string and an entries array. Each entry describes a skill or bundle with its metadata and downloadable files.
{
  "version": "1.0.0",
  "entries": [
    {
      "id": "my-skill",
      "name": "My Custom Skill",
      "version": "1.0.0",
      "description": "A custom agent skill for your team",
      "type": "agent-skill",
      "author": { "name": "Your Team" },
      "tags": ["custom"],
      "category": "productivity",
      "file_tree": [
        { "name": "SKILL.md", "url": "https://example.com/skills/my-skill/SKILL.md" }
      ],
      "readme_url": "https://example.com/skills/my-skill/README.md",
      "manifest_url": "https://example.com/skills/my-skill/manifest.json",
      "path_url": "https://example.com/skills/my-skill"
    }
  ]
}
See the BRV Hub repository for the full manifest specification, validation schema, and contribution guide.

Multi-Registry Behavior

When multiple registries are configured:
  • Entries from all registries are merged and displayed together in brv hub list and the /hub TUI.
  • If the same entry ID exists in multiple registries, the install command requires the --registry <name> flag to disambiguate.
  • Failed registries are silently skipped — one unreachable registry does not block access to others.
  • Registry data is cached for 5 minutes per registry to reduce network requests.

Troubleshooting

The registry URL must be reachable and return valid JSON during brv hub registry add. Verify that:
  • The URL points to a valid registry JSON file
  • Authentication credentials are correct (if the registry is private)
  • The server is reachable from your network
When an entry ID appears in more than one registry, use the --registry flag to specify which one to install from:
brv hub install my-skill --registry myco --agent "Claude Code"
Verify that:
  • The token is correct and not expired
  • The --auth-scheme matches what the server expects
  • For custom-header, the --header-name is correct (e.g., PRIVATE-TOKEN for GitLab)
Re-add the registry with updated credentials:
brv hub registry remove myco
brv hub registry add myco --url https://example.com/registry.json --token new-token
The names brv, byterover, campfire, campfirein, and official are reserved. Choose a different name for your registry.

Next Steps