Skip to content

Agent Skills validation

The repository skill catalog is validated locally and in CI by:

python scripts/skills/validate.py

The gate is deterministic and local-only. It does not fetch content from the network, resolve web links, import the OpenMed package, or make network requests.

It checks:

  • YAML frontmatter, kebab-case folder/name identifiers, descriptions, metadata, bounded file and body length, and duplicate identifiers;
  • relative Markdown links and repository-bound referenced files, rejecting local file schemes, backslash paths, and symlink escapes;
  • membership of every skills/<name> directory in the committed .claude-plugin/marketplace.json pack, with no duplicate or unknown entries;
  • the --help exit status of executable helpers under skills/ and scripts/skills/ with a temporary home, offline environment flags, proxy blocking, scratch-only temporary directories, discarded output, and no ambient credential variables.

Failures contain only a repository path, an optional line number, and a fixed diagnostic. Skill bodies, parser details, and helper output are intentionally not included in logs. Absolute host paths are replaced with a fixed diagnostic. Symlinked helper roots, helpers, skill directories, and SKILL.md files are rejected rather than followed.

Every executable helper added to the skill workflow must have a successful, offline --help command and a focused test containing an assertion and a reference to the helper. CI runs the complete tests/unit/skills directory; broad repository and platform testing remains owned by the other workflows.

Use --help to inspect the command without validating or writing anything:

python scripts/skills/validate.py --help