-
-
Notifications
You must be signed in to change notification settings - Fork 80.3k
[Bug]: Slack: reasoning/thinking payloads from Claude models leak through non-streaming delivery paths #84319
Copy link
Copy link
Closed
Labels
P1High-priority user-facing bug, regression, or broken workflow.High-priority user-facing bug, regression, or broken workflow.bugSomething isn't workingSomething isn't workingbug:behaviorIncorrect behavior without a crashIncorrect behavior without a crashclawsweeper:fix-shape-clearClawSweeper found a clear likely implementation shape for this issue.ClawSweeper found a clear likely implementation shape for this issue.clawsweeper:linked-pr-openClawSweeper found an open linked pull request for this issue.ClawSweeper found an open linked pull request for this issue.clawsweeper:no-new-fix-prClawSweeper does not recommend queueing a new automated fix PR for this issue.ClawSweeper does not recommend queueing a new automated fix PR for this issue.clawsweeper:queueable-fixClawSweeper marked this issue as an existing queue_fix_pr work candidate.ClawSweeper marked this issue as an existing queue_fix_pr work candidate.clawsweeper:source-reproClawSweeper found a high-confidence source-level issue reproduction.ClawSweeper found a high-confidence source-level issue reproduction.impact:message-lossChannel message delivery can be lost, duplicated, or misrouted.Channel message delivery can be lost, duplicated, or misrouted.issue-rating: 🦞 diamond lobsterVery strong issue quality with high-confidence source-level or clear reproduction.Very strong issue quality with high-confidence source-level or clear reproduction.
Description
Metadata
Metadata
Assignees
Labels
P1High-priority user-facing bug, regression, or broken workflow.High-priority user-facing bug, regression, or broken workflow.bugSomething isn't workingSomething isn't workingbug:behaviorIncorrect behavior without a crashIncorrect behavior without a crashclawsweeper:fix-shape-clearClawSweeper found a clear likely implementation shape for this issue.ClawSweeper found a clear likely implementation shape for this issue.clawsweeper:linked-pr-openClawSweeper found an open linked pull request for this issue.ClawSweeper found an open linked pull request for this issue.clawsweeper:no-new-fix-prClawSweeper does not recommend queueing a new automated fix PR for this issue.ClawSweeper does not recommend queueing a new automated fix PR for this issue.clawsweeper:queueable-fixClawSweeper marked this issue as an existing queue_fix_pr work candidate.ClawSweeper marked this issue as an existing queue_fix_pr work candidate.clawsweeper:source-reproClawSweeper found a high-confidence source-level issue reproduction.ClawSweeper found a high-confidence source-level issue reproduction.impact:message-lossChannel message delivery can be lost, duplicated, or misrouted.Channel message delivery can be lost, duplicated, or misrouted.issue-rating: 🦞 diamond lobsterVery strong issue quality with high-confidence source-level or clear reproduction.Very strong issue quality with high-confidence source-level or clear reproduction.
Type
Fields
No fields configured for issues without a type.
Bug type
Behavior bug (incorrect output/state without crash)
Beta release blocker
No
Summary
Problem
When using Claude Opus 4.6 or 4.7 models served, extended thinking content (e.g. "let me do X", "I need to consider...") appears as visible messages in Slack channels. These should be suppressed — the model's thinking capability should be preserved, but the thinking blocks themselves should never reach the user.
Root Cause
The
isReasoningsuppression check only exists in the streaming delivery path (deliverWithStreamingindispatch.ts:614):Three other delivery paths bypass this check entirely:
deliverNormally()dispatch.ts:544deliver()callbackdispatch.ts:776deliverFinalizableDraftPreview→deliverNormallydeliverReplies()replies.ts:47deliverNormallyand stream fallbackdeliverSlackSlashReplies()replies.ts:198The core routing layer (route-reply.ts, payloads.ts) correctly suppresses reasoning payloads via
shouldSuppressReasoningPayload(), but the Slack extension's internal delivery functions operate after that layer and re-introduce the gap.Affected Models
While there might be more, the following have been confirmed.
Any provider model that emits
thinkingcontent blocks, primarily:off,minimal,low,medium,high,xhigh,adaptive,max)off,minimal,low,medium,high,adaptive)Both via direct Anthropic API and Amazon Bedrock.
Steps to reproduce
Prerequisites
~/.openclaw/credentials/or AWS SDK chain)Thinking is enabled by default (
adaptivelevel for Opus 4.6/4.7), so no explicit reasoning config is needed.Reproduce via non-streaming path (easiest)
"Let me analyze each architecture..."appears as a visible Slack message before the actual answerReproduce via streaming fallback path
partialmode)deliverNormally— any of:deliverWithStreamingguard and flows throughdeliverNormally→deliverRepliesunfilteredReproduce via slash command
/ask)/ask What are the tradeoffs of microservices vs monolith?deliverSlackSlashRepliesprocesses all payloads includingisReasoning: trueonesExpected behavior
Actual behavior
"Reasoning:\n_hidden_"or containing raw thinking text like"Let me think about...","I need to consider...", etc.OpenClaw version
HEAD
Operating system
Debian
Install method
Docker
Model
amazon-bedrock/claude-opus-4.7
Provider / routing chain
openclaw -> bedrock
Additional provider/model setup details
No response
Logs, screenshots, and evidence
Impact and severity
As far as we know, this is something we only experience within the slack integration.
Additional information
No response