hub.byterover.dev.
Create your own custom private registry to distribute internal skills and bundles across your team,
then register it with the BRV CLI to browse and install entries alongside the official catalog.
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.
Hosting Your Own Registry
The BRV Hub repository is an open-source, zero-backend registry template. Clone it to host your own private registry of agent skills and context bundles, using GitHub Actions for validation and automaticregistry.json generation.
The BRV Hub template is MIT-licensed. You can clone it into a private repository for internal use.
Step-by-Step Setup
Clone the BRV Hub template
For a public registry, fork the repo directly on GitHub and clone it:For a private registry, clone the template and push to a new private repo
(GitHub does not allow forking a public repo into a private repo):
Configure your registry URLs
Open For GitHub and GitLab, add a second constant for raw content URLs right after Then update the 4 URL constructions to remove the
scripts/update-registry.js. The official hub uses proxy routes (/r/ for downloads, /v/ for viewing) that don’t exist on GitHub, GitLab, or self-hosted platforms. You need to update the base URL and the URL patterns to match your hosting platform.Line 5 — change the base URL constant:HUB_BASE_URL:/r/ and /v/ route prefixes:For self-hosted registries that serve files directly (no separate raw content domain), set both
HUB_BASE_URL and CONTENT_BASE_URL to the same value, or use HUB_BASE_URL everywhere and skip the second constant.Add your own skills or bundles
Create a directory for each entry with the required files:Create a
manifest.json for each entry:Validate locally
- JSON Schema compliance for all manifests
- Directory name matches the
idfield - Entry
typematches parent directory (agent-skill→skills/,bundle→bundles/) - Required files are present (
README.md,SKILL.mdorcontext.md) idandnameare globally unique across all entries
Generate and push the registry
The template includes two GitHub Actions workflows:See GitHub Actions Setup below for configuring the automated workflows.
- validate-pr.yml — validates every PR that touches
skills/orbundles/ - update-registry.yml — regenerates
registry.jsonautomatically on push tomain
main, the registry updates automatically.To generate the registry manually instead:Register with BRV CLI
Connect your private registry to the BRV CLI so you can browse and install entries.Or use the TUI equivalent:
For GitHub private repos, you need a Personal Access Token with
repo scope (classic) or Contents: Read-only permission (fine-grained). See Creating a personal access token on GitHub Docs.Entry File Requirements
| Type | Directory | Required Files |
|---|---|---|
agent-skill | skills/<id>/ | manifest.json, README.md, SKILL.md |
bundle | bundles/<id>/ | manifest.json, README.md, context.md |
The directory name must match the
id field in manifest.json exactly. Use kebab-case, 3–64 characters, no consecutive hyphens.Manifest Reference
| Field | Type | Description |
|---|---|---|
id | string | Kebab-case identifier matching the directory name (3–64 chars) |
name | string | Human-readable name (3–100 chars, globally unique) |
version | string | Semantic version (e.g., 1.0.0) |
description | string | What the entry does and when to use it (max 1024 chars) |
type | string | agent-skill or bundle |
author | object | { "name": "..." } (required); optional email, url |
tags | array | 1–10 search tags |
category | string | One of the valid categories below |
productivity, code-quality, testing, documentation, refactoring, debugging, deployment, analysis, security, learning
Hosting Options
| Platform | Base URL Pattern | Auth Scheme | registry add Flags |
|---|---|---|---|
| GitHub (private) | https://raw.githubusercontent.com/org/repo/main | token | --auth-scheme token --token ghp_xxx |
| GitLab (private) | https://gitlab.com/org/repo/-/raw/main | custom-header | --auth-scheme custom-header --header-name PRIVATE-TOKEN --token glpat-xxx |
| Self-hosted | https://registry.yourcompany.com | bearer or none | --token secret or no auth flags |
| GitHub Pages | https://org.github.io/repo | none | No auth flags (public only; private Pages requires GitHub Enterprise) |
GitHub Actions Setup
The template ships with two workflows that automate validation and registry generation. To enable them:Create a Personal Access Token
Go to GitHub > Settings > Developer settings > Personal access tokens > Fine-grained tokens. Grant Contents: Read and write permission scoped to your registry repository.
CLI Commands
brv hub registry list
List all configured registries with their connection status and entry counts.
| Flag | Description | Default |
|---|---|---|
-f, --format <format> | Output format: text or json | text |
brv hub registry add <name>
Add a new custom registry.
| Argument / Flag | Description | Required |
|---|---|---|
name | Registry name (used in --registry flag) | Yes |
-u, --url <url> | Registry URL | Yes |
-t, --token <token> | Auth token for private registry | No |
-s, --auth-scheme <scheme> | Authentication scheme | No |
--header-name <name> | Custom header name (for custom-header scheme) | No |
-f, --format <format> | Output format: text or json | No |
brv hub registry remove <name>
Remove a custom registry and its stored credentials (if private).
Authentication Schemes
| Scheme | HTTP Header Sent | Use Case |
|---|---|---|
bearer | Authorization: Bearer <token> | Most APIs (default when --token is provided) |
token | Authorization: token <token> | GitHub personal access tokens |
basic | Authorization: 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/
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 aversion string and an entries array. Each entry describes a skill or bundle with its metadata and downloadable files.
Multi-Registry Behavior
When multiple registries are configured:- Entries from all registries are merged and displayed together in
brv hub listand the/hubTUI. - If the same entry ID exists in multiple registries, the
installcommand 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
Registry validation fails when adding
Registry validation fails when adding
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
Entry exists in multiple registries
Entry exists in multiple registries
When an entry ID appears in more than one registry, use the
--registry flag to specify which one to install from:Authentication failed (HTTP 401/403)
Authentication failed (HTTP 401/403)
Verify that:
- The token is correct and not expired
- The
--auth-schemematches what the server expects - For
custom-header, the--header-nameis correct (e.g.,PRIVATE-TOKENfor GitLab)
Cannot use reserved registry name
Cannot use reserved registry name
The names
brv, byterover, campfire, campfirein, and official are reserved. Choose a different name for your registry.Registry generation fails in GitHub Actions
Registry generation fails in GitHub Actions
Verify that:
- The
PAT_TOKENrepository secret exists under Settings > Secrets and variables > Actions - The token has Contents: Read and write permission scoped to the repository
- The token has not expired
Private registry returns 404 for file downloads
Private registry returns 404 for file downloads
Verify that:
- The
HUB_BASE_URLinscripts/update-registry.jsmatches the actual URL where your files are served - The branch name in the URL is correct (e.g.,
mainvsmaster) - The auth token used with
brv hub registry addhas read access to the repository