Skip to main content

What’s in the marketplace

registry.feral.sh hosts eight categories of content that plug into any FERAL brain. Install any of them with feral install <id>.

Install flow

Under the hood:
  1. GET https://registry.feral.sh/api/v1/item/<id> returns the manifest, signed-tarball URL, SHA-256, Ed25519 signature, and the publisher’s public key.
  2. The client recomputes SHA-256 locally and verifies the detached signature against the publisher’s public key.
  3. On success, the tarball extracts to the right ~/.feral/<kind>/<id>/ directory and pings the running Brain’s hot-reload endpoint (/api/skills/reload, /api/channels/reload, /api/providers/reload, …).
  4. The new capability is live before your next turn.

Publish flow

Bundles are tarballs with a manifest.json at the root. The required fields for each kind are listed in feral-registry/feral_registry/schemas.py — the registry rejects a publish that’s missing required keys with a clear error.

Trust model

  • Every bundle is Ed25519-signed with the publisher’s private key. The signature is stored alongside the blob so clients can re-verify on every install.
  • Publishers verify with GitHub OAuth. Your registry handle is your GitHub login. Your public key is registered once and reused for all future publishes.
  • verified badge is earned by being in the FEATURED_PUBLISHERS allowlist maintained by the FERAL team. Everything else is community.
  • flag endpoint lets anyone report a malicious package. Flags surface in moderation; repeat offenders lose publisher status.

Self-hosting the registry

The whole service is open source at feral-registry/. To run your own:
Point your clients at it with FERAL_REGISTRY_URL=https://my-registry.example.com.