Skip to main content

Writing Skills

A skill teaches FERAL a new capability — calling an API, transforming data, or controlling hardware. There are three ways to create one, depending on complexity.

Option 1: JSON Manifest (any REST API)

Drop a JSON file in ~/.feral/skills/. The Brain discovers it at startup and exposes the endpoints as agent tools.
Set the API key securely:
The Blind Vault stores this key and injects it into requests — the LLM never sees the raw value.

Manifest Fields

Option 2: Python Plugin

For tools that need custom logic (not just HTTP calls), use the SDK’s FeralPlugin base class.

Plugin Lifecycle

Installing a Python Plugin

Place the module in ~/.feral/plugins/ or install it as a Python package. The Brain discovers plugins that subclass FeralPlugin.

Option 3: WASM Skill (sandboxed)

For untrusted or third-party skills, FERAL can execute WebAssembly modules in a Wasmtime sandbox.
Place the .wasm file alongside a manifest:

Self-Learning Skills

FERAL can auto-detect repeated patterns and generate skill manifests from usage history. When the agent notices it keeps performing the same multi-step sequence, it proposes a new skill. You can review and approve pending skills:
Both take the id in a JSON body, not in the path.

What a failure looks like

The approval queue lives in memory and a brain restart empties it, so “approve” and “reject” both have a common failure: the id is no longer queued. Neither call reports that as a success. Rejecting an id the brain does not have is an error, not an idempotent no-op: the usual cause is a UI left open across a restart, and a green tick there would say a draft was discarded when nothing was. Every failure carries both a non-2xx status and an error string, so a generic client sees it without knowing this route’s body shape. GET /skills follows the same rule: it answers 503 with an error when the skill registry is not initialized, rather than an empty list that reads as “no skills installed”.

Skill Marketplace

Browse and install community skills from the registry:
Or via the API. Installing is two calls: preview verifies the publisher’s signature and returns what the skill can reach plus a single-use install_token, and install spends that token. A request without a valid token is refused with 403, so nothing is installed before its permissions have been served to whoever is deciding.
The token is bound to the item id and to the SHA-256 of the verified bundle, is good for one install, and expires after five minutes. A bundle whose signature does not verify never gets one.