Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.feral.sh/llms.txt

Use this file to discover all available pages before exploring further.

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>.
CategoryWhat it isInstall location
SkillPython skill (manifest + impl.py) callable by the agent as a tool.~/.feral/skills/<id>/
DaemonHUP-speaking hardware daemon (one per device class: wristband, glasses, thermostat, …).~/.feral/daemons/<id>/
MCP serverMCP spec (command + env). FERAL spawns + talks to it over stdio or SSE.~/.feral/mcp_servers.json
ChannelMessaging-channel plugin (WhatsApp, Signal, Matrix, custom Telegram/Discord bots).~/.feral/channels/<id>/
ProviderAlternative LLM provider (Groq, Bedrock, Ollama, Together, etc.).~/.feral/providers/<id>/
Memory backendReplacement for the default numpy/sqlite-vec memory (Chroma, Qdrant, Honcho…). Exactly one active at a time.~/.feral/memory-backends/<id>/
Workflow packNamed multi-step TaskFlow template (PR triage, standup composer, research assistant).~/.feral/workflows/<id>/
Agent personaSpecialist system prompt + narrow tool permission list the AgentMitosisEngine spawns on demand.~/.feral/agents/<id>/

Install flow

feral install <item_id>
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

# First time only: register your publisher identity
feral publisher login      # browser OAuth with GitHub
feral publisher register   # uploads your Ed25519 public key

# Every release
feral publish --kind <kind> <path/to/your/bundle/>
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:
cd feral-registry
fly launch --no-deploy --copy-config --name my-feral-registry
fly volumes create feral_registry_data --size 10
fly secrets set \
  JWT_SECRET="$(openssl rand -hex 32)" \
  GITHUB_CLIENT_ID="..." \
  GITHUB_CLIENT_SECRET="..." \
  FEATURED_PUBLISHERS="my-org"
fly deploy
Point your clients at it with FERAL_REGISTRY_URL=https://my-registry.example.com.