docs/channels/irc.md
Use IRC when you want OpenClaw in classic channels (#room) and direct messages.
IRC ships as a bundled plugin, but it is configured in the main config under channels.irc.
~/.openclaw/openclaw.json.{
channels: {
irc: {
enabled: true,
host: "irc.example.com",
port: 6697,
tls: true,
nick: "openclaw-bot",
channels: ["#openclaw"],
},
},
}
Prefer a private IRC server for bot coordination. If you intentionally use a public IRC network, common choices include Libera.Chat, OFTC, and Snoonet. Avoid predictable public channels for bot or swarm backchannel traffic.
openclaw gateway run
channels.irc.enabled=false unless direct IRC egress is explicitly approved.channels.irc.dmPolicy defaults to "pairing".channels.irc.groupPolicy defaults to "allowlist".groupPolicy="allowlist", set channels.irc.groups to define allowed channels.channels.irc.tls=true) unless you intentionally accept plaintext transport.There are two separate “gates” for IRC channels:
groupPolicy + groups): whether the bot accepts messages from a channel at all.groupAllowFrom / per-channel groups["#channel"].allowFrom): who is allowed to trigger the bot inside that channel.Config keys:
channels.irc.allowFromchannels.irc.groupAllowFromchannels.irc.groups["#channel"]channels.irc.groupPolicy="open" allows unconfigured channels (still mention-gated by default)Allowlist entries should use stable sender identities (nick!user@host).
Bare nick matching is mutable and only enabled when channels.irc.dangerouslyAllowNameMatching: true.
allowFrom is for DMs, not channelsIf you see logs like:
irc: drop group sender alice!ident@host (policy=allowlist)…it means the sender wasn’t allowed for group/channel messages. Fix it by either:
channels.irc.groupAllowFrom (global for all channels), orchannels.irc.groups["#channel"].allowFromExample (allow anyone in #tuirc-dev to talk to the bot):
{
channels: {
irc: {
groupPolicy: "allowlist",
groups: {
"#tuirc-dev": { allowFrom: ["*"] },
},
},
},
}
Even if a channel is allowed (via groupPolicy + groups) and the sender is allowed, OpenClaw defaults to mention-gating in group contexts.
That means you may see logs like drop channel … (missing-mention) unless the message includes a mention pattern that matches the bot.
To make the bot reply in an IRC channel without needing a mention, disable mention gating for that channel:
{
channels: {
irc: {
groupPolicy: "allowlist",
groups: {
"#tuirc-dev": {
requireMention: false,
allowFrom: ["*"],
},
},
},
},
}
Or to allow all IRC channels (no per-channel allowlist) and still reply without mentions:
{
channels: {
irc: {
groupPolicy: "open",
groups: {
"*": { requireMention: false, allowFrom: ["*"] },
},
},
},
}
If you allow allowFrom: ["*"] in a public channel, anyone can prompt the bot.
To reduce risk, restrict tools for that channel.
{
channels: {
irc: {
groups: {
"#tuirc-dev": {
allowFrom: ["*"],
tools: {
deny: ["group:runtime", "group:fs", "gateway", "nodes", "cron", "browser"],
},
},
},
},
},
}
Use toolsBySender to apply a stricter policy to "*" and a looser one to your nick:
{
channels: {
irc: {
groups: {
"#tuirc-dev": {
allowFrom: ["*"],
toolsBySender: {
"*": {
deny: ["group:runtime", "group:fs", "gateway", "nodes", "cron", "browser"],
},
"id:eigen": {
deny: ["gateway", "nodes", "cron"],
},
},
},
},
},
},
}
Notes:
toolsBySender keys should use id: for IRC sender identity values:
id:eigen or id:[email protected] for stronger matching.id: only."*" is the wildcard fallback.For more on group access vs mention-gating (and how they interact), see: /channels/groups.
To identify with NickServ after connect:
{
channels: {
irc: {
nickserv: {
enabled: true,
service: "NickServ",
password: "your-nickserv-password",
},
},
},
}
Optional one-time registration on connect:
{
channels: {
irc: {
nickserv: {
register: true,
registerEmail: "[email protected]",
},
},
},
}
Disable register after the nick is registered to avoid repeated REGISTER attempts.
Default account supports:
IRC_HOSTIRC_PORTIRC_TLSIRC_NICKIRC_USERNAMEIRC_REALNAMEIRC_PASSWORDIRC_CHANNELS (comma-separated)IRC_NICKSERV_PASSWORDIRC_NICKSERV_REGISTER_EMAILIRC_HOST cannot be set from a workspace .env; see Workspace .env files.
channels.irc.groups and whether mention-gating is dropping messages (missing-mention). If you want it to reply without pings, set requireMention:false for the channel.