GA4GH AI Registry: Skill Entry Specification
Status: Draft
Version: 0.1.0
Date: 2026-09-25
Schema: schemas/entry-core.v1.schema.json (composed with) schemas/skill-entry.v1.schema.json
Applies to: entries at data/skills/<id>.json with "type": "skill"
1. Purpose
This document specifies the normative structure of a skill entry in the GA4GH AI Registry: which fields it MUST, SHOULD, or MAY carry, how it embeds a SKILL.md-style description, and what a validator or maintainer reviewer checks beyond the JSON Schema itself.
This specification defines no fields that are not already present in schemas/skill-entry.v1.schema.json and schemas/entry-core.v1.schema.json. Where this document and the schema files disagree, the schema files are authoritative.
2. Relationship to upstream skill formats
Unlike a model or an agent entry, a skill entry embeds its upstream document rather than referencing it: skill is an embedded, SKILL.md-style frontmatter object, carried inline in the entry file rather than fetched live.
A skill entry additionally carries the fields Project #24 specifies as required for a certifiable skill: defined inputs, defined outputs, a human_oversight requirement level, whether the skill performs provenance_logging, and a pointer to its evaluation_criteria_uri. These fields are drawn from Project #24’s own stated certification requirements, not invented generically for this registry.
skill.name/skill.description are deliberately unconstrained beyond non-empty. The registry only indexes an already-authored SKILL.md; it does not re-validate conformance to any upstream skill-format specification it does not itself own (for example, agentskills.io’s own length limits on name and description). A submitter targeting a specific upstream ecosystem’s compatibility SHOULD keep within that ecosystem’s own limits, but this registry’s schema will not reject a submission that exceeds them.
skill. frontmatter fields beyond name and description are preserved as submitted: the skill object’s shape is intentionally open beyond its two required fields, mirroring how Claude Code itself tolerates unrecognised SKILL.md frontmatter keys.
source.repository is shaped to match the agentregistry project’s own Skill kind ({ url, subfolder? }), so that a future integration with agentregistry, should one happen, is a mapping exercise rather than a schema rework. source.repository.url MUST be present: it is a registry-side requirement, not one imposed by any upstream skill-format specification, because every browse and detail page, and the submission pipeline, need a canonical source location to link to and re-verify against.
3. Field reference
3.1 Common core
See spec/entry-core.md for the fields common to every entry type. type is fixed to the literal "skill".
category MUST be one value from schemas/vocab/categories/skill.json: scientific-writing, consent-review, governance-support, data-curation, variant-interpretation, literature-extraction, regulatory-compliance, or other.
3.2 Skill-specific top-level fields
| Field | Requirement | Type | Description |
|---|---|---|---|
skill |
MUST | object | Embedded SKILL.md-style frontmatter. See 3.3. |
source |
MUST | object | { repository: { url (MUST), subfolder? } }. See 3.4. |
inputs |
MUST | array of objects | Defined inputs the skill accepts. See 3.5. MAY be an empty array. |
outputs |
MUST | array of objects | Defined outputs the skill produces. See 3.5. MAY be an empty array. |
human_oversight |
MUST | string, one of required, recommended, none |
The level of human oversight this skill’s use requires. |
provenance_logging |
MUST | boolean | Whether the skill performs provenance logging of its own use. |
evaluation_criteria_uri |
MUST | string (URI) | Pointer to the skill’s evaluation criteria document. |
auo_capabilities |
MAY | string[] | Autonomous-use-operation capabilities the skill declares. |
host_runtimes |
MAY | string[] | Coding harnesses or runtimes this skill has been verified to run under. Each value SHOULD be one of the closed enumeration in schemas/vocab/harnesses.json (claude-code, codex, gemini-cli, opencode, mcp-generic, agent-plugins); this constraint is enforced by scripts/validate.ts against the vocabulary file, not by a schema enum, so the vocabulary can grow without a schema change. |
3.3 skill object
| Field | Requirement | Type | Description |
|---|---|---|---|
name |
MUST | string, non-empty | The skill’s own name, as declared in its SKILL.md frontmatter. |
description |
MUST | string, non-empty | The skill’s own description, as declared in its SKILL.md frontmatter. |
| (other keys) | MAY | any | Ecosystem-specific frontmatter fields beyond name/description are preserved as submitted. |
3.4 source object
| Field | Requirement | Type | Description |
|---|---|---|---|
repository.url |
MUST | string (URI) | Source repository for the skill, on any git hosting service (GitHub, GitLab, self-hosted, or other); not limited to a GA4GH-controlled host. |
repository.subfolder |
MAY | string | Relative path from the repository root to the skill, for a skill living in a monorepo or a nested package structure. |
No property beyond repository (and, within it, beyond url/subfolder) is permitted in source.
3.5 inputs[] / outputs[] item shape
| Field | Requirement | Type | Description |
|---|---|---|---|
name |
MUST | string, non-empty | |
type |
MAY | string | |
description |
MAY | string |
No property beyond name/type/description is permitted per item.
No property beyond those listed in 3.1-3.5 is permitted anywhere in a skill entry’s type-specific block: the composed skill-entry schema closes with unevaluatedProperties: false at its root, and each nested object (source, source.repository, each inputs[]/outputs[] item) closes the same way.
4. Validation rules
A conforming skill entry MUST satisfy all of the following, in addition to the common-core rules in spec/entry-core.md:
typeMUST be the literal string"skill".skill,source,inputs,outputs,human_oversight,provenance_logging, andevaluation_criteria_uriMUST all be present.skill.nameandskill.descriptionMUST both be non-empty strings.source.repository.urlMUST be present and MUST resolve (link resolution is checked byscripts/validate.ts, not by the schema).- Each item in
inputs[]andoutputs[]MUST carry a non-emptyname. human_oversightMUST be exactly one ofrequired,recommended, ornone.host_runtimes[], when present, SHOULD be checked againstschemas/vocab/harnesses.jsonby the validation pipeline (this is a vocabulary check, not a schema-level enum, matching the conventioncheckCategory/checkLicensealready use).- As for every entry (
spec/entry-core.mdSection 4),certification_tiersubmitted as anything other thanunsignedMUST be rejected at the submission gate.
5. Worked example
Adapted from the real, currently-catalogued entry data/skills/bioskills-acmg-classification.json, trimmed for brevity:
{
"id": "bioskills-acmg-classification",
"type": "skill",
"name": "bioSkills ACMG Classification skill",
"summary": "Applies the ACMG/AMP 2015 framework with ClinGen SVI specifications and the Tavtigian Bayesian point system to classify germline variants P/LP/VUS/LB/B, with a full evidence trail.",
"description": "The bio-clinical-databases-acmg-classification skill from GPTomics' bioSkills library...",
"homepage": "https://github.com/GPTomics/bioSkills/tree/main/clinical-databases/acmg-classification",
"repository": "https://github.com/GPTomics/bioSkills",
"license": "MIT",
"maintainers": [
{ "name": "Susheel Varma", "github": "susheel", "affiliation": "GA4GH AI Workstream / Sage Bionetworks" }
],
"version": "3.0",
"keywords": ["acmg", "clingen-svi", "variant-classification", "clinical-genomics", "pathogenicity", "bioskills"],
"category": "variant-interpretation",
"safety_classification": [],
"certification_tier": "unsigned",
"record": {
"created": "2026-09-08T00:00:00.000Z",
"updated": "2026-09-08T00:00:00.000Z",
"last_verified": "2026-09-08T00:00:00.000Z"
},
"skill": {
"name": "bio-clinical-databases-acmg-classification",
"description": "Applies ACMG/AMP 2015 framework with ClinGen SVI specifications...",
"license": "MIT",
"metadata": {
"homepage": "https://github.com/GPTomics/bioSkills/tree/main/clinical-databases/acmg-classification"
}
},
"source": {
"repository": {
"url": "https://github.com/GPTomics/bioSkills.git",
"subfolder": "clinical-databases/acmg-classification"
}
},
"inputs": [
{ "name": "variant", "type": "string", "description": "Variant identifier (HGVS, VCF record, or genomic coordinate) plus gene context." },
{ "name": "evidence_codes", "type": "array", "description": "Population frequency, computational, functional-assay, and segregation evidence." }
],
"outputs": [
{ "name": "classification", "type": "object", "description": "The five-tier ACMG/AMP classification with a per-criterion evidence trail." }
],
"human_oversight": "required",
"provenance_logging": true,
"evaluation_criteria_uri": "https://github.com/GPTomics/bioSkills/blob/main/resources/bioskills_eval_20260328.pdf",
"host_runtimes": ["claude-code", "codex", "opencode"]
}
6. See also
spec/entry-core.mdfor the common entry core shared by every registry type.spec/model-card.md,spec/agent-card.md,spec/mcp-server-card.md,spec/plugin-card.md,spec/bundle.mdfor the other five entry types.- the internal technical design document Section 3.5.3 and the internal PRD Section 6.4 for the design rationale behind this profile, and Project #24 for the certifiable-skill requirements it draws on.