{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "https://skill-set.md/schema/draft/skill-set.schema.json",
  "title": "skill-set",
  "description": "A named, versioned set of agent skills.\nhttps://skill-set.md",
  "type": "object",
  "required": ["name", "version", "skills"],
  "additionalProperties": false,
  "properties": {
    "$schema": {
      "description": "URL of the skill-set JSON Schema version this manifest conforms to.",
      "type": "string",
      "format": "uri"
    },
    "name": {
      "description": "Identifier of the skill-set — must equal the manifest filename stem (<name>.skill-set.json).",
      "type": "string",
      "pattern": "^[a-z0-9]+(-[a-z0-9]+)*$",
      "minLength": 1,
      "maxLength": 64
    },
    "version": {
      "description": "Version of this skill-set's contents, as a semantic version.\nhttps://semver.org",
      "type": "string",
      "pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$"
    },
    "description": {
      "description": "Human-readable summary of what this skill-set is for.",
      "type": "string"
    },
    "author": {
      "description": "Attribution for the skill-set's author or publisher.",
      "type": "object",
      "required": ["name"],
      "additionalProperties": false,
      "properties": {
        "name": {
          "description": "Display name of the author or publisher.",
          "type": "string",
          "minLength": 1
        },
        "url": {
          "description": "Web page for the author (profile, homepage, or contact).",
          "type": "string",
          "format": "uri"
        },
        "organization": {
          "description": "Organization the author publishes under.",
          "type": "string"
        },
        "uri": {
          "description": "Stable identity URI for the author (e.g. an agent or profile identity).",
          "type": "string",
          "format": "uri"
        }
      }
    },
    "homepage": {
      "description": "Web page for this skill-set (documentation or source).",
      "type": "string",
      "format": "uri"
    },
    "skills": {
      "description": "Member skills as opaque source-locator strings, optionally pinned with '#<tag-or-commit>'. Order carries no meaning; duplicates are invalid.",
      "type": "array",
      "minItems": 1,
      "uniqueItems": true,
      "items": {
        "description": "A source locator resolving to one skill (e.g. 'owner/repo@skill-name#v1.2.0').",
        "type": "string",
        "minLength": 1
      }
    }
  }
}
