Messages and delivery

Rascunhos de progresso

Rascunhos de progresso fazem turnos longos de agentes parecerem vivos no chat sem transformar a conversa em uma pilha de respostas temporárias de status.

Quando rascunhos de progresso estão ativados, o OpenClaw cria uma única mensagem visível de trabalho em andamento somente depois que o turno prova que está fazendo trabalho real, a atualiza enquanto o agente lê, planeja, chama ferramentas ou aguarda aprovação, e então transforma esse rascunho na resposta final quando o canal pode fazer isso com segurança.

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

Use rascunhos de progresso quando quiser uma única mensagem de status organizada durante trabalhos com muitas ferramentas e a resposta final quando o turno terminar.

Início rápido

Ative rascunhos de progresso por canal com streaming.mode: "progress":

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

Isso geralmente basta. O OpenClaw escolherá um rótulo automático de uma palavra, aguardará até que o trabalho dure pelo menos cinco segundos ou emita um segundo evento de trabalho, adicionará linhas de progresso compactas enquanto trabalho útil acontece e suprimirá conversas de progresso independentes duplicadas para esse turno.

O que os usuários veem

Um rascunho de progresso tem duas partes:

Parte Finalidade
Rótulo Um título curto, como Thinking... ou Shelling....
Linhas de progresso Atualizações compactas de execução usando os mesmos rótulos e ícones de ferramentas da saída detalhada.

O rótulo aparece depois que o agente começa trabalho significativo e permanece ocupado por cinco segundos ou emite um segundo evento de trabalho. Respostas somente em texto simples não mostram um rascunho de progresso. Linhas de progresso são adicionadas somente quando o agente emite atualizações úteis de trabalho, por exemplo 🛠️ Exec, 🔎 Web Search ou ✍️ Write: to /tmp/file. Por padrão, elas usam o mesmo modo de explicação compacto de /verbose; defina agents.defaults.toolProgressDetail: "raw" ao depurar e quando você também quiser comandos/detalhes brutos anexados. A resposta final substitui o rascunho quando possível; caso contrário, o OpenClaw envia a resposta final normalmente e limpa ou para de atualizar o rascunho conforme o transporte do canal.

Escolha um modo

channels.<channel>.streaming.mode controla o comportamento visível em andamento:

Modo Melhor para O que aparece no chat
off Canais silenciosos Somente a resposta final.
partial Ver o texto da resposta aparecer Um rascunho editado com o texto mais recente da resposta.
block Blocos maiores de prévia da resposta Uma prévia atualizada ou anexada em blocos maiores.
progress Turnos com muitas ferramentas ou longa duração Um rascunho de status, depois a resposta final.

Escolha progress quando os usuários se importarem mais com "o que está acontecendo" do que em ver o texto da resposta ser transmitido token por token.

Escolha partial quando a própria resposta for o sinal de progresso.

Escolha block quando quiser atualizações de prévia de rascunho em blocos de texto maiores. No Discord e no Telegram, streaming.mode: "block" ainda é transmissão de prévia, não entrega normal em blocos. Use streaming.block.enabled ou o legado blockStreaming quando quiser respostas normais em blocos.

Configure rótulos

Rótulos de progresso ficam em channels.<channel>.streaming.progress.

O rótulo padrão é auto, que escolhe no conjunto integrado do OpenClaw de rótulos de uma única palavra com reticências:

Thinking...
Shelling...
Scuttling...
Clawing...
Pinching...
Molting...
Bubbling...
Tiding...
Reefing...
Cracking...
Sifting...
Brining...
Nautiling...
Krilling...
Barnacling...
Lobstering...
Tidepooling...
Pearling...
Snapping...
Surfacing...

Use um rótulo fixo:

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

Use seu próprio conjunto de rótulos automáticos:

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

Oculte o rótulo e mostre apenas linhas de progresso:

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

Controle linhas de progresso

Linhas de progresso são ativadas por padrão no modo de progresso. Elas vêm de eventos reais de execução: início de ferramentas, atualizações de itens, planos de tarefas, aprovações, saída de comandos, resumos de patches e atividade semelhante do agente.

O OpenClaw usa o mesmo formatador para rascunhos de progresso e /verbose:

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

"explain" é o padrão e mantém os rascunhos estáveis com rótulos concisos como 🛠️ Exec: check JS syntax for /tmp/app.js. "raw" anexa o comando/detalhe subjacente quando disponível, o que é útil durante a depuração, mas mais ruidoso no chat.

Por exemplo, o mesmo comando aparece de forma diferente dependendo do modo de detalhe:

Modo Linha de progresso
explain 🛠️ Exec: check JS syntax for /tmp/app.js
raw 🛠️ Exec: check JS syntax for /tmp/app.js, node --check /tmp/app.js

Limite quantas linhas permanecem visíveis:

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

Linhas de progresso são compactadas automaticamente para reduzir o refluxo de bolhas de chat enquanto o rascunho é editado.

O OpenClaw trunca linhas de progresso longas por padrão para que edições repetidas do rascunho não quebrem linhas de forma diferente a cada atualização. O prefixo permanece legível, e detalhes longos como caminhos ou comandos brutos são encurtados com reticências.

O Slack pode renderizar linhas de progresso como campos estruturados do Block Kit em vez de um único corpo de texto:

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

A renderização rica mantém o mesmo fallback em texto simples para que canais e clientes que não oferecem suporte ao formato mais rico ainda possam mostrar o texto compacto de progresso.

Mantenha o rascunho de progresso único, mas oculte linhas de ferramentas e tarefas:

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

Com toolProgress: false, o OpenClaw ainda suprime as mensagens independentes mais antigas de progresso de ferramentas para esse turno. O canal permanece visualmente silencioso até a resposta final, exceto pelo rótulo se houver um configurado.

Comportamento dos canais

Cada canal usa o transporte mais limpo compatível:

Canal Transporte de progresso Observações
Discord Envia uma mensagem e depois a edita. O texto final é editado no lugar quando cabe em uma mensagem de prévia segura.
Matrix Envia um evento e depois o edita. A configuração de streaming no nível da conta controla rascunhos no nível da conta.
Microsoft Teams Stream nativo do Teams em chats pessoais. streaming.mode: "block" mapeia para entrega em blocos do Teams.
Slack Stream nativo ou postagem de rascunho editável. A disponibilidade de threads afeta se o streaming nativo pode ser usado.
Telegram Envia uma mensagem e depois a edita. Rascunhos visíveis mais antigos podem ser substituídos para que os timestamps finais continuem úteis.
Mattermost Postagem de rascunho editável. A atividade de ferramentas é incorporada à mesma postagem em estilo de rascunho.

Canais sem suporte seguro a edição geralmente recorrem a indicadores de digitação ou entrega somente final.

Finalização

Quando a resposta final está pronta, o OpenClaw tenta manter o chat limpo:

  • Se o rascunho puder se tornar a resposta final com segurança, o OpenClaw o edita no lugar.
  • Se o canal usa streaming de progresso nativo, o OpenClaw finaliza esse stream quando o transporte nativo aceita o texto final.
  • Se a resposta final tem mídia, um prompt de aprovação, um alvo explícito de resposta, chunks demais ou uma edição/envio com falha, o OpenClaw envia a resposta final pelo caminho normal de entrega do canal.

O caminho de fallback é intencional. É melhor enviar uma nova resposta final do que perder texto, colocar uma resposta na thread errada ou sobrescrever um rascunho com uma carga que o canal não consegue representar com segurança.

Solução de problemas

Vejo apenas a resposta final.

Verifique se channels.<channel>.streaming.mode está definido como progress para a conta ou canal que tratou a mensagem. Alguns caminhos de grupo ou resposta com citação podem desativar prévias de rascunho para um turno quando o canal não consegue editar a mensagem correta com segurança.

Vejo o rótulo, mas nenhuma linha de ferramenta.

Verifique streaming.progress.toolProgress. Se for false, o OpenClaw mantém o comportamento de rascunho único, mas oculta linhas de progresso de ferramentas e tarefas.

Vejo uma nova mensagem final em vez de um rascunho editado.

Isso é um fallback de segurança. Pode acontecer em respostas com mídia, respostas longas, alvos explícitos de resposta, rascunhos antigos do Telegram, alvos de thread ausentes no Slack, mensagens de prévia excluídas ou falha na finalização de stream nativo.

Ainda vejo mensagens independentes de progresso.

O modo de progresso suprime mensagens padrão independentes de progresso de ferramentas quando um rascunho está ativo. Se mensagens independentes ainda aparecerem, verifique se o turno está realmente usando o modo de progresso e não streaming.mode: "off" ou um caminho de canal que não consegue criar um rascunho para essa mensagem.

O Teams se comporta de forma diferente do Discord ou do Telegram.

O Microsoft Teams usa um stream nativo em chats pessoais em vez do transporte genérico de prévia de enviar e editar. O Teams também trata streaming.mode: "block" como entrega em blocos do Teams porque não tem o mesmo modo de bloco de prévia de rascunho usado pelo Discord e pelo Telegram.

Relacionado