Skip to content

Commit 4cbb6e0

Browse files
committed
docs(channels/bluebubbles): document channel-vs-plugin disablement and safe loopback config (#54607)
The two BlueBubbles disablement layers (channels.bluebubbles.enabled vs plugins.entries.bluebubbles.enabled) are independent. Operators running tight-control postures regularly assume the channel-level off also disables the plugin, then hit auto-enable surprises and config rewrites at startup. Add a 'Disabling BlueBubbles' section to docs/channels/bluebubbles.md that: - shows the two layers as a comparison table with concrete effects - names when each is the right posture - ships a copy-pasteable safe local loopback-only example combining gateway.mode=local + bind=loopback + token auth + both layers off - notes which startup behaviors (meta block writes) are still allowed and which (auto-enable on explicit enabled: false) are not Docs-only change. Mintlify-compatible Note block matches the style already used elsewhere in this file.
1 parent 5fae1c3 commit 4cbb6e0

2 files changed

Lines changed: 43 additions & 0 deletions

File tree

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ Docs: https://docs.openclaw.ai
1010

1111
### Changes
1212

13+
- Docs/channels/bluebubbles: document the two independent BlueBubbles disablement layers and ship a copy-pasteable safe local loopback-only configuration. Refs #54607. Thanks @lonexreb.
1314
- Docker/Gateway: harden the gateway container by dropping `NET_RAW` and `NET_ADMIN` capabilities and enabling `no-new-privileges` in the bundled `docker-compose.yml`. Thanks @VintageAyu.
1415
- Telegram: accept plugin-owned numeric forum-topic targets in the agent message tool and keep reply-dispatch provider chunks behind a real stable runtime alias during in-place package updates. Fixes #77137. Thanks @richardmqq.
1516
- Channels/WhatsApp: support explicit WhatsApp Channel/Newsletter `@newsletter` outbound message targets with channel session metadata instead of DM routing. Fixes #13417; carries forward the narrow outbound target idea from #13424. Thanks @vincentkoc and @agentz-manfred.

docs/channels/bluebubbles.md

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -588,6 +588,48 @@ Related global options:
588588
- `agents.list[].groupChat.mentionPatterns` (or `messages.groupChat.mentionPatterns`).
589589
- `messages.responsePrefix`.
590590

591+
## Disabling BlueBubbles
592+
593+
OpenClaw has two independent disablement layers. Setting one does **not** automatically set the other, and operators who want BlueBubbles fully off should configure both.
594+
595+
| Layer | Key | Effect |
596+
| ------------------- | -------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
597+
| Channel disablement | `channels.bluebubbles.enabled: false` | Hard opt-out from inbound webhook routing, outbound delivery, channel auto-enable, and bundled-channel setup discovery. The plugin row may still appear in `openclaw plugins list` (it is bundled), but the channel does not register handlers and is treated as explicitly off. |
598+
| Plugin disablement | `plugins.entries.bluebubbles.enabled: false` | Keeps the bundled plugin from registering at all. No webhook handler, no auto-enable on startup, no setup probes. |
599+
600+
Either layer alone is sufficient to keep BlueBubbles routing and setup discovery off. Setting both is the belt-and-suspenders configuration when an operator wants the bundled plugin module itself to stay un-registered as well — useful in tight-control deployments that audit plugin registration counts at startup.
601+
602+
A safe local loopback-only configuration that keeps BlueBubbles fully off looks like this:
603+
604+
```json5
605+
{
606+
gateway: {
607+
mode: "local",
608+
bind: "loopback",
609+
auth: {
610+
mode: "token",
611+
// OpenClaw generates and persists a token on first start when token
612+
// auth has no token. To pin a known value (recommended for scripted
613+
// setups, CI, and operators who want config to be the source of
614+
// truth), set it explicitly:
615+
token: "<paste-or-generate-with-openclaw-auth-token-rotate>",
616+
},
617+
},
618+
channels: {
619+
bluebubbles: { enabled: false },
620+
},
621+
plugins: {
622+
entries: {
623+
bluebubbles: { enabled: false },
624+
},
625+
},
626+
}
627+
```
628+
629+
<Note>
630+
Startup may add a `meta` block to your `openclaw.json` (`lastTouchedVersion`, `lastTouchedAt`) when other config-mutating operations run. If `gateway.auth.mode: "token"` has no `gateway.auth.token`, OpenClaw also generates a token on first start and persists it back to the same file — that one extra write is the trade-off for omitting the token. Auto-enable for BlueBubbles itself never fires when `channels.bluebubbles.enabled` is explicitly `false`; auto-enable only fires for channels that look configured (e.g. a `serverUrl` and `password` present without an explicit `enabled: false`).
631+
</Note>
632+
591633
## Addressing / delivery targets
592634

593635
Prefer `chat_guid` for stable routing:

0 commit comments

Comments
 (0)