* 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.
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
- Fork & clone the repository
- Create a branch:
git checkout -b feat/add-my-content - Add or edit files in the appropriate directory
- Run validation:
python scripts/validate.py - 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
namematches the directory namedescriptionis clear and concise (one sentence)system_promptprovides clear behavioral instructionstoolsonly 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
idmatches the directory namecategoryis valid (communication,content,data,development,devops,finance,productivity,research,social)toolslists 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
idmatches the filename (without.toml)[transport]section is correct (test the MCP server command locally)[[required_env]]lists all needed environment variablessetup_instructionsare clear enough for first-time usersis_secret = truefor 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
namematches the directory name[runtime].typeispromptonlyorpython[input]section documents all parameters- Prompt-only skills have a
[prompt].templatewith 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
namematches 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.txtlists 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.pypasses- No duplicate model IDs
- Pricing is in USD per million tokens
- Tier is one of:
frontier,smart,balanced,fast,local context_windowandmax_output_tokensare positive integers- Boolean capability fields are correct
- Pricing verified from official source
last_verifieddate 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:
- Check the provider's official pricing page (see links below)
- Record the exact
input_cost_per_mandoutput_cost_per_mvalues in USD per million tokens - Include the
last_verifiedfield with today's date in ISO format (YYYY-MM-DD) when possible - 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:
- OpenAI: https://openai.com/pricing
- Anthropic: https://docs.anthropic.com/en/docs/about-claude/models
- Google Gemini: https://ai.google.dev/pricing
- DeepSeek: https://platform.deepseek.com/api-docs/pricing
- Mistral: https://mistral.ai/technology/#pricing
- Groq: https://wow.groq.com/
- xAI: https://docs.x.ai/docs
- Together: https://www.together.ai/pricing
- Fireworks: https://fireworks.ai/pricing
- OpenRouter: https://openrouter.ai/models (per-model pricing listed)
Where to Find Model Information
- OpenAI: https://openai.com/pricing
- Anthropic: https://docs.anthropic.com/en/docs/about-claude/models
- Google Gemini: https://ai.google.dev/pricing
- DeepSeek: https://platform.deepseek.com/api-docs/pricing
- Mistral: https://mistral.ai/technology/#pricing
- Groq: https://wow.groq.com/
- xAI: https://docs.x.ai/docs
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