Skip to content
Esta página fue generada y traducida con asistencia de IA. Si encuentra alguna imprecisión, no dude en ayudar a mejorarla. Editar en GitHub

Hooks

Los hooks de PRX proporcionan un sistema de extension dirigido por eventos que permite reaccionar a eventos del ciclo de vida durante la ejecucion del agente. Cada momento significativo en el bucle del agente -- iniciar un turno, llamar a un LLM, invocar una herramienta, encontrar un error -- emite un evento de hook. Se asocian acciones a estos eventos via un archivo de configuracion hooks.json, manifiestos de plugins WASM o la API HTTP.

Los hooks son disparar y olvidar por diseno. Nunca bloquean el bucle del agente, nunca modifican el flujo de ejecucion y nunca inyectan datos de vuelta en la conversacion. Esto los hace ideales para registro de auditoria, recoleccion de metricas, notificaciones externas y automatizacion de efectos secundarios sin introducir latencia o modos de fallo en el pipeline principal del agente.

Hay tres backends de ejecucion de hooks:

  • Hooks de shell -- Ejecutar un comando externo con el payload del evento pasado via variable de entorno, archivo temporal o stdin. Configurados en hooks.json.
  • Hooks de plugin WASM -- Llamar a la funcion on-event exportada por un plugin WASM. Declarados en el manifiesto plugin.toml del plugin.
  • Hooks de bus de eventos -- Publicar al bus de eventos interno en el topico prx.lifecycle.<evento>. Siempre activos; no requieren configuracion.

Eventos de hook

PRX emite 8 eventos de ciclo de vida. Cada evento lleva un payload JSON con campos especificos del contexto.

EventoCuando se emiteCampos del payload
agent_startEl bucle del agente inicia un nuevo turnoagent (string), session (string)
agent_endEl bucle del agente completa un turnosuccess (bool), messages_count (number)
llm_requestAntes de enviar una solicitud al proveedor LLMprovider (string), model (string), messages_count (number)
llm_responseDespues de recibir la respuesta del LLMprovider (string), model (string), duration_ms (number), success (bool)
tool_call_startAntes de que una herramienta inicie ejecuciontool (string), arguments (object)
tool_callDespues de que una herramienta complete ejecuciontool (string), success (bool), output (string)
turn_completeTurno completo finalizado (todas las herramientas resueltas)(objeto vacio)
errorCualquier error durante la ejecucioncomponent (string), message (string)

Configuracion

Los hooks de shell se configuran en un archivo hooks.json colocado en el directorio del espacio de trabajo. PRX observa este archivo para cambios y recarga en caliente la configuracion sin requerir reinicio.

json
{
  "hooks": {
    "agent_start": [
      {
        "command": "/usr/local/bin/notify",
        "args": ["--channel", "ops", "--title", "Agent Started"],
        "timeout_ms": 3000
      }
    ],
    "llm_response": [
      {
        "command": "python3",
        "args": ["/opt/hooks/log_latency.py"],
        "stdin_json": true,
        "timeout_ms": 2000
      }
    ],
    "error": [
      {
        "command": "curl",
        "args": ["-X", "POST", "-H", "Content-Type: application/json", "-d", "@-", "https://hooks.slack.com/services/T00/B00/xxxxx"],
        "stdin_json": true,
        "timeout_ms": 10000
      }
    ]
  }
}

Campos de accion de hook

CampoTipoRequeridoPor defectoDescripcion
commandstringSi--Ruta absoluta al ejecutable o nombre de comando en el PATH sanitizado
argsstring[]No[]Argumentos pasados al comando
envobjectNo{}Variables de entorno adicionales fusionadas en el entorno de ejecucion sanitizado
cwdstringNodirectorio workspaceDirectorio de trabajo para el proceso generado
timeout_msnumberNo30000Tiempo maximo de ejecucion en milisegundos. El proceso se mata (SIGKILL) si excede este limite
stdin_jsonboolNofalseCuando es true, el payload JSON completo del evento se canaliza al proceso via stdin

Entrega de payload

Las acciones de hook reciben el payload del evento a traves de tres canales simultaneamente:

  1. Variable de entorno (ZERO_HOOK_PAYLOAD) -- cadena JSON del payload (limite de 8 KB)
  2. Archivo temporal (ZERO_HOOK_PAYLOAD_FILE) -- sin limite de tamano
  3. Entrada estandar (stdin) -- cuando stdin_json es true

Hooks de plugins WASM

Los plugins WASM pueden suscribirse a eventos de hook exportando la funcion on-event definida en la interfaz WIT de PRX. Los plugins declaran que eventos quieren recibir en su manifiesto plugin.toml.

Integracion con bus de eventos

Cada evento de hook se publica automaticamente al bus de eventos interno en el topico prx.lifecycle.<evento>. Esto ocurre independientemente de si hay hooks de shell o WASM configurados.

API HTTP

Los hooks pueden gestionarse programaticamente a traves de la API HTTP con endpoints para listar, crear, actualizar, eliminar y alternar hooks.

Seguridad

  • Variables de entorno bloqueadas: LD_PRELOAD, LD_LIBRARY_PATH, DYLD_INSERT_LIBRARIES, PATH, HOME se eliminan del entorno de ejecucion de hooks
  • Validacion de entrada: Rechazo de bytes nulos, rechazo de metacaracteres de shell en el campo command
  • Aplicacion de timeout: Cada proceso de hook esta sujeto al timeout_ms configurado
  • Aislamiento de recursos: Los procesos de hook heredan las mismas restricciones de cgroup y namespace que las ejecuciones de herramientas shell

Relacionado

  • Ejecucion shell -- herramienta shell que los hooks a menudo envuelven
  • Integracion MCP -- protocolo de herramientas externo que emite eventos tool_call
  • Plugins -- sistema de plugins WASM incluyendo capacidades de hook
  • Observabilidad -- metricas y rastreo que complementan los hooks
  • Seguridad -- sandbox y motor de politicas que gobierna la ejecucion de hooks

Released under the Apache-2.0 License.