Saltar al contenido principal
Los borradores de progreso convierten un mensaje de canal en una línea de estado en vivo mientras un agente trabaja, en lugar de una pila de respuestas temporales de “sigo trabajando”. Configura channels.<channel>.streaming.mode: "progress" y OpenClaw crea el mensaje cuando empieza el trabajo real, lo edita mientras el agente lee, planifica, llama herramientas o espera aprobación, y luego lo convierte en la respuesta final.
Shelling...
📖 from docs/concepts/progress-drafts.md
🔎 Web Search: for "discord edit message"
🛠️ Bash: run tests
Discord ya usa streaming.mode: "progress" de forma predeterminada cuando channels.discord.streaming.mode/streamMode no están configurados, por lo que los borradores de progreso aparecen allí sin ninguna configuración. Todos los demás canales usan partial u off de forma predeterminada; consulta Streaming y fragmentación para ver la tabla completa de valores predeterminados por canal.

Inicio rápido

{
  channels: {
    discord: {
      streaming: {
        mode: "progress",
      },
    },
  },
}
Valores predeterminados desde aquí: una etiqueta automática de una palabra, un retraso inicial de 5 segundos (o inmediatamente con un segundo evento de trabajo), líneas de progreso compactas mientras ocurre trabajo útil y supresión de los mensajes de progreso independientes más antiguos para ese turno. Esta página cubre la experiencia de borradores de progreso y sus controles de configuración. Para ver la matriz completa de modos de streaming, notas de ejecución por canal y migración de claves heredadas, consulta Streaming y fragmentación.

Lo que ven los usuarios

PartePropósito
EtiquetaLínea breve inicial/de estado como Working o Shelling.
Líneas de progresoActualizaciones compactas de ejecución que usan los mismos iconos de herramientas y formateador de detalles que /verbose.
La etiqueta aparece cuando el agente inicia trabajo significativo y sigue ocupado durante el retraso inicial, o cuando se dispara inmediatamente un segundo evento de trabajo. Se ubica en la parte superior de la lista continua de líneas de progreso, por lo que desaparece al desplazarse cuando aparecen suficientes líneas de trabajo concretas. Las respuestas de solo texto sin formato nunca muestran un borrador de progreso; una línea aparece solo para actualizaciones de trabajo reales, por ejemplo 🛠️ Bash: run tests, 🔎 Web Search: for "discord edit message" o ✍️ Write: to /tmp/file. La respuesta final reemplaza el borrador en el mismo lugar cuando el canal puede hacerlo de forma segura; de lo contrario, OpenClaw envía la respuesta final mediante la entrega normal y limpia o deja de actualizar el borrador (consulta Finalización).

Elegir un modo

channels.<channel>.streaming.mode controla el comportamiento visible mientras está en progreso:
ModoIdeal paraQué aparece en el chat
offCanales silenciososSolo la respuesta final.
partialVer aparecer el texto de la respuestaUn borrador editado con el texto más reciente de la respuesta.
blockFragmentos más grandes de vista previa de respuestaUna vista previa actualizada o añadida en fragmentos más grandes.
progressTurnos con muchas herramientas o de larga duraciónUn borrador de estado y luego la respuesta final.
Elige progress cuando a los usuarios les importe más “qué está ocurriendo” que ver el texto de la respuesta transmitirse token por token; partial cuando el propio texto de la respuesta sea la señal de progreso; block para fragmentos más grandes de vista previa. En Discord y Telegram, streaming.mode: "block" sigue siendo streaming de vista previa, no entrega normal de respuestas en bloque; usa streaming.block.enabled (o el heredado blockStreaming) para eso.

Configurar etiquetas

Las etiquetas de progreso viven en channels.<channel>.streaming.progress. La label predeterminada es "auto", que elige entre el conjunto integrado de OpenClaw de etiquetas de una sola palabra:
Working, Shelling, Scuttling, Clawing, Pinching, Molting, Bubbling, Tiding,
Reefing, Cracking, Sifting, Brining, Nautiling, Krilling, Barnacling,
Lobstering, Tidepooling, Pearling, Snapping, Surfacing
Usa una etiqueta fija:
{
  channels: {
    discord: {
      streaming: {
        mode: "progress",
        progress: {
          label: "Investigating",
        },
      },
    },
  },
}
Usa tu propio conjunto de etiquetas (todavía se elige al azar/por semilla cuando label: "auto"):
{
  channels: {
    discord: {
      streaming: {
        mode: "progress",
        progress: {
          label: "auto",
          labels: ["Checking", "Reading", "Testing", "Finishing"],
        },
      },
    },
  },
}
Oculta la etiqueta y muestra solo las líneas de progreso:
{
  channels: {
    discord: {
      streaming: {
        mode: "progress",
        progress: {
          label: false,
        },
      },
    },
  },
}

Controlar líneas de progreso

Las líneas 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. Están habilitadas de forma predeterminada (progress.toolProgress, valor predeterminado true). Las herramientas también pueden emitir progreso tipado mientras una llamada individual sigue en ejecución. Así es como una obtención o búsqueda lenta actualiza 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:
{
  "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 más tarde como content/details y es la única parte devuelta al modelo. Al añadir progreso a una herramienta, emite un mensaje breve y genérico, y retrásalo hasta que la operación haya estado pendiente el tiempo suficiente para ser útil. web_fetch hace exactamente esto con un retraso de 5 segundos:
const clearProgressTimer = scheduleToolProgress(
  onUpdate,
  { text: "Fetching page content...", id: "web_fetch:fetching" },
  5_000,
  { signal },
);

try {
  return await runToolWork();
} finally {
  clearProgressTimer();
}
Las llamadas rápidas no muestran una línea de progreso; las llamadas largas muestran una mientras siguen pendientes; las llamadas canceladas borran el temporizador antes de que pueda aparecer progreso obsoleto. El texto de progreso es un canal lateral público de la interfaz de usuario, por lo que nunca debe incluir secretos, argumentos sin procesar, contenido obtenido, salida de comandos ni texto de páginas.

Modo de detalle

OpenClaw usa el mismo formateador para borradores de progreso y /verbose:
{
  agents: {
    defaults: {
      toolProgressDetail: "explain", // explain | raw
    },
  },
}
"explain" es el valor predeterminado y mantiene los borradores estables con etiquetas concisas. "raw" añade el comando subyacente cuando está disponible, lo cual es útil durante la depuración pero genera más ruido en el chat. Por ejemplo, una llamada node --check /tmp/app.js se representa de forma distinta según el modo:
ModoLínea de progreso
explain🛠️ check js syntax for /tmp/app.js
raw🛠️ check js syntax for /tmp/app.js · node --check /tmp/app.js

Texto de comando/exec

streaming.progress.commandText (valor predeterminado "raw") controla cuánto detalle del comando se muestra junto a las líneas de progreso de exec/bash, independientemente del modo de detalle anterior. Establécelo en "status" para mantener visible una línea de progreso de herramienta mientras se oculta por completo el texto del comando:
{
  channels: {
    discord: {
      streaming: {
        mode: "progress",
        progress: {
          commandText: "status",
        },
      },
    },
  },
}

Carril de comentario

streaming.progress.commentary (valor predeterminado false) intercala la narración de comentario/preámbulo previa a la herramienta del modelo (💬, por ejemplo “I’ll check… then …”) con las líneas de herramienta en el borrador. Consulta Streaming y fragmentación para ver la forma de configuración compartida entre canales.

Límites de líneas

Limita cuántas líneas permanecen visibles (valor predeterminado 8):
{
  channels: {
    discord: {
      streaming: {
        mode: "progress",
        progress: {
          maxLines: 4,
        },
      },
    },
  },
}
Las líneas de progreso se compactan automáticamente para reducir el reflujo de burbujas de chat mientras se edita el borrador, y OpenClaw trunca las líneas largas para que las ediciones repetidas del borrador no se ajusten 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 medio para que el sufijo permanezca visible. Ajusta el presupuesto por línea:
{
  channels: {
    discord: {
      streaming: {
        mode: "progress",
        progress: {
          maxLineChars: 160,
        },
      },
    },
  },
}

Representación enriquecida (Slack)

Slack puede representar las líneas de progreso como campos estructurados de Block Kit en lugar de texto sin formato:
{
  channels: {
    slack: {
      streaming: {
        mode: "progress",
        progress: {
          render: "rich",
        },
      },
    },
  },
}
La representación enriquecida siempre envía el mismo cuerpo de texto sin formato junto con los campos de Block Kit, por lo que los clientes que no pueden representar la forma más enriquecida siguen mostrando el texto de progreso compacto.

Ocultar líneas de herramienta/tarea

Mantén el único borrador de progreso, pero oculta las líneas de herramienta y tarea:
{
  channels: {
    discord: {
      streaming: {
        mode: "progress",
        progress: {
          toolProgress: false,
        },
      },
    },
  },
}
Con toolProgress: false, OpenClaw sigue suprimiendo los mensajes independientes antiguos de progreso de herramienta para ese turno: el canal permanece visualmente silencioso hasta la respuesta final, excepto por la etiqueta si hay una configurada.

Comportamiento del canal

CanalTransporte de progresoNotas
DiscordEnvía un mensaje y luego lo edita.Usa el modo progress de forma predeterminada; el texto final se edita en el mismo lugar cuando cabe en un mensaje de vista previa seguro.
MatrixEnvía un evento y luego lo edita.La configuración de streaming a nivel de cuenta controla los borradores a nivel de cuenta.
Microsoft TeamsStream nativo de Teams en chats personales.streaming.mode: "block" se asigna en su lugar a la entrega por bloques de Teams.
SlackStream nativo o publicación de borrador editable.Necesita un destino de hilo de respuesta; los MD de nivel superior sin uno siguen recibiendo publicaciones de vista previa de borrador y ediciones.
TelegramEnvía un mensaje y luego lo edita.Si llega un mensaje entre el borrador de progreso y la respuesta, el borrador se vuelve a publicar debajo de él (publicar nuevo y luego eliminar antiguo) en lugar de desplazar bruscamente el cliente.
MattermostPublicación de borrador editable.La actividad de herramientas se integra en la misma publicación de estilo borrador.
Los canales sin soporte de edición segura recurren a indicadores de escritura o entrega solo final. Consulta Streaming y fragmentación para ver el desglose completo del comportamiento en tiempo de ejecución por canal.

Finalización

Cuando la respuesta final está lista, OpenClaw intenta mantener el chat limpio:
  • Si el borrador puede convertirse de forma segura en la respuesta final, OpenClaw lo edita en el lugar.
  • Si el canal usa transmisión de progreso nativa, OpenClaw finaliza esa transmisión cuando el transporte nativo acepta el texto final.
  • De lo contrario (medios, una solicitud de aprobación, un destino de respuesta explícito, demasiados fragmentos, o un fallo al editar/enviar), OpenClaw envía la respuesta final a través de la ruta normal de entrega del canal en lugar de sobrescribir el borrador.
La alternativa de reserva es intencional: enviar una respuesta final nueva es mejor que perder texto, encadenar mal una respuesta o 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 sea progress para la cuenta o el canal que gestionó el mensaje. Algunas rutas de grupo o de respuesta con cita desactivan 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 líneas de herramientas. Comprueba streaming.progress.toolProgress. Si es false, OpenClaw mantiene 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. Esa es la alternativa de seguridad descrita en Finalización. Puede ocurrir con respuestas multimedia, respuestas largas, destinos de respuesta explícitos, borradores antiguos de Telegram, destinos de hilo de Slack ausentes, mensajes de vista previa eliminados o finalización fallida de transmisión nativa. Sigo viendo mensajes de progreso independientes. El modo de progreso suprime los mensajes independientes predeterminados de progreso de herramientas siempre que haya un borrador activo. Si siguen apareciendo mensajes independientes, confirma que el turno está usando realmente el modo progress 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 una transmisión nativa en chats personales en lugar del transporte genérico de vista previa de enviar y editar, y asigna streaming.mode: "block" a la entrega en bloque de Teams porque no tiene un modo de bloque con vista previa de borrador como Discord y Telegram.

Relacionado