openclaw - 💡(How to fix) Fix BlueBubbles: add config option to suppress outbound message-id receipt system events [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#80305Fetched 2026-05-11 03:16:31
View on GitHub
Comments
1
Participants
2
Timeline
6
Reactions
2
Timeline (top)
mentioned ×2subscribed ×2closed ×1commented ×1

The BlueBubbles plugin currently enqueues a system event for every outbound message:

System: [timestamp] Assistant sent "preview..." [message_id:X]

This happens in two places in monitor-processing-*.js:

  1. Path A (~line 1769, maybeEnqueueOutboundMessageId): fired synchronously after send when a real messageId is returned
  2. Path B (~line 1359, fromMe webhook handler): fallback fired when the sync response didn't return a usable id

These events are designed to give the agent a stable [message_id:X] reference for later reactions/edits/threaded replies. That's genuinely useful in some setups. But for deployments that don't use those features, the events appear as visible System: message bubbles in the user's iMessage thread (they get formatted by drainFormattedSystemEvents and injected into the next user turn, which then gets delivered to the channel).

Root Cause

The BlueBubbles plugin currently enqueues a system event for every outbound message:

System: [timestamp] Assistant sent "preview..." [message_id:X]

This happens in two places in monitor-processing-*.js:

  1. Path A (~line 1769, maybeEnqueueOutboundMessageId): fired synchronously after send when a real messageId is returned
  2. Path B (~line 1359, fromMe webhook handler): fallback fired when the sync response didn't return a usable id

These events are designed to give the agent a stable [message_id:X] reference for later reactions/edits/threaded replies. That's genuinely useful in some setups. But for deployments that don't use those features, the events appear as visible System: message bubbles in the user's iMessage thread (they get formatted by drainFormattedSystemEvents and injected into the next user turn, which then gets delivered to the channel).

Fix Action

Workaround

Commenting out both enqueueSystemEvent calls in the plugin dist file stops the behavior but is wiped on every plugin upgrade.

Code Example

System: [timestamp] Assistant sent "preview..." [message_id:X]
RAW_BUFFERClick to expand / collapse

Summary

The BlueBubbles plugin currently enqueues a system event for every outbound message:

System: [timestamp] Assistant sent "preview..." [message_id:X]

This happens in two places in monitor-processing-*.js:

  1. Path A (~line 1769, maybeEnqueueOutboundMessageId): fired synchronously after send when a real messageId is returned
  2. Path B (~line 1359, fromMe webhook handler): fallback fired when the sync response didn't return a usable id

These events are designed to give the agent a stable [message_id:X] reference for later reactions/edits/threaded replies. That's genuinely useful in some setups. But for deployments that don't use those features, the events appear as visible System: message bubbles in the user's iMessage thread (they get formatted by drainFormattedSystemEvents and injected into the next user turn, which then gets delivered to the channel).

Requested change

Add a BlueBubbles channel config option — e.g. channels.bluebubbles.outboundMessageIdEvents: false — that suppresses the two core.system.enqueueSystemEvent() calls when disabled.

The reply-context cache population (rememberBlueBubblesReplyCache) and pending-outbound buffer management (forgetPendingOutboundMessageId) should still run regardless of the flag, so the cache stays warm for deployments that re-enable later.

Workaround

Commenting out both enqueueSystemEvent calls in the plugin dist file stops the behavior but is wiped on every plugin upgrade.

Environment

  • OpenClaw: 2026.5.7
  • @openclaw/bluebubbles: 2026.5.6
  • macOS Tahoe 26.3
  • Private API: disabled (fallback path active, both paths confirmed)

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 - 💡(How to fix) Fix BlueBubbles: add config option to suppress outbound message-id receipt system events [1 comments, 2 participants]