Puntos de entrada
- RPC del Gateway:
agentyagent.wait. - CLI:
openclaw agent.
Secuencia de ejecución
- La RPC
agentvalida los parámetros, resuelve la sesión (sessionKey/sessionId), conserva los metadatos de la sesión y devuelve{ runId, acceptedAt }inmediatamente. agentCommandejecuta el turno: resuelve los valores predeterminados del modelo y de pensamiento/detalle/traza, carga la instantánea de Skills, llama arunEmbeddedAgenty emite un evento alternativo de fin/error del ciclo de vida si el bucle integrado aún no ha emitido ninguno.runEmbeddedAgent: serializa las ejecuciones mediante colas por sesión y globales, resuelve el modelo y el perfil de autenticación, crea la sesión de OpenClaw, se suscribe a los eventos del entorno de ejecución, transmite los incrementos del asistente y de las herramientas, aplica el tiempo límite de ejecución (abortándola al vencer) y devuelve las cargas útiles junto con los metadatos de uso. En los turnos del servidor de aplicaciones de Codex, también aborta un turno aceptado que deja de producir progreso del servidor de aplicaciones antes de un evento terminal.subscribeEmbeddedAgentSessionconecta los eventos del entorno de ejecución con el flujoagent: los eventos de herramientas constream: "tool", los incrementos del asistente constream: "assistant"y los eventos del ciclo de vida constream: "lifecycle"(phase: "start" | "end" | "error").agent.wait(waitForAgentRun) espera un fin/error del ciclo de vida en unrunIdy devuelve{ status: ok|error|timeout, startedAt, endedAt, error? }.
Gestión de colas y concurrencia
Las ejecuciones se serializan por clave de sesión (canal de sesión) y, opcionalmente, mediante un canal global, lo que evita condiciones de carrera entre herramientas y sesiones. Los canales de mensajería eligen un modo de cola (direccionamiento/seguimiento/recopilación/interrupción) que alimenta este sistema de canales; consulte Cola de comandos. Las escrituras de la transcripción también están protegidas mediante un bloqueo de escritura de sesión en el archivo de sesión. El bloqueo tiene en cuenta los procesos y se basa en archivos, por lo que detecta los escritores que eluden la cola interna del proceso o que proceden de otro proceso. De manera predeterminada, los escritores esperan hasta 60 segundos (variable de entorno para anular este valor:OPENCLAW_SESSION_WRITE_LOCK_ACQUIRE_TIMEOUT_MS) antes de indicar que la sesión está ocupada.
Los bloqueos de escritura de sesión no son reentrantes de manera predeterminada. Un auxiliar que anide intencionadamente la adquisición del mismo bloqueo mientras conserva un único escritor lógico debe habilitar esta posibilidad mediante allowReentrant: true.
Preparación de la sesión y del espacio de trabajo
- El espacio de trabajo se resuelve y se crea; las ejecuciones en entorno aislado pueden redirigirse a la raíz de un espacio de trabajo aislado.
- Las Skills se cargan (o se reutilizan desde una instantánea) y se inyectan en el entorno y en el prompt.
- Los archivos de arranque/contexto se resuelven y se inyectan en el prompt del sistema.
- Se adquiere un bloqueo de escritura de sesión y se prepara el destino de la transcripción de la sesión antes de iniciar la transmisión. Cualquier ruta posterior de reescritura, Compaction o truncamiento de la transcripción debe adquirir el mismo bloqueo antes de modificar las filas de la transcripción en SQLite.
Ensamblaje del prompt
El prompt del sistema se crea a partir del prompt base de OpenClaw, el prompt de Skills, el contexto de arranque y las anulaciones específicas de cada ejecución. Se aplican los límites específicos del modelo y los tokens de reserva de Compaction. Consulte Prompt del sistema para conocer lo que ve el modelo.Hooks
OpenClaw tiene dos sistemas de hooks:- Hooks internos (hooks del Gateway): scripts controlados por eventos para comandos y eventos del ciclo de vida.
- Hooks de Plugin: puntos de extensión dentro del ciclo de vida del agente y las herramientas, y del Pipeline del Gateway.
Hooks internos (hooks del Gateway)
agent:bootstrap: se ejecuta mientras se crean los archivos de arranque, antes de finalizar el prompt del sistema. Se utiliza para añadir o eliminar archivos de contexto de arranque.- Hooks de comandos:
/new,/reset,/stopy otros eventos de comandos (consulte la documentación de Hooks).
Hooks de Plugin
Estos se ejecutan dentro del bucle del agente o del Pipeline del Gateway:
Reglas de decisión de los hooks para los controles de salida/herramientas:
before_tool_call:{ block: true }es terminal y detiene los controladores de menor prioridad.{ block: false }no realiza ninguna operación y no elimina un bloqueo anterior.before_install: tiene la misma semántica terminal/sin operación indicada anteriormente. Utilicesecurity.installPolicy, nobefore_install, para las decisiones de permitir/bloquear instalaciones que pertenezcan al operador y deban abarcar las rutas de instalación y actualización de la CLI.message_sending:{ cancel: true }es terminal y detiene los controladores de menor prioridad.{ cancel: false }no realiza ninguna operación y no elimina una cancelación anterior.
Transmisión
- Los incrementos del asistente se transmiten desde el entorno de ejecución del agente como eventos
assistant. - La transmisión por bloques puede emitir respuestas parciales en
text_endomessage_end. - La transmisión del razonamiento puede ser un flujo independiente o respuestas por bloques.
- Consulte Transmisión para obtener información sobre la fragmentación y el comportamiento de las respuestas por bloques.
Ejecución de herramientas
- Los eventos de inicio/actualización/fin de las herramientas se emiten en el flujo
tool. - Los resultados de las herramientas se depuran según el tamaño y las cargas útiles de imágenes antes de registrarlos o emitirlos.
- Se realiza un seguimiento de los envíos de las herramientas de mensajería para suprimir las confirmaciones duplicadas del asistente.
Conformación de respuestas
Las cargas útiles finales se ensamblan a partir del texto del asistente (más el razonamiento opcional), los resúmenes de herramientas en línea (cuando se permite el modo detallado) y el texto de error del asistente cuando se produce un error en el modelo.- El token silencioso exacto
NO_REPLYse filtra de las cargas útiles salientes. - Los duplicados de las herramientas de mensajería se eliminan de la lista final de cargas útiles.
- Si no quedan cargas útiles que se puedan representar y se produjo un error en una herramienta, se emite una respuesta alternativa de error de la herramienta, a menos que una herramienta de mensajería ya haya enviado una respuesta visible para el usuario.
Compaction y reintentos
La Compaction automática emite eventos de flujocompaction y puede activar un reintento. Durante el reintento, los búferes en memoria y los resúmenes de herramientas se restablecen para evitar resultados duplicados. Consulte Compaction.
Flujos de eventos
lifecycle: emitido porsubscribeEmbeddedAgentSession(y, como alternativa, poragentCommand).assistant: incrementos transmitidos desde el entorno de ejecución del agente.tool: eventos de herramientas transmitidos desde el entorno de ejecución del agente.
Gestión del canal de chat
Los incrementos del asistente se almacenan en búfer en mensajesdelta del chat. Se emite un final de chat al producirse un fin/error del ciclo de vida.
Tiempos límite
Diagnóstico de sesiones bloqueadas
Con el diagnóstico habilitado, un umbral integrado de dos minutos clasifica las sesionesprocessing prolongadas en las que no se ha observado progreso de respuesta, herramienta, estado, bloqueo ni ACP:
- Las ejecuciones integradas, las llamadas al modelo y las llamadas a herramientas activas se notifican como
session.long_running. Las llamadas silenciosas al modelo con propietario permanecen comosession.long_runninghasta el umbral de cancelación, para que los proveedores lentos o sin transmisión no se marquen como bloqueados demasiado pronto. - El trabajo activo sin progreso reciente se notifica como
session.stalled. Las llamadas al modelo con propietario cambian asession.stalledal alcanzar o superar el umbral de cancelación; la actividad obsoleta de modelos o herramientas sin propietario no se oculta como una ejecución prolongada. session.stuckse reserva para los registros obsoletos recuperables de las sesiones, incluidas las sesiones inactivas en cola con actividad obsoleta de modelos o herramientas sin propietario.
session.stuck repetidos aumentan progresivamente su intervalo mientras la sesión permanece sin cambios.
Dónde puede finalizar antes de tiempo
- Tiempo de espera del agente (cancelación)
- AbortSignal (cancelación)
- Desconexión del Gateway o tiempo de espera de RPC
- Tiempo de espera de
agent.wait(solo espera, no detiene al agente)
Temas relacionados
- Herramientas - herramientas disponibles para el agente
- Hooks - scripts controlados por eventos que se activan mediante eventos del ciclo de vida del agente
- Compaction - cómo se resumen las conversaciones largas
- Aprobaciones de ejecución - controles de aprobación para comandos de shell
- Pensamiento - configuración del nivel de pensamiento/razonamiento