Goal: let CoderClaw sit in WhatsApp groups, wake up only when pinged, and keep that thread separate from the personal DM session.
Note: agents.list[].groupChat.mentionPatterns is now used by Telegram/Discord/Slack/iMessage as well; this doc focuses on WhatsApp-specific behavior. For multi-agent setups, set agents.list[].groupChat.mentionPatterns per agent (or use messages.groupChat.mentionPatterns as a global fallback).
mention (default) or always. mention requires a ping (real WhatsApp @-mentions via mentionedJids, regex patterns, or the bot’s E.164 anywhere in the text). always wakes the agent on every message but it should reply only when it can add meaningful value; otherwise it returns the silent token NO_REPLY. Defaults can be set in config (channels.whatsapp.groups) and overridden per group via /activation. When channels.whatsapp.groups is set, it also acts as a group allowlist (include "*" to allow all).channels.whatsapp.groupPolicy controls whether group messages are accepted (open|disabled|allowlist). allowlist uses channels.whatsapp.groupAllowFrom (fallback: explicit channels.whatsapp.allowFrom). Default is allowlist (blocked until you add senders).agent:<agentId>:whatsapp:group:<jid> so commands such as /verbose on or /think high (sent as standalone messages) are scoped to that group; personal DM state is untouched. Heartbeats are skipped for group threads.[Chat messages since your last reply - for context], with the triggering line under [Current message - respond to this]. Messages already in the session are not re-injected.[from: Sender Name (+E164)] so Pi knows who is speaking./activation changes the mode) we inject a short blurb into the system prompt like You are replying inside the WhatsApp group "<subject>". Group members: Alice (+44...), Bob (+43...), … Activation: trigger-only … Address the specific sender noted in the message context. If metadata isn’t available we still tell the agent it’s a group chat.Add a groupChat block to ~/.coderclaw/coderclaw.json so display-name pings work even when WhatsApp strips the visual @ in the text body:
{
channels: {
whatsapp: {
groups: {
"*": { requireMention: true },
},
},
},
agents: {
list: [
{
id: "main",
groupChat: {
historyLimit: 50,
mentionPatterns: ["@?coderclaw", "\\+?15555550123"],
},
},
],
},
}
Notes:
@coderclaw and the raw number with or without +/spaces.mentionedJids when someone taps the contact, so the number fallback is rarely needed but is a useful safety net.Use the group chat command:
/activation mention/activation alwaysOnly the owner number (from channels.whatsapp.allowFrom, or the bot’s own E.164 when unset) can change this. Send /status as a standalone message in the group to see the current activation mode.
@coderclaw … (or include the number). Only allowlisted senders can trigger it unless you set groupPolicy: "open".[from: …] marker so it can address the right person./verbose on, /think high, /new or /reset, /compact) apply only to that group’s session; send them as standalone messages so they register. Your personal DM session remains independent.@coderclaw ping in the group and confirm a reply that references the sender name.--verbose) to see inbound web message entries showing from: <groupJid> and the [from: …] suffix.agent:<agentId>:whatsapp:group:<jid> in the session store (~/.coderclaw/agents/<agentId>/sessions/sessions.json by default); a missing entry just means the group hasn’t triggered a run yet.agents.defaults.typingMode (default: message when unmentioned).