Files
librefang-registry/CONTRIBUTING.md
T
Evan d1cab3e33a feat: context engine plugins, scaffolding, and pricing fixes (#6)
* feat: add 4 context engine plugins

- topic-memory: keyword clustering for topic-aware memory recall
- episodic-memory: conversation segmentation and cross-session recall
- user-profile: persistent user profiling from conversation patterns
- context-decay: time-based memory decay with reinforcement dynamics

All plugins use the ingest/after_turn hook protocol with stdin/stdout JSON.

* chore: add plugin scaffolding, update docs and templates

- Add plugin.toml template with {{NAME}} placeholder
- Add new-plugin Makefile target with hooks/ scaffolding
- Update plugins/README.md with all 10 plugins
- Update README.md stats (10 plugins, 220+ models)
- Add Plugin checkbox and checklist to PR template
- Add Plugin to issue template content type dropdown
- Fix CONTRIBUTING.md: last_verified is recommended, not required

* fix: correct model pricing and remove deprecated entries

- openrouter/gemma-2-9b-it: fix pricing from 0.0 to 0.03/0.09 per M tokens
  (free variant correctly stays at 0.0)
- github-copilot: remove deprecated copilot/gpt-4 model entry
  (GPT-4 retired in favor of GPT-4o for Copilot)

* docs: annotate kimi-coding as membership-gated

Kimi Code CLI uses quota-based membership model (not per-token billing).
Free tier has limited weekly requests; underlying model is K2.5.
Pricing kept at 0.0 consistent with other subscription providers
(chatgpt, github-copilot) but with explanatory comments.

* style: fix trailing newline in github-copilot.toml

* fix: correct Moonshot/Kimi model pricing from official sources

All 5 models had incorrect pricing:
- moonshot-v1-8k: 0.10/0.10 → 0.20/2.00
- moonshot-v1-32k: 0.30/0.30 → 1.00/3.00
- moonshot-v1-128k: 0.80/0.80 → 2.00/5.00
- kimi-k2: 2.00/8.00 → 0.60/2.50
- kimi-k2.5: 2.00/8.00 → 0.45/2.20

Sources: platform.moonshot.ai/docs/pricing/chat, costgoat.com, getmaxim.ai

* feat: add MiniMax M2.7 and M2.7-highspeed models

Released 2026-03-18, MiniMax's latest flagship text model.
10B activated params, 200K context, 128K output, tool use, streaming.
Pricing: $0.30/$1.20 per M tokens (input/output).

Added to both international (minimax.io) and China (minimaxi.com) providers.
2026-03-21 03:36:32 +09:00

7.8 KiB

Contributing to LibreFang Registry

Thank you for helping grow the LibreFang ecosystem! This guide explains how to add or update content for each type.

General Workflow

  1. Fork & clone the repository
  2. Create a branch: git checkout -b feat/add-my-content
  3. Add or edit files in the appropriate directory
  4. Run validation: python scripts/validate.py
  5. Submit a Pull Request

Adding an Agent

Create a directory agents/<name>/ with an agent.toml file:

name = "my-agent"
version = "0.1.0"
description = "What this agent does"
author = "your-name"
module = "builtin:chat"

[model]
provider = "default"
model = "default"
max_tokens = 4096
temperature = 0.7
system_prompt = """Your system prompt here."""

[capabilities]
tools = ["web_search", "file_read"]

Agent Checklist

  • name matches the directory name
  • description is clear and concise (one sentence)
  • system_prompt provides clear behavioral instructions
  • tools only lists tools the agent actually needs
  • Routing aliases (if any) are relevant and don't conflict with existing agents

Adding a Hand

Create a directory hands/<name>/ with a HAND.toml file and optionally a SKILL.md:

id = "my-hand"
name = "My Hand"
description = "What this hand does"
category = "productivity"  # communication | content | data | development | devops | finance | productivity | research | social
icon = "🔧"

tools = ["tool1", "tool2"]

[routing]
aliases = ["activate my hand", "do the thing"]

[agent]
name = "my-hand-agent"
module = "builtin:chat"
system_prompt = """Your agent prompt here."""

[[settings]]
key = "some_setting"
label = "Setting Label"
setting_type = "toggle"
default = "true"

Hand Checklist

  • id matches the directory name
  • category is valid (communication, content, data, development, devops, finance, productivity, research, social)
  • tools lists all required tools
  • [agent] section has a complete system prompt
  • [[requires]] sections list any external dependencies (binaries, services)
  • [[settings]] sections provide user-configurable options where appropriate

Adding an Integration

Create a file integrations/<name>.toml:

id = "my-service"
name = "My Service"
description = "What this integration provides"
category = "devtools"  # devtools | communication | storage | monitoring | data
icon = "🔌"
tags = ["relevant", "tags"]

[transport]
type = "stdio"
command = "npx"
args = ["-y", "@some/mcp-server"]

[[required_env]]
name = "MY_SERVICE_API_KEY"
label = "API Key"
help = "Get your key from https://..."
is_secret = true
get_url = "https://my-service.com/settings/api-keys"

setup_instructions = """
1. Get an API key from ...
2. Paste it into the field above.
"""

Integration Checklist

  • id matches the filename (without .toml)
  • [transport] section is correct (test the MCP server command locally)
  • [[required_env]] lists all needed environment variables
  • setup_instructions are clear enough for first-time users
  • is_secret = true for any sensitive values (API keys, tokens)

Adding a Skill

Create a directory skills/<name>/ with a skill.toml and optionally implementation files:

Prompt-only Skill

[skill]
name = "my-skill"
version = "0.1.0"
description = "What this skill does"
author = "your-name"
tags = ["relevant", "tags"]

[runtime]
type = "promptonly"

[input]
param1 = { type = "string", description = "Description", required = true }

[prompt]
template = """Your prompt template using {{param1}}."""

Python Skill

[skill]
name = "my-skill"
version = "0.1.0"
description = "What this skill does"

[runtime]
type = "python"
entry = "main.py"

Plus a main.py with your implementation.

Skill Checklist

  • name matches the directory name
  • [runtime].type is promptonly or python
  • [input] section documents all parameters
  • Prompt-only skills have a [prompt].template with correct {{param}} placeholders
  • Python skills include all required files

Adding a Plugin

Create a directory plugins/<name>/ with a plugin.toml and hook scripts:

name = "my-plugin"
version = "0.1.0"
description = "What this plugin does"
author = "your-name"

[hooks]
ingest = "hooks/ingest.py"         # Called when user message is received
after_turn = "hooks/after_turn.py" # Called after each conversation turn

Hook scripts communicate via stdin/stdout JSON. See schema.toml for the protocol format.

Plugin Checklist

  • name matches the directory name
  • [hooks] lists at least one hook
  • All referenced hook files exist
  • Hook scripts read JSON from stdin and write JSON to stdout
  • requirements.txt lists any Python dependencies (stdlib-only preferred)

Adding or Updating a Provider / Model

Edit the appropriate provider file in providers/. If the provider doesn't exist, create a new file.

[provider]
id = "my-provider"
display_name = "My Provider"
api_key_env = "MY_PROVIDER_API_KEY"
base_url = "https://api.my-provider.com"
key_required = true

[[models]]
id = "model-id"
display_name = "Model Name"
tier = "smart"                  # frontier | smart | balanced | fast | local
context_window = 128000
max_output_tokens = 16384
input_cost_per_m = 2.50         # USD per million input tokens
output_cost_per_m = 10.0        # USD per million output tokens
supports_tools = true
supports_vision = false
supports_streaming = true
aliases = ["short-name"]

Provider Checklist

  • python scripts/validate.py passes
  • No duplicate model IDs
  • Pricing is in USD per million tokens
  • Tier is one of: frontier, smart, balanced, fast, local
  • context_window and max_output_tokens are positive integers
  • Boolean capability fields are correct
  • Pricing verified from official source
  • last_verified date included if possible (ISO format, e.g. 2025-03-15)

Pricing Verification

Always verify pricing from official sources before submitting. Model pricing changes frequently and stale data leads to incorrect cost tracking for users.

When adding or updating model pricing:

  1. Check the provider's official pricing page (see links below)
  2. Record the exact input_cost_per_m and output_cost_per_m values in USD per million tokens
  3. Include the last_verified field with today's date in ISO format (YYYY-MM-DD) when possible
  4. If a model is subscription-based (e.g. GitHub Copilot) or has no public per-token pricing, note this in your PR description

Common official pricing pages:

Where to Find Model Information

Guidelines

  • Don't guess -- only add data you can verify from official sources
  • Keep descriptions concise -- one sentence that explains the purpose
  • Test locally -- try your content with LibreFang before submitting
  • One PR per content type -- don't mix agent additions with provider updates
  • Keep aliases short -- 1-3 word abbreviations users would naturally type