openclaw - 💡(How to fix) Fix toolProgress config stripped from channels without streaming.mode [1 comments, 2 participants]

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…
GitHub stats
openclaw/openclaw#73795Fetched 2026-04-29 06:15:06
View on GitHub
Comments
1
Participants
2
Timeline
4
Reactions
0
Timeline (top)
commented ×1cross-referenced ×1mentioned ×1subscribed ×1

Root Cause

The same write persists on Telegram because Telegram already has streaming.mode: "partial" declared.

Fix Action

Workaround

Added patterns to an outbound content gate script that blocks messages containing Working..., curl -s, exec fetch url, tool: exec, etc. This is fragile since model paraphrasing can bypass string matching.

Code Example

Working...
- exec fetch url -> show first 30 lines, curl -s "wttr.in/Lagos?1" 2>/dev/null | head -30
- command fetch url -> show first 30 lines
- tool: exec
RAW_BUFFERClick to expand / collapse

Bug

Setting streaming.preview.toolProgress: false on a channel in openclaw.json is silently stripped by the config normalizer if the channel does not already have a streaming.mode key. This causes internal tool execution details (exec commands, curl invocations, tool names) to leak to end users on affected channels.

Reproduction

  1. Set channels.whatsapp.streaming.preview.toolProgress to false in openclaw.json
  2. Save the file
  3. Wait for config auto-reload (~1-2 seconds)
  4. Re-read the file - streaming is reset to {}

The same write persists on Telegram because Telegram already has streaming.mode: "partial" declared.

Expected behavior

streaming.preview.toolProgress should be respected on ALL channel types, not only those with a pre-existing streaming.mode. The config normalizer should preserve this key regardless of whether the channel plugin declares streaming support.

Actual behavior

The config watcher/normalizer strips the entire streaming.preview block for channels that don't declare streaming.mode in their plugin schema. Only Telegram (which has mode: "partial") retains the setting.

Impact

Users on WhatsApp, LINE, Sendblue, and Slack see raw tool execution narration like:

Working...
- exec fetch url -> show first 30 lines, curl -s "wttr.in/Lagos?1" 2>/dev/null | head -30
- command fetch url -> show first 30 lines
- tool: exec

This leaks internal commands, file paths, and tool names to end users. Confirmed by 3 separate testers on WhatsApp (GitHub cole-feedback#432).

Workaround

Added patterns to an outbound content gate script that blocks messages containing Working..., curl -s, exec fetch url, tool: exec, etc. This is fragile since model paraphrasing can bypass string matching.

Environment

  • OpenClaw v2026.4.22 (checked v2026.4.26 release notes - not fixed there either)
  • Affected channels: whatsapp, whatsapp-cloud, slack, line, sendblue
  • Working channel: telegram (has streaming.mode: "partial" pre-set)

Suggested fix

The config normalizer should either:

  1. Preserve streaming.preview even without streaming.mode, or
  2. Default streaming.mode to "partial" when streaming.preview is set, or
  3. Allow toolProgress to be set at agents.defaults.streaming.preview.toolProgress as a global default that applies to all channels

extent analysis

TL;DR

The config normalizer should preserve the streaming.preview.toolProgress setting for all channels, regardless of whether they have a pre-existing streaming.mode key.

Guidance

  • Verify that the streaming.preview.toolProgress setting is being stripped by the config normalizer for channels without a streaming.mode key.
  • Consider implementing one of the suggested fixes, such as preserving streaming.preview even without streaming.mode, defaulting streaming.mode to "partial" when streaming.preview is set, or allowing toolProgress to be set as a global default.
  • Test the fix on affected channels, such as WhatsApp, LINE, Sendblue, and Slack, to ensure that internal tool execution details are no longer leaked to end users.
  • Review the outbound content gate script workaround and consider removing it once the fix is implemented, as it may no longer be necessary.

Example

No code snippet is provided, as the issue is related to configuration settings rather than code.

Notes

The suggested fix may require changes to the config normalizer or the addition of new configuration options. It is essential to test the fix thoroughly to ensure that it does not introduce any unintended consequences.

Recommendation

Apply a workaround by preserving streaming.preview even without streaming.mode, as this is the most straightforward solution that addresses the issue without introducing new complexity. This will ensure that internal tool execution details are not leaked to end users on affected channels.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

FAQ

Expected behavior

streaming.preview.toolProgress should be respected on ALL channel types, not only those with a pre-existing streaming.mode. The config normalizer should preserve this key regardless of whether the channel plugin declares streaming support.

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING

openclaw - 💡(How to fix) Fix toolProgress config stripped from channels without streaming.mode [1 comments, 2 participants]