Status: supported via plugin (bot token + WebSocket events). Channels, groups, and DMs are supported. Mattermost is a self-hostable team messaging platform; see the official site at mattermost.com for product details and downloads.
Mattermost ships as a plugin and is not bundled with the core install.
Install via CLI (npm registry):
coderclaw plugins install @coderclaw/mattermost
Local checkout (when running from a git repo):
coderclaw plugins install ./extensions/mattermost
If you choose Mattermost during configure/onboarding and a git checkout is detected, CoderClaw will offer the local install path automatically.
Details: Plugins
https://chat.example.com).Minimal config:
{
channels: {
mattermost: {
enabled: true,
botToken: "mm-token",
baseUrl: "https://chat.example.com",
dmPolicy: "pairing",
},
},
}
Set these on the gateway host if you prefer env vars:
MATTERMOST_BOT_TOKEN=...MATTERMOST_URL=https://chat.example.comEnv vars apply only to the default account (default). Other accounts must use config values.
Mattermost responds to DMs automatically. Channel behavior is controlled by chatmode:
oncall (default): respond only when @mentioned in channels.onmessage: respond to every channel message.onchar: respond when a message starts with a trigger prefix.Config example:
{
channels: {
mattermost: {
chatmode: "onchar",
oncharPrefixes: [">", "!"],
},
},
}
Notes:
onchar still responds to explicit @mentions.channels.mattermost.requireMention is honored for legacy configs but chatmode is preferred.channels.mattermost.dmPolicy = "pairing" (unknown senders get a pairing code).coderclaw pairing list mattermostcoderclaw pairing approve mattermost <CODE>channels.mattermost.dmPolicy="open" plus channels.mattermost.allowFrom=["*"].channels.mattermost.groupPolicy = "allowlist" (mention-gated).channels.mattermost.groupAllowFrom (user IDs or @username).channels.mattermost.groupPolicy="open" (mention-gated).Use these target formats with coderclaw message send or cron/webhooks:
channel:<id> for a channeluser:<id> for a DM@username for a DM (resolved via the Mattermost API)Bare IDs are treated as channels.
message action=react with channel=mattermost.messageId is the Mattermost post id.emoji accepts names like thumbsup or :+1: (colons are optional).remove=true (boolean) to remove a reaction.Examples:
message action=react channel=mattermost target=channel:<channelId> messageId=<postId> emoji=thumbsup
message action=react channel=mattermost target=channel:<channelId> messageId=<postId> emoji=thumbsup remove=true
Config:
channels.mattermost.actions.reactions: enable/disable reaction actions (default true).channels.mattermost.accounts.<id>.actions.reactions.Mattermost supports multiple accounts under channels.mattermost.accounts:
{
channels: {
mattermost: {
accounts: {
default: { name: "Primary", botToken: "mm-token", baseUrl: "https://chat.example.com" },
alerts: { name: "Alerts", botToken: "mm-token-2", baseUrl: "https://alerts.example.com" },
},
},
},
}
chatmode: "onmessage".default account.