Broadcast groups
Overview
Broadcast Groups enable multiple agents to process and respond to the same message simultaneously. This allows you to create specialized agent teams that work together in a single WhatsApp group or DM — all using one phone number.
Current scope: WhatsApp only (web channel).
Broadcast groups are evaluated after channel allowlists and group activation rules. In WhatsApp groups, this means broadcasts happen when RemoteClaw would normally reply (for example: on mention, depending on your group settings).
Use cases
```Group: "Development Team"Agents: - CodeReviewer (reviews code snippets) - DocumentationBot (generates docs) - SecurityAuditor (checks for vulnerabilities) - TestGenerator (suggests test cases)```
Each agent processes the same message and provides its specialized perspective.Configuration
Basic setup
Add a top-level broadcast section (next to bindings). Keys are WhatsApp peer ids:
- group chats: group JID (e.g.
120363403215116621@g.us) - DMs: E.164 phone number (e.g.
+15551234567)
{ "broadcast": { "120363403215116621@g.us": ["alfred", "baerbel", "assistant3"] }}Result: When RemoteClaw would reply in this chat, it will run all three agents.
Processing strategy
Control how agents process messages:
```json{ "broadcast": { "strategy": "parallel", "120363403215116621@g.us": ["alfred", "baerbel"] }}``````json{ "broadcast": { "strategy": "sequential", "120363403215116621@g.us": ["alfred", "baerbel"] }}```Complete example
{ "agents": { "list": [ { "id": "code-reviewer", "name": "Code Reviewer", "workspace": "/path/to/code-reviewer", "sandbox": { "mode": "all" } }, { "id": "security-auditor", "name": "Security Auditor", "workspace": "/path/to/security-auditor", "sandbox": { "mode": "all" } }, { "id": "docs-generator", "name": "Documentation Generator", "workspace": "/path/to/docs-generator", "sandbox": { "mode": "all" } } ] }, "broadcast": { "strategy": "parallel", "120363403215116621@g.us": ["code-reviewer", "security-auditor", "docs-generator"], "120363424282127706@g.us": ["support-en", "support-de"], "+15555550123": ["assistant", "logger"] }}How it works
Message flow
Session isolation
Each agent in a broadcast group maintains completely separate:
- Session keys (
agent:alfred:whatsapp:group:120363...vsagent:baerbel:whatsapp:group:120363...) - Conversation history (agent doesn’t see other agents’ messages)
- Workspace (separate sandboxes if configured)
- Tool access (different allow/deny lists)
- Memory/context (separate IDENTITY.md, SOUL.md, etc.)
- Group context buffer (recent group messages used for context) is shared per peer, so all broadcast agents see the same context when triggered
This allows each agent to have:
- Different personalities
- Different tool access (e.g., read-only vs. read-write)
- Different models (e.g., opus vs. sonnet)
- Different skills installed
Example: isolated sessions
In group 120363403215116621@g.us with agents ["alfred", "baerbel"]:
Best practices
```json{ "broadcast": { "DEV_GROUP": ["formatter", "linter", "tester"] }}```
✅ **Good:** Each agent has one job. ❌ **Bad:** One generic "dev-helper" agent.```json{ "agents": { "security-scanner": { "name": "Security Scanner" }, "code-formatter": { "name": "Code Formatter" }, "test-generator": { "name": "Test Generator" } }}``````json{ "agents": { "reviewer": { "tools": { "allow": ["read", "exec"] } }, "fixer": { "tools": { "allow": ["read", "write", "edit", "exec"] } } }}```
`reviewer` is read-only. `fixer` can read and write.- Using `"strategy": "parallel"` (default) for speed- Limiting broadcast groups to 5-10 agents- Using faster models for simpler agents```Message → [Agent A ✓, Agent B ✗ error, Agent C ✓]Result: Agent A and C respond, Agent B logs error```Compatibility
Providers
Broadcast groups currently work with:
- ✅ WhatsApp (implemented)
- 🚧 Telegram (planned)
- 🚧 Discord (planned)
- 🚧 Slack (planned)
Routing
Broadcast groups work alongside existing routing:
{ "bindings": [ { "match": { "channel": "whatsapp", "peer": { "kind": "group", "id": "GROUP_A" } }, "agentId": "alfred" } ], "broadcast": { "GROUP_B": ["agent1", "agent2"] }}GROUP_A: Only alfred responds (normal routing).GROUP_B: agent1 AND agent2 respond (broadcast).
Troubleshooting
1. Agent IDs exist in `agents.list`.2. Peer ID format is correct (e.g., `120363403215116621@g.us`).3. Agents are not in deny lists.
**Debug:**
```bashtail -f ~/.remoteclaw/logs/gateway.log | grep broadcast```**Fix:** Add to broadcast config or remove from bindings.- Reduce number of agents per group.- Use lighter models (sonnet instead of opus).- Check sandbox startup time.Examples
**User sends:** Code snippet.
**Responses:**
- code-formatter: "Fixed indentation and added type hints"- security-scanner: "⚠️ SQL injection vulnerability in line 12"- test-coverage: "Coverage is 45%, missing tests for error cases"- docs-checker: "Missing docstring for function `process_data`"API reference
Config schema
interface RemoteClawConfig { broadcast?: { strategy?: "parallel" | "sequential"; [peerId: string]: string[]; };}Fields
Limitations
- Max agents: No hard limit, but 10+ agents may be slow.
- Shared context: Agents don’t see each other’s responses (by design).
- Message ordering: Parallel responses may arrive in any order.
- Rate limits: All agents count toward WhatsApp rate limits.
Future enhancements
Planned features:
- Shared context mode (agents see each other’s responses)
- Agent coordination (agents can signal each other)
- Dynamic agent selection (choose agents based on message content)
- Agent priorities (some agents respond before others)