List a Skill
Skills are portable markdown playbooks - an Agent Skills SKILL.md that an agent reads on demand. Any public GitHub repo that ships one can be listed in the catalog. Adding it is a one-PR change against skills.yaml.
For listing an A2A agent instead, see List an Agent.
Prerequisite: a public repo with a SKILL.md
The catalog aggregator pulls each SKILL.md from your repo at the pinned ref. It must:
- Be reachable at a known path under the repo (
SKILL.mdat root, or a nested path likeskills/<name>/SKILL.mdfor multi-skill repos). - Carry valid frontmatter:
name(matching^[a-zA-Z0-9_][a-zA-Z0-9_-]*$) anddescription(1-1024 chars). The description alone has to let an agent decide whether to invoke the skill, so vague descriptions get filtered out at runtime. - Declare a
licensein the frontmatter, or carry one in theskills.yamlentry. Must be an SPDX identifier from the ADL Skill enum:MIT,Apache-2.0,BSD-2-Clause,BSD-3-Clause,GPL-2.0,GPL-3.0,LGPL-2.1,LGPL-3.0,MPL-2.0,ISC,CC0-1.0,CC-BY-4.0,CC-BY-SA-4.0,Unlicense, orProprietary.
The skill-creator skill in inference-gateway/skills is itself a worked example for authoring a compliant SKILL.md - copy it as a starting point.
Use the "+ Add skill" button
The fastest path is the + Add skill button on the Skills page. It opens a dialog with a copy-paste snippet and a "Continue to GitHub" link that lands you at https://github.com/inference-gateway/skills/edit/main/skills.yaml. GitHub will fork the repo and open the PR for you - paste the entry, fill in the fields for your skill, commit, and submit.
The entry shape
skills.yaml is a flat list. Each entry carries the fields the build job cannot derive from SKILL.md frontmatter alone:
- url: https://github.com/<owner>/<repo>
ref: v1.0.0
path: SKILL.md
vendor: <your-org-or-handle>
license: Apache-2.0
tags:
- <tag>
categories:
- developer-tools
homepage: https://<optional-project-url>Per field:
url(required) -https://github.com/<owner>/<repo>URL of the repo that hosts theSKILL.md.ref(optional) - branch, tag, or commit SHA. Defaults tomain. Pinning a release tag is strongly recommended for third-party skills so a breaking change upstream cannot silently invalidate the catalog. Ignored for entries pointing atinference-gateway/skillsitself (the working tree is always the source of truth).path(optional) - path toSKILL.mdwithin the repo. Defaults toSKILL.md. Required for multi-skill repos.vendor(required) - org or handle shown in the registry UI; feeds the vendor filter on/skills/.license(optional) - SPDX identifier from the ADL Skill enum (see list above). Falls back toSKILL.mdfrontmatterlicense:if omitted.tags(required) - free-form discoverability strings.categories(required) - higher-level grouping (e.g.developer-tools).homepage(optional) - landing URL beyond the source repo.
The build script reads name and description from the upstream SKILL.md frontmatter - they are not duplicated in skills.yaml.
What happens after merge
The build-catalog.yml workflow in inference-gateway/skills runs on every push that touches skills.yaml, skills/**, or the build script; on a daily cron at 0 4 * * * UTC; and on workflow_dispatch. It:
- Fetches
SKILL.mdfrom each repo at the listed ref (or reads from the local working tree for self-hosted entries). - Parses and validates frontmatter (
name,description, optionallicense). - Rejects duplicate
namecollisions across local and external entries. - Validates
licenseis in the ADL Skill enum. - Sorts entries and writes
catalog.json. - Opens a follow-up PR (
chore(catalog): Rebuild catalog.json) for a maintainer to merge.
Once that rebuild PR lands on main, the jsDelivr @main cache window bounds visibility - your entry typically appears here within a few hours, at most ~12.
If any fetch, parse, frontmatter, license, or dedupe check fails, the workflow aborts before writing catalog.json - it never publishes a partial catalog.
Optional: host the SKILL.md body in inference-gateway/skills
Skills the Inference Gateway team maintains directly can live in the catalog repo itself, under skills/<name>/SKILL.md. The skills.yaml entry then points url back at https://github.com/inference-gateway/skills and sets path to the in-repo location:
- url: https://github.com/inference-gateway/skills
path: skills/<name>/SKILL.md
vendor: inference-gateway
license: Apache-2.0
tags:
- <tag>
categories:
- developer-tools
homepage: https://github.com/inference-gateway/skillsThe folder name under skills/ must match the SKILL.md frontmatter name: exactly. The build script reads path from the local working tree in this case, so PRs that add a new in-repo skill build correctly before the branch is merged to main.
SKILL.md frontmatter for an in-repo skill:
---
name: <skill-name>
description: <one sentence: what it does, when to use it>
license: Apache-2.0
---
# <Skill Title>
Use this skill when <trigger>.This is the same shape the build job expects for external skills - the only difference is where the file lives.
Conventions
- Conventional commits, capitalized subject -
feat(catalog): Add foo-skillis the expected style. Semantic-release in the skills repo reads these to compute versions. - Do not hand-edit
catalog.json,CHANGELOG.md, or therelease/updatedfields - all three are regenerated (the catalog by the build workflow, the rest by semantic-release).