Saltar al contenido principal

Hooks

Los hooks son scripts pequeños que se ejecutan cuando ocurre algo dentro del Gateway. Se descubren automáticamente desde directorios y pueden inspeccionarse con openclaw hooks. Hay dos tipos de hooks en OpenClaw:
  • Hooks internos (esta página): se ejecutan dentro del Gateway cuando se disparan eventos del agente, como /new, /reset, /stop o eventos del ciclo de vida.
  • Webhooks: endpoints HTTP externos que permiten que otros sistemas activen trabajo en OpenClaw. Consulta Webhooks.
Los hooks también pueden incluirse dentro de plugins. openclaw hooks list muestra tanto hooks independientes como hooks gestionados por plugins.

Inicio rápido

# Listar hooks disponibles
openclaw hooks list

# Habilitar un hook
openclaw hooks enable session-memory

# Comprobar el estado del hook
openclaw hooks check

# Obtener información detallada
openclaw hooks info session-memory

Tipos de eventos

EventoCuándo se dispara
command:newSe emite el comando /new
command:resetSe emite el comando /reset
command:stopSe emite el comando /stop
commandCualquier evento de comando (listener general)
session:compact:beforeAntes de que la compactación resuma el historial
session:compact:afterDespués de que se complete la compactación
session:patchCuando se modifican las propiedades de la sesión
agent:bootstrapAntes de inyectar los archivos bootstrap del workspace
gateway:startupDespués de que se inicien los canales y se carguen los hooks
message:receivedMensaje entrante desde cualquier canal
message:transcribedDespués de que se complete la transcripción de audio
message:preprocessedDespués de que se complete todo el procesamiento de medios y enlaces
message:sentMensaje saliente entregado

Escribir hooks

Estructura de un hook

Cada hook es un directorio que contiene dos archivos:
my-hook/
├── HOOK.md          # Metadatos + documentación
└── handler.ts       # Implementación del handler

Formato de HOOK.md

---
name: my-hook
description: "Descripción breve de lo que hace este hook"
metadata:
  { "openclaw": { "emoji": "🔗", "events": ["command:new"], "requires": { "bins": ["node"] } } }
---

# Mi Hook

La documentación detallada va aquí.
Campos de metadatos (metadata.openclaw):
CampoDescripción
emojiEmoji que se muestra en la CLI
eventsArray de eventos que se deben escuchar
exportExportación con nombre que se debe usar (por defecto "default")
osPlataformas requeridas (por ejemplo, ["darwin", "linux"])
requiresRutas de bins, anyBins, env o config requeridas
alwaysOmite las comprobaciones de elegibilidad (booleano)
installMétodos de instalación

Implementación del handler

const handler = async (event) => {
  if (event.type !== "command" || event.action !== "new") {
    return;
  }

  console.log(`[my-hook] New command triggered`);
  // Your logic here

  // Optionally send message to user
  event.messages.push("Hook executed!");
};

export default handler;
Cada evento incluye: type, action, sessionKey, timestamp, messages (haz push para enviar al usuario) y context (datos específicos del evento).

Puntos destacados del contexto del evento

Eventos de comando (command:new, command:reset): context.sessionEntry, context.previousSessionEntry, context.commandSource, context.workspaceDir, context.cfg. Eventos de mensaje (message:received): context.from, context.content, context.channelId, context.metadata (datos específicos del proveedor, incluidos senderId, senderName, guildId). Eventos de mensaje (message:sent): context.to, context.content, context.success, context.channelId. Eventos de mensaje (message:transcribed): context.transcript, context.from, context.channelId, context.mediaPath. Eventos de mensaje (message:preprocessed): context.bodyForAgent (cuerpo final enriquecido), context.from, context.channelId. Eventos bootstrap (agent:bootstrap): context.bootstrapFiles (array mutable), context.agentId. Eventos de parche de sesión (session:patch): context.sessionEntry, context.patch (solo los campos modificados), context.cfg. Solo los clientes con privilegios pueden activar eventos de parche. Eventos de compactación: session:compact:before incluye messageCount, tokenCount. session:compact:after agrega compactedCount, summaryLength, tokensBefore, tokensAfter.

Descubrimiento de hooks

Los hooks se descubren desde estos directorios, en orden de precedencia creciente de sobrescritura:
  1. Hooks incluidos: se distribuyen con OpenClaw
  2. Hooks de plugins: hooks incluidos dentro de plugins instalados
  3. Hooks gestionados: ~/.openclaw/hooks/ (instalados por el usuario, compartidos entre workspaces). Los directorios adicionales de hooks.internal.load.extraDirs comparten esta precedencia.
  4. Hooks del workspace: <workspace>/hooks/ (por agente, deshabilitados por defecto hasta que se habilitan explícitamente)
Los hooks del workspace pueden agregar nuevos nombres de hook, pero no pueden sobrescribir hooks incluidos, gestionados o proporcionados por plugins con el mismo nombre.

Paquetes de hooks

Los paquetes de hooks son paquetes npm que exportan hooks mediante openclaw.hooks en package.json. Instálalos con:
openclaw plugins install <path-or-spec>
Las especificaciones npm son solo de registro (nombre del paquete + versión exacta opcional o dist-tag). Se rechazan las especificaciones Git/URL/file y los rangos semver.

Hooks incluidos

HookEventosQué hace
session-memorycommand:new, command:resetGuarda el contexto de la sesión en <workspace>/memory/
bootstrap-extra-filesagent:bootstrapInyecta archivos bootstrap adicionales a partir de patrones glob
command-loggercommandRegistra todos los comandos en ~/.openclaw/logs/commands.log
boot-mdgateway:startupEjecuta BOOT.md cuando se inicia el gateway
Habilita cualquier hook incluido:
openclaw hooks enable <hook-name>

Detalles de session-memory

Extrae los últimos 15 mensajes de usuario/asistente, genera un slug descriptivo para el nombre de archivo mediante un LLM y lo guarda en <workspace>/memory/YYYY-MM-DD-slug.md. Requiere que workspace.dir esté configurado.

Configuración de bootstrap-extra-files

{
  "hooks": {
    "internal": {
      "entries": {
        "bootstrap-extra-files": {
          "enabled": true,
          "paths": ["packages/*/AGENTS.md", "packages/*/TOOLS.md"]
        }
      }
    }
  }
}
Las rutas se resuelven en relación con el workspace. Solo se cargan los nombres base bootstrap reconocidos (AGENTS.md, SOUL.md, TOOLS.md, IDENTITY.md, USER.md, HEARTBEAT.md, BOOTSTRAP.md, MEMORY.md).

Hooks de plugins

Los plugins pueden registrar hooks mediante el Plugin SDK para una integración más profunda: interceptar llamadas a herramientas, modificar prompts, controlar el flujo de mensajes y más. El Plugin SDK expone 28 hooks que cubren la resolución de modelos, el ciclo de vida del agente, el flujo de mensajes, la ejecución de herramientas, la coordinación de subagentes y el ciclo de vida del gateway. Para la referencia completa de hooks de plugins, incluidos before_tool_call, before_agent_reply, before_install y todos los demás hooks de plugins, consulta Plugin Architecture.

Configuración

{
  "hooks": {
    "internal": {
      "enabled": true,
      "entries": {
        "session-memory": { "enabled": true },
        "command-logger": { "enabled": false }
      }
    }
  }
}
Variables de entorno por hook:
{
  "hooks": {
    "internal": {
      "entries": {
        "my-hook": {
          "enabled": true,
          "env": { "MY_CUSTOM_VAR": "value" }
        }
      }
    }
  }
}
Directorios de hooks adicionales:
{
  "hooks": {
    "internal": {
      "load": {
        "extraDirs": ["/path/to/more/hooks"]
      }
    }
  }
}
El formato heredado de configuración de array hooks.internal.handlers todavía es compatible por compatibilidad con versiones anteriores, pero los hooks nuevos deben usar el sistema basado en descubrimiento.

Referencia de la CLI

# Listar todos los hooks (añade --eligible, --verbose o --json)
openclaw hooks list

# Mostrar información detallada sobre un hook
openclaw hooks info <hook-name>

# Mostrar resumen de elegibilidad
openclaw hooks check

# Habilitar/deshabilitar
openclaw hooks enable <hook-name>
openclaw hooks disable <hook-name>

Buenas prácticas

  • Mantén los handlers rápidos. Los hooks se ejecutan durante el procesamiento de comandos. Ejecuta el trabajo pesado en segundo plano sin esperar con void processInBackground(event).
  • Maneja los errores correctamente. Envuelve las operaciones arriesgadas en try/catch; no lances excepciones para que otros handlers puedan ejecutarse.
  • Filtra los eventos pronto. Devuelve inmediatamente si el tipo/acción del evento no es relevante.
  • Usa claves de evento específicas. Prefiere "events": ["command:new"] en lugar de "events": ["command"] para reducir la sobrecarga.

Solución de problemas

Hook no descubierto

# Verificar la estructura del directorio
ls -la ~/.openclaw/hooks/my-hook/
# Debe mostrar: HOOK.md, handler.ts

# Listar todos los hooks descubiertos
openclaw hooks list

Hook no elegible

openclaw hooks info my-hook
Comprueba si faltan binarios (PATH), variables de entorno, valores de configuración o compatibilidad del SO.

Hook no se ejecuta

  1. Verifica que el hook esté habilitado: openclaw hooks list
  2. Reinicia tu proceso de gateway para que los hooks se recarguen.
  3. Revisa los logs del gateway: ./scripts/clawlog.sh | grep hook

Relacionado