Skip to content

Repository files navigation

English | 简体中文

SkillCorpus

Give your agent 96,401 vetted, permissively-licensed skills — and a retriever that picks the right ones for each task.

Part of the EverMind agent stack — Raven, the terminal-native agent harness · EverOS, the memory substrate it builds on · SkillCorpus, the community skill corpus they retrieve from.

Paper SkillHub Corpus Models License Python

SkillCorpus: building the corpus (aggregate + curate) and using it (match + evaluate)

What is SkillCorpus

Agent skills — SKILL.md files packaging reusable procedural knowledge — are scattered across thousands of public repositories, redundant, uneven in quality, and unclear on redistribution rights. SkillCorpus turns that pool into something an agent can actually draw from, in four stages:

  • aggregate — discover and clone skills from public SKILL.md repositories.
  • curate — parse · safety · license gate · dedup · 16-class classification · 3-facet quality scoring.
  • match — SkillRouter: a fine-tuned bi-encoder + reranker + LLM selector that picks skills for a task.
  • evaluate — three real-world agent benchmarks, two harnesses, open and frontier backbones.

~821,000 crawled files in, 96,401 skills out — every one carrying its upstream license, and every source repository license-audited so the released set is commercially redistributable.

📰 News

  • 2026-08-06 — Paper v5 on arXiv.

📦 What we release

Artifact What Link
🌐 SkillHub hosted retrieval endpoint over the corpus — no install evermind.ai/skillhub
📚 Corpus skills.parquet + attachments.tar.zst + dataset card 🤗 HuggingFace
🔡 Retrieval models SkillRouter — a bi-encoder and a reranker, fine-tuned from Qwen3-Embedding-0.6B and Qwen3-Reranker-0.6B 🤗 HuggingFace
🛠️ Code this repo — aggregate · curate · match · evaluate · export GitHub
16-class distribution over the 96,401 active skills

96,401 skills organised by a 16-class taxonomy and three quality facets (utility / robustness / safety), with 1024-dim retrieval embeddings. Column contract: docs/corpus-schema.md.

📊 Results

Pass rate with no skills → with SkillCorpus, same harness, same backbone (paper, Table 1):

Harness × backbone SkillsBench GDPVal QwenClawBench
OpenClaw × Qwen3.5-27B 8.8 → 13.0 81.2 → 83.1 65.2 → 66.7
OpenClaw × Qwen3.5-397B 11.1 → 16.9 82.2 → 84.0 65.7 → 67.0
Raven × Qwen3.5-27B 10.0 → 16.5 82.6 → 83.8 66.9 → 70.8
Raven × Qwen3.5-397B 9.2 → 22.6 84.0 → 85.2 68.8 → 73.2
Pooled ∆ +7.5±2.3 (z=3.2) +1.51±0.49 (z=3.1) +2.79±0.70 (z=4.0)

The gain is largest where the task needs procedural knowledge the model does not already have (SkillsBench), and smallest on open-ended economic tasks it can already do (GDPVal).

🚀 Quick Start

You want Go to Needs
skills for a task, right now A. Query the hosted SkillHub nothing — one HTTP call
the retrieval models running on your own GPUs B. Self-host the models the corpus + both models on your own GPUs
your agent to use skills automatically C. Plug it into your agent a harness that reads a skills dir or a system prompt

Curating your own sources instead? See Build your own corpus.

A. Query the hosted SkillHub

SkillHub serves the corpus in three tiers — discover (metadata), read (skill_md), download (zip with scripts/). Most skills are pure instructions, so reading is usually where you stop.

curl "https://skillhub.evermind.ai/openapi/v1/skills/search?q=extract+tables+from+a+PDF&category=DOC-PROC&min_score=0.75&limit=2"

Take an id from the results, fetch its skill_md, inject that into your agent's prompt — that is the whole loop. examples/skillhub_demo.py runs all three tiers:

# search + read the bodies — stdlib only, no install, no API key
python examples/skillhub_demo.py "extract tables from a scanned PDF invoice"

# also fetch the bundled scripts of the top hit
python examples/skillhub_demo.py --install ./skills "convert a PDF to images"

# retrieve AND run the task — any OpenAI-compatible LLM (OpenAI, OpenRouter, local vLLM, …)
export OPENAI_API_KEY=...                                # OpenRouter / vLLM: also set
# export OPENAI_BASE_URL=https://openrouter.ai/api/v1   # OPENAI_BASE_URL + --model openai/gpt-4o-mini
python examples/skillhub_demo.py --ask "extract tables from a scanned PDF invoice"
task: extract tables from a scanned PDF invoice

[1/2] search  → 2 hit(s), metadata only
  1. ocr-and-documents   q=0.808  DOC-PROC  MIT
     Extract text from PDFs/scans (pymupdf, marker-pdf).
  2. document-workflows  q=0.86   DOC-PROC  MIT
     Build end-to-end document processing workflows and pipelines …

[2/2] detail  → fetching skill_md for 2 skill(s)
  ocr-and-documents: 4916 chars  u=8 r=7 s=9  files=4  flags=['no_steps']
  document-workflows: 31628 chars  u=9 r=9 s=9  files=7

→ built a prompt of 36,742 chars with the skill bodies injected

Endpoints, response envelope, status codes and rate limits: docs/integrations.md.

B. Self-host the models

Rather not depend on the hosted endpoint? The corpus and both retrieval models are released, so you can run selection yourself — get the data, stand up the two models, and do your own encode → top-k → rerank.

# the data
from datasets import load_dataset
skills = load_dataset("<org>/skillcorpus", split="train")   # 96,401 rows
# or read the file directly, no `datasets` needed
import pandas as pd; skills = pd.read_parquet("skills.parquet")

Attachments (scripts/, references/) ship as a sibling attachments.tar.zst.

# stand up the bi-encoder + reranker behind one endpoint  ->  /embed + /score
bash skillcorpus/match/scripts/run_server.sh

This endpoint speaks /embed + /score (skillcorpus/match/ → Serving) — it is not a drop-in for SkillHub's hosted-only /openapi/v1/skills API. So:

  • examples/skillhub_demo.py and the section-C integrations talk only to the hosted SkillHub; a self-hosted setup runs its own selection directly over /embed + /score.
  • It is also the embedding endpoint the producer's dedup uses — set embedding.provider: skillrouter_remote to build your own corpus with it.

C. Plug it into your agent

Raven — first-party SkillHub source

Raven fuses SkillHub with its local and Everos skill sources via weighted RRF (skillForge.router):

skillForge:
  enabled: true
  router:
    top_k: 5
    weights: { local: 1.0, everos: 0.9, hub: 0.85 }   # local / self-evolved / SkillCorpus
    hub:
      endpoint: https://skillhub.evermind.ai
      api_key: null          # public skills need none
      timeout_s: 2.0
      min_safety: 0.7        # drop skills below this score_safety
      source: raven          # download tag for install stats
Any other harness — OpenClaw, Hermes, Claude Code, …

There is no first-party plugin yet, but every harness that reads a skills directory works with tier 3: download the bundle and drop it in.

python examples/skillhub_demo.py --install ~/.claude/skills "convert a PDF to images"
#                                          ~/.hermes/skills      (Hermes)
#                                ~/.openclaw/workspace/skills    (OpenClaw)

For prompt-injection harnesses, skip the download: fetch skill_md from tier 2 and prepend it to the system prompt — that is what build_prompt() in the demo does, in six lines.

Full contract: docs/integrations.md.

🧩 How it works

skillcorpus/
├── core/       data models · SQLite/faiss store · LLM & embedding clients
├── aggregate/  source registry + multi-repo clone
├── curate/     parse · safety · license · classify · quality · dedup + full-library passes
├── export/     corpus writer (parquet + attachments + dataset card)
├── match/      SkillRouter — the 2 released models + training recipe   ← isolated deps
├── evaluate/   skillsbench · qwenclawbench · gdpval benchmarks          ← isolated deps
└── cli.py      build · stats · export

cli build runs the whole curation chain (ingest → quality_pass → dedup_pass → license_audit → export.corpus). LLM classification and quality scoring degrade gracefully to rules when no model endpoint is reachable, so the pipeline always runs end to end.

match/ and evaluate/ are standalone toolkits with their own requirements.txt (torch / transformers, per benchmark); they are not pulled in by pip install of the producer.

  • Retrievalskillcorpus/match/ is the two released models: a bi-encoder fine-tuned from Qwen3-Embedding-0.6B for candidate recall, and a reranker fine-tuned from Qwen3-Reranker-0.6B that scores the top candidates. SkillHub serves both; to run them yourself see Serving (serve.py + run_server.sh). The directory also holds the training recipe (synthetic queries → InfoNCE → listwise CE) and eval_compare.py for the retrieval metrics (nDCG / MRR / Hit / Recall).
  • Benchmarksskillcorpus/evaluate/: skillsbench, qwenclawbench, gdpval — each self-contained with its own README and dependencies.

🛠️ Build your own corpus

Only needed if you want to curate your own sources. Requires an LLM endpoint for classification / quality scoring and an embedding endpoint for dedup — see docs/running.md.

git clone <repo-url> skillcorpus && cd skillcorpus
python3 -m venv .venv && source .venv/bin/activate
python -m pip install --upgrade pip && pip install -e .

python -m skillcorpus.cli build     # 4 demo sources -> curate -> export
python -m skillcorpus.cli stats     # counts by source / category / license
python -m skillcorpus.cli export --out ./corpus

Only skills from GREEN-licensed sources are exported (the demo trusts the whitelist in audit/license_safe_sources.json wholesale; production gates per source-repo SPDX). The per-row license is each skill's declared value, so a demo corpus can still carry non-GREEN license strings. Use --sources-config your.yaml for your own registry, or --source <name> for one source.

pip install -e ".[dev]"
python -m pytest skillcorpus/tests -p no:cacheprovider --import-mode=importlib

🗺️ Roadmap

  • Curation pipeline: 16-class taxonomy, 3-facet quality, per-source license audit
  • Fine-tuned retrieval stack + three-benchmark evaluation
  • Public SkillHub endpoint
  • Corpus, retrieval model and reranker on HuggingFace
  • Deployment script for the two retrieval models (self-hosting match/)
  • Hermes integration

Citation

@article{wang2026skillcorpus,
  title         = {SkillCorpus: Consolidating and Evaluating the Open Skill Ecosystem for Real-World LLM Agents},
  author        = {Wang, Yanze and Yao, Pengfei and Sun, Tianyi and Hu, Chuanrui and Xiao, Yan and Luo, Xiaotian and Han, Yunyun and Chen, Yifan and Sun, Jun and Deng, Yafeng},
  year          = {2026},
  eprint        = {2607.15557},
  archivePrefix = {arXiv},
  url           = {https://arxiv.org/abs/2607.15557}
}

License

  • Code — Apache-2.0 (the match/ and evaluate/ toolkits are each MIT — see their own LICENSE).
  • Corpus — every skill keeps its original upstream license; only GREEN (MIT / Apache-2.0 / BSD / ISC / …) skills are included, none relicensed. Each row carries source, source_url, and license, so downstream use must follow the per-skill terms.

Full GREEN/RED/YELLOW policy, license data flow, and opt-out: docs/licence-and-governance.md.

About

No description, website, or topics provided.

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages