Skip to content

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

@jrex-jooni

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
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions