Plugins
Plugin del taller de Skills
Skill Workshop es experimental. Está deshabilitado de forma predeterminada, sus heurísticas de captura y prompts de revisor pueden cambiar entre versiones, y las escrituras automáticas deben usarse solo en espacios de trabajo de confianza tras revisar primero la salida del modo pendiente.
Skill Workshop es memoria procedimental para Skills del espacio de trabajo. Permite que un agente convierta flujos de trabajo reutilizables, correcciones de usuario, soluciones arduamente conseguidas y obstáculos recurrentes en archivos SKILL.md en:
<workspace>/skills/<skill-name>/SKILL.md
Esto es distinto de la memoria a largo plazo:
- Memoria almacena hechos, preferencias, entidades y contexto pasado.
- Skills almacena procedimientos reutilizables que el agente debe seguir en tareas futuras.
- Skill Workshop es el puente entre un turno útil y una skill duradera del espacio de trabajo, con comprobaciones de seguridad y aprobación opcional.
Skill Workshop es útil cuando el agente aprende un procedimiento como:
- cómo validar recursos GIF animados de origen externo
- cómo reemplazar recursos de capturas de pantalla y verificar dimensiones
- cómo ejecutar un escenario de QA específico del repositorio
- cómo depurar un fallo recurrente de proveedor
- cómo reparar una nota obsoleta de flujo de trabajo local
No está pensado para:
- hechos como "al usuario le gusta el azul"
- memoria autobiográfica amplia
- archivado sin procesar de transcripciones
- secretos, credenciales o texto oculto de prompts
- instrucciones puntuales que no se repetirán
Estado predeterminado
El plugin incluido es experimental y está deshabilitado de forma predeterminada salvo que se habilite explícitamente en plugins.entries.skill-workshop.
El manifiesto del plugin no establece enabledByDefault: true. El valor predeterminado enabled: true dentro del esquema de configuración del plugin se aplica solo después de que la entrada del plugin ya se haya seleccionado y cargado.
Experimental significa:
- el plugin tiene soporte suficiente para pruebas opcionales y uso interno
- el almacenamiento de propuestas, los umbrales de revisor y las heurísticas de captura pueden evolucionar
- la aprobación pendiente es el modo inicial recomendado
- la aplicación automática es para configuraciones personales/de espacio de trabajo de confianza, no para entornos compartidos u hostiles con gran cantidad de entradas
Habilitar
Configuración segura mínima:
{
plugins: {
entries: {
"skill-workshop": {
enabled: true,
config: {
autoCapture: true,
approvalPolicy: "pending",
reviewMode: "hybrid",
},
},
},
},
}
Con esta configuración:
- la herramienta
skill_workshopestá disponible - las correcciones reutilizables explícitas se ponen en cola como propuestas pendientes
- las pasadas de revisor basadas en umbrales pueden proponer actualizaciones de Skills
- no se escribe ningún archivo de skill hasta que se aplica una propuesta pendiente
Usa escrituras automáticas solo en espacios de trabajo de confianza:
{
plugins: {
entries: {
"skill-workshop": {
enabled: true,
config: {
autoCapture: true,
approvalPolicy: "auto",
reviewMode: "hybrid",
},
},
},
},
}
approvalPolicy: "auto" sigue usando el mismo escáner y la misma ruta de cuarentena. No aplica propuestas con hallazgos críticos.
Configuración
| Clave | Predeterminado | Rango / valores | Significado |
|---|---|---|---|
enabled |
true |
boolean | Habilita el plugin después de cargar la entrada del plugin. |
autoCapture |
true |
boolean | Habilita la captura/revisión posterior al turno en turnos de agente correctos. |
approvalPolicy |
"pending" |
"pending", "auto" |
Pone propuestas en cola o escribe propuestas seguras automáticamente. |
reviewMode |
"hybrid" |
"off", "heuristic", "llm", "hybrid" |
Elige captura de correcciones explícitas, revisor LLM, ambos o ninguno. |
reviewInterval |
15 |
1..200 |
Ejecuta el revisor después de esta cantidad de turnos correctos. |
reviewMinToolCalls |
8 |
1..500 |
Ejecuta el revisor después de esta cantidad de llamadas a herramientas observadas. |
reviewTimeoutMs |
45000 |
5000..180000 |
Tiempo de espera para la ejecución del revisor integrado. |
maxPending |
50 |
1..200 |
Máximo de propuestas pendientes/en cuarentena conservadas por espacio de trabajo. |
maxSkillBytes |
40000 |
1024..200000 |
Tamaño máximo de archivo generado de skill/soporte. |
Perfiles recomendados:
// Conservative: explicit tool use only, no automatic capture.
{
autoCapture: false,
approvalPolicy: "pending",
reviewMode: "off",
}
// Review-first: capture automatically, but require approval.
{
autoCapture: true,
approvalPolicy: "pending",
reviewMode: "hybrid",
}
// Trusted automation: write safe proposals immediately.
{
autoCapture: true,
approvalPolicy: "auto",
reviewMode: "hybrid",
}
// Low-cost: no reviewer LLM call, only explicit correction phrases.
{
autoCapture: true,
approvalPolicy: "pending",
reviewMode: "heuristic",
}
Rutas de captura
Skill Workshop tiene tres rutas de captura.
Sugerencias de herramienta
El modelo puede llamar a skill_workshop directamente cuando ve un procedimiento reutilizable o cuando el usuario le pide que guarde/actualice una skill.
Esta es la ruta más explícita y funciona incluso con autoCapture: false.
Captura heurística
Cuando autoCapture está habilitado y reviewMode es heuristic o hybrid, el plugin escanea turnos correctos en busca de frases explícitas de corrección del usuario:
next timefrom now onremember tomake sure toalways ... use/check/verify/record/save/preferprefer ... when/for/instead/usewhen asked
La heurística crea una propuesta a partir de la instrucción de usuario coincidente más reciente. Usa pistas de tema para elegir nombres de Skills para flujos de trabajo comunes:
- tareas de GIF animados ->
animated-gif-workflow - tareas de capturas de pantalla o recursos ->
screenshot-asset-workflow - tareas de QA o escenarios ->
qa-scenario-workflow - tareas de PR de GitHub ->
github-pr-workflow - alternativa ->
learned-workflows
La captura heurística es deliberadamente estrecha. Está pensada para correcciones claras y notas de proceso repetibles, no para resumir transcripciones en general.
Revisor LLM
Cuando autoCapture está habilitado y reviewMode es llm o hybrid, el plugin ejecuta un revisor integrado compacto después de alcanzar los umbrales.
El revisor recibe:
- el texto de la transcripción reciente, limitado a los últimos 12.000 caracteres
- hasta 12 Skills existentes del espacio de trabajo
- hasta 2.000 caracteres de cada skill existente
- instrucciones solo en JSON
El revisor no tiene herramientas:
disableTools: truetoolsAllow: []disableMessageTool: true
El revisor devuelve { "action": "none" } o una propuesta. El campo action es create, append o replace: prefiere append/replace cuando ya existe una skill relevante; usa create solo cuando no encaja ninguna skill existente.
Ejemplo de create:
{
"action": "create",
"skillName": "media-asset-qa",
"title": "Media Asset QA",
"reason": "Reusable animated media acceptance workflow",
"description": "Validate externally sourced animated media before product use.",
"body": "## Workflow\n\n- Verify true animation.\n- Record attribution.\n- Store a local approved copy.\n- Verify in product UI before final reply."
}
append añade section + body. replace sustituye oldText por newText en la skill indicada.
Ciclo de vida de propuestas
Cada actualización generada se convierte en una propuesta con:
idcreatedAtupdatedAtworkspaceDiragentIdopcionalsessionIdopcionalskillNametitlereasonsource:tool,agent_endoreviewerstatuschangescanFindingsopcionalquarantineReasonopcional
Estados de propuesta:
pending- esperando aprobaciónapplied- escrito en<workspace>/skillsrejected- rechazado por el operador/modeloquarantined- bloqueado por hallazgos críticos del escáner
El estado se almacena por espacio de trabajo bajo el directorio de estado de Gateway:
<stateDir>/skill-workshop/<workspace-hash>.json
Las propuestas pendientes y en cuarentena se deduplican por nombre de skill y carga útil
del cambio. El almacén conserva las propuestas pendientes/en cuarentena más recientes hasta
maxPending.
Referencia de herramientas
El plugin registra una herramienta de agente:
skill_workshop
status
Cuenta las propuestas por estado para el espacio de trabajo activo.
{ "action": "status" }
Forma del resultado:
{
"workspaceDir": "/path/to/workspace",
"pending": 1,
"quarantined": 0,
"applied": 3,
"rejected": 0
}
list_pending
Lista las propuestas pendientes.
{ "action": "list_pending" }
Para listar otro estado:
{ "action": "list_pending", "status": "applied" }
Valores válidos de status:
pendingappliedrejectedquarantined
list_quarantine
Lista las propuestas en cuarentena.
{ "action": "list_quarantine" }
Usa esto cuando la captura automática parece no hacer nada y los registros mencionan
skill-workshop: quarantined <skill>.
inspect
Obtiene una propuesta por id.
{
"action": "inspect",
"id": "proposal-id"
}
suggest
Crea una propuesta. Con approvalPolicy: "pending" (predeterminado), esto la pone en cola en lugar de escribir.
{
"action": "suggest",
"skillName": "animated-gif-workflow",
"title": "Animated GIF Workflow",
"reason": "User established reusable GIF validation rules.",
"description": "Validate animated GIF assets before using them.",
"body": "## Workflow\n\n- Verify the URL resolves to image/gif.\n- Confirm it has multiple frames.\n- Record attribution and license.\n- Avoid hotlinking when a local asset is needed."
}
Forzar una escritura segura (apply: true)
{
"action": "suggest",
"apply": true,
"skillName": "animated-gif-workflow",
"description": "Validate animated GIF assets before using them.",
"body": "## Workflow\n\n- Verify true animation.\n- Record attribution."
}
Forzar pendiente bajo política automática (apply: false)
{
"action": "suggest",
"apply": false,
"skillName": "screenshot-asset-workflow",
"description": "Screenshot replacement workflow.",
"body": "## Workflow\n\n- Verify dimensions.\n- Optimize the PNG.\n- Run the relevant gate."
}
Agregar a una sección con nombre
{
"action": "suggest",
"skillName": "qa-scenario-workflow",
"section": "Workflow",
"description": "QA scenario workflow.",
"body": "- For media QA, verify generated assets render and pass final assertions."
}
Reemplazar texto exacto
{
"action": "suggest",
"skillName": "github-pr-workflow",
"oldText": "- Check the PR.",
"newText": "- Check unresolved review threads, CI status, linked issues, and changed files before deciding."
}
apply
Aplica una propuesta pendiente.
{
"action": "apply",
"id": "proposal-id"
}
apply rechaza propuestas en cuarentena:
quarantined proposal cannot be applied
reject
Marca una propuesta como rechazada.
{
"action": "reject",
"id": "proposal-id"
}
write_support_file
Escribe un archivo de apoyo dentro de un directorio de skill existente o propuesto.
Directorios de apoyo de nivel superior permitidos:
references/templates/scripts/assets/
Ejemplo:
{
"action": "write_support_file",
"skillName": "release-workflow",
"relativePath": "references/checklist.md",
"body": "# Release Checklist\n\n- Run release docs.\n- Verify changelog.\n"
}
Los archivos de soporte tienen alcance de workspace, se verifican por ruta, están limitados en bytes por
maxSkillBytes, se escanean y se escriben de forma atómica.
Escrituras de Skill
Skill Workshop escribe únicamente bajo:
<workspace>/skills/<normalized-skill-name>/
Los nombres de Skill se normalizan:
- se convierten a minúsculas
- las secuencias que no sean
[a-z0-9_-]se convierten en- - se eliminan los caracteres no alfanuméricos iniciales/finales
- la longitud máxima es de 80 caracteres
- el nombre final debe coincidir con
[a-z0-9][a-z0-9_-]{1,79}
Para create:
- si el Skill no existe, Skill Workshop escribe un nuevo
SKILL.md - si ya existe, Skill Workshop añade el cuerpo a
## Workflow
Para append:
- si el Skill existe, Skill Workshop añade a la sección solicitada
- si no existe, Skill Workshop crea un Skill mínimo y luego añade
Para replace:
- el Skill ya debe existir
oldTextdebe estar presente exactamente- solo se reemplaza la primera coincidencia exacta
Todas las escrituras son atómicas y actualizan inmediatamente la instantánea de Skills en memoria, por lo que el Skill nuevo o actualizado puede hacerse visible sin reiniciar el Gateway.
Modelo de seguridad
Skill Workshop tiene un escáner de seguridad para el contenido generado de SKILL.md y los archivos de soporte.
Los hallazgos críticos ponen en cuarentena las propuestas:
| ID de regla | Bloquea contenido que... |
|---|---|
prompt-injection-ignore-instructions |
indica al agente que ignore instrucciones previas/superiores |
prompt-injection-system |
hace referencia a prompts del sistema, mensajes de desarrollador o instrucciones ocultas |
prompt-injection-tool |
fomenta eludir permisos/aprobaciones de herramientas |
shell-pipe-to-shell |
incluye curl/wget canalizado a sh, bash o zsh |
secret-exfiltration |
parece enviar datos de env/process env por la red |
Los hallazgos de advertencia se conservan, pero no bloquean por sí solos:
| ID de regla | Advierte sobre... |
|---|---|
destructive-delete |
comandos amplios de estilo rm -rf |
unsafe-permissions |
uso de permisos de estilo chmod 777 |
Las propuestas en cuarentena:
- conservan
scanFindings - conservan
quarantineReason - aparecen en
list_quarantine - no pueden aplicarse mediante
apply
Para recuperarte de una propuesta en cuarentena, crea una nueva propuesta segura con el contenido inseguro eliminado. No edites manualmente el JSON del almacén.
Guía de prompt
Cuando está habilitado, Skill Workshop inyecta una breve sección de prompt que indica al agente
que use skill_workshop para memoria procedimental duradera.
La guía enfatiza:
- procedimientos, no hechos/preferencias
- correcciones del usuario
- procedimientos exitosos no obvios
- dificultades recurrentes
- reparación de Skills obsoletos/superficiales/incorrectos mediante append/replace
- guardar procedimientos reutilizables después de bucles largos de herramientas o arreglos difíciles
- texto de Skill breve e imperativo
- sin volcados de transcripción
El texto del modo de escritura cambia con approvalPolicy:
- modo pendiente: poner sugerencias en cola; aplicar solo después de aprobación explícita
- modo automático: aplicar actualizaciones seguras de Skills de workspace cuando sean claramente reutilizables
Costos y comportamiento en tiempo de ejecución
La captura heurística no llama a un modelo.
La revisión con LLM usa una ejecución incrustada en el modelo de agente activo/predeterminado. Está basada en umbrales, por lo que no se ejecuta en cada turno de forma predeterminada.
El revisor:
- usa el mismo contexto de proveedor/modelo configurado cuando está disponible
- recurre a los valores predeterminados del agente en tiempo de ejecución
- tiene
reviewTimeoutMs - usa un contexto de arranque ligero
- no tiene herramientas
- no escribe nada directamente
- solo puede emitir una propuesta que pasa por la ruta normal de escáner y aprobación/cuarentena
Si el revisor falla, agota el tiempo de espera o devuelve JSON no válido, el Plugin registra un mensaje de advertencia/depuración y omite esa pasada de revisión.
Patrones operativos
Usa Skill Workshop cuando el usuario diga:
- "la próxima vez, haz X"
- "de ahora en adelante, prefiere Y"
- "asegúrate de verificar Z"
- "guarda esto como un flujo de trabajo"
- "esto tomó un tiempo; recuerda el proceso"
- "actualiza el Skill local para esto"
Buen texto de Skill:
## Workflow
- Verify the GIF URL resolves to `image/gif`.
- Confirm the file has multiple frames.
- Record source URL, license, and attribution.
- Store a local copy when the asset will ship with the product.
- Verify the local asset renders in the target UI before final reply.
Texto de Skill deficiente:
The user asked about a GIF and I searched two websites. Then one was blocked by
Cloudflare. The final answer said to check attribution.
Razones por las que la versión deficiente no debería guardarse:
- tiene forma de transcripción
- no es imperativa
- incluye detalles ruidosos de una sola ocasión
- no le indica al siguiente agente qué hacer
Depuración
Comprueba si el Plugin está cargado:
openclaw plugins list --enabled
Comprueba los conteos de propuestas desde un contexto de agente/herramienta:
{ "action": "status" }
Inspecciona las propuestas pendientes:
{ "action": "list_pending" }
Inspecciona las propuestas en cuarentena:
{ "action": "list_quarantine" }
Síntomas comunes:
| Síntoma | Causa probable | Comprobación |
|---|---|---|
| La herramienta no está disponible | La entrada del Plugin no está habilitada | plugins.entries.skill-workshop.enabled y openclaw plugins list |
| No aparece ninguna propuesta automática | autoCapture: false, reviewMode: "off" o no se alcanzaron los umbrales |
Configuración, estado de propuestas, registros del Gateway |
| La heurística no capturó | La redacción del usuario no coincidió con patrones de corrección | Usa skill_workshop.suggest explícito o habilita el revisor LLM |
| El revisor no creó una propuesta | El revisor devolvió none, JSON no válido o agotó el tiempo de espera |
Registros del Gateway, reviewTimeoutMs, umbrales |
| La propuesta no se aplica | approvalPolicy: "pending" |
list_pending, luego apply |
| La propuesta desapareció de pendientes | Se reutilizó una propuesta duplicada, se podó por máximo de pendientes o fue aplicada/rechazada/puesta en cuarentena | status, list_pending con filtros de estado, list_quarantine |
| El archivo de Skill existe, pero el modelo no lo ve | La instantánea de Skill no se actualizó o el filtrado de Skill lo excluye | estado de openclaw skills y elegibilidad de Skill de workspace |
Registros relevantes:
skill-workshop: queued <skill>skill-workshop: applied <skill>skill-workshop: quarantined <skill>skill-workshop: heuristic capture skipped: ...skill-workshop: reviewer skipped: ...skill-workshop: reviewer found no update
Escenarios de QA
Escenarios de QA respaldados por el repo:
qa/scenarios/plugins/skill-workshop-animated-gif-autocreate.mdqa/scenarios/plugins/skill-workshop-pending-approval.mdqa/scenarios/plugins/skill-workshop-reviewer-autonomous.md
Ejecuta la cobertura determinista:
pnpm openclaw qa suite \
--scenario skill-workshop-animated-gif-autocreate \
--scenario skill-workshop-pending-approval \
--concurrency 1
Ejecuta la cobertura del revisor:
pnpm openclaw qa suite \
--scenario skill-workshop-reviewer-autonomous \
--concurrency 1
El escenario del revisor está separado intencionalmente porque habilita
reviewMode: "llm" y ejercita la pasada incrustada del revisor.
Cuándo no habilitar la aplicación automática
Evita approvalPolicy: "auto" cuando:
- el workspace contiene procedimientos sensibles
- el agente está trabajando con entradas no confiables
- los Skills se comparten en un equipo amplio
- todavía estás ajustando prompts o reglas del escáner
- el modelo maneja con frecuencia contenido web/de correo hostil
Usa primero el modo pendiente. Cambia al modo automático solo después de revisar el tipo de Skills que el agente propone en ese workspace.