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.