A searchable, self-maintaining catalog over any corpus of tools, skills, agents, and components.
Project description
toolery
A searchable, self-maintaining catalog over any corpus of tools, skills, agents, and components.
Point toolery at a collection of heterogeneous assets — Claude skills, agent specs,
MCP tools, docs, or packages — and get one searchable catalog: ask "what do I
already have for X?" and get a ranked answer, not fifty schemas.
pip install toolery
Quick start
Search a folder of notes/docs from the command line:
toolery search "dedupe a csv" ~/my/notes
Or from Python — the simplest thing that works, with zero configuration:
import toolery
cat = toolery.catalog("~/my/notes") # harvest a folder of markdown
for card, score in cat.search("parse pdf"):
print(score, card.name, card.source_uri)
Out of the box the search is a fast, dependency-free lexical scorer, so nothing to install, no models, no API keys.
Any corpus, any asset kind
A catalog is built from sources. A source is a folder, a built-in harvester, or bare cards:
import toolery
cat = toolery.catalog(
toolery.skills("~/.claude/skills"), # Claude Agent Skills (SKILL.md)
"~/my/notes", # a folder of docs
[toolery.Card("grep", "tool", "grep", "search text with patterns")],
)
cat.search("find text in files")
cat.by_kind("skill")
cat.kinds # {'skill': 42, 'doc': 118, 'tool': 1}
Everything is projected onto one uniform record, the Card
(id, kind, name, description, tags, source_uri, content_ref). Supporting a new
asset kind (agent specs, MCP tool schemas, packages) is just another generator that
yields Cards — nothing else changes.
Bring your own search
catalog(...) and Catalog(...) accept a search_backend — any callable
(query, cards, *, limit) -> [(card, score), ...]. The default,
toolery.lexical_search, needs no dependencies. A semantic backend built on the
ir retrieval substrate drops into the same seam
(planned), so you can start lexical and upgrade to embeddings without changing your code.
from toolery import Catalog, lexical_search
cat = Catalog(cards, search_backend=lexical_search) # or your own backend
Status
Early (0.x). The lexical core, the Card/harvester/catalog model, and the CLI are
in place; an ir-backed semantic backend and more built-in harvesters (agents, MCP
tools, packages) are next.
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 toolery-0.0.2.tar.gz.
File metadata
- Download URL: toolery-0.0.2.tar.gz
- Upload date:
- Size: 11.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2b8f89c23f34d8923b40950ee35d3f5454692c5e9371c510c0f185953160bcdf
|
|
| MD5 |
427364d53c36016d89ec6f313116965c
|
|
| BLAKE2b-256 |
10cde2f462efa7ae36d4a262ecdd4011fb2c7d234608b3ad6b32ba2cbc645505
|
File details
Details for the file toolery-0.0.2-py3-none-any.whl.
File metadata
- Download URL: toolery-0.0.2-py3-none-any.whl
- Upload date:
- Size: 11.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7b2fdc2d1409be999adb9dd989e12f9f218f756ac5c929dc0c044505c680139d
|
|
| MD5 |
63c25356fc0cf0d41ef7376daaef7ea4
|
|
| BLAKE2b-256 |
94833cc6a96ae01d6a37a36701a81ba6ae84a1e355a4ae8b7c1fa976398f4252
|