Submit to registry.feral.sh
Submit once. Reviewed by FERAL. Install everywhere.
Eight categories. One CLI. Every submission is signed with your Ed25519 key and reviewed by the FERAL team before it becomes user-installable. Open source, transparent queue, no surprises.
What happens after you submit
- Your bundle is uploaded with
status=submittedandvisibility=private. - FERAL org reviewers inspect the manifest, signature, and behaviour. The decision and reviewer identity are recorded in an immutable audit trail.
- Once approved the item flips to
approved/publicand shows up in the marketplace. Until then, attempts toferal installit fail closed.
You can track your own submissions any time at feral.sh/publisher/submissions.
Step 1
Authenticate
feral publisher loginOpens GitHub OAuth. Captures your publisher token under ~/.feral/publisher.token.
Step 2
Register your key
feral publisher registerGenerates an Ed25519 keypair locally, uploads the public half. Private key never leaves your machine.
Step 3
Submit for review
feral publish --kind <kind> <dir>Validates the manifest, builds + signs the tarball, uploads. The CLI prints back the submission id and review status.
All eight categories
Every bundle is a tarball with manifest.json at the root. Required fields per kind:
Skill
skill
Python tool the agent calls. Drop in a manifest + impl.py and ship.
Required manifest keys:
skill_id, name, versionferal publish --skill ./my-skill/
Hardware Daemon
daemon
HUP-speaking process for a physical device (wristband, thermostat, camera, …).
Required manifest keys:
node_id, capabilities, name, versionferal publish --daemon ./my-daemon/
MCP Server
mcp
Model Context Protocol endpoint. FERAL spawns + talks to it.
Required manifest keys:
mcp_command, name, versionferal publish --mcp ./my-mcp-server/
Channel Plugin
channel
Messaging surface (Signal, WhatsApp, Matrix, custom bot variants).
Required manifest keys:
channel_id, name, versionferal publish --channel ./my-channel/
LLM Provider
provider
Alternate provider: Groq, Bedrock, Ollama, Together, …
Required manifest keys:
provider_id, models, name, versionferal publish --provider ./my-provider/
Memory Backend
memory
Replacement for the default memory store. Chroma, Qdrant, Honcho, …
Required manifest keys:
memory_id, interface, name, versionferal publish --memory ./my-memory/
Workflow Pack
workflow
Multi-step TaskFlow template (PR triage, standup composer, …).
Required manifest keys:
steps, name, versionferal publish --workflow ./my-workflow/
Agent Persona
agent
Specialist system prompt + narrow tool list the Mitosis engine spawns.
Required manifest keys:
system_prompt, name, versionferal publish --agent ./my-agent/
Trust model
- Every bundle is signed with your Ed25519 private key before upload. The registry stores the signature alongside the blob.
- Acceptance gate. No submission is user-installable until a FERAL org reviewer approves it. Until then the bundle is hidden from the public catalog and the install hot path returns a 404 to anonymous callers.
- On
feral install, the client re-verifies SHA-256 and the Ed25519 signature before extracting anything. - Publishers are GitHub-authenticated; your registry handle is your GitHub login. Repeat-offender accounts can be blocked.
- Verified badges are earned, not bought: they're on the
FEATURED_PUBLISHERSallowlist maintained by the FERAL team.