Instalar y usar plugins
Guía para usuarios finales sobre cómo añadir, habilitar y solucionar problemas de los plugins.
Crear plugins
Tutorial para crear el primer plugin con el manifiesto funcional más pequeño.
Plugins de canal
Crear un plugin de canal de mensajería.
Plugins de proveedor
Crear un plugin de proveedor de modelos.
Descripción general del SDK
Referencia del mapa de importaciones y la API de registro.
Modelo público de capacidades
Las capacidades constituyen el modelo público de plugins nativos en OpenClaw. Cada plugin nativo de OpenClaw se registra con uno o más tipos de capacidad:Un plugin que registra cero capacidades, pero proporciona hooks, herramientas, servicios de detección o servicios en segundo plano, es un plugin heredado basado únicamente en hooks. Este patrón sigue siendo totalmente compatible.
Postura sobre la compatibilidad externa
Actualmente, el modelo de capacidades está integrado en el núcleo y lo utilizan los plugins incluidos y nativos, pero la compatibilidad de los plugins externos aún exige un criterio más estricto que «se exporta, por lo tanto está congelado».
El registro de capacidades es la dirección prevista. Durante la transición, los hooks heredados siguen siendo la vía más segura para evitar incompatibilidades en los plugins externos. No todas las subrutas auxiliares exportadas son equivalentes; se deben preferir los contratos específicos documentados frente a exportaciones auxiliares circunstanciales.
Formas de los plugins
OpenClaw clasifica cada plugin cargado en una forma según su comportamiento real de registro, no solo según los metadatos estáticos:plain-capability
plain-capability
Registra exactamente un tipo de capacidad (por ejemplo, un plugin exclusivo de proveedor como
arcee o chutes).hybrid-capability
hybrid-capability
Registra varios tipos de capacidad (por ejemplo,
openai posee la inferencia de texto, la voz, la comprensión multimedia y la generación de imágenes).hook-only
hook-only
Registra únicamente hooks (tipados o personalizados), sin capacidades, herramientas, comandos ni servicios.
non-capability
non-capability
Registra herramientas, comandos, servicios o rutas, pero no capacidades.
openclaw plugins inspect <id> para consultar la forma y el desglose de capacidades de un plugin. Para obtener más información, véase la referencia de la CLI.
Señales de compatibilidad
openclaw doctor, openclaw plugins inspect <id>, openclaw status --all y openclaw plugins doctor muestran estos avisos de compatibilidad:
Actualmente, ninguna de las señales informativas o de advertencia impide que el plugin funcione. Estas señales también aparecen en
openclaw status --all y openclaw plugins doctor.
Descripción general de la arquitectura
El sistema de plugins de OpenClaw tiene cuatro capas:1
Manifiesto y detección
OpenClaw encuentra plugins candidatos en las rutas configuradas, las raíces de los espacios de trabajo, las raíces globales de plugins y los plugins incluidos. La detección lee primero los manifiestos nativos
openclaw.plugin.json y los manifiestos de paquetes compatibles.2
Habilitación y validación
El núcleo decide si un plugin detectado está habilitado, deshabilitado, bloqueado o seleccionado para un espacio exclusivo, como la memoria.
3
Carga en tiempo de ejecución
Los plugins nativos de OpenClaw se cargan dentro del proceso y registran sus capacidades en un registro central. El JavaScript empaquetado se carga mediante
require; el código fuente TypeScript local de terceros utiliza Jiti como alternativa de emergencia. Los paquetes compatibles se normalizan como registros del registro sin importar código de tiempo de ejecución.4
Consumo de superficies
El resto de OpenClaw consulta el registro para exponer herramientas, canales, configuración de proveedores, hooks, rutas HTTP, comandos de la CLI y servicios.
- los metadatos del momento del análisis proceden de
registerCli(..., { descriptors: [...] }) - el módulo real de la CLI del plugin puede permanecer en carga diferida y registrarse en la primera invocación
- la validación del manifiesto y la configuración debe funcionar a partir de los metadatos del manifiesto y del esquema sin ejecutar el código del plugin
- la detección de capacidades nativas puede cargar código de entrada de plugins de confianza para crear una instantánea del registro que no active nada
- el comportamiento nativo en tiempo de ejecución procede de la ruta
register(api)del módulo del plugin conapi.registrationMode === "full"
Instantánea de metadatos de plugins y tabla de búsqueda
Al iniciarse, el Gateway crea una instancia dePluginMetadataSnapshot para la instantánea de configuración actual. La instantánea solo contiene metadatos: almacena el índice de plugins instalados, el registro de manifiestos, los diagnósticos de manifiestos, los mapas de propietarios, un normalizador de identificadores de plugins y los registros de manifiestos. No contiene módulos de plugins cargados, SDK de proveedores, contenido de paquetes ni exportaciones del entorno de ejecución.
La validación de la configuración compatible con plugins, la habilitación automática al inicio y el arranque de plugins del Gateway utilizan esta instantánea en lugar de reconstruir por separado los metadatos de manifiestos e índices. PluginLookUpTable se deriva de la misma instantánea y añade el plan de plugins de inicio correspondiente a la configuración actual del entorno de ejecución.
Tras el inicio, el Gateway conserva la instantánea actual de metadatos como un producto reemplazable del entorno de ejecución. La detección repetida de proveedores en tiempo de ejecución puede reutilizar esa instantánea, en lugar de reconstruir el índice de instalaciones y el registro de manifiestos en cada pasada por el catálogo de proveedores. La instantánea se elimina o se sustituye cuando se apaga el Gateway, cambia la configuración o el inventario de plugins, o se escribe en el índice de instalaciones; cuando no existe una instantánea actual compatible, las llamadas recurren a la ruta en frío de manifiestos e índices. Las comprobaciones de compatibilidad deben incluir las raíces de detección de plugins, como plugins.load.paths, y el espacio de trabajo predeterminado del agente, porque los plugins del espacio de trabajo forman parte del alcance de los metadatos.
La instantánea y la tabla de búsqueda mantienen en la ruta rápida las decisiones repetidas del inicio:
- propiedad de los canales
- inicio diferido de los canales
- identificadores de los plugins de inicio
- propiedad de los proveedores y los backends de la CLI
- propiedad del proveedor de configuración, los alias de comandos, el proveedor del catálogo de modelos y los contratos de manifiesto
- validación del esquema de configuración de plugins y del esquema de configuración de canales
- decisiones de habilitación automática al inicio
PluginLookUpTable. Esa ruta ahora reconstruye el registro bajo demanda; cuando un llamador ya disponga de ella, es preferible pasar la tabla de consulta actual o un registro de manifiestos explícito a través de los flujos de ejecución.
Planificación de la activación
La planificación de la activación forma parte del plano de control. Los llamadores pueden consultar qué plugins son pertinentes para un comando, proveedor, canal, ruta, arnés de agente o capacidad concretos antes de cargar registros de ejecución más amplios. El planificador mantiene la compatibilidad con el comportamiento actual de los manifiestos:activation.*los campos son indicaciones explícitas para el planificadorproviders,channels,commandAliases,setup.providers,contracts.toolsy los hooks siguen siendo el mecanismo alternativo de propiedad del manifiesto- la API del planificador que solo devuelve identificadores sigue disponible para los llamadores existentes
- la API del plan informa de etiquetas de motivo para que los diagnósticos puedan distinguir las indicaciones explícitas del mecanismo alternativo de propiedad
Plugins de canal y la herramienta de mensajes compartida
Los plugins de canal no necesitan registrar una herramienta independiente para enviar, editar o reaccionar en las acciones normales de chat. OpenClaw mantiene una única herramienta compartidamessage en el núcleo, y los plugins de canal se encargan de la detección y ejecución específicas del canal que hay detrás de ella.
El límite actual es el siguiente:
- el núcleo se encarga del host de la herramienta compartida
message, la conexión con los prompts, el registro de sesiones e hilos y el despacho de la ejecución - los plugins de canal se encargan de la detección de acciones dentro del ámbito, la detección de capacidades y cualquier fragmento de esquema específico del canal
- los plugins de canal se encargan de la gramática de conversación de sesión específica del proveedor, como la forma en que los identificadores de conversación codifican los identificadores de hilo o se heredan de las conversaciones principales
- los plugins de canal ejecutan la acción final mediante su adaptador de acciones
ChannelMessageActionAdapter.describeMessageTool(...). Esa llamada de detección unificada permite que un plugin devuelva conjuntamente sus acciones visibles, capacidades y contribuciones al esquema, de modo que esas partes no pierdan coherencia entre sí.
Los nombres de las acciones de mensajes utilizan deliberadamente un vocabulario cerrado y controlado por el núcleo para que todos los transportes puedan representar todas las acciones. Los plugins añaden nombres de acciones mediante un pull request al núcleo; el registro durante la ejecución no se admite de forma intencionada.
Cuando un parámetro específico de un canal de la herramienta de mensajes contiene una fuente multimedia, como una ruta local o una URL multimedia remota, el plugin también debe devolver mediaSourceParams desde describeMessageTool(...). El núcleo utiliza esa lista explícita para aplicar la normalización de rutas del entorno aislado y las indicaciones de acceso a contenido multimedia saliente sin codificar de forma rígida los nombres de parámetros que pertenecen al plugin. En este punto, es preferible usar mapas limitados por acción y no una única lista plana para todo el canal, de modo que un parámetro multimedia exclusivo del perfil no se normalice en acciones no relacionadas como send.
El núcleo pasa el ámbito de ejecución a ese paso de detección. Los campos importantes incluyen:
accountIdcurrentChannelIdcurrentThreadTscurrentMessageIdsessionKeysessionIdagentId- entrada de confianza
requesterSenderId
message.
Por este motivo, los cambios de enrutamiento del ejecutor integrado siguen siendo trabajo del plugin: el ejecutor es responsable de reenviar la identidad actual del chat y de la sesión al límite de detección del plugin para que la herramienta compartida message exponga la superficie correcta, propiedad del canal, durante el turno actual.
Para los auxiliares de ejecución que pertenecen al canal, los plugins de canal deben mantener el entorno de ejecución dentro de sus propios módulos de plugin. El núcleo ya no se encarga de los entornos de ejecución de acciones de mensajes de Discord, Slack, Telegram o WhatsApp en src/agents/tools. No se publican subrutas independientes plugin-sdk/*-action-runtime, y esos plugins deben importar directamente su propio código de ejecución local desde los módulos que les pertenecen.
El mismo límite se aplica en general a los puntos de integración del SDK que llevan el nombre de un proveedor: el núcleo no debe importar módulos de conveniencia específicos de canales para Discord, Signal, Slack, WhatsApp ni plugins similares. Si el núcleo necesita un comportamiento, debe consumir el módulo api.ts / runtime-api.ts del propio plugin incluido o convertir la necesidad en una capacidad genérica y limitada del SDK compartido.
Los plugins incluidos siguen la misma regla. El runtime-api.ts de un plugin incluido no debe volver a exportar su propia fachada de marca openclaw/plugin-sdk/<plugin-id>. Esas fachadas de marca siguen siendo capas de compatibilidad para plugins externos y consumidores antiguos, pero los plugins incluidos deben usar exportaciones locales junto con subrutas genéricas y limitadas del SDK, como openclaw/plugin-sdk/channel-policy, openclaw/plugin-sdk/runtime-store o openclaw/plugin-sdk/webhook-ingress. El código nuevo no debe añadir fachadas del SDK específicas de un identificador de plugin, salvo que lo exija el límite de compatibilidad de un ecosistema externo existente.
En el caso específico de las encuestas, existen dos rutas de ejecución:
outbound.sendPolles la base compartida para los canales que se ajustan al modelo común de encuestasactions.handleAction("poll")es la ruta preferida para la semántica de encuestas específica de un canal o para parámetros de encuesta adicionales
Modelo de propiedad de capacidades
OpenClaw trata un plugin nativo como el límite de propiedad de una empresa o una funcionalidad, no como una colección indiscriminada de integraciones no relacionadas. Esto significa lo siguiente:- por lo general, un plugin de empresa debe encargarse de todas las superficies de esa empresa orientadas a OpenClaw
- por lo general, un plugin de funcionalidad debe encargarse de toda la superficie de la funcionalidad que introduce
- los canales deben consumir capacidades compartidas del núcleo en lugar de volver a implementar de forma improvisada el comportamiento de los proveedores
Proveedor con múltiples capacidades
Proveedor con múltiples capacidades
google se encarga de la inferencia de texto, el backend de CLI, las incrustaciones, la voz, la voz en tiempo real, la comprensión multimedia, la generación de imágenes, música y vídeo, y la búsqueda web. openai se encarga de la inferencia de texto, las incrustaciones, la voz, la transcripción en tiempo real, la voz en tiempo real, la comprensión multimedia y la generación de imágenes y vídeo. minimax se encarga de la inferencia de texto, además de la comprensión multimedia, la voz, la generación de imágenes, música y vídeo, y la búsqueda web.Proveedor con una sola capacidad
Proveedor con una sola capacidad
arcee y chutes se encargan únicamente de la inferencia de texto; microsoft se encarga únicamente de la voz. Un plugin de proveedor puede mantener este alcance reducido hasta que necesite abarcar una mayor parte de la superficie de ese proveedor.Plugin de funcionalidad
Plugin de funcionalidad
voice-call se encarga del transporte de llamadas, las herramientas, la CLI, las rutas y el puente de transmisiones multimedia de Twilio, pero consume las capacidades compartidas de voz, transcripción en tiempo real y voz en tiempo real en lugar de importar directamente los plugins de proveedores.- la superficie de un proveedor orientada a OpenClaw reside en un solo plugin, aunque abarque modelos de texto, voz, imágenes y vídeo
- otros proveedores pueden hacer lo mismo con su propia superficie
- a los canales no les importa qué plugin de proveedor se encarga del proveedor; consumen el contrato de capacidad compartido que expone el núcleo
- plugin = límite de propiedad
- capacidad = contrato del núcleo que varios plugins pueden implementar o consumir
1
Definir la capacidad
Definir en el núcleo la capacidad que falta.
2
Exponerla mediante el SDK
Exponerla de forma tipada mediante la API y el entorno de ejecución del plugin.
3
Conectar los consumidores
Conectar los canales y las funcionalidades con esa capacidad.
4
Implementaciones de proveedores
Permitir que los plugins de proveedores registren implementaciones.
Capas de capacidades
Utilice este modelo mental para decidir dónde debe residir el código:- Capa de capacidades del núcleo
- Capa de plugins de proveedores
- Capa de plugins de canales y funcionalidades
Orquestación compartida, políticas, mecanismos alternativos, reglas de combinación de configuración, semántica de entrega y contratos tipados.
- el núcleo se encarga de la política de conversión de texto a voz en el momento de responder, el orden de los mecanismos alternativos, las preferencias y la entrega al canal
elevenlabs,google,microsoftyopenaise encargan de las implementaciones de síntesisvoice-callconsume el auxiliar de ejecución de conversión de texto a voz para telefonía
Ejemplo de plugin de empresa con múltiples capacidades
Un plugin de empresa debe percibirse como una unidad coherente desde el exterior. Si OpenClaw dispone de contratos compartidos para modelos, voz, transcripción en tiempo real, voz en tiempo real, comprensión multimedia, generación de imágenes, generación de vídeo, obtención de contenido web y búsqueda web, un proveedor puede encargarse de todas sus superficies en un único lugar:- un solo plugin se encarga de la superficie del proveedor
- el núcleo sigue encargándose de los contratos de capacidades
- la traducción de solicitudes del proveedor y los auxiliares HTTP permanecen en el plugin del proveedor
- los canales y los plugins de funcionalidades consumen auxiliares
api.runtime.*, no código del proveedor - las pruebas de contrato pueden verificar que el plugin haya registrado las capacidades de las que afirma encargarse
Ejemplo de capacidad: comprensión de vídeo
OpenClaw ya trata la comprensión de imágenes, audio y vídeo como una única capacidad compartida. Allí se aplica el mismo modelo de propiedad:1
Core define el contrato
Core define el contrato de comprensión de medios.
2
Los plugins de proveedores se registran
Los plugins de proveedores registran
describeImage, transcribeAudio y describeVideo según corresponda.3
Los consumidores usan el comportamiento compartido
Los canales y los plugins de funcionalidades consumen el comportamiento compartido de Core en lugar de conectarse directamente al código del proveedor.
api.registerVideoGenerationProvider(...) conforme a él.
¿Se necesita una lista de verificación concreta para el despliegue? Consulte el Recetario de capacidades.
Contratos y aplicación
La superficie de la API de plugins está tipada y centralizada de forma intencionada enOpenClawPluginApi. Ese contrato define los puntos de registro compatibles y los asistentes de tiempo de ejecución en los que puede apoyarse un plugin.
Por qué es importante:
- los autores de plugins disponen de un único estándar interno estable
- Core puede rechazar la propiedad duplicada, como cuando dos plugins registran el mismo id de proveedor
- el inicio puede mostrar diagnósticos procesables para registros con formato incorrecto
- las pruebas de contrato pueden hacer cumplir la propiedad de los plugins incluidos y evitar divergencias silenciosas
Aplicación del registro en tiempo de ejecución
Aplicación del registro en tiempo de ejecución
El registro de plugins valida los registros a medida que se cargan los plugins. Por ejemplo, los ids de proveedor duplicados, los ids de proveedor de voz duplicados y los registros con formato incorrecto generan diagnósticos de plugins en lugar de un comportamiento indefinido.
Pruebas de contrato
Pruebas de contrato
Los plugins incluidos se capturan en registros de contratos durante la ejecución de las pruebas para que OpenClaw pueda verificar explícitamente la propiedad. Actualmente, esto se utiliza para proveedores de modelos, proveedores de voz, proveedores de búsqueda web y la propiedad de los registros incluidos.
Qué debe incluirse en un contrato
- Contratos adecuados
- Contratos inadecuados
- tipados
- pequeños
- específicos de una capacidad
- propiedad de Core
- reutilizables por varios plugins
- utilizables por canales y funcionalidades sin conocimiento del proveedor
Modelo de ejecución
Los plugins nativos de OpenClaw se ejecutan dentro del proceso junto con el Gateway. No están aislados. Un plugin nativo cargado tiene el mismo límite de confianza a nivel de proceso que el código de Core. Los paquetes compatibles son más seguros de forma predeterminada porque OpenClaw los trata actualmente como paquetes de metadatos o contenido. En las versiones actuales, esto se refiere principalmente a Skills incluidas. Utilice listas de permitidos y rutas explícitas de instalación y carga para los plugins no incluidos. Trate los plugins del espacio de trabajo como código para la fase de desarrollo, no como valores predeterminados de producción. Para los nombres de paquetes incluidos en el espacio de trabajo, mantenga el id del plugin anclado al nombre de npm:@openclaw/<id> de forma predeterminada, o un sufijo tipado aprobado como -provider, -plugin, -speech, -sandbox o -media-understanding cuando el paquete exponga intencionadamente una función de plugin más limitada.
Nota de confianza:
plugins.allow confía en los ids de plugins, no en la procedencia del código fuente. Un plugin del espacio de trabajo con el mismo id que un plugin incluido reemplaza intencionadamente la copia incluida cuando dicho plugin del espacio de trabajo está habilitado o figura en la lista de permitidos. Esto es normal y útil para el desarrollo local, las pruebas de parches y las correcciones urgentes. La confianza de los plugins incluidos se determina a partir de la instantánea del código fuente —el manifiesto y el código presentes en el disco en el momento de la carga—, no de los metadatos de instalación. Un registro de instalación dañado o sustituido no puede ampliar silenciosamente la superficie de confianza de un plugin incluido más allá de lo que declara el código fuente real.Límite de exportación
OpenClaw exporta capacidades, no facilidades de implementación. Mantenga público el registro de capacidades. Reduzca las exportaciones de asistentes que no formen parte del contrato:- subrutas de asistentes específicas de plugins incluidos
- subrutas de infraestructura de tiempo de ejecución no destinadas a ser una API pública
- asistentes de conveniencia específicos de proveedores
- asistentes de configuración e incorporación que son detalles de implementación
plugin-sdk/gateway-runtime, plugin-sdk/security-runtime y las capacidades inyectadas de la API de plugins.