BlueBubbles: Suppressing Outbound Message-ID System Events
How to configure the BlueBubbles channel to prevent system events from appearing as visible bubbles in iMessage threads when outbound message-ID tracking is not required.
π Symptoms
Visible System Event Bubbles in iMessage
When the BlueBubbles plugin processes outbound messages, system event notifications appear as user-visible bubbles in iMessage threads:
System: [2026-05-14 09:23:41] Assistant sent "preview..." [message_id:8A9B2C3D]
Trigger Points
The system events originate from two distinct execution paths in monitor-processing-*.js:
Path A β Synchronous Confirmation (~line 1769)
// maybeEnqueueOutboundMessageId block
core.system.enqueueSystemEvent({
type: 'bluebubbles_outbound_message_id',
channel: 'bluebubbles',
data: { messageId, chatGuid, tempId }
});
Path B β Fallback Handler (~line 1359)
// fromMe webhook handler
core.system.enqueueSystemEvent({
type: 'bluebubbles_outbound_message_id',
channel: 'bluebubbles',
data: { messageId: realId, chatGuid, tempId }
});
Impact on User Experience
These events are processed through drainFormattedSystemEvents() and injected into the next user turn, causing:
- Unexpected
System:prefixed messages appearing in chat logs - Channel adapter receiving spurious system notifications
- Noisy conversation history when reviewing chat transcripts
π§ Root Cause
Architectural Design
The BlueBubbles plugin implements a dual-reference system for outbound messages: