Skip to content

feat: per-channel systemPrompt support for BlueBubbles (and other channels) #60665

Description

@jrex-jooni

Summary

The BlueBubbles plugin does not support a systemPrompt configuration option at any level (channel root, per-group, or per-DM). This means there is no way to inject channel-specific persona or behavioral instructions for BlueBubbles/iMessage conversations through config alone.

Current behavior

  • Discord and Feishu plugins wire GroupSystemPrompt into sessionCtx, allowing per-group system prompt injection via config.
  • BlueBubbles plugin does not set GroupSystemPrompt on sessionCtx at all.
  • There is no DM-level systemPrompt concept in any channel plugin.
  • Setting channels.bluebubbles.systemPrompt in config is a no-op — the BB plugin schema (bundled-channel-config-metadata.generated.ts) has no systemPrompt field.

Expected behavior

A way to configure channel-level system prompt additions for BlueBubbles (and ideally all channel plugins), so that conversations on a specific channel can have behavioral directives injected without relying on agent-side workarounds.

Possible approaches:

  1. Channel-root systemPrompt — a standard field recognized by all channel plugins, injected into sessionCtx for every conversation on that channel (groups and DMs).
  2. Generic channel middleware — a platform-level hook that injects systemPrompt from channel config before the prompt is assembled, so individual plugins don't need to implement it.
  3. Per-channel extraSystemPromptParts — similar to how GroupSystemPrompt feeds into extraSystemPromptParts in get-reply-run.ts, but sourced from channel config rather than per-group settings.

Option 2 would be the most maintainable — it avoids requiring every plugin to independently implement the same pattern.

References

  • get-reply-run.ts:295-303 — where GroupSystemPrompt is resolved and injected
  • bundled-channel-config-metadata.generated.ts — BB plugin schema (no systemPrompt field)
  • Discord plugin (extensions/discord/src/monitor/inbound-context.ts) — example of a plugin that does wire GroupSystemPrompt

Metadata

Metadata

Assignees

Labels

Type

No type

Fields

Priority

None yet

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions