-
Notifications
You must be signed in to change notification settings - Fork 7
Open
Description
Starting with the #4 here is an updated proposal. Sorry for the CDDL, it's just a lot more compact to work with. If only GitHub did syntax highlighting.
; The unified AI Card object for any AI related service
AICard = {
$schema: text, ; Declares the schema this card adheres to (e.g., "https://ai-AI Card-protocol.org/ai-card/v1/schema.json")
id: text, ; The primary verifiable ID for the AI Card (e.g., DID)
name: text, ; A human-readable name for the AI Card
description: text, ; A short, human-readable description of the AI Card's purpose
? logoUrl: text, ; A direct URL to the AI Card's logo image. Could be a data URL or an HTTPS URL.
? tags: [* text], ; A list of keywords to aid in discovery
publisher: {
id: text, ; A verifiable ID for the publisher, e.g., a DID or organization ID
name: text, ; The human-readable name of the publisher
? attestations: [* Attestation] ; A list ofverifiable credentials (e.g., JWT) asserting the publisher's credibility
},
? attestations: [* Attestation] ; A list of compliance or other attestations for AI Card
createdAt: text, ; An ISO 8601 timestamp of when the AI Card was first published
updatedAt: text, ; An ISO 8601 timestamp of when this card was last updated
? metadata: {* metadata-key => any}, ; An open "black box" for any other non-standard metadata
? maturity: ("preview" / "stable" / "deprecated"), ; AI Card lifecycle stage
? signature: text, ; Detached JWS compact serialization (<header>..<signature>) signing the canonical card content
services: {* service-type => any}, ; Map of interaction protocols this AI Card supports, keyed by protocol type
}
; Service type choices
service-type = "mcp" / "a2a" / text
; Well-known metadata key choices
metadata-key = "privacyUrl" / "termsOfUseUrl" / "supportUrl" / "documentationUrl" / "version" / text
; A single compliance, security, or custom attestation
Attestation = {
type: text, ; The type of attestation (e.g., "SOC2", "HIPAA", "CustomBadge")
? badgeUrl: text, ; (Low-Trust) A URL to a simple JSON "badge" file
? credentialUrl: text, ; (High-Trust) A URL to a verifiable credential (e.g., a JWT or PDF report); use when credential is large or hosted remotely
? credentialValue: text ; (High-Trust) The embedded, base64-encoded credential itself (e.g., a JWT); use for self-contained attestations
}
; The AI Catalog served from /.well-known/ai-catalog.json
AICatalog = {
$schema: text, ; Declares the schema this catalog adheres to
host: {
name: text, ; The human-readable name of the host (e.g., the company name)
? id: text, ; A verifiable ID for the host (e.g., a DID)
? documentationUrl: text, ; A URL to the host's main documentation
? logoUrl: text ; A URL to the host's logo
},
aiCards: [* {
id: text, ; The primary verifiable ID for the AI Card (e.g., DID); must match the 'id' in the full AICard
name: text, ; A human-readable name for the AI Card
description: text, ; A short description of the AI Card
? tags: [* text], ; A list of tags for filtering and discovery
cardUrl: text ; The full, absolute URL to this AI Card's complete ai-card.json file
updatedAt: text ; An ISO 8601 timestamp of when this card was last updated
}]
}
Changes:
- Removed
specVersionbecause$schemacan do the same job - Made publisher
attestationa list ofAttestationtype, same as how the AI Card has attestations - Removed the
trustproperty and type becauseidentity is already provided byid, and thetypeisn't necessary becausedidandspiffe` both have uri schemes - Added some predefined keys for
metadatafor things we know may be commonly used but don't really need to be schematized. - Added a
maturityproperty as that seems like something crawlers and registries are going to care about - Added a
signatureproperty because we need to tie theidof the publisher to the card contents. - Changed
servicesto be a map of any with some predefined keys. - Added updatedAt to the aiCard in the catalog
Would love to get people's thoughts on the changes.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels