GA4GH AI Registry: Agent Entry Specification
Status: Draft
Version: 0.1.0
Date: 2026-09-25
Schema: schemas/entry-core.v1.schema.json (composed with) schemas/agent-entry.v1.schema.json
Applies to: entries at data/agents/<id>.json with "type": "agent"
1. Purpose
This document specifies the normative structure of an agent entry in the GA4GH AI Registry: which fields it MUST, SHOULD, or MAY carry, how those fields relate to the agent’s own live agent-info endpoint, 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/agent-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 the agent’s live endpoint
An agent entry does not embed the agent’s runtime state. It carries a pointer to the agent’s own live agent-info endpoint (agent_info_uri, conventionally {agent_base_url}/service-info) plus agent_info_snapshot, a cache of that endpoint’s registry-relevant fields, mirrored under the endpoint’s own field names.
agent_info_snapshot MUST be rendered, and MUST be understood by every consumer of this specification, as a cache, never as a live status read. It is stamped by the common core’s record.last_verified (when a maintainer last confirmed the entry) and by its own agent_info_snapshot.last_synced (when the snapshot itself was last refreshed from the live endpoint); a detail page MUST show the latter prominently so a reader is never left thinking a stale mirror is a live read.
An agent’s source code location is external and already covered by the common core’s repository field (any git host). Its live runtime location is external and covered by agent_info_uri, which may point at any publicly reachable service-info endpoint regardless of where the agent is actually deployed. Nothing about this entry requires the registry to host the agent’s code or runtime.
The registry mirrors only the fields a public, unauthenticated caller would see from the endpoint’s own anonymous-tier disclosure. It does not attempt to reproduce an authenticated or authorised disclosure tier, because a static public catalogue structurally cannot act as an authenticated caller.
agent_info_snapshot.enrichment (trust-and-behaviour oriented, sourced from the agent’s own live endpoint) is a distinct concept from a model entry’s registry_enrichment (documentation-completeness oriented, from the GA4GH Model Card; see spec/model-card.md). The two MUST NOT be merged into a single score, and an agent entry never carries the model variant.
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 "agent".
category MUST be one value from schemas/vocab/categories/agent.json: variant-interpretation, literature-curation, clinical-decision-support, data-access-governance, research-assistant, workflow-orchestration, regulatory-compliance, or other. This categorises the agent’s task domain and is distinct from agent_info_snapshot.agent_type, which is the live endpoint’s own classification, mirrored verbatim.
3.2 Agent-specific top-level fields
| Field | Requirement | Type | Description |
|---|---|---|---|
agent_info_uri |
MUST | string (URI) | The agent’s live {agent_base_url}/service-info endpoint. The registry mirrors only the fields that endpoint’s own anonymous-tier disclosure would show a public, unauthenticated caller. |
alignment_card_uri |
MAY | string (URI) | Link to the agent’s alignment card or equivalent behavioural documentation, if published. |
agent_info_snapshot |
MUST | object | A cache of the agent’s live endpoint. See 3.3. |
3.3 agent_info_snapshot object
| Field | Requirement | Type | Description |
|---|---|---|---|
protocol_version |
MUST | string | The agent runtime protocol version the endpoint implements, e.g. "0.5.0". |
agent_type |
MUST | string | The live endpoint’s own agent-type classification for this agent. |
trust_level |
MUST | string | The live endpoint’s own trust-level field, verbatim, distinct from enrichment.trust_tier. |
auo_capabilities |
MAY | string[] | Autonomous-use-operation capabilities the agent declares. |
guardrails_enabled |
MAY | string[] | Runtime guardrails the agent reports as enabled. |
delegation_support |
MAY | object | { max_depth?: integer >= 0, attenuated_minting?: boolean, supported_credential_types?: string[] }. No further properties are permitted. |
dependencies |
MAY | object | { agents?: string[], tools?: string[] }. No further properties are permitted. |
trace_endpoint |
MAY | string (URI) | Where audit traces for this agent can be retrieved, if publicly disclosed. |
audit_retention_days |
MAY | integer, >= 0 | |
last_synced |
MAY | string (date-time) | When this agent_info_snapshot block was last refreshed from agent_info_uri. SHOULD be present and rendered prominently on every detail page that shows a snapshot. |
enrichment |
MUST | object | The live endpoint’s own agent-registry enrichment block, verbatim. See 3.4. |
3.4 agent_info_snapshot.enrichment object
| Field | Requirement | Type | Description |
|---|---|---|---|
trust_score |
MAY | integer, 0-1000 | |
trust_tier |
MAY | string, one of untrusted, probationary, registered, controlled, clinical |
|
gasl_level |
MUST | integer, 0-4 | The live endpoint’s own range, verbatim. Also projected into the common core’s safety_classification[] as {scheme: "ga4gh-agent-runtime-risk", level: "<n>", source: "synced-from-endpoint"} (see spec/entry-core.md Section 3, and the internal technical design document Section 3.3). |
last_audit_date |
MAY | string (date) | |
dependency_count |
MAY | integer, >= 0 | |
guardrail_coverage |
MAY | number, 0.0-1.0 |
No property beyond those listed above is permitted anywhere in agent_info_snapshot or its nested objects: every nested object in this schema closes with unevaluatedProperties: false, and the composed agent-entry schema closes the same way at its root.
4. Validation rules
A conforming agent entry MUST satisfy all of the following, in addition to the common-core rules in spec/entry-core.md:
typeMUST be the literal string"agent".agent_info_uriandagent_info_snapshotMUST both be present;agent_info_snapshotMUST in turn carryprotocol_version,agent_type,trust_level, andenrichment, andenrichmentMUST carrygasl_level.agent_info_snapshot.enrichment.gasl_levelMUST be projected into the common core’ssafety_classification[]as a{scheme: "ga4gh-agent-runtime-risk", ...}entry (seespec/entry-core.mdSection 3.3). Nothing is renamed and nothing is lost between the two representations:gasl_levelremains an integer insideagent_info_snapshot.enrichment, and its scheme-qualified string form ("0"through"4") also appears insafety_classification[].- Because JSON Schema validates only the shape of the submitted file and cannot itself fetch
agent_info_uri, live-endpoint conformance and cache-consistency checks (whether the snapshot still matches what the live endpoint reports) are the responsibility ofscripts/validate.ts, not of the schema. A conformant validator SHOULD compare, at minimum, the four named pathsprotocol_version,agent_type,trust_level, andenrichment.gasl_levelagainst a fresh read ofagent_info_uri, and MUST NOT deep-compare the whole snapshot object, since fields such aslast_syncedare expected to differ between a stored snapshot and a fresh read. agent_info_snapshotMUST be populated by reading the agent’s own live agent-info endpoint directly. It MUST NOT be populated from a third-party agent-registry aggregator, since none is assumed to exist for this purpose.delegation_supportanddependencies, when present, MUST NOT carry any property beyond those listed in 3.3.- As for every entry (
spec/entry-core.mdSection 4),certification_tiersubmitted as anything other thanunsignedMUST be rejected at the submission gate.
5. Worked example
No agent entry has been catalogued in data/agents/ at the time of writing. The following is an illustrative, non-catalogued example constructed to exercise every field this specification defines.
{
"id": "example-variant-triage-agent",
"type": "agent",
"name": "Example Variant Triage Agent",
"summary": "Illustrative autonomous agent that triages incoming variant calls against ClinVar and flags candidates for expert review.",
"description": "A worked example for spec/agent-card.md. Not a real, catalogued entry.",
"homepage": "https://example.org/variant-triage-agent",
"repository": "https://github.com/example-org/variant-triage-agent",
"license": "Apache-2.0",
"maintainers": [
{ "name": "Jane Researcher", "github": "janeresearcher", "affiliation": "Example Genomics Institute" }
],
"version": "0.4.0",
"keywords": ["variant-triage", "clinvar", "autonomous-agent"],
"category": "variant-interpretation",
"ga4gh_standards": [],
"safety_classification": [
{
"scheme": "ga4gh-agent-runtime-risk",
"level": "2",
"source": "synced-from-endpoint"
}
],
"certification_tier": "unsigned",
"record": {
"created": "2026-09-25T00:00:00.000Z",
"updated": "2026-09-25T00:00:00.000Z",
"last_verified": "2026-09-25T00:00:00.000Z"
},
"agent_info_uri": "https://variant-triage-agent.example.org/service-info",
"alignment_card_uri": "https://example.org/variant-triage-agent/alignment-card.md",
"agent_info_snapshot": {
"protocol_version": "0.5.0",
"agent_type": "variant-interpretation-assistant",
"trust_level": "registered",
"auo_capabilities": ["read-clinvar", "draft-classification"],
"guardrails_enabled": ["human-in-the-loop-required", "output-provenance-logging"],
"delegation_support": {
"max_depth": 1,
"attenuated_minting": true,
"supported_credential_types": ["sd-jwt-vc"]
},
"dependencies": {
"agents": [],
"tools": ["clinvar-lookup", "acmg-classifier"]
},
"trace_endpoint": "https://variant-triage-agent.example.org/traces",
"audit_retention_days": 365,
"last_synced": "2026-09-24T09:00:00.000Z",
"enrichment": {
"trust_score": 640,
"trust_tier": "registered",
"gasl_level": 2,
"last_audit_date": "2026-09-01",
"dependency_count": 2,
"guardrail_coverage": 0.8
}
}
}
6. See also
spec/entry-core.mdfor the common entry core shared by every registry type.spec/model-card.md,spec/skill-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.2 and Section 3.3, and the internal PRD Section 6.3, for the design rationale behind this profile.