Manifiesto de plugin (openclaw.plugin.json)

Cada plugin debe incluir un archivo openclaw.plugin.json en la raíz del plugin. OpenClaw usa este manifiesto para validar la configuración sin ejecutar el código del plugin. Los manifiestos faltantes o inválidos se tratan como errores del plugin y bloquean la validación de configuración.

Consulta la guía completa del sistema de plugins: Plugins.

Campos requeridos

{
  "id": "voice-call",
  "configSchema": {
    "type": "object",
    "additionalProperties": false,
    "properties": {}
  }
}

Claves requeridas:

  • id (string): id canónico del plugin.
  • configSchema (object): esquema JSON para la configuración del plugin (inline).

Claves opcionales:

  • kind (string): tipo de plugin (ejemplos: "memory", "context-engine").
  • channels (array): ids de canal registrados por este plugin (ejemplo: ["matrix"]).
  • providers (array): ids de proveedor registrados por este plugin.
  • skills (array): directorios de skills a cargar (relativos a la raíz del plugin).
  • name (string): nombre de visualización del plugin.
  • description (string): resumen breve del plugin.
  • uiHints (object): etiquetas de campos de configuración/placeholders/flags de sensibilidad para renderizado de UI.
  • version (string): versión del plugin (informativa).

Requisitos del esquema JSON

  • Cada plugin debe incluir un esquema JSON, incluso si no acepta configuración.
  • Un esquema vacío es aceptable (por ejemplo, { "type": "object", "additionalProperties": false }).
  • Los esquemas se validan en el momento de lectura/escritura de configuración, no en runtime.

Comportamiento de validación

  • Las claves channels.* desconocidas son errores, a menos que el id de canal esté declarado por un manifiesto de plugin.
  • plugins.entries.<id>, plugins.allow, plugins.deny y plugins.slots.* deben referenciar ids de plugin descubribles. Los ids desconocidos son errores.
  • Si un plugin está instalado pero tiene un manifiesto o esquema roto o faltante, la validación falla y Doctor reporta el error del plugin.
  • Si existe configuración de plugin pero el plugin está deshabilitado, la configuración se conserva y se muestra una advertencia en Doctor + logs.

Notas

  • El manifiesto es requerido para todos los plugins, incluyendo cargas desde el sistema de archivos local.
  • El runtime sigue cargando el módulo del plugin por separado; el manifiesto es solo para descubrimiento + validación.
  • Los tipos exclusivos de plugin se seleccionan mediante plugins.slots.*.
    • kind: "memory" se selecciona mediante plugins.slots.memory.
    • kind: "context-engine" se selecciona mediante plugins.slots.contextEngine (por defecto: legacy integrado).
  • Si tu plugin depende de módulos nativos, documenta los pasos de compilación y cualquier requisito de allowlist del gestor de paquetes (por ejemplo, allow-build-scripts de pnpm
    • pnpm rebuild <package>).