Ir al contenido

Configura el archivo openclaw.plugin.json: Guía rápida

openclaw.plugin.json contiene los metadatos que OpenClaw lee antes de cargar el código de tu plugin.

Úsalo para:

  • Identidad del plugin
  • Validación de configuración
  • Metadatos de autenticación y onboarding que deben estar disponibles sin arrancar el runtime del plugin
  • Metadatos de alias y auto-activación que deben resolverse antes de que cargue el runtime
  • Metadatos de propiedad de familias de modelos (shorthand) para activar el plugin automáticamente
  • Instantáneas estáticas de propiedad de capacidades para el cableado de compatibilidad y cobertura de contratos
  • Metadatos de configuración específicos del canal para integrar en el catálogo y superficies de validación
  • Sugerencias para la interfaz de usuario (UI hints) de configuración

No lo uses para:

  • Registrar comportamientos de runtime o declarar puntos de entrada de código
  • Metadatos de npm install

Esos elementos deben ir en el código de tu plugin y en el package.json.

{
"id": "voice-call",
"configSchema": {
"type": "object",
"additionalProperties": false,
"properties": {}
}
}
{
"id": "openrouter",
"name": "OpenRouter",
"description": "OpenRouter provider plugin",
"version": "1.0.0",
"providers": ["openrouter"],
"modelSupport": {
"modelPrefixes": ["router-"]
},
"cliBackends": ["openrouter-cli"],
"providerAuthEnvVars": {
"openrouter": ["OPENROUTER_API_KEY"]
},
"providerAuthAliases": {
"openrouter-coding": "openrouter"
},
"channelEnvVars": {
"openrouter-chatops": ["OPENROUTER_CHATOPS_TOKEN"]
},
"providerAuthChoices": [
{
"provider": "openrouter",
"method": "api-key",
"choiceId": "openrouter-api-key",
"choiceLabel": "OpenRouter API key",
"groupId": "openrouter",
"groupLabel": "OpenRouter",
"optionKey": "openrouterApiKey",
"cliFlag": "--openrouter-api-key",
"cliOption": "--openrouter-api-key <key>",
"cliDescription": "OpenRouter API key",
"onboardingScopes": ["text-inference"]
}
],
"uiHints": {
"apiKey": {
"label": "API key",
"placeholder": "sk-or-v1-...",
"sensitive": true
}
},
"configSchema": {
"type": "object",
"additionalProperties": false,
"properties": {
"apiKey": {
"type": "string"
}
}
}
}
CampoRequeridoTipoSignificado
idSístringID canónico del plugin. Es el ID usado en plugins.entries.<id>.
configSchemaSíobjectJSON Schema inline para la configuración de este plugin.
enabledByDefaultNotrueMarca un plugin empaquetado como habilitado por defecto. Omítelo o usa un valor distinto a true para dejarlo deshabilitado.
legacyPluginIdsNostring[]IDs antiguos que se normalizan a este ID canónico.
autoEnableWhenConfiguredProvidersNostring[]IDs de proveedores que activan automáticamente este plugin cuando la configuración o los modelos los mencionan.
kindNo"memory" | "context-engine"Declara un tipo de plugin exclusivo usado por plugins.slots.*.
channelsNostring[]IDs de canales propiedad de este plugin. Se usa para descubrimiento y validación.
providersNostring[]IDs de proveedores propiedad de este plugin.
modelSupportNoobjectMetadatos rápidos de familias de modelos para auto-cargar el plugin antes del runtime.
cliBackendsNostring[]IDs de backends de inferencia CLI propiedad de este plugin.
commandAliasesNoobject[]Nombres de comandos propiedad de este plugin para diagnósticos de CLI y configuración antes de cargar el runtime.
providerAuthEnvVarsNoRecord<string, string[]>Metadatos ligeros de variables de entorno para autenticación de proveedores que OpenClaw inspecciona sin cargar código.
providerAuthAliasesNoRecord<string, string>IDs de proveedores que reutilizan la autenticación de otro proveedor (ej. un proveedor de coding que comparte API key).
channelEnvVarsNoRecord<string, string[]>Metadatos ligeros de variables de entorno para canales. Úsalo para configuración de canales basada en entorno.
providerAuthChoicesNoobject[]Metadatos de opciones de autenticación para selectores de onboarding y resolución de flags de CLI.
contractsNoobjectInstantánea estática de capacidades para voz, transcripción, generación de imágenes, búsqueda web y herramientas.
channelConfigsNoRecord<string, object>Metadatos de configuración de canales que se fusionan en las superficies de validación antes del runtime.
skillsNostring[]Directorios de skills a cargar, relativos a la raíz del plugin.
nameNostringNombre del plugin legible para humanos.
descriptionNostringResumen corto mostrado en las interfaces del plugin.
versionNostringVersión informativa del plugin.
uiHintsNoRecord<string, object>Etiquetas de UI, placeholders y avisos de sensibilidad para los campos de configuración.

Cada entrada en providerAuthChoices describe una opción de onboarding o de autenticación. OpenClaw lee esta configuración antes de que se cargue el runtime del provider.

CampoRequeridoTipoQué significa
providerSístringID del provider al que pertenece esta opción.
methodSístringID del método de autenticación al que se debe dirigir.
choiceIdSístringID estable de la opción de autenticación usado en los flujos de onboarding y CLI.
choiceLabelNostringEtiqueta visible para el usuario. Si se omite, OpenClaw usa el choiceId.
choiceHintNostringTexto de ayuda corto para el selector.
assistantPriorityNonumberLos valores más bajos aparecen primero en los selectores interactivos del asistente.
assistantVisibilityNo"visible" | "manual-only"Oculta la opción en los selectores del asistente pero permite la selección manual mediante la CLI.
deprecatedChoiceIdsNostring[]IDs de opciones antiguas que deben redirigir a los usuarios a esta nueva opción.
groupIdNostringID de grupo opcional para agrupar opciones relacionadas.
groupLabelNostringEtiqueta visible para el usuario para ese grupo.
groupHintNostringTexto de ayuda corto para el grupo.
optionKeyNostringKey de opción interna para flujos de autenticación simples de un solo flag.
cliFlagNostringNombre del flag de la CLI, como --openrouter-api-key.
cliOptionNostringFormato completo de la opción de la CLI, como --openrouter-api-key <key>.
cliDescriptionNostringDescripción que se muestra en la ayuda de la CLI.
onboardingScopesNoArray&lt;"text-inference" | "image-generation"&gt;En qué interfaces de onboarding debe aparecer esta opción. Si se omite, el valor por defecto es ["text-inference"].

Usa commandAliases cuando un plugin sea propietario de un nombre de comando de runtime que los usuarios podrían intentar añadir por error en plugins.allow o ejecutar como un comando raíz de la CLI. OpenClaw utiliza estos metadatos para realizar diagnósticos sin necesidad de importar el código de runtime del plugin.

{
"commandAliases": [
{
"name": "dreaming",
"kind": "runtime-slash",
"cliCommand": "memory"
}
]
}
CampoRequeridoTipoQué significa
nameSístringNombre del comando que pertenece a este plugin.
kindNo"runtime-slash"Marca el alias como un comando slash de chat en lugar de un comando raíz de la CLI.
cliCommandNostringComando raíz de la CLI relacionado para sugerir operaciones de CLI, si existe alguno.

uiHints es un mapa que vincula los nombres de los campos de configuración con pequeñas pistas para su renderizado en la interfaz.

{
"uiHints": {
"apiKey": {
"label": "API key",
"help": "Used for OpenRouter requests",
"placeholder": "sk-or-v1-...",
"sensitive": true
}
}
}

Cada pista de campo puede incluir:

CampoTipoQué significa
labelstringEtiqueta del campo visible para el usuario.
helpstringTexto de ayuda corto.
tagsstring[]Etiquetas de UI opcionales.
advancedbooleanMarca el campo como una opción avanzada.
sensitivebooleanMarca el campo como secreto o sensible.
placeholderstringTexto de marcador de posición para los inputs de formularios.

Usa contracts únicamente para metadatos estáticos de propiedad de capacidades que OpenClaw pueda leer sin importar el runtime del plugin.

{
"contracts": {
"speechProviders": ["openai"],
"realtimeTranscriptionProviders": ["openai"],
"realtimeVoiceProviders": ["openai"],
"mediaUnderstandingProviders": ["openai", "openai-codex"],
"imageGenerationProviders": ["openai"],
"videoGenerationProviders": ["qwen"],
"webFetchProviders": ["firecrawl"],
"webSearchProviders": ["gemini"],
"tools": ["firecrawl_search", "firecrawl_scrape"]
}
}

Cada lista es opcional:

CampoTipoQué significa
speechProvidersstring[]IDs de providers de voz que posee este plugin.
realtimeTranscriptionProvidersstring[]IDs de providers de transcripción en tiempo real que posee este plugin.
realtimeVoiceProvidersstring[]IDs de providers de voz en tiempo real que posee este plugin.
mediaUnderstandingProvidersstring[]IDs de providers de comprensión de medios que posee este plugin.
imageGenerationProvidersstring[]IDs de providers de generación de imágenes que posee este plugin.
videoGenerationProvidersstring[]IDs de providers de generación de vídeo que posee este plugin.
webFetchProvidersstring[]IDs de providers de web-fetch que posee este plugin.
webSearchProvidersstring[]IDs de providers de búsqueda web que posee este plugin.
toolsstring[]Nombres de herramientas de agentes que posee este plugin para verificaciones de contrato vinculadas.

Usa channelConfigs cuando un plugin de canal necesite metadatos de configuración ligeros antes de que se cargue el runtime.

{
"channelConfigs": {
"matrix": {
"schema": {
"type": "object",
"additionalProperties": false,
"properties": {
"homeserverUrl": { "type": "string" }
}
},
"uiHints": {
"homeserverUrl": {
"label": "Homeserver URL",
"placeholder": "https://matrix.example.com"
}
},
"label": "Matrix",
"description": "Matrix homeserver connection",
"preferOver": ["matrix-legacy"]
}
}
}

Cada entrada de canal puede incluir:

CampoTipoQué significa
schemaobjectJSON Schema para channels.<id>. Requerido para cada entrada de configuración de canal declarada.
uiHintsRecord<string, object>Etiquetas de UI, placeholders o pistas de datos sensibles opcionales para esa sección.
labelstringEtiqueta del canal que se integra en el selector cuando los metadatos del runtime no están listos.
descriptionstringDescripción corta del canal para las interfaces de inspección y catálogo.
preferOverstring[]IDs de plugins antiguos o de menor prioridad que este canal debe superar en la selección.

Usa modelSupport cuando OpenClaw deba inferir tu plugin de proveedor a partir de IDs de modelo abreviados como gpt-5.4 o claude-sonnet-4.6 antes de que se cargue el runtime del plugin.

{
"modelSupport": {
"modelPrefixes": ["gpt-", "o1", "o3", "o4"],
"modelPatterns": ["^computer-use-preview"]
}
}

OpenClaw aplica este orden de precedencia:

  • Las referencias explícitas provider/model usan los metadatos del manifiesto de los providers propietarios.
  • modelPatterns tiene prioridad sobre modelPrefixes.
  • Si un plugin no integrado y uno integrado coinciden, el plugin no integrado gana.
  • Cualquier ambigüedad restante se ignora hasta que tú o la configuración especifiquéis un proveedor.

Campos:

CampoTipoQué significa
modelPrefixesstring[]Prefijos que coinciden mediante startsWith con IDs de modelos abreviados.
modelPatternsstring[]Fuentes de Regex que coinciden con IDs de modelos tras eliminar el sufijo del perfil.

Las claves de capacidad de nivel superior antiguas están obsoletas. Usa openclaw doctor --fix para mover speechProviders, realtimeTranscriptionProviders, realtimeVoiceProviders, mediaUnderstandingProviders, imageGenerationProviders, videoGenerationProviders, webFetchProviders y webSearchProviders bajo contracts. La carga normal del manifiesto ya no trata esos campos de nivel superior como propiedad de capacidad.

Estos dos archivos tienen tareas distintas:

ArchivoÚsalo para
openclaw.plugin.jsonDiscovery, validación de config, metadatos de elección de auth y pistas de UI que deben existir antes de que el código del plugin se ejecute
package.jsonMetadatos de npm, instalación de dependencias, el bloque openclaw usado para entrypoints y metadatos del catálogo

Si no tienes claro dónde va un metadato, sigue esta regla:

  • Si OpenClaw debe conocerlo antes de cargar el código del plugin, ponlo en openclaw.plugin.json
  • Si se trata de empaquetado, archivos de entrada o el comportamiento de instalación de npm, ponlo en package.json

Campos de package.json que afectan al discovery

Sección titulada «Campos de package.json que afectan al discovery»

Algunos metadatos del plugin previos al runtime viven intencionadamente en package.json bajo el bloque openclaw en lugar de en openclaw.plugin.json.

Ejemplos importantes:

CampoQué significa
openclaw.extensionsDeclara entrypoints nativos del plugin.
openclaw.setupEntryEntrypoint ligero solo para setup usado durante el onboarding y el inicio diferido de canales.
openclaw.channelMetadatos ligeros del catálogo de canales como etiquetas, rutas de docs, alias y textos de selección.
openclaw.channel.configuredStateMetadatos ligeros del verificador de estado configurado que pueden responder si ya existe un setup basado solo en env sin cargar todo el runtime del canal.
openclaw.channel.persistedAuthStateMetadatos ligeros del verificador de auth persistida que pueden responder si ya hay alguna sesión iniciada sin cargar todo el runtime del canal.
openclaw.install.npmSpec / openclaw.install.localPathPistas de instalación y actualización para plugins empaquetados o publicados externamente.
openclaw.install.defaultChoiceRuta de instalación preferida cuando hay múltiples fuentes de instalación disponibles.
openclaw.install.minHostVersionVersión mínima soportada del host de OpenClaw, usando un suelo de semver como >=2026.3.22.
openclaw.install.allowInvalidConfigRecoveryPermite una ruta estrecha de recuperación por reinstalación de plugins empaquetados cuando la config no es válida.
openclaw.startup.deferConfiguredChannelFullLoadUntilAfterListenPermite que las superficies de canal solo para setup se carguen antes que el plugin de canal completo durante el inicio.

openclaw.install.minHostVersion se aplica durante la instalación y la carga del registro del manifest. Los valores no válidos se rechazan; los valores más nuevos pero válidos omiten el plugin en hosts antiguos.

openclaw.install.allowInvalidConfigRecovery es intencionadamente limitado. No hace que cualquier configuración rota sea instalable. Actualmente solo permite que los flujos de instalación se recuperen de fallos específicos de actualización de plugins empaquetados obsoletos, como una ruta de plugin empaquetado que falta o una entrada channels.<id> antigua para ese mismo plugin. Otros errores de configuración seguirán bloqueando la instalación y enviarán a los operadores a ejecutar openclaw doctor --fix.

openclaw.channel.persistedAuthState son metadatos de paquete para un módulo verificador diminuto:

{
"openclaw": {
"channel": {
"id": "whatsapp",
"persistedAuthState": {
"specifier": "./auth-presence",
"exportName": "hasAnyWhatsAppAuth"
}
}
}
}

Úsalo cuando los flujos de setup, doctor o estado configurado necesiten una sonda de auth rápida de tipo sí/no antes de que se cargue el plugin de canal completo. El export de destino debe ser una función pequeña que solo lea el estado persistido; no la pases a través del barrel principal del runtime del canal.

openclaw.channel.configuredState sigue la misma estructura para comprobaciones ligeras de configuración solo por env:

{
"openclaw": {
"channel": {
"id": "telegram",
"configuredState": {
"specifier": "./configured-state",
"exportName": "hasTelegramConfiguredState"
}
}
}
}

Úsalo cuando un canal pueda responder al estado configurado desde env u otros inputs pequeños ajenos al runtime. Si la comprobación necesita una resolución de configuración completa o el runtime real del canal, mantén esa lógica en el hook config.hasConfiguredState del plugin.

  • Cada plugin debe incluir un JSON Schema, incluso si no acepta ninguna configuración.
  • Un esquema vacío es aceptable (por ejemplo, { "type": "object", "additionalProperties": false }).
  • Los esquemas se validan en el momento de lectura y escritura de la configuración, no en el runtime.
  • Las claves channels.* desconocidas se consideran errores, a menos que el ID del canal esté declarado en el manifest de un plugin.
  • plugins.entries.<id>, plugins.allow, plugins.deny y plugins.slots.* deben hacer referencia a IDs de plugins descubribles. Los IDs desconocidos generan errores.
  • Si un plugin está instalado pero tiene un manifest o schema roto o ausente, la validación falla y Doctor informa del error del plugin.
  • Si existe configuración del plugin pero este está deshabilitado, la configuración se conserva y se muestra un aviso en Doctor y en los logs.

Consulta la Referencia de configuración para ver el schema completo de plugins.*.

  • El manifest es obligatorio para los plugins nativos de OpenClaw, incluyendo las cargas desde el sistema de archivos local.
  • El runtime carga el módulo del plugin de forma independiente; el manifest solo se utiliza para el descubrimiento y la validación.
  • Los manifests nativos se analizan con JSON5, por lo que se aceptan comentarios, comas finales y claves sin comillas, siempre que el valor final sea un objeto.
  • El cargador de manifests solo lee los campos documentados. Evita añadir claves personalizadas de nivel superior aquí.
  • providerAuthEnvVars es la ruta rápida de metadatos para sondas de autenticación, validación de marcadores de entorno y superficies similares que no deberían iniciar el runtime del plugin solo para inspeccionar nombres de variables.
  • providerAuthAliases permite que las variantes de un provider reutilicen las variables de entorno de autenticación, perfiles, autenticación basada en configuración y opciones de registro de API-key de otro provider sin programar esa relación de forma rígida en el core.
  • channelEnvVars es la ruta rápida de metadatos para valores por defecto del entorno de shell, prompts de configuración y superficies de canales similares que no deberían iniciar el runtime del plugin solo para inspeccionar nombres de variables.
  • providerAuthChoices es la ruta rápida de metadatos para selectores de opciones de autenticación, resolución de --auth-choice, mapeo de providers preferidos y registro simple de flags de la CLI antes de que se cargue el runtime del provider. Para metadatos del asistente de runtime que requieran código del provider, consulta Hooks de runtime del provider.
  • Los tipos de plugins exclusivos se seleccionan a través de plugins.slots.*.
    • kind: "memory" se selecciona mediante plugins.slots.memory.
    • kind: "context-engine" se selecciona mediante plugins.slots.contextEngine (por defecto: el valor integrado legacy).
  • Puedes omitir channels, providers, cliBackends y skills cuando un plugin no los necesite.
  • Si tu plugin depende de módulos nativos, documenta los pasos de construcción y cualquier requisito de lista de permitidos del gestor de paquetes (por ejemplo, en pnpm usa allow-build-scripts — pnpm rebuild <package>).
OpenClaw

OpenClaw Expert

Sigues atascado?

Si esta pagina no resolvio tu caso, pregunta a OpenClaw Expert para pasos concretos.