Contributing to AMD Skills

August 27, 2026 ยท View on GitHub

We welcome contributions from AMD engineers and selected partners.

Only federated submissions are accepted. Your skill lives in an AMD-owned product repo, which stays the source of truth, and this catalog vendors a pinned copy. We no longer accept skills authored directly under skills/ in this repository. Skills already there continue to ship.

Federation keeps each skill owned and versioned by the team that owns the product it describes, on that product's release cadence, while users still get everything from one install.

Three companion guides hold the detail:

GuideRead it for
docs/skill-requirements.mdThe rules CI enforces: required files, frontmatter limits, skill cards, the pre-PR checklist
docs/best-practices.mdHow to write a skill agents actually reach for: fit, descriptions, body structure, scripts, AMD specifics
docs/evals.mdHow structure, routing, and behavior are graded, and what to put in evals/evals.json

For repository structure and the broader catalog model, see the README.

Eligibility

The source repo must be under an AMD GitHub org (e.g. AMD-AGI/...). Non-AMD repos are not accepted at this time.

1. Author the skill in your repo

Each skill is a folder holding a valid SKILL.md, a skill-card.md, and an evals/evals.json dataset. Put the folders anywhere in your repo, commonly skills/ or .agents/skills/.

The catalog always tracks your main branch. That is deliberate: the catalog cannot be pointed at a side branch, so what reaches users is what your own review process has already merged. Land skill changes on main and the catalog follows.

Everything in the folder ships, so the requirements are yours to maintain upstream alongside the skill. See docs/skill-requirements.md for what a valid skill must contain and docs/best-practices.md for how to make it good.

2. Register your source

Add your repo to .github/federation.json. Every skill is declared individually, by the full path of its folder in your repo, so one repo can federate as many skills as it likes from wherever they live:

{
  "sources": [
    {
      "repo": "AMD-Org/MyProject",
      "license": "MIT",
      "skills": [
        {
          "path": "skills/my-skill",
          "as": "myproject-my-skill"
        },
        {
          "path": "tools/agents/skills/other-skill",
          "as": "myproject-other-skill"
        }
      ]
    }
  ]
}
FieldMeaning
repoGitHub <owner>/<repo>, must be AMD-owned. Always tracked at main
licenseSPDX id, carried into each vendored copy's marker file
skills[].pathPath of the skill folder inside your repo, from the repo root
skills[].asOptional local catalog name; use it to namespace as <project>-<skill> so names stay unique

There is no ref, branch, or commit field. Federation is main-only by design.

3. Vendor and validate locally

The scripts read .github/federation.json from your working tree.

uv run .github/scripts/federate_skills.py --check-catalog  # schema only, no clone
uv run .github/scripts/federate_skills.py                  # vendor into skills/<name>/
./.github/scripts/publish.sh                               # regenerate the manifests
./.github/scripts/check.sh                                 # validate (same command CI runs)

The importer also adds your skill to the published bundle, so there is no manifest to edit by hand.

4. Open a pull request

Commit .github/federation.json, skills/**, and the regenerated manifests. A maintainer reviews and merges once CI passes. The validate workflow runs check.sh; the evals workflow runs your prompts against a real agent.

Never hand-edit vendored skills under skills/. Changes must come from your repo via re-import, or they will be overwritten.

Catch failures before nightly

The catalog runs checks against your skills. Run the same checks in your own repo by calling them as reusable workflows, so you catch breakage during normal development instead of in the catalog's nightly run. The logic and config live in amd/skills, so green in your repo means green in the catalog, and you never copy or maintain the check yourself.

Add a caller workflow to your repo (e.g. .github/workflows/skills-checks.yml):

name: skills-checks
on:
  pull_request:
  workflow_dispatch:
jobs:
  external-references:
    uses: amd/skills/.github/workflows/external-reference-check.yml@main
    permissions:
      contents: read
      issues: write

Update or remove

Merge the change to main in your repo and the catalog picks it up on its own. The federate-skills workflow runs nightly (and on demand), re-vendors any skill whose upstream folder contents changed, and opens a pull request titled Bump <skill> to <short commit>. A night with no upstream change produces no pull request, so the only ones you see are real bumps.

To remove a skill, open a pull request that drops its entry from .github/federation.json, deletes the vendored skills/<name>/ folder, and regenerates the manifests. Federation never deletes anything on its own: a nightly run only reports a vendored copy that no source declares any more.