Messages and delivery

Voortgangsconcepten

Voortgangsconcepten veranderen één kanaalbericht in een live statusregel terwijl een agent werkt, in plaats van een reeks tijdelijke antwoorden met "nog bezig". Stel channels.<channel>.streaming.mode: "progress" in en OpenClaw maakt het bericht aan zodra het echte werk begint, bewerkt het terwijl de agent leest, plant, tools aanroept of op goedkeuring wacht, en verandert het vervolgens in het definitieve antwoord.

text
Bezig...📖 uit docs/concepts/progress-drafts.md🔎 Zoeken op internet: naar "discord edit message"🛠️ Bash: tests uitvoeren

Snel aan de slag

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

Standaardwaarden vanaf hier: een startvertraging van 5 seconden, compacte voortgangsregels terwijl nuttig werk plaatsvindt en onderdrukking van de oudere, afzonderlijke voortgangsberichten voor die beurt. Concepten met onbewerkte toolregels gebruiken automatisch een label van één woord; een statuskop laat die overbodige titel weg, tenzij je er expliciet een configureert.

Deze pagina behandelt de ervaring met voortgangsconcepten en de bijbehorende configuratieopties. Voor de volledige matrix met streamingmodi, runtime-opmerkingen per kanaal en migratie van verouderde sleutels raadpleeg je Streamen en opdelen.

Wat gebruikers zien

Onderdeel Doel
Statuskop Op Discord en Telegram de preambule van het model; Discord voegt een nuttige opvulling toe.
Label Optionele begin-/statusregel, zoals Working.
Voortgangsregels Compacte uitvoeringsupdates met dezelfde toolpictogrammen en detailformatter als /verbose.

Voor onbewerkte toolvoortgang verschijnt het label zodra de agent zinvol werk begint en gedurende de aanvankelijke vertraging bezig blijft. Het staat bovenaan de doorlopende lijst met voortgangsregels en schuift dus uit beeld zodra er voldoende concrete werkregels verschijnen. Een statuskop toont alleen de status van de agent in gewone taal, tenzij expliciet een label is geconfigureerd. Antwoorden die uitsluitend uit platte tekst bestaan, tonen nooit een voortgangsconcept; een regel verschijnt alleen bij echte werkupdates, bijvoorbeeld 🛠️ Bash: run tests, 🔎 Web Search: for "discord edit message" of ✍️ Write: to /tmp/file.

Het definitieve antwoord vervangt het concept ter plaatse wanneer het kanaal dat veilig kan doen; anders verzendt OpenClaw het definitieve antwoord via de normale bezorging en ruimt het concept op of stopt met het bijwerken ervan (zie Afronding).

Een modus kiezen

channels.<channel>.streaming.mode bepaalt het zichtbare gedrag tijdens de uitvoering:

Modus Het meest geschikt voor Wat er in de chat verschijnt
off Stille kanalen Alleen het definitieve antwoord.
partial Antwoordtekst zien verschijnen Eén concept dat met de nieuwste antwoordtekst wordt bijgewerkt.
block Grotere voorbeeldfragmenten van antwoorden Eén voorbeeld dat in grotere fragmenten wordt bijgewerkt of aangevuld.
progress Beurten met veel tools of een lange looptijd Eén statusconcept en daarna het definitieve antwoord.

Kies progress wanneer gebruikers meer belang hechten aan "wat er gebeurt" dan aan het token voor token zien streamen van antwoordtekst; partial wanneer de antwoordtekst zelf het voortgangssignaal is; block voor grotere voorbeeldfragmenten. Op Discord en Telegram is streaming.mode: "block" nog steeds het streamen van een voorbeeld, niet de normale bezorging van blokantwoorden — gebruik daarvoor streaming.block.enabled.

Labels configureren

Voortgangslabels staan onder channels.<channel>.streaming.progress. Het standaardlabel voor onbewerkte toolregels is "auto", dat het eenvoudige ingebouwde label Working gebruikt. Een statuskop verbergt dat impliciete label; stel label: "auto" expliciet in als je er ook een label boven wilt:

text
Bezig

Gebruik een vast label:

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

Gebruik je eigen verzameling labels (nog steeds willekeurig/op basis van de seed gekozen wanneer label: "auto"):

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

Verberg het label en toon alleen voortgangsregels:

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

Voortgangsregels beheren

Voortgangsregels zijn afkomstig van echte uitvoeringsgebeurtenissen: het starten van tools, updates van items, taakplannen, goedkeuringen, opdrachtuitvoer, samenvattingen van patches en vergelijkbare agentactiviteit. Ze zijn standaard ingeschakeld (progress.toolProgress, standaard true).

Tools kunnen ook getypeerde voortgang doorgeven terwijl één aanroep nog wordt uitgevoerd. Zo kan een trage ophaal- of zoekactie het zichtbare concept bijwerken voordat de tool het definitieve resultaat retourneert. De voortgangsupdate is een gedeeltelijk toolresultaat met lege modelinhoud en expliciete openbare kanaalmetadata:

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

OpenClaw rendert alleen progress.text in de voortgangsinterface van het kanaal. Het normale toolresultaat arriveert later alsnog als content/details en is het enige onderdeel dat aan het model wordt teruggegeven.

Wanneer je voortgang aan een tool toevoegt, geef je een kort, algemeen bericht door en stel je dit uit totdat de bewerking lang genoeg in behandeling is om nuttig te zijn. web_fetch doet precies dit met een vertraging van 5 seconden:

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

Snelle aanroepen tonen geen voortgangsregel; langdurige aanroepen tonen er één terwijl ze nog in behandeling zijn; geannuleerde aanroepen wissen de timer voordat verouderde voortgang kan verschijnen. Voortgangstekst is een openbaar UI-zijkanaal en mag daarom nooit geheimen, onbewerkte argumenten, opgehaalde inhoud, opdrachtuitvoer of paginatekst bevatten.

Detailmodus

OpenClaw gebruikt dezelfde formatter voor voortgangsconcepten en /verbose:

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

"explain" is de standaardwaarde en houdt concepten stabiel met beknopte labels. "raw" voegt waar beschikbaar de onderliggende opdracht toe, wat nuttig is tijdens het debuggen, maar meer ruis in de chat veroorzaakt. Een aanroep van node --check /tmp/app.js wordt bijvoorbeeld per modus anders gerenderd:

Modus Voortgangsregel
explain 🛠️ check js syntax for /tmp/app.js
raw 🛠️ check js syntax for /tmp/app.js · node --check /tmp/app.js

Opdracht-/exec-tekst

streaming.progress.commandText (standaard "raw") bepaalt hoeveel details van de opdracht naast exec-/bash-voortgangsregels worden weergegeven, onafhankelijk van de bovenstaande detailmodus. Stel dit in op "status" om een toolvoortgangsregel zichtbaar te houden en tegelijkertijd de opdrachttekst volledig te verbergen:

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

Commentaarbaan

streaming.progress.commentary (standaard false) voegt het commentaar/de preambule van het model vóór toolgebruik (💬, bijvoorbeeld "Ik controleer... en daarna ...") tussen de toolregels in het concept. Zie Streamen en opdelen voor de gedeelde configuratiestructuur voor alle kanalen.

Wanneer de commentaarbaan is ingeschakeld, worden preambules alleen als deze tussengevoegde 💬-regels gerenderd; de statuskop hieronder blijft uit beeld, zodat de baan zijn gedocumenteerde vorm behoudt.

Statuskop

Op Discord en Telegram in de voortgangsmodus wordt de getypeerde preambule van het model vóór toolgebruik de statuskop van het concept zodra deze beschikbaar is. Andere kanalen in de voortgangsmodus behouden hun bestaande statusgedrag. De kop is standaard ingeschakeld en omzeilt de normale activiteitsdrempel voor korte beurten niet; door streaming.progress.commentary in te schakelen, worden preambules in plaats daarvan aan de tussengevoegde commentaarbaan doorgegeven.

Wanneer op Discord een utility-model voor de agent wordt bepaald — een expliciet utilityModel, of de opgegeven standaardwaarde voor een klein model van de primaire provider (OpenAI → gpt-5.6-luna, Anthropic → claude-haiku-4-5) — levert het een korte opvulling in gewone taal wanneer het model geen preambule produceert of ongeveer 20 seconden stil is geweest (de kop van Telegram gebruikt momenteel alleen de preambule):

text
Het standaardmodel in je configuratie wordt bijgewerkt, waarna de Gateway opnieuw wordt gestart omde wijziging toe te passen. Eén aanroep voor het weergeven van agents is mislukt en wordt opnieuw geprobeerd.

Utility-vertelling is standaard ingeschakeld (streaming.progress.narration, standaard true) en valt nooit terug op het primaire model: deze wordt alleen uitgevoerd met een expliciet utilityModel of een door de provider opgegeven standaardwaarde voor de primaire provider van de agent. Stel utilityModel: "" in om utility-routering volledig uit te schakelen. Toolregels blijven zich eronder opstapelen en keren terug als beide statusbronnen stoppen. Bewerkingen van het concept wachten nog steeds op de normale activiteitsdrempel en een daadwerkelijke tekstwijziging, waardoor flitsen bij snelle beurten worden voorkomen en het aantal bewerkingen in drukke kanalen wordt verminderd. Stel narration: false in om alleen de opvulling van het utility-model uit te schakelen; statuskoppen op basis van modelpreambules blijven ingeschakeld:

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

De invoer voor vertelling is begrensd en geredigeerd: het utility-model ontvangt de tekst van het inkomende verzoek plus dezelfde compacte, geredigeerde toolsamenvattingen die het concept zou renderen — nooit onbewerkte opdrachtuitvoer of toolresultaten. Met commandText: "status" laat de invoer voor vertelling ook exec-/bash-opdrachttekst weg, overeenkomstig wat het concept toont.

Regellimieten

Beperk hoeveel regels zichtbaar blijven (standaard 8):

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

Voortgangsregels worden automatisch gecomprimeerd om verschuivingen in de chatballon te beperken terwijl het concept wordt bewerkt. OpenClaw kapt lange regels af, zodat herhaalde bewerkingen van het concept niet bij elke update anders worden afgebroken. Het standaardbudget per regel is 120 tekens; proza wordt op een woordgrens afgebroken, terwijl lange details zoals paden of onbewerkte opdrachten met een beletselteken in het midden worden ingekort, zodat het achtervoegsel zichtbaar blijft.

Pas het budget per regel aan:

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

Verrijkte rendering (Slack)

Slack kan voortgangsregels als gestructureerde Block Kit-velden renderen in plaats van platte tekst:

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

Verrijkte rendering verzendt altijd dezelfde plattetekstinhoud naast de Block Kit-velden, zodat clients die de rijkere structuur niet kunnen renderen toch de compacte voortgangstekst tonen.

Tool-/taakregels verbergen

Behoud het ene voortgangsconcept, maar verberg tool- en taakregels:

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

Met toolProgress: false onderdrukt OpenClaw voor die beurt nog steeds de oudere zelfstandige berichten over toolvoortgang — het kanaal blijft visueel rustig tot het definitieve antwoord, behalve het label als er een is geconfigureerd.

Kanaalgedrag

Kanaal Voortgangstransport Opmerkingen
Discord Eén bericht verzenden en daarna bewerken. Standaard wordt de modus progress gebruikt; het definitieve antwoord bevat een -#-activiteitenoverzicht en het statusconcept wordt verwijderd nadat het antwoord is geplaatst.
Matrix Eén gebeurtenis verzenden en daarna bewerken. Streamingconfiguratie op accountniveau beheert concepten op accountniveau.
Microsoft Teams Systeemeigen Teams-stream in persoonlijke chats. streaming.mode: "block" wordt in plaats daarvan toegewezen aan bloklevering van Teams.
Slack Systeemeigen stream of bewerkbaar conceptbericht. Vereist een doelthread voor antwoorden; DM's op het hoogste niveau zonder zo'n thread krijgen nog steeds conceptvoorbeelden en bewerkingen.
Telegram Eén bericht verzenden en daarna bewerken. Als er een bericht tussen het voortgangsconcept en het antwoord wordt geplaatst, wordt het concept eronder opnieuw geplaatst (eerst nieuw plaatsen, dan oud verwijderen) in plaats van de client te laten verspringen.
Mattermost Bewerkbaar conceptbericht. De modus block wisselt tussen voltooide tekst en berichten over toolactiviteit; andere modi nemen toolactiviteit op in hetzelfde conceptachtige bericht.

Kanalen zonder veilige ondersteuning voor bewerken vallen terug op type-indicatoren of levering van alleen het definitieve antwoord. Zie Streaming en opdelen voor het volledige overzicht van het runtimegedrag per kanaal.

Afronding

Wanneer het definitieve antwoord gereed is, probeert OpenClaw de chat overzichtelijk te houden:

  • In de modus progress op Discord wordt het definitieve antwoord als nieuw bericht verzonden met een klein -#-activiteitenoverzicht erachter (bijvoorbeeld -# 🧠 2 thoughts · 🛠️ 5 tool calls · ⏱️ 12s), en wordt het statusconcept verwijderd zodra dat antwoord is afgeleverd. In drukke kanalen blijft boven het antwoord geen verweesd toollogboek staan; bij definitieve foutmeldingen blijft het concept zichtbaar als verslag van de mislukte beurt.
  • Als het concept veilig het definitieve antwoord kan worden (modi partial/block), bewerkt OpenClaw het ter plaatse.
  • Als het kanaal systeemeigen voortgangsstreaming gebruikt, rondt OpenClaw die stream af wanneer het systeemeigen transport de definitieve tekst accepteert.
  • Anders (media, een goedkeuringsprompt, een expliciet antwoorddoel, te veel delen of een mislukte bewerking/verzending) verzendt OpenClaw het definitieve antwoord via het normale leveringspad van het kanaal in plaats van het concept te overschrijven.

De terugval is opzettelijk: een nieuw definitief antwoord verzenden is beter dan tekst verliezen, een antwoord in de verkeerde thread plaatsen of een concept overschrijven met een payload die het kanaal niet veilig kan weergeven.

Probleemoplossing

Ik zie alleen het definitieve antwoord.

Controleer of channels.<channel>.streaming.mode voor het account of kanaal dat het bericht heeft verwerkt op progress staat. Sommige paden voor groepen of antwoorden op citaten schakelen conceptvoorbeelden voor een beurt uit wanneer het kanaal niet veilig het juiste bericht kan bewerken.

Ik zie het label, maar geen toolregels.

Controleer streaming.progress.toolProgress. Als dit false is, behoudt OpenClaw het gedrag met één concept, maar verbergt het de voortgangsregels voor tools en taken.

Ik zie een nieuw definitief bericht in plaats van een bewerkt concept.

Dat is de veiligheidsterugval die wordt beschreven in Afronding. Dit kan gebeuren bij antwoorden met media, lange antwoorden, expliciete antwoorddoelen, oude Telegram- concepten, ontbrekende Slack-threaddoelen, verwijderde voorbeeldberichten of een mislukte afronding van een systeemeigen stream.

Ik zie nog steeds zelfstandige voortgangsberichten.

De voortgangsmodus onderdrukt standaard zelfstandige berichten over toolvoortgang wanneer een concept actief is. Als er nog steeds zelfstandige berichten verschijnen, controleer dan of de beurt daadwerkelijk de modus progress gebruikt en niet streaming.mode: "off" of een kanaalpad dat geen concept voor dat bericht kan maken.

Teams gedraagt zich anders dan Discord of Telegram.

Microsoft Teams gebruikt in persoonlijke chats een systeemeigen stream in plaats van het generieke transport voor verzenden en bewerken van voorbeelden, en wijst streaming.mode: "block" toe aan bloklevering van Teams, omdat het geen blokmodus voor conceptvoorbeelden heeft zoals Discord en Telegram.

Gerelateerd

Was this useful?
On this page

On this page