{
  "$id": "https://raw.githubusercontent.com/outfitter-dev/skillset/main/docs/reference/schemas/0.1.0/workspace-config.schema.json",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "properties": {
    "changes": {
      "type": "object"
    },
    "claude": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "additionalProperties": true,
          "not": {
            "required": [
              "bundle"
            ]
          },
          "properties": {
            "skills": {
              "anyOf": [
                {
                  "type": "boolean"
                },
                {
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                {
                  "additionalProperties": true,
                  "not": {
                    "required": [
                      "path"
                    ]
                  },
                  "properties": {
                    "enabled": {
                      "type": "boolean"
                    },
                    "include": {
                      "items": {
                        "type": "string"
                      },
                      "type": "array"
                    }
                  },
                  "type": "object"
                }
              ]
            }
          },
          "type": "object"
        }
      ]
    },
    "codex": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "additionalProperties": true,
          "not": {
            "required": [
              "bundle"
            ]
          },
          "properties": {
            "skills": {
              "anyOf": [
                {
                  "type": "boolean"
                },
                {
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                {
                  "additionalProperties": true,
                  "not": {
                    "required": [
                      "path"
                    ]
                  },
                  "properties": {
                    "enabled": {
                      "type": "boolean"
                    },
                    "include": {
                      "items": {
                        "type": "string"
                      },
                      "type": "array"
                    }
                  },
                  "type": "object"
                }
              ]
            }
          },
          "type": "object"
        }
      ]
    },
    "compile": {
      "additionalProperties": false,
      "properties": {
        "build": {
          "enum": [
            "all",
            "updated"
          ],
          "type": "string"
        },
        "features": {
          "additionalProperties": false,
          "properties": {
            "promptArguments": {
              "type": "boolean"
            }
          },
          "type": "object"
        },
        "instruction_front_page": {
          "enum": [
            "claude-dir",
            "repo-root"
          ],
          "type": "string"
        },
        "session_start_hook": {
          "enum": [
            "auto",
            "off",
            "on"
          ],
          "type": "string"
        },
        "skillset": {
          "additionalProperties": false,
          "properties": {
            "metadata": {
              "type": "boolean"
            }
          },
          "type": "object"
        },
        "targets": {
          "items": {
            "enum": [
              "claude",
              "codex",
              "cursor"
            ],
            "type": "string"
          },
          "type": "array",
          "uniqueItems": true
        },
        "unsupportedDestination": {
          "enum": [
            "error",
            "warn",
            "skip",
            "force"
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "cursor": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "additionalProperties": true,
          "not": {
            "required": [
              "bundle"
            ]
          },
          "properties": {
            "skills": {
              "anyOf": [
                {
                  "type": "boolean"
                },
                {
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                {
                  "additionalProperties": true,
                  "not": {
                    "required": [
                      "path"
                    ]
                  },
                  "properties": {
                    "enabled": {
                      "type": "boolean"
                    },
                    "include": {
                      "items": {
                        "type": "string"
                      },
                      "type": "array"
                    }
                  },
                  "type": "object"
                }
              ]
            }
          },
          "type": "object"
        }
      ]
    },
    "defaults": {
      "type": "object"
    },
    "dependencies": {
      "additionalProperties": false,
      "properties": {
        "plugins": {
          "items": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "additionalProperties": false,
                "properties": {
                  "marketplace": {
                    "type": "string"
                  },
                  "name": {
                    "type": "string"
                  },
                  "plugin": {
                    "type": "string"
                  },
                  "range": {
                    "type": "string"
                  },
                  "unversioned": {
                    "type": "boolean"
                  }
                },
                "type": "object"
              }
            ]
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "distributions": {
      "type": "object"
    },
    "drafts": {
      "items": {
        "minLength": 1,
        "pattern": "^(?:skill:[a-z0-9][a-z0-9._-]*|plugin\\.[a-z0-9][a-z0-9-]*\\.skill:[a-z0-9][a-z0-9._-]*)$",
        "type": "string"
      },
      "type": "array",
      "uniqueItems": true
    },
    "internal_marker": {
      "type": "boolean"
    },
    "marketplaces": {
      "additionalProperties": {
        "additionalProperties": false,
        "properties": {
          "description": {
            "minLength": 1,
            "type": "string"
          },
          "plugins": {
            "items": {
              "additionalProperties": false,
              "allOf": [
                {
                  "not": {
                    "required": [
                      "channel",
                      "ref"
                    ]
                  }
                },
                {
                  "not": {
                    "required": [
                      "channel",
                      "sha"
                    ]
                  }
                },
                {
                  "not": {
                    "required": [
                      "channel",
                      "version"
                    ]
                  }
                },
                {
                  "not": {
                    "required": [
                      "ref",
                      "sha"
                    ]
                  }
                },
                {
                  "not": {
                    "required": [
                      "ref",
                      "version"
                    ]
                  }
                },
                {
                  "not": {
                    "required": [
                      "sha",
                      "version"
                    ]
                  }
                }
              ],
              "properties": {
                "channel": {
                  "const": "latest",
                  "type": "string"
                },
                "codex": {
                  "additionalProperties": false,
                  "properties": {
                    "author": {
                      "additionalProperties": false,
                      "properties": {
                        "email": {
                          "minLength": 1,
                          "type": "string"
                        },
                        "name": {
                          "minLength": 1,
                          "type": "string"
                        },
                        "url": {
                          "minLength": 1,
                          "type": "string"
                        }
                      },
                      "required": [
                        "name"
                      ],
                      "type": "object"
                    },
                    "category": {
                      "minLength": 1,
                      "type": "string"
                    },
                    "description": {
                      "minLength": 1,
                      "type": "string"
                    },
                    "displayName": {
                      "minLength": 1,
                      "type": "string"
                    },
                    "homepage": {
                      "minLength": 1,
                      "type": "string"
                    },
                    "interface": {
                      "additionalProperties": false,
                      "properties": {
                        "brandColor": {
                          "minLength": 1,
                          "type": "string"
                        },
                        "capabilities": {
                          "items": {
                            "minLength": 1,
                            "type": "string"
                          },
                          "minItems": 1,
                          "type": "array"
                        },
                        "category": {
                          "minLength": 1,
                          "type": "string"
                        },
                        "composerIcon": {
                          "pattern": "^\\./(?!.*(?:^|/)\\.\\.(?:/|$))(?!.*//)[A-Za-z0-9._-]+(?:/[A-Za-z0-9._-]+)*$",
                          "type": "string"
                        },
                        "defaultPrompt": {
                          "items": {
                            "maxLength": 128,
                            "minLength": 1,
                            "type": "string"
                          },
                          "maxItems": 3,
                          "minItems": 1,
                          "type": "array"
                        },
                        "developerName": {
                          "minLength": 1,
                          "type": "string"
                        },
                        "displayName": {
                          "minLength": 1,
                          "type": "string"
                        },
                        "logo": {
                          "pattern": "^\\./(?!.*(?:^|/)\\.\\.(?:/|$))(?!.*//)[A-Za-z0-9._-]+(?:/[A-Za-z0-9._-]+)*$",
                          "type": "string"
                        },
                        "logoDark": {
                          "pattern": "^\\./(?!.*(?:^|/)\\.\\.(?:/|$))(?!.*//)[A-Za-z0-9._-]+(?:/[A-Za-z0-9._-]+)*$",
                          "type": "string"
                        },
                        "longDescription": {
                          "minLength": 1,
                          "type": "string"
                        },
                        "privacyPolicyUrl": {
                          "minLength": 1,
                          "type": "string"
                        },
                        "screenshots": {
                          "items": {
                            "pattern": "^\\./(?!.*(?:^|/)\\.\\.(?:/|$))(?!.*//)[A-Za-z0-9._-]+(?:/[A-Za-z0-9._-]+)*$",
                            "type": "string"
                          },
                          "minItems": 1,
                          "type": "array"
                        },
                        "shortDescription": {
                          "minLength": 1,
                          "type": "string"
                        },
                        "termsOfServiceUrl": {
                          "minLength": 1,
                          "type": "string"
                        },
                        "websiteUrl": {
                          "minLength": 1,
                          "type": "string"
                        }
                      },
                      "type": "object"
                    },
                    "keywords": {
                      "items": {
                        "minLength": 1,
                        "type": "string"
                      },
                      "minItems": 1,
                      "type": "array"
                    },
                    "policy": {
                      "additionalProperties": false,
                      "properties": {
                        "authentication": {
                          "enum": [
                            "ON_INSTALL",
                            "ON_USE"
                          ],
                          "type": "string"
                        },
                        "installation": {
                          "enum": [
                            "AVAILABLE",
                            "INSTALLED_BY_DEFAULT",
                            "NOT_AVAILABLE"
                          ],
                          "type": "string"
                        },
                        "products": {
                          "allOf": [
                            {
                              "not": {
                                "allOf": [
                                  {
                                    "contains": {
                                      "const": "atlas"
                                    }
                                  },
                                  {
                                    "contains": {
                                      "const": "ATLAS"
                                    }
                                  }
                                ]
                              }
                            },
                            {
                              "not": {
                                "allOf": [
                                  {
                                    "contains": {
                                      "const": "chatgpt"
                                    }
                                  },
                                  {
                                    "contains": {
                                      "const": "CHATGPT"
                                    }
                                  }
                                ]
                              }
                            },
                            {
                              "not": {
                                "allOf": [
                                  {
                                    "contains": {
                                      "const": "codex"
                                    }
                                  },
                                  {
                                    "contains": {
                                      "const": "CODEX"
                                    }
                                  }
                                ]
                              }
                            }
                          ],
                          "items": {
                            "enum": [
                              "atlas",
                              "chatgpt",
                              "codex",
                              "ATLAS",
                              "CHATGPT",
                              "CODEX"
                            ],
                            "type": "string"
                          },
                          "type": "array",
                          "uniqueItems": true
                        }
                      },
                      "type": "object"
                    },
                    "source": {
                      "oneOf": [
                        {
                          "pattern": "^\\./(?!.*(?:^|/)\\.\\.(?:/|$))(?!.*//)[A-Za-z0-9._-]+(?:/[A-Za-z0-9._-]+)*$",
                          "type": "string"
                        },
                        {
                          "additionalProperties": false,
                          "properties": {
                            "path": {
                              "pattern": "^\\./(?!.*(?:^|/)\\.\\.(?:/|$))(?!.*//)[A-Za-z0-9._-]+(?:/[A-Za-z0-9._-]+)*$",
                              "type": "string"
                            },
                            "source": {
                              "const": "local",
                              "type": "string"
                            }
                          },
                          "required": [
                            "path",
                            "source"
                          ],
                          "type": "object"
                        },
                        {
                          "additionalProperties": false,
                          "properties": {
                            "path": {
                              "pattern": "^\\./(?!.*(?:^|/)\\.\\.(?:/|$))(?!.*//)[A-Za-z0-9._-]+(?:/[A-Za-z0-9._-]+)*$",
                              "type": "string"
                            },
                            "ref": {
                              "pattern": "^(?!.*(?:\\.\\.|//|@\\{|\\.lock$))[A-Za-z0-9][A-Za-z0-9._/-]*(?<![./])$",
                              "type": "string"
                            },
                            "sha": {
                              "pattern": "^[0-9a-f]{40}$",
                              "type": "string"
                            },
                            "source": {
                              "const": "url",
                              "type": "string"
                            },
                            "url": {
                              "pattern": "^(?:github:[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+(?:\\.git)?|[^:@/\\s]+@[^:\\s/]+:[^\\s]+|https://(?![^/]*@)[^\\s/?#]+/[^\\s?#]+|ssh://(?:[^:@\\s]+@)?[^\\s/?#]+/[^\\s?#]+|file:///[^\\s]+|/[^\\s]+)$",
                              "type": "string"
                            }
                          },
                          "required": [
                            "source",
                            "url"
                          ],
                          "type": "object"
                        },
                        {
                          "additionalProperties": false,
                          "properties": {
                            "path": {
                              "pattern": "^\\./(?!.*(?:^|/)\\.\\.(?:/|$))(?!.*//)[A-Za-z0-9._-]+(?:/[A-Za-z0-9._-]+)*$",
                              "type": "string"
                            },
                            "ref": {
                              "pattern": "^(?!.*(?:\\.\\.|//|@\\{|\\.lock$))[A-Za-z0-9][A-Za-z0-9._/-]*(?<![./])$",
                              "type": "string"
                            },
                            "sha": {
                              "pattern": "^[0-9a-f]{40}$",
                              "type": "string"
                            },
                            "source": {
                              "const": "git-subdir",
                              "type": "string"
                            },
                            "url": {
                              "pattern": "^(?:github:[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+(?:\\.git)?|[^:@/\\s]+@[^:\\s/]+:[^\\s]+|https://(?![^/]*@)[^\\s/?#]+/[^\\s?#]+|ssh://(?:[^:@\\s]+@)?[^\\s/?#]+/[^\\s?#]+|file:///[^\\s]+|/[^\\s]+)$",
                              "type": "string"
                            }
                          },
                          "required": [
                            "path",
                            "source",
                            "url"
                          ],
                          "type": "object"
                        },
                        {
                          "additionalProperties": false,
                          "properties": {
                            "package": {
                              "pattern": "^(?:@[a-z0-9][a-z0-9._-]*/)?[a-z0-9][a-z0-9._-]*$",
                              "type": "string"
                            },
                            "registry": {
                              "pattern": "^https://(?![^/]*@)[^\\s/?#]+(?:/[^\\s?#]*)?$",
                              "type": "string"
                            },
                            "source": {
                              "const": "npm",
                              "type": "string"
                            },
                            "version": {
                              "pattern": "^(?!\\.?\\.?$)(?!\\s)(?!.*\\s$)[^/\\\\:]+$",
                              "type": "string"
                            }
                          },
                          "required": [
                            "package",
                            "source"
                          ],
                          "type": "object"
                        }
                      ]
                    },
                    "version": {
                      "pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|[A-Za-z-][0-9A-Za-z-]*)(?:\\.(?:0|[1-9]\\d*|[A-Za-z-][0-9A-Za-z-]*))*))?(?:\\+([0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*))?$",
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "id": {
                  "pattern": "^[a-z0-9][a-z0-9-]*$",
                  "type": "string"
                },
                "plugin": {
                  "pattern": "^[a-z0-9][a-z0-9-]*$",
                  "type": "string"
                },
                "ref": {
                  "pattern": "^(?!.*(?:\\.\\.|//|@\\{|\\.lock$))[A-Za-z0-9][A-Za-z0-9._/-]*(?<![./])$",
                  "type": "string"
                },
                "repo": {
                  "pattern": "^(?:github:[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+(?:\\.git)?|[^:@/\\s]+@[^:\\s/]+:[^\\s]+|https://(?![^/]*@)[^\\s/?#]+/[^\\s?#]+|ssh://(?:[^:@\\s]+@)?[^\\s/?#]+/[^\\s?#]+)$",
                  "type": "string"
                },
                "sha": {
                  "pattern": "^[0-9a-f]{40}$",
                  "type": "string"
                },
                "targets": {
                  "items": {
                    "enum": [
                      "claude",
                      "codex",
                      "cursor"
                    ],
                    "type": "string"
                  },
                  "minItems": 1,
                  "type": "array",
                  "uniqueItems": true
                },
                "version": {
                  "pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|[A-Za-z-][0-9A-Za-z-]*)(?:\\.(?:0|[1-9]\\d*|[A-Za-z-][0-9A-Za-z-]*))*))?(?:\\+([0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*))?$",
                  "type": "string"
                }
              },
              "required": [
                "plugin"
              ],
              "type": "object"
            },
            "minItems": 1,
            "type": "array"
          },
          "targets": {
            "items": {
              "enum": [
                "claude",
                "codex",
                "cursor"
              ],
              "type": "string"
            },
            "minItems": 1,
            "type": "array",
            "uniqueItems": true
          },
          "title": {
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "plugins"
        ],
        "type": "object"
      },
      "propertyNames": {
        "pattern": "^[a-z0-9][a-z0-9._-]*$"
      },
      "type": "object"
    },
    "plugins": {
      "additionalProperties": false,
      "properties": {
        "internal_use": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "additionalProperties": false,
              "properties": {
                "drafts": {
                  "additionalProperties": {
                    "anyOf": [
                      {
                        "anyOf": [
                          {
                            "type": "boolean"
                          },
                          {
                            "items": {
                              "minLength": 1,
                              "type": "string"
                            },
                            "type": "array",
                            "uniqueItems": true
                          }
                        ]
                      },
                      {
                        "enum": [
                          "only",
                          "override"
                        ],
                        "type": "string"
                      }
                    ]
                  },
                  "type": "object"
                },
                "plugins": {
                  "anyOf": [
                    {
                      "type": "boolean"
                    },
                    {
                      "items": {
                        "minLength": 1,
                        "type": "string"
                      },
                      "type": "array",
                      "uniqueItems": true
                    }
                  ]
                },
                "skills": {
                  "additionalProperties": {
                    "anyOf": [
                      {
                        "type": "boolean"
                      },
                      {
                        "items": {
                          "minLength": 1,
                          "type": "string"
                        },
                        "type": "array",
                        "uniqueItems": true
                      }
                    ]
                  },
                  "type": "object"
                }
              },
              "type": "object"
            }
          ]
        },
        "output": {
          "anyOf": [
            {
              "minLength": 1,
              "pattern": "^(?:\\.|(?!/)(?![A-Za-z]:)(?!.*\\\\)(?!.*//)(?!.*(?:^|/)\\.{1,2}(?:/|$))(?!.*\\{\\{)(?!.*\\$PROJECT_ROOT)(?!.*\\[name\\].*\\[name\\])[^/]+(?:/[^/]+)*/?)$",
              "type": "string"
            },
            {
              "additionalProperties": false,
              "properties": {
                "claude": {
                  "anyOf": [
                    {
                      "minLength": 1,
                      "pattern": "^(?:\\.|(?!/)(?![A-Za-z]:)(?!.*\\\\)(?!.*//)(?!.*(?:^|/)\\.{1,2}(?:/|$))(?!.*\\{\\{)(?!.*\\$PROJECT_ROOT)(?!.*\\[name\\].*\\[name\\])[^/]+(?:/[^/]+)*/?)$",
                      "type": "string"
                    },
                    {
                      "additionalProperties": false,
                      "properties": {
                        "combine": {
                          "type": "boolean"
                        },
                        "name": {
                          "minLength": 1,
                          "type": "string"
                        },
                        "path": {
                          "minLength": 1,
                          "pattern": "^(?:\\.|(?!/)(?![A-Za-z]:)(?!.*\\\\)(?!.*//)(?!.*(?:^|/)\\.{1,2}(?:/|$))(?!.*\\{\\{)(?!.*\\$PROJECT_ROOT)(?!.*\\[name\\].*\\[name\\])[^/]+(?:/[^/]+)*/?)$",
                          "type": "string"
                        }
                      },
                      "type": "object"
                    }
                  ]
                },
                "codex": {
                  "anyOf": [
                    {
                      "minLength": 1,
                      "pattern": "^(?:\\.|(?!/)(?![A-Za-z]:)(?!.*\\\\)(?!.*//)(?!.*(?:^|/)\\.{1,2}(?:/|$))(?!.*\\{\\{)(?!.*\\$PROJECT_ROOT)(?!.*\\[name\\].*\\[name\\])[^/]+(?:/[^/]+)*/?)$",
                      "type": "string"
                    },
                    {
                      "additionalProperties": false,
                      "properties": {
                        "combine": {
                          "type": "boolean"
                        },
                        "name": {
                          "minLength": 1,
                          "type": "string"
                        },
                        "path": {
                          "minLength": 1,
                          "pattern": "^(?:\\.|(?!/)(?![A-Za-z]:)(?!.*\\\\)(?!.*//)(?!.*(?:^|/)\\.{1,2}(?:/|$))(?!.*\\{\\{)(?!.*\\$PROJECT_ROOT)(?!.*\\[name\\].*\\[name\\])[^/]+(?:/[^/]+)*/?)$",
                          "type": "string"
                        }
                      },
                      "type": "object"
                    }
                  ]
                },
                "cursor": {
                  "anyOf": [
                    {
                      "minLength": 1,
                      "pattern": "^(?:\\.|(?!/)(?![A-Za-z]:)(?!.*\\\\)(?!.*//)(?!.*(?:^|/)\\.{1,2}(?:/|$))(?!.*\\{\\{)(?!.*\\$PROJECT_ROOT)(?!.*\\[name\\].*\\[name\\])[^/]+(?:/[^/]+)*/?)$",
                      "type": "string"
                    },
                    {
                      "additionalProperties": false,
                      "properties": {
                        "combine": {
                          "type": "boolean"
                        },
                        "name": {
                          "minLength": 1,
                          "type": "string"
                        },
                        "path": {
                          "minLength": 1,
                          "pattern": "^(?:\\.|(?!/)(?![A-Za-z]:)(?!.*\\\\)(?!.*//)(?!.*(?:^|/)\\.{1,2}(?:/|$))(?!.*\\{\\{)(?!.*\\$PROJECT_ROOT)(?!.*\\[name\\].*\\[name\\])[^/]+(?:/[^/]+)*/?)$",
                          "type": "string"
                        }
                      },
                      "type": "object"
                    }
                  ]
                },
                "path": {
                  "minLength": 1,
                  "pattern": "^(?:\\.|(?!/)(?![A-Za-z]:)(?!.*\\\\)(?!.*//)(?!.*(?:^|/)\\.{1,2}(?:/|$))(?!.*\\{\\{)(?!.*\\$PROJECT_ROOT)(?!.*\\[name\\].*\\[name\\])[^/]+(?:/[^/]+)*/?)$",
                  "type": "string"
                }
              },
              "type": "object"
            }
          ]
        }
      },
      "type": "object"
    },
    "skillset": {
      "additionalProperties": false,
      "properties": {
        "author": {
          "anyOf": [
            {
              "minLength": 1,
              "type": "string"
            },
            {
              "additionalProperties": true,
              "properties": {
                "email": {
                  "minLength": 1,
                  "type": "string"
                },
                "name": {
                  "minLength": 1,
                  "type": "string"
                },
                "url": {
                  "minLength": 1,
                  "type": "string"
                }
              },
              "required": [
                "name"
              ],
              "type": "object"
            }
          ]
        },
        "category": {
          "type": "string"
        },
        "description": {
          "minLength": 1,
          "type": "string"
        },
        "homepage": {
          "type": "string"
        },
        "keywords": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "license": {
          "enum": [
            "Apache-2.0",
            "BSD-2-Clause",
            "BSD-3-Clause",
            "ISC",
            "MIT",
            "MPL-2.0",
            "none"
          ],
          "type": "string"
        },
        "listing": {
          "additionalProperties": false,
          "properties": {
            "capabilities": {
              "items": {
                "minLength": 1,
                "type": "string"
              },
              "type": "array"
            },
            "category": {
              "minLength": 1,
              "type": "string"
            },
            "color": {
              "minLength": 1,
              "type": "string"
            },
            "composer_icon": {
              "minLength": 1,
              "type": "string"
            },
            "default_prompt": {
              "items": {
                "minLength": 1,
                "type": "string"
              },
              "type": "array"
            },
            "description": {
              "minLength": 1,
              "type": "string"
            },
            "display_name": {
              "minLength": 1,
              "type": "string"
            },
            "keywords": {
              "items": {
                "minLength": 1,
                "type": "string"
              },
              "type": "array"
            },
            "logo": {
              "minLength": 1,
              "type": "string"
            },
            "logo_dark": {
              "minLength": 1,
              "type": "string"
            },
            "privacy_policy_url": {
              "minLength": 1,
              "type": "string"
            },
            "screenshots": {
              "items": {
                "minLength": 1,
                "type": "string"
              },
              "type": "array"
            },
            "summary": {
              "minLength": 1,
              "type": "string"
            },
            "terms_of_service_url": {
              "minLength": 1,
              "type": "string"
            },
            "website_url": {
              "minLength": 1,
              "type": "string"
            }
          },
          "type": "object"
        },
        "manifest": {
          "additionalProperties": true,
          "properties": {
            "category": {
              "minLength": 1,
              "type": "string"
            },
            "displayName": {
              "minLength": 1,
              "type": "string"
            },
            "logo": {
              "minLength": 1,
              "type": "string"
            },
            "name": {
              "minLength": 1,
              "type": "string"
            },
            "tags": {
              "items": {
                "minLength": 1,
                "type": "string"
              },
              "type": "array"
            }
          },
          "type": "object"
        },
        "marketplace": {
          "type": "object"
        },
        "name": {
          "minLength": 1,
          "type": "string"
        },
        "origin": {
          "additionalProperties": false,
          "dependentRequired": {
            "ref": [
              "repo"
            ],
            "repo": [
              "ref"
            ]
          },
          "properties": {
            "path": {
              "minLength": 1,
              "type": "string"
            },
            "ref": {
              "minLength": 1,
              "type": "string"
            },
            "repo": {
              "minLength": 1,
              "type": "string"
            }
          },
          "required": [
            "path"
          ],
          "type": "object"
        },
        "outputs": {
          "additionalProperties": true,
          "properties": {
            "skills": {
              "additionalProperties": true,
              "allOf": [
                {
                  "not": {
                    "required": [
                      "claude"
                    ]
                  }
                },
                {
                  "not": {
                    "required": [
                      "codex"
                    ]
                  }
                },
                {
                  "not": {
                    "required": [
                      "cursor"
                    ]
                  }
                }
              ],
              "type": "object"
            }
          },
          "type": "object"
        },
        "owner": {
          "additionalProperties": true,
          "properties": {
            "email": {
              "minLength": 1,
              "type": "string"
            },
            "name": {
              "minLength": 1,
              "type": "string"
            },
            "url": {
              "minLength": 1,
              "type": "string"
            }
          },
          "required": [
            "name"
          ],
          "type": "object"
        },
        "preprocess": {
          "type": "boolean"
        },
        "presentation": {
          "type": "object"
        },
        "repository": {
          "type": "string"
        },
        "schema": {
          "const": 1,
          "type": "integer"
        },
        "strict": {
          "type": "boolean"
        },
        "summary": {
          "minLength": 1,
          "type": "string"
        },
        "title": {
          "minLength": 1,
          "type": "string"
        },
        "version": {
          "pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|[A-Za-z-][0-9A-Za-z-]*)(?:\\.(?:0|[1-9]\\d*|[A-Za-z-][0-9A-Za-z-]*))*))?(?:\\+([0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*))?$",
          "type": "string"
        }
      },
      "type": "object"
    },
    "supports": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "items": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "additionalProperties": false,
                "properties": {
                  "name": {
                    "type": "string"
                  },
                  "onMismatch": {
                    "enum": [
                      "error",
                      "warn"
                    ],
                    "type": "string"
                  },
                  "range": {
                    "type": "string"
                  },
                  "source": {
                    "type": "string"
                  }
                },
                "type": "object"
              }
            ]
          },
          "type": "array"
        },
        {
          "additionalProperties": false,
          "properties": {
            "packages": {
              "items": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "additionalProperties": false,
                    "properties": {
                      "name": {
                        "type": "string"
                      },
                      "onMismatch": {
                        "enum": [
                          "error",
                          "warn"
                        ],
                        "type": "string"
                      },
                      "range": {
                        "type": "string"
                      },
                      "source": {
                        "type": "string"
                      }
                    },
                    "type": "object"
                  }
                ]
              },
              "type": "array"
            }
          },
          "required": [
            "packages"
          ],
          "type": "object"
        }
      ]
    },
    "workspace": {
      "additionalProperties": false,
      "properties": {
        "cacheKey": {
          "maxLength": 160,
          "pattern": "^[a-z0-9][a-z0-9._-]*(?:--[a-z0-9][a-z0-9._-]*)*$",
          "type": "string"
        }
      },
      "type": "object"
    }
  },
  "title": "Workspace Config",
  "type": "object"
}
