Messages and delivery

Borradores de progreso

Los borradores de progreso hacen que los turnos largos del agente se sientan vivos en el chat sin convertir la conversación en una pila de respuestas temporales de estado.

Cuando los borradores de progreso están habilitados, OpenClaw crea un único mensaje visible de trabajo en curso solo después de que el turno demuestre que está realizando trabajo real, lo actualiza mientras el agente lee, planifica, llama herramientas o espera aprobación, y luego convierte ese borrador en la respuesta final cuando el canal puede hacerlo de forma segura.

text
Shelling...📖 from docs/concepts/progress-drafts.md🔎 Web Search: for "discord edit message"🛠️ Bash: run tests

Usa los borradores de progreso cuando quieras un único mensaje de estado ordenado durante trabajos intensivos en herramientas y la respuesta final cuando el turno haya terminado.

Inicio rápido

Habilita los borradores de progreso por canal con streaming.mode: "progress":

json5
{  channels: {    discord: {      streaming: {        mode: "progress",      },    },  },}

Eso suele ser suficiente. OpenClaw elegirá una etiqueta automática de una sola palabra, esperará hasta que el trabajo dure al menos cinco segundos o emita un segundo evento de trabajo, añadirá líneas de progreso compactas mientras ocurra trabajo útil y suprimirá el parloteo de progreso independiente duplicado para ese turno.

Lo que ven los usuarios

Un borrador de progreso tiene dos partes:

Parte Propósito
Etiqueta Una línea breve de inicio/estado como Working o Shelling.
Líneas de progreso Actualizaciones compactas de ejecución que usan los mismos iconos de herramientas y formateador de detalles que la salida detallada.

La etiqueta aparece después de que el agente inicia trabajo significativo y se mantiene ocupado durante cinco segundos o emite un segundo evento de trabajo. Forma parte de la lista móvil de líneas de progreso, por lo que el estado inicial se desplaza fuera de la vista cuando aparecen suficientes trabajos concretos. Las respuestas solo de texto sin formato no muestran un borrador de progreso. Las líneas de progreso se añaden solo cuando el agente emite actualizaciones de trabajo útiles, por ejemplo 🛠️ Bash: run tests, 🔎 Web Search: for "discord edit message" o ✍️ Write: to /tmp/file. De forma predeterminada usan el mismo modo de explicación compacto que /verbose; configura agents.defaults.toolProgressDetail: "raw" al depurar y si también quieres que se anexen comandos/detalles sin procesar. La respuesta final reemplaza el borrador cuando es posible; de lo contrario OpenClaw envía la respuesta final normalmente y limpia o deja de actualizar el borrador según el transporte del canal.

Elegir un modo

channels.<channel>.streaming.mode controla el comportamiento visible en curso:

Modo Mejor para Lo que aparece en el chat
off Canales silenciosos Solo la respuesta final.
partial Ver aparecer el texto de la respuesta Un borrador editado con el texto de respuesta más reciente.
block Fragmentos mayores de vista previa Una vista previa actualizada o anexada en fragmentos más grandes.
progress Turnos intensivos en herramientas o largos Un borrador de estado, luego la respuesta final.

Elige progress cuando a los usuarios les importe más "qué está pasando" que ver el texto de la respuesta transmitirse token por token.

Elige partial cuando la respuesta en sí sea la señal de progreso.

Elige block cuando quieras actualizaciones de vista previa del borrador en fragmentos de texto más grandes. En Discord y Telegram, streaming.mode: "block" sigue siendo transmisión de vista previa, no entrega normal por bloques. Usa streaming.block.enabled o el legado blockStreaming cuando quieras respuestas normales por bloques.

Configurar etiquetas

Las etiquetas de progreso viven en channels.<channel>.streaming.progress.

La etiqueta predeterminada es auto, que elige del conjunto integrado de etiquetas de una sola palabra de OpenClaw:

text
WorkingShellingScuttlingClawingPinchingMoltingBubblingTidingReefingCrackingSiftingBriningNautilingKrillingBarnaclingLobsteringTidepoolingPearlingSnappingSurfacing

Usa una etiqueta fija:

json5
{  channels: {    discord: {      streaming: {        mode: "progress",        progress: {          label: "Investigating",        },      },    },  },}

Usa tu propio conjunto automático de etiquetas:

json5
{  channels: {    discord: {      streaming: {        mode: "progress",        progress: {          label: "auto",          labels: ["Checking", "Reading", "Testing", "Finishing"],        },      },    },  },}

Oculta la etiqueta y muestra solo las líneas de progreso:

json5
{  channels: {    discord: {      streaming: {        mode: "progress",        progress: {          label: false,        },      },    },  },}

Controlar las líneas de progreso

Las líneas de progreso están habilitadas de forma predeterminada en el modo de progreso. Provienen de eventos reales de ejecución: inicios de herramientas, actualizaciones de elementos, planes de tareas, aprobaciones, salida de comandos, resúmenes de parches y actividad similar del agente.

Las herramientas también pueden emitir progreso tipado mientras una sola llamada de herramienta sigue ejecutándose. Así es como una obtención o búsqueda lenta puede actualizar el borrador visible antes de que la herramienta devuelva su resultado final. La actualización de progreso es un resultado parcial de herramienta con contenido de modelo vacío y metadatos explícitos de canal público:

json
{  "content": [],  "progress": {    "text": "Fetching page content...",    "visibility": "channel",    "privacy": "public",    "id": "web_fetch:fetching"  }}

OpenClaw renderiza solo progress.text en la interfaz de progreso del canal. El resultado normal de la herramienta sigue llegando después como content y details, y es la única parte devuelta al modelo.

Al añadir progreso a una herramienta, usa un mensaje breve y genérico, y demóralo hasta que la operación haya estado pendiente el tiempo suficiente para ser útil:

typescript
const clearProgressTimer = scheduleToolProgress(  onUpdate,  { text: "Fetching page content...", id: "web_fetch:fetching" },  5_000,  { signal },); try {  return await runToolWork();} finally {  clearProgressTimer();}

Este patrón significa que las llamadas rápidas no muestran una línea de progreso, las llamadas largas muestran una mientras siguen pendientes, y las llamadas canceladas limpian el temporizador antes de que pueda aparecer progreso obsoleto. El texto de progreso es un canal lateral público de interfaz, por lo que no debe incluir secretos, argumentos sin procesar, contenido obtenido, salida de comandos ni texto de páginas.

OpenClaw usa el mismo formateador para borradores de progreso y /verbose:

json5
{  agents: {    defaults: {      toolProgressDetail: "explain", // explain | raw    },  },}

"explain" es el valor predeterminado y mantiene estables los borradores con etiquetas concisas como 🛠️ check JS syntax for /tmp/app.js. "raw" anexa el comando/detalle subyacente cuando está disponible, lo que es útil al depurar pero más ruidoso en el chat.

Por ejemplo, el mismo comando aparece de forma diferente según el modo de detalle:

Modo Línea de progreso
explain 🛠️ check JS syntax for /tmp/app.js
raw 🛠️ check JS syntax for /tmp/app.js, node --check /tmp/app.js

Limita cuántas líneas permanecen visibles:

json5
{  channels: {    discord: {      streaming: {        mode: "progress",        progress: {          maxLines: 4,        },      },    },  },}

Las líneas de progreso se compactan automáticamente para reducir el reajuste de burbujas de chat mientras se edita el borrador.

OpenClaw trunca las líneas de progreso largas de forma predeterminada para que las ediciones repetidas del borrador no salten de línea de forma distinta en cada actualización. El presupuesto predeterminado por línea es de 120 caracteres. La prosa se corta en un límite de palabra, mientras que los detalles largos como rutas o comandos sin procesar se acortan con puntos suspensivos en el medio para que el sufijo siga visible.

Ajusta el presupuesto por línea:

json5
{  channels: {    discord: {      streaming: {        mode: "progress",        progress: {          maxLineChars: 160,        },      },    },  },}

Slack puede renderizar líneas de progreso como campos estructurados de Block Kit en lugar de un único cuerpo de texto:

json5
{  channels: {    slack: {      streaming: {        mode: "progress",        progress: {          render: "rich",        },      },    },  },}

El renderizado enriquecido conserva la misma alternativa de texto sin formato para que los canales y clientes que no admiten la forma más rica puedan seguir mostrando el texto de progreso compacto.

Mantén el único borrador de progreso pero oculta las líneas de herramientas y tareas:

json5
{  channels: {    discord: {      streaming: {        mode: "progress",        progress: {          toolProgress: false,        },      },    },  },}

Con toolProgress: false, OpenClaw sigue suprimiendo los mensajes independientes antiguos de progreso de herramientas para ese turno. El canal permanece visualmente silencioso hasta la respuesta final, salvo por la etiqueta si hay una configurada.

Comportamiento del canal

Cada canal usa el transporte más limpio que admite:

Canal Transporte de progreso Notas
Discord Envía un mensaje y luego lo edita. El texto final se edita en el lugar cuando cabe en un mensaje de vista previa seguro.
Matrix Envía un evento y luego lo edita. La configuración de transmisión a nivel de cuenta controla los borradores a nivel de cuenta.
Microsoft Teams Transmisión nativa de Teams en chats personales. streaming.mode: "block" se asigna a la entrega por bloques de Teams.
Slack Transmisión nativa o publicación de borrador editable. La disponibilidad de hilos afecta si puede usarse la transmisión nativa.
Telegram Envía un mensaje y luego lo edita. Los borradores visibles antiguos pueden reemplazarse para que las marcas de tiempo finales sigan siendo útiles.
Mattermost Publicación de borrador editable. La actividad de herramientas se integra en la misma publicación de estilo borrador.

Los canales sin soporte seguro de edición normalmente recurren a indicadores de escritura o a entrega solo final.

Finalización

Cuando la respuesta final está lista, OpenClaw intenta mantener limpio el chat:

  • Si el borrador puede convertirse de forma segura en la respuesta final, OpenClaw lo edita en el lugar.
  • Si el canal usa transmisión nativa de progreso, OpenClaw finaliza esa transmisión cuando el transporte nativo acepta el texto final.
  • Si la respuesta final tiene medios, una solicitud de aprobación, un destino de respuesta explícito, demasiados fragmentos o un fallo de edición/envío, OpenClaw envía la respuesta final mediante la ruta normal de entrega del canal.

La ruta alternativa es intencional. Es mejor enviar una respuesta final nueva que perder texto, encadenar mal una respuesta u sobrescribir un borrador con una carga que el canal no puede representar de forma segura.

Solución de problemas

Solo veo la respuesta final.

Comprueba que channels.<channel>.streaming.mode esté configurado como progress para la cuenta o el canal que gestionó el mensaje. Algunas rutas de grupo o de respuesta con cita pueden deshabilitar las vistas previas de borrador para un turno cuando el canal no puede editar de forma segura el mensaje correcto.

Veo la etiqueta pero no las líneas de herramientas.

Comprueba streaming.progress.toolProgress. Si es false, OpenClaw conserva el comportamiento de borrador único pero oculta las líneas de progreso de herramientas y tareas.

Veo un mensaje final nuevo en lugar de un borrador editado.

Ese es un mecanismo alternativo de seguridad. Puede ocurrir con respuestas con medios, respuestas largas, destinos de respuesta explícitos, borradores antiguos de Telegram, destinos de hilo de Slack faltantes, mensajes de vista previa eliminados o fallos al finalizar la transmisión nativa.

Sigo viendo mensajes independientes de progreso.

El modo de progreso suprime los mensajes independientes predeterminados de progreso de herramientas cuando hay un borrador activo. Si siguen apareciendo mensajes independientes, verifica que el turno esté usando realmente el modo de progreso y no streaming.mode: "off" ni una ruta de canal que no pueda crear un borrador para ese mensaje.

Teams se comporta de forma diferente a Discord o Telegram.

Microsoft Teams usa un flujo nativo en chats personales en lugar del transporte genérico de vista previa de enviar y editar. Teams también trata streaming.mode: "block" como entrega por bloques de Teams porque no tiene el mismo modo de bloque de vista previa de borrador que usan Discord y Telegram.

Relacionado

Was this useful?
On this page

On this page