A retrieval-gated skill architecture for LLM agents that scales to hundreds of tools by exposing only the top-K relevant capabilities per request.
Project description
SkillMesh
Stop stuffing hundreds of tools into your LLM prompt. Route to the right ones.
The Problem
LLM agents break when you load every tool into the prompt. Token counts explode, accuracy drops, and cost scales linearly with your catalog size. Teams with 50+ skills end up with bloated system prompts that confuse the model and burn budget.
SkillMesh solves this with retrieval-based routing: given a user query, it selects only the top-K most relevant expert cards and injects them into the prompt — keeping context small, accurate, and cheap.
Before vs After
| Without SkillMesh | With SkillMesh | |
|---|---|---|
| Prompt tokens | ~50,000+ (all tools loaded) | ~3,000 (top-K only) |
| Tool selection | Model guesses from a huge list | BM25+Dense retrieval picks the best match |
| Cost per call | High (full catalog every time) | Low (only relevant cards) |
| Accuracy | Degrades as catalog grows | Stays consistent |
| Multi-domain tasks | Confusing for the model | Routed precisely (clean + train + deploy) |
How It Works
User Query
│
▼
┌─────────────────────┐
│ BM25 + Dense Index │ ← Scores every card in your registry
└─────────┬───────────┘
│
▼
┌─────────────────────┐
│ RRF Fusion Rank │ ← Merges sparse + dense rankings
└─────────┬───────────┘
│
▼
┌─────────────────────┐
│ Top-K Card Select │ ← Returns the K best expert cards
└─────────┬───────────┘
│
▼
┌─────────────────────┐
│ Agent acts as expert │ ← Full instructions injected into prompt
└─────────────────────┘
Each card contains: execution behavior, decision trees, anti-patterns, output contracts, and composability hints — everything the agent needs to act as a domain expert.
60-Second Demo
git clone https://github.com/varunreddy/SkillMesh.git
cd SkillMesh
pip install -e .
skillmesh emit \
--provider claude \
--registry examples/registry/tools.json \
--query "clean messy sales data, train a baseline model, and generate charts" \
--top-k 5
Output (truncated):
<context>
<card id="data.data-cleaning" title="Data Cleaning and Validation Expert">
# Data Cleaning and Validation Expert
Specialist in detecting and correcting data quality issues...
</card>
<card id="ml.sklearn-modeling" title="Scikit-learn Modeling and Evaluation">
...
</card>
<card id="viz.matplotlib-seaborn" title="Visualization with Matplotlib and Seaborn">
...
</card>
</context>
Only the relevant experts are injected — the rest of the 90+ card catalog stays out of the prompt.
Integrations
| Platform | Method | Status | Docs |
|---|---|---|---|
| Claude Code | MCP server | Supported | Setup guide |
| Claude Desktop | MCP server | Supported | Setup guide |
| Codex | Skill bundle | Supported | Setup guide |
Claude MCP Server
pip install -e .[mcp]
export SKILLMESH_REGISTRY=/path/to/tools.json
skillmesh-mcp
Exposes two tools via MCP:
route_with_skillmesh(query, top_k)— provider-formatted context blockretrieve_skillmesh_cards(query, top_k)— structured JSON payload
Copy-ready config templates in examples/mcp/.
Codex Skill Bundle
$skill-installer install https://github.com/varunreddy/SkillMesh/tree/main/skills/skillmesh
Direct role commands in SkillMesh:
skillmesh roles list --catalog /path/to/tools.json
skillmesh roles install --catalog /path/to/tools.json --registry /path/to/my.registry.yaml --role-id role.data-engineer
Or via installed bundle wrapper:
~/.codex/skills/skillmesh/scripts/roles.sh list --catalog /path/to/tools.json
~/.codex/skills/skillmesh/scripts/roles.sh install --catalog /path/to/tools.json --registry /path/to/my.registry.yaml --role-id role.data-engineer
Quickstart
Install
python -m venv .venv && source .venv/bin/activate
pip install -e .[dev]
Optional extras:
pip install -e .[dense] # Dense reranking with sentence-transformers
pip install -e .[mcp] # Claude MCP server
Retrieve top-K cards
skillmesh retrieve \
--registry examples/registry/tools.json \
--query "set up nginx reverse proxy with SSL" \
--top-k 3
Emit provider-ready context
skillmesh emit \
--provider claude \
--registry examples/registry/tools.json \
--query "deploy container to GCP Cloud Run" \
--top-k 5
Curated Registries
Use domain-specific registries for tighter routing:
| Registry | Domain | Cards |
|---|---|---|
tools.json / tools.yaml |
Full catalog | 90+ |
ml-engineering.registry.yaml |
ML training & evaluation | 15 |
data-engineering.registry.yaml |
Pipelines & data platforms | 10 |
bi-analytics.registry.yaml |
BI & dashboards | 10 |
devops.registry.yaml |
DevOps & infrastructure | 8 |
web-apis.registry.yaml |
API design & patterns | 7 |
cloud-gcp.registry.yaml |
Google Cloud Platform | 7 |
cloud-bi.registry.yaml |
Cloud BI | 5 |
roles.registry.yaml |
Role orchestrators | 10 |
skillmesh emit \
--provider claude \
--registry examples/registry/devops.registry.yaml \
--query "configure prometheus alerting and grafana dashboards" \
--top-k 3
CLI Commands
| Command | Description |
|---|---|
skillmesh retrieve |
Top-K retrieval payload (JSON) |
skillmesh emit |
Provider-formatted context block |
skillmesh index |
Index registry into Chroma for persistent retrieval |
skillmesh roles list |
List available role cards from a catalog |
skillmesh roles install |
Install role card + missing dependency cards into target registry |
skillmesh-mcp |
Stdio MCP server for Claude |
skillmesh --help
Repository Layout
src/skill_registry_rag/
├── models.py # Tool/role card models
├── registry.py # Registry loading + validation
├── retriever.py # BM25 + optional dense retrieval
├── adapters/ # Provider formatters (codex, claude)
└── cli.py # skillmesh CLI
examples/registry/
├── tools.json # Full tool catalog
├── tools.yaml # YAML version of full catalog
├── instructions/ # Expert instruction files (90+)
├── roles/ # Role orchestrator files
└── *.registry.yaml # Domain-specific registries
skills/skillmesh/ # Codex-installable skill
Contributing
See CONTRIBUTING.md for how to add expert cards, create registries, and submit PRs.
Troubleshooting
skillmesh: command not found
pip install -e .
Missing registry path
export SKILLMESH_REGISTRY=/path/to/tools.json
# or pass --registry on every command
skillmesh-mcp fails to start
pip install -e .[mcp]
Codex does not detect new skill
Restart Codex after running $skill-installer.
Development
ruff check src tests
pytest
License
MIT — see LICENSE.
If SkillMesh helps your team, please star the repo — it directly improves discoverability and helps others find the project.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file skillmesh-0.2.0.tar.gz.
File metadata
- Download URL: skillmesh-0.2.0.tar.gz
- Upload date:
- Size: 24.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
119952a15d215cfae3c5001c766c9fbb3aa4a8d5c29182abb4462bbec4a9b147
|
|
| MD5 |
3704a719ba07d1d1ff47b642628154b3
|
|
| BLAKE2b-256 |
0ec83fdd4a047339985def24cf863849ca1fc4fa8a43b16016b4994790a9f40a
|
Provenance
The following attestation bundles were made for skillmesh-0.2.0.tar.gz:
Publisher:
publish.yml on varunreddy/SkillMesh
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
skillmesh-0.2.0.tar.gz -
Subject digest:
119952a15d215cfae3c5001c766c9fbb3aa4a8d5c29182abb4462bbec4a9b147 - Sigstore transparency entry: 1006398768
- Sigstore integration time:
-
Permalink:
varunreddy/SkillMesh@28ef6cd98e4fce8f106fb28ec187989eeb916b01 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/varunreddy
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@28ef6cd98e4fce8f106fb28ec187989eeb916b01 -
Trigger Event:
push
-
Statement type:
File details
Details for the file skillmesh-0.2.0-py3-none-any.whl.
File metadata
- Download URL: skillmesh-0.2.0-py3-none-any.whl
- Upload date:
- Size: 23.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
062cbfab6756297f2240c84470cdcc1a905229a18664839a084856ebe8723285
|
|
| MD5 |
2b0ad7c22e5938d2b6b760c7267fd503
|
|
| BLAKE2b-256 |
9fcf452dda0397acba9d8723d0bab7e38e3d14b2637346af1d2a5a2385f55710
|
Provenance
The following attestation bundles were made for skillmesh-0.2.0-py3-none-any.whl:
Publisher:
publish.yml on varunreddy/SkillMesh
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
skillmesh-0.2.0-py3-none-any.whl -
Subject digest:
062cbfab6756297f2240c84470cdcc1a905229a18664839a084856ebe8723285 - Sigstore transparency entry: 1006398769
- Sigstore integration time:
-
Permalink:
varunreddy/SkillMesh@28ef6cd98e4fce8f106fb28ec187989eeb916b01 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/varunreddy
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@28ef6cd98e4fce8f106fb28ec187989eeb916b01 -
Trigger Event:
push
-
Statement type: