openclaw - 💡(How to fix) Fix [Feature]: [BlueBubbles] Supervised reply training mode: human-in-the-loop before agent responds [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#72181Fetched 2026-04-27 05:33:47
View on GitHub
Comments
1
Participants
2
Timeline
7
Reactions
0
Author
Timeline (top)
mentioned ×2subscribed ×2commented ×1labeled ×1

A new optional trainerMode config option for the BlueBubbles plugin that intercepts inbound DMs before the agent responds, forwards them to the owner with an AI-generated draft, and lets the owner approve, override, or simply log their preferred reply — all through iMessage itself.

Root Cause

A new optional trainerMode config option for the BlueBubbles plugin that intercepts inbound DMs before the agent responds, forwards them to the owner with an AI-generated draft, and lets the owner approve, override, or simply log their preferred reply — all through iMessage itself.

Fix Action

Fix / Workaround

The obvious workaround — instructing the agent via AGENTS.md to always route messages to the owner for approval and never reply directly — doesn't hold up in practice. The BlueBubbles plugin still processes the conversation with the sender directly, and the model doesn't reliably suppress its own responses. In testing, the agent would sometimes send both the approval notification to the owner and a reply to the original sender, occasionally including fragments of its reasoning. Prompt-level instructions can't reliably intercept behavior that's already wired into the channel plugin.

RAW_BUFFERClick to expand / collapse

Summary

A new optional trainerMode config option for the BlueBubbles plugin that intercepts inbound DMs before the agent responds, forwards them to the owner with an AI-generated draft, and lets the owner approve, override, or simply log their preferred reply — all through iMessage itself.

Problem to solve

There's no way to keep a human in the loop between an inbound message and the agent's response. Most people starting with an iMessage agent are in the middle ground: they want AI draft assistance and want to build confidence in the agent's voice over time, but aren't ready to hand off full control. There's currently no mechanism to review what the agent would say, correct it, or log those corrections for future improvement.

The obvious workaround — instructing the agent via AGENTS.md to always route messages to the owner for approval and never reply directly — doesn't hold up in practice. The BlueBubbles plugin still processes the conversation with the sender directly, and the model doesn't reliably suppress its own responses. In testing, the agent would sometimes send both the approval notification to the owner and a reply to the original sender, occasionally including fragments of its reasoning. Prompt-level instructions can't reliably intercept behavior that's already wired into the channel plugin.

Proposed solution

Two new values for a trainerMode config option (default remains "reply" — no behavior change):

training mode — Every inbound DM is intercepted before an agent session is created. A draft reply is generated using the agent's configured model and SOUL.md voice profile, then forwarded to the owner's phone via iMessage. The owner replies with their preferred version, which gets logged to MEMORY.md. Nothing is ever sent to the original sender.

supervised mode — Same interception and draft forwarding, but the owner can also approve sends. send XXXX delivers the AI draft; [msg-XXXX] custom text delivers a custom reply. The owner has full control over every outbound message while still getting AI draft assistance.

In both modes, messages that don't match the command syntax fall through to normal agent handling, so the notify number still works as a regular chat thread. Pending messages have a 6-hour TTL; the owner is notified if one expires before they reply.

This is entirely self-contained within the BlueBubbles plugin — no core changes, no new SDK surface.

Alternatives considered

The control surface had to be iMessage itself. BlueBubbles has no native "draft" or "approve before send" affordance, and adding a web UI or push notification layer would require installing something new. Routing owner commands back through the same iMessage channel means approval works from any device (including Apple Watch) without any setup beyond a phone number in config.

Impact

  • Existing users: none — "reply" mode is unchanged and the default
  • New users who opt in: full human-gated deployment path before going autonomous
  • Group chats: unaffected; this only applies to DMs
  • Schema validation enforces trainerNotifyNumber is required when mode is not "reply"

Additional information

  • This will be AI-assisted work (built with Claude Code); full test coverage will be included
  • Happy to open a PR if this direction sounds good
  • Would especially appreciate input from @tyler6204 given BB ownership

extent analysis

TL;DR

Implementing a trainerMode config option with training and supervised modes can address the issue by allowing human review and approval of AI-generated draft replies before they are sent to the original sender.

Guidance

  • To implement the proposed solution, add a trainerMode config option to the BlueBubbles plugin with training and supervised modes.
  • In training mode, intercept inbound DMs, generate a draft reply using the agent's model and voice profile, and forward it to the owner's phone via iMessage for review and logging.
  • In supervised mode, allow the owner to approve sends and deliver custom replies in addition to the AI draft.
  • Ensure that messages not matching the command syntax fall through to normal agent handling to maintain existing functionality.

Example

No code snippet is provided as the issue does not contain specific code references.

Notes

The proposed solution is self-contained within the BlueBubbles plugin and does not require core changes or new SDK surfaces. However, it is essential to consider the potential impact on existing users and ensure that the new feature does not introduce any unintended behavior.

Recommendation

Apply the proposed workaround by implementing the trainerMode config option with training and supervised modes, as it provides a human-gated deployment path for new users and allows for AI-assisted work with full test coverage.

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 [Feature]: [BlueBubbles] Supervised reply training mode: human-in-the-loop before agent responds [1 comments, 2 participants]