Skip to content

Project-local agent skills composition lock

Authoritative source: skill/schemas/skills-lock.schema.json

Complete source

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://example.invalid/schemas/skills-lock.schema.json",
  "title": "Project-local agent skills composition lock",
  "type": "object",
  "additionalProperties": false,
  "required": [
    "schema_version",
    "lock_version",
    "generated_at",
    "skills_reference",
    "core",
    "profile",
    "adapter_contract",
    "overlays",
    "composition_digest"
  ],
  "properties": {
    "schema_version": {"const": 1},
    "lock_version": {"const": "1.0.0"},
    "generated_at": {"type": "string", "format": "date"},
    "skills_reference": {"type": "string", "minLength": 1},
    "core": {"$ref": "#/$defs/core"},
    "profile": {"$ref": "#/$defs/profile"},
    "adapter_contract": {"$ref": "#/$defs/adapter"},
    "overlays": {
      "type": "array",
      "items": {"$ref": "#/$defs/overlay"}
    },
    "composition_digest": {"$ref": "#/$defs/digest"}
  },
  "$defs": {
    "semver": {
      "type": "string",
      "pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+(?:-[0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*)?(?:\\+[0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*)?$"
    },
    "digest": {"type": "string", "pattern": "^[a-f0-9]{64}$"},
    "core": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "version",
        "content_digest",
        "workflow_registry_version",
        "reuse_catalogue_version"
      ],
      "properties": {
        "version": {"$ref": "#/$defs/semver"},
        "content_digest": {"$ref": "#/$defs/digest"},
        "workflow_registry_version": {"$ref": "#/$defs/semver"},
        "reuse_catalogue_version": {"$ref": "#/$defs/semver"}
      }
    },
    "profile": {
      "type": "object",
      "additionalProperties": false,
      "required": ["name", "version", "lineage", "content_digest"],
      "properties": {
        "name": {"type": "string", "minLength": 1},
        "version": {"$ref": "#/$defs/semver"},
        "lineage": {
          "type": "array",
          "minItems": 1,
          "uniqueItems": true,
          "items": {"type": "string", "minLength": 1}
        },
        "content_digest": {"$ref": "#/$defs/digest"}
      }
    },
    "adapter": {
      "type": "object",
      "additionalProperties": false,
      "required": ["version", "content_digest"],
      "properties": {
        "version": {"$ref": "#/$defs/semver"},
        "content_digest": {"$ref": "#/$defs/digest"}
      }
    },
    "overlay": {
      "type": "object",
      "additionalProperties": false,
      "required": ["source", "version", "reference", "content_digest"],
      "properties": {
        "source": {"type": "string", "pattern": "^org\\.[a-z][a-z0-9-]*$"},
        "version": {"$ref": "#/$defs/semver"},
        "reference": {"type": "string", "minLength": 1},
        "content_digest": {"$ref": "#/$defs/digest"}
      }
    }
  }
}