The skill index,
at your fingertips.
Build agent tooling on top of the Skilly catalog. Search what skills do, fetch complete instructions, and inspect separate security and static maturity assessments through one public API.
https://skilly.sh API v1 · JSON over HTTPSOne request to start exploring.
Every endpoint is public and every response is JSON. Use the OpenAPI document to generate a typed client, or call the public search endpoint directly. Search supports broad q queries and targeted field parameters. Use type=official or type=community for upstream provenance; use /api/v1/skills/curated for Editor’s picks.
curl \
"https://skilly.sh/api/v1/skills/search?q=typography&limit=10"Rate limits are applied per requester IP at each edge destination. If you receive 429, wait for the interval in Retry-After before retrying.
Everything you need to build on the index.
Discovery starts with the API.
The search endpoint is the main discovery surface for agents and integrations. Use it when software needs skill summaries, filters, and a stable JSON response. The browser directory is available when a person needs a shareable, paginated result page.
/api/v1/skills/search for JSON skill summaries and filters. Human directoryUse /?q=... when someone needs a browser search with filters and pagination.| Parameter | Searches | Example |
|---|---|---|
q | All indexed fields: name, description, category, source, and full instructions. Multiple unquoted words must all match somewhere in the skill; double quotes require an exact contiguous phrase. Minimum 2 characters when provided. | q=%22Use%20when%20the%20user%22 |
name | Skill name. | name=frontend |
description | YAML frontmatter description. | description=image%20generation |
category | Catalog category. | category=design |
technology | Exact technology label. | technology=react |
application | Exact named application label. | application=linear |
source | Source repository. | source=anthropics%2Fskills |
type | Upstream provenance: official or community. | type=official |
instructions | Full SKILL.md instructions. | instructions=security%20audit |
owner | GitHub owner. An additional filter for GitHub-backed skills. | owner=anthropics |
limit | Maximum results. Defaults to 50; accepted range is 1–200. | limit=10 |
format | Response format: json (default) or text. | format=text |
Field-specific parameters are combined with AND: category=project-management&application=linear only returns skills matching both filters. A broad q can be combined with field filters too.
curl 'https://skilly.sh/api/v1/skills/search?q=%22Use%20when%20the%20user%22&limit=10'curl 'https://skilly.sh/api/v1/skills/search?category=project-management&application=linear&limit=10'curl 'https://skilly.sh/api/v1/skills/search?q=database%20migration&limit=10&format=text'const params = new URLSearchParams({
q: 'security audit',
category: 'Development',
limit: '10',
})
const response = await fetch(
'https://skilly.sh/api/v1/skills/search?' + params,
)
const { data } = await response.json() Use URLSearchParams instead of concatenating unescaped user input. It encodes spaces, slashes, and other reserved characters correctly.
Use the normal search URL.
For a lightweight option without the /api prefix, query the main directory directly. Add format=json or format=text when the response should be machine-readable.
curl 'https://skilly.sh/?q=typography&format=json'Use curl 'https://skilly.sh/?q=typography&format=text' for plain text, or omit format for the regular browser search. The API endpoint above remains the recommended integration surface.
Handle the result envelope consistently.
Search responses contain result summaries, including each skill’s canonical URL and install URL. Fetch the public skill detail endpoint when an integration needs the complete SKILL.md content.
{
"data": [
{
"name": "frontend-design",
"description": "...",
"category": "Design",
"source": "anthropics/skills",
"url": "https://skilly.sh/anthropics/skills/frontend-design"
}
],
"query": "frontend",
"searchType": "fuzzy",
"count": 1,
"durationMs": 3
}{ "error": "invalid_query", "message": "..." }. A missing query returns 400; search itself does not require authentication.Predictable when something goes wrong.
Error responses use one stable shape so clients can handle failures consistently.
{
"error": "invalid_query",
"message": "Search query must be at least 2 characters."
}