openclaw - ✅(Solved) Fix Group chat final replies silently go private after upgrading to 4.27+ (all channels affected, not just Discord) [6 pull requests, 3 comments, 4 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#74876Fetched 2026-05-01 05:40:28
View on GitHub
Comments
3
Participants
4
Timeline
29
Reactions
3
Author
Timeline (top)
cross-referenced ×13subscribed ×5mentioned ×4commented ×3

After upgrading to OpenClaw 4.27, agent final replies in group chats are no longer posted to the chat room by default. The reply is only visible on the web dashboard. Users see "processing" but never receive the actual response in the group.

This affects all group/channel chats (Feishu, Discord, Telegram, Slack, etc.), not just Discord as the changelog suggests.

Root Cause

PR #73046 introduced sourceReplyDeliveryMode logic in dist/source-reply-delivery-mode-DahE29Wm.js:

if (chatType === "group" || chatType === "channel") 
  return params.cfg.messages?.groupChat?.visibleReplies === "automatic" ? "automatic" : "message_tool_only";
return "automatic";

Default is message_tool_only for all group/channel chats. Private chats (DM) are unaffected.

Fix Action

Workaround

Manually add to openclaw.json:

{
  "messages": {
    "groupChat": {
      "visibleReplies": "automatic"
    }
  }
}

Then perform a full gateway restart (not SIGUSR1):

systemctl --user restart openclaw-gateway

PR fix notes

PR #75015: fix(auto-reply): warn once when group replies default to private (#74876)

Description (problem / solution / changelog)

Summary

Add a one-shot runtime warning when visibleReplies is not explicitly configured, so users whose group/channel chats went silent after upgrading to 2026.4.27 can immediately diagnose and fix the issue.

Relates to #74876

Background

In 2026.4.27, the default behavior for group/channel chat replies changed from automatic to message_tool_only. This affects all group/chat channels (Feishu, Discord, Telegram, Slack, etc.), but no migration warning was emitted and the CHANGELOG only mentions Discord.

Fix

Add a module-level one-shot warning in resolveSourceReplyDeliveryMode() (source-reply-delivery-mode.ts) that fires the first time a group/channel chat is processed without an explicit visibleReplies config.

The warning:

  • One-shot (module-level boolean flag, fires once per process)
  • Runtime (fires only when the condition is actually triggered)
  • Actionable (tells the user exactly what to set and links to the issue)
  • Correct about reload behavior (messages config is hot-reloaded by the gateway; restart only needed if file watching is disabled)

Uses "Relates to" instead of "Closes" because the issue covers broader concerns (changelog wording, config.patch usability, documentation, migration behavior) beyond this warning.

Why runtime instead of startup

Moving from server.impl.ts startup path to source-reply-delivery-mode.ts:

  • Avoids triggering opengrep security scan on unrelated pre-existing findings in server.impl.ts
  • Only fires when the condition is actually triggered (more precise)
  • Matches the pattern used by other subsystem warnings (mentions.ts, session.ts)

Testing

  • Formatting check passes (oxfmt)
  • All 13 existing tests in source-reply-delivery-mode.test.ts pass
  • The warning only fires when both config paths are undefined (no false positives)

Changed files

  • src/auto-reply/reply/source-reply-delivery-mode.ts (modified, +15/-0)

PR #75029: fix(docs): clarify visibleReplies change applies to all group/channel chats (#74876)

Description (problem / solution / changelog)

Relates to #74876

The CHANGELOG entry for the visibleReplies behavior change (#73046) says "Discord/group chats" but the source code applies the default to all group and channel chats (Feishu, Telegram, Slack, etc.). Users searching the changelog for their channel would not find the relevant entry.

Changed "Discord/group chats" to "Group / channel chats (all channels)" in CHANGELOG.md line 528.

Changed files

  • CHANGELOG.md (modified, +1/-1)

PR #75034: fix(agents): allow gateway tool config.patch for messages.visibleReplies (#74876)

Description (problem / solution / changelog)

Relates to #74876

Problem

messages.groupChat.visibleReplies is not in the gateway tool config.patch allowlist (ALLOWED_GATEWAY_CONFIG_PATHS). This means agents and Control UI cannot set the visible reply delivery mode via config.patch — users must manually edit openclaw.json.

From the issue: "Config path is protected: messages.groupChat.visibleReplies cannot be set via config.patch (it is a protected path)."

Fix

Add messages.visibleReplies and messages.groupChat.visibleReplies to the allowlist. These are safe to allow:

  • They are simple enum values (automatic | message_tool)
  • No secrets or security-sensitive paths
  • Messages config is hot-reloaded (no restart needed per config-reload-plan.ts)

Testing

  • Formatting check passes (oxfmt)
  • All 6 existing tests in gateway-tool.test.ts pass

Changed files

  • src/agents/tools/gateway-tool.ts (modified, +4/-0)

PR #75099: fix(auto-reply): surface private group replies

Description (problem / solution / changelog)

Summary

  • Problem: after 2026.4.27, group/channel source turns defaulted to private message_tool_only replies without a runtime warning or an agent-accessible config repair path.
  • Why it matters: affected Discord, Slack, Telegram, Feishu, and other group/channel rooms looked like successful runs in the dashboard while the room never received a final reply.
  • What changed: warn once when the implicit private default is first used, allow messages.visibleReplies / messages.groupChat.visibleReplies through config.patch, and fall back to automatic delivery when the message tool is unavailable.
  • What did NOT change: the intentional group/channel safety default remains private-by-default when the message tool is available.

Change Type (select all)

  • Bug fix
  • Feature
  • Refactor required for the fix
  • Docs
  • Security hardening
  • Chore/infra

Scope (select all touched areas)

  • Gateway / orchestration
  • Skills / tool execution
  • Auth / tokens
  • Memory / storage
  • Integrations
  • API / contracts
  • UI / DX
  • CI/CD / infra

Linked Issue/PR

  • Closes #74876
  • Related #74842
  • Related #74868
  • Related #73046
  • This PR fixes a bug or regression

Root Cause (if applicable)

  • Root cause: #73046 intentionally changed group/channel source replies to message_tool_only, but the shared resolver applied it to every group/channel surface without an upgrade warning, without an easy config.patch repair path, and without checking whether the message tool could actually send visibly.
  • Missing detection / guardrail: no runtime warning for implicit private defaults, no config mutation allowlist entry for visible-reply keys, and no regression test for missing message tool fallback.
  • Contributing context: the changelog entry framed the change as Discord/group chats even though the resolver uses normalized group / channel chat type and therefore affects all channels.

Regression Test Plan (if applicable)

  • Coverage level that should have caught this:
    • Unit test
    • Seam / integration test
    • End-to-end test
    • Existing coverage already sufficient
  • Target test or file: src/auto-reply/reply/source-reply-delivery-mode.test.ts, src/auto-reply/reply/dispatch-from-config.test.ts, src/agents/tools/gateway-tool-guard-coverage.test.ts
  • Scenario the test should lock in: implicit group/channel default warns and stays tool-only, unavailable message tool falls back to automatic delivery, and visible-reply config keys can be patched.
  • Why this is the smallest reliable guardrail: the bug lives in the shared resolver, dispatch policy handoff, and agent-facing config mutation guard.
  • Existing test that already covers this (if any): existing dispatch tests covered the private default, but not the warning, config repair path, or unavailable-tool fallback.
  • If no new test is added, why not: N/A

User-visible / Behavior Changes

  • Group/channel rooms still default to private final replies when message tool output is available.
  • Operators now get a one-shot warning the first time an implicit private group/channel default is applied.
  • messages.groupChat.visibleReplies = "automatic" can be applied via config.patch instead of manual JSON editing.
  • If message_tool_only is selected but the message tool is unavailable, OpenClaw now delivers the final reply automatically instead of silently dropping visible output.
  • Docs and changelog now say this applies to all group/channel chats and clarify hot reload.

Diagram (if applicable)

Before:
group/channel turn -> implicit message_tool_only -> final reply private -> room appears silent
message tool unavailable -> no visible path

After:
group/channel turn -> implicit message_tool_only -> warning + message tool visible path
message tool unavailable -> automatic delivery fallback
operator repair -> config.patch messages.groupChat.visibleReplies = "automatic"

Security Impact (required)

  • New permissions/capabilities? No
  • Secrets/tokens handling changed? No
  • New/changed network calls? No
  • Command/tool execution surface changed? Yes
  • Data access scope changed? No
  • If any Yes, explain risk + mitigation: the agent-facing gateway config mutation allowlist now permits two bounded enum config keys that affect reply visibility only. It does not allow secrets, auth, tool policy, sandbox, or network settings.

Repro + Verification

Environment

  • OS: macOS local, Blacksmith Testbox Linux CI parity
  • Runtime/container: Node 22 / pnpm
  • Model/provider: N/A
  • Integration/channel (if any): shared group/channel delivery policy; reported on Discord and all group/channel rooms
  • Relevant config (redacted): absent messages.groupChat.visibleReplies on group/channel turns

Steps

  1. Process a group/channel turn with no explicit visible-reply config.
  2. Observe source reply delivery mode and final reply dispatch behavior.
  3. Set tools.allow without message and process the same group/channel turn.
  4. Patch messages.groupChat.visibleReplies via the gateway config mutation guard.

Expected

  • Implicit default remains private-by-default but warns once.
  • Missing message tool does not silence visible output.
  • Visible-reply keys are patchable.

Actual

  • Before this PR, implicit default was silent, missing message tool could leave no visible delivery path, and the config keys were protected from config.patch.

Evidence

  • Failing test/log before + passing after
  • Trace/log snippets
  • Screenshot/recording
  • Perf numbers (if relevant)

Human Verification (required)

What you personally verified (not just CI), and how:

  • Verified scenarios: resolver warning/default/fallback behavior, dispatch fallback to final reply delivery, gateway config mutation allowlist, docs/config metadata checks.
  • Edge cases checked: native commands still automatic; explicit automatic config still automatic; explicit tool-only remains tool-only when message is available.
  • What you did not verify: live Discord/Slack/Telegram/Feishu room roundtrip.

Review Conversations

  • I replied to or resolved every bot review conversation I addressed in this PR.
  • I left unresolved only the conversations that still need reviewer or maintainer judgment.

Compatibility / Migration

  • Backward compatible? Yes
  • Config/env changes? Yes
  • Migration needed? No
  • If yes, exact upgrade steps: optional operator repair remains messages.groupChat.visibleReplies = "automatic" to restore legacy room auto-posting. The gateway hot-reloads messages config unless file watching/reload is disabled.

Risks and Mitigations

  • Risk: Falling back to automatic delivery when message is unavailable could make some tool-only rooms visible again.
    • Mitigation: the fallback only applies when there is no tool path to produce visible output; when message is available, the private-by-default safety posture is unchanged.
  • Risk: config.patch could be used to change group/channel visibility.
    • Mitigation: this is the intended repair affordance and is limited to two non-secret enum keys.

Changed files

  • CHANGELOG.md (modified, +1/-1)
  • docs/.generated/config-baseline.sha256 (modified, +2/-2)
  • docs/channels/groups.md (modified, +3/-0)
  • docs/gateway/config-channels.md (modified, +2/-0)
  • src/agents/tools/gateway-tool-guard-coverage.test.ts (modified, +28/-0)
  • src/agents/tools/gateway-tool.ts (modified, +4/-0)
  • src/auto-reply/reply/dispatch-from-config.test.ts (modified, +25/-0)
  • src/auto-reply/reply/dispatch-from-config.ts (modified, +33/-0)
  • src/auto-reply/reply/source-reply-delivery-mode.test.ts (modified, +84/-1)
  • src/auto-reply/reply/source-reply-delivery-mode.ts (modified, +36/-2)
  • src/plugin-sdk/channel-reply-pipeline.ts (modified, +1/-0)

PR #75327: fix: deliver group/channel replies automatically when bot is @mentioned

Description (problem / solution / changelog)

Problem

Since v2026.4.27, groups and channels default sourceReplyDeliveryMode to "message_tool_only", which suppresses all automatic reply delivery — even when the bot is directly @mentioned. The model runs and generates output, but dispatchReplyFromConfig gates on !suppressDelivery and drops the response (replies=0).

Root Cause

resolveSourceReplyDeliveryMode does not consult ctx.WasMentioned. When a user @mentions the bot in a group or channel, they expect a visible response — the same contract as a DM. But the delivery mode stays "message_tool_only" regardless.

Fix

Add WasMentioned to SourceReplyDeliveryModeContext and check it in the group/channel branch: when the bot was directly @mentioned, override the default to "automatic". Falls through to the existing config/default path when WasMentioned is false or undefined.

Changes

  • source-reply-delivery-mode.ts: Add WasMentioned?: boolean to the context type. When WasMentioned === true in group/channel, force mode = "automatic".
  • source-reply-delivery-mode.test.ts: Add tests for WasMentioned: true in groups/channels returning "automatic", WasMentioned: false falling through to message_tool_only, and resolveSourceReplyVisibilityPolicy not suppressing delivery when mentioned.

No behavioral change for non-mentioned messages — the default remains message_tool_only with the existing private-delivery warning.

Relates to #74876.

Before / After

Before: @mention in group → dispatch complete (replies=0) After: @mention in group → dispatch complete (replies=1)

Changed files

  • src/auto-reply/reply/source-reply-delivery-mode.test.ts (modified, +45/-1)
  • src/auto-reply/reply/source-reply-delivery-mode.ts (modified, +24/-16)

PR #75388: fix: commit removes the runtime warning for the default group/channel private-reply behavior...

Description (problem / solution / changelog)

Summary

Found one regression: the commit removes the runtime warning for the default group/channel private-reply behavior, but the new doctor warning only covers the narrower “message tool unavailable” mismatch. A common upgraded config with channels configured and the message tool available still gets no runtime warning and no doctor warning, while normal final replies remain private.

What ClawSweeper Is Fixing

  • Medium: Doctor no longer warns about the default group/channel private-reply change when the message tool is available (regression)
    • File: src/commands/doctor/shared/preview-warnings.ts:151
    • Evidence: resolveSourceReplyDeliveryMode still defaults group/channel turns with no messages.groupChat.visibleReplies or global override to message_tool_only (src/auto-reply/reply/source-reply-delivery-mode.ts:27). The old code emitted a one-shot runtime warning for that default when the message tool was available; this commit removes it. The replacement doctor path first computes unavailable message-tool targets and returns [] when there are none (src/commands/doctor/shared/preview-warnings.ts:151), and the new test explicitly asserts no warning for a configured Slack channel under tools.profile: "messaging" (src/commands/doctor/shared/preview-warnings.test.ts:473). A focused live check confirmed the gap: for { channels: { slack: {} } }, collectVisibleReplyToolPolicyWarnings(...) returns [] while `resolveSourceReplyDeliveryMode(... ChatType: "channel", messageToolAvailabl...
    • Impact: users affected by the 4.27+ default change can still see group/channel final replies disappear from the room without either the removed runtime warning or the promised doctor hint, as long as the message tool is available. That is the normal/default policy case, not an edge case.
    • Suggested fix: split the warnings. Keep the new mismatch warning for unavailable message, but also emit a doctor advisory when group/channel visible replies are defaulted to "message_tool" and any channel config exists, regardless of message-tool availability. The advisory should point to messages.groupChat.visibleReplies: "automatic" for legacy automatic room posting.
    • Confidence: high

Expected Repair Surface

  • src/commands/doctor/shared/preview-warnings.ts
  • src/auto-reply/reply/source-reply-delivery-mode.ts
  • src/auto-reply/reply/source-reply-delivery-mode.test.ts
  • src/commands/doctor/shared/preview-warnings.test.ts

Source And Review Context

Expected validation

  • pnpm check:changed

ClawSweeper already ran:

  • pnpm install
  • pnpm test src/auto-reply/reply/source-reply-delivery-mode.test.ts src/commands/doctor/shared/preview-warnings.test.ts passed.
  • Focused pnpm exec tsx -e ... reproduction confirmed the missing warning.

Known review limits:

  • I did not run broad changed gates; this was a report-only review and focused tests covered the touched runtime/doctor warning path.

ClawSweeper Guardrails

  • Re-check the finding against latest main before changing code.
  • Keep the patch to the narrowest behavior change and matching regression coverage.
  • Do not merge automatically; this PR stays for maintainer review.

ClawSweeper 🐠 replacement reef notes:

  • Cluster: clawsweeper-commit-openclaw-openclaw-8989ceee50ab
  • Source PRs: none
  • Credit: Detected by ClawSweeper commit review for 8989ceee50abd77c33352e36468b341f40591a5e.; Original commit author: Peter Steinberger.
  • Validation: pnpm check:changed

fish notes: model gpt-5.5, reasoning medium; reviewed against 9a582ccfe6ef.

Changed files

  • CHANGELOG.md (modified, +1/-0)
  • src/auto-reply/reply/source-reply-delivery-mode.test.ts (modified, +14/-0)
  • src/commands/doctor/shared/preview-warnings.test.ts (modified, +56/-7)
  • src/commands/doctor/shared/preview-warnings.ts (modified, +13/-3)

Code Example

if (chatType === "group" || chatType === "channel") 
  return params.cfg.messages?.groupChat?.visibleReplies === "automatic" ? "automatic" : "message_tool_only";
return "automatic";

---

{
  "messages": {
    "groupChat": {
      "visibleReplies": "automatic"
    }
  }
}

---

systemctl --user restart openclaw-gateway
RAW_BUFFERClick to expand / collapse

Description

After upgrading to OpenClaw 4.27, agent final replies in group chats are no longer posted to the chat room by default. The reply is only visible on the web dashboard. Users see "processing" but never receive the actual response in the group.

This affects all group/channel chats (Feishu, Discord, Telegram, Slack, etc.), not just Discord as the changelog suggests.

Root Cause

PR #73046 introduced sourceReplyDeliveryMode logic in dist/source-reply-delivery-mode-DahE29Wm.js:

if (chatType === "group" || chatType === "channel") 
  return params.cfg.messages?.groupChat?.visibleReplies === "automatic" ? "automatic" : "message_tool_only";
return "automatic";

Default is message_tool_only for all group/channel chats. Private chats (DM) are unaffected.

Issues

  1. CHANGELOG is misleading: The entry title says "Discord/group chats" but the source code applies to ALL channels. Users on Feishu/Telegram/Slack won't find the relevant changelog entry when searching for their issue.

  2. No migration warning: There's no log warning or startup notice about this behavior change. Users upgrade and agents silently stop responding in groups with no indication of what changed or how to fix it.

  3. Config path is protected: messages.groupChat.visibleReplies cannot be set via config.patch (it's a protected path). Users must manually edit openclaw.json with a JSON editor or Python script.

  4. SIGUSR1 hot-reload is insufficient: This config requires a full gateway restart (systemctl restart), not just SIGUSR1. But there's no documentation or log message indicating this.

Workaround

Manually add to openclaw.json:

{
  "messages": {
    "groupChat": {
      "visibleReplies": "automatic"
    }
  }
}

Then perform a full gateway restart (not SIGUSR1):

systemctl --user restart openclaw-gateway

Suggestions

  1. Add a one-time log warning on first startup after upgrade when visibleReplies is not explicitly configured, pointing users to the fix
  2. Update CHANGELOG entry title to reflect all channels, not just Discord
  3. Consider making this config path non-protected so config.patch works
  4. Document the full-restart requirement for this config
  5. Consider adding a migration path that preserves the old default ("automatic") for existing installations

extent analysis

TL;DR

To fix the issue of agent final replies not being posted to group chats by default after upgrading to OpenClaw 4.27, manually add the visibleReplies configuration to openclaw.json and perform a full gateway restart.

Guidance

  • Manually edit openclaw.json to include the visibleReplies configuration: add "visibleReplies": "automatic" under "messages.groupChat".
  • Perform a full gateway restart using systemctl --user restart openclaw-gateway after updating the configuration.
  • Verify that agent final replies are now visible in group chats.
  • Consider updating the CHANGELOG entry title to reflect that the issue affects all channels, not just Discord.

Example

{
  "messages": {
    "groupChat": {
      "visibleReplies": "automatic"
    }
  }
}

Notes

This fix requires manual editing of the openclaw.json file and a full gateway restart. The config.patch method does not work for this configuration path due to it being protected.

Recommendation

Apply the workaround by manually editing openclaw.json and restarting the gateway, as this is the most straightforward solution to restore the default behavior of posting agent final replies to group chats.

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…

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 - ✅(Solved) Fix Group chat final replies silently go private after upgrading to 4.27+ (all channels affected, not just Discord) [6 pull requests, 3 comments, 4 participants]