Reffo.ai

Teach your beacon new tricks

Skills are modular capabilities that any beacon can install. They add new features — database tables, API routes, P2P messaging, and AI agent tools — in one package.

The concept

What is a Skill?

A skill is a self-contained capability package for your Pelagora beacon. Think of it like a WordPress plugin, but for commerce — and it works with every AI platform.

Each skill is an npm package that follows the Skill interface. When your beacon starts, it scans node_modules/@pelagora/skill-* and loads every skill it finds. No configuration files, no manual wiring — install and go.

Skills can create database tables, add HTTP API routes, handle peer-to-peer messages over the DHT, and register MCP tools for AI agents. All of this from a single npm install.

The model is skills, not SaaS subscriptions. Your data stays on your machine. The capability runs on your beacon. No monthly fees, no vendor lock-in.

Architecture

How Skills Work

Install

Run npm install @pelagora/skill-* and the beacon auto-discovers it on next start. No config needed — the skill loader scans node_modules automatically.

Database

Skills create their own tables via migrate(). Your data stays on your machine in SQLite. Each skill manages its own schema independently.

API & DHT

Skills register HTTP routes at /skills/{id}/ and P2P message handlers on the DHT. New endpoints and peer messaging from one package.

AI-Native

Skills register MCP tools and guided prompts that any AI agent can use. Claude, GPT, or your own agent — they all get the skill's capabilities.

First Skill

Reverse Auction

The first official skill flips the marketplace: buyers post what they want, sellers compete with bids. Instead of searching listings, you broadcast your demand and let the network come to you.

Buyer: Post a Want

Buyer
>describe what you need + set budget
>broadcast want to the DHT network
>receive bids from sellers
>compare bids and accept the best
>complete the transaction

Seller: Send a Bid

Seller
>browse open wants from other beacons
>match wants against your inventory
>send a competitive bid with your price
>negotiate terms if needed
>complete the sale

Distribution

Write once, publish everywhere

One skill, every AI ecosystem. Skills expose their capabilities through standard interfaces that map to each platform's native format.

Reffo Marketplace

npm install + auto-discovery. One command, fully integrated.

Anthropic Claude

MCP tools + guided prompts. Native integration via @pelagora/mcp.

OpenAI GPT Store

OpenAPI spec auto-generated from skill routes. Export via /skills/:id/export/openapi.

ClawHub / LobeHub

SKILL.md descriptor auto-generated. Export via /skills/:id/export/clawhub.

xAI

We will support xAI when they launch their tool ecosystem.

For developers

Build a Skill

The Skill Interface (TypeScript)
import { Router } from "express"; import { Server } from "@modelcontextprotocol/sdk/server/index.js"; export interface Skill<DB = unknown> { id: string; name: string; version: string; description: string; // Lifecycle migrate(db: DB): void; createRouter(db: DB): Router; // P2P messaging messageTypes?: string[]; onMessage?(msg: PeerMessage, reply: ReplyFn): void; // AI agent integration registerMcpTools?(server: Server, db: DB): void; registerMcpPrompts?(server: Server): void; }
Database Migration Example
migrate(db) { db.exec(` CREATE TABLE IF NOT EXISTS wants ( id TEXT PRIMARY KEY, beacon_id TEXT NOT NULL, title TEXT NOT NULL, description TEXT, budget_max REAL, currency TEXT DEFAULT 'USD', status TEXT DEFAULT 'open', created_at TEXT DEFAULT (datetime('now')) ); CREATE TABLE IF NOT EXISTS bids ( id TEXT PRIMARY KEY, want_id TEXT NOT NULL REFERENCES wants(id), seller_beacon_id TEXT NOT NULL, price REAL NOT NULL, message TEXT, status TEXT DEFAULT 'pending', created_at TEXT DEFAULT (datetime('now')) ); `); }
Router Example
createRouter(db) { const router = Router(); router.get("/wants", (req, res) => { const wants = db .prepare("SELECT * FROM wants ORDER BY created_at DESC") .all(); res.json(wants); }); router.post("/wants", (req, res) => { const { title, description, budget_max, currency } = req.body; const id = crypto.randomUUID(); db.prepare( "INSERT INTO wants (id, beacon_id, title, description, budget_max, currency) VALUES (?, ?, ?, ?, ?, ?)" ).run(id, getBeaconId(), title, description, budget_max, currency); res.status(201).json({ id }); }); return router; }

Community

Propose a Skill

Have an idea for a skill? The community proposal process lets you pitch new capabilities. Describe the problem, the solution, and the message types your skill would use.

Proposal Template

Skill Name: What you'd call it

Problem: What gap does it fill?

Solution: How does it work?

Tables: What data does it store?

Message Types: What P2P messages does it need?

MCP Tools: What tools does it expose to agents?

View Proposal Template

Skills, not SaaS

Install capabilities, not subscriptions. Your data stays local. Your beacon stays yours.