{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "AnythingLLM Agent Skill Plugin Manifest Schema",
  "type": "object",
  "properties": {
    "active": {
      "type": "boolean",
      "description": "Determines if the custom agent skill is active."
    },
    "hubId": {
      "type": "string",
      "description": "Used to identify the custom agent skill. Must be the same as the parent folder name."
    },
    "name": {
      "type": "string",
      "description": "The human-readable name of the skill displayed in the AnythingLLM UI."
    },
    "schema": {
      "type": "string",
      "enum": ["skill-1.0.0"],
      "description": "Must be 'skill-1.0.0'. May be updated on manifest spec changes."
    },
    "version": {
      "type": "string",
      "description": "Version of the custom agent skill, defined by the user."
    },
    "description": {
      "type": "string",
      "description": "Short description of the custom agent skill."
    },
    "author": {
      "type": "string",
      "description": "Author tag of the custom agent skill."
    },
    "author_url": {
      "type": "string",
      "format": "uri",
      "description": "URL of the author of the custom agent skill."
    },
    "license": {
      "type": "string",
      "description": "License of the custom agent skill."
    },
    "setup_args": {
      "type": "object",
      "additionalProperties": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "description": "Type of value expected."
          },
          "required": {
            "type": "boolean",
            "description": "Indicates if the argument is required."
          },
          "input": {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "description": "Type of input to be rendered."
              },
              "default": {
                "type": "string",
                "description": "Default value of the input."
              },
              "placeholder": {
                "type": "string",
                "description": "Placeholder text for the input."
              },
              "hint": {
                "type": "string",
                "description": "Hint text for the input."
              }
            },
            "required": ["type"],
            "additionalProperties": false
          },
          "value": {
            "type": "string",
            "description": "Preset value of the argument."
          }
        },
        "required": ["type"],
        "additionalProperties": false
      },
      "description": "Setup arguments used to configure the custom agent skill from the UI and make runtime arguments accessible in the handler.js file when the skill is called."
    },
    "examples": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "prompt": {
            "type": "string",
            "description": "Example prompt for the custom agent skill."
          },
          "call": {
            "type": "string",
            "description": "Expected invocation format matching the input format of the custom agent skill."
          }
        },
        "required": ["prompt", "call"],
        "additionalProperties": false
      },
      "description": "Array of examples used to pre-inject examples into the custom agent skill."
    },
    "entrypoint": {
      "type": "object",
      "properties": {
        "file": {
          "type": "string",
          "description": "Location of the file to be executed relative to the plugin.json file."
        },
        "params": {
          "type": "object",
          "additionalProperties": {
            "type": "object",
            "properties": {
              "description": {
                "type": "string",
                "description": "Short description of the parameter's purpose."
              },
              "type": {
                "type": "string",
                "enum": ["string", "number", "boolean"],
                "description": "Type of the parameter."
              }
            },
            "required": ["description", "type"],
            "additionalProperties": false
          },
          "description": "Parameters expected by the custom agent skill."
        }
      },
      "required": ["file", "params"],
      "additionalProperties": false,
      "description": "Defines the entrypoint of the custom agent skill and the expected inputs."
    },
    "imported": {
      "type": "boolean",
      "enum": [true],
      "description": "Must be set to true."
    }
  },
  "required": [
    "active",
    "hubId",
    "name",
    "schema",
    "version",
    "description",
    "entrypoint",
    "imported"
  ],
  "additionalProperties": true
}
